Name: series-workflowr996q Phase: Succeeded StartedAt: 2026-09-02 16:13:48 +0000 UTC FinishedAt: 2026-09-02 19:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[0] Phase: Succeeded StartedAt: 2026-09-02 16:13:48 +0000 UTC FinishedAt: 2026-09-02 16:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 16:13:48 +0000 UTC FinishedAt: 2026-09-02 16:17:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "PPP", "PPPOATM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "PPP", "PPPOATM" ], "series_id": "570eb5aa-d006-478e-a1d3-db9ed1416076" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pppoatm_ioctl", "pppoatm_assign_vcc", "vcc_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1faW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9hc3NpZ25fdmNjJiMzNDssCiAgICAmIzM0O3ZjY19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHBwcG9hdG1fYXNzaWduX3ZjYygpIGVuc3VyaW5nIHRoYXQgYW4gQVRNIFZDQyBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBiYWNrZW5kL3VzZXJfYmFjayBhc3NpZ25lZCBiZWZvcmUgYWxsb2NhdGluZyBhbmQgYXR0YWNoaW5nIGEgbmV3IHBwcG9hdG1fdmNjLCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIGFuZCBzdGF0ZSBjb3JydXB0aW9uIHdoZW4gcmUtYXNzaWduaW5nIGJhY2tlbmRzIG9uIHRoZSBzYW1lIHNvY2tldCB2aWEgQVRNX1NFVEJBQ0tFTkQgaW9jdGwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFUTSBzb2NrZXQgaW9jdGxzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUyNzgyMzE2YzNkZjU1YWFkODU3MWE0ODA3ZTNlNjBhYjgyMDQ5MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDE2OjE1OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkzYmEyMmY0MzdiYzkgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC0zOTYsNiAmIzQzOzM5Niw4IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXG4gXHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXHUwMDI2XHUwMDI2XG4gXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFx1MDAyNlx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjaylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4gXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xuIFx0aWYgKHB2Y2MgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBPQVRNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwb2F0bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2Fzc2lnbl92Y2MmIzM0OywKICAgICYjMzQ7dmNjX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcHBvYXRtX2Fzc2lnbl92Y2MoKSBlbnN1cmluZyB0aGF0IGFuIEFUTSBWQ0MgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgYmFja2VuZC91c2VyX2JhY2sgYXNzaWduZWQgYmVmb3JlIGFsbG9jYXRpbmcgYW5kIGF0dGFjaGluZyBhIG5ldyBwcHBvYXRtX3ZjYywgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBhbmQgc3RhdGUgY29ycnVwdGlvbiB3aGVuIHJlLWFzc2lnbmluZyBiYWNrZW5kcyBvbiB0aGUgc2FtZSBzb2NrZXQgdmlhIEFUTV9TRVRCQUNLRU5EIGlvY3RsLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBVE0gc29ja2V0IGlvY3RscyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1Mjc4MjMxNmMzZGY1NWFhZDg1NzFhNDgwN2UzZTYwYWI4MjA0OTAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNjoxNTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTNiYTIyZjQzN2JjOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTM5Niw2ICYjNDM7Mzk2LDggQEAgc3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZykKIAlpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgJmFtcDsmYW1wOwogCSAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgJmFtcDsmYW1wOyBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKQogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKGF0bXZjYy0mZ3Q7dXNlcl9iYWNrKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKIAlwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpOwogCWlmIChwdmNjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFBQUG9BVE0gQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UsIHNvIGxldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIGRpZmYgYW5kIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGNvZGViYXNlIHN1cnJvdW5kaW5nIGl0LiBUaGUgY2hhbmdlIGlzIHBvaW50aW5nIG1lIHRvIGBuZXQvYXRtL3BwcG9hdG0uY2AsIHdoaWNoIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dC4gTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGF0IHNwZWNpZmljIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzOTYuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IHNlY3Rpb24gb2YgY29kZSBpcyAqZG9pbmcqLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljLCBob3cgaXQmIzM5O3MgaW52b2tlZCwgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBhcmUg4oCTIEtjb25maWcgc2V0dGluZ3MsIGFueSBwb3RlbnRpYWwgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGV2ZXJ5dGhpbmcuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9wcHBvYXRtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0cmV0dXJuIC1FTk9UVFk7XG4gMzgxOlx0fVxuIDM4MjpcdFxuIDM4MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xuIDM4NDpcdFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXG4gMzg1Olx0XHQuaW9jdGwgPSBwcHBvYXRtX2RldnBwcF9pb2N0bCxcbiAzODY6XHR9O1xuIDM4NzpcdFxuIDM4ODpcdHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXG4gMzg5Olx0e1xuIDM5MDpcdFx0c3RydWN0IGF0bV9iYWNrZW5kX3BwcCBiZTtcbiAzOTE6XHRcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcbiAzOTI6XHRcdGludCBlcnI7XG4gMzkzOlx0XG4gMzk0Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YmUsIGFyZywgc2l6ZW9mIGJlKSlcbiAzOTU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzk2Olx0XHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXHUwMDI2XHUwMDI2XG4gMzk3Olx0XHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFx1MDAyNlx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxuIDM5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzOTk6XHRcdGlmIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKVxuIDQwMDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDQwMTpcdFx0cHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTtcbiA0MDI6XHRcdGlmIChwdmNjID09IE5VTEwpXG4gNDAzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQwNDpcdFx0cHZjYy1cdTAwM2VhdG12Y2MgPSBhdG12Y2M7XG4gNDA1Olx0XG4gNDA2Olx0XHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cbiA0MDc6XHRcdGF0b21pY19zZXQoXHUwMDI2cHZjYy1cdTAwM2VpbmZsaWdodCwgTk9ORV9JTkZMSUdIVCk7XG4gNDA4Olx0XHRwdmNjLVx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVx1MDAzZXB1c2g7XG4gNDA5Olx0XHRwdmNjLVx1MDAzZW9sZF9wb3AgPSBhdG12Y2MtXHUwMDNlcG9wO1xuIDQxMDpcdFx0cHZjYy1cdTAwM2VvbGRfb3duZXIgPSBhdG12Y2MtXHUwMDNlb3duZXI7XG4gNDExOlx0XHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG4gNDEyOlx0XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG4gNDEzOlx0XHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG4gNDE0Olx0XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG4gNDE1Olx0XHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbiA0MTY6XHRcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG4gNDE3Olx0XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG4gNDE4Olx0XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuIDQxOTpcdFx0aWYgKGVyciAhPSAwKSB7XG4gNDIwOlx0XHRcdGtmcmVlKHB2Y2MpO1xuIDQyMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDQyMjpcdFx0fVxuIDQyMzpcdFx0YXRtdmNjLVx1MDAzZXVzZXJfYmFjayA9IHB2Y2M7XG4gNDI0Olx0XHRhdG12Y2MtXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcbiA0MjU6XHRcdGF0bXZjYy1cdTAwM2Vwb3AgPSBwcHBvYXRtX3BvcDtcbiA0MjY6XHRcdGF0bXZjYy1cdTAwM2VyZWxlYXNlX2NiID0gcHBwb2F0bV9yZWxlYXNlX2NiO1xuIDQyNzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiA0Mjg6XHRcdGF0bXZjYy1cdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xuIDQyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQUFBvQVRNIFZDQyBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZvciBhc3NpZ25pbmcgVmlydHVhbCBDaGFubmVsIENvbm5lY3Rpb25zIChWQ0NzKSB3aXRoIFBQUG9BVE0gaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdHJhY2luZyB0aGUgY2FsbHMgdG8gYHBwcG9hdG1fYXNzaWduX3ZjY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIEFUTSBhbmQgUFBQb0FUTSBsYXllcnMgaW50ZXJhY3QgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBwaHlzaWNhbCBBVE0gaW50ZXJmYWNlLCB0aGUgUFBQb0FUTSBlbmNhcHN1bGF0aW9uLCBhbmQgdGhlIGV2ZW50dWFsIFZDQyBhbGxvY2F0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGxvb2sgZm9yIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgQVRNIGRldmljZSBzdHJ1Y3R1cmUsIHRoZSBQUFBvQVRNIHNlc3Npb24gc3RhdGUsIGFuZCwgb2YgY291cnNlLCB0aGUgVkNDIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzIHdvcmtzLiBGcm9tIHRoaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9wcHBvYXRtLmM9MzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM4Ny1cbm5ldC9hdG0vcHBwb2F0bS5jOjM4ODpzdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxubmV0L2F0bS9wcHBvYXRtLmMtMzg5LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz00NDA9c3RhdGljIGludCBwcHBvYXRtX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDU4LVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2F0bS9wcHBvYXRtLmM6NDU5Olx0XHRyZXR1cm4gcHBwb2F0bV9hc3NpZ25fdmNjKGF0bXZjYywgYXJncCk7XG5uZXQvYXRtL3BwcG9hdG0uYy00NjAtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzQ3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgcHBpb2F0bS5jIGlvY3RsIFBsdW1iaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgZm9yIHRoaXMgYGlvY3RsYCBjYWxsIHdpdGhpbiB0aGUgYHBwcG9hdG1gIG1vZHVsZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRyYWNpbmcgdGhlIGNhbGxlciB3aXRoaW4gYHBwcG9hdG0uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpwcmVjaXNlbHkqIGhvdyBgcHBwb2F0bV9pb2N0bGAgaXMgaW52b2tlZC4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udmVudGlvbnM/IFdoYXQgc3RydWN0dXJlcyBhcmUgcGFzc2VkPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHJlZ2FyZGluZyBzdGF0ZT8gV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGVycm9yIHBhdGhzIGZyb20gdGhlIGNhbGxlciwgYW5kIGhvdyBhcmUgZXJyb3JzIGhhbmRsZWQ/IFRoaXMgaXMgbGlrZWx5IGEga2V5IGFyZWEgZm9yIGRlYnVnZ2luZyBvciBtb2RpZmljYXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGNvbnRleHQgaXMgY3JpdGljYWwuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyB0aGUgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zIGBpb2N0bGAgb3Igc29tZXRoaW5nIGN1c3RvbSB3aXRoaW4gdGhlIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdC8qIHJlLXByb2Nlc3MgZXZlcnl0aGluZyByZWNlaXZlZCBiZXR3ZWVuIGNvbm5lY3Rpb24gc2V0dXAgYW5kXG4gNDMxOlx0XHQgICBiYWNrZW5kIHNldHVwICovXG4gNDMyOlx0XHR2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKGF0bXZjYyk7XG4gNDMzOlx0XHRyZXR1cm4gMDtcbiA0MzQ6XHR9XG4gNDM1Olx0XG4gNDM2Olx0LypcbiA0Mzc6XHQgKiBUaGlzIGhhbmRsZXMgaW9jdGxzIGFjdHVhbGx5IHBlcmZvcm1lZCBvbiBvdXIgdmNjIC0gd2UgbXVzdCByZXR1cm5cbiA0Mzg6XHQgKiAtRU5PSU9DVExDTUQgZm9yIGFueSB1bnJlY29nbml6ZWQgaW9jdGxcbiA0Mzk6XHQgKi9cbiA0NDA6XHRzdGF0aWMgaW50IHBwcG9hdG1faW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbiA0NDE6XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIDQ0MjpcdHtcbiA0NDM6XHRcdHN0cnVjdCBhdG1fdmNjICphdG12Y2MgPSBBVE1fU0Qoc29jayk7XG4gNDQ0Olx0XHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbiA0NDU6XHRcbiA0NDY6XHRcdGlmIChjbWQgIT0gQVRNX1NFVEJBQ0tFTkQgXHUwMDI2XHUwMDI2IGF0bXZjYy1cdTAwM2VwdXNoICE9IHBwcG9hdG1fcHVzaClcbiA0NDc6XHRcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiA0NDg6XHRcdHN3aXRjaCAoY21kKSB7XG4gNDQ5Olx0XHRjYXNlIEFUTV9TRVRCQUNLRU5EOiB7XG4gNDUwOlx0XHRcdGF0bV9iYWNrZW5kX3QgYjtcbiA0NTE6XHRcdFx0aWYgKGdldF91c2VyKGIsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKSBhcmdwKSlcbiA0NTI6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA0NTM6XHRcdFx0aWYgKGIgIT0gQVRNX0JBQ0tFTkRfUFBQKVxuIDQ1NDpcdFx0XHRcdHJldHVybiAtRU5PSU9DVExDTUQ7XG4gNDU1Olx0XHRcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcbiA0NTY6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDQ1NzpcdFx0XHRpZiAoc29jay1cdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQpXG4gNDU4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDU5Olx0XHRcdHJldHVybiBwcHBvYXRtX2Fzc2lnbl92Y2MoYXRtdmNjLCBhcmdwKTtcbiA0NjA6XHRcdFx0fVxuIDQ2MTpcdFx0Y2FzZSBQUFBJT0NHQ0hBTjpcbiA0NjI6XHRcdFx0cmV0dXJuIHB1dF91c2VyKHBwcF9jaGFubmVsX2luZGV4KFx1MDAyNmF0bXZjY190b19wdmNjKGF0bXZjYyktXHUwMDNlXG4gNDYzOlx0XHRcdCAgICBjaGFuKSwgKGludCBfX3VzZXIgKikgYXJncCkgPyAtRUZBVUxUIDogMDtcbiA0NjQ6XHRcdGNhc2UgUFBQSU9DR1VOSVQ6XG4gNDY1Olx0XHRcdHJldHVybiBwdXRfdXNlcihwcHBfdW5pdF9udW1iZXIoXHUwMDI2YXRtdmNjX3RvX3B2Y2MoYXRtdmNjKS1cdTAwM2VcbiA0NjY6XHRcdFx0ICAgIGNoYW4pLCAoaW50IF9fdXNlciAqKSBhcmdwKSA/IC1FRkFVTFQgOiAwO1xuIDQ2NzpcdFx0fVxuIDQ2ODpcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiA0Njk6XHR9XG4gNDcwOlx0XG4gNDcxOlx0c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XG4gNDcyOlx0XHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG4gNDczOlx0XHQuaW9jdGxcdD0gcHBwb2F0bV9pb2N0bCxcbiA0NzQ6XHR9O1xuIDQ3NTpcdFxuIDQ3NjpcdHN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxuIDQ3NzpcdHtcbiA0Nzg6XHRcdHJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG4gNDc5Olx0XHRyZXR1cm4gMDtcbiA0ODA6XHR9XG4gNDgxOlx0XG4gNDgyOlx0c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxuIDQ4MzpcdHtcbiA0ODQ6XHRcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcbiA0ODU6XHR9XG4gNDg2Olx0XG4gNDg3Olx0bW9kdWxlX2luaXQocHBwb2F0bV9pbml0KTtcbiA0ODg6XHRtb2R1bGVfZXhpdChwcHBvYXRtX2V4aXQpO1xuIDQ4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUFBQb0FUTSBWQ0MgQXNzaWdubWVudCoqCgpPa2F5LCBzbyBgcHBwb2F0bV9hc3NpZ25fdmNjYC4uLiB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIEFUTSBzb2NrZXQsIHVzaW5nIGBpb2N0bGAgd2l0aCBgQVRNX1NFVEJBQ0tFTkRgLCBhbmQgdGhlIGJhY2tlbmQgaXMgc2V0IHRvIFBQUC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZXJlIHdhcyBhIG5hc3R5IGJ1Zy4gSWYgYSBWaXJ0dWFsIENoYW5uZWwgQ29ubmVjdGlvbiAoVkNDKSBhbHJlYWR5IGhhZCBhIGB1c2VyX2JhY2tgIHNldCAob3IgaWYgYEFUTV9TRVRCQUNLRU5EYCB3YXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCBvciB3aXRoIGEgZGlmZmVyZW50IGJhY2tlbmQgaW5pdGlhbGx5KSwgdGhlIGNvZGUgd291bGQgYWxsb2NhdGUgKmFub3RoZXIqIGBwdmNjYCBzdHJ1Y3QsIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBwb2ludGVyIHdpdGggdGhlIG5ldyBvbmUsIGFuZCBhbHNvIGNsb2JiZXIgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYGF0bXZjYy0mZ3Q7cHVzaGAhIE1lbW9yeSBsZWFrIGFuZCBzdGF0ZSBjb3JydXB0aW9uLCBjbGFzc2ljLgoKQnV0IHdpdGggdGhlIHBhdGNoPyBOb3cgaXQganVzdCBjaGVja3MgaWYgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBpcyBzZXQgYW5kIHJldHVybnMgYC1FQlVTWWAgaWYgaXQgaXMuIE11Y2ggY2xlYW5lci4gQSBnb29kIHByb3RlY3Rpb24gbWVhc3VyZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGNhbiBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgc2l0dWF0aW9uIGluIGEgdGVzdGluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIENhbiB3ZSBldmVuICpnZXQqIEFUTSBpbnRlcmZhY2VzIGluIFFFTVU/IFllcywgbG9va3MgbGlrZSB3ZSBjYW4uIFdlJiMzOTt2ZSBnb3QgYHNvY2tldChBRl9BVE1TVkMsIC4uLilgIG9yIGBzb2NrZXQoQUZfQVRNUFZDLCAuLi4pYCBjYWxscywgb3IgZXZlbiBzaW11bGF0ZWQgQVRNIGRldmljZXMsIHBvdGVudGlhbGx5IHVzaW5nIHRoaW5ncyBsaWtlIGBhdG1fdGNwYCBvciBvdGhlciB2aXJ0dWFsIGludGVyZmFjZXMuIFRoYXQmIzM5O3MgZ29vZDsgaXQgZ2l2ZXMgdXMgb3B0aW9ucy4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBuZXQvYXRtL0tjb25maWdgIGFuZCBgbmV0L2F0bS9NYWtlZmlsZWAgZmlsZXMgbmV4dCB0byBzZWUgd2hhdCBBVE0gY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLCB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBob3cgdGhleSBnZXQgYnVpbHQgaW50byB0aGUga2VybmVsIGZvciB0ZXN0aW5nLiBUaGlzJiMzOTtsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgaG93IHRvIHNldCB1cCB0aGUgZW52aXJvbm1lbnQgZWZmZWN0aXZlbHkgZm9yIGZ1enppbmcgYW5kIHZlcmlmeWluZyB0aGlzIHBhdGNoLiBXZSBjYW4gdHJ5IHRvIGNyZWF0ZSBhIHNjZW5hcmlvIHdoZXJlIHdlIGNhbiBkZWxpYmVyYXRlbHkgY2F1c2UgdGhlIGBBVE1fU0VUQkFDS0VORGAgaW9jdGwgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCBzaW11bGF0aW5nIHRoZSBvcmlnaW5hbCBidWcgY29uZGl0aW9uIGFuZCBwcm92aW5nIHRoZSBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEFUTVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgQVRNIGlzIGEgaGlnaC1zcGVlZCBuZXR3b3JraW5nIHRlY2hub2xvZ3kgZm9yIExvY2FsIEFyZWEgTmV0d29ya3NcbiAgMTA6XHRcdCAgYW5kIFdpZGUgQXJlYSBOZXR3b3Jrcy4gIEl0IHVzZXMgYSBmaXhlZCBwYWNrZXQgc2l6ZSBhbmQgaXNcbiAgMTE6XHRcdCAgY29ubmVjdGlvbiBvcmllbnRlZCwgYWxsb3dpbmcgZm9yIHRoZSBuZWdvdGlhdGlvbiBvZiBtaW5pbXVtXG4gIDEyOlx0XHQgIGJhbmR3aWR0aCByZXF1aXJlbWVudHMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxuICAxNTpcdFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXG4gIDE2Olx0XHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIHNldCBvZiB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGFjdHVhbGx5IG1ha2UgdXNlXG4gIDE5Olx0XHQgIG9mIEFUTS4gIFNlZSB0aGUgZmlsZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XHUwMDNlIGZvclxuICAyMDpcdFx0ICBmdXJ0aGVyIGRldGFpbHMuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIEFUTV9CUjI2ODRcbiAgMjM6XHRcdHRyaXN0YXRlIFwmIzM0O1JGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBBVE0gXHUwMDI2XHUwMDI2IElORVRcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdCAgQVRNIFBWQ3MgY2FuIGNhcnJ5IGV0aGVybmV0IFBEVXMgYWNjb3JkaW5nIHRvIFJGQzI2ODQgKGZvcm1lcmx5IDE0ODMpXG4gIDI3Olx0XHQgIFRoaXMgZGV2aWNlIHdpbGwgYWN0IGxpa2UgYW4gZXRoZXJuZXQgZnJvbSB0aGUga2VybmVscyBwb2ludCBvZiB2aWV3LFxuICAyODpcdFx0ICB3aXRoIHRoZSB0cmFmZmljIGJlaW5nIGNhcnJpZWQgYnkgQVRNIFBWQ3MgKGN1cnJlbnRseSAxIFBWQy9kZXZpY2UpLlxuICAyOTpcdFx0ICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VkIG92ZXIgRFNMIGxpbmVzLiAgSWYgaW4gZG91YnQsIHNheSBOLlxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXG4gIDMyOlx0XHRib29sIFwmIzM0O1Blci1WQyBJUCBmaWx0ZXIga2x1ZGdlXCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIEFUTV9CUjI2ODRcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgbWVjaGFuaXNtIGZvciB1c2VycyB3aG8gbmVlZCB0byB0ZXJtaW5hdGUgYVxuICAzNjpcdFx0ICBsYXJnZSBudW1iZXIgb2YgSVAtb25seSB2Y2MmIzM5O3MuICBEbyBub3QgZW5hYmxlIHRoaXMgdW5sZXNzIHlvdSBhcmUgc3VyZVxuICAzNzpcdFx0ICB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgRG93biBQUFBPQVRNIGluIHRoZSBLY29uZmlnIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgUFBQT0FUTWAgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgZXhlcmNpc2Ugd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgZ29pbmcgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgYEtjb25maWdgIGZpbGUgd2hlcmUgYFBQUE9BVE1gIGlzIGZpcnN0IGludHJvZHVjZWQsIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIHByb21wdHMsIGFuZCB1bHRpbWF0ZWx5LCBpdHMgaW1wbGljYXRpb25zIGZvciB0aGUgYnVpbGQuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgaXMgbmVzdGVkLCBzbyBJIHdpbGwgbmVlZCB0byBpdGVyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBvYXRtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbm5ldC9hdG0vTWFrZWZpbGUtMTEtXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSAmIzQzOz0gcHBwb2F0bS5vXG4tLVxubmV0L2F0bS9pb2N0bC5jPTQzPXN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2F0bS9pb2N0bC5jLTk0LVx0XHRjYXNlIEFUTV9CQUNLRU5EX1BQUDpcbm5ldC9hdG0vaW9jdGwuYzo5NTpcdFx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDtwcHBvYXRtXCYjMzQ7KTtcbm5ldC9hdG0vaW9jdGwuYy05Ni1cdFx0XHRicmVhaztcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG5uZXQvYXRtL3BwcG9hdG0uYzoyOi8qIG5ldC9hdG0vcHBwb2F0bS5jIC0gUkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNSAqL1xubmV0L2F0bS9wcHBvYXRtLmMtMy1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00OS1cbm5ldC9hdG0vcHBwb2F0bS5jOjUwOmVudW0gcHBwb2F0bV9lbmNhcHMge1xubmV0L2F0bS9wcHBvYXRtLmMtNTEtXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTU1LVxubmV0L2F0bS9wcHBvYXRtLmM6NTY6c3RydWN0IHBwcG9hdG1fdmNjIHtcbm5ldC9hdG0vcHBwb2F0bS5jLTU3LVx0c3RydWN0IGF0bV92Y2NcdCphdG12Y2M7XHQvKiBWQ0MgZGVzY3JpcHRvciAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTYyLVx0XHRcdFx0XHQvKiBrZWVwIG9sZCBwdXNoL3BvcCBmb3IgZGV0YWNoaW5nICovXG5uZXQvYXRtL3BwcG9hdG0uYzo2MzpcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xubmV0L2F0bS9wcHBvYXRtLmMtNjQtXHRhdG9taWNfdCBpbmZsaWdodDtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz04Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cbm5ldC9hdG0vcHBwb2F0bS5jOjg5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xubmV0L2F0bS9wcHBvYXRtLmM6OTE6XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjayk7XG5uZXQvYXRtL3BwcG9hdG0uYy05Mi19XG5uZXQvYXRtL3BwcG9hdG0uYy05My1cbm5ldC9hdG0vcHBwb2F0bS5jOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICpjaGFuX3RvX3B2Y2MoY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxubmV0L2F0bS9wcHBvYXRtLmMtOTUte1xubmV0L2F0bS9wcHBvYXRtLmM6OTY6XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTk3LX1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDMtICovXG5uZXQvYXRtL3BwcG9hdG0uYzoxMDQ6c3RhdGljIHZvaWQgcHBwb2F0bV93YWtldXBfc2VuZGVyKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbm5ldC9hdG0vcHBwb2F0bS5jLTEwNS17XG5uZXQvYXRtL3BwcG9hdG0uYzoxMDY6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBmcm9tX3Rhc2tsZXQocHZjYywgdCwgd2FrZXVwX3Rhc2tsZXQpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTA3LVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTExMC1cbm5ldC9hdG0vcHBwb2F0bS5jOjExMTpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XG5uZXQvYXRtL3BwcG9hdG0uYzoxMTM6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTE0LVxubmV0L2F0bS9wcHBvYXRtLmMtMTE1LVx0Lypcbm5ldC9hdG0vcHBwb2F0bS5jOjExNjpcdCAqIEFzIGluIHBwcG9hdG1fcG9wKCksIGl0JiMzOTtzIHNhZmUgdG8gY2xlYXIgdGhlIEJMT0NLRUQgYml0IGhlcmUgYmVjYXVzZVxubmV0L2F0bS9wcHBvYXRtLmM6MTE3Olx0ICogdGhlIHdha2V1cCAqY2FuJiMzOTt0KiByYWNlIHdpdGggcHBwb2F0bV9zZW5kKCkuIFRoZXkgYm90aCBob2xkIHRoZSBQUFBcbm5ldC9hdG0vcHBwb2F0bS5jLTExOC1cdCAqIGNoYW5uZWwmIzM5O3MgLVx1MDAzZWRvd25sIGxvY2suIEFuZCB0aGUgcG90ZW50aWFsIHJhY2Ugd2l0aCAqc2V0dGluZyogaXQsXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTk6XHQgKiB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlLWNoZWNrIGRhbmNlIGluIHBwcG9hdG1fbWF5X3NlbmQoKSwgZG9lc24mIzM5O3Rcbm5ldC9hdG0vcHBwb2F0bS5jOjEyMDpcdCAqIGV4aXN0IGhlcmUuIEluIHRoZSBzb2NrX293bmVkX2J5X3VzZXIoKSBjYXNlIGluIHBwcG9hdG1fc2VuZCgpLCB3ZVxubmV0L2F0bS9wcHBvYXRtLmMtMTIxLVx0ICogc2V0IHRoZSBCTE9DS0VEIGJpdCB3aGlsZSB0aGUgc29ja2V0IGlzIHN0aWxsIGxvY2tlZC4gV2Uga25vdyB0aGF0XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTMzLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzUte1xubmV0L2F0bS9wcHBvYXRtLmM6MTM2Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTEzNy1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXHQgKiBmZWFyIG9mIHJhY2UgY29uZGl0aW9ucyB3aGVyZSB3ZSBjbGVhciB0aGUgQkxPQ0tFRCBmbGFnIGp1c3QgYXMgd2Vcbm5ldC9hdG0vcHBwb2F0bS5jOjE0NDpcdCAqIHJlZnVzZSBhbm90aGVyIHBhY2tldCBpbiBwcHBvYXRtX3NlbmQoKS4gVGhpcyB3YXMgcXVpdGUgaW5lZmZpY2llbnQuXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDUtXHQgKlxubmV0L2F0bS9wcHBvYXRtLmM6MTQ2Olx0ICogSW4gZmFjdCBpdCYjMzk7cyBPSy4gVGhlIFBQUCBjb3JlIHdpbGwgb25seSBldmVyIGNhbGwgcHBwb2F0bV9zZW5kKClcbm5ldC9hdG0vcHBwb2F0bS5jLTE0Ny1cdCAqIHdoaWxlIGhvbGRpbmcgdGhlIGNoYW5uZWwtXHUwMDNlZG93bmwgbG9jay4gQW5kIHBwcF9vdXRwdXRfd2FrZXVwKCkgYXNcbm5ldC9hdG0vcHBwb2F0bS5jLTE0OC1cdCAqIGNhbGxlZCBieSB0aGUgdGFza2xldCB3aWxsICphbHNvKiBncmFiIHRoYXQgbG9jay4gU28gZXZlbiBpZiBhbm90aGVyXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDk6XHQgKiBDUFUgaXMgaW4gcHBwb2F0bV9zZW5kKCkgcmlnaHQgbm93LCB0aGUgdGFza2xldCBpc24mIzM5O3QgZ29pbmcgdG8gcmFjZVxubmV0L2F0bS9wcHBvYXRtLmMtMTUwLVx0ICogd2l0aCBpdC4gVGhlIHdha2V1cCAqd2lsbCogaGFwcGVuIGFmdGVyIHRoZSBvdGhlciBDUFUgaXMgc2FmZWx5IG91dFxubmV0L2F0bS9wcHBvYXRtLmM6MTUxOlx0ICogb2YgcHBwb2F0bV9zZW5kKCkgYWdhaW4uXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTItXHQgKlxubmV0L2F0bS9wcHBvYXRtLmM6MTUzOlx0ICogU28gaWYgdGhlIENQVSBpbiBwcHBvYXRtX3NlbmQoKSBoYXMgYWxyZWFkeSBzZXQgdGhlIEJMT0NLRUQgYml0IGFuZFxubmV0L2F0bS9wcHBvYXRtLmMtMTU0LVx0ICogaXQgYWJvdXQgdG8gcmV0dXJuLCB0aGF0JiMzOTtzIGZpbmUuIFdlIHRyaWdnZXIgYSB3YWtldXAgd2hpY2ggd2lsbFxubmV0L2F0bS9wcHBvYXRtLmM6MTU1Olx0ICogaGFwcGVuIGxhdGVyLiBBbmQgaWYgdGhlIENQVSBpbiBwcHBvYXRtX3NlbmQoKSAqaGFzbiYjMzk7dCogc2V0IHRoZVxubmV0L2F0bS9wcHBvYXRtLmMtMTU2LVx0ICogQkxPQ0tFRCBiaXQgeWV0LCB0aGF0JiMzOTtzIGZpbmUgdG9vIGJlY2F1c2Ugb2YgdGhlIGRvdWJsZSBjaGVjayBpblxubmV0L2F0bS9wcHBvYXRtLmM6MTU3Olx0ICogcHBwb2F0bV9tYXlfc2VuZCgpIHdoaWNoIGlzIGNvbW1lbnRlZCB0aGVyZS5cbm5ldC9hdG0vcHBwb2F0bS5jLTE1OC1cdCAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE2Ni0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE2NzpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtMTY4LXtcbm5ldC9hdG0vcHBwb2F0bS5jOjE2OTpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcbm5ldC9hdG0vcHBwb2F0bS5jLTE3MC1cdHB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE4MC0vKiBDYWxsZWQgd2hlbiBhbiBBQUw1IFBEVSBjb21lcyBpbiAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTgxOnN0YXRpYyB2b2lkIHBwcG9hdG1fcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMTgyLXtcbm5ldC9hdG0vcHBwb2F0bS5jOjE4MzpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXHRwcl9kZWJ1ZyhcJiMzNDtcXG5cJiMzNDspO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE4OS1cdFx0bW9kdWxlID0gcHZjYy1cdTAwM2VvbGRfb3duZXI7XG5uZXQvYXRtL3BwcG9hdG0uYzoxOTA6XHRcdHBwcG9hdG1fdW5hc3NpZ25fdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xOTEtXHRcdGF0bXZjYy1cdTAwM2VwdXNoKGF0bXZjYywgTlVMTCk7XHQvKiBQYXNzIGFsb25nIGJhZCBuZXdzICovXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjMzLVxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxubmV0L2F0bS9wcHBvYXRtLmMtMjM1LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTYtXHQvKlxubmV0L2F0bS9wcHBvYXRtLmM6MjU3Olx0ICogV2UgbWF5IGhhdmUgcmFjZWQgd2l0aCBwcHBvYXRtX3BvcCgpLiBJZiBpdCByYW4gZm9yIHRoZVxubmV0L2F0bS9wcHBvYXRtLmMtMjU4LVx0ICogbGFzdCBwYWNrZXQgaW4gdGhlIHF1ZXVlLCAqanVzdCogYmVmb3JlIHdlIHNldCB0aGUgQkxPQ0tFRFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTI2NC1cdCAqIHJ1biB0aGUgd2FrZXVwIHRhc2tsZXQuIEFub3RoZXIgd2FrZXVwIHdpbGwgbmV2ZXIgaHVydC5cbm5ldC9hdG0vcHBwb2F0bS5jOjI2NTpcdCAqIElmIHBwcG9hdG1fcG9wKCkgaXMgcnVubmluZyBidXQgaGFzbiYjMzk7dCBnb3QgYXMgZmFyIGFzIG1ha2luZ1xubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVx0ICogc3BhY2Ugb24gdGhlIHF1ZXVlIHlldCwgdGhlbiBpdCBoYXNuJiMzOTt0IGNoZWNrZWQgdGhlIEJMT0NLRURcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjktXHQgKiB0YWtpbmcgdGhlIFBQUCBjaGFubmVsJiMzOTtzIC1cdTAwM2Vkb3dubCBsb2NrLCB3aGljaCBpcyBoZWxkIGJ5IHRoZVxubmV0L2F0bS9wcHBvYXRtLmM6MjcwOlx0ICogY29kZSBwYXRoIHRoYXQgY2FsbHMgcHBwb2F0bV9zZW5kKCksIGFuZCBpcyB0aHVzIGdvaW5nIHRvXG5uZXQvYXRtL3BwcG9hdG0uYy0yNzEtXHQgKiB3YWl0IGZvciB1cyB0byBmaW5pc2guXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjg4LSNkZWZpbmUgRFJPUF9QQUNLRVQgMVxubmV0L2F0bS9wcHBvYXRtLmM6Mjg5OnN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9hdG0vcHBwb2F0bS5jLTI5MC17XG5uZXQvYXRtL3BwcG9hdG0uYzoyOTE6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG5uZXQvYXRtL3BwcG9hdG0uYy0yOTItXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMyMy1cdFx0XHRpZiAobiAhPSBOVUxMIFx1MDAyNlx1MDAyNlxubmV0L2F0bS9wcHBvYXRtLmM6MzI0Olx0XHRcdCAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLVx1MDAzZXRydWVzaXplKSkge1xubmV0L2F0bS9wcHBvYXRtLmMtMzI1LVx0XHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMzMy1cdFx0XHR9XG5uZXQvYXRtL3BwcG9hdG0uYzozMzQ6XHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMzNS1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzM4LVx0Y2FzZSBlX3ZjOlxubmV0L2F0bS9wcHBvYXRtLmM6MzM5Olx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTM0MC1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzY4LS8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG5uZXQvYXRtL3BwcG9hdG0uYzozNjk6c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG5uZXQvYXRtL3BwcG9hdG0uYy0zNzAtXHR1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0zODItXG5uZXQvYXRtL3BwcG9hdG0uYzozODM6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG5uZXQvYXRtL3BwcG9hdG0uYzozODQ6XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4NTpcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxubmV0L2F0bS9wcHBvYXRtLmMtMzg2LX07XG5uZXQvYXRtL3BwcG9hdG0uYy0zODctXG5uZXQvYXRtL3BwcG9hdG0uYzozODg6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbm5ldC9hdG0vcHBwb2F0bS5jLTM4OS17XG5uZXQvYXRtL3BwcG9hdG0uYy0zOTAtXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xubmV0L2F0bS9wcHBvYXRtLmM6MzkxOlx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmMtMzkyLVx0aW50IGVycjtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MTEtXHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTI6XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MTMtXHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTQ6XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MTUtXHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbm5ldC9hdG0vcHBwb2F0bS5jLTQxNi1cdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTc6XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG5uZXQvYXRtL3BwcG9hdG0uYy00MTgtXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQyMy1cdGF0bXZjYy1cdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmM6NDI0Olx0YXRtdmNjLVx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MjU6XHRhdG12Y2MtXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MjY6XHRhdG12Y2MtXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcbm5ldC9hdG0vcHBwb2F0bS5jLTQyNy1cdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDM5LSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6NDQwOnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxubmV0L2F0bS9wcHBvYXRtLmMtNDQxLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDQ1LVxubmV0L2F0bS9wcHBvYXRtLmM6NDQ2Olx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcdTAwMjZcdTAwMjYgYXRtdmNjLVx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxubmV0L2F0bS9wcHBvYXRtLmMtNDQ3LVx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ1OC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9hdG0vcHBwb2F0bS5jOjQ1OTpcdFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xubmV0L2F0bS9wcHBvYXRtLmMtNDYwLVx0XHR9XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDcwLVxubmV0L2F0bS9wcHBvYXRtLmM6NDcxOnN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIHBwcG9hdG1faW9jdGxfb3BzID0ge1xubmV0L2F0bS9wcHBvYXRtLmMtNDcyLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxubmV0L2F0bS9wcHBvYXRtLmM6NDczOlx0LmlvY3RsXHQ9IHBwcG9hdG1faW9jdGwsXG5uZXQvYXRtL3BwcG9hdG0uYy00NzQtfTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3NS1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ3NjpzdGF0aWMgaW50IF9faW5pdCBwcHBvYXRtX2luaXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Ny17XG5uZXQvYXRtL3BwcG9hdG0uYzo0Nzg6XHRyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xubmV0L2F0bS9wcHBvYXRtLmMtNDc5LVx0cmV0dXJuIDA7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDgxLVxubmV0L2F0bS9wcHBvYXRtLmM6NDgyOnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvYXRtX2V4aXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ4My17XG5uZXQvYXRtL3BwcG9hdG0uYzo0ODQ6XHRkZXJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG5uZXQvYXRtL3BwcG9hdG0uYy00ODUtfVxubmV0L2F0bS9wcHBvYXRtLmMtNDg2LVxubmV0L2F0bS9wcHBvYXRtLmM6NDg3Om1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XG5uZXQvYXRtL3BwcG9hdG0uYzo0ODg6bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NjgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biB0aGUgUFBQT0FUTSBLY29uZmlnIFN5bWJvbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIFBQUE9BVE0uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkmIzM5O2xsIGFwcHJvYWNoIHRoaXMgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUsIHN0YXJ0aW5nIHdpdGggdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9ucy4KCkZpcnN0LCBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gUFBQT0FUTSBpcyBvYnZpb3VzbHkgYSBuZXR3b3JraW5nIHByb3RvY29sLCBzbyBhIGRpdmUgaW50byB0aGUgYG5ldC9gIGRpcmVjdG9yeSBhbmQgaXRzIGBLY29uZmlnYCBmaWxlcyBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB0aGF0IHNlZW1zIHJlbGV2YW50IOKAkyBtYXliZSBuYW1lZCBgYXRtYCwgYHBwcGAsIG9yIGBwcHBvYWAsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIGxpa2UgYHBwcG9hdG1gLiBJIGtub3cgdGhlIG5hbWluZyBjb252ZW50aW9ucyBjYW4gYmUgYSBiaXTigKYgd2VsbCwgdW5wcmVkaWN0YWJsZSBzb21ldGltZXMsIHNvIEnigJlsbCBuZWVkIHRvIHRoaW5rIGxhdGVyYWxseSBpZiB0aGUgb2J2aW91cyBzZWFyY2ggdGVybXMgZG9uJiMzOTt0IGhpdCBpbW1lZGlhdGVseS4KCklmIHRoYXQgaW5pdGlhbCBicm9hZCBzZWFyY2ggZG9lc27igJl0IHlpZWxkIGFueXRoaW5nIHVzZWZ1bCwgSeKAmWxsIG5lZWQgdG8gcmVmaW5lIG15IGFwcHJvYWNoLiBJ4oCZbGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtb3JlIHNwZWNpZmljIHN1Yi1kaXJlY3RvcmllcyBhbmQgcmVsYXRlZCBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIElzIFBQUE9BVE0gbGlrZWx5IHRyZWF0ZWQgYXMgYSBkaXN0aW5jdCBpbnRlcmZhY2U/IE9yIGlzIGl0IHBhcnQgb2YgYSBsYXJnZXIgUFBQIHN1cHBvcnQgY29uZmlndXJhdGlvbj8gRG9lcyBpdCBsZWFuIG9uIEFUTSBkcml2ZXJzPyBJIGtub3cgaXQgZGVwZW5kcywgc28gSSYjMzk7bGwgZm9sbG93IHRoZSBicmVhZGNydW1icyBmcm9tIHdoZXJlIGl0IGxvb2tzIGxpa2UgaXQgYmVsb25ncy4gSeKAmWxsIGJlIHRyeWluZyB0byBpZGVudGlmeSBkZXBlbmRlbmNpZXMgb3IgY29ubmVjdGlvbnMgdG8gb3RoZXIgc3ltYm9scy4KClVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBzeW1ib2wgdGhhdCwgd2hlbiBlbmFibGVkLCBpbmNsdWRlcyB0aGUgbmVjZXNzYXJ5IGRyaXZlcnMsIG1vZHVsZXMsIG9yIGNvbmZpZ3VyYXRpb25zIGZvciBQUFBPQVRNLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgaXQgbWlnaHQgYmUgYSAqYm9vbGVhbiogc3ltYm9sLCBvciBwb3RlbnRpYWxseSBhICp0cmlzdGF0ZSogaWYgaXQgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBPbmNlIEkgaGF2ZSB0aGUgc3ltYm9sLCBJIGNhbiBzdGFydCBsb29raW5nIGZvciBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYW5kIGdldCBiYWNrIHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUE9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz05Mj1jb25maWcgUFBQX01VTFRJTElOS1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEwNDpjb25maWcgUFBQT0FUTVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBQUFAgQ29uZmlndXJhdGlvbiBTcGFjZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgdG8gd29yayBvbiwgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIFBQUCBjb25maWd1cmF0aW9uIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUFBQIGRyaXZlci4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSByZWxldmFudCBzZWN0aW9uLCBhcm91bmQgbGluZSAxMDQgaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhhdCBsb2NhdGlvbiBzaG91bGQgY29udGFpbiB0aGUgY29yZSBvcHRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiBob3cgYWxsIG9mIHRoZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdCAgdmVyc2lvbiBvZiB0aGUgcHBwZCBkYWVtb24gd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG11bHRpbGluayBwcm90b2NvbC5cbiAxMDE6XHRcbiAxMDI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMDM6XHRcbiAxMDQ6XHRjb25maWcgUFBQT0FUTVxuIDEwNTpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG4gMTA2Olx0XHRkZXBlbmRzIG9uIEFUTVxuIDEwNzpcdFx0aGVscFxuIDEwODpcdFx0ICBTdXBwb3J0IFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGVuY2Fwc3VsYXRlZCBpbiBBVE0gZnJhbWVzLlxuIDEwOTpcdFx0ICBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHlldCBjb21wbHkgd2l0aCBzZWN0aW9uIDggb2YgUkZDMjM2NCxcbiAxMTA6XHRcdCAgd2hpY2ggY2FuIGxlYWQgdG8gYmFkIHJlc3VsdHMgaWYgdGhlIEFUTSBwZWVyIGxvc2VzIHN0YXRlIGFuZFxuIDExMTpcdFx0ICBjaGFuZ2VzIGl0cyBlbmNhcHN1bGF0aW9uIHVuaWxhdGVyYWxseS5cbiAxMTI6XHRcbiAxMTM6XHRjb25maWcgUFBQT1hcbiAxMTQ6XHRcdHRyaXN0YXRlXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIFBQUE9FXG4gMTE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBFdGhlcm5ldFwmIzM0O1xuIDExODpcdFx0c2VsZWN0IFBQUE9YXG4gMTE5Olx0XHRoZWxwXG4gMTIwOlx0XHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxuIDEyMTpcdFxuIDEyMjpcdFx0ICBUbyB3b3JrIGluIGNsaWVudCBtb2RlLCBwcHBkIHZlcnNpb24gMi40LjIgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuXG4gMTIzOlx0XHQgIFRvIHdvcmsgaW4gc2VydmVyIG1vZGUsIHRoZSBwcHBvZS1zZXJ2ZXIgY29tbWFuZCBmcm9tIHRoZSBSUC1QUFBvRVxuIDEyNDpcdFx0ICBwYWNrYWdlIGlzIGFsc28gcmVxdWlyZWQsIGF2YWlsYWJsZSBhdFxuIDEyNTpcdFx0ICBcdTAwM2NodHRwczovL2RpYW5uZS5za29sbC5jYS9wcm9qZWN0cy9ycC1wcHBvZS9cdTAwM2UuXG4gMTI2Olx0XG4gMTI3Olx0Y2hvaWNlXG4gMTI4Olx0XHRwcm9tcHQgXCYjMzQ7TnVtYmVyIG9mIFBQUG9FIGhhc2ggYml0c1wmIzM0O1xuIDEyOTpcdFx0ZGVmYXVsdCBQUFBPRV9IQVNIX0JJVFNfNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgxOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBQUE9BVE0gQnVpbGQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgUFBQT0FUTSBpcyBhY3R1YWxseSBidWlsdC4gSXQmIzM5O3MgYSBiaXQgb2YgYW4gb2xkZXIgdGVjaG5vbG9neSwgYW5kIHRoZSBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIGEgbGl0dGxlIG9ic2N1cmUsIHNvIEkgc2hvdWxkIGRpdmUgaW50byB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBkaXJlY3RseS4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIGV4YW1pbmUgdGhlIE1ha2VmaWxlcyBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlYCwgdGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBnaXZlbiBpdHMgYXNzb2NpYXRpb24gd2l0aCBQUFAuIEFuZCBzaW5jZSBQUFBPQVRNIGNvbWJpbmVzIFBQUCBhbmQgQVRNLCBJJiMzOTtsbCBhbHNvIGNoZWNrIG91dCBgbmV0L2F0bS9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByZWxldmFudCBidWlsZCBsb2dpYyBvciBkZXBlbmRlbmNpZXMgaW4gdGhlcmUuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMsIGFueSBvdGhlciBkcml2ZXJzIG9yIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYWxvbmdzaWRlIFBQUE9BVE0sIGFuZCB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGUgbW9kdWxlLiBUaGlzIHNob3VsZCBoZWxwIG1lIGNvbmZpcm0gdGhhdCBJIGhhdmUgYW4gYWNjdXJhdGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUE9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9NYWtlZmlsZT0xMD1hdG0tJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xubmV0L2F0bS9NYWtlZmlsZS0xMS1cbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICYjNDM7PSBwcHBvYXRtLm9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz01MD1lbnVtIHBwcG9hdG1fZW5jYXBzIHtcbm5ldC9hdG0vcHBwb2F0bS5jOjUxOlx0ZV9hdXRvZGV0ZWN0ID0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCxcbm5ldC9hdG0vcHBwb2F0bS5jOjUyOlx0ZV92YyA9IFBQUE9BVE1fRU5DQVBTX1ZDLFxubmV0L2F0bS9wcHBvYXRtLmM6NTM6XHRlX2xsYyA9IFBQUE9BVE1fRU5DQVBTX0xMQyxcbm5ldC9hdG0vcHBwb2F0bS5jLTU0LX07XG4tLVxubmV0L2F0bS9wcHBvYXRtLmM9Mzg4PXN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzk1LVx0XHRyZXR1cm4gLUVGQVVMVDtcbm5ldC9hdG0vcHBwb2F0bS5jOjM5NjpcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbm5ldC9hdG0vcHBwb2F0bS5jOjM5NzpcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG5uZXQvYXRtL3BwcG9hdG0uYy0zOTgtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBQUFAgb3ZlciBBVE0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgc2VlIGhvdyB0aGUgUFBQIG92ZXIgQVRNIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBzbyBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLiBJdCBzZWVtcyB0aGF0IFBQUE9BVE0gcmVsaWVzIG9uIGJvdGggQVRNIGFuZCBQUFAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljcyBvZiB0aGlzIHJlbGF0aW9uc2hpcCwgc28gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhyb3VnaCB0aGUgZmlyc3QgNTAgbGluZXMgb2YgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgbGlua2VkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBQUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNMSENcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgaXMgYSBuZXdlciBhbmQgYmV0dGVyIFNMSVAuICBJdCBzZXJ2ZXNcbiAgMTE6XHRcdCAgdGhlIHNhbWUgcHVycG9zZTogc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgdGVsZXBob25lIChhbmQgb3RoZXJcbiAgMTI6XHRcdCAgc2VyaWFsKSBsaW5lcy4gIEFzayB5b3VyIGFjY2VzcyBwcm92aWRlciBpZiB0aGV5IHN1cHBvcnQgaXQsIGJlY2F1c2VcbiAgMTM6XHRcdCAgb3RoZXJ3aXNlIHlvdSBjYW4mIzM5O3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcbiAgMTQ6XHRcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcdTAwM2UuICBNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgdmVyc2lvbiBvZiBwcHBkXG4gIDE4Olx0XHQgIHJlY29tbWVuZGVkIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAxOTpcdFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXG4gIDIyOlx0XHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXG4gIDIzOlx0XHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcbiAgMjQ6XHRcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxuICAyNTpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xuICAyNjpcdFx0ICB0aGUgbmV4dCBvcHRpb24sIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDsuICBGb3IgUFBQIG92ZXJcbiAgMjc6XHRcdCAgc3luY2hyb25vdXMgbGluZXMsIHlvdSBzaG91bGQgc2F5IFkgKG9yIE0pIGhlcmUgYW5kIHRvIFwmIzM0O1N1cHBvcnRcbiAgMjg6XHRcdCAgc3luY2hyb25vdXMgUFBQXCYjMzQ7LCBiZWxvdy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgeW91IHNhaWQgWSB0byBcJiMzNDtWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXCYjMzQ7IGFib3ZlLCB0aGVuXG4gIDMxOlx0XHQgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGUgUFBQIGRyaXZlciBpbnRvIHRoZSBrZXJuZWw7IHlvdSBjYW4gdGhlbiBvbmx5XG4gIDMyOlx0XHQgIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNXG4gIDMzOlx0XHQgIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHBwX2dlbmVyaWMuXG4gIDM0Olx0XG4gIDM1Olx0aWYgUFBQXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIFBQUF9CU0RDT01QXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXCYjMzQ7XG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcbiAgNDE6XHRcdCAgdGhlIExaVyBjb21wcmVzc2lvbiBtZXRob2QgdG8gY29tcHJlc3MgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpc1xuICA0MjpcdFx0ICBzZW50IG92ZXIgdGhlIHdpcmUuIFRoZSBtYWNoaW5lIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rXG4gIDQzOlx0XHQgICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXG4gIDQ0Olx0XHQgIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gRXZlbiBpZiB0aGV5IGRvbiYjMzk7dCBzdXBwb3J0IGl0LFxuICA0NTpcdFx0ICBpdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuXG4gIDQ2Olx0XG4gIDQ3Olx0XHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7LFxuICA0ODpcdFx0ICBhYm92ZSkgaXMgcHJlZmVyYWJsZSB0byBCU0QtQ29tcHJlc3MsIGJlY2F1c2UgaXQgY29tcHJlc3NlcyBiZXR0ZXJcbiAgNDk6XHRcdCAgYW5kIGlzIHBhdGVudC1mcmVlLlxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0dXAgYW5kIEkgc2VlIHRoYXQgYFBQUE9BVE1gIGlzIG5lc3RlZCByaWdodCBpbnNpZGUgYGlmIFBQUGAsIHdoaWNoIHRoZW4gaW5jbHVkZXMgYGNvbmZpZyBQUFBPQVRNYC4gQ2xlYXJseSwgYFBQUE9BVE1gIGlzIGRlcGVuZGVudCBvbiBgUFBQYCDigJMgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBvbmUuIEFuZCwgYnkgZXh0ZW5zaW9uLCBpdCBhbHNvIG5lZWRzIGBBVE1gLCBzaW5jZSBpdCYjMzk7cyAmIzM0O1BQUG9BKipUTSoqJiMzNDsuIFdlIGFsbCBrbm93IHRoaXMsIGJ1dCBsZXQmIzM5O3MgYmUgdGhvcm91Z2guCgpNeSBuZXh0IHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMsIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0sIHRoYXQgSSBtaWdodCBiZSBtaXNzaW5nIGZvciBlaXRoZXIgYFBQUGAgb3IgYEFUTWA/IEkgbmVlZCB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgaGVyZS4KClNvLCBJ4oCZbSBkaWdnaW5nIGludG8gdGhlIHNvdXJjZS4gSW4gYGRyaXZlcnMvbmV0L0tjb25maWdgLCBob3cgaXMgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFBQUCBpbXBsZW1lbnRhdGlvbiAoYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCkgYmVpbmcgc291cmNlZD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSBjaGFpbiBiYWNrIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgc3VidGxlIHRoYXQgY291bGQgaW1wYWN0IG15IHdvcmsuIExldCYjMzk7cyBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIGFyb3VuZCBsaW5lIDUyOC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIG9wdGlvbiByZXNpZGVzLiBUaW1lIHRvIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGRlcGVuZGVuY2llcyBhcmUgaGlkaW5nIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTU6XHRcbiA1MTY6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcJiMzNDtcbiA1MTc6XHRcbiA1MTg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvY2FuL0tjb25maWdcJiMzNDtcbiA1MTk6XHRcbiA1MjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG4gNTIxOlx0XG4gNTIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wmIzM0O1xuIDUyMzpcdFxuIDUyNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1wmIzM0O1xuIDUyNTpcdFxuIDUyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbiA1Mjc6XHRcbiA1Mjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWdcJiMzNDtcbiA1Mjk6XHRcbiA1MzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCYjMzQ7XG4gNTMxOlx0XG4gNTMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuIDUzMzpcdFxuIDUzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuIDUzNTpcdFxuIDUzNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG4gNTM3Olx0XG4gNTM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnXCYjMzQ7XG4gNTM5Olx0XG4gNTQwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wmIzM0O1xuIDU0MTpcdFxuIDU0MjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93d2FuL0tjb25maWdcJiMzNDtcbiA1NDM6XHRcbiA1NDQ6XHRjb25maWcgWEVOX05FVERFVl9GUk9OVEVORFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgTkVUREVWSUNFU2Agb3B0aW9uIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHNwb3QgZm9yIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYE5FVERFVklDRVNgIG5lc3RlZCB3aXRoaW4gYSBgbWVudWNvbmZpZyBORVRERVZJQ0VTYCBibG9jaywgd2hpY2ggbGlrZWx5IGRlcGVuZHMgb24gdGhlIGJyb2FkZXIgYE5FVGAgZmVhdHVyZS4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBORVRfQVRNYCAvIGBBVE1gIGFyZSBjb25maWd1cmVkIGluIHRoZSBgbmV0L0tjb25maWdgIGZpbGUsIGFzIEFUTSBpcyBhbm90aGVyIHBpZWNlIG9mIHRoZSBuZXR3b3JraW5nIHB1enpsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNTY9c291cmNlIFwmIzM0O25ldC90aXBjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1Nzpzb3VyY2UgXCYjMzQ7bmV0L2F0bS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNTgtc291cmNlIFwmIzM0O25ldC9sMnRwL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQVRNL1BQUE9BVE0gQ29uZmlndXJhdGlvbiBhbmQgSU9DVEwgSGFuZGxlcnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQVRNYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvYXRtL0tjb25maWdgLiBMaW5lIDYgc2hvd3MgdGhhdCBgQVRNYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgUFBQT0FUTWAuIFRoZSBjb25maWd1cmF0aW9uIHNuaXBwZXQgcmV2ZWFscyBpdCYjMzk7cyBkaXJlY3RseSBkZXBlbmRlbnQgb24gYEFUTWAgYW5kIG5lc3RlZCB3aXRoaW4gYW4gYGlmIFBQUGAgYmxvY2suIFRoaXMgY29uZmlybXMgdGhlIGRlcGVuZGVuY2llczogYEFUTWAsIGBQUFBgLCBgUFBQT0FUTWAsIGFuZCwgYnkgZXh0ZW5zaW9uLCBgTkVUREVWSUNFU2AgYW5kIGBORVRgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIGEgcHJvcGVyIGNvbmZpZ3VyYXRpb24uCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBwcHBvYXRtX2lvY3RsYCBhbmQgYHBwcG9hdG1fYXNzaWduX3ZjY2AgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGFuZCBpZiB0aGV5JiMzOTtyZSBleHBvcnRlZC9yZWFjaGFibGUuIExvb2tpbmcgYXQgYHBwcG9hdG0uY2AsIEkgc2VlIGByZWdpc3Rlcl9hdG1faW9jdGwoJmFtcDtwcHBvYXRtX2lvY3RsX29wcylgIHJlZ2lzdGVycyB0aGUgYHBwcG9hdG1faW9jdGxgIGhhbmRsZXIgd2l0aCB0aGUgQVRNIHN1YnN5c3RlbS4gVGhhdCBtZWFucyBgcHBwb2F0bV9pb2N0bGAgd2lsbCBiZSBpbnZva2VkIHdoZW4gYW4gQVRNIHNvY2tldCB1c2VzIGFuIGlvY3RsLiBTcGVjaWZpY2FsbHksIHdoZW4gYW4gQVRNIHNvY2tldCBpc3N1ZXMgdGhlIGBBVE1fU0VUQkFDS0VORGAgaW9jdGwsIGBkb192Y2NfaW9jdGxgIGluIGBuZXQvYXRtL2lvY3RsLmNgIHRha2VzIG92ZXIgYW5kIHRoZW4gZGlzcGF0Y2hlcyB0aGUgcmVxdWVzdCB0byByZWdpc3RlcmVkIEFUTSBpb2N0bHMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgbmV0L2F0bS9pb2N0bC5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpb2N0bCBoYW5kbGluZyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0RVhQT1JUX1NZTUJPTChkZXJlZ2lzdGVyX2F0bV9pb2N0bCk7XG4gIDQyOlx0XG4gIDQzOlx0c3RhdGljIGludCBkb192Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbiAgNDQ6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFyZywgaW50IGNvbXBhdClcbiAgNDU6XHR7XG4gIDQ2Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuICA0NzpcdFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiAgNDg6XHRcdGludCBlcnJvcjtcbiAgNDk6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcztcbiAgNTA6XHRcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuICA1MTpcdFx0dm9pZCBfX3VzZXIgKmJ1ZjtcbiAgNTI6XHRcdGludCBfX3VzZXIgKmxlbjtcbiAgNTM6XHRcbiAgNTQ6XHRcdHZjYyA9IEFUTV9TRChzb2NrKTtcbiAgNTU6XHRcdHN3aXRjaCAoY21kKSB7XG4gIDU2Olx0XHRjYXNlIFNJT0NPVVRROlxuICA1NzpcdFx0XHRpZiAoc29jay1cdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQgfHxcbiAgNTg6XHRcdFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAgNTk6XHRcdFx0XHRlcnJvciA9ICAtRUlOVkFMO1xuICA2MDpcdFx0XHRcdGdvdG8gZG9uZTtcbiAgNjE6XHRcdFx0fVxuICA2MjpcdFx0XHRlcnJvciA9IHB1dF91c2VyKHNrLVx1MDAzZXNrX3NuZGJ1ZiAtIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSxcbiAgNjM6XHRcdFx0XHRcdCAoaW50IF9fdXNlciAqKWFyZ3ApO1xuICA2NDpcdFx0XHRnb3RvIGRvbmU7XG4gIDY1Olx0XHRjYXNlIFNJT0NJTlE6XG4gIDY2Olx0XHR7XG4gIDY3Olx0XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDY4Olx0XHRcdGludCBhbW91bnQ7XG4gIDY5Olx0XG4gIDcwOlx0XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRCkge1xuICA3MTpcdFx0XHRcdGVycm9yID0gLUVJTlZBTDtcbiAgNzI6XHRcdFx0XHRnb3RvIGRvbmU7XG4gIDczOlx0XHRcdH1cbiAgNzQ6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuICA3NTpcdFx0XHRza2IgPSBza2JfcGVlayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiAgNzY6XHRcdFx0YW1vdW50ID0gc2tiID8gc2tiLVx1MDAzZWxlbiA6IDA7XG4gIDc3Olx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuICA3ODpcdFx0XHRlcnJvciA9IHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmdwKTtcbiAgNzk6XHRcdFx0Z290byBkb25lO1xuICA4MDpcdFx0fVxuICA4MTpcdFx0Y2FzZSBBVE1fU0VUU0M6XG4gIDgyOlx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O0FUTV9TRVRTQyBpcyBvYnNvbGV0ZTsgdXNlZCBieSAlczolZFxcblwmIzM0OyxcbiAgODM6XHRcdFx0XHRcdCAgICAgY3VycmVudC1cdTAwM2Vjb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XG4gIDg0Olx0XHRcdGVycm9yID0gMDtcbiAgODU6XHRcdFx0Z290byBkb25lO1xuICA4NjpcdFx0Y2FzZSBBVE1fU0VUQkFDS0VORDpcbiAgODc6XHRcdGNhc2UgQVRNX05FV0JBQ0tFTkRJRjpcbiAgODg6XHRcdHtcbiAgODk6XHRcdFx0YXRtX2JhY2tlbmRfdCBiYWNrZW5kO1xuICA5MDpcdFx0XHRlcnJvciA9IGdldF91c2VyKGJhY2tlbmQsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKWFyZ3ApO1xuICA5MTpcdFx0XHRpZiAoZXJyb3IpXG4gIDkyOlx0XHRcdFx0Z290byBkb25lO1xuICA5MzpcdFx0XHRzd2l0Y2ggKGJhY2tlbmQpIHtcbiAgOTQ6XHRcdFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XG4gIDk1Olx0XHRcdFx0cmVxdWVzdF9tb2R1bGUoXCYjMzQ7cHBwb2F0bVwmIzM0Oyk7XG4gIDk2Olx0XHRcdFx0YnJlYWs7XG4gIDk3Olx0XHRcdGNhc2UgQVRNX0JBQ0tFTkRfQlIyNjg0OlxuICA5ODpcdFx0XHRcdHJlcXVlc3RfbW9kdWxlKFwmIzM0O2JyMjY4NFwmIzM0Oyk7XG4gIDk5Olx0XHRcdFx0YnJlYWs7XG4gMTAwOlx0XHRcdH1cbiAxMDE6XHRcdFx0YnJlYWs7XG4gMTAyOlx0XHR9XG4gMTAzOlx0XHR9XG4gMTA0Olx0XG4gMTA1Olx0XHRlcnJvciA9IC1FTk9JT0NUTENNRDtcbiAxMDY6XHRcbiAxMDc6XHRcdG11dGV4X2xvY2soXHUwMDI2aW9jdGxfbXV0ZXgpO1xuIDEwODpcdFx0bGlzdF9mb3JfZWFjaChwb3MsIFx1MDAyNmlvY3RsX2xpc3QpIHtcbiAxMDk6XHRcdFx0c3RydWN0IGF0bV9pb2N0bCAqaWMgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGF0bV9pb2N0bCwgbGlzdCk7XG4gMTEwOlx0XHRcdGlmICh0cnlfbW9kdWxlX2dldChpYy1cdTAwM2Vvd25lcikpIHtcbiAxMTE6XHRcdFx0XHRlcnJvciA9IGljLVx1MDAzZWlvY3RsKHNvY2ssIGNtZCwgYXJnKTtcbiAxMTI6XHRcdFx0XHRtb2R1bGVfcHV0KGljLVx1MDAzZW93bmVyKTtcbiAxMTM6XHRcdFx0XHRpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKVxuIDExNDpcdFx0XHRcdFx0YnJlYWs7XG4gMTE1Olx0XHRcdH1cbiAxMTY6XHRcdH1cbiAxMTc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZpb2N0bF9tdXRleCk7XG4gMTE4Olx0XG4gMTE5Olx0XHRpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ2NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUG9BVE0gSU9DVEwgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgSU9DVEwgY2FsbHMgYXJlIGhhbmRsZWQgZm9yIFBQUG9BVE0uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBkb192Y2NfaW9jdGxgIGlzIHRoZSBrZXkgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbiBgaW9jdGxfbGlzdGAgYW5kIGNhbGxzIGBpYy0mZ3Q7aW9jdGxgLCB3aGljaCwgaW4gdGhpcyBjYXNlLCBpcyBnb2luZyB0byBiZSBgcHBwb2F0bV9pb2N0bGAuIFRoYXTigJlzIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZm9jdXMgb24uCgpOb3csIGBwcHBvYXRtX2lvY3RsYCB1bHRpbWF0ZWx5IGNhbGxzIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNhbGwgY2hhaW4uIEkmIzM5O3ZlIGFscmVhZHkgY29uZmlybWVkIHRoYXQgYHBwcG9hdG1fYXNzaWduX3ZjY2AgaXMgc3RhdGljIGFuZCBsb2NhbCB3aXRoaW4gYHBwcG9hdG0uY2AsIHNvIEkmIzM5O20gbm90IG92ZXJseSBjb25jZXJuZWQgd2l0aCBpdCYjMzk7cyBzY29wZSwgZm9yIHRoZSBtb21lbnQuIEJ1dCBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGJ5IHZlcmlmeWluZyB0aGUgb3RoZXIgc3ltYm9scyBpbiBgcHBwb2F0bS5jYCBsaWtlIGBwcHBvYXRtX2lvY3RsYCwgYHBwcG9hdG1faW5pdGAsIGFuZCBgcHBwb2F0bV9zZW5kYCAtIGFyZSB0aGV5IHN0YXRpYywgb3IgYXJlIHRoZXkgZXhwb3J0ZWQ/IEFyZSB0aGVyZSBhbnkgdGhhdCBhcmUgbm9uLWlubGluZWQ/IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBvdGhlciBwb3RlbnRpYWxseSByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGB2Y2NfaW9jdGxgIGluIGBuZXQvYXRtL2lvY3RsLmNgLCBhcyB3ZWxsLCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyZmFjZS4KClRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGluZ3MsIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gY2hlY2tpbmcgdGhlIGV4cG9ydGVkIGFuZCBwdWJsaWMgc3ltYm9scyBpbiBib3RoIGBuZXQvYXRtL2lvY3RsLmNgIGFuZCBgcHBwb2F0bS5jYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgdGllZCB0b2dldGhlci4gVGhpcyB3aWxsIGhlbHAgY2xhcmlmeSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjY19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uaD0yMD1fX3BvbGxfdCB2Y2NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdCk7XG5uZXQvYXRtL2NvbW1vbi5oOjIxOmludCB2Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xubmV0L2F0bS9jb21tb24uaC0yMi1pbnQgdmNjX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4tLVxubmV0L2F0bS9pb2N0bC5jPTQxPUVYUE9SVF9TWU1CT0woZGVyZWdpc3Rlcl9hdG1faW9jdGwpO1xubmV0L2F0bS9pb2N0bC5jLTQyLVxubmV0L2F0bS9pb2N0bC5jOjQzOnN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG5uZXQvYXRtL2lvY3RsLmMtNDQtXHRcdFx0dW5zaWduZWQgbG9uZyBhcmcsIGludCBjb21wYXQpXG4tLVxubmV0L2F0bS9pb2N0bC5jLTE2OS1cbm5ldC9hdG0vaW9jdGwuYzoxNzA6aW50IHZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbm5ldC9hdG0vaW9jdGwuYy0xNzEte1xubmV0L2F0bS9pb2N0bC5jOjE3MjpcdHJldHVybiBkb192Y2NfaW9jdGwoc29jaywgY21kLCBhcmcsIDApO1xubmV0L2F0bS9pb2N0bC5jLTE3My19XG4tLVxubmV0L2F0bS9pb2N0bC5jPTI4Mj1pbnQgdmNjX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vaW9jdGwuYy0yODYtXG5uZXQvYXRtL2lvY3RsLmM6Mjg3Olx0cmV0ID0gZG9fdmNjX2lvY3RsKHNvY2ssIGNtZCwgYXJnLCAxKTtcbm5ldC9hdG0vaW9jdGwuYy0yODgtXHRpZiAocmV0ICE9IC1FTk9JT0NUTENNRClcbi0tXG5uZXQvYXRtL3B2Yy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwdmNfcHJvdG9fb3BzID0ge1xuLS1cbm5ldC9hdG0vcHZjLmMtMTE2LVx0LnBvbGwgPVx0XHR2Y2NfcG9sbCxcbm5ldC9hdG0vcHZjLmM6MTE3Olx0LmlvY3RsID1cdHZjY19pb2N0bCxcbm5ldC9hdG0vcHZjLmMtMTE4LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTE2CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDcyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQVRNIFBQUG9BVE0gaW9jdGwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQgd2l0aGluIHRoZSBBVE0vUFBQb0FUTSBzdWJzeXN0ZW0uIFdlJiMzOTtyZSBsb29raW5nIGF0IGB2Y2NfaW9jdGxgIGFuZCBgdmNjX2NvbXBhdF9pb2N0bGAgaW4gYG5ldC9hdG0vaW9jdGwuY2AsIGJ1dCB0aGUgcmVhbCBpbnRlcmVzdCBsaWVzIGluIGBwcHBvYXRtLmNgLiBXZSBoYXZlIGBwcHBvYXRtX2lvY3RsYCwgd2hpY2ggZ2V0cyBhc3NpZ25lZCB0byB0aGUgYHBwcG9hdG1faW9jdGxfb3BzLmlvY3RsYCBzdHJ1Y3R1cmUgYW5kIGNydWNpYWxseSwgc2luY2UgdGhpcyBmdW5jdGlvbiYjMzk7cyBhZGRyZXNzIGlzIHRha2VuLCBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhpcyBtZWFucyB3ZSYjMzk7bGwgZGVmaW5pdGVseSBzZWUgaXQgYXMgYSBzeW1ib2wuIFRoZW4gd2UgaGF2ZSBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcG9hdG1fcHVzaGAsIGBwcHBvYXRtX3BvcGAsIGFuZCBgcHBwb2F0bV9yZWxlYXNlX2NiYCB3aXRoaW4gdGhhdCBmaWxlLCB0aG91Z2ggYHBwcG9hdG1faW9jdGxgIGFuZCBgdmNjX2lvY3RsYCBhcmUgb3VyIHByaW1hcnkgZm9jdXMuIGB2Y2NfaW9jdGxgIGlzIHNwZWNpZmljYWxseSB0aGUgbWFpbiBpb2N0bCBlbnRyeXBvaW50IGhlcmUuCgpOb3csIGlzIHRoaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oz8gTGV0JiMzOTtzIGV2YWx1YXRlLiBGaXJzdCwgaXQmIzM5O3Mgbm90IHB1cmVseSBkZWNvcmF0aXZlLiBUaGVyZSYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gdGhlcmUgKGBpZiAoYXRtdmNjLSZndDt1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgdGhhdCBwcmV2ZW50cyBkb3VibGUtYXNzaWdubWVudCBvZiBgdXNlcl9iYWNrYCwgc28gdGhlcmUmIzM5O3Mgc3RhdGVmdWwgbG9naWMgYXQgcGxheS4gU2Vjb25kLCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgdGllZCB0byBzcGVjaWZpYyB2ZW5kb3Igb3IgcGh5c2ljYWwgaGFyZHdhcmU7IHRoZXNlIEFUTSBzb2NrZXRzIGFuZCBQUFBvQVRNIGNoYW5uZWxzIGNhbiBiZSBtYWRlIGluIHVzZXJzcGFjZSwgdmlhIHN0YW5kYXJkIHNvY2tldCBjYWxscy4gVGhpcmQsIGl0JiMzOTtzIG5vdCBzaW1wbHkgYSBzaHV0ZG93bi9yZW1vdmUgcGF0aC4gQW5kIGZvdXJ0aCwgY3JpdGljYWxseSwgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBgaW9jdGwoZmQsIEFUTV9TRVRCQUNLRU5ELCAmYW1wO2FyZylgIG9uIGFuIEFUTSBzb2NrZXQuIEJpbmdvLiBXb3J0aEZ1enppbmcgPSBUcnVlLgoKV2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQuIGBBVE1gLCBgUFBQYCwgYW5kIGBQUFBPQVRNYCBhcmUgbmVjZXNzYXJ5LiBMb29raW5nIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMsIGBBVE1gIGlzIHNvdXJjZWQgZnJvbSBgbmV0L2F0bS9LY29uZmlnYCBhbmQgZGVwZW5kcyBvbiBgTkVUYCwgd2hpY2ggaXMgc3RhbmRhcmQuIGBQUFBgIGlzIGluIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgYW5kIGRlcGVuZHMgb24gYE5FVERFVklDRVNgLCBhbmQgYFBQUE9BVE1gIGFsc28gZGVwZW5kcyBvbiBib3RoIGBQUFBgIGFuZCBgQVRNYC4gUFBQIGFsc28gc2VsZWN0cyBgU0xIQ2AuIEZpbmFsbHksIGBQUFBPQVRNYCBhbHNvIGRlcGVuZHMgb24gYEFUTWAgaW5zaWRlIGBpZiBQUFBgLiBDb25maXJtZWQsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyLgoKTGV0JiMzOTtzIHJlZmluZSB0aGUgc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvbi4gV2Uga25vdyBgcHBwb2F0bV9pb2N0bGAgYW5kIGB2Y2NfaW9jdGxgIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSB0aGV5IGFyZSB0aGUgZXhwb3NlZCBpb2N0bCBoYW5kbGVycy4gYHBwcG9hdG1fYXNzaWduX3ZjY2AgaXMgc3RhdGljIGFuZCBjYWxsZWQgYnkgYHBwcG9hdG1faW9jdGxgLiBDb21waWxlciBpbmxpbmluZyBjb3VsZCBmb2xkIGl0IGludG8gYHBwcG9hdG1faW9jdGxgLiBBZGRpbmcgaXQgYXMgYSBzeW1ib2wgbWFrZXMgc2Vuc2UuCgpPa2F5LCBxdWljayBzdW1tYXJ5IGFuZCBmaW5hbCBzYW5pdHkgY2hlY2s6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUuKioKKiAgICoqRW5hYmxlQ29uZmlnczogXFvigJxBVE3igJ0sIOKAnFBQUOKAnSwg4oCcUFBQT0FUTeKAnV0uKioKKiAgICoqRm9jdXNTeW1ib2xzOiBcW+KAnHBwcG9hdG1cX2lvY3Rs4oCdLCDigJxwcHBvYXRtXF9hc3NpZ25cX3ZjY+KAnSwg4oCcdmNjXF9pb2N0bOKAnV0uKioKKiAgICoqUmVhc29uaW5nOioqIElkZW50aWZpZWQgYHBwcG9hdG1faW9jdGxgIGFuZCBgdmNjX2lvY3RsYCBhcyByZWFjaGFibGUgaW9jdGwgZW50cnlwb2ludHMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBvZiBBVE0vUFBQb0FUTS4gVGhlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGZ1bmN0aW9uIGlzIHN0YXRpYywgd2hpY2ggbWF5IGJlIGlubGluZWQgaW50byBgcHBwb2F0bV9pb2N0bGAsIGJ1dCBpbmNsdWRpbmcgaXQgaGVyZSBpbmNyZWFzZXMgY292ZXJhZ2UuCgpXZSYjMzk7cmUgZ29vZCB0byBnby4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1faW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9hc3NpZ25fdmNjJiMzNDssCiAgICAmIzM0O3ZjY19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHBwb2F0bV9hc3NpZ25fdmNjKCkgZW5zdXJpbmcgdGhhdCBhbiBBVE0gVkNDIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIGJhY2tlbmQvdXNlcl9iYWNrIGFzc2lnbmVkIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBhdHRhY2hpbmcgYSBuZXcgcHBwb2F0bV92Y2MsIHByZXZlbnRpbmcgcmVzb3VyY2UgbGVha3MgYW5kIHN0YXRlIGNvcnJ1cHRpb24gd2hlbiByZS1hc3NpZ25pbmcgYmFja2VuZHMgb24gdGhlIHNhbWUgc29ja2V0IHZpYSBBVE1fU0VUQkFDS0VORCBpb2N0bC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQVRNIHNvY2tldCBpb2N0bHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUE9BVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBvYXRtX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7LAogICAgJiMzNDt2Y2NfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHBwcG9hdG1fYXNzaWduX3ZjYygpIGVuc3VyaW5nIHRoYXQgYW4gQVRNIFZDQyBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBiYWNrZW5kL3VzZXJfYmFjayBhc3NpZ25lZCBiZWZvcmUgYWxsb2NhdGluZyBhbmQgYXR0YWNoaW5nIGEgbmV3IHBwcG9hdG1fdmNjLCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIGFuZCBzdGF0ZSBjb3JydXB0aW9uIHdoZW4gcmUtYXNzaWduaW5nIGJhY2tlbmRzIG9uIHRoZSBzYW1lIHNvY2tldCB2aWEgQVRNX1NFVEJBQ0tFTkQgaW9jdGwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFUTSBzb2NrZXQgaW9jdGxzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI3ODIzMTZjM2RmNTVhYWQ4NTcxYTQ4MDdlM2U2MGFiODIwNDkwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTY6MTU6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jCmluZGV4IDZkYTUyZDEyZGY2OGUuLjkzYmEyMmY0MzdiYzkgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcHBwb2F0bS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9hdG0vcHBwb2F0bS5jCkBAIC0zOTYsNiAmIzQzOzM5Niw4IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpCiAJaWYgKGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUICZhbXA7JmFtcDsKIAkgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDICZhbXA7JmFtcDsgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0xMQykKIAkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChhdG12Y2MtJmd0O3VzZXJfYmFjaykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiAJcHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTsKIAlpZiAocHZjYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFBvQVRNIFZDQyBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9hdG0vcHBwb2F0bS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcHBwb2F0bV9hc3NpZ25fdmNjYCBmdW5jdGlvbi4gUmlnaHQgYXdheSwgSSBzZWUgdGhlIGRpZmYuIEl0JiMzOTtzIGFkZGluZyBhIGNoZWNrLCBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFzc2lnbmluZyBhIHZpcnR1YWwgY2lyY3VpdCBjb25uZWN0aW9uIChWQ0MpIHdpdGhpbiB0aGUgUFBQb0FUTSBjb250ZXh0LgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUsIGFyb3VuZCBsaW5lIDM5Niwgc3RhcnRzIHdpdGggdmFsaWRhdGlvbiBvZiB0aGUgZW5jYXBzdWxhdGlvbiB0eXBlIChgYmUuZW5jYXBzYCkuICBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGVuc3VyaW5nIHRoZSBlbmNhcHN1bGF0aW9uIGlzIGVpdGhlciBhdXRvLWRldGVjdGVkLCBvciBleHBsaWNpdGx5IHNldCB0byBWQyAoVmlydHVhbCBDaXJjdWl0KSBvciBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKS4gTWFrZXMgc2Vuc2UsIHN0YW5kYXJkIFBQUG9BVE0gc3R1ZmYuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgaWYgKGF0bXZjYy0mZ3Q7dXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2AuIFRoYXQmIzM5O3MgdGhlIGtleSBhZGRpdGlvbi4KClNvLCAqdGhpcyogaXMgdGhlIGNoYW5nZS4gIFRoZSBmdW5jdGlvbiBpcyBub3cgY2hlY2tpbmcgaWYgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBpcyBzZXQuIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBwcmV2ZW50IHJlLWFzc2lnbm1lbnQgb3IgY29uZmxpY3QgaWYgYSB1c2VyLXNwYWNlIGNvbXBvbmVudCBpcyBhbHJlYWR5IHVzaW5nIHRoZSBWQ0MuIEEgYnVzeSBzaWduYWwgaXMgcmV0dXJuZWQgdG8gaW5kaWNhdGUgdGhlIFZDQyBpcyBhbHJlYWR5IGluIHVzZSwgZWZmZWN0aXZlbHkgcHJldmVudGluZyBtdWx0aXBsZSB1c2VycyBmcm9tIHN0ZXBwaW5nIG9uIGVhY2ggb3RoZXIuIEdpdmVuIHRoZSBzdHJ1Y3R1cmUsIEkgY2FuIHJlYXNvbmFibHkgaW5mZXIgdGhhdCBgYXRtdmNjLSZndDt1c2VyX2JhY2tgIGxpa2VseSBwb2ludHMgdG8gc29tZSBkYXRhIG9yIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggYSB1c2VyLXNwYWNlIGVudGl0eSB0aGF0IGhhcyBhbHJlYWR5IGNsYWltZWQgdGhlIFZDQy4gSSYjMzk7bGwgbmVlZCB0byBnbyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljYWxseSB1c2VyX2JhY2sgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQuIEJ1dCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBjbGVhciAtIGEgc2ltcGxlLCBidXQgaW1wb3J0YW50LCBjaGVjayBmb3IgcmVzb3VyY2UgY29udGVudGlvbi4gR29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XHRyZXR1cm4gLUVOT1RUWTtcbiAzODE6XHR9XG4gMzgyOlx0XG4gMzgzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG4gMzg0Olx0XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbiAzODU6XHRcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxuIDM4NjpcdH07XG4gMzg3Olx0XG4gMzg4Olx0c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiAzODk6XHR7XG4gMzkwOlx0XHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xuIDM5MTpcdFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xuIDM5MjpcdFx0aW50IGVycjtcbiAzOTM6XHRcbiAzOTQ6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxuIDM5NTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzOTY6XHRcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiAzOTc6XHRcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gMzk4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM5OTpcdFx0aWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spXG4gNDAwOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNDAxOlx0XHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xuIDQwMjpcdFx0aWYgKHB2Y2MgPT0gTlVMTClcbiA0MDM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDA0Olx0XHRwdmNjLVx1MDAzZWF0bXZjYyA9IGF0bXZjYztcbiA0MDU6XHRcbiA0MDY6XHRcdC8qIE1heGltdW0gaXMgemVybywgc28gdGhhdCB3ZSBjYW4gdXNlIGF0b21pY19pbmNfbm90X3plcm8oKSAqL1xuIDQwNzpcdFx0YXRvbWljX3NldChcdTAwMjZwdmNjLVx1MDAzZWluZmxpZ2h0LCBOT05FX0lORkxJR0hUKTtcbiA0MDg6XHRcdHB2Y2MtXHUwMDNlb2xkX3B1c2ggPSBhdG12Y2MtXHUwMDNlcHVzaDtcbiA0MDk6XHRcdHB2Y2MtXHUwMDNlb2xkX3BvcCA9IGF0bXZjYy1cdTAwM2Vwb3A7XG4gNDEwOlx0XHRwdmNjLVx1MDAzZW9sZF9vd25lciA9IGF0bXZjYy1cdTAwM2Vvd25lcjtcbiA0MTE6XHRcdHB2Y2MtXHUwMDNlb2xkX3JlbGVhc2VfY2IgPSBhdG12Y2MtXHUwMDNlcmVsZWFzZV9jYjtcbiA0MTI6XHRcdHB2Y2MtXHUwMDNlZW5jYXBzID0gKGVudW0gcHBwb2F0bV9lbmNhcHMpIGJlLmVuY2FwcztcbiA0MTM6XHRcdHB2Y2MtXHUwMDNlY2hhbi5wcml2YXRlID0gcHZjYztcbiA0MTQ6XHRcdHB2Y2MtXHUwMDNlY2hhbi5vcHMgPSBcdTAwMjZwcHBvYXRtX29wcztcbiA0MTU6XHRcdHB2Y2MtXHUwMDNlY2hhbi5tdHUgPSBhdG12Y2MtXHUwMDNlcW9zLnR4dHAubWF4X3NkdSAtIFBQUF9IRFJMRU4gLVxuIDQxNjpcdFx0ICAgIChiZS5lbmNhcHMgPT0gZV92YyA/IDAgOiBMTENfTEVOKTtcbiA0MTc6XHRcdHRhc2tsZXRfc2V0dXAoXHUwMDI2cHZjYy1cdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcbiA0MTg6XHRcdGVyciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKFx1MDAyNnB2Y2MtXHUwMDNlY2hhbik7XG4gNDE5Olx0XHRpZiAoZXJyICE9IDApIHtcbiA0MjA6XHRcdFx0a2ZyZWUocHZjYyk7XG4gNDIxOlx0XHRcdHJldHVybiBlcnI7XG4gNDIyOlx0XHR9XG4gNDIzOlx0XHRhdG12Y2MtXHUwMDNldXNlcl9iYWNrID0gcHZjYztcbiA0MjQ6XHRcdGF0bXZjYy1cdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xuIDQyNTpcdFx0YXRtdmNjLVx1MDAzZXBvcCA9IHBwcG9hdG1fcG9wO1xuIDQyNjpcdFx0YXRtdmNjLVx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XG4gNDI3Olx0XHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xuIDQyODpcdFx0YXRtdmNjLVx1MDAzZW93bmVyID0gVEhJU19NT0RVTEU7XG4gNDI5Olx0XG4gNDMwOlx0XHQvKiByZS1wcm9jZXNzIGV2ZXJ5dGhpbmcgcmVjZWl2ZWQgYmV0d2VlbiBjb25uZWN0aW9uIHNldHVwIGFuZFxuIDQzMTpcdFx0ICAgYmFja2VuZCBzZXR1cCAqL1xuIDQzMjpcdFx0dmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShhdG12Y2MpO1xuIDQzMzpcdFx0cmV0dXJuIDA7XG4gNDM0Olx0fVxuIDQzNTpcdFxuIDQzNjpcdC8qXG4gNDM3Olx0ICogVGhpcyBoYW5kbGVzIGlvY3RscyBhY3R1YWxseSBwZXJmb3JtZWQgb24gb3VyIHZjYyAtIHdlIG11c3QgcmV0dXJuXG4gNDM4Olx0ICogLUVOT0lPQ1RMQ01EIGZvciBhbnkgdW5yZWNvZ25pemVkIGlvY3RsXG4gNDM5Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBQUCBvdmVyIEFUTSBWQ0MgQXNzaWdubWVudCBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB0aHJvdWdoIGFuIGBpb2N0bGAgb3BlcmF0aW9uIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBBVE0gYW5kIFBQUCBiYWNrZW5kcy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGJlZm9yZSB0aGlzIHBhdGNoLCB3YXMgdGhhdCBgcHBwb2F0bV9hc3NpZ25fdmNjYCB3b3VsZCBibGluZGx5IHJlLWFsbG9jYXRlIHJlc291cmNlcyBmb3IgYW4gYWxyZWFkeSBjb25maWd1cmVkIGBhdG12Y2NgLiBUaGlzIG1lYW50IGEgbmV3IGBwdmNjYCB3YXMgY3JlYXRlZCwgb3ZlcndyaXRpbmcgY3JpdGljYWwgcG9pbnRlcnMgbGlrZSBgb2xkX3B1c2hgIGFuZCBgb2xkX3BvcGAgaW4gYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCB3aXRob3V0IGRlYWxsb2NhdGluZyB0aGUgb2xkIG9uZXMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIGdlbmVyYWwgc3RhdGUgY29ycnVwdGlvbiDigJMgYWxsIHByZXR0eSBuYXN0eSBzdHVmZi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2ltcGxlIGNoZWNrOiBgaWYgKGF0bXZjYy0mZ3Q7dXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2AuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgbm93IHByZXZlbnRpbmcgdGhlIHJlLWFzc2lnbm1lbnQgaWYgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBpcyBhbHJlYWR5IHBvcHVsYXRlZC4gU21hcnQgbW92ZS4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIHdpdGggYW55IHN1Y2ggcGF0Y2ggaXM6IGRvZXMgaXQgaW50cm9kdWNlICpuZXcqIHJpc2tzLCBldmVuIGFzIGl0IGZpeGVzIHRoZSBvbGQgb25lPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMuIFNvLCBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGVzZSBwb3NzaWJpbGl0aWVzOgoKKiAgICoqVW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB3ZSYjMzk7cmUgbm90IGNvcHlpbmcgYW55IHBvdGVudGlhbGx5IGdhcmJhZ2UgZGF0YSBpbnRvIHVzZXItYWNjZXNzaWJsZSBzcGFjZS4gVGhhdCYjMzk7cyBnb29kLgoqICAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIHRoZSBjb2RlIGlzIGNoZWNraW5nIGBhdG12Y2MtJmd0O3VzZXJfYmFja2AsIHdoaWNoIGlzIGEgcG9pbnRlciB3aXRoaW4gYSBgc3RydWN0IGF0bV92Y2NgLgoqICAgKipDaGFuZ2VzIHRvIGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3Rocz8qKiBObywgd2UgYXJlbiYjMzk7dCBtZXNzaW5nIHdpdGggYnVmZmVyIHNpemVzLiBUaGF0JiMzOTtzIGFub3RoZXIgYXJlYSB3aGVyZSB0aGluZ3MgY2FuIGdvIHdyb25nLgoqICAgKipLTVNBTi1zcGVjaWZpYyBpc3N1ZXM/KiogTm9wZSwgdGhpcyBvbmUgaXMgcHVyZWx5IGEgc2FmZWd1YXJkIGFnYWluc3QgYSBrbm93biBpc3N1ZSwgd2hpY2ggc2hvdWxkIGJlIGRldGVjdGFibGUgd2l0aCBLQVNBTi9LTUVNTEVBSy4KClRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgYXRtdmNjLSZndDt1c2VyX2JhY2tgIG1lbWJlciBpbiB0aGUgYG5ldC9hdG1gIGNvZGUuIEl0JiMzOTtzIHRpbWUgdG8gcnVuIGEgcXVpY2sgYGdyZXBgIGZvciBgdXNlcl9iYWNrYCB3aXRoaW4gdGhlIEFUTSBzdWJzeXN0ZW0gY29kZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIGluIG15IGluaXRpYWwgYXNzZXNzbWVudC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIHJlYWxseSBkb2VzIHdoYXQgaXQgc2F5cyBvbiB0aGUgdGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX2JhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vYnIyNjg0LmM9MTEzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJyMjY4NF92Y2MgKkJSMjY4NF9WQ0MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vYnIyNjg0LmMtMTE0LXtcbm5ldC9hdG0vYnIyNjg0LmM6MTE1Olx0cmV0dXJuIChzdHJ1Y3QgYnIyNjg0X3ZjYyAqKShhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbm5ldC9hdG0vYnIyNjg0LmMtMTE2LX1cbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTQwOD1zdGF0aWMgdm9pZCBicjI2ODRfY2xvc2VfdmNjKHN0cnVjdCBicjI2ODRfdmNjICpicnZjYylcbi0tXG5uZXQvYXRtL2JyMjY4NC5jLTQxMy1cdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2ZGV2c19sb2NrKTtcbm5ldC9hdG0vYnIyNjg0LmM6NDE0Olx0YnJ2Y2MtXHUwMDNlYXRtdmNjLVx1MDAzZXVzZXJfYmFjayA9IE5VTEw7XHQvKiB3aGF0IGFib3V0IHZjYy1cdTAwM2VyZWN2cSA/Pz8gKi9cbm5ldC9hdG0vYnIyNjg0LmMtNDE1LVx0YnJ2Y2MtXHUwMDNlYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2IgPSBicnZjYy1cdTAwM2VvbGRfcmVsZWFzZV9jYjtcbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTUzMD1zdGF0aWMgaW50IGJyMjY4NF9yZWd2Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKiBhcmcpXG4tLVxubmV0L2F0bS9icjI2ODQuYy01ODktXHRicnZjYy1cdTAwM2VhdG12Y2MgPSBhdG12Y2M7XG5uZXQvYXRtL2JyMjY4NC5jOjU5MDpcdGF0bXZjYy1cdTAwM2V1c2VyX2JhY2sgPSBicnZjYztcbm5ldC9hdG0vYnIyNjg0LmMtNTkxLVx0YnJ2Y2MtXHUwMDNlZW5jYXBzID0gKGVudW0gYnIyNjg0X2VuY2FwcyliZS5lbmNhcHM7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmM9ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXG5uZXQvYXRtL3BwcG9hdG0uYy05MC17XG5uZXQvYXRtL3BwcG9hdG0uYzo5MTpcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTkyLX1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0xNjc9c3RhdGljIHZvaWQgcHBwb2F0bV91bmFzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzUtXHRwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKFx1MDAyNnB2Y2MtXHUwMDNlY2hhbik7XG5uZXQvYXRtL3BwcG9hdG0uYzoxNzY6XHRhdG12Y2MtXHUwMDNldXNlcl9iYWNrID0gTlVMTDtcbm5ldC9hdG0vcHBwb2F0bS5jLTE3Ny1cdGtmcmVlKHB2Y2MpO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTM4OD1zdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM5OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvYXRtL3BwcG9hdG0uYzozOTk6XHRpZiAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjaylcbm5ldC9hdG0vcHBwb2F0bS5jLTQwMC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MjItXHR9XG5uZXQvYXRtL3BwcG9hdG0uYzo0MjM6XHRhdG12Y2MtXHUwMDNldXNlcl9iYWNrID0gcHZjYztcbm5ldC9hdG0vcHBwb2F0bS5jLTQyNC1cdGF0bXZjYy1cdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTM3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipCUjI2ODQgUmVnaXN0cmF0aW9uICZhbXA7IFVzZXIgQmFjayBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbmV0L2F0bS9icjI2ODQuY2AuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYGJyMjY4NF9yZWd2Y2NgIGZ1bmN0aW9uIGlzIHdoZXJlIHdlIGhhbmRsZSB0aGUgcmVnaXN0cmF0aW9uIG9mIHZpcnR1YWwgY2lyY3VpdCBjb25uZWN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgaG93IGl0IGRlYWxzIHdpdGggdGhlIGBhdG12Y2MtJmd0O3VzZXJfYmFja2AgZmxhZy4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgdGhlcmXigJlzIGEgY2hlY2sgaW4gdGhlcmUsIHNvbWV0aGluZyBsaWtlIGBpZiAoYXRtdmNjLSZndDt1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCB0aGF04oCZcyBzdXBwb3NlZCB0byBwcmV2ZW50IGEgVkNDIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBpZiBpdCYjMzk7cyBjdXJyZW50bHkgbWFya2VkIGFzIGluIHVzZSBieSBhIHVzZXIuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBsb2dpYyBhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGl0LiBMZXQgbWUgZ28gYmFjayBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBpZiBJIHJlbWVtYmVyZWQgY29ycmVjdGx5LCBvciBub3QuIFRoZW4gSSYjMzk7bGwgaGF2ZSBhIGJldHRlciBwaWN0dXJlIG9mIHRoYXQgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9icjI2ODQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0c3RhdGljIGludCBicjI2ODRfcmVndmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICogYXJnKVxuIDUzMTpcdHtcbiA1MzI6XHRcdHN0cnVjdCBicjI2ODRfdmNjICpicnZjYztcbiA1MzM6XHRcdHN0cnVjdCBicjI2ODRfZGV2ICpicmRldjtcbiA1MzQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2O1xuIDUzNTpcdFx0c3RydWN0IGF0bV9iYWNrZW5kX2JyMjY4NCBiZTtcbiA1MzY6XHRcdGludCBlcnI7XG4gNTM3Olx0XG4gNTM4Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YmUsIGFyZywgc2l6ZW9mIGJlKSlcbiA1Mzk6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNTQwOlx0XHRicnZjYyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBicjI2ODRfdmNjKTtcbiA1NDE6XHRcdGlmICghYnJ2Y2MpXG4gNTQyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDU0MzpcdFx0LypcbiA1NDQ6XHRcdCAqIEFsbG93IHR3byBwYWNrZXRzIGluIHRoZSBBVE0gcXVldWUuIE9uZSBhY3R1YWxseSBiZWluZyBzZW50LCBhbmQgb25lXG4gNTQ1Olx0XHQgKiBmb3IgdGhlIEFUTSAmIzM5O1RYIGRvbmUmIzM5OyBoYW5kbGVyIHRvIHNlbmQuIEl0IHNob3VsZG4mIzM5O3QgdGFrZSBsb25nIHRvIGdldFxuIDU0NjpcdFx0ICogdGhlIG5leHQgb25lIGZyb20gdGhlIG5ldGRldiBxdWV1ZSwgd2hlbiB3ZSBuZWVkIGl0LiBNb3JlIHRoYW4gdGhhdFxuIDU0NzpcdFx0ICogd291bGQgYmUgYnVmZmVyYmxvYXQuXG4gNTQ4Olx0XHQgKi9cbiA1NDk6XHRcdGF0b21pY19zZXQoXHUwMDI2YnJ2Y2MtXHUwMDNlcXNwYWNlLCAyKTtcbiA1NTA6XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNmRldnNfbG9jayk7XG4gNTUxOlx0XHRuZXRfZGV2ID0gYnIyNjg0X2ZpbmRfZGV2KFx1MDAyNmJlLmlmc3BlYyk7XG4gNTUyOlx0XHRpZiAobmV0X2RldiA9PSBOVUxMKSB7XG4gNTUzOlx0XHRcdHByX2VycihcJiMzNDt0cmllZCB0byBhdHRhY2ggdG8gbm9uLWV4aXN0ZW50IGRldmljZVxcblwmIzM0Oyk7XG4gNTU0Olx0XHRcdGVyciA9IC1FTlhJTztcbiA1NTU6XHRcdFx0Z290byBlcnJvcjtcbiA1NTY6XHRcdH1cbiA1NTc6XHRcdGJyZGV2ID0gQlJQUklWKG5ldF9kZXYpO1xuIDU1ODpcdFx0aWYgKGF0bXZjYy1cdTAwM2VwdXNoID09IE5VTEwpIHtcbiA1NTk6XHRcdFx0ZXJyID0gLUVCQURGRDtcbiA1NjA6XHRcdFx0Z290byBlcnJvcjtcbiA1NjE6XHRcdH1cbiA1NjI6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZicmRldi1cdTAwM2VicnZjY3MpKSB7XG4gNTYzOlx0XHRcdC8qIE9ubHkgMSBWQ0MvZGV2IHJpZ2h0IG5vdyAqL1xuIDU2NDpcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIDU2NTpcdFx0XHRnb3RvIGVycm9yO1xuIDU2NjpcdFx0fVxuIDU2NzpcdFx0aWYgKGJlLmZjc19pbiAhPSBCUjI2ODRfRkNTSU5fTk8gfHxcbiA1Njg6XHRcdCAgICBiZS5mY3Nfb3V0ICE9IEJSMjY4NF9GQ1NPVVRfTk8gfHxcbiA1Njk6XHRcdCAgICBiZS5mY3NfYXV0byB8fCBiZS5oYXNfdnBpaWQgfHwgYmUuc2VuZF9wYWRkaW5nIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDIKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBJdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ6IHRoZXkmIzM5O3JlIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgcHBwb2F0bV9hc3NpZ25fdmNjKClgIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgYWNjaWRlbnRhbGx5IHJlLWF0dGFjaCBvciByZS1hc3NpZ24gYSBiYWNrZW5kIHRvIGFuIGBhdG1fdmNjYCB0aGF0IGFscmVhZHkgaGFzIG9uZS4gVGhlIGNvbmRpdGlvbiBpcyBzaW1wbGU6IGBpZiAoYXRtdmNjLSZndDt1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YC4gVGhpcyBwcmV2ZW50cyB0aGUgcHJvYmxlbWF0aWMgc2NlbmFyaW8gd2hlcmUgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBpc24mIzM5O3QgTlVMTC4KClJlZ2FyZGluZyBLTVNBTiB2cyBLQVNBTiwgdGhpcyBpcyBhIGxvZ2ljIGJ1Zywgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIFdlJiMzOTtyZSBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBwb2ludGVyIGlzIGluaXRpYWxpemVkIGR1cmluZyBzb2NrZXQvVkNDIGFsbG9jYXRpb24uIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCByZS1hc3NpZ25pbmcgdGhlIGJhY2tlbmQgb3ZlcndyaXRlcyBjYWxsYmFja3MgYW5kIG90aGVyIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGF0bV92Y2NgIHdpdGhvdXQgcHJvcGVyIGNsZWFudXAsIGxlYWRpbmcgdG8gc3RhdGUgY29ycnVwdGlvbiBhbmQgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzLiBUaGlzIHNvdW5kcyBsaWtlIGFuIGFyZWEgd2hlcmUgS0FTQU4sIExPQ0tERVAsIGFuZCBLTUVNTEVBSyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGlzc3Vlcywgc28gd2UgZGVmaW5pdGVseSBkb24mIzM5O3QgbmVlZCBLTVNBTiBoZXJlLiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCkkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6MzUuMTYxODY1MTI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTQyNjE2NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUTVwiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBPQVRNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwb2F0bV9pb2N0bFwiLFxuICAgIFwicHBwb2F0bV9hc3NpZ25fdmNjXCIsXG4gICAgXCJ2Y2NfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2ApIGluIGBwcHBvYXRtX2Fzc2lnbl92Y2MoKWAgdG8gcHJldmVudCByZS1hc3NpZ25pbmcgYSBQUFBvQVRNIGJhY2tlbmQgdG8gYW4gQVRNIFZDQyB0aGF0IGFscmVhZHkgaGFzIGEgYmFja2VuZCBhdHRhY2hlZC4gVGhpcyBmaXhlcyBhIHN0YXRlIGNvcnJ1cHRpb24vcmVzb3VyY2UgbWFuYWdlbWVudCBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHBwcG9hdG1fYXNzaWduX3ZjYygpIGVuc3VyaW5nIHRoYXQgYW4gQVRNIFZDQyBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBiYWNrZW5kL3VzZXJfYmFjayBhc3NpZ25lZCBiZWZvcmUgYWxsb2NhdGluZyBhbmQgYXR0YWNoaW5nIGEgbmV3IHBwcG9hdG1fdmNjLCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIGFuZCBzdGF0ZSBjb3JydXB0aW9uIHdoZW4gcmUtYXNzaWduaW5nIGJhY2tlbmRzIG9uIHRoZSBzYW1lIHNvY2tldCB2aWEgQVRNX1NFVEJBQ0tFTkQgaW9jdGwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFUTSBzb2NrZXQgaW9jdGxzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6MzUuMTYxODcwMTMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3MDIxMDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTI3ODIzMTZjM2RmNTVhYWQ4NTcxYTQ4MDdlM2U2MGFiODIwNDkwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDE2OjE1OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi45M2JhMjJmNDM3YmM5IDEwMDY0NFxcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXFxuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5AQCAtMzk2LDYgKzM5Niw4IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuIFxcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFxcdTAwMjZcXHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdHB2Y2MgPSBremFsbG9jX29iaigqcHZjYyk7XFxuIFxcdGlmIChwdmNjID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNTozNi42Njk1OTU4NDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc3MTk4MTA4ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUTVwiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBPQVRNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwb2F0bV9pb2N0bFwiLFxuICAgIFwicHBwb2F0bV9hc3NpZ25fdmNjXCIsXG4gICAgXCJ2Y2NfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHBwb2F0bV9hc3NpZ25fdmNjKCkgZW5zdXJpbmcgdGhhdCBhbiBBVE0gVkNDIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIGJhY2tlbmQvdXNlcl9iYWNrIGFzc2lnbmVkIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBhdHRhY2hpbmcgYSBuZXcgcHBwb2F0bV92Y2MsIHByZXZlbnRpbmcgcmVzb3VyY2UgbGVha3MgYW5kIHN0YXRlIGNvcnJ1cHRpb24gd2hlbiByZS1hc3NpZ25pbmcgYmFja2VuZHMgb24gdGhlIHNhbWUgc29ja2V0IHZpYSBBVE1fU0VUQkFDS0VORCBpb2N0bC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQVRNIHNvY2tldCBpb2N0bHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Mjc4MjMxNmMzZGY1NWFhZDg1NzFhNDgwN2UzZTYwYWI4MjA0OTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNjoxNTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkzYmEyMmY0MzdiYzkgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC0zOTYsNiArMzk2LDggQEAgc3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiBcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiBcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spXG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xuIFx0aWYgKHB2Y2MgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNTozNi42Njk1OTY5ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjI1OTEwMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBQUFBvQVRNIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UsIHNvIGxldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgZGlmZiBhbmQgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgY29kZWJhc2Ugc3Vycm91bmRpbmcgaXQuIFRoZSBjaGFuZ2UgaXMgcG9pbnRpbmcgbWUgdG8gYG5ldC9hdG0vcHBwb2F0bS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIGxldCdzIHpvb20gaW4gb24gdGhhdCBzcGVjaWZpYyBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzOTYuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IHNlY3Rpb24gb2YgY29kZSBpcyAqZG9pbmcqLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljLCBob3cgaXQncyBpbnZva2VkLCBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSDigJMgS2NvbmZpZyBzZXR0aW5ncywgYW55IHBvdGVudGlhbCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgZXZlcnl0aGluZy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE1OjQyLjg5NTUxMDgxN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDM4MTpcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xcbiAzODQ6XFx0XFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXFxuIDM4NTpcXHRcXHQuaW9jdGwgPSBwcHBvYXRtX2RldnBwcF9pb2N0bCxcXG4gMzg2OlxcdH07XFxuIDM4NzpcXHRcXG4gMzg4OlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuIDM4OTpcXHR7XFxuIDM5MDpcXHRcXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xcbiAzOTE6XFx0XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xcbiAzOTI6XFx0XFx0aW50IGVycjtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxcbiAzOTU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM5NjpcXHRcXHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXFx1MDAyNlxcdTAwMjZcXG4gMzk3OlxcdFxcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXFx1MDAyNlxcdTAwMjYgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0xMQylcXG4gMzk4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzOTk6XFx0XFx0aWYgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKVxcbiA0MDA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNDAxOlxcdFxcdHB2Y2MgPSBremFsbG9jX29iaigqcHZjYyk7XFxuIDQwMjpcXHRcXHRpZiAocHZjYyA9PSBOVUxMKVxcbiA0MDM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQwNDpcXHRcXHRwdmNjLVxcdTAwM2VhdG12Y2MgPSBhdG12Y2M7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdC8qIE1heGltdW0gaXMgemVybywgc28gdGhhdCB3ZSBjYW4gdXNlIGF0b21pY19pbmNfbm90X3plcm8oKSAqL1xcbiA0MDc6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHZjYy1cXHUwMDNlaW5mbGlnaHQsIE5PTkVfSU5GTElHSFQpO1xcbiA0MDg6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX3B1c2ggPSBhdG12Y2MtXFx1MDAzZXB1c2g7XFxuIDQwOTpcXHRcXHRwdmNjLVxcdTAwM2VvbGRfcG9wID0gYXRtdmNjLVxcdTAwM2Vwb3A7XFxuIDQxMDpcXHRcXHRwdmNjLVxcdTAwM2VvbGRfb3duZXIgPSBhdG12Y2MtXFx1MDAzZW93bmVyO1xcbiA0MTE6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX3JlbGVhc2VfY2IgPSBhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2I7XFxuIDQxMjpcXHRcXHRwdmNjLVxcdTAwM2VlbmNhcHMgPSAoZW51bSBwcHBvYXRtX2VuY2FwcykgYmUuZW5jYXBzO1xcbiA0MTM6XFx0XFx0cHZjYy1cXHUwMDNlY2hhbi5wcml2YXRlID0gcHZjYztcXG4gNDE0OlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9hdG1fb3BzO1xcbiA0MTU6XFx0XFx0cHZjYy1cXHUwMDNlY2hhbi5tdHUgPSBhdG12Y2MtXFx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cXG4gNDE2OlxcdFxcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XFxuIDQxNzpcXHRcXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwdmNjLVxcdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcXG4gNDE4OlxcdFxcdGVyciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKFxcdTAwMjZwdmNjLVxcdTAwM2VjaGFuKTtcXG4gNDE5OlxcdFxcdGlmIChlcnIgIT0gMCkge1xcbiA0MjA6XFx0XFx0XFx0a2ZyZWUocHZjYyk7XFxuIDQyMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0MjI6XFx0XFx0fVxcbiA0MjM6XFx0XFx0YXRtdmNjLVxcdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xcbiA0MjQ6XFx0XFx0YXRtdmNjLVxcdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xcbiA0MjU6XFx0XFx0YXRtdmNjLVxcdTAwM2Vwb3AgPSBwcHBvYXRtX3BvcDtcXG4gNDI2OlxcdFxcdGF0bXZjYy1cXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcXG4gNDI3OlxcdFxcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XFxuIDQyODpcXHRcXHRhdG12Y2MtXFx1MDAzZW93bmVyID0gVEhJU19NT0RVTEU7XFxuIDQyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6NDIuODk1NjM5NTk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2MDI5MTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUFBQb0FUTSBWQ0MgQXNzaWdubWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZvciBhc3NpZ25pbmcgVmlydHVhbCBDaGFubmVsIENvbm5lY3Rpb25zIChWQ0NzKSB3aXRoIFBQUG9BVE0gaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCB0cmFjaW5nIHRoZSBjYWxscyB0byBgcHBwb2F0bV9hc3NpZ25fdmNjYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgQVRNIGFuZCBQUFBvQVRNIGxheWVycyBpbnRlcmFjdCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgcGh5c2ljYWwgQVRNIGludGVyZmFjZSwgdGhlIFBQUG9BVE0gZW5jYXBzdWxhdGlvbiwgYW5kIHRoZSBldmVudHVhbCBWQ0MgYWxsb2NhdGlvbi4gSSdtIHRoaW5raW5nIEknbGwgbG9vayBmb3IgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ6IHRoZSBBVE0gZGV2aWNlIHN0cnVjdHVyZSwgdGhlIFBQUG9BVE0gc2Vzc2lvbiBzdGF0ZSwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBWQ0MgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3Mgd29ya3MuIEZyb20gdGhpcywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE1OjQ1LjU1NTkzMzI1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk3NDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL3BwcG9hdG0uYz0zODM9c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zODctXFxubmV0L2F0bS9wcHBvYXRtLmM6Mzg4OnN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzg5LXtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTQ0MD1zdGF0aWMgaW50IHBwcG9hdG1faW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ1OC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0NTk6XFx0XFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2MC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE1OjQ1LjYzODkxNDgxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NjUxMjIxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHBwaW9hdG0uYyBpb2N0bCBQbHVtYmluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgZm9yIHRoaXMgYGlvY3RsYCBjYWxsIHdpdGhpbiB0aGUgYHBwcG9hdG1gIG1vZHVsZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRyYWNpbmcgdGhlIGNhbGxlciB3aXRoaW4gYHBwcG9hdG0uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpwcmVjaXNlbHkqIGhvdyBgcHBwb2F0bV9pb2N0bGAgaXMgaW52b2tlZC4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udmVudGlvbnM/IFdoYXQgc3RydWN0dXJlcyBhcmUgcGFzc2VkPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHJlZ2FyZGluZyBzdGF0ZT8gV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGVycm9yIHBhdGhzIGZyb20gdGhlIGNhbGxlciwgYW5kIGhvdyBhcmUgZXJyb3JzIGhhbmRsZWQ/IFRoaXMgaXMgbGlrZWx5IGEga2V5IGFyZWEgZm9yIGRlYnVnZ2luZyBvciBtb2RpZmljYXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGNvbnRleHQgaXMgY3JpdGljYWwuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgdGhlIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucyBgaW9jdGxgIG9yIHNvbWV0aGluZyBjdXN0b20gd2l0aGluIHRoZSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNTo0OS41MDQwNDAyNDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wcHBvYXRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdC8qIHJlLXByb2Nlc3MgZXZlcnl0aGluZyByZWNlaXZlZCBiZXR3ZWVuIGNvbm5lY3Rpb24gc2V0dXAgYW5kXFxuIDQzMTpcXHRcXHQgICBiYWNrZW5kIHNldHVwICovXFxuIDQzMjpcXHRcXHR2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKGF0bXZjYyk7XFxuIDQzMzpcXHRcXHRyZXR1cm4gMDtcXG4gNDM0OlxcdH1cXG4gNDM1OlxcdFxcbiA0MzY6XFx0LypcXG4gNDM3OlxcdCAqIFRoaXMgaGFuZGxlcyBpb2N0bHMgYWN0dWFsbHkgcGVyZm9ybWVkIG9uIG91ciB2Y2MgLSB3ZSBtdXN0IHJldHVyblxcbiA0Mzg6XFx0ICogLUVOT0lPQ1RMQ01EIGZvciBhbnkgdW5yZWNvZ25pemVkIGlvY3RsXFxuIDQzOTpcXHQgKi9cXG4gNDQwOlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbiA0NDE6XFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuIDQ0MjpcXHR7XFxuIDQ0MzpcXHRcXHRzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjID0gQVRNX1NEKHNvY2spO1xcbiA0NDQ6XFx0XFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdGlmIChjbWQgIT0gQVRNX1NFVEJBQ0tFTkQgXFx1MDAyNlxcdTAwMjYgYXRtdmNjLVxcdTAwM2VwdXNoICE9IHBwcG9hdG1fcHVzaClcXG4gNDQ3OlxcdFxcdFxcdHJldHVybiAtRU5PSU9DVExDTUQ7XFxuIDQ0ODpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA0NDk6XFx0XFx0Y2FzZSBBVE1fU0VUQkFDS0VORDoge1xcbiA0NTA6XFx0XFx0XFx0YXRtX2JhY2tlbmRfdCBiO1xcbiA0NTE6XFx0XFx0XFx0aWYgKGdldF91c2VyKGIsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKSBhcmdwKSlcXG4gNDUyOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA0NTM6XFx0XFx0XFx0aWYgKGIgIT0gQVRNX0JBQ0tFTkRfUFBQKVxcbiA0NTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcXG4gNDU1OlxcdFxcdFxcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcXG4gNDU2OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDQ1NzpcXHRcXHRcXHRpZiAoc29jay1cXHUwMDNlc3RhdGUgIT0gU1NfQ09OTkVDVEVEKVxcbiA0NTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ1OTpcXHRcXHRcXHRyZXR1cm4gcHBwb2F0bV9hc3NpZ25fdmNjKGF0bXZjYywgYXJncCk7XFxuIDQ2MDpcXHRcXHRcXHR9XFxuIDQ2MTpcXHRcXHRjYXNlIFBQUElPQ0dDSEFOOlxcbiA0NjI6XFx0XFx0XFx0cmV0dXJuIHB1dF91c2VyKHBwcF9jaGFubmVsX2luZGV4KFxcdTAwMjZhdG12Y2NfdG9fcHZjYyhhdG12Y2MpLVxcdTAwM2VcXG4gNDYzOlxcdFxcdFxcdCAgICBjaGFuKSwgKGludCBfX3VzZXIgKikgYXJncCkgPyAtRUZBVUxUIDogMDtcXG4gNDY0OlxcdFxcdGNhc2UgUFBQSU9DR1VOSVQ6XFxuIDQ2NTpcXHRcXHRcXHRyZXR1cm4gcHV0X3VzZXIocHBwX3VuaXRfbnVtYmVyKFxcdTAwMjZhdG12Y2NfdG9fcHZjYyhhdG12Y2MpLVxcdTAwM2VcXG4gNDY2OlxcdFxcdFxcdCAgICBjaGFuKSwgKGludCBfX3VzZXIgKikgYXJncCkgPyAtRUZBVUxUIDogMDtcXG4gNDY3OlxcdFxcdH1cXG4gNDY4OlxcdFxcdHJldHVybiAtRU5PSU9DVExDTUQ7XFxuIDQ2OTpcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdHN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIHBwcG9hdG1faW9jdGxfb3BzID0ge1xcbiA0NzI6XFx0XFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG4gNDczOlxcdFxcdC5pb2N0bFxcdD0gcHBwb2F0bV9pb2N0bCxcXG4gNDc0OlxcdH07XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdHN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxcbiA0Nzc6XFx0e1xcbiA0Nzg6XFx0XFx0cmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxuIDQ3OTpcXHRcXHRyZXR1cm4gMDtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxcbiA0ODM6XFx0e1xcbiA0ODQ6XFx0XFx0ZGVyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcXG4gNDg1OlxcdH1cXG4gNDg2OlxcdFxcbiA0ODc6XFx0bW9kdWxlX2luaXQocHBwb2F0bV9pbml0KTtcXG4gNDg4OlxcdG1vZHVsZV9leGl0KHBwcG9hdG1fZXhpdCk7XFxuIDQ4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6NDkuNTA0Mjk3MjQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ1OTY5Mjg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQUFBvQVRNIFZDQyBBc3NpZ25tZW50KipcblxuT2theSwgc28gYHBwcG9hdG1fYXNzaWduX3ZjY2AuLi4gdGhhdCdzIHRoZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gQVRNIHNvY2tldCwgdXNpbmcgYGlvY3RsYCB3aXRoIGBBVE1fU0VUQkFDS0VORGAsIGFuZCB0aGUgYmFja2VuZCBpcyBzZXQgdG8gUFBQLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlcmUgd2FzIGEgbmFzdHkgYnVnLiBJZiBhIFZpcnR1YWwgQ2hhbm5lbCBDb25uZWN0aW9uIChWQ0MpIGFscmVhZHkgaGFkIGEgYHVzZXJfYmFja2Agc2V0IChvciBpZiBgQVRNX1NFVEJBQ0tFTkRgIHdhcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIG9yIHdpdGggYSBkaWZmZXJlbnQgYmFja2VuZCBpbml0aWFsbHkpLCB0aGUgY29kZSB3b3VsZCBhbGxvY2F0ZSAqYW5vdGhlciogYHB2Y2NgIHN0cnVjdCwgb3ZlcndyaXRlIHRoZSBleGlzdGluZyBgYXRtdmNjLVx1MDAzZXVzZXJfYmFja2AgcG9pbnRlciB3aXRoIHRoZSBuZXcgb25lLCBhbmQgYWxzbyBjbG9iYmVyIHRoZSBmdW5jdGlvbiBwb2ludGVyIGBhdG12Y2MtXHUwMDNlcHVzaGAhIE1lbW9yeSBsZWFrIGFuZCBzdGF0ZSBjb3JydXB0aW9uLCBjbGFzc2ljLlxuXG5CdXQgd2l0aCB0aGUgcGF0Y2g/IE5vdyBpdCBqdXN0IGNoZWNrcyBpZiBgYXRtdmNjLVx1MDAzZXVzZXJfYmFja2AgaXMgc2V0IGFuZCByZXR1cm5zIGAtRUJVU1lgIGlmIGl0IGlzLiBNdWNoIGNsZWFuZXIuIEEgZ29vZCBwcm90ZWN0aW9uIG1lYXN1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGNhbiBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgc2l0dWF0aW9uIGluIGEgdGVzdGluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIENhbiB3ZSBldmVuICpnZXQqIEFUTSBpbnRlcmZhY2VzIGluIFFFTVU/IFllcywgbG9va3MgbGlrZSB3ZSBjYW4uIFdlJ3ZlIGdvdCBgc29ja2V0KEFGX0FUTVNWQywgLi4uKWAgb3IgYHNvY2tldChBRl9BVE1QVkMsIC4uLilgIGNhbGxzLCBvciBldmVuIHNpbXVsYXRlZCBBVE0gZGV2aWNlcywgcG90ZW50aWFsbHkgdXNpbmcgdGhpbmdzIGxpa2UgYGF0bV90Y3BgIG9yIG90aGVyIHZpcnR1YWwgaW50ZXJmYWNlcy4gVGhhdCdzIGdvb2Q7IGl0IGdpdmVzIHVzIG9wdGlvbnMuXG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYG5ldC9hdG0vS2NvbmZpZ2AgYW5kIGBuZXQvYXRtL01ha2VmaWxlYCBmaWxlcyBuZXh0IHRvIHNlZSB3aGF0IEFUTSBjb21wb25lbnRzIGFyZSBhdmFpbGFibGUsIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGhvdyB0aGV5IGdldCBidWlsdCBpbnRvIHRoZSBrZXJuZWwgZm9yIHRlc3RpbmcuIFRoaXMnbGwgaGVscCBtZSBmaWd1cmUgb3V0IGhvdyB0byBzZXQgdXAgdGhlIGVudmlyb25tZW50IGVmZmVjdGl2ZWx5IGZvciBmdXp6aW5nIGFuZCB2ZXJpZnlpbmcgdGhpcyBwYXRjaC4gV2UgY2FuIHRyeSB0byBjcmVhdGUgYSBzY2VuYXJpbyB3aGVyZSB3ZSBjYW4gZGVsaWJlcmF0ZWx5IGNhdXNlIHRoZSBgQVRNX1NFVEJBQ0tFTkRgIGlvY3RsIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgc2ltdWxhdGluZyB0aGUgb3JpZ2luYWwgYnVnIGNvbmRpdGlvbiBhbmQgcHJvdmluZyB0aGUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6NTMuOTYzOTkyMDc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXFxuICAxMDpcXHRcXHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXFxuICAxMTpcXHRcXHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxcbiAgMTI6XFx0XFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxcbiAgMTU6XFx0XFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXFxuICAxNjpcXHRcXHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcXG4gIDE5OlxcdFxcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XFx1MDAzZSBmb3JcXG4gIDIwOlxcdFxcdCAgZnVydGhlciBkZXRhaWxzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgQVRNX0JSMjY4NFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgQVRNIFBWQ3MgY2FuIGNhcnJ5IGV0aGVybmV0IFBEVXMgYWNjb3JkaW5nIHRvIFJGQzI2ODQgKGZvcm1lcmx5IDE0ODMpXFxuICAyNzpcXHRcXHQgIFRoaXMgZGV2aWNlIHdpbGwgYWN0IGxpa2UgYW4gZXRoZXJuZXQgZnJvbSB0aGUga2VybmVscyBwb2ludCBvZiB2aWV3LFxcbiAgMjg6XFx0XFx0ICB3aXRoIHRoZSB0cmFmZmljIGJlaW5nIGNhcnJpZWQgYnkgQVRNIFBWQ3MgKGN1cnJlbnRseSAxIFBWQy9kZXZpY2UpLlxcbiAgMjk6XFx0XFx0ICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VkIG92ZXIgRFNMIGxpbmVzLiAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIEFUTV9CUjI2ODRcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgbWVjaGFuaXNtIGZvciB1c2VycyB3aG8gbmVlZCB0byB0ZXJtaW5hdGUgYVxcbiAgMzY6XFx0XFx0ICBsYXJnZSBudW1iZXIgb2YgSVAtb25seSB2Y2Mncy4gIERvIG5vdCBlbmFibGUgdGhpcyB1bmxlc3MgeW91IGFyZSBzdXJlXFxuICAzNzpcXHRcXHQgIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6NTMuOTY0MDUyNTU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2OTM4NjM3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBEb3duIFBQUE9BVE0gaW4gdGhlIEtjb25maWcgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYFBQUE9BVE1gIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIGV4ZXJjaXNlIHdoZW4gZGlnZ2luZyBpbnRvIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgYEtjb25maWdgIGZpbGUgd2hlcmUgYFBQUE9BVE1gIGlzIGZpcnN0IGludHJvZHVjZWQsIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIHByb21wdHMsIGFuZCB1bHRpbWF0ZWx5LCBpdHMgaW1wbGljYXRpb25zIGZvciB0aGUgYnVpbGQuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgaXMgbmVzdGVkLCBzbyBJIHdpbGwgbmVlZCB0byBpdGVyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTcyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjowMS42NTc5MTgyOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjMwMjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBvYXRtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5uZXQvYXRtL01ha2VmaWxlLTExLVxcbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcbi0tXFxubmV0L2F0bS9pb2N0bC5jPTQzPXN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmMtOTQtXFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XFxubmV0L2F0bS9pb2N0bC5jOjk1OlxcdFxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJwcHBvYXRtXFxcIik7XFxubmV0L2F0bS9pb2N0bC5jLTk2LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbm5ldC9hdG0vcHBwb2F0bS5jOjI6LyogbmV0L2F0bS9wcHBvYXRtLmMgLSBSRkMyMzY0IFBQUCBvdmVyIEFUTS9BQUw1ICovXFxubmV0L2F0bS9wcHBvYXRtLmMtMy1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ5LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjUwOmVudW0gcHBwb2F0bV9lbmNhcHMge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTUxLVxcdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy01NS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo1NjpzdHJ1Y3QgcHBwb2F0bV92Y2Mge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTU3LVxcdHN0cnVjdCBhdG1fdmNjXFx0KmF0bXZjYztcXHQvKiBWQ0MgZGVzY3JpcHRvciAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNjItXFx0XFx0XFx0XFx0XFx0Lyoga2VlcCBvbGQgcHVzaC9wb3AgZm9yIGRldGFjaGluZyAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjYzOlxcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTY0LVxcdGF0b21pY190IGluZmxpZ2h0O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9ODY9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHBwbGxjWzZdID0geyAweEZFLCAweEZFLCAweDAzLCAweENGLCAweEMwLCAweDIxIH07XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo4OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy05MC17XFxubmV0L2F0bS9wcHBvYXRtLmM6OTE6XFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy05Mi19XFxubmV0L2F0bS9wcHBvYXRtLmMtOTMtXFxubmV0L2F0bS9wcHBvYXRtLmM6OTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxubmV0L2F0bS9wcHBvYXRtLmMtOTUte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjk2OlxcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChjaGFuLVxcdTAwM2Vwcml2YXRlKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy05Ny19XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDMtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTA0OnN0YXRpYyB2b2lkIHBwcG9hdG1fd2FrZXVwX3NlbmRlcihzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTA1LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMDY6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gZnJvbV90YXNrbGV0KHB2Y2MsIHQsIHdha2V1cF90YXNrbGV0KTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDctXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTAtXFxubmV0L2F0bS9wcHBvYXRtLmM6MTExOnN0YXRpYyB2b2lkIHBwcG9hdG1fcmVsZWFzZV9jYihzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTEzOlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTE0LVxcbm5ldC9hdG0vcHBwb2F0bS5jLTExNS1cXHQvKlxcbm5ldC9hdG0vcHBwb2F0bS5jOjExNjpcXHQgKiBBcyBpbiBwcHBvYXRtX3BvcCgpLCBpdCdzIHNhZmUgdG8gY2xlYXIgdGhlIEJMT0NLRUQgYml0IGhlcmUgYmVjYXVzZVxcbm5ldC9hdG0vcHBwb2F0bS5jOjExNzpcXHQgKiB0aGUgd2FrZXVwICpjYW4ndCogcmFjZSB3aXRoIHBwcG9hdG1fc2VuZCgpLiBUaGV5IGJvdGggaG9sZCB0aGUgUFBQXFxubmV0L2F0bS9wcHBvYXRtLmMtMTE4LVxcdCAqIGNoYW5uZWwncyAtXFx1MDAzZWRvd25sIGxvY2suIEFuZCB0aGUgcG90ZW50aWFsIHJhY2Ugd2l0aCAqc2V0dGluZyogaXQsXFxubmV0L2F0bS9wcHBvYXRtLmM6MTE5OlxcdCAqIHdoaWNoIGxlYWRzIHRvIHRoZSBkb3VibGUtY2hlY2sgZGFuY2UgaW4gcHBwb2F0bV9tYXlfc2VuZCgpLCBkb2Vzbid0XFxubmV0L2F0bS9wcHBvYXRtLmM6MTIwOlxcdCAqIGV4aXN0IGhlcmUuIEluIHRoZSBzb2NrX293bmVkX2J5X3VzZXIoKSBjYXNlIGluIHBwcG9hdG1fc2VuZCgpLCB3ZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEyMS1cXHQgKiBzZXQgdGhlIEJMT0NLRUQgYml0IHdoaWxlIHRoZSBzb2NrZXQgaXMgc3RpbGwgbG9ja2VkLiBXZSBrbm93IHRoYXRcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEzMy0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzoxMzQ6c3RhdGljIHZvaWQgcHBwb2F0bV9wb3Aoc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzUte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjEzNjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTEzNy1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE0My1cXHQgKiBmZWFyIG9mIHJhY2UgY29uZGl0aW9ucyB3aGVyZSB3ZSBjbGVhciB0aGUgQkxPQ0tFRCBmbGFnIGp1c3QgYXMgd2VcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDQ6XFx0ICogcmVmdXNlIGFub3RoZXIgcGFja2V0IGluIHBwcG9hdG1fc2VuZCgpLiBUaGlzIHdhcyBxdWl0ZSBpbmVmZmljaWVudC5cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDUtXFx0ICpcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDY6XFx0ICogSW4gZmFjdCBpdCdzIE9LLiBUaGUgUFBQIGNvcmUgd2lsbCBvbmx5IGV2ZXIgY2FsbCBwcHBvYXRtX3NlbmQoKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE0Ny1cXHQgKiB3aGlsZSBob2xkaW5nIHRoZSBjaGFubmVsLVxcdTAwM2Vkb3dubCBsb2NrLiBBbmQgcHBwX291dHB1dF93YWtldXAoKSBhc1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE0OC1cXHQgKiBjYWxsZWQgYnkgdGhlIHRhc2tsZXQgd2lsbCAqYWxzbyogZ3JhYiB0aGF0IGxvY2suIFNvIGV2ZW4gaWYgYW5vdGhlclxcbm5ldC9hdG0vcHBwb2F0bS5jOjE0OTpcXHQgKiBDUFUgaXMgaW4gcHBwb2F0bV9zZW5kKCkgcmlnaHQgbm93LCB0aGUgdGFza2xldCBpc24ndCBnb2luZyB0byByYWNlXFxubmV0L2F0bS9wcHBvYXRtLmMtMTUwLVxcdCAqIHdpdGggaXQuIFRoZSB3YWtldXAgKndpbGwqIGhhcHBlbiBhZnRlciB0aGUgb3RoZXIgQ1BVIGlzIHNhZmVseSBvdXRcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNTE6XFx0ICogb2YgcHBwb2F0bV9zZW5kKCkgYWdhaW4uXFxubmV0L2F0bS9wcHBvYXRtLmMtMTUyLVxcdCAqXFxubmV0L2F0bS9wcHBvYXRtLmM6MTUzOlxcdCAqIFNvIGlmIHRoZSBDUFUgaW4gcHBwb2F0bV9zZW5kKCkgaGFzIGFscmVhZHkgc2V0IHRoZSBCTE9DS0VEIGJpdCBhbmRcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTQtXFx0ICogaXQgYWJvdXQgdG8gcmV0dXJuLCB0aGF0J3MgZmluZS4gV2UgdHJpZ2dlciBhIHdha2V1cCB3aGljaCB3aWxsXFxubmV0L2F0bS9wcHBvYXRtLmM6MTU1OlxcdCAqIGhhcHBlbiBsYXRlci4gQW5kIGlmIHRoZSBDUFUgaW4gcHBwb2F0bV9zZW5kKCkgKmhhc24ndCogc2V0IHRoZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE1Ni1cXHQgKiBCTE9DS0VEIGJpdCB5ZXQsIHRoYXQncyBmaW5lIHRvbyBiZWNhdXNlIG9mIHRoZSBkb3VibGUgY2hlY2sgaW5cXG5uZXQvYXRtL3BwcG9hdG0uYzoxNTc6XFx0ICogcHBwb2F0bV9tYXlfc2VuZCgpIHdoaWNoIGlzIGNvbW1lbnRlZCB0aGVyZS5cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTgtXFx0ICovXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNjYtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTY3OnN0YXRpYyB2b2lkIHBwcG9hdG1fdW5hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTY4LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNjk6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE3MC1cXHRwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE4MC0vKiBDYWxsZWQgd2hlbiBhbiBBQUw1IFBEVSBjb21lcyBpbiAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE4MTpzdGF0aWMgdm9pZCBwcHBvYXRtX3B1c2goc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYXRtL3BwcG9hdG0uYy0xODIte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE4MzpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE4NC1cXHRwcl9kZWJ1ZyhcXFwiXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE4OS1cXHRcXHRtb2R1bGUgPSBwdmNjLVxcdTAwM2VvbGRfb3duZXI7XFxubmV0L2F0bS9wcHBvYXRtLmM6MTkwOlxcdFxcdHBwcG9hdG1fdW5hc3NpZ25fdmNjKGF0bXZjYyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTkxLVxcdFxcdGF0bXZjYy1cXHUwMDNlcHVzaChhdG12Y2MsIE5VTEwpO1xcdC8qIFBhc3MgYWxvbmcgYmFkIG5ld3MgKi9cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIzMy1cXG5uZXQvYXRtL3BwcG9hdG0uYzoyMzQ6c3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpXFxubmV0L2F0bS9wcHBvYXRtLmMtMjM1LXtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI1Ni1cXHQvKlxcbm5ldC9hdG0vcHBwb2F0bS5jOjI1NzpcXHQgKiBXZSBtYXkgaGF2ZSByYWNlZCB3aXRoIHBwcG9hdG1fcG9wKCkuIElmIGl0IHJhbiBmb3IgdGhlXFxubmV0L2F0bS9wcHBvYXRtLmMtMjU4LVxcdCAqIGxhc3QgcGFja2V0IGluIHRoZSBxdWV1ZSwgKmp1c3QqIGJlZm9yZSB3ZSBzZXQgdGhlIEJMT0NLRURcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI2NC1cXHQgKiBydW4gdGhlIHdha2V1cCB0YXNrbGV0LiBBbm90aGVyIHdha2V1cCB3aWxsIG5ldmVyIGh1cnQuXFxubmV0L2F0bS9wcHBvYXRtLmM6MjY1OlxcdCAqIElmIHBwcG9hdG1fcG9wKCkgaXMgcnVubmluZyBidXQgaGFzbid0IGdvdCBhcyBmYXIgYXMgbWFraW5nXFxubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVxcdCAqIHNwYWNlIG9uIHRoZSBxdWV1ZSB5ZXQsIHRoZW4gaXQgaGFzbid0IGNoZWNrZWQgdGhlIEJMT0NLRURcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI2OS1cXHQgKiB0YWtpbmcgdGhlIFBQUCBjaGFubmVsJ3MgLVxcdTAwM2Vkb3dubCBsb2NrLCB3aGljaCBpcyBoZWxkIGJ5IHRoZVxcbm5ldC9hdG0vcHBwb2F0bS5jOjI3MDpcXHQgKiBjb2RlIHBhdGggdGhhdCBjYWxscyBwcHBvYXRtX3NlbmQoKSwgYW5kIGlzIHRodXMgZ29pbmcgdG9cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNzEtXFx0ICogd2FpdCBmb3IgdXMgdG8gZmluaXNoLlxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMjg4LSNkZWZpbmUgRFJPUF9QQUNLRVQgMVxcbm5ldC9hdG0vcHBwb2F0bS5jOjI4OTpzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMjkwLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoyOTE6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gY2hhbl90b19wdmNjKGNoYW4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTI5Mi1cXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzIzLVxcdFxcdFxcdGlmIChuICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL3BwcG9hdG0uYzozMjQ6XFx0XFx0XFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXFx1MDAzZXRydWVzaXplKSkge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTMyNS1cXHRcXHRcXHRcXHRrZnJlZV9za2Iobik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zMzMtXFx0XFx0XFx0fVxcbm5ldC9hdG0vcHBwb2F0bS5jOjMzNDpcXHRcXHR9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMzNS1cXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zMzgtXFx0Y2FzZSBlX3ZjOlxcbm5ldC9hdG0vcHBwb2F0bS5jOjMzOTpcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzQwLVxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM2OC0vKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM2OTpzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcXG5uZXQvYXRtL3BwcG9hdG0uYy0zNzAtXFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zODItXFxubmV0L2F0bS9wcHBvYXRtLmM6MzgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM4NDpcXHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcXG5uZXQvYXRtL3BwcG9hdG0uYzozODU6XFx0LmlvY3RsID0gcHBwb2F0bV9kZXZwcHBfaW9jdGwsXFxubmV0L2F0bS9wcHBvYXRtLmMtMzg2LX07XFxubmV0L2F0bS9wcHBvYXRtLmMtMzg3LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4ODpzdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM4OS17XFxubmV0L2F0bS9wcHBvYXRtLmMtMzkwLVxcdHN0cnVjdCBhdG1fYmFja2VuZF9wcHAgYmU7XFxubmV0L2F0bS9wcHBvYXRtLmM6MzkxOlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYy0zOTItXFx0aW50IGVycjtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQxMS1cXHRwdmNjLVxcdTAwM2VvbGRfcmVsZWFzZV9jYiA9IGF0bXZjYy1cXHUwMDNlcmVsZWFzZV9jYjtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTI6XFx0cHZjYy1cXHUwMDNlZW5jYXBzID0gKGVudW0gcHBwb2F0bV9lbmNhcHMpIGJlLmVuY2FwcztcXG5uZXQvYXRtL3BwcG9hdG0uYy00MTMtXFx0cHZjYy1cXHUwMDNlY2hhbi5wcml2YXRlID0gcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTQ6XFx0cHZjYy1cXHUwMDNlY2hhbi5vcHMgPSBcXHUwMDI2cHBwb2F0bV9vcHM7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDE1LVxcdHB2Y2MtXFx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVxcdTAwM2Vxb3MudHh0cC5tYXhfc2R1IC0gUFBQX0hEUkxFTiAtXFxubmV0L2F0bS9wcHBvYXRtLmMtNDE2LVxcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDE3OlxcdHRhc2tsZXRfc2V0dXAoXFx1MDAyNnB2Y2MtXFx1MDAzZXdha2V1cF90YXNrbGV0LCBwcHBvYXRtX3dha2V1cF9zZW5kZXIpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQxOC1cXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2cHZjYy1cXHUwMDNlY2hhbik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MjMtXFx0YXRtdmNjLVxcdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQyNDpcXHRhdG12Y2MtXFx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDI1OlxcdGF0bXZjYy1cXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDI2OlxcdGF0bXZjYy1cXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcXG5uZXQvYXRtL3BwcG9hdG0uYy00MjctXFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzOS0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NDA6c3RhdGljIGludCBwcHBvYXRtX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxubmV0L2F0bS9wcHBvYXRtLmMtNDQxLVxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDQ1LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjQ0NjpcXHRpZiAoY21kICE9IEFUTV9TRVRCQUNLRU5EIFxcdTAwMjZcXHUwMDI2IGF0bXZjYy1cXHUwMDNlcHVzaCAhPSBwcHBvYXRtX3B1c2gpXFxubmV0L2F0bS9wcHBvYXRtLmMtNDQ3LVxcdFxcdHJldHVybiAtRU5PSU9DVExDTUQ7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NTgtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDU5OlxcdFxcdHJldHVybiBwcHBvYXRtX2Fzc2lnbl92Y2MoYXRtdmNjLCBhcmdwKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjAtXFx0XFx0fVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDcwLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjQ3MTpzdGF0aWMgc3RydWN0IGF0bV9pb2N0bCBwcHBvYXRtX2lvY3RsX29wcyA9IHtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NzItXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG5uZXQvYXRtL3BwcG9hdG0uYzo0NzM6XFx0LmlvY3RsXFx0PSBwcHBvYXRtX2lvY3RsLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3NC19O1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3NS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NzY6c3RhdGljIGludCBfX2luaXQgcHBwb2F0bV9pbml0KHZvaWQpXFxubmV0L2F0bS9wcHBvYXRtLmMtNDc3LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0Nzg6XFx0cmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc5LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDgxLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjQ4MjpzdGF0aWMgdm9pZCBfX2V4aXQgcHBwb2F0bV9leGl0KHZvaWQpXFxubmV0L2F0bS9wcHBvYXRtLmMtNDgzLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODQ6XFx0ZGVyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00ODUtfVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ4Ni1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODc6bW9kdWxlX2luaXQocHBwb2F0bV9pbml0KTtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODg6bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00ODktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjAyLjEzNDIyNTc2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzkwNDA0MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biB0aGUgUFBQT0FUTSBLY29uZmlnIFN5bWJvbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBLY29uZmlnIHN5bWJvbCBhc3NvY2lhdGVkIHdpdGggUFBQT0FUTS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJ2xsIGFwcHJvYWNoIHRoaXMgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUsIHN0YXJ0aW5nIHdpdGggdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9ucy5cblxuRmlyc3QsIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFBQUE9BVE0gaXMgb2J2aW91c2x5IGEgbmV0d29ya2luZyBwcm90b2NvbCwgc28gYSBkaXZlIGludG8gdGhlIGBuZXQvYCBkaXJlY3RvcnkgYW5kIGl0cyBgS2NvbmZpZ2AgZmlsZXMgZmVlbHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB0aGF0IHNlZW1zIHJlbGV2YW50IOKAkyBtYXliZSBuYW1lZCBgYXRtYCwgYHBwcGAsIG9yIGBwcHBvYWAsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIGxpa2UgYHBwcG9hdG1gLiBJIGtub3cgdGhlIG5hbWluZyBjb252ZW50aW9ucyBjYW4gYmUgYSBiaXTigKYgd2VsbCwgdW5wcmVkaWN0YWJsZSBzb21ldGltZXMsIHNvIEnigJlsbCBuZWVkIHRvIHRoaW5rIGxhdGVyYWxseSBpZiB0aGUgb2J2aW91cyBzZWFyY2ggdGVybXMgZG9uJ3QgaGl0IGltbWVkaWF0ZWx5LlxuXG5JZiB0aGF0IGluaXRpYWwgYnJvYWQgc2VhcmNoIGRvZXNu4oCZdCB5aWVsZCBhbnl0aGluZyB1c2VmdWwsIEnigJlsbCBuZWVkIHRvIHJlZmluZSBteSBhcHByb2FjaC4gSeKAmWxsIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbW9yZSBzcGVjaWZpYyBzdWItZGlyZWN0b3JpZXMgYW5kIHJlbGF0ZWQgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJcyBQUFBPQVRNIGxpa2VseSB0cmVhdGVkIGFzIGEgZGlzdGluY3QgaW50ZXJmYWNlPyBPciBpcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIFBQUCBzdXBwb3J0IGNvbmZpZ3VyYXRpb24/IERvZXMgaXQgbGVhbiBvbiBBVE0gZHJpdmVycz8gSSBrbm93IGl0IGRlcGVuZHMsIHNvIEknbGwgZm9sbG93IHRoZSBicmVhZGNydW1icyBmcm9tIHdoZXJlIGl0IGxvb2tzIGxpa2UgaXQgYmVsb25ncy4gSeKAmWxsIGJlIHRyeWluZyB0byBpZGVudGlmeSBkZXBlbmRlbmNpZXMgb3IgY29ubmVjdGlvbnMgdG8gb3RoZXIgc3ltYm9scy5cblxuVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgc3ltYm9sIHRoYXQsIHdoZW4gZW5hYmxlZCwgaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBkcml2ZXJzLCBtb2R1bGVzLCBvciBjb25maWd1cmF0aW9ucyBmb3IgUFBQT0FUTS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGl0IG1pZ2h0IGJlIGEgKmJvb2xlYW4qIHN5bWJvbCwgb3IgcG90ZW50aWFsbHkgYSAqdHJpc3RhdGUqIGlmIGl0IGNhbiBiZSBidWlsdCBhcyBhIG1vZHVsZS4gT25jZSBJIGhhdmUgdGhlIHN5bWJvbCwgSSBjYW4gc3RhcnQgbG9va2luZyBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFuZCBnZXQgYmFjayB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY2OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjA1LjUyNDYzMzY4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NjI4ODIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQUFBPQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTkyPWNvbmZpZyBQUFBfTVVMVElMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTA0OmNvbmZpZyBQUFBPQVRNXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBBVE1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjA2LjU3MDkyNjY5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA1NzMzNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFBQUCBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyB0byB3b3JrIG9uLCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgUFBQIGNvbmZpZ3VyYXRpb24gZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBQUFAgZHJpdmVyLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbiwgYXJvdW5kIGxpbmUgMTA0IGluIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIFRoYXQgbG9jYXRpb24gc2hvdWxkIGNvbnRhaW4gdGhlIGNvcmUgb3B0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGdyaXAgb24gaG93IGFsbCBvZiB0aGUgb3B0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjowOC41NzY2NjIyODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHBwZCBkYWVtb24gd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG11bHRpbGluayBwcm90b2NvbC5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgUFBQT0FUTVxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXFxuIDEwOTpcXHRcXHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxcbiAxMTA6XFx0XFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXFxuIDExMTpcXHRcXHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgUFBQT1hcXG4gMTE0OlxcdFxcdHRyaXN0YXRlXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBQUFBPRVxcbiAxMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEV0aGVybmV0XFxcIlxcbiAxMTg6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDExOTpcXHRcXHRoZWxwXFxuIDEyMDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cXG4gMTIzOlxcdFxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuIDEyNDpcXHRcXHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XFxuIDEyNTpcXHRcXHQgIFxcdTAwM2NodHRwczovL2RpYW5uZS5za29sbC5jYS9wcm9qZWN0cy9ycC1wcHBvZS9cXHUwMDNlLlxcbiAxMjY6XFx0XFxuIDEyNzpcXHRjaG9pY2VcXG4gMTI4OlxcdFxcdHByb21wdCBcXFwiTnVtYmVyIG9mIFBQUG9FIGhhc2ggYml0c1xcXCJcXG4gMTI5OlxcdFxcdGRlZmF1bHQgUFBQT0VfSEFTSF9CSVRTXzRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MDguNTc2NzMzODU1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5NDE4MDg3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgUFBQT0FUTSBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFBQUE9BVE0gaXMgYWN0dWFsbHkgYnVpbHQuIEl0J3MgYSBiaXQgb2YgYW4gb2xkZXIgdGVjaG5vbG9neSwgYW5kIHRoZSBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIGEgbGl0dGxlIG9ic2N1cmUsIHNvIEkgc2hvdWxkIGRpdmUgaW50byB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBkaXJlY3RseS4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIGV4YW1pbmUgdGhlIE1ha2VmaWxlcyBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9wcHAvTWFrZWZpbGVgLCB0aGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGdpdmVuIGl0cyBhc3NvY2lhdGlvbiB3aXRoIFBQUC4gQW5kIHNpbmNlIFBQUE9BVE0gY29tYmluZXMgUFBQIGFuZCBBVE0sIEknbGwgYWxzbyBjaGVjayBvdXQgYG5ldC9hdG0vTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSByZWxldmFudCBidWlsZCBsb2dpYyBvciBkZXBlbmRlbmNpZXMgaW4gdGhlcmUuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMsIGFueSBvdGhlciBkcml2ZXJzIG9yIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYWxvbmdzaWRlIFBQUE9BVE0sIGFuZCB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGUgbW9kdWxlLiBUaGlzIHNob3VsZCBoZWxwIG1lIGNvbmZpcm0gdGhhdCBJIGhhdmUgYW4gYWNjdXJhdGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODE4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjoxNS41MTg1NDU1NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDk0NjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQUFBPQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5uZXQvYXRtL01ha2VmaWxlLTExLVxcbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9NTA9ZW51bSBwcHBvYXRtX2VuY2FwcyB7XFxubmV0L2F0bS9wcHBvYXRtLmM6NTE6XFx0ZV9hdXRvZGV0ZWN0ID0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCxcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MjpcXHRlX3ZjID0gUFBQT0FUTV9FTkNBUFNfVkMsXFxubmV0L2F0bS9wcHBvYXRtLmM6NTM6XFx0ZV9sbGMgPSBQUFBPQVRNX0VOQ0FQU19MTEMsXFxubmV0L2F0bS9wcHBvYXRtLmMtNTQtfTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTM4OD1zdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzk1LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM5NjpcXHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL3BwcG9hdG0uYzozOTc6XFx0ICAgIGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19WQyBcXHUwMDI2XFx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM5OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MTUuNjUzNTAyOTE5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDA3MjUzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIFBQUCBvdmVyIEFUTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbiBhbmQgc2VlIGhvdyB0aGUgUFBQIG92ZXIgQVRNIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBzbyBJJ2xsIGNoZWNrIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIEl0IHNlZW1zIHRoYXQgUFBQT0FUTSByZWxpZXMgb24gYm90aCBBVE0gYW5kIFBQUCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyByZWxhdGlvbnNoaXAsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhyb3VnaCB0aGUgZmlyc3QgNTAgbGluZXMgb2YgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgbGlua2VkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjE4LjA1NDIzMTQyOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBQUF9CU0RDT01QXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxcXCJcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xcbiAgNDE6XFx0XFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXFxuICA0MjpcXHRcXHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcXG4gIDQzOlxcdFxcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXG4gIDQ0OlxcdFxcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCxcXG4gIDQ1OlxcdFxcdCAgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFxcXCJQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblxcXCIsXFxuICA0ODpcXHRcXHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxcbiAgNDk6XFx0XFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXFxuICA1MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MTguMDU0MzA5OTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MzkzODEzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0dXAgYW5kIEkgc2VlIHRoYXQgYFBQUE9BVE1gIGlzIG5lc3RlZCByaWdodCBpbnNpZGUgYGlmIFBQUGAsIHdoaWNoIHRoZW4gaW5jbHVkZXMgYGNvbmZpZyBQUFBPQVRNYC4gQ2xlYXJseSwgYFBQUE9BVE1gIGlzIGRlcGVuZGVudCBvbiBgUFBQYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIG9uZS4gQW5kLCBieSBleHRlbnNpb24sIGl0IGFsc28gbmVlZHMgYEFUTWAsIHNpbmNlIGl0J3MgXCJQUFBvQSoqVE0qKlwiLiBXZSBhbGwga25vdyB0aGlzLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guXG5cbk15IG5leHQgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywgdXBzdHJlYW0gb3IgZG93bnN0cmVhbSwgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcgZm9yIGVpdGhlciBgUFBQYCBvciBgQVRNYD8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBoZXJlLlxuXG5TbywgSeKAmW0gZGlnZ2luZyBpbnRvIHRoZSBzb3VyY2UuIEluIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgaG93IGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBQUFAgaW1wbGVtZW50YXRpb24gKGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2ApIGJlaW5nIHNvdXJjZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgY2hhaW4gYmFjayBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc3VidGxlIHRoYXQgY291bGQgaW1wYWN0IG15IHdvcmsuIExldCdzIGZpbmQgb3V0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjIuOTkzNjk0MzQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY2MzY5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz01MjY9c291cmNlIFxcXCJkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MjctXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1Mjg6c291cmNlIFxcXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjMuMjYwMzM2MDk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTQwOTUwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gSSdtIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgaXQuIExldCdzIHN0YXJ0IHdpdGggdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIGFyb3VuZCBsaW5lIDUyOC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3Igb3B0aW9uIHJlc2lkZXMuIFRpbWUgdG8gc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBoaWRpbmcgdGhlcmUuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjUuNTc0NDMzOTU2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTE1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTE1OlxcdFxcbiA1MTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xcXCJcXG4gNTE3OlxcdFxcbiA1MTg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ1xcXCJcXG4gNTE5OlxcdFxcbiA1MjA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcXFwiXFxuIDUyMTpcXHRcXG4gNTIyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXFxcIlxcbiA1MjM6XFx0XFxuIDUyNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxcIlxcbiA1MjU6XFx0XFxuIDUyNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1xcXCJcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1xcXCJcXG4gNTI5OlxcdFxcbiA1MzA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcXFwiXFxuIDUzMTpcXHRcXG4gNTMyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXFxcIlxcbiA1MzM6XFx0XFxuIDUzNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXFxcIlxcbiA1MzU6XFx0XFxuIDUzNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcXFwiXFxuIDUzNzpcXHRcXG4gNTM4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2FuL0tjb25maWdcXFwiXFxuIDUzOTpcXHRcXG4gNTQwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnXFxcIlxcbiA1NDE6XFx0XFxuIDU0MjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ1xcXCJcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjUuNTc0NTEyOTA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjE3NzE2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgTkVUREVWSUNFU2Agb3B0aW9uIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGBORVRERVZJQ0VTYCBuZXN0ZWQgd2l0aGluIGEgYG1lbnVjb25maWcgTkVUREVWSUNFU2AgYmxvY2ssIHdoaWNoIGxpa2VseSBkZXBlbmRzIG9uIHRoZSBicm9hZGVyIGBORVRgIGZlYXR1cmUuIFRoZW4sIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBORVRfQVRNYCAvIGBBVE1gIGFyZSBjb25maWd1cmVkIGluIHRoZSBgbmV0L0tjb25maWdgIGZpbGUsIGFzIEFUTSBpcyBhbm90aGVyIHBpZWNlIG9mIHRoZSBuZXR3b3JraW5nIHB1enpsZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjI3Ljk5NjI4ODEyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTE0NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjU2PXNvdXJjZSBcXFwibmV0L3RpcGMvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNTc6c291cmNlIFxcXCJuZXQvYXRtL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMjU4LXNvdXJjZSBcXFwibmV0L2wydHAvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjguMTI2MjA4NDc0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2MjcyMzQyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQVRNL1BQUE9BVE0gQ29uZmlndXJhdGlvbiBhbmQgSU9DVEwgSGFuZGxlcnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEFUTWAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBzdGFydCB3aXRoIGBuZXQvYXRtL0tjb25maWdgLiBMaW5lIDYgc2hvd3MgdGhhdCBgQVRNYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBsZXQncyBsb29rIGF0IGBQUFBPQVRNYC4gVGhlIGNvbmZpZ3VyYXRpb24gc25pcHBldCByZXZlYWxzIGl0J3MgZGlyZWN0bHkgZGVwZW5kZW50IG9uIGBBVE1gIGFuZCBuZXN0ZWQgd2l0aGluIGFuIGBpZiBQUFBgIGJsb2NrLiBUaGlzIGNvbmZpcm1zIHRoZSBkZXBlbmRlbmNpZXM6IGBBVE1gLCBgUFBQYCwgYFBQUE9BVE1gLCBhbmQsIGJ5IGV4dGVuc2lvbiwgYE5FVERFVklDRVNgIGFuZCBgTkVUYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBhIHByb3BlciBjb25maWd1cmF0aW9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBwcHBvYXRtX2lvY3RsYCBhbmQgYHBwcG9hdG1fYXNzaWduX3ZjY2AgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGFuZCBpZiB0aGV5J3JlIGV4cG9ydGVkL3JlYWNoYWJsZS4gTG9va2luZyBhdCBgcHBwb2F0bS5jYCwgSSBzZWUgYHJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcylgIHJlZ2lzdGVycyB0aGUgYHBwcG9hdG1faW9jdGxgIGhhbmRsZXIgd2l0aCB0aGUgQVRNIHN1YnN5c3RlbS4gVGhhdCBtZWFucyBgcHBwb2F0bV9pb2N0bGAgd2lsbCBiZSBpbnZva2VkIHdoZW4gYW4gQVRNIHNvY2tldCB1c2VzIGFuIGlvY3RsLiBTcGVjaWZpY2FsbHksIHdoZW4gYW4gQVRNIHNvY2tldCBpc3N1ZXMgdGhlIGBBVE1fU0VUQkFDS0VORGAgaW9jdGwsIGBkb192Y2NfaW9jdGxgIGluIGBuZXQvYXRtL2lvY3RsLmNgIHRha2VzIG92ZXIgYW5kIHRoZW4gZGlzcGF0Y2hlcyB0aGUgcmVxdWVzdCB0byByZWdpc3RlcmVkIEFUTSBpb2N0bHMuIEknbGwgbmVlZCB0byBleGFtaW5lIGBuZXQvYXRtL2lvY3RsLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGlvY3RsIGhhbmRsaW5nIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjM1Ljc1MzQ0NTUxMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdH1cXG4gIDQxOlxcdEVYUE9SVF9TWU1CT0woZGVyZWdpc3Rlcl9hdG1faW9jdGwpO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRzdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbiAgNDQ6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhcmcsIGludCBjb21wYXQpXFxuICA0NTpcXHR7XFxuICA0NjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gIDQ3OlxcdFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuICA0ODpcXHRcXHRpbnQgZXJyb3I7XFxuICA0OTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7XFxuICA1MDpcXHRcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG4gIDUxOlxcdFxcdHZvaWQgX191c2VyICpidWY7XFxuICA1MjpcXHRcXHRpbnQgX191c2VyICpsZW47XFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdHZjYyA9IEFUTV9TRChzb2NrKTtcXG4gIDU1OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuICA1NjpcXHRcXHRjYXNlIFNJT0NPVVRROlxcbiAgNTc6XFx0XFx0XFx0aWYgKHNvY2stXFx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRCB8fFxcbiAgNTg6XFx0XFx0XFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSkge1xcbiAgNTk6XFx0XFx0XFx0XFx0ZXJyb3IgPSAgLUVJTlZBTDtcXG4gIDYwOlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gIDYxOlxcdFxcdFxcdH1cXG4gIDYyOlxcdFxcdFxcdGVycm9yID0gcHV0X3VzZXIoc2stXFx1MDAzZXNrX3NuZGJ1ZiAtIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSxcXG4gIDYzOlxcdFxcdFxcdFxcdFxcdCAoaW50IF9fdXNlciAqKWFyZ3ApO1xcbiAgNjQ6XFx0XFx0XFx0Z290byBkb25lO1xcbiAgNjU6XFx0XFx0Y2FzZSBTSU9DSU5ROlxcbiAgNjY6XFx0XFx0e1xcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDY4OlxcdFxcdFxcdGludCBhbW91bnQ7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdFxcdGlmIChzb2NrLVxcdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQpIHtcXG4gIDcxOlxcdFxcdFxcdFxcdGVycm9yID0gLUVJTlZBTDtcXG4gIDcyOlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gIDczOlxcdFxcdFxcdH1cXG4gIDc0OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbiAgNzU6XFx0XFx0XFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG4gIDc2OlxcdFxcdFxcdGFtb3VudCA9IHNrYiA/IHNrYi1cXHUwMDNlbGVuIDogMDtcXG4gIDc3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuICA3ODpcXHRcXHRcXHRlcnJvciA9IHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmdwKTtcXG4gIDc5OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gIDgwOlxcdFxcdH1cXG4gIDgxOlxcdFxcdGNhc2UgQVRNX1NFVFNDOlxcbiAgODI6XFx0XFx0XFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIkFUTV9TRVRTQyBpcyBvYnNvbGV0ZTsgdXNlZCBieSAlczolZFxcXFxuXFxcIixcXG4gIDgzOlxcdFxcdFxcdFxcdFxcdCAgICAgY3VycmVudC1cXHUwMDNlY29tbSwgdGFza19waWRfbnIoY3VycmVudCkpO1xcbiAgODQ6XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiAgODU6XFx0XFx0XFx0Z290byBkb25lO1xcbiAgODY6XFx0XFx0Y2FzZSBBVE1fU0VUQkFDS0VORDpcXG4gIDg3OlxcdFxcdGNhc2UgQVRNX05FV0JBQ0tFTkRJRjpcXG4gIDg4OlxcdFxcdHtcXG4gIDg5OlxcdFxcdFxcdGF0bV9iYWNrZW5kX3QgYmFja2VuZDtcXG4gIDkwOlxcdFxcdFxcdGVycm9yID0gZ2V0X3VzZXIoYmFja2VuZCwgKGF0bV9iYWNrZW5kX3QgX191c2VyICopYXJncCk7XFxuICA5MTpcXHRcXHRcXHRpZiAoZXJyb3IpXFxuICA5MjpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuICA5MzpcXHRcXHRcXHRzd2l0Y2ggKGJhY2tlbmQpIHtcXG4gIDk0OlxcdFxcdFxcdGNhc2UgQVRNX0JBQ0tFTkRfUFBQOlxcbiAgOTU6XFx0XFx0XFx0XFx0cmVxdWVzdF9tb2R1bGUoXFxcInBwcG9hdG1cXFwiKTtcXG4gIDk2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgOTc6XFx0XFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9CUjI2ODQ6XFxuICA5ODpcXHRcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShcXFwiYnIyNjg0XFxcIik7XFxuICA5OTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTAwOlxcdFxcdFxcdH1cXG4gMTAxOlxcdFxcdFxcdGJyZWFrO1xcbiAxMDI6XFx0XFx0fVxcbiAxMDM6XFx0XFx0fVxcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRlcnJvciA9IC1FTk9JT0NUTENNRDtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aW9jdGxfbXV0ZXgpO1xcbiAxMDg6XFx0XFx0bGlzdF9mb3JfZWFjaChwb3MsIFxcdTAwMjZpb2N0bF9saXN0KSB7XFxuIDEwOTpcXHRcXHRcXHRzdHJ1Y3QgYXRtX2lvY3RsICppYyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgYXRtX2lvY3RsLCBsaXN0KTtcXG4gMTEwOlxcdFxcdFxcdGlmICh0cnlfbW9kdWxlX2dldChpYy1cXHUwMDNlb3duZXIpKSB7XFxuIDExMTpcXHRcXHRcXHRcXHRlcnJvciA9IGljLVxcdTAwM2Vpb2N0bChzb2NrLCBjbWQsIGFyZyk7XFxuIDExMjpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KGljLVxcdTAwM2Vvd25lcik7XFxuIDExMzpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKVxcbiAxMTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDExNTpcXHRcXHRcXHR9XFxuIDExNjpcXHRcXHR9XFxuIDExNzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmlvY3RsX211dGV4KTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0aWYgKGVycm9yICE9IC1FTk9JT0NUTENNRClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MzUuNzUzNTczOTAxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4Mjk0OTE3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFBvQVRNIElPQ1RMIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBJT0NUTCBjYWxscyBhcmUgaGFuZGxlZCBmb3IgUFBQb0FUTS4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGRvX3ZjY19pb2N0bGAgaXMgdGhlIGtleSBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gaXRlcmF0ZSB0aHJvdWdoIGFuIGBpb2N0bF9saXN0YCBhbmQgY2FsbHMgYGljLVx1MDAzZWlvY3RsYCwgd2hpY2gsIGluIHRoaXMgY2FzZSwgaXMgZ29pbmcgdG8gYmUgYHBwcG9hdG1faW9jdGxgLiBUaGF04oCZcyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5Ob3csIGBwcHBvYXRtX2lvY3RsYCB1bHRpbWF0ZWx5IGNhbGxzIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNhbGwgY2hhaW4uIEkndmUgYWxyZWFkeSBjb25maXJtZWQgdGhhdCBgcHBwb2F0bV9hc3NpZ25fdmNjYCBpcyBzdGF0aWMgYW5kIGxvY2FsIHdpdGhpbiBgcHBwb2F0bS5jYCwgc28gSSdtIG5vdCBvdmVybHkgY29uY2VybmVkIHdpdGggaXQncyBzY29wZSwgZm9yIHRoZSBtb21lbnQuIEJ1dCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgYnkgdmVyaWZ5aW5nIHRoZSBvdGhlciBzeW1ib2xzIGluIGBwcHBvYXRtLmNgIGxpa2UgYHBwcG9hdG1faW9jdGxgLCBgcHBwb2F0bV9pbml0YCwgYW5kIGBwcHBvYXRtX3NlbmRgIC0gYXJlIHRoZXkgc3RhdGljLCBvciBhcmUgdGhleSBleHBvcnRlZD8gQXJlIHRoZXJlIGFueSB0aGF0IGFyZSBub24taW5saW5lZD8gSSdtIGdvaW5nIHRvIGxvb2sgYXQgb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgdmNjX2lvY3RsYCBpbiBgbmV0L2F0bS9pb2N0bC5jYCwgYXMgd2VsbCwgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmZhY2UuXG5cblRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGluZ3MsIEknbSBnb2luZyB0byBmb2N1cyBvbiBjaGVja2luZyB0aGUgZXhwb3J0ZWQgYW5kIHB1YmxpYyBzeW1ib2xzIGluIGJvdGggYG5ldC9hdG0vaW9jdGwuY2AgYW5kIGBwcHBvYXRtLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB0aWVkIHRvZ2V0aGVyLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjozOS41ODMwNjg3MjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4OTUxNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmg9MjA9X19wb2xsX3QgdmNjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndhaXQpO1xcbm5ldC9hdG0vY29tbW9uLmg6MjE6aW50IHZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxubmV0L2F0bS9jb21tb24uaC0yMi1pbnQgdmNjX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuLS1cXG5uZXQvYXRtL2lvY3RsLmM9NDE9RVhQT1JUX1NZTUJPTChkZXJlZ2lzdGVyX2F0bV9pb2N0bCk7XFxubmV0L2F0bS9pb2N0bC5jLTQyLVxcbm5ldC9hdG0vaW9jdGwuYzo0MzpzdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbm5ldC9hdG0vaW9jdGwuYy00NC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZywgaW50IGNvbXBhdClcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy0xNjktXFxubmV0L2F0bS9pb2N0bC5jOjE3MDppbnQgdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbm5ldC9hdG0vaW9jdGwuYy0xNzEte1xcbm5ldC9hdG0vaW9jdGwuYzoxNzI6XFx0cmV0dXJuIGRvX3ZjY19pb2N0bChzb2NrLCBjbWQsIGFyZywgMCk7XFxubmV0L2F0bS9pb2N0bC5jLTE3My19XFxuLS1cXG5uZXQvYXRtL2lvY3RsLmM9MjgyPWludCB2Y2NfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmMtMjg2LVxcbm5ldC9hdG0vaW9jdGwuYzoyODc6XFx0cmV0ID0gZG9fdmNjX2lvY3RsKHNvY2ssIGNtZCwgYXJnLCAxKTtcXG5uZXQvYXRtL2lvY3RsLmMtMjg4LVxcdGlmIChyZXQgIT0gLUVOT0lPQ1RMQ01EKVxcbi0tXFxubmV0L2F0bS9wdmMuYz0xMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHZjX3Byb3RvX29wcyA9IHtcXG4tLVxcbm5ldC9hdG0vcHZjLmMtMTE2LVxcdC5wb2xsID1cXHRcXHR2Y2NfcG9sbCxcXG5uZXQvYXRtL3B2Yy5jOjExNzpcXHQuaW9jdGwgPVxcdHZjY19pb2N0bCxcXG5uZXQvYXRtL3B2Yy5jLTExOC0jaWZkZWYgQ09ORklHX0NPTVBBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjozOS42NzIwMjUwODhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwNjY5ODkyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEFUTSBQUFBvQVRNIGlvY3RsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSd2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0IHdpdGhpbiB0aGUgQVRNL1BQUG9BVE0gc3Vic3lzdGVtLiBXZSdyZSBsb29raW5nIGF0IGB2Y2NfaW9jdGxgIGFuZCBgdmNjX2NvbXBhdF9pb2N0bGAgaW4gYG5ldC9hdG0vaW9jdGwuY2AsIGJ1dCB0aGUgcmVhbCBpbnRlcmVzdCBsaWVzIGluIGBwcHBvYXRtLmNgLiBXZSBoYXZlIGBwcHBvYXRtX2lvY3RsYCwgd2hpY2ggZ2V0cyBhc3NpZ25lZCB0byB0aGUgYHBwcG9hdG1faW9jdGxfb3BzLmlvY3RsYCBzdHJ1Y3R1cmUgYW5kIGNydWNpYWxseSwgc2luY2UgdGhpcyBmdW5jdGlvbidzIGFkZHJlc3MgaXMgdGFrZW4sIGl0IHdvbid0IGJlIGlubGluZWQuIFRoaXMgbWVhbnMgd2UnbGwgZGVmaW5pdGVseSBzZWUgaXQgYXMgYSBzeW1ib2wuIFRoZW4gd2UgaGF2ZSBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcG9hdG1fcHVzaGAsIGBwcHBvYXRtX3BvcGAsIGFuZCBgcHBwb2F0bV9yZWxlYXNlX2NiYCB3aXRoaW4gdGhhdCBmaWxlLCB0aG91Z2ggYHBwcG9hdG1faW9jdGxgIGFuZCBgdmNjX2lvY3RsYCBhcmUgb3VyIHByaW1hcnkgZm9jdXMuIGB2Y2NfaW9jdGxgIGlzIHNwZWNpZmljYWxseSB0aGUgbWFpbiBpb2N0bCBlbnRyeXBvaW50IGhlcmUuXG5cbk5vdywgaXMgdGhpcyBcIldvcnRoRnV6emluZ1wiPyBMZXQncyBldmFsdWF0ZS4gRmlyc3QsIGl0J3Mgbm90IHB1cmVseSBkZWNvcmF0aXZlLiBUaGVyZSdzIGEgZnVuY3Rpb25hbCBjaGVjayBpbiB0aGVyZSAoYGlmIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2ApIHRoYXQgcHJldmVudHMgZG91YmxlLWFzc2lnbm1lbnQgb2YgYHVzZXJfYmFja2AsIHNvIHRoZXJlJ3Mgc3RhdGVmdWwgbG9naWMgYXQgcGxheS4gU2Vjb25kLCBpdCBkb2Vzbid0IGFwcGVhciB0byBiZSB0aWVkIHRvIHNwZWNpZmljIHZlbmRvciBvciBwaHlzaWNhbCBoYXJkd2FyZTsgdGhlc2UgQVRNIHNvY2tldHMgYW5kIFBQUG9BVE0gY2hhbm5lbHMgY2FuIGJlIG1hZGUgaW4gdXNlcnNwYWNlLCB2aWEgc3RhbmRhcmQgc29ja2V0IGNhbGxzLiBUaGlyZCwgaXQncyBub3Qgc2ltcGx5IGEgc2h1dGRvd24vcmVtb3ZlIHBhdGguIEFuZCBmb3VydGgsIGNyaXRpY2FsbHksIGl0J3MgcmVhY2hhYmxlIHZpYSBgaW9jdGwoZmQsIEFUTV9TRVRCQUNLRU5ELCBcdTAwMjZhcmcpYCBvbiBhbiBBVE0gc29ja2V0LiBCaW5nby4gV29ydGhGdXp6aW5nID0gVHJ1ZS5cblxuV2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQuIGBBVE1gLCBgUFBQYCwgYW5kIGBQUFBPQVRNYCBhcmUgbmVjZXNzYXJ5LiBMb29raW5nIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMsIGBBVE1gIGlzIHNvdXJjZWQgZnJvbSBgbmV0L2F0bS9LY29uZmlnYCBhbmQgZGVwZW5kcyBvbiBgTkVUYCwgd2hpY2ggaXMgc3RhbmRhcmQuIGBQUFBgIGlzIGluIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgYW5kIGRlcGVuZHMgb24gYE5FVERFVklDRVNgLCBhbmQgYFBQUE9BVE1gIGFsc28gZGVwZW5kcyBvbiBib3RoIGBQUFBgIGFuZCBgQVRNYC4gUFBQIGFsc28gc2VsZWN0cyBgU0xIQ2AuIEZpbmFsbHksIGBQUFBPQVRNYCBhbHNvIGRlcGVuZHMgb24gYEFUTWAgaW5zaWRlIGBpZiBQUFBgLiBDb25maXJtZWQsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyLlxuXG5MZXQncyByZWZpbmUgdGhlIHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdlIGtub3cgYHBwcG9hdG1faW9jdGxgIGFuZCBgdmNjX2lvY3RsYCBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgdGhlIGV4cG9zZWQgaW9jdGwgaGFuZGxlcnMuIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBwcHBvYXRtX2lvY3RsYC4gQ29tcGlsZXIgaW5saW5pbmcgY291bGQgZm9sZCBpdCBpbnRvIGBwcHBvYXRtX2lvY3RsYC4gQWRkaW5nIGl0IGFzIGEgc3ltYm9sIG1ha2VzIHNlbnNlLlxuXG5Pa2F5LCBxdWljayBzdW1tYXJ5IGFuZCBmaW5hbCBzYW5pdHkgY2hlY2s6XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKlxuKiAgICoqRW5hYmxlQ29uZmlnczogXFxb4oCcQVRN4oCdLCDigJxQUFDigJ0sIOKAnFBQUE9BVE3igJ1dLioqXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcW+KAnHBwcG9hdG1cXF9pb2N0bOKAnSwg4oCccHBwb2F0bVxcX2Fzc2lnblxcX3ZjY+KAnSwg4oCcdmNjXFxfaW9jdGzigJ1dLioqXG4qICAgKipSZWFzb25pbmc6KiogSWRlbnRpZmllZCBgcHBwb2F0bV9pb2N0bGAgYW5kIGB2Y2NfaW9jdGxgIGFzIHJlYWNoYWJsZSBpb2N0bCBlbnRyeXBvaW50cywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBjb25maWd1cmF0aW9uIG9mIEFUTS9QUFBvQVRNLiBUaGUgYHBwcG9hdG1fYXNzaWduX3ZjY2AgZnVuY3Rpb24gaXMgc3RhdGljLCB3aGljaCBtYXkgYmUgaW5saW5lZCBpbnRvIGBwcHBvYXRtX2lvY3RsYCwgYnV0IGluY2x1ZGluZyBpdCBoZXJlIGluY3JlYXNlcyBjb3ZlcmFnZS5cblxuV2UncmUgZ29vZCB0byBnby4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MTYsIk91dHB1dFRva2VucyI6MTU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjUzLjczOTAxNzQyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODY4NDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9BVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgICBcInZjY19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcHBvYXRtX2Fzc2lnbl92Y2MoKSBlbnN1cmluZyB0aGF0IGFuIEFUTSBWQ0MgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgYmFja2VuZC91c2VyX2JhY2sgYXNzaWduZWQgYmVmb3JlIGFsbG9jYXRpbmcgYW5kIGF0dGFjaGluZyBhIG5ldyBwcHBvYXRtX3ZjYywgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBhbmQgc3RhdGUgY29ycnVwdGlvbiB3aGVuIHJlLWFzc2lnbmluZyBiYWNrZW5kcyBvbiB0aGUgc2FtZSBzb2NrZXQgdmlhIEFUTV9TRVRCQUNLRU5EIGlvY3RsLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBVE0gc29ja2V0IGlvY3RscyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9BVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgICBcInZjY19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcHBvYXRtX2Fzc2lnbl92Y2MoKSBlbnN1cmluZyB0aGF0IGFuIEFUTSBWQ0MgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgYmFja2VuZC91c2VyX2JhY2sgYXNzaWduZWQgYmVmb3JlIGFsbG9jYXRpbmcgYW5kIGF0dGFjaGluZyBhIG5ldyBwcHBvYXRtX3ZjYywgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBhbmQgc3RhdGUgY29ycnVwdGlvbiB3aGVuIHJlLWFzc2lnbmluZyBiYWNrZW5kcyBvbiB0aGUgc2FtZSBzb2NrZXQgdmlhIEFUTV9TRVRCQUNLRU5EIGlvY3RsLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBVE0gc29ja2V0IGlvY3RscyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjUzLjg2NzcwODUwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4MzY3NTk0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjo1My44NjgxNjgxMDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODgzNjI5Mjg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJ1c3kgY2hlY2sgKGBpZiAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Mjc4MjMxNmMzZGY1NWFhZDg1NzFhNDgwN2UzZTYwYWI4MjA0OTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNjoxNTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkzYmEyMmY0MzdiYzkgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC0zOTYsNiArMzk2LDggQEAgc3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiBcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiBcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spXG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xuIFx0aWYgKHB2Y2MgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjo1My44NjgxNjkwNDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjcxMTYwMTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUG9BVE0gVkNDIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L2F0bS9wcHBvYXRtLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGZ1bmN0aW9uLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgZGlmZi4gSXQncyBhZGRpbmcgYSBjaGVjaywgYW5kIHRoZSBjb250ZXh0IGlzIGNsZWFyOiB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhc3NpZ25pbmcgYSB2aXJ0dWFsIGNpcmN1aXQgY29ubmVjdGlvbiAoVkNDKSB3aXRoaW4gdGhlIFBQUG9BVE0gY29udGV4dC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29kZSwgYXJvdW5kIGxpbmUgMzk2LCBzdGFydHMgd2l0aCB2YWxpZGF0aW9uIG9mIHRoZSBlbmNhcHN1bGF0aW9uIHR5cGUgKGBiZS5lbmNhcHNgKS4gIEl0IGxvb2tzIGxpa2UgaXQncyBlbnN1cmluZyB0aGUgZW5jYXBzdWxhdGlvbiBpcyBlaXRoZXIgYXV0by1kZXRlY3RlZCwgb3IgZXhwbGljaXRseSBzZXQgdG8gVkMgKFZpcnR1YWwgQ2lyY3VpdCkgb3IgTExDIChMb2dpY2FsIExpbmsgQ29udHJvbCkuIE1ha2VzIHNlbnNlLCBzdGFuZGFyZCBQUFBvQVRNIHN0dWZmLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYGlmIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2AuIFRoYXQncyB0aGUga2V5IGFkZGl0aW9uLlxuXG5TbywgKnRoaXMqIGlzIHRoZSBjaGFuZ2UuICBUaGUgZnVuY3Rpb24gaXMgbm93IGNoZWNraW5nIGlmIGBhdG12Y2MtXHUwMDNldXNlcl9iYWNrYCBpcyBzZXQuIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBwcmV2ZW50IHJlLWFzc2lnbm1lbnQgb3IgY29uZmxpY3QgaWYgYSB1c2VyLXNwYWNlIGNvbXBvbmVudCBpcyBhbHJlYWR5IHVzaW5nIHRoZSBWQ0MuIEEgYnVzeSBzaWduYWwgaXMgcmV0dXJuZWQgdG8gaW5kaWNhdGUgdGhlIFZDQyBpcyBhbHJlYWR5IGluIHVzZSwgZWZmZWN0aXZlbHkgcHJldmVudGluZyBtdWx0aXBsZSB1c2VycyBmcm9tIHN0ZXBwaW5nIG9uIGVhY2ggb3RoZXIuIEdpdmVuIHRoZSBzdHJ1Y3R1cmUsIEkgY2FuIHJlYXNvbmFibHkgaW5mZXIgdGhhdCBgYXRtdmNjLVx1MDAzZXVzZXJfYmFja2AgbGlrZWx5IHBvaW50cyB0byBzb21lIGRhdGEgb3Igc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCBhIHVzZXItc3BhY2UgZW50aXR5IHRoYXQgaGFzIGFscmVhZHkgY2xhaW1lZCB0aGUgVkNDLiBJJ2xsIG5lZWQgdG8gZ28gZGVlcGVyIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpY2FsbHkgdXNlcl9iYWNrIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBCdXQgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgY2xlYXIgLSBhIHNpbXBsZSwgYnV0IGltcG9ydGFudCwgY2hlY2sgZm9yIHJlc291cmNlIGNvbnRlbnRpb24uIEdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzowMC41Nzk3NzI4ODFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wcHBvYXRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdFxcdHJldHVybiAtRU5PVFRZO1xcbiAzODE6XFx0fVxcbiAzODI6XFx0XFxuIDM4MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcXG4gMzg0OlxcdFxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbiAzODU6XFx0XFx0LmlvY3RsID0gcHBwb2F0bV9kZXZwcHBfaW9jdGwsXFxuIDM4NjpcXHR9O1xcbiAzODc6XFx0XFxuIDM4ODpcXHRzdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxcbiAzODk6XFx0e1xcbiAzOTA6XFx0XFx0c3RydWN0IGF0bV9iYWNrZW5kX3BwcCBiZTtcXG4gMzkxOlxcdFxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcXG4gMzkyOlxcdFxcdGludCBlcnI7XFxuIDM5MzpcXHRcXG4gMzk0OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YmUsIGFyZywgc2l6ZW9mIGJlKSlcXG4gMzk1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzOTY6XFx0XFx0aWYgKGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUIFxcdTAwMjZcXHUwMDI2XFxuIDM5NzpcXHRcXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFxcdTAwMjZcXHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXFxuIDM5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzk5OlxcdFxcdGlmIChhdG12Y2MtXFx1MDAzZXVzZXJfYmFjaylcXG4gNDAwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDQwMTpcXHRcXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xcbiA0MDI6XFx0XFx0aWYgKHB2Y2MgPT0gTlVMTClcXG4gNDAzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0MDQ6XFx0XFx0cHZjYy1cXHUwMDNlYXRtdmNjID0gYXRtdmNjO1xcbiA0MDU6XFx0XFxuIDQwNjpcXHRcXHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cXG4gNDA3OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnB2Y2MtXFx1MDAzZWluZmxpZ2h0LCBOT05FX0lORkxJR0hUKTtcXG4gNDA4OlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVxcdTAwM2VwdXNoO1xcbiA0MDk6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX3BvcCA9IGF0bXZjYy1cXHUwMDNlcG9wO1xcbiA0MTA6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX293bmVyID0gYXRtdmNjLVxcdTAwM2Vvd25lcjtcXG4gNDExOlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVxcdTAwM2VyZWxlYXNlX2NiO1xcbiA0MTI6XFx0XFx0cHZjYy1cXHUwMDNlZW5jYXBzID0gKGVudW0gcHBwb2F0bV9lbmNhcHMpIGJlLmVuY2FwcztcXG4gNDEzOlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XFxuIDQxNDpcXHRcXHRwdmNjLVxcdTAwM2VjaGFuLm9wcyA9IFxcdTAwMjZwcHBvYXRtX29wcztcXG4gNDE1OlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVxcdTAwM2Vxb3MudHh0cC5tYXhfc2R1IC0gUFBQX0hEUkxFTiAtXFxuIDQxNjpcXHRcXHQgICAgKGJlLmVuY2FwcyA9PSBlX3ZjID8gMCA6IExMQ19MRU4pO1xcbiA0MTc6XFx0XFx0dGFza2xldF9zZXR1cChcXHUwMDI2cHZjYy1cXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XFxuIDQxODpcXHRcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2cHZjYy1cXHUwMDNlY2hhbik7XFxuIDQxOTpcXHRcXHRpZiAoZXJyICE9IDApIHtcXG4gNDIwOlxcdFxcdFxcdGtmcmVlKHB2Y2MpO1xcbiA0MjE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDIyOlxcdFxcdH1cXG4gNDIzOlxcdFxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG4gNDI0OlxcdFxcdGF0bXZjYy1cXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcXG4gNDI1OlxcdFxcdGF0bXZjYy1cXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XFxuIDQyNjpcXHRcXHRhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XFxuIDQyNzpcXHRcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiA0Mjg6XFx0XFx0YXRtdmNjLVxcdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHQvKiByZS1wcm9jZXNzIGV2ZXJ5dGhpbmcgcmVjZWl2ZWQgYmV0d2VlbiBjb25uZWN0aW9uIHNldHVwIGFuZFxcbiA0MzE6XFx0XFx0ICAgYmFja2VuZCBzZXR1cCAqL1xcbiA0MzI6XFx0XFx0dmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShhdG12Y2MpO1xcbiA0MzM6XFx0XFx0cmV0dXJuIDA7XFxuIDQzNDpcXHR9XFxuIDQzNTpcXHRcXG4gNDM2OlxcdC8qXFxuIDQzNzpcXHQgKiBUaGlzIGhhbmRsZXMgaW9jdGxzIGFjdHVhbGx5IHBlcmZvcm1lZCBvbiBvdXIgdmNjIC0gd2UgbXVzdCByZXR1cm5cXG4gNDM4OlxcdCAqIC1FTk9JT0NUTENNRCBmb3IgYW55IHVucmVjb2duaXplZCBpb2N0bFxcbiA0Mzk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE3OjAwLjU3OTg0ODg2MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDA2NzM0NTI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUFBQIG92ZXIgQVRNIFZDQyBBc3NpZ25tZW50IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB0aHJvdWdoIGFuIGBpb2N0bGAgb3BlcmF0aW9uIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBBVE0gYW5kIFBQUCBiYWNrZW5kcy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGJlZm9yZSB0aGlzIHBhdGNoLCB3YXMgdGhhdCBgcHBwb2F0bV9hc3NpZ25fdmNjYCB3b3VsZCBibGluZGx5IHJlLWFsbG9jYXRlIHJlc291cmNlcyBmb3IgYW4gYWxyZWFkeSBjb25maWd1cmVkIGBhdG12Y2NgLiBUaGlzIG1lYW50IGEgbmV3IGBwdmNjYCB3YXMgY3JlYXRlZCwgb3ZlcndyaXRpbmcgY3JpdGljYWwgcG9pbnRlcnMgbGlrZSBgb2xkX3B1c2hgIGFuZCBgb2xkX3BvcGAgaW4gYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgIHdpdGhvdXQgZGVhbGxvY2F0aW5nIHRoZSBvbGQgb25lcywgbGVhZGluZyB0byBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBhbmQgZ2VuZXJhbCBzdGF0ZSBjb3JydXB0aW9uIOKAkyBhbGwgcHJldHR5IG5hc3R5IHN0dWZmLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgY2hlY2s6IGBpZiAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjaykgcmV0dXJuIC1FQlVTWTtgLiBFc3NlbnRpYWxseSwgd2UncmUgbm93IHByZXZlbnRpbmcgdGhlIHJlLWFzc2lnbm1lbnQgaWYgYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgIGlzIGFscmVhZHkgcG9wdWxhdGVkLiBTbWFydCBtb3ZlLlxuXG5Ob3csIG15IHByaW1hcnkgY29uY2VybiB3aXRoIGFueSBzdWNoIHBhdGNoIGlzOiBkb2VzIGl0IGludHJvZHVjZSAqbmV3KiByaXNrcywgZXZlbiBhcyBpdCBmaXhlcyB0aGUgb2xkIG9uZT8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzLiBTbywgSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlc2UgcG9zc2liaWxpdGllczpcblxuKiAgICoqVW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB3ZSdyZSBub3QgY29weWluZyBhbnkgcG90ZW50aWFsbHkgZ2FyYmFnZSBkYXRhIGludG8gdXNlci1hY2Nlc3NpYmxlIHNwYWNlLiBUaGF0J3MgZ29vZC5cbiogICAqKkJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBObywgdGhlIGNvZGUgaXMgY2hlY2tpbmcgYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgLCB3aGljaCBpcyBhIHBvaW50ZXIgd2l0aGluIGEgYHN0cnVjdCBhdG1fdmNjYC5cbiogICAqKkNoYW5nZXMgdG8gYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzPyoqIE5vLCB3ZSBhcmVuJ3QgbWVzc2luZyB3aXRoIGJ1ZmZlciBzaXplcy4gVGhhdCdzIGFub3RoZXIgYXJlYSB3aGVyZSB0aGluZ3MgY2FuIGdvIHdyb25nLlxuKiAgICoqS01TQU4tc3BlY2lmaWMgaXNzdWVzPyoqIE5vcGUsIHRoaXMgb25lIGlzIHB1cmVseSBhIHNhZmVndWFyZCBhZ2FpbnN0IGEga25vd24gaXNzdWUsIHdoaWNoIHNob3VsZCBiZSBkZXRlY3RhYmxlIHdpdGggS0FTQU4vS01FTUxFQUsuXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgYXRtdmNjLVx1MDAzZXVzZXJfYmFja2AgbWVtYmVyIGluIHRoZSBgbmV0L2F0bWAgY29kZS4gSXQncyB0aW1lIHRvIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgYHVzZXJfYmFja2Agd2l0aGluIHRoZSBBVE0gc3Vic3lzdGVtIGNvZGUgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGluIG15IGluaXRpYWwgYXNzZXNzbWVudC4gTGV0J3MgbWFrZSBzdXJlIHRoaXMgcGF0Y2ggcmVhbGx5IGRvZXMgd2hhdCBpdCBzYXlzIG9uIHRoZSB0aW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzoxNC42NDcxOTc5MTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjM5NDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX2JhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL2JyMjY4NC5jPTExMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBicjI2ODRfdmNjICpCUjI2ODRfVkNDKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxubmV0L2F0bS9icjI2ODQuYy0xMTQte1xcbm5ldC9hdG0vYnIyNjg0LmM6MTE1OlxcdHJldHVybiAoc3RydWN0IGJyMjY4NF92Y2MgKikoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spO1xcbm5ldC9hdG0vYnIyNjg0LmMtMTE2LX1cXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmM9NDA4PXN0YXRpYyB2b2lkIGJyMjY4NF9jbG9zZV92Y2Moc3RydWN0IGJyMjY4NF92Y2MgKmJydmNjKVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy00MTMtXFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2ZGV2c19sb2NrKTtcXG5uZXQvYXRtL2JyMjY4NC5jOjQxNDpcXHRicnZjYy1cXHUwMDNlYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2sgPSBOVUxMO1xcdC8qIHdoYXQgYWJvdXQgdmNjLVxcdTAwM2VyZWN2cSA/Pz8gKi9cXG5uZXQvYXRtL2JyMjY4NC5jLTQxNS1cXHRicnZjYy1cXHUwMDNlYXRtdmNjLVxcdTAwM2VyZWxlYXNlX2NiID0gYnJ2Y2MtXFx1MDAzZW9sZF9yZWxlYXNlX2NiO1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz01MzA9c3RhdGljIGludCBicjI2ODRfcmVndmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICogYXJnKVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy01ODktXFx0YnJ2Y2MtXFx1MDAzZWF0bXZjYyA9IGF0bXZjYztcXG5uZXQvYXRtL2JyMjY4NC5jOjU5MDpcXHRhdG12Y2MtXFx1MDAzZXVzZXJfYmFjayA9IGJydmNjO1xcbm5ldC9hdG0vYnIyNjg0LmMtNTkxLVxcdGJydmNjLVxcdTAwM2VlbmNhcHMgPSAoZW51bSBicjI2ODRfZW5jYXBzKWJlLmVuY2FwcztcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTg5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTkwLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzo5MTpcXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTkyLX1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTE2Nz1zdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTc1LVxcdHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE3NjpcXHRhdG12Y2MtXFx1MDAzZXVzZXJfYmFjayA9IE5VTEw7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTc3LVxcdGtmcmVlKHB2Y2MpO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9Mzg4PXN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zOTgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2F0bS9wcHBvYXRtLmM6Mzk5OlxcdGlmIChhdG12Y2MtXFx1MDAzZXVzZXJfYmFjaylcXG5uZXQvYXRtL3BwcG9hdG0uYy00MDAtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQyMi1cXHR9XFxubmV0L2F0bS9wcHBvYXRtLmM6NDIzOlxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYy00MjQtXFx0YXRtdmNjLVxcdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzoxNC43NjM1OTcyNDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwOTA1MzUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipCUjI2ODQgUmVnaXN0cmF0aW9uIFx1MDAyNiBVc2VyIEJhY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBuZXQvYXRtL2JyMjY4NC5jYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgYnIyNjg0X3JlZ3ZjY2AgZnVuY3Rpb24gaXMgd2hlcmUgd2UgaGFuZGxlIHRoZSByZWdpc3RyYXRpb24gb2YgdmlydHVhbCBjaXJjdWl0IGNvbm5lY3Rpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIHNwZWNpZmljYWxseSBob3cgaXQgZGVhbHMgd2l0aCB0aGUgYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgIGZsYWcuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IHRoZXJl4oCZcyBhIGNoZWNrIGluIHRoZXJlLCBzb21ldGhpbmcgbGlrZSBgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCB0aGF04oCZcyBzdXBwb3NlZCB0byBwcmV2ZW50IGEgVkNDIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBpZiBpdCdzIGN1cnJlbnRseSBtYXJrZWQgYXMgaW4gdXNlIGJ5IGEgdXNlci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0J3MgdGhlIGNvcnJlY3QgbG9naWMgYW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIGl0LiBMZXQgbWUgZ28gYmFjayBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBpZiBJIHJlbWVtYmVyZWQgY29ycmVjdGx5LCBvciBub3QuIFRoZW4gSSdsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhhdCBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIGxpZmVjeWNsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE3OjE3LjQ3MjY1MzExOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL2JyMjY4NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzMDpcXHRzdGF0aWMgaW50IGJyMjY4NF9yZWd2Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKiBhcmcpXFxuIDUzMTpcXHR7XFxuIDUzMjpcXHRcXHRzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2M7XFxuIDUzMzpcXHRcXHRzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXY7XFxuIDUzNDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjtcXG4gNTM1OlxcdFxcdHN0cnVjdCBhdG1fYmFja2VuZF9icjI2ODQgYmU7XFxuIDUzNjpcXHRcXHRpbnQgZXJyO1xcbiA1Mzc6XFx0XFxuIDUzODpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmJlLCBhcmcsIHNpemVvZiBiZSkpXFxuIDUzOTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNTQwOlxcdFxcdGJydmNjID0ga3phbGxvY19vYmooc3RydWN0IGJyMjY4NF92Y2MpO1xcbiA1NDE6XFx0XFx0aWYgKCFicnZjYylcXG4gNTQyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA1NDM6XFx0XFx0LypcXG4gNTQ0OlxcdFxcdCAqIEFsbG93IHR3byBwYWNrZXRzIGluIHRoZSBBVE0gcXVldWUuIE9uZSBhY3R1YWxseSBiZWluZyBzZW50LCBhbmQgb25lXFxuIDU0NTpcXHRcXHQgKiBmb3IgdGhlIEFUTSAnVFggZG9uZScgaGFuZGxlciB0byBzZW5kLiBJdCBzaG91bGRuJ3QgdGFrZSBsb25nIHRvIGdldFxcbiA1NDY6XFx0XFx0ICogdGhlIG5leHQgb25lIGZyb20gdGhlIG5ldGRldiBxdWV1ZSwgd2hlbiB3ZSBuZWVkIGl0LiBNb3JlIHRoYW4gdGhhdFxcbiA1NDc6XFx0XFx0ICogd291bGQgYmUgYnVmZmVyYmxvYXQuXFxuIDU0ODpcXHRcXHQgKi9cXG4gNTQ5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmJydmNjLVxcdTAwM2Vxc3BhY2UsIDIpO1xcbiA1NTA6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNmRldnNfbG9jayk7XFxuIDU1MTpcXHRcXHRuZXRfZGV2ID0gYnIyNjg0X2ZpbmRfZGV2KFxcdTAwMjZiZS5pZnNwZWMpO1xcbiA1NTI6XFx0XFx0aWYgKG5ldF9kZXYgPT0gTlVMTCkge1xcbiA1NTM6XFx0XFx0XFx0cHJfZXJyKFxcXCJ0cmllZCB0byBhdHRhY2ggdG8gbm9uLWV4aXN0ZW50IGRldmljZVxcXFxuXFxcIik7XFxuIDU1NDpcXHRcXHRcXHRlcnIgPSAtRU5YSU87XFxuIDU1NTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA1NTY6XFx0XFx0fVxcbiA1NTc6XFx0XFx0YnJkZXYgPSBCUlBSSVYobmV0X2Rldik7XFxuIDU1ODpcXHRcXHRpZiAoYXRtdmNjLVxcdTAwM2VwdXNoID09IE5VTEwpIHtcXG4gNTU5OlxcdFxcdFxcdGVyciA9IC1FQkFERkQ7XFxuIDU2MDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA1NjE6XFx0XFx0fVxcbiA1NjI6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZicmRldi1cXHUwMDNlYnJ2Y2NzKSkge1xcbiA1NjM6XFx0XFx0XFx0LyogT25seSAxIFZDQy9kZXYgcmlnaHQgbm93ICovXFxuIDU2NDpcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbiA1NjU6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gNTY2OlxcdFxcdH1cXG4gNTY3OlxcdFxcdGlmIChiZS5mY3NfaW4gIT0gQlIyNjg0X0ZDU0lOX05PIHx8XFxuIDU2ODpcXHRcXHQgICAgYmUuZmNzX291dCAhPSBCUjI2ODRfRkNTT1VUX05PIHx8XFxuIDU2OTpcXHRcXHQgICAgYmUuZmNzX2F1dG8gfHwgYmUuaGFzX3ZwaWlkIHx8IGJlLnNlbmRfcGFkZGluZyB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzoxNy40NzI3NDc1MzhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIzMTY4NDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbkFscmlnaHQsIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIEl0J3Mgc3RyYWlnaHRmb3J3YXJkOiB0aGV5J3JlIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgcHBwb2F0bV9hc3NpZ25fdmNjKClgIHRvIGVuc3VyZSB3ZSBkb24ndCBhY2NpZGVudGFsbHkgcmUtYXR0YWNoIG9yIHJlLWFzc2lnbiBhIGJhY2tlbmQgdG8gYW4gYGF0bV92Y2NgIHRoYXQgYWxyZWFkeSBoYXMgb25lLiBUaGUgY29uZGl0aW9uIGlzIHNpbXBsZTogYGlmIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2AuIFRoaXMgcHJldmVudHMgdGhlIHByb2JsZW1hdGljIHNjZW5hcmlvIHdoZXJlIGBhdG12Y2MtXHUwMDNldXNlcl9iYWNrYCBpc24ndCBOVUxMLlxuXG5SZWdhcmRpbmcgS01TQU4gdnMgS0FTQU4sIHRoaXMgaXMgYSBsb2dpYyBidWcsIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBXZSdyZSBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgIHBvaW50ZXIgaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIHNvY2tldC9WQ0MgYWxsb2NhdGlvbi4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IHJlLWFzc2lnbmluZyB0aGUgYmFja2VuZCBvdmVyd3JpdGVzIGNhbGxiYWNrcyBhbmQgb3RoZXIgcG9pbnRlcnMgd2l0aGluIHRoZSBgYXRtX3ZjY2Agd2l0aG91dCBwcm9wZXIgY2xlYW51cCwgbGVhZGluZyB0byBzdGF0ZSBjb3JydXB0aW9uIGFuZCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSB3aGVyZSBLQVNBTiwgTE9DS0RFUCwgYW5kIEtNRU1MRUFLIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgaXNzdWVzLCBzbyB3ZSBkZWZpbml0ZWx5IGRvbid0IG5lZWQgS01TQU4gaGVyZS4gYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0MiwiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzoyMi43MDQ0MzUzNjRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2ApIGluIGBwcHBvYXRtX2Fzc2lnbl92Y2MoKWAgdG8gcHJldmVudCByZS1hc3NpZ25pbmcgYSBQUFBvQVRNIGJhY2tlbmQgdG8gYW4gQVRNIFZDQyB0aGF0IGFscmVhZHkgaGFzIGEgYmFja2VuZCBhdHRhY2hlZC4gVGhpcyBmaXhlcyBhIHN0YXRlIGNvcnJ1cHRpb24vcmVzb3VyY2UgbWFuYWdlbWVudCBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJ1c3kgY2hlY2sgKGBpZiAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowr996q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 16:13:48 +0000 UTC FinishedAt: 2026-09-02 16:17:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "PPP", "PPPOATM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "PPP", "PPPOATM" ], "series_id": "570eb5aa-d006-478e-a1d3-db9ed1416076" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pppoatm_ioctl", "pppoatm_assign_vcc", "vcc_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1faW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9hc3NpZ25fdmNjJiMzNDssCiAgICAmIzM0O3ZjY19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHBwcG9hdG1fYXNzaWduX3ZjYygpIGVuc3VyaW5nIHRoYXQgYW4gQVRNIFZDQyBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBiYWNrZW5kL3VzZXJfYmFjayBhc3NpZ25lZCBiZWZvcmUgYWxsb2NhdGluZyBhbmQgYXR0YWNoaW5nIGEgbmV3IHBwcG9hdG1fdmNjLCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIGFuZCBzdGF0ZSBjb3JydXB0aW9uIHdoZW4gcmUtYXNzaWduaW5nIGJhY2tlbmRzIG9uIHRoZSBzYW1lIHNvY2tldCB2aWEgQVRNX1NFVEJBQ0tFTkQgaW9jdGwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFUTSBzb2NrZXQgaW9jdGxzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUyNzgyMzE2YzNkZjU1YWFkODU3MWE0ODA3ZTNlNjBhYjgyMDQ5MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDE2OjE1OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkzYmEyMmY0MzdiYzkgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC0zOTYsNiAmIzQzOzM5Niw4IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXG4gXHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXHUwMDI2XHUwMDI2XG4gXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFx1MDAyNlx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjaylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4gXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xuIFx0aWYgKHB2Y2MgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBPQVRNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwb2F0bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2Fzc2lnbl92Y2MmIzM0OywKICAgICYjMzQ7dmNjX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcHBvYXRtX2Fzc2lnbl92Y2MoKSBlbnN1cmluZyB0aGF0IGFuIEFUTSBWQ0MgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgYmFja2VuZC91c2VyX2JhY2sgYXNzaWduZWQgYmVmb3JlIGFsbG9jYXRpbmcgYW5kIGF0dGFjaGluZyBhIG5ldyBwcHBvYXRtX3ZjYywgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBhbmQgc3RhdGUgY29ycnVwdGlvbiB3aGVuIHJlLWFzc2lnbmluZyBiYWNrZW5kcyBvbiB0aGUgc2FtZSBzb2NrZXQgdmlhIEFUTV9TRVRCQUNLRU5EIGlvY3RsLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBVE0gc29ja2V0IGlvY3RscyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1Mjc4MjMxNmMzZGY1NWFhZDg1NzFhNDgwN2UzZTYwYWI4MjA0OTAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNjoxNTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTNiYTIyZjQzN2JjOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTM5Niw2ICYjNDM7Mzk2LDggQEAgc3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZykKIAlpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgJmFtcDsmYW1wOwogCSAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgJmFtcDsmYW1wOyBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKQogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKGF0bXZjYy0mZ3Q7dXNlcl9iYWNrKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKIAlwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpOwogCWlmIChwdmNjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFBQUG9BVE0gQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UsIHNvIGxldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIGRpZmYgYW5kIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGNvZGViYXNlIHN1cnJvdW5kaW5nIGl0LiBUaGUgY2hhbmdlIGlzIHBvaW50aW5nIG1lIHRvIGBuZXQvYXRtL3BwcG9hdG0uY2AsIHdoaWNoIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dC4gTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGF0IHNwZWNpZmljIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzOTYuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IHNlY3Rpb24gb2YgY29kZSBpcyAqZG9pbmcqLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljLCBob3cgaXQmIzM5O3MgaW52b2tlZCwgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBhcmUg4oCTIEtjb25maWcgc2V0dGluZ3MsIGFueSBwb3RlbnRpYWwgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGV2ZXJ5dGhpbmcuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9wcHBvYXRtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0cmV0dXJuIC1FTk9UVFk7XG4gMzgxOlx0fVxuIDM4MjpcdFxuIDM4MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xuIDM4NDpcdFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXG4gMzg1Olx0XHQuaW9jdGwgPSBwcHBvYXRtX2RldnBwcF9pb2N0bCxcbiAzODY6XHR9O1xuIDM4NzpcdFxuIDM4ODpcdHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXG4gMzg5Olx0e1xuIDM5MDpcdFx0c3RydWN0IGF0bV9iYWNrZW5kX3BwcCBiZTtcbiAzOTE6XHRcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcbiAzOTI6XHRcdGludCBlcnI7XG4gMzkzOlx0XG4gMzk0Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YmUsIGFyZywgc2l6ZW9mIGJlKSlcbiAzOTU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzk2Olx0XHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXHUwMDI2XHUwMDI2XG4gMzk3Olx0XHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFx1MDAyNlx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxuIDM5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzOTk6XHRcdGlmIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKVxuIDQwMDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDQwMTpcdFx0cHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTtcbiA0MDI6XHRcdGlmIChwdmNjID09IE5VTEwpXG4gNDAzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQwNDpcdFx0cHZjYy1cdTAwM2VhdG12Y2MgPSBhdG12Y2M7XG4gNDA1Olx0XG4gNDA2Olx0XHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cbiA0MDc6XHRcdGF0b21pY19zZXQoXHUwMDI2cHZjYy1cdTAwM2VpbmZsaWdodCwgTk9ORV9JTkZMSUdIVCk7XG4gNDA4Olx0XHRwdmNjLVx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVx1MDAzZXB1c2g7XG4gNDA5Olx0XHRwdmNjLVx1MDAzZW9sZF9wb3AgPSBhdG12Y2MtXHUwMDNlcG9wO1xuIDQxMDpcdFx0cHZjYy1cdTAwM2VvbGRfb3duZXIgPSBhdG12Y2MtXHUwMDNlb3duZXI7XG4gNDExOlx0XHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG4gNDEyOlx0XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG4gNDEzOlx0XHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG4gNDE0Olx0XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG4gNDE1Olx0XHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbiA0MTY6XHRcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG4gNDE3Olx0XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG4gNDE4Olx0XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuIDQxOTpcdFx0aWYgKGVyciAhPSAwKSB7XG4gNDIwOlx0XHRcdGtmcmVlKHB2Y2MpO1xuIDQyMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDQyMjpcdFx0fVxuIDQyMzpcdFx0YXRtdmNjLVx1MDAzZXVzZXJfYmFjayA9IHB2Y2M7XG4gNDI0Olx0XHRhdG12Y2MtXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcbiA0MjU6XHRcdGF0bXZjYy1cdTAwM2Vwb3AgPSBwcHBvYXRtX3BvcDtcbiA0MjY6XHRcdGF0bXZjYy1cdTAwM2VyZWxlYXNlX2NiID0gcHBwb2F0bV9yZWxlYXNlX2NiO1xuIDQyNzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiA0Mjg6XHRcdGF0bXZjYy1cdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xuIDQyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQUFBvQVRNIFZDQyBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZvciBhc3NpZ25pbmcgVmlydHVhbCBDaGFubmVsIENvbm5lY3Rpb25zIChWQ0NzKSB3aXRoIFBQUG9BVE0gaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdHJhY2luZyB0aGUgY2FsbHMgdG8gYHBwcG9hdG1fYXNzaWduX3ZjY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIEFUTSBhbmQgUFBQb0FUTSBsYXllcnMgaW50ZXJhY3QgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBwaHlzaWNhbCBBVE0gaW50ZXJmYWNlLCB0aGUgUFBQb0FUTSBlbmNhcHN1bGF0aW9uLCBhbmQgdGhlIGV2ZW50dWFsIFZDQyBhbGxvY2F0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGxvb2sgZm9yIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgQVRNIGRldmljZSBzdHJ1Y3R1cmUsIHRoZSBQUFBvQVRNIHNlc3Npb24gc3RhdGUsIGFuZCwgb2YgY291cnNlLCB0aGUgVkNDIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzIHdvcmtzLiBGcm9tIHRoaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9wcHBvYXRtLmM9MzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM4Ny1cbm5ldC9hdG0vcHBwb2F0bS5jOjM4ODpzdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxubmV0L2F0bS9wcHBvYXRtLmMtMzg5LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz00NDA9c3RhdGljIGludCBwcHBvYXRtX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDU4LVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2F0bS9wcHBvYXRtLmM6NDU5Olx0XHRyZXR1cm4gcHBwb2F0bV9hc3NpZ25fdmNjKGF0bXZjYywgYXJncCk7XG5uZXQvYXRtL3BwcG9hdG0uYy00NjAtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzQ3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgcHBpb2F0bS5jIGlvY3RsIFBsdW1iaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgZm9yIHRoaXMgYGlvY3RsYCBjYWxsIHdpdGhpbiB0aGUgYHBwcG9hdG1gIG1vZHVsZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRyYWNpbmcgdGhlIGNhbGxlciB3aXRoaW4gYHBwcG9hdG0uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpwcmVjaXNlbHkqIGhvdyBgcHBwb2F0bV9pb2N0bGAgaXMgaW52b2tlZC4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udmVudGlvbnM/IFdoYXQgc3RydWN0dXJlcyBhcmUgcGFzc2VkPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHJlZ2FyZGluZyBzdGF0ZT8gV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGVycm9yIHBhdGhzIGZyb20gdGhlIGNhbGxlciwgYW5kIGhvdyBhcmUgZXJyb3JzIGhhbmRsZWQ/IFRoaXMgaXMgbGlrZWx5IGEga2V5IGFyZWEgZm9yIGRlYnVnZ2luZyBvciBtb2RpZmljYXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGNvbnRleHQgaXMgY3JpdGljYWwuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyB0aGUgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zIGBpb2N0bGAgb3Igc29tZXRoaW5nIGN1c3RvbSB3aXRoaW4gdGhlIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdC8qIHJlLXByb2Nlc3MgZXZlcnl0aGluZyByZWNlaXZlZCBiZXR3ZWVuIGNvbm5lY3Rpb24gc2V0dXAgYW5kXG4gNDMxOlx0XHQgICBiYWNrZW5kIHNldHVwICovXG4gNDMyOlx0XHR2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKGF0bXZjYyk7XG4gNDMzOlx0XHRyZXR1cm4gMDtcbiA0MzQ6XHR9XG4gNDM1Olx0XG4gNDM2Olx0LypcbiA0Mzc6XHQgKiBUaGlzIGhhbmRsZXMgaW9jdGxzIGFjdHVhbGx5IHBlcmZvcm1lZCBvbiBvdXIgdmNjIC0gd2UgbXVzdCByZXR1cm5cbiA0Mzg6XHQgKiAtRU5PSU9DVExDTUQgZm9yIGFueSB1bnJlY29nbml6ZWQgaW9jdGxcbiA0Mzk6XHQgKi9cbiA0NDA6XHRzdGF0aWMgaW50IHBwcG9hdG1faW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbiA0NDE6XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIDQ0MjpcdHtcbiA0NDM6XHRcdHN0cnVjdCBhdG1fdmNjICphdG12Y2MgPSBBVE1fU0Qoc29jayk7XG4gNDQ0Olx0XHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbiA0NDU6XHRcbiA0NDY6XHRcdGlmIChjbWQgIT0gQVRNX1NFVEJBQ0tFTkQgXHUwMDI2XHUwMDI2IGF0bXZjYy1cdTAwM2VwdXNoICE9IHBwcG9hdG1fcHVzaClcbiA0NDc6XHRcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiA0NDg6XHRcdHN3aXRjaCAoY21kKSB7XG4gNDQ5Olx0XHRjYXNlIEFUTV9TRVRCQUNLRU5EOiB7XG4gNDUwOlx0XHRcdGF0bV9iYWNrZW5kX3QgYjtcbiA0NTE6XHRcdFx0aWYgKGdldF91c2VyKGIsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKSBhcmdwKSlcbiA0NTI6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA0NTM6XHRcdFx0aWYgKGIgIT0gQVRNX0JBQ0tFTkRfUFBQKVxuIDQ1NDpcdFx0XHRcdHJldHVybiAtRU5PSU9DVExDTUQ7XG4gNDU1Olx0XHRcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcbiA0NTY6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDQ1NzpcdFx0XHRpZiAoc29jay1cdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQpXG4gNDU4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDU5Olx0XHRcdHJldHVybiBwcHBvYXRtX2Fzc2lnbl92Y2MoYXRtdmNjLCBhcmdwKTtcbiA0NjA6XHRcdFx0fVxuIDQ2MTpcdFx0Y2FzZSBQUFBJT0NHQ0hBTjpcbiA0NjI6XHRcdFx0cmV0dXJuIHB1dF91c2VyKHBwcF9jaGFubmVsX2luZGV4KFx1MDAyNmF0bXZjY190b19wdmNjKGF0bXZjYyktXHUwMDNlXG4gNDYzOlx0XHRcdCAgICBjaGFuKSwgKGludCBfX3VzZXIgKikgYXJncCkgPyAtRUZBVUxUIDogMDtcbiA0NjQ6XHRcdGNhc2UgUFBQSU9DR1VOSVQ6XG4gNDY1Olx0XHRcdHJldHVybiBwdXRfdXNlcihwcHBfdW5pdF9udW1iZXIoXHUwMDI2YXRtdmNjX3RvX3B2Y2MoYXRtdmNjKS1cdTAwM2VcbiA0NjY6XHRcdFx0ICAgIGNoYW4pLCAoaW50IF9fdXNlciAqKSBhcmdwKSA/IC1FRkFVTFQgOiAwO1xuIDQ2NzpcdFx0fVxuIDQ2ODpcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiA0Njk6XHR9XG4gNDcwOlx0XG4gNDcxOlx0c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XG4gNDcyOlx0XHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG4gNDczOlx0XHQuaW9jdGxcdD0gcHBwb2F0bV9pb2N0bCxcbiA0NzQ6XHR9O1xuIDQ3NTpcdFxuIDQ3NjpcdHN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxuIDQ3NzpcdHtcbiA0Nzg6XHRcdHJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG4gNDc5Olx0XHRyZXR1cm4gMDtcbiA0ODA6XHR9XG4gNDgxOlx0XG4gNDgyOlx0c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxuIDQ4MzpcdHtcbiA0ODQ6XHRcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcbiA0ODU6XHR9XG4gNDg2Olx0XG4gNDg3Olx0bW9kdWxlX2luaXQocHBwb2F0bV9pbml0KTtcbiA0ODg6XHRtb2R1bGVfZXhpdChwcHBvYXRtX2V4aXQpO1xuIDQ4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUFBQb0FUTSBWQ0MgQXNzaWdubWVudCoqCgpPa2F5LCBzbyBgcHBwb2F0bV9hc3NpZ25fdmNjYC4uLiB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIEFUTSBzb2NrZXQsIHVzaW5nIGBpb2N0bGAgd2l0aCBgQVRNX1NFVEJBQ0tFTkRgLCBhbmQgdGhlIGJhY2tlbmQgaXMgc2V0IHRvIFBQUC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZXJlIHdhcyBhIG5hc3R5IGJ1Zy4gSWYgYSBWaXJ0dWFsIENoYW5uZWwgQ29ubmVjdGlvbiAoVkNDKSBhbHJlYWR5IGhhZCBhIGB1c2VyX2JhY2tgIHNldCAob3IgaWYgYEFUTV9TRVRCQUNLRU5EYCB3YXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCBvciB3aXRoIGEgZGlmZmVyZW50IGJhY2tlbmQgaW5pdGlhbGx5KSwgdGhlIGNvZGUgd291bGQgYWxsb2NhdGUgKmFub3RoZXIqIGBwdmNjYCBzdHJ1Y3QsIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBwb2ludGVyIHdpdGggdGhlIG5ldyBvbmUsIGFuZCBhbHNvIGNsb2JiZXIgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYGF0bXZjYy0mZ3Q7cHVzaGAhIE1lbW9yeSBsZWFrIGFuZCBzdGF0ZSBjb3JydXB0aW9uLCBjbGFzc2ljLgoKQnV0IHdpdGggdGhlIHBhdGNoPyBOb3cgaXQganVzdCBjaGVja3MgaWYgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBpcyBzZXQgYW5kIHJldHVybnMgYC1FQlVTWWAgaWYgaXQgaXMuIE11Y2ggY2xlYW5lci4gQSBnb29kIHByb3RlY3Rpb24gbWVhc3VyZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGNhbiBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgc2l0dWF0aW9uIGluIGEgdGVzdGluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIENhbiB3ZSBldmVuICpnZXQqIEFUTSBpbnRlcmZhY2VzIGluIFFFTVU/IFllcywgbG9va3MgbGlrZSB3ZSBjYW4uIFdlJiMzOTt2ZSBnb3QgYHNvY2tldChBRl9BVE1TVkMsIC4uLilgIG9yIGBzb2NrZXQoQUZfQVRNUFZDLCAuLi4pYCBjYWxscywgb3IgZXZlbiBzaW11bGF0ZWQgQVRNIGRldmljZXMsIHBvdGVudGlhbGx5IHVzaW5nIHRoaW5ncyBsaWtlIGBhdG1fdGNwYCBvciBvdGhlciB2aXJ0dWFsIGludGVyZmFjZXMuIFRoYXQmIzM5O3MgZ29vZDsgaXQgZ2l2ZXMgdXMgb3B0aW9ucy4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBuZXQvYXRtL0tjb25maWdgIGFuZCBgbmV0L2F0bS9NYWtlZmlsZWAgZmlsZXMgbmV4dCB0byBzZWUgd2hhdCBBVE0gY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLCB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBob3cgdGhleSBnZXQgYnVpbHQgaW50byB0aGUga2VybmVsIGZvciB0ZXN0aW5nLiBUaGlzJiMzOTtsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgaG93IHRvIHNldCB1cCB0aGUgZW52aXJvbm1lbnQgZWZmZWN0aXZlbHkgZm9yIGZ1enppbmcgYW5kIHZlcmlmeWluZyB0aGlzIHBhdGNoLiBXZSBjYW4gdHJ5IHRvIGNyZWF0ZSBhIHNjZW5hcmlvIHdoZXJlIHdlIGNhbiBkZWxpYmVyYXRlbHkgY2F1c2UgdGhlIGBBVE1fU0VUQkFDS0VORGAgaW9jdGwgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCBzaW11bGF0aW5nIHRoZSBvcmlnaW5hbCBidWcgY29uZGl0aW9uIGFuZCBwcm92aW5nIHRoZSBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEFUTVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgQVRNIGlzIGEgaGlnaC1zcGVlZCBuZXR3b3JraW5nIHRlY2hub2xvZ3kgZm9yIExvY2FsIEFyZWEgTmV0d29ya3NcbiAgMTA6XHRcdCAgYW5kIFdpZGUgQXJlYSBOZXR3b3Jrcy4gIEl0IHVzZXMgYSBmaXhlZCBwYWNrZXQgc2l6ZSBhbmQgaXNcbiAgMTE6XHRcdCAgY29ubmVjdGlvbiBvcmllbnRlZCwgYWxsb3dpbmcgZm9yIHRoZSBuZWdvdGlhdGlvbiBvZiBtaW5pbXVtXG4gIDEyOlx0XHQgIGJhbmR3aWR0aCByZXF1aXJlbWVudHMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxuICAxNTpcdFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXG4gIDE2Olx0XHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIHNldCBvZiB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGFjdHVhbGx5IG1ha2UgdXNlXG4gIDE5Olx0XHQgIG9mIEFUTS4gIFNlZSB0aGUgZmlsZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XHUwMDNlIGZvclxuICAyMDpcdFx0ICBmdXJ0aGVyIGRldGFpbHMuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIEFUTV9CUjI2ODRcbiAgMjM6XHRcdHRyaXN0YXRlIFwmIzM0O1JGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBBVE0gXHUwMDI2XHUwMDI2IElORVRcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdCAgQVRNIFBWQ3MgY2FuIGNhcnJ5IGV0aGVybmV0IFBEVXMgYWNjb3JkaW5nIHRvIFJGQzI2ODQgKGZvcm1lcmx5IDE0ODMpXG4gIDI3Olx0XHQgIFRoaXMgZGV2aWNlIHdpbGwgYWN0IGxpa2UgYW4gZXRoZXJuZXQgZnJvbSB0aGUga2VybmVscyBwb2ludCBvZiB2aWV3LFxuICAyODpcdFx0ICB3aXRoIHRoZSB0cmFmZmljIGJlaW5nIGNhcnJpZWQgYnkgQVRNIFBWQ3MgKGN1cnJlbnRseSAxIFBWQy9kZXZpY2UpLlxuICAyOTpcdFx0ICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VkIG92ZXIgRFNMIGxpbmVzLiAgSWYgaW4gZG91YnQsIHNheSBOLlxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXG4gIDMyOlx0XHRib29sIFwmIzM0O1Blci1WQyBJUCBmaWx0ZXIga2x1ZGdlXCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIEFUTV9CUjI2ODRcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgbWVjaGFuaXNtIGZvciB1c2VycyB3aG8gbmVlZCB0byB0ZXJtaW5hdGUgYVxuICAzNjpcdFx0ICBsYXJnZSBudW1iZXIgb2YgSVAtb25seSB2Y2MmIzM5O3MuICBEbyBub3QgZW5hYmxlIHRoaXMgdW5sZXNzIHlvdSBhcmUgc3VyZVxuICAzNzpcdFx0ICB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgRG93biBQUFBPQVRNIGluIHRoZSBLY29uZmlnIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgUFBQT0FUTWAgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgZXhlcmNpc2Ugd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgZ29pbmcgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgYEtjb25maWdgIGZpbGUgd2hlcmUgYFBQUE9BVE1gIGlzIGZpcnN0IGludHJvZHVjZWQsIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIHByb21wdHMsIGFuZCB1bHRpbWF0ZWx5LCBpdHMgaW1wbGljYXRpb25zIGZvciB0aGUgYnVpbGQuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgaXMgbmVzdGVkLCBzbyBJIHdpbGwgbmVlZCB0byBpdGVyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBvYXRtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbm5ldC9hdG0vTWFrZWZpbGUtMTEtXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSAmIzQzOz0gcHBwb2F0bS5vXG4tLVxubmV0L2F0bS9pb2N0bC5jPTQzPXN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2F0bS9pb2N0bC5jLTk0LVx0XHRjYXNlIEFUTV9CQUNLRU5EX1BQUDpcbm5ldC9hdG0vaW9jdGwuYzo5NTpcdFx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDtwcHBvYXRtXCYjMzQ7KTtcbm5ldC9hdG0vaW9jdGwuYy05Ni1cdFx0XHRicmVhaztcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG5uZXQvYXRtL3BwcG9hdG0uYzoyOi8qIG5ldC9hdG0vcHBwb2F0bS5jIC0gUkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNSAqL1xubmV0L2F0bS9wcHBvYXRtLmMtMy1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00OS1cbm5ldC9hdG0vcHBwb2F0bS5jOjUwOmVudW0gcHBwb2F0bV9lbmNhcHMge1xubmV0L2F0bS9wcHBvYXRtLmMtNTEtXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTU1LVxubmV0L2F0bS9wcHBvYXRtLmM6NTY6c3RydWN0IHBwcG9hdG1fdmNjIHtcbm5ldC9hdG0vcHBwb2F0bS5jLTU3LVx0c3RydWN0IGF0bV92Y2NcdCphdG12Y2M7XHQvKiBWQ0MgZGVzY3JpcHRvciAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTYyLVx0XHRcdFx0XHQvKiBrZWVwIG9sZCBwdXNoL3BvcCBmb3IgZGV0YWNoaW5nICovXG5uZXQvYXRtL3BwcG9hdG0uYzo2MzpcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xubmV0L2F0bS9wcHBvYXRtLmMtNjQtXHRhdG9taWNfdCBpbmZsaWdodDtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz04Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cbm5ldC9hdG0vcHBwb2F0bS5jOjg5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xubmV0L2F0bS9wcHBvYXRtLmM6OTE6XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjayk7XG5uZXQvYXRtL3BwcG9hdG0uYy05Mi19XG5uZXQvYXRtL3BwcG9hdG0uYy05My1cbm5ldC9hdG0vcHBwb2F0bS5jOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICpjaGFuX3RvX3B2Y2MoY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxubmV0L2F0bS9wcHBvYXRtLmMtOTUte1xubmV0L2F0bS9wcHBvYXRtLmM6OTY6XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTk3LX1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDMtICovXG5uZXQvYXRtL3BwcG9hdG0uYzoxMDQ6c3RhdGljIHZvaWQgcHBwb2F0bV93YWtldXBfc2VuZGVyKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbm5ldC9hdG0vcHBwb2F0bS5jLTEwNS17XG5uZXQvYXRtL3BwcG9hdG0uYzoxMDY6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBmcm9tX3Rhc2tsZXQocHZjYywgdCwgd2FrZXVwX3Rhc2tsZXQpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTA3LVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTExMC1cbm5ldC9hdG0vcHBwb2F0bS5jOjExMTpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XG5uZXQvYXRtL3BwcG9hdG0uYzoxMTM6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTE0LVxubmV0L2F0bS9wcHBvYXRtLmMtMTE1LVx0Lypcbm5ldC9hdG0vcHBwb2F0bS5jOjExNjpcdCAqIEFzIGluIHBwcG9hdG1fcG9wKCksIGl0JiMzOTtzIHNhZmUgdG8gY2xlYXIgdGhlIEJMT0NLRUQgYml0IGhlcmUgYmVjYXVzZVxubmV0L2F0bS9wcHBvYXRtLmM6MTE3Olx0ICogdGhlIHdha2V1cCAqY2FuJiMzOTt0KiByYWNlIHdpdGggcHBwb2F0bV9zZW5kKCkuIFRoZXkgYm90aCBob2xkIHRoZSBQUFBcbm5ldC9hdG0vcHBwb2F0bS5jLTExOC1cdCAqIGNoYW5uZWwmIzM5O3MgLVx1MDAzZWRvd25sIGxvY2suIEFuZCB0aGUgcG90ZW50aWFsIHJhY2Ugd2l0aCAqc2V0dGluZyogaXQsXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTk6XHQgKiB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlLWNoZWNrIGRhbmNlIGluIHBwcG9hdG1fbWF5X3NlbmQoKSwgZG9lc24mIzM5O3Rcbm5ldC9hdG0vcHBwb2F0bS5jOjEyMDpcdCAqIGV4aXN0IGhlcmUuIEluIHRoZSBzb2NrX293bmVkX2J5X3VzZXIoKSBjYXNlIGluIHBwcG9hdG1fc2VuZCgpLCB3ZVxubmV0L2F0bS9wcHBvYXRtLmMtMTIxLVx0ICogc2V0IHRoZSBCTE9DS0VEIGJpdCB3aGlsZSB0aGUgc29ja2V0IGlzIHN0aWxsIGxvY2tlZC4gV2Uga25vdyB0aGF0XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTMzLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzUte1xubmV0L2F0bS9wcHBvYXRtLmM6MTM2Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTEzNy1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXHQgKiBmZWFyIG9mIHJhY2UgY29uZGl0aW9ucyB3aGVyZSB3ZSBjbGVhciB0aGUgQkxPQ0tFRCBmbGFnIGp1c3QgYXMgd2Vcbm5ldC9hdG0vcHBwb2F0bS5jOjE0NDpcdCAqIHJlZnVzZSBhbm90aGVyIHBhY2tldCBpbiBwcHBvYXRtX3NlbmQoKS4gVGhpcyB3YXMgcXVpdGUgaW5lZmZpY2llbnQuXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDUtXHQgKlxubmV0L2F0bS9wcHBvYXRtLmM6MTQ2Olx0ICogSW4gZmFjdCBpdCYjMzk7cyBPSy4gVGhlIFBQUCBjb3JlIHdpbGwgb25seSBldmVyIGNhbGwgcHBwb2F0bV9zZW5kKClcbm5ldC9hdG0vcHBwb2F0bS5jLTE0Ny1cdCAqIHdoaWxlIGhvbGRpbmcgdGhlIGNoYW5uZWwtXHUwMDNlZG93bmwgbG9jay4gQW5kIHBwcF9vdXRwdXRfd2FrZXVwKCkgYXNcbm5ldC9hdG0vcHBwb2F0bS5jLTE0OC1cdCAqIGNhbGxlZCBieSB0aGUgdGFza2xldCB3aWxsICphbHNvKiBncmFiIHRoYXQgbG9jay4gU28gZXZlbiBpZiBhbm90aGVyXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDk6XHQgKiBDUFUgaXMgaW4gcHBwb2F0bV9zZW5kKCkgcmlnaHQgbm93LCB0aGUgdGFza2xldCBpc24mIzM5O3QgZ29pbmcgdG8gcmFjZVxubmV0L2F0bS9wcHBvYXRtLmMtMTUwLVx0ICogd2l0aCBpdC4gVGhlIHdha2V1cCAqd2lsbCogaGFwcGVuIGFmdGVyIHRoZSBvdGhlciBDUFUgaXMgc2FmZWx5IG91dFxubmV0L2F0bS9wcHBvYXRtLmM6MTUxOlx0ICogb2YgcHBwb2F0bV9zZW5kKCkgYWdhaW4uXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTItXHQgKlxubmV0L2F0bS9wcHBvYXRtLmM6MTUzOlx0ICogU28gaWYgdGhlIENQVSBpbiBwcHBvYXRtX3NlbmQoKSBoYXMgYWxyZWFkeSBzZXQgdGhlIEJMT0NLRUQgYml0IGFuZFxubmV0L2F0bS9wcHBvYXRtLmMtMTU0LVx0ICogaXQgYWJvdXQgdG8gcmV0dXJuLCB0aGF0JiMzOTtzIGZpbmUuIFdlIHRyaWdnZXIgYSB3YWtldXAgd2hpY2ggd2lsbFxubmV0L2F0bS9wcHBvYXRtLmM6MTU1Olx0ICogaGFwcGVuIGxhdGVyLiBBbmQgaWYgdGhlIENQVSBpbiBwcHBvYXRtX3NlbmQoKSAqaGFzbiYjMzk7dCogc2V0IHRoZVxubmV0L2F0bS9wcHBvYXRtLmMtMTU2LVx0ICogQkxPQ0tFRCBiaXQgeWV0LCB0aGF0JiMzOTtzIGZpbmUgdG9vIGJlY2F1c2Ugb2YgdGhlIGRvdWJsZSBjaGVjayBpblxubmV0L2F0bS9wcHBvYXRtLmM6MTU3Olx0ICogcHBwb2F0bV9tYXlfc2VuZCgpIHdoaWNoIGlzIGNvbW1lbnRlZCB0aGVyZS5cbm5ldC9hdG0vcHBwb2F0bS5jLTE1OC1cdCAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE2Ni0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE2NzpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtMTY4LXtcbm5ldC9hdG0vcHBwb2F0bS5jOjE2OTpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcbm5ldC9hdG0vcHBwb2F0bS5jLTE3MC1cdHB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE4MC0vKiBDYWxsZWQgd2hlbiBhbiBBQUw1IFBEVSBjb21lcyBpbiAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTgxOnN0YXRpYyB2b2lkIHBwcG9hdG1fcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMTgyLXtcbm5ldC9hdG0vcHBwb2F0bS5jOjE4MzpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXHRwcl9kZWJ1ZyhcJiMzNDtcXG5cJiMzNDspO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE4OS1cdFx0bW9kdWxlID0gcHZjYy1cdTAwM2VvbGRfb3duZXI7XG5uZXQvYXRtL3BwcG9hdG0uYzoxOTA6XHRcdHBwcG9hdG1fdW5hc3NpZ25fdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xOTEtXHRcdGF0bXZjYy1cdTAwM2VwdXNoKGF0bXZjYywgTlVMTCk7XHQvKiBQYXNzIGFsb25nIGJhZCBuZXdzICovXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjMzLVxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxubmV0L2F0bS9wcHBvYXRtLmMtMjM1LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTYtXHQvKlxubmV0L2F0bS9wcHBvYXRtLmM6MjU3Olx0ICogV2UgbWF5IGhhdmUgcmFjZWQgd2l0aCBwcHBvYXRtX3BvcCgpLiBJZiBpdCByYW4gZm9yIHRoZVxubmV0L2F0bS9wcHBvYXRtLmMtMjU4LVx0ICogbGFzdCBwYWNrZXQgaW4gdGhlIHF1ZXVlLCAqanVzdCogYmVmb3JlIHdlIHNldCB0aGUgQkxPQ0tFRFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTI2NC1cdCAqIHJ1biB0aGUgd2FrZXVwIHRhc2tsZXQuIEFub3RoZXIgd2FrZXVwIHdpbGwgbmV2ZXIgaHVydC5cbm5ldC9hdG0vcHBwb2F0bS5jOjI2NTpcdCAqIElmIHBwcG9hdG1fcG9wKCkgaXMgcnVubmluZyBidXQgaGFzbiYjMzk7dCBnb3QgYXMgZmFyIGFzIG1ha2luZ1xubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVx0ICogc3BhY2Ugb24gdGhlIHF1ZXVlIHlldCwgdGhlbiBpdCBoYXNuJiMzOTt0IGNoZWNrZWQgdGhlIEJMT0NLRURcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjktXHQgKiB0YWtpbmcgdGhlIFBQUCBjaGFubmVsJiMzOTtzIC1cdTAwM2Vkb3dubCBsb2NrLCB3aGljaCBpcyBoZWxkIGJ5IHRoZVxubmV0L2F0bS9wcHBvYXRtLmM6MjcwOlx0ICogY29kZSBwYXRoIHRoYXQgY2FsbHMgcHBwb2F0bV9zZW5kKCksIGFuZCBpcyB0aHVzIGdvaW5nIHRvXG5uZXQvYXRtL3BwcG9hdG0uYy0yNzEtXHQgKiB3YWl0IGZvciB1cyB0byBmaW5pc2guXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjg4LSNkZWZpbmUgRFJPUF9QQUNLRVQgMVxubmV0L2F0bS9wcHBvYXRtLmM6Mjg5OnN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9hdG0vcHBwb2F0bS5jLTI5MC17XG5uZXQvYXRtL3BwcG9hdG0uYzoyOTE6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG5uZXQvYXRtL3BwcG9hdG0uYy0yOTItXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMyMy1cdFx0XHRpZiAobiAhPSBOVUxMIFx1MDAyNlx1MDAyNlxubmV0L2F0bS9wcHBvYXRtLmM6MzI0Olx0XHRcdCAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLVx1MDAzZXRydWVzaXplKSkge1xubmV0L2F0bS9wcHBvYXRtLmMtMzI1LVx0XHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMzMy1cdFx0XHR9XG5uZXQvYXRtL3BwcG9hdG0uYzozMzQ6XHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMzNS1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzM4LVx0Y2FzZSBlX3ZjOlxubmV0L2F0bS9wcHBvYXRtLmM6MzM5Olx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTM0MC1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzY4LS8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG5uZXQvYXRtL3BwcG9hdG0uYzozNjk6c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG5uZXQvYXRtL3BwcG9hdG0uYy0zNzAtXHR1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0zODItXG5uZXQvYXRtL3BwcG9hdG0uYzozODM6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG5uZXQvYXRtL3BwcG9hdG0uYzozODQ6XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4NTpcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxubmV0L2F0bS9wcHBvYXRtLmMtMzg2LX07XG5uZXQvYXRtL3BwcG9hdG0uYy0zODctXG5uZXQvYXRtL3BwcG9hdG0uYzozODg6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbm5ldC9hdG0vcHBwb2F0bS5jLTM4OS17XG5uZXQvYXRtL3BwcG9hdG0uYy0zOTAtXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xubmV0L2F0bS9wcHBvYXRtLmM6MzkxOlx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmMtMzkyLVx0aW50IGVycjtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MTEtXHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTI6XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MTMtXHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTQ6XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MTUtXHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbm5ldC9hdG0vcHBwb2F0bS5jLTQxNi1cdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTc6XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG5uZXQvYXRtL3BwcG9hdG0uYy00MTgtXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQyMy1cdGF0bXZjYy1cdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmM6NDI0Olx0YXRtdmNjLVx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MjU6XHRhdG12Y2MtXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MjY6XHRhdG12Y2MtXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcbm5ldC9hdG0vcHBwb2F0bS5jLTQyNy1cdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDM5LSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6NDQwOnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxubmV0L2F0bS9wcHBvYXRtLmMtNDQxLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDQ1LVxubmV0L2F0bS9wcHBvYXRtLmM6NDQ2Olx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcdTAwMjZcdTAwMjYgYXRtdmNjLVx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxubmV0L2F0bS9wcHBvYXRtLmMtNDQ3LVx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ1OC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9hdG0vcHBwb2F0bS5jOjQ1OTpcdFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xubmV0L2F0bS9wcHBvYXRtLmMtNDYwLVx0XHR9XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDcwLVxubmV0L2F0bS9wcHBvYXRtLmM6NDcxOnN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIHBwcG9hdG1faW9jdGxfb3BzID0ge1xubmV0L2F0bS9wcHBvYXRtLmMtNDcyLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxubmV0L2F0bS9wcHBvYXRtLmM6NDczOlx0LmlvY3RsXHQ9IHBwcG9hdG1faW9jdGwsXG5uZXQvYXRtL3BwcG9hdG0uYy00NzQtfTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3NS1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ3NjpzdGF0aWMgaW50IF9faW5pdCBwcHBvYXRtX2luaXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Ny17XG5uZXQvYXRtL3BwcG9hdG0uYzo0Nzg6XHRyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xubmV0L2F0bS9wcHBvYXRtLmMtNDc5LVx0cmV0dXJuIDA7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDgxLVxubmV0L2F0bS9wcHBvYXRtLmM6NDgyOnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvYXRtX2V4aXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ4My17XG5uZXQvYXRtL3BwcG9hdG0uYzo0ODQ6XHRkZXJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG5uZXQvYXRtL3BwcG9hdG0uYy00ODUtfVxubmV0L2F0bS9wcHBvYXRtLmMtNDg2LVxubmV0L2F0bS9wcHBvYXRtLmM6NDg3Om1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XG5uZXQvYXRtL3BwcG9hdG0uYzo0ODg6bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NjgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biB0aGUgUFBQT0FUTSBLY29uZmlnIFN5bWJvbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIFBQUE9BVE0uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkmIzM5O2xsIGFwcHJvYWNoIHRoaXMgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUsIHN0YXJ0aW5nIHdpdGggdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9ucy4KCkZpcnN0LCBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gUFBQT0FUTSBpcyBvYnZpb3VzbHkgYSBuZXR3b3JraW5nIHByb3RvY29sLCBzbyBhIGRpdmUgaW50byB0aGUgYG5ldC9gIGRpcmVjdG9yeSBhbmQgaXRzIGBLY29uZmlnYCBmaWxlcyBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB0aGF0IHNlZW1zIHJlbGV2YW50IOKAkyBtYXliZSBuYW1lZCBgYXRtYCwgYHBwcGAsIG9yIGBwcHBvYWAsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIGxpa2UgYHBwcG9hdG1gLiBJIGtub3cgdGhlIG5hbWluZyBjb252ZW50aW9ucyBjYW4gYmUgYSBiaXTigKYgd2VsbCwgdW5wcmVkaWN0YWJsZSBzb21ldGltZXMsIHNvIEnigJlsbCBuZWVkIHRvIHRoaW5rIGxhdGVyYWxseSBpZiB0aGUgb2J2aW91cyBzZWFyY2ggdGVybXMgZG9uJiMzOTt0IGhpdCBpbW1lZGlhdGVseS4KCklmIHRoYXQgaW5pdGlhbCBicm9hZCBzZWFyY2ggZG9lc27igJl0IHlpZWxkIGFueXRoaW5nIHVzZWZ1bCwgSeKAmWxsIG5lZWQgdG8gcmVmaW5lIG15IGFwcHJvYWNoLiBJ4oCZbGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtb3JlIHNwZWNpZmljIHN1Yi1kaXJlY3RvcmllcyBhbmQgcmVsYXRlZCBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIElzIFBQUE9BVE0gbGlrZWx5IHRyZWF0ZWQgYXMgYSBkaXN0aW5jdCBpbnRlcmZhY2U/IE9yIGlzIGl0IHBhcnQgb2YgYSBsYXJnZXIgUFBQIHN1cHBvcnQgY29uZmlndXJhdGlvbj8gRG9lcyBpdCBsZWFuIG9uIEFUTSBkcml2ZXJzPyBJIGtub3cgaXQgZGVwZW5kcywgc28gSSYjMzk7bGwgZm9sbG93IHRoZSBicmVhZGNydW1icyBmcm9tIHdoZXJlIGl0IGxvb2tzIGxpa2UgaXQgYmVsb25ncy4gSeKAmWxsIGJlIHRyeWluZyB0byBpZGVudGlmeSBkZXBlbmRlbmNpZXMgb3IgY29ubmVjdGlvbnMgdG8gb3RoZXIgc3ltYm9scy4KClVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBzeW1ib2wgdGhhdCwgd2hlbiBlbmFibGVkLCBpbmNsdWRlcyB0aGUgbmVjZXNzYXJ5IGRyaXZlcnMsIG1vZHVsZXMsIG9yIGNvbmZpZ3VyYXRpb25zIGZvciBQUFBPQVRNLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgaXQgbWlnaHQgYmUgYSAqYm9vbGVhbiogc3ltYm9sLCBvciBwb3RlbnRpYWxseSBhICp0cmlzdGF0ZSogaWYgaXQgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBPbmNlIEkgaGF2ZSB0aGUgc3ltYm9sLCBJIGNhbiBzdGFydCBsb29raW5nIGZvciBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYW5kIGdldCBiYWNrIHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUE9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz05Mj1jb25maWcgUFBQX01VTFRJTElOS1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEwNDpjb25maWcgUFBQT0FUTVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBQUFAgQ29uZmlndXJhdGlvbiBTcGFjZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgdG8gd29yayBvbiwgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIFBQUCBjb25maWd1cmF0aW9uIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUFBQIGRyaXZlci4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSByZWxldmFudCBzZWN0aW9uLCBhcm91bmQgbGluZSAxMDQgaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhhdCBsb2NhdGlvbiBzaG91bGQgY29udGFpbiB0aGUgY29yZSBvcHRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiBob3cgYWxsIG9mIHRoZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdCAgdmVyc2lvbiBvZiB0aGUgcHBwZCBkYWVtb24gd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG11bHRpbGluayBwcm90b2NvbC5cbiAxMDE6XHRcbiAxMDI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMDM6XHRcbiAxMDQ6XHRjb25maWcgUFBQT0FUTVxuIDEwNTpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG4gMTA2Olx0XHRkZXBlbmRzIG9uIEFUTVxuIDEwNzpcdFx0aGVscFxuIDEwODpcdFx0ICBTdXBwb3J0IFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGVuY2Fwc3VsYXRlZCBpbiBBVE0gZnJhbWVzLlxuIDEwOTpcdFx0ICBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHlldCBjb21wbHkgd2l0aCBzZWN0aW9uIDggb2YgUkZDMjM2NCxcbiAxMTA6XHRcdCAgd2hpY2ggY2FuIGxlYWQgdG8gYmFkIHJlc3VsdHMgaWYgdGhlIEFUTSBwZWVyIGxvc2VzIHN0YXRlIGFuZFxuIDExMTpcdFx0ICBjaGFuZ2VzIGl0cyBlbmNhcHN1bGF0aW9uIHVuaWxhdGVyYWxseS5cbiAxMTI6XHRcbiAxMTM6XHRjb25maWcgUFBQT1hcbiAxMTQ6XHRcdHRyaXN0YXRlXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIFBQUE9FXG4gMTE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBFdGhlcm5ldFwmIzM0O1xuIDExODpcdFx0c2VsZWN0IFBQUE9YXG4gMTE5Olx0XHRoZWxwXG4gMTIwOlx0XHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxuIDEyMTpcdFxuIDEyMjpcdFx0ICBUbyB3b3JrIGluIGNsaWVudCBtb2RlLCBwcHBkIHZlcnNpb24gMi40LjIgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuXG4gMTIzOlx0XHQgIFRvIHdvcmsgaW4gc2VydmVyIG1vZGUsIHRoZSBwcHBvZS1zZXJ2ZXIgY29tbWFuZCBmcm9tIHRoZSBSUC1QUFBvRVxuIDEyNDpcdFx0ICBwYWNrYWdlIGlzIGFsc28gcmVxdWlyZWQsIGF2YWlsYWJsZSBhdFxuIDEyNTpcdFx0ICBcdTAwM2NodHRwczovL2RpYW5uZS5za29sbC5jYS9wcm9qZWN0cy9ycC1wcHBvZS9cdTAwM2UuXG4gMTI2Olx0XG4gMTI3Olx0Y2hvaWNlXG4gMTI4Olx0XHRwcm9tcHQgXCYjMzQ7TnVtYmVyIG9mIFBQUG9FIGhhc2ggYml0c1wmIzM0O1xuIDEyOTpcdFx0ZGVmYXVsdCBQUFBPRV9IQVNIX0JJVFNfNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgxOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBQUE9BVE0gQnVpbGQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgUFBQT0FUTSBpcyBhY3R1YWxseSBidWlsdC4gSXQmIzM5O3MgYSBiaXQgb2YgYW4gb2xkZXIgdGVjaG5vbG9neSwgYW5kIHRoZSBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIGEgbGl0dGxlIG9ic2N1cmUsIHNvIEkgc2hvdWxkIGRpdmUgaW50byB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBkaXJlY3RseS4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIGV4YW1pbmUgdGhlIE1ha2VmaWxlcyBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlYCwgdGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBnaXZlbiBpdHMgYXNzb2NpYXRpb24gd2l0aCBQUFAuIEFuZCBzaW5jZSBQUFBPQVRNIGNvbWJpbmVzIFBQUCBhbmQgQVRNLCBJJiMzOTtsbCBhbHNvIGNoZWNrIG91dCBgbmV0L2F0bS9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByZWxldmFudCBidWlsZCBsb2dpYyBvciBkZXBlbmRlbmNpZXMgaW4gdGhlcmUuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMsIGFueSBvdGhlciBkcml2ZXJzIG9yIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYWxvbmdzaWRlIFBQUE9BVE0sIGFuZCB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGUgbW9kdWxlLiBUaGlzIHNob3VsZCBoZWxwIG1lIGNvbmZpcm0gdGhhdCBJIGhhdmUgYW4gYWNjdXJhdGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUE9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9NYWtlZmlsZT0xMD1hdG0tJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xubmV0L2F0bS9NYWtlZmlsZS0xMS1cbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICYjNDM7PSBwcHBvYXRtLm9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz01MD1lbnVtIHBwcG9hdG1fZW5jYXBzIHtcbm5ldC9hdG0vcHBwb2F0bS5jOjUxOlx0ZV9hdXRvZGV0ZWN0ID0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCxcbm5ldC9hdG0vcHBwb2F0bS5jOjUyOlx0ZV92YyA9IFBQUE9BVE1fRU5DQVBTX1ZDLFxubmV0L2F0bS9wcHBvYXRtLmM6NTM6XHRlX2xsYyA9IFBQUE9BVE1fRU5DQVBTX0xMQyxcbm5ldC9hdG0vcHBwb2F0bS5jLTU0LX07XG4tLVxubmV0L2F0bS9wcHBvYXRtLmM9Mzg4PXN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzk1LVx0XHRyZXR1cm4gLUVGQVVMVDtcbm5ldC9hdG0vcHBwb2F0bS5jOjM5NjpcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbm5ldC9hdG0vcHBwb2F0bS5jOjM5NzpcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG5uZXQvYXRtL3BwcG9hdG0uYy0zOTgtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBQUFAgb3ZlciBBVE0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgc2VlIGhvdyB0aGUgUFBQIG92ZXIgQVRNIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBzbyBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLiBJdCBzZWVtcyB0aGF0IFBQUE9BVE0gcmVsaWVzIG9uIGJvdGggQVRNIGFuZCBQUFAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljcyBvZiB0aGlzIHJlbGF0aW9uc2hpcCwgc28gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhyb3VnaCB0aGUgZmlyc3QgNTAgbGluZXMgb2YgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgbGlua2VkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBQUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNMSENcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgaXMgYSBuZXdlciBhbmQgYmV0dGVyIFNMSVAuICBJdCBzZXJ2ZXNcbiAgMTE6XHRcdCAgdGhlIHNhbWUgcHVycG9zZTogc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgdGVsZXBob25lIChhbmQgb3RoZXJcbiAgMTI6XHRcdCAgc2VyaWFsKSBsaW5lcy4gIEFzayB5b3VyIGFjY2VzcyBwcm92aWRlciBpZiB0aGV5IHN1cHBvcnQgaXQsIGJlY2F1c2VcbiAgMTM6XHRcdCAgb3RoZXJ3aXNlIHlvdSBjYW4mIzM5O3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcbiAgMTQ6XHRcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcdTAwM2UuICBNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgdmVyc2lvbiBvZiBwcHBkXG4gIDE4Olx0XHQgIHJlY29tbWVuZGVkIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAxOTpcdFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXG4gIDIyOlx0XHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXG4gIDIzOlx0XHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcbiAgMjQ6XHRcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxuICAyNTpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xuICAyNjpcdFx0ICB0aGUgbmV4dCBvcHRpb24sIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDsuICBGb3IgUFBQIG92ZXJcbiAgMjc6XHRcdCAgc3luY2hyb25vdXMgbGluZXMsIHlvdSBzaG91bGQgc2F5IFkgKG9yIE0pIGhlcmUgYW5kIHRvIFwmIzM0O1N1cHBvcnRcbiAgMjg6XHRcdCAgc3luY2hyb25vdXMgUFBQXCYjMzQ7LCBiZWxvdy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgeW91IHNhaWQgWSB0byBcJiMzNDtWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXCYjMzQ7IGFib3ZlLCB0aGVuXG4gIDMxOlx0XHQgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGUgUFBQIGRyaXZlciBpbnRvIHRoZSBrZXJuZWw7IHlvdSBjYW4gdGhlbiBvbmx5XG4gIDMyOlx0XHQgIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNXG4gIDMzOlx0XHQgIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHBwX2dlbmVyaWMuXG4gIDM0Olx0XG4gIDM1Olx0aWYgUFBQXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIFBQUF9CU0RDT01QXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXCYjMzQ7XG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcbiAgNDE6XHRcdCAgdGhlIExaVyBjb21wcmVzc2lvbiBtZXRob2QgdG8gY29tcHJlc3MgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpc1xuICA0MjpcdFx0ICBzZW50IG92ZXIgdGhlIHdpcmUuIFRoZSBtYWNoaW5lIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rXG4gIDQzOlx0XHQgICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXG4gIDQ0Olx0XHQgIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gRXZlbiBpZiB0aGV5IGRvbiYjMzk7dCBzdXBwb3J0IGl0LFxuICA0NTpcdFx0ICBpdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuXG4gIDQ2Olx0XG4gIDQ3Olx0XHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFwmIzM0O1BQUCBEZWZsYXRlIGNvbXByZXNzaW9uXCYjMzQ7LFxuICA0ODpcdFx0ICBhYm92ZSkgaXMgcHJlZmVyYWJsZSB0byBCU0QtQ29tcHJlc3MsIGJlY2F1c2UgaXQgY29tcHJlc3NlcyBiZXR0ZXJcbiAgNDk6XHRcdCAgYW5kIGlzIHBhdGVudC1mcmVlLlxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0dXAgYW5kIEkgc2VlIHRoYXQgYFBQUE9BVE1gIGlzIG5lc3RlZCByaWdodCBpbnNpZGUgYGlmIFBQUGAsIHdoaWNoIHRoZW4gaW5jbHVkZXMgYGNvbmZpZyBQUFBPQVRNYC4gQ2xlYXJseSwgYFBQUE9BVE1gIGlzIGRlcGVuZGVudCBvbiBgUFBQYCDigJMgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBvbmUuIEFuZCwgYnkgZXh0ZW5zaW9uLCBpdCBhbHNvIG5lZWRzIGBBVE1gLCBzaW5jZSBpdCYjMzk7cyAmIzM0O1BQUG9BKipUTSoqJiMzNDsuIFdlIGFsbCBrbm93IHRoaXMsIGJ1dCBsZXQmIzM5O3MgYmUgdGhvcm91Z2guCgpNeSBuZXh0IHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMsIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0sIHRoYXQgSSBtaWdodCBiZSBtaXNzaW5nIGZvciBlaXRoZXIgYFBQUGAgb3IgYEFUTWA/IEkgbmVlZCB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgaGVyZS4KClNvLCBJ4oCZbSBkaWdnaW5nIGludG8gdGhlIHNvdXJjZS4gSW4gYGRyaXZlcnMvbmV0L0tjb25maWdgLCBob3cgaXMgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFBQUCBpbXBsZW1lbnRhdGlvbiAoYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCkgYmVpbmcgc291cmNlZD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSBjaGFpbiBiYWNrIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgc3VidGxlIHRoYXQgY291bGQgaW1wYWN0IG15IHdvcmsuIExldCYjMzk7cyBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIGFyb3VuZCBsaW5lIDUyOC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIG9wdGlvbiByZXNpZGVzLiBUaW1lIHRvIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGRlcGVuZGVuY2llcyBhcmUgaGlkaW5nIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTU6XHRcbiA1MTY6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcJiMzNDtcbiA1MTc6XHRcbiA1MTg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvY2FuL0tjb25maWdcJiMzNDtcbiA1MTk6XHRcbiA1MjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG4gNTIxOlx0XG4gNTIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wmIzM0O1xuIDUyMzpcdFxuIDUyNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1wmIzM0O1xuIDUyNTpcdFxuIDUyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbiA1Mjc6XHRcbiA1Mjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWdcJiMzNDtcbiA1Mjk6XHRcbiA1MzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCYjMzQ7XG4gNTMxOlx0XG4gNTMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuIDUzMzpcdFxuIDUzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuIDUzNTpcdFxuIDUzNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG4gNTM3Olx0XG4gNTM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnXCYjMzQ7XG4gNTM5Olx0XG4gNTQwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wmIzM0O1xuIDU0MTpcdFxuIDU0MjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93d2FuL0tjb25maWdcJiMzNDtcbiA1NDM6XHRcbiA1NDQ6XHRjb25maWcgWEVOX05FVERFVl9GUk9OVEVORFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgTkVUREVWSUNFU2Agb3B0aW9uIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHNwb3QgZm9yIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYE5FVERFVklDRVNgIG5lc3RlZCB3aXRoaW4gYSBgbWVudWNvbmZpZyBORVRERVZJQ0VTYCBibG9jaywgd2hpY2ggbGlrZWx5IGRlcGVuZHMgb24gdGhlIGJyb2FkZXIgYE5FVGAgZmVhdHVyZS4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBORVRfQVRNYCAvIGBBVE1gIGFyZSBjb25maWd1cmVkIGluIHRoZSBgbmV0L0tjb25maWdgIGZpbGUsIGFzIEFUTSBpcyBhbm90aGVyIHBpZWNlIG9mIHRoZSBuZXR3b3JraW5nIHB1enpsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNTY9c291cmNlIFwmIzM0O25ldC90aXBjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1Nzpzb3VyY2UgXCYjMzQ7bmV0L2F0bS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNTgtc291cmNlIFwmIzM0O25ldC9sMnRwL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQVRNL1BQUE9BVE0gQ29uZmlndXJhdGlvbiBhbmQgSU9DVEwgSGFuZGxlcnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQVRNYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvYXRtL0tjb25maWdgLiBMaW5lIDYgc2hvd3MgdGhhdCBgQVRNYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgUFBQT0FUTWAuIFRoZSBjb25maWd1cmF0aW9uIHNuaXBwZXQgcmV2ZWFscyBpdCYjMzk7cyBkaXJlY3RseSBkZXBlbmRlbnQgb24gYEFUTWAgYW5kIG5lc3RlZCB3aXRoaW4gYW4gYGlmIFBQUGAgYmxvY2suIFRoaXMgY29uZmlybXMgdGhlIGRlcGVuZGVuY2llczogYEFUTWAsIGBQUFBgLCBgUFBQT0FUTWAsIGFuZCwgYnkgZXh0ZW5zaW9uLCBgTkVUREVWSUNFU2AgYW5kIGBORVRgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIGEgcHJvcGVyIGNvbmZpZ3VyYXRpb24uCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBwcHBvYXRtX2lvY3RsYCBhbmQgYHBwcG9hdG1fYXNzaWduX3ZjY2AgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGFuZCBpZiB0aGV5JiMzOTtyZSBleHBvcnRlZC9yZWFjaGFibGUuIExvb2tpbmcgYXQgYHBwcG9hdG0uY2AsIEkgc2VlIGByZWdpc3Rlcl9hdG1faW9jdGwoJmFtcDtwcHBvYXRtX2lvY3RsX29wcylgIHJlZ2lzdGVycyB0aGUgYHBwcG9hdG1faW9jdGxgIGhhbmRsZXIgd2l0aCB0aGUgQVRNIHN1YnN5c3RlbS4gVGhhdCBtZWFucyBgcHBwb2F0bV9pb2N0bGAgd2lsbCBiZSBpbnZva2VkIHdoZW4gYW4gQVRNIHNvY2tldCB1c2VzIGFuIGlvY3RsLiBTcGVjaWZpY2FsbHksIHdoZW4gYW4gQVRNIHNvY2tldCBpc3N1ZXMgdGhlIGBBVE1fU0VUQkFDS0VORGAgaW9jdGwsIGBkb192Y2NfaW9jdGxgIGluIGBuZXQvYXRtL2lvY3RsLmNgIHRha2VzIG92ZXIgYW5kIHRoZW4gZGlzcGF0Y2hlcyB0aGUgcmVxdWVzdCB0byByZWdpc3RlcmVkIEFUTSBpb2N0bHMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgbmV0L2F0bS9pb2N0bC5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpb2N0bCBoYW5kbGluZyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0RVhQT1JUX1NZTUJPTChkZXJlZ2lzdGVyX2F0bV9pb2N0bCk7XG4gIDQyOlx0XG4gIDQzOlx0c3RhdGljIGludCBkb192Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbiAgNDQ6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFyZywgaW50IGNvbXBhdClcbiAgNDU6XHR7XG4gIDQ2Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuICA0NzpcdFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiAgNDg6XHRcdGludCBlcnJvcjtcbiAgNDk6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcztcbiAgNTA6XHRcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuICA1MTpcdFx0dm9pZCBfX3VzZXIgKmJ1ZjtcbiAgNTI6XHRcdGludCBfX3VzZXIgKmxlbjtcbiAgNTM6XHRcbiAgNTQ6XHRcdHZjYyA9IEFUTV9TRChzb2NrKTtcbiAgNTU6XHRcdHN3aXRjaCAoY21kKSB7XG4gIDU2Olx0XHRjYXNlIFNJT0NPVVRROlxuICA1NzpcdFx0XHRpZiAoc29jay1cdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQgfHxcbiAgNTg6XHRcdFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAgNTk6XHRcdFx0XHRlcnJvciA9ICAtRUlOVkFMO1xuICA2MDpcdFx0XHRcdGdvdG8gZG9uZTtcbiAgNjE6XHRcdFx0fVxuICA2MjpcdFx0XHRlcnJvciA9IHB1dF91c2VyKHNrLVx1MDAzZXNrX3NuZGJ1ZiAtIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSxcbiAgNjM6XHRcdFx0XHRcdCAoaW50IF9fdXNlciAqKWFyZ3ApO1xuICA2NDpcdFx0XHRnb3RvIGRvbmU7XG4gIDY1Olx0XHRjYXNlIFNJT0NJTlE6XG4gIDY2Olx0XHR7XG4gIDY3Olx0XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDY4Olx0XHRcdGludCBhbW91bnQ7XG4gIDY5Olx0XG4gIDcwOlx0XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRCkge1xuICA3MTpcdFx0XHRcdGVycm9yID0gLUVJTlZBTDtcbiAgNzI6XHRcdFx0XHRnb3RvIGRvbmU7XG4gIDczOlx0XHRcdH1cbiAgNzQ6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuICA3NTpcdFx0XHRza2IgPSBza2JfcGVlayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiAgNzY6XHRcdFx0YW1vdW50ID0gc2tiID8gc2tiLVx1MDAzZWxlbiA6IDA7XG4gIDc3Olx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuICA3ODpcdFx0XHRlcnJvciA9IHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmdwKTtcbiAgNzk6XHRcdFx0Z290byBkb25lO1xuICA4MDpcdFx0fVxuICA4MTpcdFx0Y2FzZSBBVE1fU0VUU0M6XG4gIDgyOlx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O0FUTV9TRVRTQyBpcyBvYnNvbGV0ZTsgdXNlZCBieSAlczolZFxcblwmIzM0OyxcbiAgODM6XHRcdFx0XHRcdCAgICAgY3VycmVudC1cdTAwM2Vjb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XG4gIDg0Olx0XHRcdGVycm9yID0gMDtcbiAgODU6XHRcdFx0Z290byBkb25lO1xuICA4NjpcdFx0Y2FzZSBBVE1fU0VUQkFDS0VORDpcbiAgODc6XHRcdGNhc2UgQVRNX05FV0JBQ0tFTkRJRjpcbiAgODg6XHRcdHtcbiAgODk6XHRcdFx0YXRtX2JhY2tlbmRfdCBiYWNrZW5kO1xuICA5MDpcdFx0XHRlcnJvciA9IGdldF91c2VyKGJhY2tlbmQsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKWFyZ3ApO1xuICA5MTpcdFx0XHRpZiAoZXJyb3IpXG4gIDkyOlx0XHRcdFx0Z290byBkb25lO1xuICA5MzpcdFx0XHRzd2l0Y2ggKGJhY2tlbmQpIHtcbiAgOTQ6XHRcdFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XG4gIDk1Olx0XHRcdFx0cmVxdWVzdF9tb2R1bGUoXCYjMzQ7cHBwb2F0bVwmIzM0Oyk7XG4gIDk2Olx0XHRcdFx0YnJlYWs7XG4gIDk3Olx0XHRcdGNhc2UgQVRNX0JBQ0tFTkRfQlIyNjg0OlxuICA5ODpcdFx0XHRcdHJlcXVlc3RfbW9kdWxlKFwmIzM0O2JyMjY4NFwmIzM0Oyk7XG4gIDk5Olx0XHRcdFx0YnJlYWs7XG4gMTAwOlx0XHRcdH1cbiAxMDE6XHRcdFx0YnJlYWs7XG4gMTAyOlx0XHR9XG4gMTAzOlx0XHR9XG4gMTA0Olx0XG4gMTA1Olx0XHRlcnJvciA9IC1FTk9JT0NUTENNRDtcbiAxMDY6XHRcbiAxMDc6XHRcdG11dGV4X2xvY2soXHUwMDI2aW9jdGxfbXV0ZXgpO1xuIDEwODpcdFx0bGlzdF9mb3JfZWFjaChwb3MsIFx1MDAyNmlvY3RsX2xpc3QpIHtcbiAxMDk6XHRcdFx0c3RydWN0IGF0bV9pb2N0bCAqaWMgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGF0bV9pb2N0bCwgbGlzdCk7XG4gMTEwOlx0XHRcdGlmICh0cnlfbW9kdWxlX2dldChpYy1cdTAwM2Vvd25lcikpIHtcbiAxMTE6XHRcdFx0XHRlcnJvciA9IGljLVx1MDAzZWlvY3RsKHNvY2ssIGNtZCwgYXJnKTtcbiAxMTI6XHRcdFx0XHRtb2R1bGVfcHV0KGljLVx1MDAzZW93bmVyKTtcbiAxMTM6XHRcdFx0XHRpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKVxuIDExNDpcdFx0XHRcdFx0YnJlYWs7XG4gMTE1Olx0XHRcdH1cbiAxMTY6XHRcdH1cbiAxMTc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZpb2N0bF9tdXRleCk7XG4gMTE4Olx0XG4gMTE5Olx0XHRpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ2NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUG9BVE0gSU9DVEwgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgSU9DVEwgY2FsbHMgYXJlIGhhbmRsZWQgZm9yIFBQUG9BVE0uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBkb192Y2NfaW9jdGxgIGlzIHRoZSBrZXkgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbiBgaW9jdGxfbGlzdGAgYW5kIGNhbGxzIGBpYy0mZ3Q7aW9jdGxgLCB3aGljaCwgaW4gdGhpcyBjYXNlLCBpcyBnb2luZyB0byBiZSBgcHBwb2F0bV9pb2N0bGAuIFRoYXTigJlzIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZm9jdXMgb24uCgpOb3csIGBwcHBvYXRtX2lvY3RsYCB1bHRpbWF0ZWx5IGNhbGxzIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNhbGwgY2hhaW4uIEkmIzM5O3ZlIGFscmVhZHkgY29uZmlybWVkIHRoYXQgYHBwcG9hdG1fYXNzaWduX3ZjY2AgaXMgc3RhdGljIGFuZCBsb2NhbCB3aXRoaW4gYHBwcG9hdG0uY2AsIHNvIEkmIzM5O20gbm90IG92ZXJseSBjb25jZXJuZWQgd2l0aCBpdCYjMzk7cyBzY29wZSwgZm9yIHRoZSBtb21lbnQuIEJ1dCBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGJ5IHZlcmlmeWluZyB0aGUgb3RoZXIgc3ltYm9scyBpbiBgcHBwb2F0bS5jYCBsaWtlIGBwcHBvYXRtX2lvY3RsYCwgYHBwcG9hdG1faW5pdGAsIGFuZCBgcHBwb2F0bV9zZW5kYCAtIGFyZSB0aGV5IHN0YXRpYywgb3IgYXJlIHRoZXkgZXhwb3J0ZWQ/IEFyZSB0aGVyZSBhbnkgdGhhdCBhcmUgbm9uLWlubGluZWQ/IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBvdGhlciBwb3RlbnRpYWxseSByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGB2Y2NfaW9jdGxgIGluIGBuZXQvYXRtL2lvY3RsLmNgLCBhcyB3ZWxsLCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyZmFjZS4KClRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGluZ3MsIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gY2hlY2tpbmcgdGhlIGV4cG9ydGVkIGFuZCBwdWJsaWMgc3ltYm9scyBpbiBib3RoIGBuZXQvYXRtL2lvY3RsLmNgIGFuZCBgcHBwb2F0bS5jYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgdGllZCB0b2dldGhlci4gVGhpcyB3aWxsIGhlbHAgY2xhcmlmeSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjY19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uaD0yMD1fX3BvbGxfdCB2Y2NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdCk7XG5uZXQvYXRtL2NvbW1vbi5oOjIxOmludCB2Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xubmV0L2F0bS9jb21tb24uaC0yMi1pbnQgdmNjX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4tLVxubmV0L2F0bS9pb2N0bC5jPTQxPUVYUE9SVF9TWU1CT0woZGVyZWdpc3Rlcl9hdG1faW9jdGwpO1xubmV0L2F0bS9pb2N0bC5jLTQyLVxubmV0L2F0bS9pb2N0bC5jOjQzOnN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG5uZXQvYXRtL2lvY3RsLmMtNDQtXHRcdFx0dW5zaWduZWQgbG9uZyBhcmcsIGludCBjb21wYXQpXG4tLVxubmV0L2F0bS9pb2N0bC5jLTE2OS1cbm5ldC9hdG0vaW9jdGwuYzoxNzA6aW50IHZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbm5ldC9hdG0vaW9jdGwuYy0xNzEte1xubmV0L2F0bS9pb2N0bC5jOjE3MjpcdHJldHVybiBkb192Y2NfaW9jdGwoc29jaywgY21kLCBhcmcsIDApO1xubmV0L2F0bS9pb2N0bC5jLTE3My19XG4tLVxubmV0L2F0bS9pb2N0bC5jPTI4Mj1pbnQgdmNjX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vaW9jdGwuYy0yODYtXG5uZXQvYXRtL2lvY3RsLmM6Mjg3Olx0cmV0ID0gZG9fdmNjX2lvY3RsKHNvY2ssIGNtZCwgYXJnLCAxKTtcbm5ldC9hdG0vaW9jdGwuYy0yODgtXHRpZiAocmV0ICE9IC1FTk9JT0NUTENNRClcbi0tXG5uZXQvYXRtL3B2Yy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwdmNfcHJvdG9fb3BzID0ge1xuLS1cbm5ldC9hdG0vcHZjLmMtMTE2LVx0LnBvbGwgPVx0XHR2Y2NfcG9sbCxcbm5ldC9hdG0vcHZjLmM6MTE3Olx0LmlvY3RsID1cdHZjY19pb2N0bCxcbm5ldC9hdG0vcHZjLmMtMTE4LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTE2CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDcyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQVRNIFBQUG9BVE0gaW9jdGwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQgd2l0aGluIHRoZSBBVE0vUFBQb0FUTSBzdWJzeXN0ZW0uIFdlJiMzOTtyZSBsb29raW5nIGF0IGB2Y2NfaW9jdGxgIGFuZCBgdmNjX2NvbXBhdF9pb2N0bGAgaW4gYG5ldC9hdG0vaW9jdGwuY2AsIGJ1dCB0aGUgcmVhbCBpbnRlcmVzdCBsaWVzIGluIGBwcHBvYXRtLmNgLiBXZSBoYXZlIGBwcHBvYXRtX2lvY3RsYCwgd2hpY2ggZ2V0cyBhc3NpZ25lZCB0byB0aGUgYHBwcG9hdG1faW9jdGxfb3BzLmlvY3RsYCBzdHJ1Y3R1cmUgYW5kIGNydWNpYWxseSwgc2luY2UgdGhpcyBmdW5jdGlvbiYjMzk7cyBhZGRyZXNzIGlzIHRha2VuLCBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhpcyBtZWFucyB3ZSYjMzk7bGwgZGVmaW5pdGVseSBzZWUgaXQgYXMgYSBzeW1ib2wuIFRoZW4gd2UgaGF2ZSBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcG9hdG1fcHVzaGAsIGBwcHBvYXRtX3BvcGAsIGFuZCBgcHBwb2F0bV9yZWxlYXNlX2NiYCB3aXRoaW4gdGhhdCBmaWxlLCB0aG91Z2ggYHBwcG9hdG1faW9jdGxgIGFuZCBgdmNjX2lvY3RsYCBhcmUgb3VyIHByaW1hcnkgZm9jdXMuIGB2Y2NfaW9jdGxgIGlzIHNwZWNpZmljYWxseSB0aGUgbWFpbiBpb2N0bCBlbnRyeXBvaW50IGhlcmUuCgpOb3csIGlzIHRoaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oz8gTGV0JiMzOTtzIGV2YWx1YXRlLiBGaXJzdCwgaXQmIzM5O3Mgbm90IHB1cmVseSBkZWNvcmF0aXZlLiBUaGVyZSYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gdGhlcmUgKGBpZiAoYXRtdmNjLSZndDt1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgdGhhdCBwcmV2ZW50cyBkb3VibGUtYXNzaWdubWVudCBvZiBgdXNlcl9iYWNrYCwgc28gdGhlcmUmIzM5O3Mgc3RhdGVmdWwgbG9naWMgYXQgcGxheS4gU2Vjb25kLCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgdGllZCB0byBzcGVjaWZpYyB2ZW5kb3Igb3IgcGh5c2ljYWwgaGFyZHdhcmU7IHRoZXNlIEFUTSBzb2NrZXRzIGFuZCBQUFBvQVRNIGNoYW5uZWxzIGNhbiBiZSBtYWRlIGluIHVzZXJzcGFjZSwgdmlhIHN0YW5kYXJkIHNvY2tldCBjYWxscy4gVGhpcmQsIGl0JiMzOTtzIG5vdCBzaW1wbHkgYSBzaHV0ZG93bi9yZW1vdmUgcGF0aC4gQW5kIGZvdXJ0aCwgY3JpdGljYWxseSwgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBgaW9jdGwoZmQsIEFUTV9TRVRCQUNLRU5ELCAmYW1wO2FyZylgIG9uIGFuIEFUTSBzb2NrZXQuIEJpbmdvLiBXb3J0aEZ1enppbmcgPSBUcnVlLgoKV2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQuIGBBVE1gLCBgUFBQYCwgYW5kIGBQUFBPQVRNYCBhcmUgbmVjZXNzYXJ5LiBMb29raW5nIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMsIGBBVE1gIGlzIHNvdXJjZWQgZnJvbSBgbmV0L2F0bS9LY29uZmlnYCBhbmQgZGVwZW5kcyBvbiBgTkVUYCwgd2hpY2ggaXMgc3RhbmRhcmQuIGBQUFBgIGlzIGluIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgYW5kIGRlcGVuZHMgb24gYE5FVERFVklDRVNgLCBhbmQgYFBQUE9BVE1gIGFsc28gZGVwZW5kcyBvbiBib3RoIGBQUFBgIGFuZCBgQVRNYC4gUFBQIGFsc28gc2VsZWN0cyBgU0xIQ2AuIEZpbmFsbHksIGBQUFBPQVRNYCBhbHNvIGRlcGVuZHMgb24gYEFUTWAgaW5zaWRlIGBpZiBQUFBgLiBDb25maXJtZWQsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyLgoKTGV0JiMzOTtzIHJlZmluZSB0aGUgc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvbi4gV2Uga25vdyBgcHBwb2F0bV9pb2N0bGAgYW5kIGB2Y2NfaW9jdGxgIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSB0aGV5IGFyZSB0aGUgZXhwb3NlZCBpb2N0bCBoYW5kbGVycy4gYHBwcG9hdG1fYXNzaWduX3ZjY2AgaXMgc3RhdGljIGFuZCBjYWxsZWQgYnkgYHBwcG9hdG1faW9jdGxgLiBDb21waWxlciBpbmxpbmluZyBjb3VsZCBmb2xkIGl0IGludG8gYHBwcG9hdG1faW9jdGxgLiBBZGRpbmcgaXQgYXMgYSBzeW1ib2wgbWFrZXMgc2Vuc2UuCgpPa2F5LCBxdWljayBzdW1tYXJ5IGFuZCBmaW5hbCBzYW5pdHkgY2hlY2s6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUuKioKKiAgICoqRW5hYmxlQ29uZmlnczogXFvigJxBVE3igJ0sIOKAnFBQUOKAnSwg4oCcUFBQT0FUTeKAnV0uKioKKiAgICoqRm9jdXNTeW1ib2xzOiBcW+KAnHBwcG9hdG1cX2lvY3Rs4oCdLCDigJxwcHBvYXRtXF9hc3NpZ25cX3ZjY+KAnSwg4oCcdmNjXF9pb2N0bOKAnV0uKioKKiAgICoqUmVhc29uaW5nOioqIElkZW50aWZpZWQgYHBwcG9hdG1faW9jdGxgIGFuZCBgdmNjX2lvY3RsYCBhcyByZWFjaGFibGUgaW9jdGwgZW50cnlwb2ludHMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBvZiBBVE0vUFBQb0FUTS4gVGhlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGZ1bmN0aW9uIGlzIHN0YXRpYywgd2hpY2ggbWF5IGJlIGlubGluZWQgaW50byBgcHBwb2F0bV9pb2N0bGAsIGJ1dCBpbmNsdWRpbmcgaXQgaGVyZSBpbmNyZWFzZXMgY292ZXJhZ2UuCgpXZSYjMzk7cmUgZ29vZCB0byBnby4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1faW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9hc3NpZ25fdmNjJiMzNDssCiAgICAmIzM0O3ZjY19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHBwb2F0bV9hc3NpZ25fdmNjKCkgZW5zdXJpbmcgdGhhdCBhbiBBVE0gVkNDIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIGJhY2tlbmQvdXNlcl9iYWNrIGFzc2lnbmVkIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBhdHRhY2hpbmcgYSBuZXcgcHBwb2F0bV92Y2MsIHByZXZlbnRpbmcgcmVzb3VyY2UgbGVha3MgYW5kIHN0YXRlIGNvcnJ1cHRpb24gd2hlbiByZS1hc3NpZ25pbmcgYmFja2VuZHMgb24gdGhlIHNhbWUgc29ja2V0IHZpYSBBVE1fU0VUQkFDS0VORCBpb2N0bC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQVRNIHNvY2tldCBpb2N0bHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUE9BVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBvYXRtX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7LAogICAgJiMzNDt2Y2NfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHBwcG9hdG1fYXNzaWduX3ZjYygpIGVuc3VyaW5nIHRoYXQgYW4gQVRNIFZDQyBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBiYWNrZW5kL3VzZXJfYmFjayBhc3NpZ25lZCBiZWZvcmUgYWxsb2NhdGluZyBhbmQgYXR0YWNoaW5nIGEgbmV3IHBwcG9hdG1fdmNjLCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIGFuZCBzdGF0ZSBjb3JydXB0aW9uIHdoZW4gcmUtYXNzaWduaW5nIGJhY2tlbmRzIG9uIHRoZSBzYW1lIHNvY2tldCB2aWEgQVRNX1NFVEJBQ0tFTkQgaW9jdGwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFUTSBzb2NrZXQgaW9jdGxzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI3ODIzMTZjM2RmNTVhYWQ4NTcxYTQ4MDdlM2U2MGFiODIwNDkwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTY6MTU6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jCmluZGV4IDZkYTUyZDEyZGY2OGUuLjkzYmEyMmY0MzdiYzkgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcHBwb2F0bS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9hdG0vcHBwb2F0bS5jCkBAIC0zOTYsNiAmIzQzOzM5Niw4IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpCiAJaWYgKGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUICZhbXA7JmFtcDsKIAkgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDICZhbXA7JmFtcDsgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0xMQykKIAkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChhdG12Y2MtJmd0O3VzZXJfYmFjaykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiAJcHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTsKIAlpZiAocHZjYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFBvQVRNIFZDQyBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9hdG0vcHBwb2F0bS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcHBwb2F0bV9hc3NpZ25fdmNjYCBmdW5jdGlvbi4gUmlnaHQgYXdheSwgSSBzZWUgdGhlIGRpZmYuIEl0JiMzOTtzIGFkZGluZyBhIGNoZWNrLCBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFzc2lnbmluZyBhIHZpcnR1YWwgY2lyY3VpdCBjb25uZWN0aW9uIChWQ0MpIHdpdGhpbiB0aGUgUFBQb0FUTSBjb250ZXh0LgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUsIGFyb3VuZCBsaW5lIDM5Niwgc3RhcnRzIHdpdGggdmFsaWRhdGlvbiBvZiB0aGUgZW5jYXBzdWxhdGlvbiB0eXBlIChgYmUuZW5jYXBzYCkuICBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGVuc3VyaW5nIHRoZSBlbmNhcHN1bGF0aW9uIGlzIGVpdGhlciBhdXRvLWRldGVjdGVkLCBvciBleHBsaWNpdGx5IHNldCB0byBWQyAoVmlydHVhbCBDaXJjdWl0KSBvciBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKS4gTWFrZXMgc2Vuc2UsIHN0YW5kYXJkIFBQUG9BVE0gc3R1ZmYuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgaWYgKGF0bXZjYy0mZ3Q7dXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2AuIFRoYXQmIzM5O3MgdGhlIGtleSBhZGRpdGlvbi4KClNvLCAqdGhpcyogaXMgdGhlIGNoYW5nZS4gIFRoZSBmdW5jdGlvbiBpcyBub3cgY2hlY2tpbmcgaWYgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBpcyBzZXQuIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBwcmV2ZW50IHJlLWFzc2lnbm1lbnQgb3IgY29uZmxpY3QgaWYgYSB1c2VyLXNwYWNlIGNvbXBvbmVudCBpcyBhbHJlYWR5IHVzaW5nIHRoZSBWQ0MuIEEgYnVzeSBzaWduYWwgaXMgcmV0dXJuZWQgdG8gaW5kaWNhdGUgdGhlIFZDQyBpcyBhbHJlYWR5IGluIHVzZSwgZWZmZWN0aXZlbHkgcHJldmVudGluZyBtdWx0aXBsZSB1c2VycyBmcm9tIHN0ZXBwaW5nIG9uIGVhY2ggb3RoZXIuIEdpdmVuIHRoZSBzdHJ1Y3R1cmUsIEkgY2FuIHJlYXNvbmFibHkgaW5mZXIgdGhhdCBgYXRtdmNjLSZndDt1c2VyX2JhY2tgIGxpa2VseSBwb2ludHMgdG8gc29tZSBkYXRhIG9yIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggYSB1c2VyLXNwYWNlIGVudGl0eSB0aGF0IGhhcyBhbHJlYWR5IGNsYWltZWQgdGhlIFZDQy4gSSYjMzk7bGwgbmVlZCB0byBnbyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljYWxseSB1c2VyX2JhY2sgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQuIEJ1dCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBjbGVhciAtIGEgc2ltcGxlLCBidXQgaW1wb3J0YW50LCBjaGVjayBmb3IgcmVzb3VyY2UgY29udGVudGlvbi4gR29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XHRyZXR1cm4gLUVOT1RUWTtcbiAzODE6XHR9XG4gMzgyOlx0XG4gMzgzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG4gMzg0Olx0XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbiAzODU6XHRcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxuIDM4NjpcdH07XG4gMzg3Olx0XG4gMzg4Olx0c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiAzODk6XHR7XG4gMzkwOlx0XHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xuIDM5MTpcdFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xuIDM5MjpcdFx0aW50IGVycjtcbiAzOTM6XHRcbiAzOTQ6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxuIDM5NTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzOTY6XHRcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiAzOTc6XHRcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gMzk4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM5OTpcdFx0aWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spXG4gNDAwOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNDAxOlx0XHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xuIDQwMjpcdFx0aWYgKHB2Y2MgPT0gTlVMTClcbiA0MDM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDA0Olx0XHRwdmNjLVx1MDAzZWF0bXZjYyA9IGF0bXZjYztcbiA0MDU6XHRcbiA0MDY6XHRcdC8qIE1heGltdW0gaXMgemVybywgc28gdGhhdCB3ZSBjYW4gdXNlIGF0b21pY19pbmNfbm90X3plcm8oKSAqL1xuIDQwNzpcdFx0YXRvbWljX3NldChcdTAwMjZwdmNjLVx1MDAzZWluZmxpZ2h0LCBOT05FX0lORkxJR0hUKTtcbiA0MDg6XHRcdHB2Y2MtXHUwMDNlb2xkX3B1c2ggPSBhdG12Y2MtXHUwMDNlcHVzaDtcbiA0MDk6XHRcdHB2Y2MtXHUwMDNlb2xkX3BvcCA9IGF0bXZjYy1cdTAwM2Vwb3A7XG4gNDEwOlx0XHRwdmNjLVx1MDAzZW9sZF9vd25lciA9IGF0bXZjYy1cdTAwM2Vvd25lcjtcbiA0MTE6XHRcdHB2Y2MtXHUwMDNlb2xkX3JlbGVhc2VfY2IgPSBhdG12Y2MtXHUwMDNlcmVsZWFzZV9jYjtcbiA0MTI6XHRcdHB2Y2MtXHUwMDNlZW5jYXBzID0gKGVudW0gcHBwb2F0bV9lbmNhcHMpIGJlLmVuY2FwcztcbiA0MTM6XHRcdHB2Y2MtXHUwMDNlY2hhbi5wcml2YXRlID0gcHZjYztcbiA0MTQ6XHRcdHB2Y2MtXHUwMDNlY2hhbi5vcHMgPSBcdTAwMjZwcHBvYXRtX29wcztcbiA0MTU6XHRcdHB2Y2MtXHUwMDNlY2hhbi5tdHUgPSBhdG12Y2MtXHUwMDNlcW9zLnR4dHAubWF4X3NkdSAtIFBQUF9IRFJMRU4gLVxuIDQxNjpcdFx0ICAgIChiZS5lbmNhcHMgPT0gZV92YyA/IDAgOiBMTENfTEVOKTtcbiA0MTc6XHRcdHRhc2tsZXRfc2V0dXAoXHUwMDI2cHZjYy1cdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcbiA0MTg6XHRcdGVyciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKFx1MDAyNnB2Y2MtXHUwMDNlY2hhbik7XG4gNDE5Olx0XHRpZiAoZXJyICE9IDApIHtcbiA0MjA6XHRcdFx0a2ZyZWUocHZjYyk7XG4gNDIxOlx0XHRcdHJldHVybiBlcnI7XG4gNDIyOlx0XHR9XG4gNDIzOlx0XHRhdG12Y2MtXHUwMDNldXNlcl9iYWNrID0gcHZjYztcbiA0MjQ6XHRcdGF0bXZjYy1cdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xuIDQyNTpcdFx0YXRtdmNjLVx1MDAzZXBvcCA9IHBwcG9hdG1fcG9wO1xuIDQyNjpcdFx0YXRtdmNjLVx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XG4gNDI3Olx0XHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xuIDQyODpcdFx0YXRtdmNjLVx1MDAzZW93bmVyID0gVEhJU19NT0RVTEU7XG4gNDI5Olx0XG4gNDMwOlx0XHQvKiByZS1wcm9jZXNzIGV2ZXJ5dGhpbmcgcmVjZWl2ZWQgYmV0d2VlbiBjb25uZWN0aW9uIHNldHVwIGFuZFxuIDQzMTpcdFx0ICAgYmFja2VuZCBzZXR1cCAqL1xuIDQzMjpcdFx0dmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShhdG12Y2MpO1xuIDQzMzpcdFx0cmV0dXJuIDA7XG4gNDM0Olx0fVxuIDQzNTpcdFxuIDQzNjpcdC8qXG4gNDM3Olx0ICogVGhpcyBoYW5kbGVzIGlvY3RscyBhY3R1YWxseSBwZXJmb3JtZWQgb24gb3VyIHZjYyAtIHdlIG11c3QgcmV0dXJuXG4gNDM4Olx0ICogLUVOT0lPQ1RMQ01EIGZvciBhbnkgdW5yZWNvZ25pemVkIGlvY3RsXG4gNDM5Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBQUCBvdmVyIEFUTSBWQ0MgQXNzaWdubWVudCBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB0aHJvdWdoIGFuIGBpb2N0bGAgb3BlcmF0aW9uIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBBVE0gYW5kIFBQUCBiYWNrZW5kcy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGJlZm9yZSB0aGlzIHBhdGNoLCB3YXMgdGhhdCBgcHBwb2F0bV9hc3NpZ25fdmNjYCB3b3VsZCBibGluZGx5IHJlLWFsbG9jYXRlIHJlc291cmNlcyBmb3IgYW4gYWxyZWFkeSBjb25maWd1cmVkIGBhdG12Y2NgLiBUaGlzIG1lYW50IGEgbmV3IGBwdmNjYCB3YXMgY3JlYXRlZCwgb3ZlcndyaXRpbmcgY3JpdGljYWwgcG9pbnRlcnMgbGlrZSBgb2xkX3B1c2hgIGFuZCBgb2xkX3BvcGAgaW4gYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCB3aXRob3V0IGRlYWxsb2NhdGluZyB0aGUgb2xkIG9uZXMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIGdlbmVyYWwgc3RhdGUgY29ycnVwdGlvbiDigJMgYWxsIHByZXR0eSBuYXN0eSBzdHVmZi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2ltcGxlIGNoZWNrOiBgaWYgKGF0bXZjYy0mZ3Q7dXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2AuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgbm93IHByZXZlbnRpbmcgdGhlIHJlLWFzc2lnbm1lbnQgaWYgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBpcyBhbHJlYWR5IHBvcHVsYXRlZC4gU21hcnQgbW92ZS4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIHdpdGggYW55IHN1Y2ggcGF0Y2ggaXM6IGRvZXMgaXQgaW50cm9kdWNlICpuZXcqIHJpc2tzLCBldmVuIGFzIGl0IGZpeGVzIHRoZSBvbGQgb25lPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMuIFNvLCBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGVzZSBwb3NzaWJpbGl0aWVzOgoKKiAgICoqVW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB3ZSYjMzk7cmUgbm90IGNvcHlpbmcgYW55IHBvdGVudGlhbGx5IGdhcmJhZ2UgZGF0YSBpbnRvIHVzZXItYWNjZXNzaWJsZSBzcGFjZS4gVGhhdCYjMzk7cyBnb29kLgoqICAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIHRoZSBjb2RlIGlzIGNoZWNraW5nIGBhdG12Y2MtJmd0O3VzZXJfYmFja2AsIHdoaWNoIGlzIGEgcG9pbnRlciB3aXRoaW4gYSBgc3RydWN0IGF0bV92Y2NgLgoqICAgKipDaGFuZ2VzIHRvIGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3Rocz8qKiBObywgd2UgYXJlbiYjMzk7dCBtZXNzaW5nIHdpdGggYnVmZmVyIHNpemVzLiBUaGF0JiMzOTtzIGFub3RoZXIgYXJlYSB3aGVyZSB0aGluZ3MgY2FuIGdvIHdyb25nLgoqICAgKipLTVNBTi1zcGVjaWZpYyBpc3N1ZXM/KiogTm9wZSwgdGhpcyBvbmUgaXMgcHVyZWx5IGEgc2FmZWd1YXJkIGFnYWluc3QgYSBrbm93biBpc3N1ZSwgd2hpY2ggc2hvdWxkIGJlIGRldGVjdGFibGUgd2l0aCBLQVNBTi9LTUVNTEVBSy4KClRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgYXRtdmNjLSZndDt1c2VyX2JhY2tgIG1lbWJlciBpbiB0aGUgYG5ldC9hdG1gIGNvZGUuIEl0JiMzOTtzIHRpbWUgdG8gcnVuIGEgcXVpY2sgYGdyZXBgIGZvciBgdXNlcl9iYWNrYCB3aXRoaW4gdGhlIEFUTSBzdWJzeXN0ZW0gY29kZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIGluIG15IGluaXRpYWwgYXNzZXNzbWVudC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIHJlYWxseSBkb2VzIHdoYXQgaXQgc2F5cyBvbiB0aGUgdGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX2JhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vYnIyNjg0LmM9MTEzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGJyMjY4NF92Y2MgKkJSMjY4NF9WQ0MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vYnIyNjg0LmMtMTE0LXtcbm5ldC9hdG0vYnIyNjg0LmM6MTE1Olx0cmV0dXJuIChzdHJ1Y3QgYnIyNjg0X3ZjYyAqKShhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbm5ldC9hdG0vYnIyNjg0LmMtMTE2LX1cbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTQwOD1zdGF0aWMgdm9pZCBicjI2ODRfY2xvc2VfdmNjKHN0cnVjdCBicjI2ODRfdmNjICpicnZjYylcbi0tXG5uZXQvYXRtL2JyMjY4NC5jLTQxMy1cdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2ZGV2c19sb2NrKTtcbm5ldC9hdG0vYnIyNjg0LmM6NDE0Olx0YnJ2Y2MtXHUwMDNlYXRtdmNjLVx1MDAzZXVzZXJfYmFjayA9IE5VTEw7XHQvKiB3aGF0IGFib3V0IHZjYy1cdTAwM2VyZWN2cSA/Pz8gKi9cbm5ldC9hdG0vYnIyNjg0LmMtNDE1LVx0YnJ2Y2MtXHUwMDNlYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2IgPSBicnZjYy1cdTAwM2VvbGRfcmVsZWFzZV9jYjtcbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTUzMD1zdGF0aWMgaW50IGJyMjY4NF9yZWd2Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKiBhcmcpXG4tLVxubmV0L2F0bS9icjI2ODQuYy01ODktXHRicnZjYy1cdTAwM2VhdG12Y2MgPSBhdG12Y2M7XG5uZXQvYXRtL2JyMjY4NC5jOjU5MDpcdGF0bXZjYy1cdTAwM2V1c2VyX2JhY2sgPSBicnZjYztcbm5ldC9hdG0vYnIyNjg0LmMtNTkxLVx0YnJ2Y2MtXHUwMDNlZW5jYXBzID0gKGVudW0gYnIyNjg0X2VuY2FwcyliZS5lbmNhcHM7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmM9ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXG5uZXQvYXRtL3BwcG9hdG0uYy05MC17XG5uZXQvYXRtL3BwcG9hdG0uYzo5MTpcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTkyLX1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0xNjc9c3RhdGljIHZvaWQgcHBwb2F0bV91bmFzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzUtXHRwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKFx1MDAyNnB2Y2MtXHUwMDNlY2hhbik7XG5uZXQvYXRtL3BwcG9hdG0uYzoxNzY6XHRhdG12Y2MtXHUwMDNldXNlcl9iYWNrID0gTlVMTDtcbm5ldC9hdG0vcHBwb2F0bS5jLTE3Ny1cdGtmcmVlKHB2Y2MpO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTM4OD1zdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM5OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvYXRtL3BwcG9hdG0uYzozOTk6XHRpZiAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjaylcbm5ldC9hdG0vcHBwb2F0bS5jLTQwMC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MjItXHR9XG5uZXQvYXRtL3BwcG9hdG0uYzo0MjM6XHRhdG12Y2MtXHUwMDNldXNlcl9iYWNrID0gcHZjYztcbm5ldC9hdG0vcHBwb2F0bS5jLTQyNC1cdGF0bXZjYy1cdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTM3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipCUjI2ODQgUmVnaXN0cmF0aW9uICZhbXA7IFVzZXIgQmFjayBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbmV0L2F0bS9icjI2ODQuY2AuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYGJyMjY4NF9yZWd2Y2NgIGZ1bmN0aW9uIGlzIHdoZXJlIHdlIGhhbmRsZSB0aGUgcmVnaXN0cmF0aW9uIG9mIHZpcnR1YWwgY2lyY3VpdCBjb25uZWN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgaG93IGl0IGRlYWxzIHdpdGggdGhlIGBhdG12Y2MtJmd0O3VzZXJfYmFja2AgZmxhZy4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgdGhlcmXigJlzIGEgY2hlY2sgaW4gdGhlcmUsIHNvbWV0aGluZyBsaWtlIGBpZiAoYXRtdmNjLSZndDt1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCB0aGF04oCZcyBzdXBwb3NlZCB0byBwcmV2ZW50IGEgVkNDIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBpZiBpdCYjMzk7cyBjdXJyZW50bHkgbWFya2VkIGFzIGluIHVzZSBieSBhIHVzZXIuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBsb2dpYyBhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGl0LiBMZXQgbWUgZ28gYmFjayBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBpZiBJIHJlbWVtYmVyZWQgY29ycmVjdGx5LCBvciBub3QuIFRoZW4gSSYjMzk7bGwgaGF2ZSBhIGJldHRlciBwaWN0dXJlIG9mIHRoYXQgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9icjI2ODQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0c3RhdGljIGludCBicjI2ODRfcmVndmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICogYXJnKVxuIDUzMTpcdHtcbiA1MzI6XHRcdHN0cnVjdCBicjI2ODRfdmNjICpicnZjYztcbiA1MzM6XHRcdHN0cnVjdCBicjI2ODRfZGV2ICpicmRldjtcbiA1MzQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2O1xuIDUzNTpcdFx0c3RydWN0IGF0bV9iYWNrZW5kX2JyMjY4NCBiZTtcbiA1MzY6XHRcdGludCBlcnI7XG4gNTM3Olx0XG4gNTM4Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YmUsIGFyZywgc2l6ZW9mIGJlKSlcbiA1Mzk6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNTQwOlx0XHRicnZjYyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBicjI2ODRfdmNjKTtcbiA1NDE6XHRcdGlmICghYnJ2Y2MpXG4gNTQyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDU0MzpcdFx0LypcbiA1NDQ6XHRcdCAqIEFsbG93IHR3byBwYWNrZXRzIGluIHRoZSBBVE0gcXVldWUuIE9uZSBhY3R1YWxseSBiZWluZyBzZW50LCBhbmQgb25lXG4gNTQ1Olx0XHQgKiBmb3IgdGhlIEFUTSAmIzM5O1RYIGRvbmUmIzM5OyBoYW5kbGVyIHRvIHNlbmQuIEl0IHNob3VsZG4mIzM5O3QgdGFrZSBsb25nIHRvIGdldFxuIDU0NjpcdFx0ICogdGhlIG5leHQgb25lIGZyb20gdGhlIG5ldGRldiBxdWV1ZSwgd2hlbiB3ZSBuZWVkIGl0LiBNb3JlIHRoYW4gdGhhdFxuIDU0NzpcdFx0ICogd291bGQgYmUgYnVmZmVyYmxvYXQuXG4gNTQ4Olx0XHQgKi9cbiA1NDk6XHRcdGF0b21pY19zZXQoXHUwMDI2YnJ2Y2MtXHUwMDNlcXNwYWNlLCAyKTtcbiA1NTA6XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNmRldnNfbG9jayk7XG4gNTUxOlx0XHRuZXRfZGV2ID0gYnIyNjg0X2ZpbmRfZGV2KFx1MDAyNmJlLmlmc3BlYyk7XG4gNTUyOlx0XHRpZiAobmV0X2RldiA9PSBOVUxMKSB7XG4gNTUzOlx0XHRcdHByX2VycihcJiMzNDt0cmllZCB0byBhdHRhY2ggdG8gbm9uLWV4aXN0ZW50IGRldmljZVxcblwmIzM0Oyk7XG4gNTU0Olx0XHRcdGVyciA9IC1FTlhJTztcbiA1NTU6XHRcdFx0Z290byBlcnJvcjtcbiA1NTY6XHRcdH1cbiA1NTc6XHRcdGJyZGV2ID0gQlJQUklWKG5ldF9kZXYpO1xuIDU1ODpcdFx0aWYgKGF0bXZjYy1cdTAwM2VwdXNoID09IE5VTEwpIHtcbiA1NTk6XHRcdFx0ZXJyID0gLUVCQURGRDtcbiA1NjA6XHRcdFx0Z290byBlcnJvcjtcbiA1NjE6XHRcdH1cbiA1NjI6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZicmRldi1cdTAwM2VicnZjY3MpKSB7XG4gNTYzOlx0XHRcdC8qIE9ubHkgMSBWQ0MvZGV2IHJpZ2h0IG5vdyAqL1xuIDU2NDpcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIDU2NTpcdFx0XHRnb3RvIGVycm9yO1xuIDU2NjpcdFx0fVxuIDU2NzpcdFx0aWYgKGJlLmZjc19pbiAhPSBCUjI2ODRfRkNTSU5fTk8gfHxcbiA1Njg6XHRcdCAgICBiZS5mY3Nfb3V0ICE9IEJSMjY4NF9GQ1NPVVRfTk8gfHxcbiA1Njk6XHRcdCAgICBiZS5mY3NfYXV0byB8fCBiZS5oYXNfdnBpaWQgfHwgYmUuc2VuZF9wYWRkaW5nIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDIKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBJdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ6IHRoZXkmIzM5O3JlIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgcHBwb2F0bV9hc3NpZ25fdmNjKClgIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgYWNjaWRlbnRhbGx5IHJlLWF0dGFjaCBvciByZS1hc3NpZ24gYSBiYWNrZW5kIHRvIGFuIGBhdG1fdmNjYCB0aGF0IGFscmVhZHkgaGFzIG9uZS4gVGhlIGNvbmRpdGlvbiBpcyBzaW1wbGU6IGBpZiAoYXRtdmNjLSZndDt1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YC4gVGhpcyBwcmV2ZW50cyB0aGUgcHJvYmxlbWF0aWMgc2NlbmFyaW8gd2hlcmUgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBpc24mIzM5O3QgTlVMTC4KClJlZ2FyZGluZyBLTVNBTiB2cyBLQVNBTiwgdGhpcyBpcyBhIGxvZ2ljIGJ1Zywgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIFdlJiMzOTtyZSBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgYGF0bXZjYy0mZ3Q7dXNlcl9iYWNrYCBwb2ludGVyIGlzIGluaXRpYWxpemVkIGR1cmluZyBzb2NrZXQvVkNDIGFsbG9jYXRpb24uIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCByZS1hc3NpZ25pbmcgdGhlIGJhY2tlbmQgb3ZlcndyaXRlcyBjYWxsYmFja3MgYW5kIG90aGVyIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGF0bV92Y2NgIHdpdGhvdXQgcHJvcGVyIGNsZWFudXAsIGxlYWRpbmcgdG8gc3RhdGUgY29ycnVwdGlvbiBhbmQgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzLiBUaGlzIHNvdW5kcyBsaWtlIGFuIGFyZWEgd2hlcmUgS0FTQU4sIExPQ0tERVAsIGFuZCBLTUVNTEVBSyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGlzc3Vlcywgc28gd2UgZGVmaW5pdGVseSBkb24mIzM5O3QgbmVlZCBLTVNBTiBoZXJlLiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCkkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6MzUuMTYxODY1MTI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTQyNjE2NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUTVwiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBPQVRNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwb2F0bV9pb2N0bFwiLFxuICAgIFwicHBwb2F0bV9hc3NpZ25fdmNjXCIsXG4gICAgXCJ2Y2NfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2ApIGluIGBwcHBvYXRtX2Fzc2lnbl92Y2MoKWAgdG8gcHJldmVudCByZS1hc3NpZ25pbmcgYSBQUFBvQVRNIGJhY2tlbmQgdG8gYW4gQVRNIFZDQyB0aGF0IGFscmVhZHkgaGFzIGEgYmFja2VuZCBhdHRhY2hlZC4gVGhpcyBmaXhlcyBhIHN0YXRlIGNvcnJ1cHRpb24vcmVzb3VyY2UgbWFuYWdlbWVudCBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHBwcG9hdG1fYXNzaWduX3ZjYygpIGVuc3VyaW5nIHRoYXQgYW4gQVRNIFZDQyBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBiYWNrZW5kL3VzZXJfYmFjayBhc3NpZ25lZCBiZWZvcmUgYWxsb2NhdGluZyBhbmQgYXR0YWNoaW5nIGEgbmV3IHBwcG9hdG1fdmNjLCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIGFuZCBzdGF0ZSBjb3JydXB0aW9uIHdoZW4gcmUtYXNzaWduaW5nIGJhY2tlbmRzIG9uIHRoZSBzYW1lIHNvY2tldCB2aWEgQVRNX1NFVEJBQ0tFTkQgaW9jdGwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFUTSBzb2NrZXQgaW9jdGxzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6MzUuMTYxODcwMTMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3MDIxMDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTI3ODIzMTZjM2RmNTVhYWQ4NTcxYTQ4MDdlM2U2MGFiODIwNDkwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDE2OjE1OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi45M2JhMjJmNDM3YmM5IDEwMDY0NFxcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXFxuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5AQCAtMzk2LDYgKzM5Niw4IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuIFxcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFxcdTAwMjZcXHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdHB2Y2MgPSBremFsbG9jX29iaigqcHZjYyk7XFxuIFxcdGlmIChwdmNjID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNTozNi42Njk1OTU4NDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc3MTk4MTA4ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUTVwiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBPQVRNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwb2F0bV9pb2N0bFwiLFxuICAgIFwicHBwb2F0bV9hc3NpZ25fdmNjXCIsXG4gICAgXCJ2Y2NfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHBwb2F0bV9hc3NpZ25fdmNjKCkgZW5zdXJpbmcgdGhhdCBhbiBBVE0gVkNDIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIGJhY2tlbmQvdXNlcl9iYWNrIGFzc2lnbmVkIGJlZm9yZSBhbGxvY2F0aW5nIGFuZCBhdHRhY2hpbmcgYSBuZXcgcHBwb2F0bV92Y2MsIHByZXZlbnRpbmcgcmVzb3VyY2UgbGVha3MgYW5kIHN0YXRlIGNvcnJ1cHRpb24gd2hlbiByZS1hc3NpZ25pbmcgYmFja2VuZHMgb24gdGhlIHNhbWUgc29ja2V0IHZpYSBBVE1fU0VUQkFDS0VORCBpb2N0bC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQVRNIHNvY2tldCBpb2N0bHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Mjc4MjMxNmMzZGY1NWFhZDg1NzFhNDgwN2UzZTYwYWI4MjA0OTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNjoxNTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkzYmEyMmY0MzdiYzkgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC0zOTYsNiArMzk2LDggQEAgc3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiBcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiBcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spXG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xuIFx0aWYgKHB2Y2MgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNTozNi42Njk1OTY5ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjI1OTEwMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBQUFBvQVRNIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UsIHNvIGxldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgZGlmZiBhbmQgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgY29kZWJhc2Ugc3Vycm91bmRpbmcgaXQuIFRoZSBjaGFuZ2UgaXMgcG9pbnRpbmcgbWUgdG8gYG5ldC9hdG0vcHBwb2F0bS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIGxldCdzIHpvb20gaW4gb24gdGhhdCBzcGVjaWZpYyBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzOTYuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IHNlY3Rpb24gb2YgY29kZSBpcyAqZG9pbmcqLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljLCBob3cgaXQncyBpbnZva2VkLCBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSDigJMgS2NvbmZpZyBzZXR0aW5ncywgYW55IHBvdGVudGlhbCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgZXZlcnl0aGluZy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE1OjQyLjg5NTUxMDgxN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDM4MTpcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xcbiAzODQ6XFx0XFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXFxuIDM4NTpcXHRcXHQuaW9jdGwgPSBwcHBvYXRtX2RldnBwcF9pb2N0bCxcXG4gMzg2OlxcdH07XFxuIDM4NzpcXHRcXG4gMzg4OlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuIDM4OTpcXHR7XFxuIDM5MDpcXHRcXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xcbiAzOTE6XFx0XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xcbiAzOTI6XFx0XFx0aW50IGVycjtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxcbiAzOTU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM5NjpcXHRcXHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXFx1MDAyNlxcdTAwMjZcXG4gMzk3OlxcdFxcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXFx1MDAyNlxcdTAwMjYgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0xMQylcXG4gMzk4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzOTk6XFx0XFx0aWYgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKVxcbiA0MDA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNDAxOlxcdFxcdHB2Y2MgPSBremFsbG9jX29iaigqcHZjYyk7XFxuIDQwMjpcXHRcXHRpZiAocHZjYyA9PSBOVUxMKVxcbiA0MDM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQwNDpcXHRcXHRwdmNjLVxcdTAwM2VhdG12Y2MgPSBhdG12Y2M7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdC8qIE1heGltdW0gaXMgemVybywgc28gdGhhdCB3ZSBjYW4gdXNlIGF0b21pY19pbmNfbm90X3plcm8oKSAqL1xcbiA0MDc6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHZjYy1cXHUwMDNlaW5mbGlnaHQsIE5PTkVfSU5GTElHSFQpO1xcbiA0MDg6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX3B1c2ggPSBhdG12Y2MtXFx1MDAzZXB1c2g7XFxuIDQwOTpcXHRcXHRwdmNjLVxcdTAwM2VvbGRfcG9wID0gYXRtdmNjLVxcdTAwM2Vwb3A7XFxuIDQxMDpcXHRcXHRwdmNjLVxcdTAwM2VvbGRfb3duZXIgPSBhdG12Y2MtXFx1MDAzZW93bmVyO1xcbiA0MTE6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX3JlbGVhc2VfY2IgPSBhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2I7XFxuIDQxMjpcXHRcXHRwdmNjLVxcdTAwM2VlbmNhcHMgPSAoZW51bSBwcHBvYXRtX2VuY2FwcykgYmUuZW5jYXBzO1xcbiA0MTM6XFx0XFx0cHZjYy1cXHUwMDNlY2hhbi5wcml2YXRlID0gcHZjYztcXG4gNDE0OlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9hdG1fb3BzO1xcbiA0MTU6XFx0XFx0cHZjYy1cXHUwMDNlY2hhbi5tdHUgPSBhdG12Y2MtXFx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cXG4gNDE2OlxcdFxcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XFxuIDQxNzpcXHRcXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwdmNjLVxcdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcXG4gNDE4OlxcdFxcdGVyciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKFxcdTAwMjZwdmNjLVxcdTAwM2VjaGFuKTtcXG4gNDE5OlxcdFxcdGlmIChlcnIgIT0gMCkge1xcbiA0MjA6XFx0XFx0XFx0a2ZyZWUocHZjYyk7XFxuIDQyMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0MjI6XFx0XFx0fVxcbiA0MjM6XFx0XFx0YXRtdmNjLVxcdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xcbiA0MjQ6XFx0XFx0YXRtdmNjLVxcdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xcbiA0MjU6XFx0XFx0YXRtdmNjLVxcdTAwM2Vwb3AgPSBwcHBvYXRtX3BvcDtcXG4gNDI2OlxcdFxcdGF0bXZjYy1cXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcXG4gNDI3OlxcdFxcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XFxuIDQyODpcXHRcXHRhdG12Y2MtXFx1MDAzZW93bmVyID0gVEhJU19NT0RVTEU7XFxuIDQyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6NDIuODk1NjM5NTk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2MDI5MTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUFBQb0FUTSBWQ0MgQXNzaWdubWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZvciBhc3NpZ25pbmcgVmlydHVhbCBDaGFubmVsIENvbm5lY3Rpb25zIChWQ0NzKSB3aXRoIFBQUG9BVE0gaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCB0cmFjaW5nIHRoZSBjYWxscyB0byBgcHBwb2F0bV9hc3NpZ25fdmNjYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgQVRNIGFuZCBQUFBvQVRNIGxheWVycyBpbnRlcmFjdCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgcGh5c2ljYWwgQVRNIGludGVyZmFjZSwgdGhlIFBQUG9BVE0gZW5jYXBzdWxhdGlvbiwgYW5kIHRoZSBldmVudHVhbCBWQ0MgYWxsb2NhdGlvbi4gSSdtIHRoaW5raW5nIEknbGwgbG9vayBmb3IgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ6IHRoZSBBVE0gZGV2aWNlIHN0cnVjdHVyZSwgdGhlIFBQUG9BVE0gc2Vzc2lvbiBzdGF0ZSwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBWQ0MgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3Mgd29ya3MuIEZyb20gdGhpcywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE1OjQ1LjU1NTkzMzI1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk3NDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL3BwcG9hdG0uYz0zODM9c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zODctXFxubmV0L2F0bS9wcHBvYXRtLmM6Mzg4OnN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzg5LXtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTQ0MD1zdGF0aWMgaW50IHBwcG9hdG1faW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ1OC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0NTk6XFx0XFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2MC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE1OjQ1LjYzODkxNDgxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NjUxMjIxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHBwaW9hdG0uYyBpb2N0bCBQbHVtYmluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgZm9yIHRoaXMgYGlvY3RsYCBjYWxsIHdpdGhpbiB0aGUgYHBwcG9hdG1gIG1vZHVsZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRyYWNpbmcgdGhlIGNhbGxlciB3aXRoaW4gYHBwcG9hdG0uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpwcmVjaXNlbHkqIGhvdyBgcHBwb2F0bV9pb2N0bGAgaXMgaW52b2tlZC4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udmVudGlvbnM/IFdoYXQgc3RydWN0dXJlcyBhcmUgcGFzc2VkPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHJlZ2FyZGluZyBzdGF0ZT8gV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGVycm9yIHBhdGhzIGZyb20gdGhlIGNhbGxlciwgYW5kIGhvdyBhcmUgZXJyb3JzIGhhbmRsZWQ/IFRoaXMgaXMgbGlrZWx5IGEga2V5IGFyZWEgZm9yIGRlYnVnZ2luZyBvciBtb2RpZmljYXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGNvbnRleHQgaXMgY3JpdGljYWwuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgdGhlIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucyBgaW9jdGxgIG9yIHNvbWV0aGluZyBjdXN0b20gd2l0aGluIHRoZSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNTo0OS41MDQwNDAyNDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wcHBvYXRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdC8qIHJlLXByb2Nlc3MgZXZlcnl0aGluZyByZWNlaXZlZCBiZXR3ZWVuIGNvbm5lY3Rpb24gc2V0dXAgYW5kXFxuIDQzMTpcXHRcXHQgICBiYWNrZW5kIHNldHVwICovXFxuIDQzMjpcXHRcXHR2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKGF0bXZjYyk7XFxuIDQzMzpcXHRcXHRyZXR1cm4gMDtcXG4gNDM0OlxcdH1cXG4gNDM1OlxcdFxcbiA0MzY6XFx0LypcXG4gNDM3OlxcdCAqIFRoaXMgaGFuZGxlcyBpb2N0bHMgYWN0dWFsbHkgcGVyZm9ybWVkIG9uIG91ciB2Y2MgLSB3ZSBtdXN0IHJldHVyblxcbiA0Mzg6XFx0ICogLUVOT0lPQ1RMQ01EIGZvciBhbnkgdW5yZWNvZ25pemVkIGlvY3RsXFxuIDQzOTpcXHQgKi9cXG4gNDQwOlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbiA0NDE6XFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuIDQ0MjpcXHR7XFxuIDQ0MzpcXHRcXHRzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjID0gQVRNX1NEKHNvY2spO1xcbiA0NDQ6XFx0XFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdGlmIChjbWQgIT0gQVRNX1NFVEJBQ0tFTkQgXFx1MDAyNlxcdTAwMjYgYXRtdmNjLVxcdTAwM2VwdXNoICE9IHBwcG9hdG1fcHVzaClcXG4gNDQ3OlxcdFxcdFxcdHJldHVybiAtRU5PSU9DVExDTUQ7XFxuIDQ0ODpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA0NDk6XFx0XFx0Y2FzZSBBVE1fU0VUQkFDS0VORDoge1xcbiA0NTA6XFx0XFx0XFx0YXRtX2JhY2tlbmRfdCBiO1xcbiA0NTE6XFx0XFx0XFx0aWYgKGdldF91c2VyKGIsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKSBhcmdwKSlcXG4gNDUyOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA0NTM6XFx0XFx0XFx0aWYgKGIgIT0gQVRNX0JBQ0tFTkRfUFBQKVxcbiA0NTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcXG4gNDU1OlxcdFxcdFxcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcXG4gNDU2OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDQ1NzpcXHRcXHRcXHRpZiAoc29jay1cXHUwMDNlc3RhdGUgIT0gU1NfQ09OTkVDVEVEKVxcbiA0NTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ1OTpcXHRcXHRcXHRyZXR1cm4gcHBwb2F0bV9hc3NpZ25fdmNjKGF0bXZjYywgYXJncCk7XFxuIDQ2MDpcXHRcXHRcXHR9XFxuIDQ2MTpcXHRcXHRjYXNlIFBQUElPQ0dDSEFOOlxcbiA0NjI6XFx0XFx0XFx0cmV0dXJuIHB1dF91c2VyKHBwcF9jaGFubmVsX2luZGV4KFxcdTAwMjZhdG12Y2NfdG9fcHZjYyhhdG12Y2MpLVxcdTAwM2VcXG4gNDYzOlxcdFxcdFxcdCAgICBjaGFuKSwgKGludCBfX3VzZXIgKikgYXJncCkgPyAtRUZBVUxUIDogMDtcXG4gNDY0OlxcdFxcdGNhc2UgUFBQSU9DR1VOSVQ6XFxuIDQ2NTpcXHRcXHRcXHRyZXR1cm4gcHV0X3VzZXIocHBwX3VuaXRfbnVtYmVyKFxcdTAwMjZhdG12Y2NfdG9fcHZjYyhhdG12Y2MpLVxcdTAwM2VcXG4gNDY2OlxcdFxcdFxcdCAgICBjaGFuKSwgKGludCBfX3VzZXIgKikgYXJncCkgPyAtRUZBVUxUIDogMDtcXG4gNDY3OlxcdFxcdH1cXG4gNDY4OlxcdFxcdHJldHVybiAtRU5PSU9DVExDTUQ7XFxuIDQ2OTpcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdHN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIHBwcG9hdG1faW9jdGxfb3BzID0ge1xcbiA0NzI6XFx0XFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG4gNDczOlxcdFxcdC5pb2N0bFxcdD0gcHBwb2F0bV9pb2N0bCxcXG4gNDc0OlxcdH07XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdHN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxcbiA0Nzc6XFx0e1xcbiA0Nzg6XFx0XFx0cmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxuIDQ3OTpcXHRcXHRyZXR1cm4gMDtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxcbiA0ODM6XFx0e1xcbiA0ODQ6XFx0XFx0ZGVyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcXG4gNDg1OlxcdH1cXG4gNDg2OlxcdFxcbiA0ODc6XFx0bW9kdWxlX2luaXQocHBwb2F0bV9pbml0KTtcXG4gNDg4OlxcdG1vZHVsZV9leGl0KHBwcG9hdG1fZXhpdCk7XFxuIDQ4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6NDkuNTA0Mjk3MjQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ1OTY5Mjg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQUFBvQVRNIFZDQyBBc3NpZ25tZW50KipcblxuT2theSwgc28gYHBwcG9hdG1fYXNzaWduX3ZjY2AuLi4gdGhhdCdzIHRoZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gQVRNIHNvY2tldCwgdXNpbmcgYGlvY3RsYCB3aXRoIGBBVE1fU0VUQkFDS0VORGAsIGFuZCB0aGUgYmFja2VuZCBpcyBzZXQgdG8gUFBQLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlcmUgd2FzIGEgbmFzdHkgYnVnLiBJZiBhIFZpcnR1YWwgQ2hhbm5lbCBDb25uZWN0aW9uIChWQ0MpIGFscmVhZHkgaGFkIGEgYHVzZXJfYmFja2Agc2V0IChvciBpZiBgQVRNX1NFVEJBQ0tFTkRgIHdhcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIG9yIHdpdGggYSBkaWZmZXJlbnQgYmFja2VuZCBpbml0aWFsbHkpLCB0aGUgY29kZSB3b3VsZCBhbGxvY2F0ZSAqYW5vdGhlciogYHB2Y2NgIHN0cnVjdCwgb3ZlcndyaXRlIHRoZSBleGlzdGluZyBgYXRtdmNjLVx1MDAzZXVzZXJfYmFja2AgcG9pbnRlciB3aXRoIHRoZSBuZXcgb25lLCBhbmQgYWxzbyBjbG9iYmVyIHRoZSBmdW5jdGlvbiBwb2ludGVyIGBhdG12Y2MtXHUwMDNlcHVzaGAhIE1lbW9yeSBsZWFrIGFuZCBzdGF0ZSBjb3JydXB0aW9uLCBjbGFzc2ljLlxuXG5CdXQgd2l0aCB0aGUgcGF0Y2g/IE5vdyBpdCBqdXN0IGNoZWNrcyBpZiBgYXRtdmNjLVx1MDAzZXVzZXJfYmFja2AgaXMgc2V0IGFuZCByZXR1cm5zIGAtRUJVU1lgIGlmIGl0IGlzLiBNdWNoIGNsZWFuZXIuIEEgZ29vZCBwcm90ZWN0aW9uIG1lYXN1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGNhbiBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgc2l0dWF0aW9uIGluIGEgdGVzdGluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIENhbiB3ZSBldmVuICpnZXQqIEFUTSBpbnRlcmZhY2VzIGluIFFFTVU/IFllcywgbG9va3MgbGlrZSB3ZSBjYW4uIFdlJ3ZlIGdvdCBgc29ja2V0KEFGX0FUTVNWQywgLi4uKWAgb3IgYHNvY2tldChBRl9BVE1QVkMsIC4uLilgIGNhbGxzLCBvciBldmVuIHNpbXVsYXRlZCBBVE0gZGV2aWNlcywgcG90ZW50aWFsbHkgdXNpbmcgdGhpbmdzIGxpa2UgYGF0bV90Y3BgIG9yIG90aGVyIHZpcnR1YWwgaW50ZXJmYWNlcy4gVGhhdCdzIGdvb2Q7IGl0IGdpdmVzIHVzIG9wdGlvbnMuXG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYG5ldC9hdG0vS2NvbmZpZ2AgYW5kIGBuZXQvYXRtL01ha2VmaWxlYCBmaWxlcyBuZXh0IHRvIHNlZSB3aGF0IEFUTSBjb21wb25lbnRzIGFyZSBhdmFpbGFibGUsIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGhvdyB0aGV5IGdldCBidWlsdCBpbnRvIHRoZSBrZXJuZWwgZm9yIHRlc3RpbmcuIFRoaXMnbGwgaGVscCBtZSBmaWd1cmUgb3V0IGhvdyB0byBzZXQgdXAgdGhlIGVudmlyb25tZW50IGVmZmVjdGl2ZWx5IGZvciBmdXp6aW5nIGFuZCB2ZXJpZnlpbmcgdGhpcyBwYXRjaC4gV2UgY2FuIHRyeSB0byBjcmVhdGUgYSBzY2VuYXJpbyB3aGVyZSB3ZSBjYW4gZGVsaWJlcmF0ZWx5IGNhdXNlIHRoZSBgQVRNX1NFVEJBQ0tFTkRgIGlvY3RsIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgc2ltdWxhdGluZyB0aGUgb3JpZ2luYWwgYnVnIGNvbmRpdGlvbiBhbmQgcHJvdmluZyB0aGUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6NTMuOTYzOTkyMDc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXFxuICAxMDpcXHRcXHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXFxuICAxMTpcXHRcXHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxcbiAgMTI6XFx0XFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxcbiAgMTU6XFx0XFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXFxuICAxNjpcXHRcXHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcXG4gIDE5OlxcdFxcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XFx1MDAzZSBmb3JcXG4gIDIwOlxcdFxcdCAgZnVydGhlciBkZXRhaWxzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgQVRNX0JSMjY4NFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgQVRNIFBWQ3MgY2FuIGNhcnJ5IGV0aGVybmV0IFBEVXMgYWNjb3JkaW5nIHRvIFJGQzI2ODQgKGZvcm1lcmx5IDE0ODMpXFxuICAyNzpcXHRcXHQgIFRoaXMgZGV2aWNlIHdpbGwgYWN0IGxpa2UgYW4gZXRoZXJuZXQgZnJvbSB0aGUga2VybmVscyBwb2ludCBvZiB2aWV3LFxcbiAgMjg6XFx0XFx0ICB3aXRoIHRoZSB0cmFmZmljIGJlaW5nIGNhcnJpZWQgYnkgQVRNIFBWQ3MgKGN1cnJlbnRseSAxIFBWQy9kZXZpY2UpLlxcbiAgMjk6XFx0XFx0ICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VkIG92ZXIgRFNMIGxpbmVzLiAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIEFUTV9CUjI2ODRcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgbWVjaGFuaXNtIGZvciB1c2VycyB3aG8gbmVlZCB0byB0ZXJtaW5hdGUgYVxcbiAgMzY6XFx0XFx0ICBsYXJnZSBudW1iZXIgb2YgSVAtb25seSB2Y2Mncy4gIERvIG5vdCBlbmFibGUgdGhpcyB1bmxlc3MgeW91IGFyZSBzdXJlXFxuICAzNzpcXHRcXHQgIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTU6NTMuOTY0MDUyNTU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2OTM4NjM3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBEb3duIFBQUE9BVE0gaW4gdGhlIEtjb25maWcgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYFBQUE9BVE1gIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIGV4ZXJjaXNlIHdoZW4gZGlnZ2luZyBpbnRvIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgYEtjb25maWdgIGZpbGUgd2hlcmUgYFBQUE9BVE1gIGlzIGZpcnN0IGludHJvZHVjZWQsIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIHByb21wdHMsIGFuZCB1bHRpbWF0ZWx5LCBpdHMgaW1wbGljYXRpb25zIGZvciB0aGUgYnVpbGQuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgaXMgbmVzdGVkLCBzbyBJIHdpbGwgbmVlZCB0byBpdGVyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTcyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjowMS42NTc5MTgyOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjMwMjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBvYXRtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5uZXQvYXRtL01ha2VmaWxlLTExLVxcbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcbi0tXFxubmV0L2F0bS9pb2N0bC5jPTQzPXN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmMtOTQtXFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XFxubmV0L2F0bS9pb2N0bC5jOjk1OlxcdFxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJwcHBvYXRtXFxcIik7XFxubmV0L2F0bS9pb2N0bC5jLTk2LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbm5ldC9hdG0vcHBwb2F0bS5jOjI6LyogbmV0L2F0bS9wcHBvYXRtLmMgLSBSRkMyMzY0IFBQUCBvdmVyIEFUTS9BQUw1ICovXFxubmV0L2F0bS9wcHBvYXRtLmMtMy1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ5LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjUwOmVudW0gcHBwb2F0bV9lbmNhcHMge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTUxLVxcdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy01NS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo1NjpzdHJ1Y3QgcHBwb2F0bV92Y2Mge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTU3LVxcdHN0cnVjdCBhdG1fdmNjXFx0KmF0bXZjYztcXHQvKiBWQ0MgZGVzY3JpcHRvciAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNjItXFx0XFx0XFx0XFx0XFx0Lyoga2VlcCBvbGQgcHVzaC9wb3AgZm9yIGRldGFjaGluZyAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjYzOlxcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTY0LVxcdGF0b21pY190IGluZmxpZ2h0O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9ODY9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHBwbGxjWzZdID0geyAweEZFLCAweEZFLCAweDAzLCAweENGLCAweEMwLCAweDIxIH07XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo4OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy05MC17XFxubmV0L2F0bS9wcHBvYXRtLmM6OTE6XFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy05Mi19XFxubmV0L2F0bS9wcHBvYXRtLmMtOTMtXFxubmV0L2F0bS9wcHBvYXRtLmM6OTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxubmV0L2F0bS9wcHBvYXRtLmMtOTUte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjk2OlxcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChjaGFuLVxcdTAwM2Vwcml2YXRlKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy05Ny19XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDMtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTA0OnN0YXRpYyB2b2lkIHBwcG9hdG1fd2FrZXVwX3NlbmRlcihzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTA1LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMDY6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gZnJvbV90YXNrbGV0KHB2Y2MsIHQsIHdha2V1cF90YXNrbGV0KTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDctXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTAtXFxubmV0L2F0bS9wcHBvYXRtLmM6MTExOnN0YXRpYyB2b2lkIHBwcG9hdG1fcmVsZWFzZV9jYihzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTEzOlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTE0LVxcbm5ldC9hdG0vcHBwb2F0bS5jLTExNS1cXHQvKlxcbm5ldC9hdG0vcHBwb2F0bS5jOjExNjpcXHQgKiBBcyBpbiBwcHBvYXRtX3BvcCgpLCBpdCdzIHNhZmUgdG8gY2xlYXIgdGhlIEJMT0NLRUQgYml0IGhlcmUgYmVjYXVzZVxcbm5ldC9hdG0vcHBwb2F0bS5jOjExNzpcXHQgKiB0aGUgd2FrZXVwICpjYW4ndCogcmFjZSB3aXRoIHBwcG9hdG1fc2VuZCgpLiBUaGV5IGJvdGggaG9sZCB0aGUgUFBQXFxubmV0L2F0bS9wcHBvYXRtLmMtMTE4LVxcdCAqIGNoYW5uZWwncyAtXFx1MDAzZWRvd25sIGxvY2suIEFuZCB0aGUgcG90ZW50aWFsIHJhY2Ugd2l0aCAqc2V0dGluZyogaXQsXFxubmV0L2F0bS9wcHBvYXRtLmM6MTE5OlxcdCAqIHdoaWNoIGxlYWRzIHRvIHRoZSBkb3VibGUtY2hlY2sgZGFuY2UgaW4gcHBwb2F0bV9tYXlfc2VuZCgpLCBkb2Vzbid0XFxubmV0L2F0bS9wcHBvYXRtLmM6MTIwOlxcdCAqIGV4aXN0IGhlcmUuIEluIHRoZSBzb2NrX293bmVkX2J5X3VzZXIoKSBjYXNlIGluIHBwcG9hdG1fc2VuZCgpLCB3ZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEyMS1cXHQgKiBzZXQgdGhlIEJMT0NLRUQgYml0IHdoaWxlIHRoZSBzb2NrZXQgaXMgc3RpbGwgbG9ja2VkLiBXZSBrbm93IHRoYXRcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEzMy0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzoxMzQ6c3RhdGljIHZvaWQgcHBwb2F0bV9wb3Aoc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzUte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjEzNjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTEzNy1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE0My1cXHQgKiBmZWFyIG9mIHJhY2UgY29uZGl0aW9ucyB3aGVyZSB3ZSBjbGVhciB0aGUgQkxPQ0tFRCBmbGFnIGp1c3QgYXMgd2VcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDQ6XFx0ICogcmVmdXNlIGFub3RoZXIgcGFja2V0IGluIHBwcG9hdG1fc2VuZCgpLiBUaGlzIHdhcyBxdWl0ZSBpbmVmZmljaWVudC5cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDUtXFx0ICpcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDY6XFx0ICogSW4gZmFjdCBpdCdzIE9LLiBUaGUgUFBQIGNvcmUgd2lsbCBvbmx5IGV2ZXIgY2FsbCBwcHBvYXRtX3NlbmQoKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE0Ny1cXHQgKiB3aGlsZSBob2xkaW5nIHRoZSBjaGFubmVsLVxcdTAwM2Vkb3dubCBsb2NrLiBBbmQgcHBwX291dHB1dF93YWtldXAoKSBhc1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE0OC1cXHQgKiBjYWxsZWQgYnkgdGhlIHRhc2tsZXQgd2lsbCAqYWxzbyogZ3JhYiB0aGF0IGxvY2suIFNvIGV2ZW4gaWYgYW5vdGhlclxcbm5ldC9hdG0vcHBwb2F0bS5jOjE0OTpcXHQgKiBDUFUgaXMgaW4gcHBwb2F0bV9zZW5kKCkgcmlnaHQgbm93LCB0aGUgdGFza2xldCBpc24ndCBnb2luZyB0byByYWNlXFxubmV0L2F0bS9wcHBvYXRtLmMtMTUwLVxcdCAqIHdpdGggaXQuIFRoZSB3YWtldXAgKndpbGwqIGhhcHBlbiBhZnRlciB0aGUgb3RoZXIgQ1BVIGlzIHNhZmVseSBvdXRcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNTE6XFx0ICogb2YgcHBwb2F0bV9zZW5kKCkgYWdhaW4uXFxubmV0L2F0bS9wcHBvYXRtLmMtMTUyLVxcdCAqXFxubmV0L2F0bS9wcHBvYXRtLmM6MTUzOlxcdCAqIFNvIGlmIHRoZSBDUFUgaW4gcHBwb2F0bV9zZW5kKCkgaGFzIGFscmVhZHkgc2V0IHRoZSBCTE9DS0VEIGJpdCBhbmRcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTQtXFx0ICogaXQgYWJvdXQgdG8gcmV0dXJuLCB0aGF0J3MgZmluZS4gV2UgdHJpZ2dlciBhIHdha2V1cCB3aGljaCB3aWxsXFxubmV0L2F0bS9wcHBvYXRtLmM6MTU1OlxcdCAqIGhhcHBlbiBsYXRlci4gQW5kIGlmIHRoZSBDUFUgaW4gcHBwb2F0bV9zZW5kKCkgKmhhc24ndCogc2V0IHRoZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE1Ni1cXHQgKiBCTE9DS0VEIGJpdCB5ZXQsIHRoYXQncyBmaW5lIHRvbyBiZWNhdXNlIG9mIHRoZSBkb3VibGUgY2hlY2sgaW5cXG5uZXQvYXRtL3BwcG9hdG0uYzoxNTc6XFx0ICogcHBwb2F0bV9tYXlfc2VuZCgpIHdoaWNoIGlzIGNvbW1lbnRlZCB0aGVyZS5cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTgtXFx0ICovXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNjYtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTY3OnN0YXRpYyB2b2lkIHBwcG9hdG1fdW5hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTY4LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNjk6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE3MC1cXHRwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE4MC0vKiBDYWxsZWQgd2hlbiBhbiBBQUw1IFBEVSBjb21lcyBpbiAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE4MTpzdGF0aWMgdm9pZCBwcHBvYXRtX3B1c2goc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYXRtL3BwcG9hdG0uYy0xODIte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE4MzpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE4NC1cXHRwcl9kZWJ1ZyhcXFwiXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE4OS1cXHRcXHRtb2R1bGUgPSBwdmNjLVxcdTAwM2VvbGRfb3duZXI7XFxubmV0L2F0bS9wcHBvYXRtLmM6MTkwOlxcdFxcdHBwcG9hdG1fdW5hc3NpZ25fdmNjKGF0bXZjYyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTkxLVxcdFxcdGF0bXZjYy1cXHUwMDNlcHVzaChhdG12Y2MsIE5VTEwpO1xcdC8qIFBhc3MgYWxvbmcgYmFkIG5ld3MgKi9cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIzMy1cXG5uZXQvYXRtL3BwcG9hdG0uYzoyMzQ6c3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpXFxubmV0L2F0bS9wcHBvYXRtLmMtMjM1LXtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI1Ni1cXHQvKlxcbm5ldC9hdG0vcHBwb2F0bS5jOjI1NzpcXHQgKiBXZSBtYXkgaGF2ZSByYWNlZCB3aXRoIHBwcG9hdG1fcG9wKCkuIElmIGl0IHJhbiBmb3IgdGhlXFxubmV0L2F0bS9wcHBvYXRtLmMtMjU4LVxcdCAqIGxhc3QgcGFja2V0IGluIHRoZSBxdWV1ZSwgKmp1c3QqIGJlZm9yZSB3ZSBzZXQgdGhlIEJMT0NLRURcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI2NC1cXHQgKiBydW4gdGhlIHdha2V1cCB0YXNrbGV0LiBBbm90aGVyIHdha2V1cCB3aWxsIG5ldmVyIGh1cnQuXFxubmV0L2F0bS9wcHBvYXRtLmM6MjY1OlxcdCAqIElmIHBwcG9hdG1fcG9wKCkgaXMgcnVubmluZyBidXQgaGFzbid0IGdvdCBhcyBmYXIgYXMgbWFraW5nXFxubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVxcdCAqIHNwYWNlIG9uIHRoZSBxdWV1ZSB5ZXQsIHRoZW4gaXQgaGFzbid0IGNoZWNrZWQgdGhlIEJMT0NLRURcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI2OS1cXHQgKiB0YWtpbmcgdGhlIFBQUCBjaGFubmVsJ3MgLVxcdTAwM2Vkb3dubCBsb2NrLCB3aGljaCBpcyBoZWxkIGJ5IHRoZVxcbm5ldC9hdG0vcHBwb2F0bS5jOjI3MDpcXHQgKiBjb2RlIHBhdGggdGhhdCBjYWxscyBwcHBvYXRtX3NlbmQoKSwgYW5kIGlzIHRodXMgZ29pbmcgdG9cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNzEtXFx0ICogd2FpdCBmb3IgdXMgdG8gZmluaXNoLlxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMjg4LSNkZWZpbmUgRFJPUF9QQUNLRVQgMVxcbm5ldC9hdG0vcHBwb2F0bS5jOjI4OTpzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMjkwLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoyOTE6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gY2hhbl90b19wdmNjKGNoYW4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTI5Mi1cXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzIzLVxcdFxcdFxcdGlmIChuICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL3BwcG9hdG0uYzozMjQ6XFx0XFx0XFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXFx1MDAzZXRydWVzaXplKSkge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTMyNS1cXHRcXHRcXHRcXHRrZnJlZV9za2Iobik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zMzMtXFx0XFx0XFx0fVxcbm5ldC9hdG0vcHBwb2F0bS5jOjMzNDpcXHRcXHR9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMzNS1cXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zMzgtXFx0Y2FzZSBlX3ZjOlxcbm5ldC9hdG0vcHBwb2F0bS5jOjMzOTpcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzQwLVxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM2OC0vKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM2OTpzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcXG5uZXQvYXRtL3BwcG9hdG0uYy0zNzAtXFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zODItXFxubmV0L2F0bS9wcHBvYXRtLmM6MzgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM4NDpcXHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcXG5uZXQvYXRtL3BwcG9hdG0uYzozODU6XFx0LmlvY3RsID0gcHBwb2F0bV9kZXZwcHBfaW9jdGwsXFxubmV0L2F0bS9wcHBvYXRtLmMtMzg2LX07XFxubmV0L2F0bS9wcHBvYXRtLmMtMzg3LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4ODpzdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM4OS17XFxubmV0L2F0bS9wcHBvYXRtLmMtMzkwLVxcdHN0cnVjdCBhdG1fYmFja2VuZF9wcHAgYmU7XFxubmV0L2F0bS9wcHBvYXRtLmM6MzkxOlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYy0zOTItXFx0aW50IGVycjtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQxMS1cXHRwdmNjLVxcdTAwM2VvbGRfcmVsZWFzZV9jYiA9IGF0bXZjYy1cXHUwMDNlcmVsZWFzZV9jYjtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTI6XFx0cHZjYy1cXHUwMDNlZW5jYXBzID0gKGVudW0gcHBwb2F0bV9lbmNhcHMpIGJlLmVuY2FwcztcXG5uZXQvYXRtL3BwcG9hdG0uYy00MTMtXFx0cHZjYy1cXHUwMDNlY2hhbi5wcml2YXRlID0gcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTQ6XFx0cHZjYy1cXHUwMDNlY2hhbi5vcHMgPSBcXHUwMDI2cHBwb2F0bV9vcHM7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDE1LVxcdHB2Y2MtXFx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVxcdTAwM2Vxb3MudHh0cC5tYXhfc2R1IC0gUFBQX0hEUkxFTiAtXFxubmV0L2F0bS9wcHBvYXRtLmMtNDE2LVxcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDE3OlxcdHRhc2tsZXRfc2V0dXAoXFx1MDAyNnB2Y2MtXFx1MDAzZXdha2V1cF90YXNrbGV0LCBwcHBvYXRtX3dha2V1cF9zZW5kZXIpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQxOC1cXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2cHZjYy1cXHUwMDNlY2hhbik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MjMtXFx0YXRtdmNjLVxcdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQyNDpcXHRhdG12Y2MtXFx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDI1OlxcdGF0bXZjYy1cXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDI2OlxcdGF0bXZjYy1cXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcXG5uZXQvYXRtL3BwcG9hdG0uYy00MjctXFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzOS0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NDA6c3RhdGljIGludCBwcHBvYXRtX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxubmV0L2F0bS9wcHBvYXRtLmMtNDQxLVxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDQ1LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjQ0NjpcXHRpZiAoY21kICE9IEFUTV9TRVRCQUNLRU5EIFxcdTAwMjZcXHUwMDI2IGF0bXZjYy1cXHUwMDNlcHVzaCAhPSBwcHBvYXRtX3B1c2gpXFxubmV0L2F0bS9wcHBvYXRtLmMtNDQ3LVxcdFxcdHJldHVybiAtRU5PSU9DVExDTUQ7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NTgtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDU5OlxcdFxcdHJldHVybiBwcHBvYXRtX2Fzc2lnbl92Y2MoYXRtdmNjLCBhcmdwKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjAtXFx0XFx0fVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDcwLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjQ3MTpzdGF0aWMgc3RydWN0IGF0bV9pb2N0bCBwcHBvYXRtX2lvY3RsX29wcyA9IHtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NzItXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG5uZXQvYXRtL3BwcG9hdG0uYzo0NzM6XFx0LmlvY3RsXFx0PSBwcHBvYXRtX2lvY3RsLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3NC19O1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3NS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NzY6c3RhdGljIGludCBfX2luaXQgcHBwb2F0bV9pbml0KHZvaWQpXFxubmV0L2F0bS9wcHBvYXRtLmMtNDc3LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0Nzg6XFx0cmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc5LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDgxLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjQ4MjpzdGF0aWMgdm9pZCBfX2V4aXQgcHBwb2F0bV9leGl0KHZvaWQpXFxubmV0L2F0bS9wcHBvYXRtLmMtNDgzLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODQ6XFx0ZGVyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00ODUtfVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ4Ni1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODc6bW9kdWxlX2luaXQocHBwb2F0bV9pbml0KTtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODg6bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00ODktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjAyLjEzNDIyNTc2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzkwNDA0MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biB0aGUgUFBQT0FUTSBLY29uZmlnIFN5bWJvbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBLY29uZmlnIHN5bWJvbCBhc3NvY2lhdGVkIHdpdGggUFBQT0FUTS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJ2xsIGFwcHJvYWNoIHRoaXMgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUsIHN0YXJ0aW5nIHdpdGggdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9ucy5cblxuRmlyc3QsIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFBQUE9BVE0gaXMgb2J2aW91c2x5IGEgbmV0d29ya2luZyBwcm90b2NvbCwgc28gYSBkaXZlIGludG8gdGhlIGBuZXQvYCBkaXJlY3RvcnkgYW5kIGl0cyBgS2NvbmZpZ2AgZmlsZXMgZmVlbHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB0aGF0IHNlZW1zIHJlbGV2YW50IOKAkyBtYXliZSBuYW1lZCBgYXRtYCwgYHBwcGAsIG9yIGBwcHBvYWAsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIGxpa2UgYHBwcG9hdG1gLiBJIGtub3cgdGhlIG5hbWluZyBjb252ZW50aW9ucyBjYW4gYmUgYSBiaXTigKYgd2VsbCwgdW5wcmVkaWN0YWJsZSBzb21ldGltZXMsIHNvIEnigJlsbCBuZWVkIHRvIHRoaW5rIGxhdGVyYWxseSBpZiB0aGUgb2J2aW91cyBzZWFyY2ggdGVybXMgZG9uJ3QgaGl0IGltbWVkaWF0ZWx5LlxuXG5JZiB0aGF0IGluaXRpYWwgYnJvYWQgc2VhcmNoIGRvZXNu4oCZdCB5aWVsZCBhbnl0aGluZyB1c2VmdWwsIEnigJlsbCBuZWVkIHRvIHJlZmluZSBteSBhcHByb2FjaC4gSeKAmWxsIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbW9yZSBzcGVjaWZpYyBzdWItZGlyZWN0b3JpZXMgYW5kIHJlbGF0ZWQgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJcyBQUFBPQVRNIGxpa2VseSB0cmVhdGVkIGFzIGEgZGlzdGluY3QgaW50ZXJmYWNlPyBPciBpcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIFBQUCBzdXBwb3J0IGNvbmZpZ3VyYXRpb24/IERvZXMgaXQgbGVhbiBvbiBBVE0gZHJpdmVycz8gSSBrbm93IGl0IGRlcGVuZHMsIHNvIEknbGwgZm9sbG93IHRoZSBicmVhZGNydW1icyBmcm9tIHdoZXJlIGl0IGxvb2tzIGxpa2UgaXQgYmVsb25ncy4gSeKAmWxsIGJlIHRyeWluZyB0byBpZGVudGlmeSBkZXBlbmRlbmNpZXMgb3IgY29ubmVjdGlvbnMgdG8gb3RoZXIgc3ltYm9scy5cblxuVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgc3ltYm9sIHRoYXQsIHdoZW4gZW5hYmxlZCwgaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBkcml2ZXJzLCBtb2R1bGVzLCBvciBjb25maWd1cmF0aW9ucyBmb3IgUFBQT0FUTS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGl0IG1pZ2h0IGJlIGEgKmJvb2xlYW4qIHN5bWJvbCwgb3IgcG90ZW50aWFsbHkgYSAqdHJpc3RhdGUqIGlmIGl0IGNhbiBiZSBidWlsdCBhcyBhIG1vZHVsZS4gT25jZSBJIGhhdmUgdGhlIHN5bWJvbCwgSSBjYW4gc3RhcnQgbG9va2luZyBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFuZCBnZXQgYmFjayB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY2OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjA1LjUyNDYzMzY4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NjI4ODIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQUFBPQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTkyPWNvbmZpZyBQUFBfTVVMVElMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTA0OmNvbmZpZyBQUFBPQVRNXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBBVE1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjA2LjU3MDkyNjY5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA1NzMzNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFBQUCBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyB0byB3b3JrIG9uLCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgUFBQIGNvbmZpZ3VyYXRpb24gZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBQUFAgZHJpdmVyLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbiwgYXJvdW5kIGxpbmUgMTA0IGluIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIFRoYXQgbG9jYXRpb24gc2hvdWxkIGNvbnRhaW4gdGhlIGNvcmUgb3B0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGdyaXAgb24gaG93IGFsbCBvZiB0aGUgb3B0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjowOC41NzY2NjIyODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHBwZCBkYWVtb24gd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG11bHRpbGluayBwcm90b2NvbC5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgUFBQT0FUTVxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXFxuIDEwOTpcXHRcXHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxcbiAxMTA6XFx0XFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXFxuIDExMTpcXHRcXHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgUFBQT1hcXG4gMTE0OlxcdFxcdHRyaXN0YXRlXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBQUFBPRVxcbiAxMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEV0aGVybmV0XFxcIlxcbiAxMTg6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDExOTpcXHRcXHRoZWxwXFxuIDEyMDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cXG4gMTIzOlxcdFxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuIDEyNDpcXHRcXHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XFxuIDEyNTpcXHRcXHQgIFxcdTAwM2NodHRwczovL2RpYW5uZS5za29sbC5jYS9wcm9qZWN0cy9ycC1wcHBvZS9cXHUwMDNlLlxcbiAxMjY6XFx0XFxuIDEyNzpcXHRjaG9pY2VcXG4gMTI4OlxcdFxcdHByb21wdCBcXFwiTnVtYmVyIG9mIFBQUG9FIGhhc2ggYml0c1xcXCJcXG4gMTI5OlxcdFxcdGRlZmF1bHQgUFBQT0VfSEFTSF9CSVRTXzRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MDguNTc2NzMzODU1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5NDE4MDg3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgUFBQT0FUTSBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFBQUE9BVE0gaXMgYWN0dWFsbHkgYnVpbHQuIEl0J3MgYSBiaXQgb2YgYW4gb2xkZXIgdGVjaG5vbG9neSwgYW5kIHRoZSBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIGEgbGl0dGxlIG9ic2N1cmUsIHNvIEkgc2hvdWxkIGRpdmUgaW50byB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBkaXJlY3RseS4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIGV4YW1pbmUgdGhlIE1ha2VmaWxlcyBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9wcHAvTWFrZWZpbGVgLCB0aGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGdpdmVuIGl0cyBhc3NvY2lhdGlvbiB3aXRoIFBQUC4gQW5kIHNpbmNlIFBQUE9BVE0gY29tYmluZXMgUFBQIGFuZCBBVE0sIEknbGwgYWxzbyBjaGVjayBvdXQgYG5ldC9hdG0vTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSByZWxldmFudCBidWlsZCBsb2dpYyBvciBkZXBlbmRlbmNpZXMgaW4gdGhlcmUuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMsIGFueSBvdGhlciBkcml2ZXJzIG9yIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYWxvbmdzaWRlIFBQUE9BVE0sIGFuZCB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGUgbW9kdWxlLiBUaGlzIHNob3VsZCBoZWxwIG1lIGNvbmZpcm0gdGhhdCBJIGhhdmUgYW4gYWNjdXJhdGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODE4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjoxNS41MTg1NDU1NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDk0NjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQUFBPQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5uZXQvYXRtL01ha2VmaWxlLTExLVxcbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9NTA9ZW51bSBwcHBvYXRtX2VuY2FwcyB7XFxubmV0L2F0bS9wcHBvYXRtLmM6NTE6XFx0ZV9hdXRvZGV0ZWN0ID0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCxcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MjpcXHRlX3ZjID0gUFBQT0FUTV9FTkNBUFNfVkMsXFxubmV0L2F0bS9wcHBvYXRtLmM6NTM6XFx0ZV9sbGMgPSBQUFBPQVRNX0VOQ0FQU19MTEMsXFxubmV0L2F0bS9wcHBvYXRtLmMtNTQtfTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTM4OD1zdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzk1LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM5NjpcXHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL3BwcG9hdG0uYzozOTc6XFx0ICAgIGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19WQyBcXHUwMDI2XFx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM5OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MTUuNjUzNTAyOTE5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDA3MjUzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIFBQUCBvdmVyIEFUTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbiBhbmQgc2VlIGhvdyB0aGUgUFBQIG92ZXIgQVRNIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBzbyBJJ2xsIGNoZWNrIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIEl0IHNlZW1zIHRoYXQgUFBQT0FUTSByZWxpZXMgb24gYm90aCBBVE0gYW5kIFBQUCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyByZWxhdGlvbnNoaXAsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhyb3VnaCB0aGUgZmlyc3QgNTAgbGluZXMgb2YgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgbGlua2VkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjE4LjA1NDIzMTQyOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBQUF9CU0RDT01QXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxcXCJcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xcbiAgNDE6XFx0XFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXFxuICA0MjpcXHRcXHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcXG4gIDQzOlxcdFxcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXG4gIDQ0OlxcdFxcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCxcXG4gIDQ1OlxcdFxcdCAgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFxcXCJQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblxcXCIsXFxuICA0ODpcXHRcXHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxcbiAgNDk6XFx0XFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXFxuICA1MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MTguMDU0MzA5OTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MzkzODEzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0dXAgYW5kIEkgc2VlIHRoYXQgYFBQUE9BVE1gIGlzIG5lc3RlZCByaWdodCBpbnNpZGUgYGlmIFBQUGAsIHdoaWNoIHRoZW4gaW5jbHVkZXMgYGNvbmZpZyBQUFBPQVRNYC4gQ2xlYXJseSwgYFBQUE9BVE1gIGlzIGRlcGVuZGVudCBvbiBgUFBQYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIG9uZS4gQW5kLCBieSBleHRlbnNpb24sIGl0IGFsc28gbmVlZHMgYEFUTWAsIHNpbmNlIGl0J3MgXCJQUFBvQSoqVE0qKlwiLiBXZSBhbGwga25vdyB0aGlzLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guXG5cbk15IG5leHQgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywgdXBzdHJlYW0gb3IgZG93bnN0cmVhbSwgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcgZm9yIGVpdGhlciBgUFBQYCBvciBgQVRNYD8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBoZXJlLlxuXG5TbywgSeKAmW0gZGlnZ2luZyBpbnRvIHRoZSBzb3VyY2UuIEluIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgaG93IGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBQUFAgaW1wbGVtZW50YXRpb24gKGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2ApIGJlaW5nIHNvdXJjZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgY2hhaW4gYmFjayBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc3VidGxlIHRoYXQgY291bGQgaW1wYWN0IG15IHdvcmsuIExldCdzIGZpbmQgb3V0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjIuOTkzNjk0MzQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY2MzY5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz01MjY9c291cmNlIFxcXCJkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MjctXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1Mjg6c291cmNlIFxcXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjMuMjYwMzM2MDk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTQwOTUwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gSSdtIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgaXQuIExldCdzIHN0YXJ0IHdpdGggdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIGFyb3VuZCBsaW5lIDUyOC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3Igb3B0aW9uIHJlc2lkZXMuIFRpbWUgdG8gc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBoaWRpbmcgdGhlcmUuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjUuNTc0NDMzOTU2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTE1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTE1OlxcdFxcbiA1MTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ1xcXCJcXG4gNTE3OlxcdFxcbiA1MTg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ1xcXCJcXG4gNTE5OlxcdFxcbiA1MjA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcXFwiXFxuIDUyMTpcXHRcXG4gNTIyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXFxcIlxcbiA1MjM6XFx0XFxuIDUyNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxcIlxcbiA1MjU6XFx0XFxuIDUyNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1xcXCJcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1xcXCJcXG4gNTI5OlxcdFxcbiA1MzA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcXFwiXFxuIDUzMTpcXHRcXG4gNTMyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXFxcIlxcbiA1MzM6XFx0XFxuIDUzNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXFxcIlxcbiA1MzU6XFx0XFxuIDUzNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcXFwiXFxuIDUzNzpcXHRcXG4gNTM4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2FuL0tjb25maWdcXFwiXFxuIDUzOTpcXHRcXG4gNTQwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnXFxcIlxcbiA1NDE6XFx0XFxuIDU0MjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ1xcXCJcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjUuNTc0NTEyOTA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjE3NzE2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgTkVUREVWSUNFU2Agb3B0aW9uIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGBORVRERVZJQ0VTYCBuZXN0ZWQgd2l0aGluIGEgYG1lbnVjb25maWcgTkVUREVWSUNFU2AgYmxvY2ssIHdoaWNoIGxpa2VseSBkZXBlbmRzIG9uIHRoZSBicm9hZGVyIGBORVRgIGZlYXR1cmUuIFRoZW4sIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBORVRfQVRNYCAvIGBBVE1gIGFyZSBjb25maWd1cmVkIGluIHRoZSBgbmV0L0tjb25maWdgIGZpbGUsIGFzIEFUTSBpcyBhbm90aGVyIHBpZWNlIG9mIHRoZSBuZXR3b3JraW5nIHB1enpsZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjI3Ljk5NjI4ODEyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTE0NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjU2PXNvdXJjZSBcXFwibmV0L3RpcGMvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNTc6c291cmNlIFxcXCJuZXQvYXRtL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMjU4LXNvdXJjZSBcXFwibmV0L2wydHAvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MjguMTI2MjA4NDc0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2MjcyMzQyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQVRNL1BQUE9BVE0gQ29uZmlndXJhdGlvbiBhbmQgSU9DVEwgSGFuZGxlcnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEFUTWAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBzdGFydCB3aXRoIGBuZXQvYXRtL0tjb25maWdgLiBMaW5lIDYgc2hvd3MgdGhhdCBgQVRNYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBsZXQncyBsb29rIGF0IGBQUFBPQVRNYC4gVGhlIGNvbmZpZ3VyYXRpb24gc25pcHBldCByZXZlYWxzIGl0J3MgZGlyZWN0bHkgZGVwZW5kZW50IG9uIGBBVE1gIGFuZCBuZXN0ZWQgd2l0aGluIGFuIGBpZiBQUFBgIGJsb2NrLiBUaGlzIGNvbmZpcm1zIHRoZSBkZXBlbmRlbmNpZXM6IGBBVE1gLCBgUFBQYCwgYFBQUE9BVE1gLCBhbmQsIGJ5IGV4dGVuc2lvbiwgYE5FVERFVklDRVNgIGFuZCBgTkVUYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBhIHByb3BlciBjb25maWd1cmF0aW9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBwcHBvYXRtX2lvY3RsYCBhbmQgYHBwcG9hdG1fYXNzaWduX3ZjY2AgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGFuZCBpZiB0aGV5J3JlIGV4cG9ydGVkL3JlYWNoYWJsZS4gTG9va2luZyBhdCBgcHBwb2F0bS5jYCwgSSBzZWUgYHJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcylgIHJlZ2lzdGVycyB0aGUgYHBwcG9hdG1faW9jdGxgIGhhbmRsZXIgd2l0aCB0aGUgQVRNIHN1YnN5c3RlbS4gVGhhdCBtZWFucyBgcHBwb2F0bV9pb2N0bGAgd2lsbCBiZSBpbnZva2VkIHdoZW4gYW4gQVRNIHNvY2tldCB1c2VzIGFuIGlvY3RsLiBTcGVjaWZpY2FsbHksIHdoZW4gYW4gQVRNIHNvY2tldCBpc3N1ZXMgdGhlIGBBVE1fU0VUQkFDS0VORGAgaW9jdGwsIGBkb192Y2NfaW9jdGxgIGluIGBuZXQvYXRtL2lvY3RsLmNgIHRha2VzIG92ZXIgYW5kIHRoZW4gZGlzcGF0Y2hlcyB0aGUgcmVxdWVzdCB0byByZWdpc3RlcmVkIEFUTSBpb2N0bHMuIEknbGwgbmVlZCB0byBleGFtaW5lIGBuZXQvYXRtL2lvY3RsLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGlvY3RsIGhhbmRsaW5nIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjM1Ljc1MzQ0NTUxMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdH1cXG4gIDQxOlxcdEVYUE9SVF9TWU1CT0woZGVyZWdpc3Rlcl9hdG1faW9jdGwpO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRzdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbiAgNDQ6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhcmcsIGludCBjb21wYXQpXFxuICA0NTpcXHR7XFxuICA0NjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gIDQ3OlxcdFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuICA0ODpcXHRcXHRpbnQgZXJyb3I7XFxuICA0OTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7XFxuICA1MDpcXHRcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG4gIDUxOlxcdFxcdHZvaWQgX191c2VyICpidWY7XFxuICA1MjpcXHRcXHRpbnQgX191c2VyICpsZW47XFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdHZjYyA9IEFUTV9TRChzb2NrKTtcXG4gIDU1OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuICA1NjpcXHRcXHRjYXNlIFNJT0NPVVRROlxcbiAgNTc6XFx0XFx0XFx0aWYgKHNvY2stXFx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRCB8fFxcbiAgNTg6XFx0XFx0XFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSkge1xcbiAgNTk6XFx0XFx0XFx0XFx0ZXJyb3IgPSAgLUVJTlZBTDtcXG4gIDYwOlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gIDYxOlxcdFxcdFxcdH1cXG4gIDYyOlxcdFxcdFxcdGVycm9yID0gcHV0X3VzZXIoc2stXFx1MDAzZXNrX3NuZGJ1ZiAtIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSxcXG4gIDYzOlxcdFxcdFxcdFxcdFxcdCAoaW50IF9fdXNlciAqKWFyZ3ApO1xcbiAgNjQ6XFx0XFx0XFx0Z290byBkb25lO1xcbiAgNjU6XFx0XFx0Y2FzZSBTSU9DSU5ROlxcbiAgNjY6XFx0XFx0e1xcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDY4OlxcdFxcdFxcdGludCBhbW91bnQ7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdFxcdGlmIChzb2NrLVxcdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQpIHtcXG4gIDcxOlxcdFxcdFxcdFxcdGVycm9yID0gLUVJTlZBTDtcXG4gIDcyOlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gIDczOlxcdFxcdFxcdH1cXG4gIDc0OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbiAgNzU6XFx0XFx0XFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG4gIDc2OlxcdFxcdFxcdGFtb3VudCA9IHNrYiA/IHNrYi1cXHUwMDNlbGVuIDogMDtcXG4gIDc3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuICA3ODpcXHRcXHRcXHRlcnJvciA9IHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmdwKTtcXG4gIDc5OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gIDgwOlxcdFxcdH1cXG4gIDgxOlxcdFxcdGNhc2UgQVRNX1NFVFNDOlxcbiAgODI6XFx0XFx0XFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIkFUTV9TRVRTQyBpcyBvYnNvbGV0ZTsgdXNlZCBieSAlczolZFxcXFxuXFxcIixcXG4gIDgzOlxcdFxcdFxcdFxcdFxcdCAgICAgY3VycmVudC1cXHUwMDNlY29tbSwgdGFza19waWRfbnIoY3VycmVudCkpO1xcbiAgODQ6XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiAgODU6XFx0XFx0XFx0Z290byBkb25lO1xcbiAgODY6XFx0XFx0Y2FzZSBBVE1fU0VUQkFDS0VORDpcXG4gIDg3OlxcdFxcdGNhc2UgQVRNX05FV0JBQ0tFTkRJRjpcXG4gIDg4OlxcdFxcdHtcXG4gIDg5OlxcdFxcdFxcdGF0bV9iYWNrZW5kX3QgYmFja2VuZDtcXG4gIDkwOlxcdFxcdFxcdGVycm9yID0gZ2V0X3VzZXIoYmFja2VuZCwgKGF0bV9iYWNrZW5kX3QgX191c2VyICopYXJncCk7XFxuICA5MTpcXHRcXHRcXHRpZiAoZXJyb3IpXFxuICA5MjpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuICA5MzpcXHRcXHRcXHRzd2l0Y2ggKGJhY2tlbmQpIHtcXG4gIDk0OlxcdFxcdFxcdGNhc2UgQVRNX0JBQ0tFTkRfUFBQOlxcbiAgOTU6XFx0XFx0XFx0XFx0cmVxdWVzdF9tb2R1bGUoXFxcInBwcG9hdG1cXFwiKTtcXG4gIDk2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgOTc6XFx0XFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9CUjI2ODQ6XFxuICA5ODpcXHRcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShcXFwiYnIyNjg0XFxcIik7XFxuICA5OTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTAwOlxcdFxcdFxcdH1cXG4gMTAxOlxcdFxcdFxcdGJyZWFrO1xcbiAxMDI6XFx0XFx0fVxcbiAxMDM6XFx0XFx0fVxcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRlcnJvciA9IC1FTk9JT0NUTENNRDtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aW9jdGxfbXV0ZXgpO1xcbiAxMDg6XFx0XFx0bGlzdF9mb3JfZWFjaChwb3MsIFxcdTAwMjZpb2N0bF9saXN0KSB7XFxuIDEwOTpcXHRcXHRcXHRzdHJ1Y3QgYXRtX2lvY3RsICppYyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgYXRtX2lvY3RsLCBsaXN0KTtcXG4gMTEwOlxcdFxcdFxcdGlmICh0cnlfbW9kdWxlX2dldChpYy1cXHUwMDNlb3duZXIpKSB7XFxuIDExMTpcXHRcXHRcXHRcXHRlcnJvciA9IGljLVxcdTAwM2Vpb2N0bChzb2NrLCBjbWQsIGFyZyk7XFxuIDExMjpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KGljLVxcdTAwM2Vvd25lcik7XFxuIDExMzpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKVxcbiAxMTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDExNTpcXHRcXHRcXHR9XFxuIDExNjpcXHRcXHR9XFxuIDExNzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmlvY3RsX211dGV4KTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0aWYgKGVycm9yICE9IC1FTk9JT0NUTENNRClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MTY6MzUuNzUzNTczOTAxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4Mjk0OTE3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFBvQVRNIElPQ1RMIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBJT0NUTCBjYWxscyBhcmUgaGFuZGxlZCBmb3IgUFBQb0FUTS4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGRvX3ZjY19pb2N0bGAgaXMgdGhlIGtleSBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gaXRlcmF0ZSB0aHJvdWdoIGFuIGBpb2N0bF9saXN0YCBhbmQgY2FsbHMgYGljLVx1MDAzZWlvY3RsYCwgd2hpY2gsIGluIHRoaXMgY2FzZSwgaXMgZ29pbmcgdG8gYmUgYHBwcG9hdG1faW9jdGxgLiBUaGF04oCZcyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5Ob3csIGBwcHBvYXRtX2lvY3RsYCB1bHRpbWF0ZWx5IGNhbGxzIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNhbGwgY2hhaW4uIEkndmUgYWxyZWFkeSBjb25maXJtZWQgdGhhdCBgcHBwb2F0bV9hc3NpZ25fdmNjYCBpcyBzdGF0aWMgYW5kIGxvY2FsIHdpdGhpbiBgcHBwb2F0bS5jYCwgc28gSSdtIG5vdCBvdmVybHkgY29uY2VybmVkIHdpdGggaXQncyBzY29wZSwgZm9yIHRoZSBtb21lbnQuIEJ1dCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgYnkgdmVyaWZ5aW5nIHRoZSBvdGhlciBzeW1ib2xzIGluIGBwcHBvYXRtLmNgIGxpa2UgYHBwcG9hdG1faW9jdGxgLCBgcHBwb2F0bV9pbml0YCwgYW5kIGBwcHBvYXRtX3NlbmRgIC0gYXJlIHRoZXkgc3RhdGljLCBvciBhcmUgdGhleSBleHBvcnRlZD8gQXJlIHRoZXJlIGFueSB0aGF0IGFyZSBub24taW5saW5lZD8gSSdtIGdvaW5nIHRvIGxvb2sgYXQgb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgdmNjX2lvY3RsYCBpbiBgbmV0L2F0bS9pb2N0bC5jYCwgYXMgd2VsbCwgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmZhY2UuXG5cblRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGluZ3MsIEknbSBnb2luZyB0byBmb2N1cyBvbiBjaGVja2luZyB0aGUgZXhwb3J0ZWQgYW5kIHB1YmxpYyBzeW1ib2xzIGluIGJvdGggYG5ldC9hdG0vaW9jdGwuY2AgYW5kIGBwcHBvYXRtLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB0aWVkIHRvZ2V0aGVyLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjozOS41ODMwNjg3MjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4OTUxNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmg9MjA9X19wb2xsX3QgdmNjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndhaXQpO1xcbm5ldC9hdG0vY29tbW9uLmg6MjE6aW50IHZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxubmV0L2F0bS9jb21tb24uaC0yMi1pbnQgdmNjX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuLS1cXG5uZXQvYXRtL2lvY3RsLmM9NDE9RVhQT1JUX1NZTUJPTChkZXJlZ2lzdGVyX2F0bV9pb2N0bCk7XFxubmV0L2F0bS9pb2N0bC5jLTQyLVxcbm5ldC9hdG0vaW9jdGwuYzo0MzpzdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbm5ldC9hdG0vaW9jdGwuYy00NC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZywgaW50IGNvbXBhdClcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy0xNjktXFxubmV0L2F0bS9pb2N0bC5jOjE3MDppbnQgdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbm5ldC9hdG0vaW9jdGwuYy0xNzEte1xcbm5ldC9hdG0vaW9jdGwuYzoxNzI6XFx0cmV0dXJuIGRvX3ZjY19pb2N0bChzb2NrLCBjbWQsIGFyZywgMCk7XFxubmV0L2F0bS9pb2N0bC5jLTE3My19XFxuLS1cXG5uZXQvYXRtL2lvY3RsLmM9MjgyPWludCB2Y2NfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmMtMjg2LVxcbm5ldC9hdG0vaW9jdGwuYzoyODc6XFx0cmV0ID0gZG9fdmNjX2lvY3RsKHNvY2ssIGNtZCwgYXJnLCAxKTtcXG5uZXQvYXRtL2lvY3RsLmMtMjg4LVxcdGlmIChyZXQgIT0gLUVOT0lPQ1RMQ01EKVxcbi0tXFxubmV0L2F0bS9wdmMuYz0xMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHZjX3Byb3RvX29wcyA9IHtcXG4tLVxcbm5ldC9hdG0vcHZjLmMtMTE2LVxcdC5wb2xsID1cXHRcXHR2Y2NfcG9sbCxcXG5uZXQvYXRtL3B2Yy5jOjExNzpcXHQuaW9jdGwgPVxcdHZjY19pb2N0bCxcXG5uZXQvYXRtL3B2Yy5jLTExOC0jaWZkZWYgQ09ORklHX0NPTVBBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjozOS42NzIwMjUwODhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwNjY5ODkyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEFUTSBQUFBvQVRNIGlvY3RsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSd2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0IHdpdGhpbiB0aGUgQVRNL1BQUG9BVE0gc3Vic3lzdGVtLiBXZSdyZSBsb29raW5nIGF0IGB2Y2NfaW9jdGxgIGFuZCBgdmNjX2NvbXBhdF9pb2N0bGAgaW4gYG5ldC9hdG0vaW9jdGwuY2AsIGJ1dCB0aGUgcmVhbCBpbnRlcmVzdCBsaWVzIGluIGBwcHBvYXRtLmNgLiBXZSBoYXZlIGBwcHBvYXRtX2lvY3RsYCwgd2hpY2ggZ2V0cyBhc3NpZ25lZCB0byB0aGUgYHBwcG9hdG1faW9jdGxfb3BzLmlvY3RsYCBzdHJ1Y3R1cmUgYW5kIGNydWNpYWxseSwgc2luY2UgdGhpcyBmdW5jdGlvbidzIGFkZHJlc3MgaXMgdGFrZW4sIGl0IHdvbid0IGJlIGlubGluZWQuIFRoaXMgbWVhbnMgd2UnbGwgZGVmaW5pdGVseSBzZWUgaXQgYXMgYSBzeW1ib2wuIFRoZW4gd2UgaGF2ZSBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcG9hdG1fcHVzaGAsIGBwcHBvYXRtX3BvcGAsIGFuZCBgcHBwb2F0bV9yZWxlYXNlX2NiYCB3aXRoaW4gdGhhdCBmaWxlLCB0aG91Z2ggYHBwcG9hdG1faW9jdGxgIGFuZCBgdmNjX2lvY3RsYCBhcmUgb3VyIHByaW1hcnkgZm9jdXMuIGB2Y2NfaW9jdGxgIGlzIHNwZWNpZmljYWxseSB0aGUgbWFpbiBpb2N0bCBlbnRyeXBvaW50IGhlcmUuXG5cbk5vdywgaXMgdGhpcyBcIldvcnRoRnV6emluZ1wiPyBMZXQncyBldmFsdWF0ZS4gRmlyc3QsIGl0J3Mgbm90IHB1cmVseSBkZWNvcmF0aXZlLiBUaGVyZSdzIGEgZnVuY3Rpb25hbCBjaGVjayBpbiB0aGVyZSAoYGlmIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2ApIHRoYXQgcHJldmVudHMgZG91YmxlLWFzc2lnbm1lbnQgb2YgYHVzZXJfYmFja2AsIHNvIHRoZXJlJ3Mgc3RhdGVmdWwgbG9naWMgYXQgcGxheS4gU2Vjb25kLCBpdCBkb2Vzbid0IGFwcGVhciB0byBiZSB0aWVkIHRvIHNwZWNpZmljIHZlbmRvciBvciBwaHlzaWNhbCBoYXJkd2FyZTsgdGhlc2UgQVRNIHNvY2tldHMgYW5kIFBQUG9BVE0gY2hhbm5lbHMgY2FuIGJlIG1hZGUgaW4gdXNlcnNwYWNlLCB2aWEgc3RhbmRhcmQgc29ja2V0IGNhbGxzLiBUaGlyZCwgaXQncyBub3Qgc2ltcGx5IGEgc2h1dGRvd24vcmVtb3ZlIHBhdGguIEFuZCBmb3VydGgsIGNyaXRpY2FsbHksIGl0J3MgcmVhY2hhYmxlIHZpYSBgaW9jdGwoZmQsIEFUTV9TRVRCQUNLRU5ELCBcdTAwMjZhcmcpYCBvbiBhbiBBVE0gc29ja2V0LiBCaW5nby4gV29ydGhGdXp6aW5nID0gVHJ1ZS5cblxuV2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQuIGBBVE1gLCBgUFBQYCwgYW5kIGBQUFBPQVRNYCBhcmUgbmVjZXNzYXJ5LiBMb29raW5nIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMsIGBBVE1gIGlzIHNvdXJjZWQgZnJvbSBgbmV0L2F0bS9LY29uZmlnYCBhbmQgZGVwZW5kcyBvbiBgTkVUYCwgd2hpY2ggaXMgc3RhbmRhcmQuIGBQUFBgIGlzIGluIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgYW5kIGRlcGVuZHMgb24gYE5FVERFVklDRVNgLCBhbmQgYFBQUE9BVE1gIGFsc28gZGVwZW5kcyBvbiBib3RoIGBQUFBgIGFuZCBgQVRNYC4gUFBQIGFsc28gc2VsZWN0cyBgU0xIQ2AuIEZpbmFsbHksIGBQUFBPQVRNYCBhbHNvIGRlcGVuZHMgb24gYEFUTWAgaW5zaWRlIGBpZiBQUFBgLiBDb25maXJtZWQsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyLlxuXG5MZXQncyByZWZpbmUgdGhlIHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdlIGtub3cgYHBwcG9hdG1faW9jdGxgIGFuZCBgdmNjX2lvY3RsYCBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgdGhlIGV4cG9zZWQgaW9jdGwgaGFuZGxlcnMuIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBwcHBvYXRtX2lvY3RsYC4gQ29tcGlsZXIgaW5saW5pbmcgY291bGQgZm9sZCBpdCBpbnRvIGBwcHBvYXRtX2lvY3RsYC4gQWRkaW5nIGl0IGFzIGEgc3ltYm9sIG1ha2VzIHNlbnNlLlxuXG5Pa2F5LCBxdWljayBzdW1tYXJ5IGFuZCBmaW5hbCBzYW5pdHkgY2hlY2s6XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKlxuKiAgICoqRW5hYmxlQ29uZmlnczogXFxb4oCcQVRN4oCdLCDigJxQUFDigJ0sIOKAnFBQUE9BVE3igJ1dLioqXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcW+KAnHBwcG9hdG1cXF9pb2N0bOKAnSwg4oCccHBwb2F0bVxcX2Fzc2lnblxcX3ZjY+KAnSwg4oCcdmNjXFxfaW9jdGzigJ1dLioqXG4qICAgKipSZWFzb25pbmc6KiogSWRlbnRpZmllZCBgcHBwb2F0bV9pb2N0bGAgYW5kIGB2Y2NfaW9jdGxgIGFzIHJlYWNoYWJsZSBpb2N0bCBlbnRyeXBvaW50cywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBjb25maWd1cmF0aW9uIG9mIEFUTS9QUFBvQVRNLiBUaGUgYHBwcG9hdG1fYXNzaWduX3ZjY2AgZnVuY3Rpb24gaXMgc3RhdGljLCB3aGljaCBtYXkgYmUgaW5saW5lZCBpbnRvIGBwcHBvYXRtX2lvY3RsYCwgYnV0IGluY2x1ZGluZyBpdCBoZXJlIGluY3JlYXNlcyBjb3ZlcmFnZS5cblxuV2UncmUgZ29vZCB0byBnby4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MTYsIk91dHB1dFRva2VucyI6MTU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjUzLjczOTAxNzQyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODY4NDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9BVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgICBcInZjY19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcHBvYXRtX2Fzc2lnbl92Y2MoKSBlbnN1cmluZyB0aGF0IGFuIEFUTSBWQ0MgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgYmFja2VuZC91c2VyX2JhY2sgYXNzaWduZWQgYmVmb3JlIGFsbG9jYXRpbmcgYW5kIGF0dGFjaGluZyBhIG5ldyBwcHBvYXRtX3ZjYywgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBhbmQgc3RhdGUgY29ycnVwdGlvbiB3aGVuIHJlLWFzc2lnbmluZyBiYWNrZW5kcyBvbiB0aGUgc2FtZSBzb2NrZXQgdmlhIEFUTV9TRVRCQUNLRU5EIGlvY3RsLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBVE0gc29ja2V0IGlvY3RscyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9BVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgICBcInZjY19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcHBvYXRtX2Fzc2lnbl92Y2MoKSBlbnN1cmluZyB0aGF0IGFuIEFUTSBWQ0MgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgYmFja2VuZC91c2VyX2JhY2sgYXNzaWduZWQgYmVmb3JlIGFsbG9jYXRpbmcgYW5kIGF0dGFjaGluZyBhIG5ldyBwcHBvYXRtX3ZjYywgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBhbmQgc3RhdGUgY29ycnVwdGlvbiB3aGVuIHJlLWFzc2lnbmluZyBiYWNrZW5kcyBvbiB0aGUgc2FtZSBzb2NrZXQgdmlhIEFUTV9TRVRCQUNLRU5EIGlvY3RsLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBVE0gc29ja2V0IGlvY3RscyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE2OjUzLjg2NzcwODUwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4MzY3NTk0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjo1My44NjgxNjgxMDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODgzNjI5Mjg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJ1c3kgY2hlY2sgKGBpZiAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Mjc4MjMxNmMzZGY1NWFhZDg1NzFhNDgwN2UzZTYwYWI4MjA0OTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNjoxNTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkzYmEyMmY0MzdiYzkgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC0zOTYsNiArMzk2LDggQEAgc3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiBcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiBcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spXG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xuIFx0aWYgKHB2Y2MgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNjo1My44NjgxNjkwNDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjcxMTYwMTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUG9BVE0gVkNDIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L2F0bS9wcHBvYXRtLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGZ1bmN0aW9uLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgZGlmZi4gSXQncyBhZGRpbmcgYSBjaGVjaywgYW5kIHRoZSBjb250ZXh0IGlzIGNsZWFyOiB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhc3NpZ25pbmcgYSB2aXJ0dWFsIGNpcmN1aXQgY29ubmVjdGlvbiAoVkNDKSB3aXRoaW4gdGhlIFBQUG9BVE0gY29udGV4dC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29kZSwgYXJvdW5kIGxpbmUgMzk2LCBzdGFydHMgd2l0aCB2YWxpZGF0aW9uIG9mIHRoZSBlbmNhcHN1bGF0aW9uIHR5cGUgKGBiZS5lbmNhcHNgKS4gIEl0IGxvb2tzIGxpa2UgaXQncyBlbnN1cmluZyB0aGUgZW5jYXBzdWxhdGlvbiBpcyBlaXRoZXIgYXV0by1kZXRlY3RlZCwgb3IgZXhwbGljaXRseSBzZXQgdG8gVkMgKFZpcnR1YWwgQ2lyY3VpdCkgb3IgTExDIChMb2dpY2FsIExpbmsgQ29udHJvbCkuIE1ha2VzIHNlbnNlLCBzdGFuZGFyZCBQUFBvQVRNIHN0dWZmLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYGlmIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2AuIFRoYXQncyB0aGUga2V5IGFkZGl0aW9uLlxuXG5TbywgKnRoaXMqIGlzIHRoZSBjaGFuZ2UuICBUaGUgZnVuY3Rpb24gaXMgbm93IGNoZWNraW5nIGlmIGBhdG12Y2MtXHUwMDNldXNlcl9iYWNrYCBpcyBzZXQuIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBwcmV2ZW50IHJlLWFzc2lnbm1lbnQgb3IgY29uZmxpY3QgaWYgYSB1c2VyLXNwYWNlIGNvbXBvbmVudCBpcyBhbHJlYWR5IHVzaW5nIHRoZSBWQ0MuIEEgYnVzeSBzaWduYWwgaXMgcmV0dXJuZWQgdG8gaW5kaWNhdGUgdGhlIFZDQyBpcyBhbHJlYWR5IGluIHVzZSwgZWZmZWN0aXZlbHkgcHJldmVudGluZyBtdWx0aXBsZSB1c2VycyBmcm9tIHN0ZXBwaW5nIG9uIGVhY2ggb3RoZXIuIEdpdmVuIHRoZSBzdHJ1Y3R1cmUsIEkgY2FuIHJlYXNvbmFibHkgaW5mZXIgdGhhdCBgYXRtdmNjLVx1MDAzZXVzZXJfYmFja2AgbGlrZWx5IHBvaW50cyB0byBzb21lIGRhdGEgb3Igc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCBhIHVzZXItc3BhY2UgZW50aXR5IHRoYXQgaGFzIGFscmVhZHkgY2xhaW1lZCB0aGUgVkNDLiBJJ2xsIG5lZWQgdG8gZ28gZGVlcGVyIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpY2FsbHkgdXNlcl9iYWNrIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBCdXQgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgY2xlYXIgLSBhIHNpbXBsZSwgYnV0IGltcG9ydGFudCwgY2hlY2sgZm9yIHJlc291cmNlIGNvbnRlbnRpb24uIEdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzowMC41Nzk3NzI4ODFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wcHBvYXRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdFxcdHJldHVybiAtRU5PVFRZO1xcbiAzODE6XFx0fVxcbiAzODI6XFx0XFxuIDM4MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcXG4gMzg0OlxcdFxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbiAzODU6XFx0XFx0LmlvY3RsID0gcHBwb2F0bV9kZXZwcHBfaW9jdGwsXFxuIDM4NjpcXHR9O1xcbiAzODc6XFx0XFxuIDM4ODpcXHRzdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxcbiAzODk6XFx0e1xcbiAzOTA6XFx0XFx0c3RydWN0IGF0bV9iYWNrZW5kX3BwcCBiZTtcXG4gMzkxOlxcdFxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcXG4gMzkyOlxcdFxcdGludCBlcnI7XFxuIDM5MzpcXHRcXG4gMzk0OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YmUsIGFyZywgc2l6ZW9mIGJlKSlcXG4gMzk1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzOTY6XFx0XFx0aWYgKGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUIFxcdTAwMjZcXHUwMDI2XFxuIDM5NzpcXHRcXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFxcdTAwMjZcXHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXFxuIDM5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzk5OlxcdFxcdGlmIChhdG12Y2MtXFx1MDAzZXVzZXJfYmFjaylcXG4gNDAwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDQwMTpcXHRcXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xcbiA0MDI6XFx0XFx0aWYgKHB2Y2MgPT0gTlVMTClcXG4gNDAzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0MDQ6XFx0XFx0cHZjYy1cXHUwMDNlYXRtdmNjID0gYXRtdmNjO1xcbiA0MDU6XFx0XFxuIDQwNjpcXHRcXHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cXG4gNDA3OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnB2Y2MtXFx1MDAzZWluZmxpZ2h0LCBOT05FX0lORkxJR0hUKTtcXG4gNDA4OlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVxcdTAwM2VwdXNoO1xcbiA0MDk6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX3BvcCA9IGF0bXZjYy1cXHUwMDNlcG9wO1xcbiA0MTA6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX293bmVyID0gYXRtdmNjLVxcdTAwM2Vvd25lcjtcXG4gNDExOlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVxcdTAwM2VyZWxlYXNlX2NiO1xcbiA0MTI6XFx0XFx0cHZjYy1cXHUwMDNlZW5jYXBzID0gKGVudW0gcHBwb2F0bV9lbmNhcHMpIGJlLmVuY2FwcztcXG4gNDEzOlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XFxuIDQxNDpcXHRcXHRwdmNjLVxcdTAwM2VjaGFuLm9wcyA9IFxcdTAwMjZwcHBvYXRtX29wcztcXG4gNDE1OlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVxcdTAwM2Vxb3MudHh0cC5tYXhfc2R1IC0gUFBQX0hEUkxFTiAtXFxuIDQxNjpcXHRcXHQgICAgKGJlLmVuY2FwcyA9PSBlX3ZjID8gMCA6IExMQ19MRU4pO1xcbiA0MTc6XFx0XFx0dGFza2xldF9zZXR1cChcXHUwMDI2cHZjYy1cXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XFxuIDQxODpcXHRcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2cHZjYy1cXHUwMDNlY2hhbik7XFxuIDQxOTpcXHRcXHRpZiAoZXJyICE9IDApIHtcXG4gNDIwOlxcdFxcdFxcdGtmcmVlKHB2Y2MpO1xcbiA0MjE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDIyOlxcdFxcdH1cXG4gNDIzOlxcdFxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG4gNDI0OlxcdFxcdGF0bXZjYy1cXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcXG4gNDI1OlxcdFxcdGF0bXZjYy1cXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XFxuIDQyNjpcXHRcXHRhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XFxuIDQyNzpcXHRcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiA0Mjg6XFx0XFx0YXRtdmNjLVxcdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHQvKiByZS1wcm9jZXNzIGV2ZXJ5dGhpbmcgcmVjZWl2ZWQgYmV0d2VlbiBjb25uZWN0aW9uIHNldHVwIGFuZFxcbiA0MzE6XFx0XFx0ICAgYmFja2VuZCBzZXR1cCAqL1xcbiA0MzI6XFx0XFx0dmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShhdG12Y2MpO1xcbiA0MzM6XFx0XFx0cmV0dXJuIDA7XFxuIDQzNDpcXHR9XFxuIDQzNTpcXHRcXG4gNDM2OlxcdC8qXFxuIDQzNzpcXHQgKiBUaGlzIGhhbmRsZXMgaW9jdGxzIGFjdHVhbGx5IHBlcmZvcm1lZCBvbiBvdXIgdmNjIC0gd2UgbXVzdCByZXR1cm5cXG4gNDM4OlxcdCAqIC1FTk9JT0NUTENNRCBmb3IgYW55IHVucmVjb2duaXplZCBpb2N0bFxcbiA0Mzk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE3OjAwLjU3OTg0ODg2MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDA2NzM0NTI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUFBQIG92ZXIgQVRNIFZDQyBBc3NpZ25tZW50IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB0aHJvdWdoIGFuIGBpb2N0bGAgb3BlcmF0aW9uIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBBVE0gYW5kIFBQUCBiYWNrZW5kcy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGJlZm9yZSB0aGlzIHBhdGNoLCB3YXMgdGhhdCBgcHBwb2F0bV9hc3NpZ25fdmNjYCB3b3VsZCBibGluZGx5IHJlLWFsbG9jYXRlIHJlc291cmNlcyBmb3IgYW4gYWxyZWFkeSBjb25maWd1cmVkIGBhdG12Y2NgLiBUaGlzIG1lYW50IGEgbmV3IGBwdmNjYCB3YXMgY3JlYXRlZCwgb3ZlcndyaXRpbmcgY3JpdGljYWwgcG9pbnRlcnMgbGlrZSBgb2xkX3B1c2hgIGFuZCBgb2xkX3BvcGAgaW4gYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgIHdpdGhvdXQgZGVhbGxvY2F0aW5nIHRoZSBvbGQgb25lcywgbGVhZGluZyB0byBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBhbmQgZ2VuZXJhbCBzdGF0ZSBjb3JydXB0aW9uIOKAkyBhbGwgcHJldHR5IG5hc3R5IHN0dWZmLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgY2hlY2s6IGBpZiAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjaykgcmV0dXJuIC1FQlVTWTtgLiBFc3NlbnRpYWxseSwgd2UncmUgbm93IHByZXZlbnRpbmcgdGhlIHJlLWFzc2lnbm1lbnQgaWYgYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgIGlzIGFscmVhZHkgcG9wdWxhdGVkLiBTbWFydCBtb3ZlLlxuXG5Ob3csIG15IHByaW1hcnkgY29uY2VybiB3aXRoIGFueSBzdWNoIHBhdGNoIGlzOiBkb2VzIGl0IGludHJvZHVjZSAqbmV3KiByaXNrcywgZXZlbiBhcyBpdCBmaXhlcyB0aGUgb2xkIG9uZT8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzLiBTbywgSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlc2UgcG9zc2liaWxpdGllczpcblxuKiAgICoqVW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB3ZSdyZSBub3QgY29weWluZyBhbnkgcG90ZW50aWFsbHkgZ2FyYmFnZSBkYXRhIGludG8gdXNlci1hY2Nlc3NpYmxlIHNwYWNlLiBUaGF0J3MgZ29vZC5cbiogICAqKkJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBObywgdGhlIGNvZGUgaXMgY2hlY2tpbmcgYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgLCB3aGljaCBpcyBhIHBvaW50ZXIgd2l0aGluIGEgYHN0cnVjdCBhdG1fdmNjYC5cbiogICAqKkNoYW5nZXMgdG8gYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzPyoqIE5vLCB3ZSBhcmVuJ3QgbWVzc2luZyB3aXRoIGJ1ZmZlciBzaXplcy4gVGhhdCdzIGFub3RoZXIgYXJlYSB3aGVyZSB0aGluZ3MgY2FuIGdvIHdyb25nLlxuKiAgICoqS01TQU4tc3BlY2lmaWMgaXNzdWVzPyoqIE5vcGUsIHRoaXMgb25lIGlzIHB1cmVseSBhIHNhZmVndWFyZCBhZ2FpbnN0IGEga25vd24gaXNzdWUsIHdoaWNoIHNob3VsZCBiZSBkZXRlY3RhYmxlIHdpdGggS0FTQU4vS01FTUxFQUsuXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgYXRtdmNjLVx1MDAzZXVzZXJfYmFja2AgbWVtYmVyIGluIHRoZSBgbmV0L2F0bWAgY29kZS4gSXQncyB0aW1lIHRvIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgYHVzZXJfYmFja2Agd2l0aGluIHRoZSBBVE0gc3Vic3lzdGVtIGNvZGUgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGluIG15IGluaXRpYWwgYXNzZXNzbWVudC4gTGV0J3MgbWFrZSBzdXJlIHRoaXMgcGF0Y2ggcmVhbGx5IGRvZXMgd2hhdCBpdCBzYXlzIG9uIHRoZSB0aW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzoxNC42NDcxOTc5MTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjM5NDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX2JhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL2JyMjY4NC5jPTExMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBicjI2ODRfdmNjICpCUjI2ODRfVkNDKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxubmV0L2F0bS9icjI2ODQuYy0xMTQte1xcbm5ldC9hdG0vYnIyNjg0LmM6MTE1OlxcdHJldHVybiAoc3RydWN0IGJyMjY4NF92Y2MgKikoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spO1xcbm5ldC9hdG0vYnIyNjg0LmMtMTE2LX1cXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmM9NDA4PXN0YXRpYyB2b2lkIGJyMjY4NF9jbG9zZV92Y2Moc3RydWN0IGJyMjY4NF92Y2MgKmJydmNjKVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy00MTMtXFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2ZGV2c19sb2NrKTtcXG5uZXQvYXRtL2JyMjY4NC5jOjQxNDpcXHRicnZjYy1cXHUwMDNlYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2sgPSBOVUxMO1xcdC8qIHdoYXQgYWJvdXQgdmNjLVxcdTAwM2VyZWN2cSA/Pz8gKi9cXG5uZXQvYXRtL2JyMjY4NC5jLTQxNS1cXHRicnZjYy1cXHUwMDNlYXRtdmNjLVxcdTAwM2VyZWxlYXNlX2NiID0gYnJ2Y2MtXFx1MDAzZW9sZF9yZWxlYXNlX2NiO1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz01MzA9c3RhdGljIGludCBicjI2ODRfcmVndmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICogYXJnKVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy01ODktXFx0YnJ2Y2MtXFx1MDAzZWF0bXZjYyA9IGF0bXZjYztcXG5uZXQvYXRtL2JyMjY4NC5jOjU5MDpcXHRhdG12Y2MtXFx1MDAzZXVzZXJfYmFjayA9IGJydmNjO1xcbm5ldC9hdG0vYnIyNjg0LmMtNTkxLVxcdGJydmNjLVxcdTAwM2VlbmNhcHMgPSAoZW51bSBicjI2ODRfZW5jYXBzKWJlLmVuY2FwcztcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTg5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTkwLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzo5MTpcXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTkyLX1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTE2Nz1zdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTc1LVxcdHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE3NjpcXHRhdG12Y2MtXFx1MDAzZXVzZXJfYmFjayA9IE5VTEw7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTc3LVxcdGtmcmVlKHB2Y2MpO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9Mzg4PXN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zOTgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2F0bS9wcHBvYXRtLmM6Mzk5OlxcdGlmIChhdG12Y2MtXFx1MDAzZXVzZXJfYmFjaylcXG5uZXQvYXRtL3BwcG9hdG0uYy00MDAtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQyMi1cXHR9XFxubmV0L2F0bS9wcHBvYXRtLmM6NDIzOlxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYy00MjQtXFx0YXRtdmNjLVxcdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzoxNC43NjM1OTcyNDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwOTA1MzUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipCUjI2ODQgUmVnaXN0cmF0aW9uIFx1MDAyNiBVc2VyIEJhY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBuZXQvYXRtL2JyMjY4NC5jYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgYnIyNjg0X3JlZ3ZjY2AgZnVuY3Rpb24gaXMgd2hlcmUgd2UgaGFuZGxlIHRoZSByZWdpc3RyYXRpb24gb2YgdmlydHVhbCBjaXJjdWl0IGNvbm5lY3Rpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIHNwZWNpZmljYWxseSBob3cgaXQgZGVhbHMgd2l0aCB0aGUgYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgIGZsYWcuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IHRoZXJl4oCZcyBhIGNoZWNrIGluIHRoZXJlLCBzb21ldGhpbmcgbGlrZSBgaWYgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCB0aGF04oCZcyBzdXBwb3NlZCB0byBwcmV2ZW50IGEgVkNDIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBpZiBpdCdzIGN1cnJlbnRseSBtYXJrZWQgYXMgaW4gdXNlIGJ5IGEgdXNlci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0J3MgdGhlIGNvcnJlY3QgbG9naWMgYW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIGl0LiBMZXQgbWUgZ28gYmFjayBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBpZiBJIHJlbWVtYmVyZWQgY29ycmVjdGx5LCBvciBub3QuIFRoZW4gSSdsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhhdCBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIGxpZmVjeWNsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjE3OjE3LjQ3MjY1MzExOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL2JyMjY4NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzMDpcXHRzdGF0aWMgaW50IGJyMjY4NF9yZWd2Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKiBhcmcpXFxuIDUzMTpcXHR7XFxuIDUzMjpcXHRcXHRzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2M7XFxuIDUzMzpcXHRcXHRzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXY7XFxuIDUzNDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjtcXG4gNTM1OlxcdFxcdHN0cnVjdCBhdG1fYmFja2VuZF9icjI2ODQgYmU7XFxuIDUzNjpcXHRcXHRpbnQgZXJyO1xcbiA1Mzc6XFx0XFxuIDUzODpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmJlLCBhcmcsIHNpemVvZiBiZSkpXFxuIDUzOTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNTQwOlxcdFxcdGJydmNjID0ga3phbGxvY19vYmooc3RydWN0IGJyMjY4NF92Y2MpO1xcbiA1NDE6XFx0XFx0aWYgKCFicnZjYylcXG4gNTQyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA1NDM6XFx0XFx0LypcXG4gNTQ0OlxcdFxcdCAqIEFsbG93IHR3byBwYWNrZXRzIGluIHRoZSBBVE0gcXVldWUuIE9uZSBhY3R1YWxseSBiZWluZyBzZW50LCBhbmQgb25lXFxuIDU0NTpcXHRcXHQgKiBmb3IgdGhlIEFUTSAnVFggZG9uZScgaGFuZGxlciB0byBzZW5kLiBJdCBzaG91bGRuJ3QgdGFrZSBsb25nIHRvIGdldFxcbiA1NDY6XFx0XFx0ICogdGhlIG5leHQgb25lIGZyb20gdGhlIG5ldGRldiBxdWV1ZSwgd2hlbiB3ZSBuZWVkIGl0LiBNb3JlIHRoYW4gdGhhdFxcbiA1NDc6XFx0XFx0ICogd291bGQgYmUgYnVmZmVyYmxvYXQuXFxuIDU0ODpcXHRcXHQgKi9cXG4gNTQ5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmJydmNjLVxcdTAwM2Vxc3BhY2UsIDIpO1xcbiA1NTA6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNmRldnNfbG9jayk7XFxuIDU1MTpcXHRcXHRuZXRfZGV2ID0gYnIyNjg0X2ZpbmRfZGV2KFxcdTAwMjZiZS5pZnNwZWMpO1xcbiA1NTI6XFx0XFx0aWYgKG5ldF9kZXYgPT0gTlVMTCkge1xcbiA1NTM6XFx0XFx0XFx0cHJfZXJyKFxcXCJ0cmllZCB0byBhdHRhY2ggdG8gbm9uLWV4aXN0ZW50IGRldmljZVxcXFxuXFxcIik7XFxuIDU1NDpcXHRcXHRcXHRlcnIgPSAtRU5YSU87XFxuIDU1NTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA1NTY6XFx0XFx0fVxcbiA1NTc6XFx0XFx0YnJkZXYgPSBCUlBSSVYobmV0X2Rldik7XFxuIDU1ODpcXHRcXHRpZiAoYXRtdmNjLVxcdTAwM2VwdXNoID09IE5VTEwpIHtcXG4gNTU5OlxcdFxcdFxcdGVyciA9IC1FQkFERkQ7XFxuIDU2MDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA1NjE6XFx0XFx0fVxcbiA1NjI6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZicmRldi1cXHUwMDNlYnJ2Y2NzKSkge1xcbiA1NjM6XFx0XFx0XFx0LyogT25seSAxIFZDQy9kZXYgcmlnaHQgbm93ICovXFxuIDU2NDpcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbiA1NjU6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gNTY2OlxcdFxcdH1cXG4gNTY3OlxcdFxcdGlmIChiZS5mY3NfaW4gIT0gQlIyNjg0X0ZDU0lOX05PIHx8XFxuIDU2ODpcXHRcXHQgICAgYmUuZmNzX291dCAhPSBCUjI2ODRfRkNTT1VUX05PIHx8XFxuIDU2OTpcXHRcXHQgICAgYmUuZmNzX2F1dG8gfHwgYmUuaGFzX3ZwaWlkIHx8IGJlLnNlbmRfcGFkZGluZyB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzoxNy40NzI3NDc1MzhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIzMTY4NDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbkFscmlnaHQsIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIEl0J3Mgc3RyYWlnaHRmb3J3YXJkOiB0aGV5J3JlIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgcHBwb2F0bV9hc3NpZ25fdmNjKClgIHRvIGVuc3VyZSB3ZSBkb24ndCBhY2NpZGVudGFsbHkgcmUtYXR0YWNoIG9yIHJlLWFzc2lnbiBhIGJhY2tlbmQgdG8gYW4gYGF0bV92Y2NgIHRoYXQgYWxyZWFkeSBoYXMgb25lLiBUaGUgY29uZGl0aW9uIGlzIHNpbXBsZTogYGlmIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2AuIFRoaXMgcHJldmVudHMgdGhlIHByb2JsZW1hdGljIHNjZW5hcmlvIHdoZXJlIGBhdG12Y2MtXHUwMDNldXNlcl9iYWNrYCBpc24ndCBOVUxMLlxuXG5SZWdhcmRpbmcgS01TQU4gdnMgS0FTQU4sIHRoaXMgaXMgYSBsb2dpYyBidWcsIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBXZSdyZSBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgYGF0bXZjYy1cdTAwM2V1c2VyX2JhY2tgIHBvaW50ZXIgaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIHNvY2tldC9WQ0MgYWxsb2NhdGlvbi4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IHJlLWFzc2lnbmluZyB0aGUgYmFja2VuZCBvdmVyd3JpdGVzIGNhbGxiYWNrcyBhbmQgb3RoZXIgcG9pbnRlcnMgd2l0aGluIHRoZSBgYXRtX3ZjY2Agd2l0aG91dCBwcm9wZXIgY2xlYW51cCwgbGVhZGluZyB0byBzdGF0ZSBjb3JydXB0aW9uIGFuZCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSB3aGVyZSBLQVNBTiwgTE9DS0RFUCwgYW5kIEtNRU1MRUFLIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgaXNzdWVzLCBzbyB3ZSBkZWZpbml0ZWx5IGRvbid0IG5lZWQgS01TQU4gaGVyZS4gYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0MiwiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjoxNzoyMi43MDQ0MzUzNjRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBidXN5IGNoZWNrIChgaWYgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKSByZXR1cm4gLUVCVVNZO2ApIGluIGBwcHBvYXRtX2Fzc2lnbl92Y2MoKWAgdG8gcHJldmVudCByZS1hc3NpZ25pbmcgYSBQUFBvQVRNIGJhY2tlbmQgdG8gYW4gQVRNIFZDQyB0aGF0IGFscmVhZHkgaGFzIGEgYmFja2VuZCBhdHRhY2hlZC4gVGhpcyBmaXhlcyBhIHN0YXRlIGNvcnJ1cHRpb24vcmVzb3VyY2UgbWFuYWdlbWVudCBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJ1c3kgY2hlY2sgKGBpZiAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spIHJldHVybiAtRUJVU1k7YCkgaW4gYHBwcG9hdG1fYXNzaWduX3ZjYygpYCB0byBwcmV2ZW50IHJlLWFzc2lnbmluZyBhIFBQUG9BVE0gYmFja2VuZCB0byBhbiBBVE0gVkNDIHRoYXQgYWxyZWFkeSBoYXMgYSBiYWNrZW5kIGF0dGFjaGVkLiBUaGlzIGZpeGVzIGEgc3RhdGUgY29ycnVwdGlvbi9yZXNvdXJjZSBtYW5hZ2VtZW50IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowr996q[1] Phase: Succeeded StartedAt: 2026-09-02 16:17:34 +0000 UTC FinishedAt: 2026-09-02 16:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 16:17:34 +0000 UTC FinishedAt: 2026-09-02 16:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2] Phase: Succeeded StartedAt: 2026-09-02 16:17:34 +0000 UTC FinishedAt: 2026-09-02 19:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 16:17:34 +0000 UTC FinishedAt: 2026-09-02 19:57:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 16:17:34 +0000 UTC FinishedAt: 2026-09-02 16:17:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 16:17:34 +0000 UTC FinishedAt: 2026-09-02 16:17:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr996q/series-workflowr996q-convert-artifact-282612829/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 16:17:44 +0000 UTC FinishedAt: 2026-09-02 16:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 16:17:44 +0000 UTC FinishedAt: 2026-09-02 16:35:10 +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:*4d7bb199-4bf9-46a4-b569-1d4f0ec69e95,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-workflowr996q/series-workflowr996q-convert-artifact-282612829/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": "87602dda-f968-4d12-a010-0738d448425c", "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-workflowr996q/series-workflowr996q-build-action-492513171/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 16:17:44 +0000 UTC FinishedAt: 2026-09-02 16:35:00 +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:*4d7bb199-4bf9-46a4-b569-1d4f0ec69e95,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-workflowr996q/series-workflowr996q-convert-artifact-282612829/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": "87602dda-f968-4d12-a010-0738d448425c", "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-workflowr996q/series-workflowr996q-build-action-492513171/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 16:35:10 +0000 UTC FinishedAt: 2026-09-02 16:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 16:35:10 +0000 UTC FinishedAt: 2026-09-02 16:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 16:35:10 +0000 UTC FinishedAt: 2026-09-02 16:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 16:35:10 +0000 UTC FinishedAt: 2026-09-02 16:35:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr996q/series-workflowr996q-convert-artifact-1201471800/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 16:35:31 +0000 UTC FinishedAt: 2026-09-02 16:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 16:35:31 +0000 UTC FinishedAt: 2026-09-02 16:37:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87602dda-f968-4d12-a010-0738d448425c,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-workflowr996q/series-workflowr996q-build-action-492513171/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-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 16:37:16 +0000 UTC FinishedAt: 2026-09-02 16:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 16:37:16 +0000 UTC FinishedAt: 2026-09-02 16:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 16:37:16 +0000 UTC FinishedAt: 2026-09-02 16:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 16:37:16 +0000 UTC FinishedAt: 2026-09-02 16:54:11 +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:*4d7bb199-4bf9-46a4-b569-1d4f0ec69e95,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-workflowr996q/series-workflowr996q-convert-artifact-1201471800/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": "5157dffb-0a31-423b-b998-41065dbc6646", "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-workflowr996q/series-workflowr996q-build-action-4122024484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 16:37:16 +0000 UTC FinishedAt: 2026-09-02 16:54:01 +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:*4d7bb199-4bf9-46a4-b569-1d4f0ec69e95,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-workflowr996q/series-workflowr996q-convert-artifact-1201471800/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": "5157dffb-0a31-423b-b998-41065dbc6646", "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-workflowr996q/series-workflowr996q-build-action-4122024484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 16:54:11 +0000 UTC FinishedAt: 2026-09-02 16:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 16:54:11 +0000 UTC FinishedAt: 2026-09-02 16:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 16:54:11 +0000 UTC FinishedAt: 2026-09-02 16:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 16:54:11 +0000 UTC FinishedAt: 2026-09-02 16:55:36 +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:*5157dffb-0a31-423b-b998-41065dbc6646,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-workflowr996q/series-workflowr996q-build-action-4122024484/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-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 16:55:46 +0000 UTC FinishedAt: 2026-09-02 19:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 16:55:46 +0000 UTC FinishedAt: 2026-09-02 19:57:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"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:*87602dda-f968-4d12-a010-0738d448425c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5157dffb-0a31-423b-b998-41065dbc6646,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-workflowr996q/series-workflowr996q-build-action-492513171/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-workflowr996q/series-workflowr996q-build-action-4122024484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 16:55:46 +0000 UTC FinishedAt: 2026-09-02 16:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 16:55:46 +0000 UTC FinishedAt: 2026-09-02 16:55:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"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-workflowr996q/series-workflowr996q-convert-artifact-3831841681/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 16:55:46 +0000 UTC FinishedAt: 2026-09-02 16:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 16:55:46 +0000 UTC FinishedAt: 2026-09-02 16:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 16:55:46 +0000 UTC FinishedAt: 2026-09-02 16:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 16:55:56 +0000 UTC FinishedAt: 2026-09-02 19:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr996q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_ioctl","pppoatm_assign_vcc","vcc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"570eb5aa-d006-478e-a1d3-db9ed1416076","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 16:55:56 +0000 UTC FinishedAt: 2026-09-02 19:57:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87602dda-f968-4d12-a010-0738d448425c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5157dffb-0a31-423b-b998-41065dbc6646,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-workflowr996q/series-workflowr996q-build-action-492513171/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-workflowr996q/series-workflowr996q-build-action-4122024484/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-workflowr996q/series-workflowr996q-convert-artifact-3831841681/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,}