Name: series-workflowmdd4d Phase: Succeeded StartedAt: 2026-09-08 12:32:55 +0000 UTC FinishedAt: 2026-09-08 16:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[0] Phase: Succeeded StartedAt: 2026-09-08 12:32:55 +0000 UTC FinishedAt: 2026-09-08 12:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 12:32:55 +0000 UTC FinishedAt: 2026-09-08 12:38:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRACING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRACING" ], "series_id": "cdf141a9-21eb-45f1-a428-b6846cc21164" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ring_buffer_map_get_reader", "tracing_buffers_ioctl", "ring_buffer_map", "rb_get_reader_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQUNJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgICAmIzM0O3JiX2dldF9yZWFkZXJfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvci93YXJuaW5nIGNvbmRpdGlvbiBpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKWAgd2hlbiBgcmJfZ2V0X3JlYWRlcl9wYWdlKClgIHJldHVybnMgTlVMTC4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgdHJpZ2dlcmluZyBgV0FSTl9PTighcmVhZGVyKWAsIGl0IG5vdyBvbmx5IHdhcm5zIGlmIGBjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2VgIGJlZm9yZSBqdW1waW5nIHRvIGBvdXRgLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgV0FSTl9PTiBhc3NlcnRpb24gbG9naWMgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKSBpbiBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYywgcmVsYXhpbmcgdGhlIGNvbmRpdGlvbiB3aGVuIHJiX2dldF9yZWFkZXJfcGFnZSgpIHJldHVybnMgTlVMTCB0byBvbmx5IHRyaWdnZXIgd2hlbiByZWFkZXJfcGFnZSBpcyBub3QgZXF1YWwgdG8gY29tbWl0X3BhZ2UuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUiBpb2N0bCBvbiB0cmFjZWZzIHBlci1DUFUgdHJhY2VfcGlwZV9yYXcgZmlsZXMgYWZ0ZXIgbW1hcHBpbmcgdGhlIGJ1ZmZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmNDhjMzlmNjA5YjdjNWI1MDcwOGVmNzBhYjZiMDA4YmI1MjRiMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEyOjM2OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbmluZGV4IDljMDNhNTU1YTZiYTIuLjk4MTMwMTgyZTA1ZGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbkBAIC03OTk1LDggJiM0Mzs3OTk1LDEwIEBAIGludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuLVx0aWYgKFdBUk5fT04oIXJlYWRlcikpXG4mIzQzO1x0aWYgKCFyZWFkZXIpIHtcbiYjNDM7XHRcdFdBUk5fT04oY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKTtcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cbiBcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVx1MDAzZWxvc3RfZXZlbnRzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQUNJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgICAmIzM0O3JiX2dldF9yZWFkZXJfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2Y0OGMzOWY2MDliN2M1YjUwNzA4ZWY3MGFiNmIwMDhiYjUyNGIyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTI6MzY6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IDljMDNhNTU1YTZiYTIuLjk4MTMwMTgyZTA1ZGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC03OTk1LDggJiM0Mzs3OTk1LDEwIEBAIGludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCiAJCWdvdG8gb3V0OwogCiAJcmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpOwotCWlmIChXQVJOX09OKCFyZWFkZXIpKQomIzQzOwlpZiAoIXJlYWRlcikgewomIzQzOwkJV0FSTl9PTihjcHVfYnVmZmVyLSZndDtyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLSZndDtjb21taXRfcGFnZSk7CiAJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAkvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqLwogCW1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLSZndDtsb3N0X2V2ZW50czsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmluZyBCdWZmZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgYW5kIHBpbnBvaW50IGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyB0b3VjaGVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvZGUuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgdXBkYXRlIGNlbnRlcnMgYXJvdW5kIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb24gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhpcyBjaGFuZ2UuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAuIEkgd2FudCB0byBzZWUgaXRzIGRlZmluaXRpb24sIGl0cyBpbW1lZGlhdGUgY2FsbGVycywgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBvZiB0aGUgcmluZyBidWZmZXIgbWVjaGFuaXNtLiBTZWVpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGludGVyYWN0aW9ucyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IGFuZCBpbnRlbnQgb2YgdGhlIGNoYW5nZS4gVGhpcyBpbml0aWFsIGV4cGxvcmF0aW9uIHdpbGwgaW5mb3JtIHRoZSBkaXJlY3Rpb24gb2YgbXkgZGVlcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc5ODA6XHRcdHJlYWRlcl9zaXplID0gcmJfcGFnZV9zaXplKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UpO1xuNzk4MTpcdFxuNzk4MjpcdFx0Lypcbjc5ODM6XHRcdCAqIFRoZXJlIGFyZSBkYXRhIHRvIGJlIHJlYWQgb24gdGhlIGN1cnJlbnQgcmVhZGVyIHBhZ2UsIHdlIGNhblxuNzk4NDpcdFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIuIEJ1dCBiZWZvcmUgdGhhdCwgd2UgYXNzdW1lIHRoZSBsYXR0ZXIgd2lsbCByZWFkXG43OTg1Olx0XHQgKiBldmVyeXRoaW5nLiBMZXQmIzM5O3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5LlxuNzk4NjpcdFx0ICovXG43OTg3Olx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZS1cdTAwM2VyZWFkIFx1MDAzYyByZWFkZXJfc2l6ZSkge1xuNzk4ODpcdFx0XHR3aGlsZSAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZS1cdTAwM2VyZWFkIFx1MDAzYyByZWFkZXJfc2l6ZSlcbjc5ODk6XHRcdFx0XHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcbjc5OTA6XHRcdFx0Z290byBvdXQ7XG43OTkxOlx0XHR9XG43OTkyOlx0XG43OTkzOlx0XHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXG43OTk0Olx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSA9PSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKVxuNzk5NTpcdFx0XHRnb3RvIG91dDtcbjc5OTY6XHRcbjc5OTc6XHRcdHJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTtcbjc5OTg6XHRcdGlmICghcmVhZGVyKSB7XG43OTk5Olx0XHRcdFdBUk5fT04oY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKTtcbjgwMDA6XHRcdFx0Z290byBvdXQ7XG44MDAxOlx0XHR9XG44MDAyOlx0XG44MDAzOlx0XHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xuODAwNDpcdFx0bWlzc2VkX2V2ZW50cyA9IGNwdV9idWZmZXItXHUwMDNlbG9zdF9ldmVudHM7XG44MDA1Olx0XG44MDA2Olx0XHRpZiAobWlzc2VkX2V2ZW50cykge1xuODAwNzpcdFx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKSB7XG44MDA4Olx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmRwYWdlID0gcmVhZGVyLVx1MDAzZXBhZ2U7XG44MDA5Olx0XHRcdFx0dW5zaWduZWQgaW50IGNvbW1pdDtcbjgwMTA6XHRcdFx0XHQvKlxuODAxMTpcdFx0XHRcdCAqIFVzZSB0aGUgcmVhbF9lbmQgZm9yIHRoZSBkYXRhIHNpemUsXG44MDEyOlx0XHRcdFx0ICogVGhpcyBnaXZlcyB1cyBhIGNoYW5jZSB0byBzdG9yZSB0aGUgbG9zdCBldmVudHNcbjgwMTM6XHRcdFx0XHQgKiBvbiB0aGUgcGFnZS5cbjgwMTQ6XHRcdFx0XHQgKi9cbjgwMTU6XHRcdFx0XHRpZiAocmVhZGVyLVx1MDAzZXJlYWxfZW5kKVxuODAxNjpcdFx0XHRcdFx0bG9jYWxfc2V0KFx1MDAyNmRwYWdlLVx1MDAzZWNvbW1pdCwgcmVhZGVyLVx1MDAzZXJlYWxfZW5kKTtcbjgwMTc6XHRcdFx0XHQvKlxuODAxODpcdFx0XHRcdCAqIElmIHRoZXJlIGlzIHJvb20gYXQgdGhlIGVuZCBvZiB0aGUgcGFnZSB0byBzYXZlIHRoZVxuODAxOTpcdFx0XHRcdCAqIG1pc3NlZCBldmVudHMsIHRoZW4gcmVjb3JkIGl0IHRoZXJlLlxuODAyMDpcdFx0XHRcdCAqL1xuODAyMTpcdFx0XHRcdGNvbW1pdCA9IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpO1xuODAyMjpcdFx0XHRcdGlmIChyYl9wYWdlX2NhcGFjaXR5KHJlYWRlcikgLSBjb21taXQgXHUwMDNlPSBzaXplb2YobWlzc2VkX2V2ZW50cykpIHtcbjgwMjM6XHRcdFx0XHRcdG1lbWNweShcdTAwMjZkcGFnZS1cdTAwM2VkYXRhW2NvbW1pdF0sIFx1MDAyNm1pc3NlZF9ldmVudHMsXG44MDI0Olx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKG1pc3NlZF9ldmVudHMpKTtcbjgwMjU6XHRcdFx0XHRcdGxvY2FsX2FkZChSQl9NSVNTRURfU1RPUkVELCBcdTAwMjZkcGFnZS1cdTAwM2Vjb21taXQpO1xuODAyNjpcdFx0XHRcdH1cbjgwMjc6XHRcdFx0XHRsb2NhbF9hZGQoUkJfTUlTU0VEX0VWRU5UUywgXHUwMDI2ZHBhZ2UtXHUwMDNlY29tbWl0KTtcbjgwMjg6XHRcdFx0fSBlbHNlIGlmICghV0FSTl9PTkNFKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cdTAwM2V0YWlsX3BhZ2UsXG44MDI5Olx0XHRcdFx0XHQgICAgICBcJiMzNDtSZWFkZXIgb24gY29tbWl0IHdpdGggJWxkIG1pc3NlZCBldmVudHNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxOAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgQ2FsbHNpdGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIGlzIGJlaW5nICp1c2VkKiBpbiB0aGlzIGNvZGViYXNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgY2FsbCBncmFwaC4gIEkgd2FudCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCwgdW5kZXIgd2hhdCBjb25kaXRpb25zLCBhbmQgd2hhdCBhcmd1bWVudHMgYXJlIGJlaW5nIHBhc3NlZCB0byBpdC4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYXJnZXIgZGVzaWduLiBBbSBJIGxvb2tpbmcgYXQgYSBjcml0aWNhbCBwYXRoPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gaG93IHJlYWRlcnMgYXJlIGFjcXVpcmVkPyBGaW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCB0byBhbnN3ZXJpbmcgYWxsIHRob3NlIHF1ZXN0aW9ucyBhbmQgcmVhbGx5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgSURFIG9yIG15IGdyZXAvZmluZCB1dGlsaXR5IHR1cm5zIHVwLiBUaGlzIGNhbGxzaXRlIGFuYWx5c2lzIGlzIHRoZSBseW5jaHBpbiB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmg9MjU0PWludCByaW5nX2J1ZmZlcl91bm1hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpO1xuaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oOjI1NTppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTtcbmluY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaC0yNTYtXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzkyNz1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjEtXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3OTYyOmludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYzLXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz03MzY1PXN0YXRpYyBsb25nIHRyYWNpbmdfYnVmZmVyc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4MC1cbmtlcm5lbC90cmFjZS90cmFjZS5jOjczODE6XHRcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgyLVx0XHRcdFx0XHRcdCAgaXRlci1cdTAwM2VjcHVfZmlsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBgdHJhY2UuY2AgaW9jdGwqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBjb250cm9sIGludGVyZmFjZS4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gYGtlcm5lbC90cmFjZS90cmFjZS5jYC4gSSBleHBlY3QgdGhlIGBpb2N0bGAgY2FsbHMgaW4gaGVyZSB3aWxsIGJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyB3aGVyZSB3ZSBjb25maWd1cmUsIGVuYWJsZSwgZGlzYWJsZSwgYW5kIHJldHJpZXZlIGRhdGEgZnJvbSB0aGUgdHJhY2Vwb2ludHMuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZy4gQXJlIHRoZXkgdXNpbmcgYSBzd2l0Y2ggc3RhdGVtZW50PyBXaGF0IGtpbmQgb2YgYXJndW1lbnRzIGFyZSB0aGV5IGV4cGVjdGluZz8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQga2luZCBvZiBzZWN1cml0eSBjaGVja3MgYXJlIHRoZXkgaW1wbGVtZW50aW5nPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdXNlci1wcm92aWRlZCBkYXRhIHBhc3NlZCB2aWEgdGhlIGlvY3RsIG51bWJlcnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgYXJndW1lbnRzLCBzbyBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgY2hlY2tpbmcgaG93IHRob3NlIGFyZ3VtZW50cyBhcmUgdmFsaWRhdGVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHJlbHlpbmcgb24gc3RyaWN0IHR5cGUgY2hlY2tpbmcsIHJhbmdlIHZhbGlkYXRpb24sIG9yIG1heWJlIGV2ZW4gc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGNhcGFiaWxpdHkgY2hlY2tzLiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIGdhdGV3YXkgZm9yIGFsbCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNpbmcgc3lzdGVtLCBhbmQgd2hlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSBsb29waG9sZXMgYXJlIGxpa2VseSB0byBiZSBmb3VuZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVpciBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgZW5vdWdoLCBvciBpZiBpdCBvcGVucyB0aGUgZG9vciB0byBhbnkgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgZXZlbiBwcml2aWxlZ2UgZXNjYWxhdGlvbiBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczNjU6XHRzdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuNzM2NjpcdHtcbjczNjc6XHRcdHN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm8gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjczNjg6XHRcdHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IFx1MDAyNmluZm8tXHUwMDNlaXRlcjtcbjczNjk6XHRcdGludCBlcnI7XG43MzcwOlx0XG43MzcxOlx0XHRpZiAoY21kID09IFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikge1xuNzM3MjpcdFx0XHRpZiAoIShmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spKSB7XG43MzczOlx0XHRcdFx0ZXJyID0gcmluZ19idWZmZXJfd2FpdChpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG43Mzc0Olx0XHRcdFx0XHRcdCAgICAgICBpdGVyLVx1MDAzZWNwdV9maWxlLFxuNzM3NTpcdFx0XHRcdFx0XHQgICAgICAgaXRlci1cdTAwM2V0ci1cdTAwM2VidWZmZXJfcGVyY2VudCxcbjczNzY6XHRcdFx0XHRcdFx0ICAgICAgIE5VTEwsIE5VTEwpO1xuNzM3NzpcdFx0XHRcdGlmIChlcnIpXG43Mzc4Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuNzM3OTpcdFx0XHR9XG43MzgwOlx0XG43MzgxOlx0XHRcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG43MzgyOlx0XHRcdFx0XHRcdFx0ICBpdGVyLVx1MDAzZWNwdV9maWxlKTtcbjczODM6XHRcdH0gZWxzZSBpZiAoY21kKSB7XG43Mzg0Olx0XHRcdHJldHVybiAtRU5PVFRZO1xuNzM4NTpcdFx0fVxuNzM4NjpcdFxuNzM4NzpcdFx0LypcbjczODg6XHRcdCAqIEFuIGlvY3RsIGNhbGwgd2l0aCBjbWQgMCB0byB0aGUgcmluZyBidWZmZXIgZmlsZSB3aWxsIHdha2UgdXAgYWxsXG43Mzg5Olx0XHQgKiB3YWl0ZXJzXG43MzkwOlx0XHQgKi9cbjczOTE6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZ0cmFjZV90eXBlc19sb2NrKTtcbjczOTI6XHRcbjczOTM6XHRcdC8qIE1ha2Ugc3VyZSB0aGUgd2FpdGVycyBzZWUgdGhlIG5ldyB3YWl0X2luZGV4ICovXG43Mzk0Olx0XHQodm9pZClhdG9taWNfZmV0Y2hfaW5jX3JlbGVhc2UoXHUwMDI2aXRlci1cdTAwM2V3YWl0X2luZGV4KTtcbjczOTU6XHRcbjczOTY6XHRcdHJpbmdfYnVmZmVyX3dha2Vfd2FpdGVycyhpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xuNzM5NzpcdFxuNzM5ODpcdFx0cmV0dXJuIDA7XG43Mzk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHJpbmcgYnVmZmVyIG1tYXAgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBuZWNlc3NhcnkuIFRpbWUgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGFuZCBsaXN0IG91dCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBhc3BlY3RzIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG5lZWQgdG8gYmUgY29uZmlndXJhYmxlIGFuZCBob3cgYmVzdCB0byBleHBvc2UgdGhvc2Uga25vYnMgdG8gdGhlIHVzZXIuIEkmIzM5O2xsIHN0YXJ0IGJ5IGxpc3Rpbmcgd2hhdCBzZWVtcyBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGVuLCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdmFyaW91cyBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMgYW5kIHRoZSBpbXBhY3QgdGhvc2UgY2hvaWNlcyBoYXZlIG9uIHRoZSBkZXNpZ24sIHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc4MzM9c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzgzOS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc4NDA6aW50IHJpbmdfYnVmZmVyX21hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03ODQxLVx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzkwOS0gKi9cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc5MTA6dm9pZCByaW5nX2J1ZmZlcl9tYXBfZHVwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5MTEte1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc5Mjc9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYxLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzk2MjppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzk2My17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzM2NT1zdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTczODAtXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3MzgxOlx0XHRyZXR1cm4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyLFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4Mi1cdFx0XHRcdFx0XHQgIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0MDU9c3RhdGljIHZvaWQgdHJhY2luZ19idWZmZXJzX21tYXBfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDA5LVxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQxMDpcdHJpbmdfYnVmZmVyX21hcF9kdXAoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyLCBpdGVyLVx1MDAzZWNwdV9maWxlKTtcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0MTEtfVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0Mzc9c3RhdGljIGludCB0cmFjaW5nX2J1ZmZlcnNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQ1MC1cbmtlcm5lbC90cmFjZS90cmFjZS5jOjc0NTE6XHRyZXQgPSByaW5nX2J1ZmZlcl9tYXAoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyLCBpdGVyLVx1MDAzZWNwdV9maWxlLCB2bWEpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQ1Mi1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS2VybmVsIFRyYWNlIEluc3RydW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBjYXBhYmlsaXRpZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IGhvdyB0aGluZ3MgYXJlIHB1dCB0b2dldGhlciBmb3IgdGhlIGBrZXJuZWwvdHJhY2VgIHN1YnN5c3RlbS4gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBNYWtlZmlsZWAgaW4gdGhhdCBkaXJlY3Rvcnk7IGl0JiMzOTtzIHRoZSB1c3VhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSB0cmFjaW5nIGZ1bmN0aW9uYWxpdHkgZ2V0cyBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gQWZ0ZXIgdGhhdCwgSSYjMzk7bSBtb3Zpbmcgb24gdG8gYHJpbmdfYnVmZmVyLmNgLiBJIGV4cGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHRoZSByaW5nIGJ1ZmZlciwgd2hpY2ggaXMgYSBjcnVjaWFsIGNvbXBvbmVudCBmb3IgdHJhY2UgZGF0YSBzdG9yYWdlLCByZXNpZGVzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBpdHMgZGVzaWduLCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGluIGEga2VybmVsIGNvbnRleHQuIEkgc3VzcGVjdCB0aGUgTWFrZWZpbGUgd2lsbCByZWZlcmVuY2UgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JpbmdfYnVmZmVyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICYjNDM7PSBsaWJmdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgJiM0Mzs9IHJpbmdfYnVmZmVyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSAmIzQzOz0gcmluZ19idWZmZXJfYmVuY2htYXJrLm9cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTMzPW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEUpICYjNDM7PSB0cmFjZV9yZW1vdGUub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjEzNDpvYmotJChDT05GSUdfU0lNUExFX1JJTkdfQlVGRkVSKSAmIzQzOz0gc2ltcGxlX3JpbmdfYnVmZmVyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMzUtb2JqLSQoQ09ORklHX1RSQUNFX1JFTU9URV9URVNUKSAmIzQzOz0gcmVtb3RlX3Rlc3Qub1xuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xNjE9JChvYmopLyUuby5jaGVja2VkOiAkKG9iaikvJS5vICQob2JqKS91bmRlZnN5bXNfYmFzZS5vIEZPUkNFXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTE2My1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxNjQ6YWx3YXlzLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgJiM0Mzs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vLmNoZWNrZWRcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjUtXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9MTExNz1fX3BvbGxfdCByaW5nX2J1ZmZlcl9wb2xsX3dhaXQoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LFxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTExNzktXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzoxMTgwOi8qIGJ1ZmZlciBtYXkgYmUgZWl0aGVyIHJpbmdfYnVmZmVyIG9yIHJpbmdfYnVmZmVyX3Blcl9jcHUgKi9cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTExODEtI2RlZmluZSBSQl9XQVJOX09OKGIsIGNvbmQpXHRcdFx0XHRcdFx0XFxcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NDE0PUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGVfY3B1KTtcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDE2LS8qKlxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQxNzogKiByaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHMgLSBnZXQgdGhlIG9sZGVzdCBldmVudCB0aW1lc3RhbXAgZnJvbSB0aGUgYnVmZmVyXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDE4LSAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlclxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MjAtICovXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDIxOnU2NCByaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHMoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQyMi17XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ0Ni19XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDQ3OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyk7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDQ4LVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTU0ODU9RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllc19jcHUpO1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0ODctLyoqXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDg4OiAqIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgY2F1c2VkIGJ5IHRoZSByaW5nXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDg5LSAqIGJ1ZmZlciB3cmFwcGluZyBhcm91bmQgKG9ubHkgaWYgUkJfRkxfT1ZFUldSSVRFIGlzIG9uKS5cbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDkyLSAqL1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQ5Mzp1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0OTQte1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1MDUtfVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTUwNjpFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSk7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTA3LVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTU1OTI9RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllcyk7XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTU5NC0vKipcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU1OTU6ICogcmluZ19idWZmZXJfb3ZlcnJ1bnMgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXJcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1OTYtICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYwMC0gKi9cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU2MDE6dW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9vdmVycnVucyhzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIpXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjAyLXtcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjE0LX1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU2MTU6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bnMpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYxNi1cbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmM9MjMyPXN0YXRpYyB2b2lkIHJpbmdfYnVmZmVyX3Byb2R1Y2VyKHZvaWQpXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jLTMwMS1cdGVudHJpZXMgPSByaW5nX2J1ZmZlcl9lbnRyaWVzKGJ1ZmZlcik7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmM6MzAyOlx0b3ZlcnJ1bnMgPSByaW5nX2J1ZmZlcl9vdmVycnVucyhidWZmZXIpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jLTMwMy1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz0yODIyPWdldF90b3RhbF9lbnRyaWVzX2NwdShzdHJ1Y3QgYXJyYXlfYnVmZmVyICpidWYsIHVuc2lnbmVkIGxvbmcgKnRvdGFsLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTI4MzgtXHRcdCp0b3RhbCA9IGNvdW50ICYjNDM7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYzoyODM5Olx0XHRcdHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KGJ1Zi1cdTAwM2VidWZmZXIsIGNwdSk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0yODQwLVx0KmVudHJpZXMgPSBjb3VudDtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz0zMzY3PV9fdHJhY2luZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBib29sIHNuYXBzaG90KVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTM0MzAtXHQvKiBBbm5vdGF0ZSBzdGFydCBvZiBidWZmZXJzIGlmIHdlIGhhZCBvdmVycnVucyAqL1xua2VybmVsL3RyYWNlL3RyYWNlLmM6MzQzMTpcdGlmIChyaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIpKVxua2VybmVsL3RyYWNlL3RyYWNlLmMtMzQzMi1cdFx0aXRlci1cdTAwM2VpdGVyX2ZsYWdzIHw9IFRSQUNFX0ZJTEVfQU5OT1RBVEU7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQ3Mj10cmFjaW5nX3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0OTItXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDkzOlx0Y250ID0gcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUodHJhY2VfYnVmLVx1MDAzZWJ1ZmZlciwgY3B1KTtcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0OTQtXHR0cmFjZV9zZXFfcHJpbnRmKHMsIFwmIzM0O292ZXJydW46ICVsZFxcblwmIzM0OywgY250KTtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTAzLVx0XHQvKiBsb2NhbCBvciBnbG9iYWwgZm9yIHRyYWNlX2Nsb2NrICovXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NTA0Olx0XHR0ID0gbnMydXNlY3MocmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHRyYWNlX2J1Zi1cdTAwM2VidWZmZXIsIGNwdSkpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUwNS1cdFx0dXNlY19yZW0gPSBkb19kaXYodCwgVVNFQ19QRVJfU0VDKTtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTE0LVx0XHR0cmFjZV9zZXFfcHJpbnRmKHMsIFwmIzM0O29sZGVzdCBldmVudCB0czogJWxsdVxcblwmIzM0Oyxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc1MTU6XHRcdFx0XHRyaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHModHJhY2VfYnVmLVx1MDAzZWJ1ZmZlciwgY3B1KSk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTE2LVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jPTkzNzg9c3RhdGljIHZvaWQgdHJhY2VfaW5pdF9pdGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgc3RydWN0IHRyYWNlX2FycmF5ICp0cilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy05Mzg4LVx0LyogQW5ub3RhdGUgc3RhcnQgb2YgYnVmZmVycyBpZiB3ZSBoYWQgb3ZlcnJ1bnMgKi9cbmtlcm5lbC90cmFjZS90cmFjZS5jOjkzODk6XHRpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyKSlcbmtlcm5lbC90cmFjZS90cmFjZS5jLTkzOTAtXHRcdGl0ZXItXHUwMDNlaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0FOTk9UQVRFO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYz0xMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfb3ZlcnJ1bnMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYy0xMjItXHR1bnNpZ25lZCBsb25nIGNudCA9IGF0b21pY194Y2hnKFx1MDAyNmRyb3BwZWRfY291bnQsIDApO1xua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jOjEyMzpcdHVuc2lnbmVkIGxvbmcgb3ZlciA9IHJpbmdfYnVmZmVyX292ZXJydW5zKGl0ZXItXHUwMDNlYXJyYXlfYnVmZmVyLVx1MDAzZWJ1ZmZlcik7XG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMtMTI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBLY29uZmlnYCBmb3IgUHJlY2lzZSBUcmFjZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlICpleGFjdCogY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBObyByb29tIGZvciBhbWJpZ3VpdHkgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGRldGFpbHMgSSBuZWVkIGFyZSBnb2luZyB0byBiZSBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBwbGFjZSBmb3IgYWxsIHRoaW5ncyB0cmFjZS1yZWxhdGVkLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZS4gSSYjMzk7bSB0aGlua2luZyB0aGUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCBhbnkgb3B0aW9uYWwgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbnRlcnR3aW5lZCwgYW5kIHRoZSB1bmRlcmx5aW5nIGJ1aWxkIGZsYWdzIC0gaXQmIzM5O3MgYWxsIGluIHRoYXQgZmlsZS4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhlc2UgY29uZmlnIGRldGFpbHMgc28gSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gVGhpcyBpcyBhbGwgYWJvdXQgcHJlY2lzaW9uIGFuZCBtYWtpbmcgc3VyZSBpdCBidWlsZHMgYXMgZXhwZWN0ZWQgYW5kIGZ1bmN0aW9ucyBhcyBkZXNpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUklOR19CVUZGRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MTQxPWNvbmZpZyBUUkFDRV9DTE9DS1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTE0My1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjE0NDpjb25maWcgUklOR19CVUZGRVJcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE0NS1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xNTQ9Y29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUlxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTE1Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjE1Nzpjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxua2VybmVsL3RyYWNlL0tjb25maWctMTU4LVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTk4Nz1jb25maWcgVFJBQ0VQT0lOVF9CRU5DSE1BUktcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDE2LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTAxNzpjb25maWcgUklOR19CVUZGRVJfQkVOQ0hNQVJLXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDE4LVx0dHJpc3RhdGUgXCYjMzQ7UmluZyBidWZmZXIgYmVuY2htYXJrIHN0cmVzcyB0ZXN0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMDg2PWNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTA5OC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwOTk6Y29uZmlnIFJJTkdfQlVGRkVSX1JFQ09SRF9SRUNVUlNJT05cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMDAtXHRib29sIFwmIzM0O1JlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIHRoZSByaW5nIGJ1ZmZlclwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTExNjA9Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNzMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTc0OmNvbmZpZyBSSU5HX0JVRkZFUl9TVEFSVFVQX1RFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNzUtICAgICAgIGJvb2wgXCYjMzQ7UmluZyBidWZmZXIgc3RhcnR1cCBzZWxmIHRlc3RcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTk2LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTE5Nzpjb25maWcgUklOR19CVUZGRVJfVkFMSURBVEVfVElNRV9ERUxUQVNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExOTgtXHRib29sIFwmIzM0O1ZlcmlmeSByaW5nIGJ1ZmZlciB0aW1lIHN0YW1wIGRlbHRhc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEyMTYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMjE3OmNvbmZpZyBSSU5HX0JVRkZFUl9QRVJTSVNURU5UX0lOSkVDVFxua2VybmVsL3RyYWNlL0tjb25maWctMTIxOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHBlcnNpc3RlbnQgcmluZyBidWZmZXIgZXJyb3IgaW5qZWN0aW9uIHRlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIGBSSU5HX0JVRkZFUmAgdmVyc3VzIGBUUkFDSU5HYC4gVGhlIHByb2JsZW0gbW9zdCBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBUcmFjZSBNZWNoYW5pc21zKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBmb2N1cyBhcm91bmQgbGluZSAxNDQgb2YgdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGNvbmRpdGlvbmFscywgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhlIGtlcm5lbCBidWlsZHMgd2l0aCB0aGUgcmluZyBidWZmZXIgdHJhY2UgbWVjaGFuaXNtLCBvciB3aXRoIGFuIGFsdGVybmF0aXZlIHRyYWNpbmcgbWVjaGFuaXNtLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiAqd2h5KiBvbmUgaXMgcHJlZmVycmVkIG92ZXIgdGhlIG90aGVyLCBvciBpZiB0aGV5IGNhbiBldmVuIGJlIHNlbGVjdGVkIGluZGVwZW5kZW50bHkuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgS2NvbmZpZyBtYWdpYyAtIHBlcmhhcHMgYSBgc2VsZWN0YCwgYGRlcGVuZHMgb25gLCBvciBldmVuIGFuIGBpZmAgc3RhdGVtZW50LiBJIG5lZWQgdG8gc2VlIHdoYXQgZmFjdG9ycyBhcmUgaW5mbHVlbmNpbmcgdGhhdCBjaG9pY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdGNvbmZpZyBCVUlMRFRJTUVfTUNPVU5UX1NPUlRcbiAxMzE6XHQgICAgICAgYm9vbFxuIDEzMjpcdCAgICAgICBkZWZhdWx0IHlcbiAxMzM6XHQgICAgICAgZGVwZW5kcyBvbiBIQVZFX0JVSUxEVElNRV9NQ09VTlRfU09SVCBcdTAwMjZcdTAwMjYgRFlOQU1JQ19GVFJBQ0VcbiAxMzQ6XHQgICAgICAgaGVscFxuIDEzNTpcdCAgICAgICAgIFNvcnQgdGhlIG1jb3VudF9sb2Mgc2VjdGlvbiBhdCBidWlsZCB0aW1lLlxuIDEzNjpcdFxuIDEzNzpcdGNvbmZpZyBUUkFDRVJfTUFYX1RSQUNFXG4gMTM4Olx0XHRib29sXG4gMTM5Olx0XHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UXG4gMTQwOlx0XG4gMTQxOlx0Y29uZmlnIFRSQUNFX0NMT0NLXG4gMTQyOlx0XHRib29sXG4gMTQzOlx0XG4gMTQ0Olx0Y29uZmlnIFJJTkdfQlVGRkVSXG4gMTQ1Olx0XHRib29sXG4gMTQ2Olx0XHRzZWxlY3QgVFJBQ0VfQ0xPQ0tcbiAxNDc6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDE0ODpcdFxuIDE0OTpcdGNvbmZpZyBFVkVOVF9UUkFDSU5HXG4gMTUwOlx0XHRzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXG4gMTUxOlx0XHRzZWxlY3QgR0xPQlxuIDE1MjpcdFx0Ym9vbFxuIDE1MzpcdFxuIDE1NDpcdGNvbmZpZyBDT05URVhUX1NXSVRDSF9UUkFDRVJcbiAxNTU6XHRcdGJvb2xcbiAxNTY6XHRcbiAxNTc6XHRjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxuIDE1ODpcdFx0Ym9vbFxuIDE1OTpcdFx0aGVscFxuIDE2MDpcdFx0IEFsbG93IHRoZSB1c2Ugb2YgcmluZ19idWZmZXJfc3dhcF9jcHUuXG4gMTYxOlx0XHQgQWRkcyBhIHZlcnkgc2xpZ2h0IG92ZXJoZWFkIHRvIHRyYWNpbmcgd2hlbiBlbmFibGVkLlxuIDE2MjpcdFxuIDE2MzpcdGNvbmZpZyBQUkVFTVBUSVJRX1RSQUNFUE9JTlRTXG4gMTY0Olx0XHRib29sXG4gMTY1Olx0XHRkZXBlbmRzIG9uIFRSQUNFX1BSRUVNUFRfVE9HR0xFIHx8IFRSQUNFX0lSUUZMQUdTXG4gMTY2Olx0XHRzZWxlY3QgVFJBQ0lOR1xuIDE2NzpcdFx0ZGVmYXVsdCB5XG4gMTY4Olx0XHRoZWxwXG4gMTY5Olx0XHQgIENyZWF0ZSBwcmVlbXB0L2lycSB0b2dnbGUgdHJhY2Vwb2ludHMgaWYgbmVlZGVkLCBzbyB0aGF0IG90aGVyIHBhcnRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGVuYWJsaW5nIHRyYWNpbmcgZmVhdHVyZXMgd2l0aGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgc3VzcGVjdHM6IGBDT05GSUdfVFJBQ0lOR2Agb3IgYENPTkZJR19GVFJBQ0VgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIGZsYWdzIHRoYXQgY29udHJvbCB0aGUgY29yZSB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBzcGVjaWZpYyBLY29uZmlnIHN5bWJvbHMsIGFuZCBzZWUgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZCBhbmQgaG93IHRoZXkmIzM5O3JlIHJlbGF0ZWQgdG8gb3RoZXIgb3B0aW9ucy4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFJJTkdfQlVGRkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTE3OT1jb25maWcgVFJBQ0lOR1xua2VybmVsL3RyYWNlL0tjb25maWctMTgwLVx0Ym9vbFxua2VybmVsL3RyYWNlL0tjb25maWc6MTgxOlx0c2VsZWN0IFJJTkdfQlVGRkVSXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xODItXHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz00MjE9Y29uZmlnIElSUVNPRkZfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNDI3LVx0c2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnOjQyODpcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00MjktXHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTQ0ND1jb25maWcgUFJFRU1QVF9UUkFDRVJcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00NDktXHRzZWxlY3QgVFJBQ0VSX01BWF9UUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWc6NDUwOlx0c2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ1MS1cdHNlbGVjdCBUUkFDRVJfU05BUFNIT1RfUEVSX0NQVV9TV0FQXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NjMxPWNvbmZpZyBUUkFDRVJfU05BUFNIT1RfUEVSX0NQVV9TV0FQXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNjMzLVx0ZGVwZW5kcyBvbiBUUkFDRVJfU05BUFNIT1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnOjYzNDpcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy02MzUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLZXJuZWwgVHJhY2luZyBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIHRoZSBtbWFwIGludGVyZmFjZSBmb3IgdGhlIHRyYWNlZnMvZGVidWdmcyB0cmFjaW5nIGJ1ZmZlci4gSXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBlaXRoZXIgYENPTkZJR19GVFJBQ0VgIG9yIGBDT05GSUdfVFJBQ0lOR2AuIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoaWNoIG9uZSYjMzk7cyB0aGUga2V5LiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gYnkgZ3JlcHBpbmcgZm9yIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIG9yIGB0cmFjaW5nX2J1ZmZlcnNfZm9wc2AuIFRoYXQgc2hvdWxkIHBpbnBvaW50IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHByZXR0eSBxdWlja2x5LiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFjaW5nX2J1ZmZlcnNfZm9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvdHJhY2UuYz03NDM3PXN0YXRpYyBpbnQgdHJhY2luZ19idWZmZXJzX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0NTktXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDYwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfYnVmZmVyc19mb3BzID0ge1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQ2MS1cdC5vcGVuXHRcdD0gdHJhY2luZ19idWZmZXJzX29wZW4sXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzYyNT10cmFjaW5nX2luaXRfdHJhY2Vmc19wZXJjcHUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgbG9uZyBjcHUpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzY0OS1cdHRyYWNlX2NyZWF0ZV9jcHVfZmlsZShcJiMzNDt0cmFjZV9waXBlX3Jhd1wmIzM0OywgVFJBQ0VfTU9ERV9SRUFELCBkX2NwdSxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc2NTA6XHRcdFx0XHR0ciwgY3B1LCBcdTAwMjZ0cmFjaW5nX2J1ZmZlcnNfZm9wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NjUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDgwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdHJhY2UgUmluZyBCdWZmZXIgUmVhZGVyIFBhZ2UgVnVsbmVyYWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgY2hhbmdlIGluIHRoZSBgZnRyYWNlYCByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGB0cmFjZV9waXBlX3Jhd2AgZmlsZSB3aXRoaW4gdGhlIGB0cmFjZWZzYC4gTXkgZm9jdXMgaXMgb24gdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24uCgpJbml0aWFsbHksIEkmIzM5O20gbm90aW5nIHRoYXQgYHRyYWNlX3BpcGVfcmF3YCBpcyBjcmVhdGVkIGR1cmluZyBgdHJhY2Vmc2AgaW5pdGlhbGl6YXRpb24uIFVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBpdCB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucywgb3BlbmluZyBpdCwgbWFwcGluZyBpdCB3aXRoIGBtbWFwYCAodmlhIGB0cmFjaW5nX2J1ZmZlcnNfbW1hcGAgd2hpY2ggbWFwcyB0byBgcmluZ19idWZmZXJfbWFwYCksIGFuZCB0aGVuIHVzaW5nIGFuIGBpb2N0bGAgY2FsbCAoYFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUmApIHRoYXQgZXZlbnR1YWxseSBjYWxscyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJdCYjMzk7cyB3aXRoaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCB0aGF0IHRoZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNoYW5naW5nIHRoZSBjb25kaXRpb24gZm9yIGEgYFdBUk5fT05gIGNhbGwuIEJlZm9yZSwgYFdBUk5fT04oIXJlYWRlcilgIHdvdWxkIGFsd2F5cyB0cmlnZ2VyIGlmIHRoZSBgcmVhZGVyYCBwb2ludGVyIHdhcyBOVUxMLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhpcyB0byBgV0FSTl9PTighcmVhZGVyICZhbXA7JmFtcDsgY3B1X2J1ZmZlci0mZ3Q7cmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci0mZ3Q7Y29tbWl0X3BhZ2UpYC4gVGhpcyBpcyBhIGNydWNpYWwgY2hhbmdlIGluIHRoZSBhc3NlcnRpb24gbG9naWMuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucy4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IGFuZCBzdWJzeXN0ZW0gcmVsZXZhbmNlLiBUaGlzIGlzIGluIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AsIHNvIGl0JiMzOTtzIGNvcmUgYGZ0cmFjZWAgcmluZyBidWZmZXIgZnVuY3Rpb25hbGl0eS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCBgaW9jdGxgIGNhbGxzIG9uIGB0cmFjZV9waXBlX3Jhd2AgaW4gYHRyYWNlZnNgLCB3aGljaCBpcyBhIGNvbW1vbiwgd2VsbC1leGVyY2lzZWQgYXJlYSwgb2Z0ZW4gZnV6emVkIHdpdGggc3l6a2FsbGVyIGV2ZW4gaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGlzIGxvb2tzIHByb21pc2luZy4KClJlZ2FyZGluZyB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoZSBjaGFuZ2UgaXM6CjEuICAqKkNvcmUgc3Vic3lzdGVtOioqIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AKMi4gICoqQXNzZXJ0aW9uL0xvZ2ljIE1vZGlmaWNhdGlvbjoqKiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyB0aGF0IHRyaWdnZXJzIGEgYFdBUk5fT05gLCB3aGljaCBpcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4gSXQgcmVkdWNlcyB0aGUgY2FzZXMgd2hlcmUgdGhlIGFzc2VydGlvbiBpcyB0cmlnZ2VyZWQuCjMuICAqKlJlYWNoYWJpbGl0eToqKiBVc2Vyc3BhY2UgY2FuIHRyaWdnZXIgdGhpcyB2aWEgYGlvY3RsYCBvbiBgdHJhY2VfcGlwZV9yYXdgLiBUaGlzIGlzIGNyaXRpY2FsLgoKQmFzZWQgb24gdGhlc2UsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLiBBbHNvLCBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCwgYHJpbmdfYnVmZmVyX21hcGAsIGFuZCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCBhcmUgcmVsZXZhbnQgZnVuY3Rpb25zLCBhcyB0aGV5JiMzOTtyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgY2FsbCBjaGFpbi4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBhbnkgYXJlIHViaXF1aXRvdXMgaG90cGF0aHMuIEZvcnR1bmF0ZWx5LCBub25lIG9mIHRoZXNlIGFyZSBoaWdobHkgdWJpcXVpdG91cyBob3RwYXRoczsgdGhleSBhcmUgcXVpdGUgc3BlY2lmaWMgdG8gdGhlIGB0cmFjZV9waXBlX3Jhd2AgbW1hcC9yZWFkZXIgYWNjZXNzLgoKSSB3aWxsIGFsc28gbmVlZCB0byByZXZpZXcgdGhlIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgIHRvIHNlZSBob3cgdHJhY2luZyBpcyBjb25maWd1cmVkLiBJbiBwYXJ0aWN1bGFyLCBob3cgdGhlIGB0cmFjZS5vYCBpcyBjb25zdHJ1Y3RlZC4gVGhpcyB3aWxsIHByb3ZpZGUgZnVydGhlciBjb250ZXh0IG9uIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgZW5hYmxlcyBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBhbmQgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9NjE9b2JqLSQoQ09ORklHX1RSQUNFX0NMT0NLKSAmIzQzOz0gdHJhY2VfY2xvY2sub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTYyLVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICYjNDM7PSBsaWJmdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgJiM0Mzs9IHJpbmdfYnVmZmVyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSAmIzQzOz0gcmluZ19idWZmZXJfYmVuY2htYXJrLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02Ni1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfVFJBQ0lORykgJiM0Mzs9IHRyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02OC1vYmotJChDT05GSUdfVFJBQ0lORykgJiM0Mzs9IHRyYWNlX291dHB1dC5vXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTg4PW9iai0kKENPTkZJR19TVEFDS19UUkFDRVIpICYjNDM7PSB0cmFjZV9zdGFjay5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6ODk6b2JqLSQoQ09ORklHX01NSU9UUkFDRSkgJiM0Mzs9IHRyYWNlX21taW90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTAtb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgJiM0Mzs9IHRyYWNlX2Z1bmN0aW9uc19ncmFwaC5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9OTE9b2JqLSQoQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcpICYjNDM7PSB0cmFjZV9icmFuY2gub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjkyOm9iai0kKENPTkZJR19CTEtfREVWX0lPX1RSQUNFKSAmIzQzOz0gYmxrdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTkzLW9iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpICYjNDM7PSBmZ3JhcGgub1xua2VybmVsL3RyYWNlL01ha2VmaWxlPTk0PWlmZXEgKCQoQ09ORklHX0JMT0NLKSx5KVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjk1Om9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSAmIzQzOz0gYmxrdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTk2LWVuZGlmXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICYjNDM7PSB0cmFjZV9ldmVudHNfdXNlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSAmIzQzOz0gYnBmX3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICYjNDM7PSB0cmFjZV9rcHJvYmUub1xuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xNjQ9YWx3YXlzLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgJiM0Mzs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vLmNoZWNrZWRcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjUtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTY2OmxpYmZ0cmFjZS15IDo9IGZ0cmFjZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpczoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0cmFjaW5nIGlzIHNldCB1cCBpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19UUkFDSU5HYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBsYXllciwgYXMgaXQgY29tcGlsZXMgYHRyYWNlLm9gLCBhbmQgSSBzZWUgaXQgcHVsbHMgaW4gYENPTkZJR19SSU5HX0JVRkZFUmAsIHdoaWNoIGluIHR1cm4gZ2VuZXJhdGVzIGByaW5nX2J1ZmZlci5vYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoaXMuIElzIGBDT05GSUdfRlRSQUNFYCBpbnZvbHZlZD8gT3IgYXJlIHRoZXJlIG90aGVyIGNvbmZpZ3MgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIGFueSB1c2VyLXNlbGVjdGFibGUgb3B0aW9ucyB0aGF0IGFyZSB0aWVkIHRvIGBDT05GSUdfVFJBQ0lOR2AuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcywgb2YgY291cnNlLCBga2VybmVsL3RyYWNlL0tjb25maWdgLiBJJiMzOTtsbCBkZWx2ZSBpbnRvIHRoYXQgZmlsZSBhbmQgZXhhbWluZSB0aGUgc2VjdGlvbiBhcm91bmQgYGNvbmZpZyBUUkFDSU5HYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSYjMzk7bSBhZnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTc1Olx0IyBvcHRpb25zIGRvIG5vdCBhcHBlYXIgd2hlbiBzb21ldGhpbmcgZWxzZSBzZWxlY3RzIGl0LiBXZSBuZWVkIHRoZSB0d28gb3B0aW9uc1xuIDE3NjpcdCMgR0VORVJJQ19UUkFDRVIgYW5kIFRSQUNJTkcgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHRvIGFjY29tcGxpc2ggdGhlXG4gMTc3Olx0IyBoaWRpbmcgb2YgdGhlIGF1dG9tYXRpYyBvcHRpb25zLlxuIDE3ODpcdFxuIDE3OTpcdGNvbmZpZyBUUkFDSU5HXG4gMTgwOlx0XHRib29sXG4gMTgxOlx0XHRzZWxlY3QgUklOR19CVUZGRVJcbiAxODI6XHRcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxuIDE4MzpcdFx0c2VsZWN0IFRSQUNFUE9JTlRTXG4gMTg0Olx0XHRzZWxlY3QgTk9QX1RSQUNFUlxuIDE4NTpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAxODY6XHRcdHNlbGVjdCBFVkVOVF9UUkFDSU5HXG4gMTg3Olx0XHRzZWxlY3QgVFJBQ0VfQ0xPQ0tcbiAxODg6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuIDE4OTpcdFxuIDE5MDpcdGNvbmZpZyBHRU5FUklDX1RSQUNFUlxuIDE5MTpcdFx0Ym9vbFxuIDE5MjpcdFx0c2VsZWN0IFRSQUNJTkdcbiAxOTM6XHRcbiAxOTQ6XHQjXG4gMTk1Olx0IyBNaW5pbXVtIHJlcXVpcmVtZW50cyBhbiBhcmNoaXRlY3R1cmUgaGFzIHRvIG1lZXQgZm9yIHVzIHRvXG4gMTk2Olx0IyBiZSBhYmxlIHRvIG9mZmVyIGdlbmVyaWMgdHJhY2luZyBmYWNpbGl0aWVzOlxuIDE5NzpcdCNcbiAxOTg6XHRjb25maWcgVFJBQ0lOR19TVVBQT1JUXG4gMTk5Olx0XHRib29sXG4gMjAwOlx0XHRkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcbiAyMDE6XHRcdGRlcGVuZHMgb24gU1RBQ0tUUkFDRV9TVVBQT1JUXG4gMjAyOlx0XHRkZWZhdWx0IHlcbiAyMDM6XHRcbiAyMDQ6XHRtZW51Y29uZmlnIEZUUkFDRVxuIDIwNTpcdFx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4gMjA2Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxuIDIwNzpcdFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxuIDIwODpcdFx0aGVscFxuIDIwOTpcdFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuIDIxMDpcdFxuIDIxMTpcdGlmIEZUUkFDRVxuIDIxMjpcdFxuIDIxMzpcdGNvbmZpZyBUUkFDRUZTX0FVVE9NT1VOVF9ERVBSRUNBVEVEXG4gMjE0Olx0XHRib29sIFwmIzM0O0F1dG9tb3VudCB0cmFjZWZzIG9uIGRlYnVnZnMgW0RFUFJFQ0FURURdXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTAyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBGVFJBQ0VgIHdoaWNoIEkga25vdyBpcyB0aGUgY29yZSBtZW51Y29uZmlnIGVudHJ5IHBvaW50LiBJZiB0aGF0JiMzOTtzIGVuYWJsZWQsIHRoZW4gd2UgaGF2ZSB0aGUgd2hvbGUgaG9zdCBvZiB0cmFjZXIgb3B0aW9ucywgdGhlIHZhcmlvdXMgYml0cyB1bmRlcm5lYXRoIGBGVFJBQ0VgLCBpbmNsdWRpbmcgdGhvc2UgY3JpdGljYWwgYFRSQUNJTkdgIGFuZCBgUklOR19CVUZGRVJgIGNvbXBvbmVudHMuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGVuYWJsZSBgdHJhY2Vmc2AsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB0cmFjZSBkYXRhLiBUaW1lIHRvIHVzZSBteSB1c3VhbCBhcHByb2FjaCwgSSYjMzk7bGwgZ28gc3RyYWlnaHQgZm9yIGBDT05GSUdfVFJBQ0VGU2AsIG9yIGEgZ29vZCBvbGQgc2VhcmNoIGZvciBgZnMvdHJhY2Vmc2AsIGFuZCBzZWUgd2hhdCB0aGF0IGdldHMgbWUgaW4gdGVybXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VFJBQ0VGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYz0zMjk9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXZlbnRmc19nZXRfaW5vZGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZXZlbnRmc19hdHRyICphdHRyLFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDItXHR0aS1cdTAwM2Vwcml2YXRlID0gZWk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzQzOlx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19FVkVOVF9JTk9ERTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDQtXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTUyOT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXZlbnRmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNTM4LVx0dGkgPSBnZXRfdHJhY2VmcyhkaXIpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjUzOTpcdGlmIChXQVJOX09OX09OQ0UoISh0aS1cdTAwM2VmbGFncyBcdTAwMjYgVFJBQ0VGU19FVkVOVF9JTk9ERSkpKVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU0MC1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTU3OT1zdGF0aWMgaW50IGV2ZW50ZnNfaXRlcmF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5NS1cdHRpID0gZ2V0X3RyYWNlZnMoZl9pbm9kZSk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTk2Olx0aWYgKCEodGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfRVZFTlRfSU5PREUpKVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTc1OT1zdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZXZlbnRmc19jcmVhdGVfZXZlbnRzX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc3MC1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3NzE6XHRpZiAoc2VjdXJpdHlfbG9ja2VkX2Rvd24oTE9DS0RPV05fVFJBQ0VGUykpXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzcyLVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODA1LVx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6ODA2Olx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19FVkVOVF9JTk9ERTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MDctXHR0aS1cdTAwM2Vwcml2YXRlID0gZWk7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI1LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI2OiNkZWZpbmUgVFJBQ0VGU19ERUZBVUxUX01PREVcdDA3MDBcbmZzL3RyYWNlZnMvaW5vZGUuYy0yNy1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnRyYWNlZnNfaW5vZGVfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmM9OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKnRyYWNlZnNfc3lzY2FsbF9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTEwLVx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XG5mcy90cmFjZWZzL2lub2RlLmM6MTExOlx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19JTlNUQU5DRV9JTk9ERTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMTItXHR0aS1cdTAwM2Vwcml2YXRlID0gaW5vZGU7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTE1Mz1zdGF0aWMgdm9pZCBzZXRfdHJhY2Vmc19pbm9kZV9vd25lcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzMtXG5mcy90cmFjZWZzL2lub2RlLmM6MTc0Olx0XHRpZiAoIShydGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfVUlEX1BFUk1fU0VUKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzUtXHRcdFx0dWlkID0gcm9vdF9pbm9kZS1cdTAwM2VpX3VpZDtcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzYtXG5mcy90cmFjZWZzL2lub2RlLmM6MTc3Olx0XHRpZiAoIShydGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfR0lEX1BFUk1fU0VUKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzgtXHRcdFx0Z2lkID0gcm9vdF9pbm9kZS1cdTAwM2VpX2dpZDtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTg0LVx0ICovXG5mcy90cmFjZWZzL2lub2RlLmM6MTg1Olx0aWYgKCEodGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfVUlEX1BFUk1fU0VUKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xODYtXHRcdGlub2RlLVx1MDAzZWlfdWlkID0gdWlkO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTE4Ny1cbmZzL3RyYWNlZnMvaW5vZGUuYzoxODg6XHRpZiAoISh0aS1cdTAwM2VmbGFncyBcdTAwMjYgVFJBQ0VGU19HSURfUEVSTV9TRVQpKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE4OS1cdFx0aW5vZGUtXHUwMDNlaV9naWQgPSBnaWQ7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTIxMD1zdGF0aWMgaW50IHRyYWNlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0yMTctXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfVUlEKVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIxODpcdFx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19VSURfUEVSTV9TRVQ7XG5mcy90cmFjZWZzL2lub2RlLmMtMjE5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIyMC1cdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpXG5mcy90cmFjZWZzL2lub2RlLmM6MjIxOlx0XHR0aS1cdTAwM2VmbGFncyB8PSBUUkFDRUZTX0dJRF9QRVJNX1NFVDtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMjItXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTMxMD1zdGF0aWMgaW50IHRyYWNlZnNfYXBwbHlfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIHJlbW91bnQpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0NC1cdFx0XHRpZiAodXBkYXRlX3VpZCkge1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjM0NTpcdFx0XHRcdHRpLVx1MDAzZWZsYWdzIFx1MDAyNj0gflRSQUNFRlNfVUlEX1BFUk1fU0VUO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0Ni1cdFx0XHRcdHRpLVx1MDAzZXZmc19pbm9kZS5pX3VpZCA9IGZzaS1cdTAwM2V1aWQ7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0OS1cdFx0XHRpZiAodXBkYXRlX2dpZCkge1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjM1MDpcdFx0XHRcdHRpLVx1MDAzZWZsYWdzIFx1MDAyNj0gflRSQUNFRlNfR0lEX1BFUk1fU0VUO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTM1MS1cdFx0XHRcdHRpLVx1MDAzZXZmc19pbm9kZS5pX2dpZCA9IGZzaS1cdTAwM2VnaWQ7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM1OC1cdFx0XHQgKi9cbmZzL3RyYWNlZnMvaW5vZGUuYzozNTk6XHRcdFx0aWYgKHRpLVx1MDAzZWZsYWdzIFx1MDAyNiBUUkFDRUZTX0VWRU5UX0lOT0RFKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM2MC1cdFx0XHRcdGV2ZW50ZnNfcmVtb3VudCh0aSwgdXBkYXRlX3VpZCwgdXBkYXRlX2dpZCk7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTM4NT1zdGF0aWMgaW50IHRyYWNlZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMzk0LVx0XHRcdCAgIGZyb21fa2dpZF9tdW5nZWQoXHUwMDI2aW5pdF91c2VyX25zLCBmc2ktXHUwMDNlZ2lkKSk7XG5mcy90cmFjZWZzL2lub2RlLmM6Mzk1Olx0aWYgKGZzaS1cdTAwM2Vtb2RlICE9IFRSQUNFRlNfREVGQVVMVF9NT0RFKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM5Ni1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssbW9kZT0lb1wmIzM0OywgZnNpLVx1MDAzZW1vZGUpO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYz00MDE9c3RhdGljIGludCB0cmFjZWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNDExLVx0ICovXG5mcy90cmFjZWZzL2lub2RlLmM6NDEyOlx0dGktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+VFJBQ0VGU19FVkVOVF9JTk9ERTtcbmZzL3RyYWNlZnMvaW5vZGUuYy00MTMtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTQ2ND1zdGF0aWMgaW50IHRyYWNlZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ2OC1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0Njk6XHRlcnIgPSBzaW1wbGVfZmlsbF9zdXBlcihzYiwgVFJBQ0VGU19NQUdJQywgdHJhY2VfZmlsZXMpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ3MC1cdGlmIChlcnIpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTUwMj1zdGF0aWMgaW50IHRyYWNlZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNTA5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxMDpcdGZzaS1cdTAwM2Vtb2RlID0gVFJBQ0VGU19ERUZBVUxUX01PREU7XG5mcy90cmFjZWZzL2lub2RlLmMtNTExLVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYz01Njc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaW5zdGFuY2VfaW5vZGUoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01NzctXHRcdHRpID0gZ2V0X3RyYWNlZnMoZF9pbm9kZShwYXJlbnQpKTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo1Nzg6XHRcdGlmICh0aS1cdTAwM2VmbGFncyBcdTAwMjYgVFJBQ0VGU19JTlNUQU5DRV9JTk9ERSlcbmZzL3RyYWNlZnMvaW5vZGUuYy01NzktXHRcdFx0YnJlYWs7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTYxMj1zdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNjE5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYyMDpcdGlmIChzZWN1cml0eV9sb2NrZWRfZG93bihMT0NLRE9XTl9UUkFDRUZTKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy02MjEtXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYz02OTk9c3RydWN0IGRlbnRyeSAqdHJhY2Vmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudClcbmZzL3RyYWNlZnMvaW5vZGUuYy03MDAte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjcwMTpcdGlmIChzZWN1cml0eV9sb2NrZWRfZG93bihMT0NLRE9XTl9UUkFDRUZTKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy03MDItXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL3RyYWNlZnMvaW50ZXJuYWwuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5mcy90cmFjZWZzL2ludGVybmFsLmg6MjojaWZuZGVmIF9UUkFDRUZTX0lOVEVSTkFMX0hcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDozOiNkZWZpbmUgX1RSQUNFRlNfSU5URVJOQUxfSFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oLTQtXG5mcy90cmFjZWZzL2ludGVybmFsLmg9NT1lbnVtIHtcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDo2Olx0VFJBQ0VGU19FVkVOVF9JTk9ERVx0XHQ9IEJJVCgxKSxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDo3Olx0VFJBQ0VGU19HSURfUEVSTV9TRVRcdFx0PSBCSVQoMiksXG5mcy90cmFjZWZzL2ludGVybmFsLmg6ODpcdFRSQUNFRlNfVUlEX1BFUk1fU0VUXHRcdD0gQklUKDMpLFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oOjk6XHRUUkFDRUZTX0lOU1RBTkNFX0lOT0RFXHRcdD0gQklUKDQpLFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oLTEwLX07XG4tLVxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oPTgwPXZvaWQgZXZlbnRmc19yZW1vdW50X3VubG9jayhpbnQgc3JjdV9pZHgpO1xuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oLTgxLVxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oOjgyOiNlbmRpZiAvKiBfVFJBQ0VGU19JTlRFUk5BTF9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzA4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBUcmFjZWZzIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIHByb2NlZHVyZSBmb3IgYHRyYWNlZnNgLiBMZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgZnMvdHJhY2Vmcy9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGJ1aWxkaW5nIHRoZSB0cmFjZWZzIGZpbGVzeXN0ZW0gaXRzZWxmLiBJdCBzaG91bGQgZGV0YWlsIGhvdyB0aGUga2VybmVsIG1vZHVsZXMgc3BlY2lmaWMgdG8gYHRyYWNlZnNgIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5zdGFsbGVkLCBhbmQgYW55IG5lY2Vzc2FyeSBwcmUtcHJvY2Vzc2luZyBzdGVwcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3RhbmRhcmQgbWFrZWZpbGUgdGFyZ2V0cyBsaWtlIGBhbGxgLCBgbW9kdWxlc2AsIGBpbnN0YWxsYCwgYW5kIGFueXRoaW5nIHNwZWNpZmljIHRvIGB0cmFjZWZzYC4gSSYjMzk7bGwgYmUgcGFyc2luZyB0aGUgZGVwZW5kZW5jaWVzIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGhlYWRlcnMgaW52b2x2ZWQgaW4gdHJhY2VmcyBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBvZiB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYWNlZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQ3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9NYWtlZmlsZT0xMTc9b2JqLSQoQ09ORklHX0RFQlVHX0ZTKVx0XHQmIzQzOz0gZGVidWdmcy9cbmZzL01ha2VmaWxlOjExODpvYmotJChDT05GSUdfVFJBQ0lORylcdFx0JiM0Mzs9IHRyYWNlZnMvXG5mcy9NYWtlZmlsZS0xMTktb2JqLSQoQ09ORklHX09DRlMyX0ZTKVx0XHQmIzQzOz0gb2NmczIvXG4tLVxuZnMvdHJhY2Vmcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvdHJhY2Vmcy9NYWtlZmlsZToyOnRyYWNlZnMtb2Jqc1x0Oj0gaW5vZGUub1xuZnMvdHJhY2Vmcy9NYWtlZmlsZTozOnRyYWNlZnMtb2Jqc1x0JiM0Mzs9IGV2ZW50X2lub2RlLm9cbmZzL3RyYWNlZnMvTWFrZWZpbGUtNC1cbmZzL3RyYWNlZnMvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVFJBQ0lORylcdCYjNDM7PSB0cmFjZWZzLm9cbmZzL3RyYWNlZnMvTWFrZWZpbGUtNi1cbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMi0vKlxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjM6ICogIGV2ZW50X2lub2RlLmMgLSBwYXJ0IG9mIHRyYWNlZnMsIGEgcHNldWRvIGZpbGUgc3lzdGVtIGZvciBhY3RpdmF0aW5nIHRyYWNpbmdcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy00LSAqXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTIxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzoyMjojaW5jbHVkZSBcdTAwM2NsaW51eC90cmFjZWZzLmhcdTAwM2VcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2Vcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9MjUyPXN0YXRpYyB2b2lkIGV2ZW50ZnNfc2V0X2F0dHJzKHN0cnVjdCBldmVudGZzX2lub2RlICplaSwgYm9vbCB1cGRhdGVfdWlkLCBrdWlkX3QgdWlkLFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yOTMtLypcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzoyOTQ6ICogT24gYSByZW1vdW50IG9mIHRyYWNlZnMsIGlmIFVJRCBvciBHSUQgb3B0aW9ucyBhcmUgc2V0LCB0aGVuXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMjk1LSAqIHRoZSBtb3VudCBwb2ludCBpbm9kZSBwZXJtaXNzaW9ucyBzaG91bGQgYmUgdXNlZC5cbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMjk3LSAqL1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjI5ODp2b2lkIGV2ZW50ZnNfcmVtb3VudChzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGksIGJvb2wgdXBkYXRlX3VpZCwgYm9vbCB1cGRhdGVfZ2lkKVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTI5OS17XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTMyOT1zdGF0aWMgc3RydWN0IGlub2RlICpldmVudGZzX2dldF9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBldmVudGZzX2F0dHIgKmF0dHIsXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTMzMy1cdHN0cnVjdCBldmVudGZzX2lub2RlICpwZWk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzM0Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTMzNS1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzM2LVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjMzNzpcdGlub2RlID0gdHJhY2Vmc19nZXRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTMzOC1cdGlmICghaW5vZGUpXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTM0MC1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzozNDE6XHR0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDItXHR0aS1cdTAwM2Vwcml2YXRlID0gZWk7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTM1OS0vKipcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzozNjA6ICogbG9va3VwX2ZpbGUgLSBsb29rIHVwIGEgZmlsZSBpbiB0aGUgdHJhY2VmcyBmaWxlc3lzdGVtXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzYxLSAqIEBwYXJlbnRfZWk6IFBvaW50ZXIgdG8gdGhlIGV2ZW50ZnNfaW5vZGUgdGhhdCByZXByZXNlbnRzIHBhcmVudCBvZiB0aGUgZmlsZVxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYz0zNzI9c3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9maWxlKHN0cnVjdCBldmVudGZzX2lub2RlICpwYXJlbnRfZWksXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTQwNS0vKipcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo0MDY6ICogbG9va3VwX2Rpcl9lbnRyeSAtIGxvb2sgdXAgYSBkaXIgaW4gdGhlIHRyYWNlZnMgZmlsZXN5c3RlbVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTQwNy0gKiBAZGVudHJ5OiB0aGUgZGlyZWN0b3J5IHRvIGxvb2sgdXBcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTI5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpldmVudGZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01MzMtXHRzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWlfY2hpbGQ7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTM0Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTUzNS1cdHN0cnVjdCBldmVudGZzX2lub2RlICplaTtcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNTM3LVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjUzODpcdHRpID0gZ2V0X3RyYWNlZnMoZGlyKTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01MzktXHRpZiAoV0FSTl9PTl9PTkNFKCEodGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfRVZFTlRfSU5PREUpKSlcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTc5PXN0YXRpYyBpbnQgZXZlbnRmc19pdGVyYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNTg0LVx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpX2NoaWxkO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjU4NTpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01ODYtXHRzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWk7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5NC1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo1OTU6XHR0aSA9IGdldF90cmFjZWZzKGZfaW5vZGUpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5Ni1cdGlmICghKHRpLVx1MDAzZWZsYWdzIFx1MDAyNiBUUkFDRUZTX0VWRU5UX0lOT0RFKSlcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzE1LSAqICAgICBzeXN0ZW0uIFRoZSBjYWxsYmFjayBtdXN0IG5vdCBjYWxsIGFueSBjb2RlIHRoYXQgbWlnaHQgYWxzbyBjYWxsIGludG9cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3MTY6ICogICAgIHRoZSB0cmFjZWZzIG9yIGV2ZW50ZnMgc3lzdGVtIG9yIGl0IHdpbGwgcmlzayBjcmVhdGluZyBhIGRlYWRsb2NrLlxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTcxNy0gKi9cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYz03MTg9c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmV2ZW50ZnNfY3JlYXRlX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqcGFyZW50LFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NDktICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IHRvIGNyZWF0ZS5cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3NTA6ICogQHBhcmVudDogUGFyZW50IGRlbnRyeSBmb3IgdGhpcyBmaWxlIGluIHRoZSB0cmFjZWZzIGRpcmVjdG9yeS5cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NTEtICogQGVudHJpZXM6IEEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgcmVwcmVzZW50IHRoZSBmaWxlcyB1bmRlciB0aGlzIGRpcmVjdG9yeVxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYz03NTk9c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmV2ZW50ZnNfY3JlYXRlX2V2ZW50c19kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NjUtXHRzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NzY2Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc2Ny1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc3My1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3NzQ6XHRkZW50cnkgPSB0cmFjZWZzX3N0YXJ0X2NyZWF0aW5nKG5hbWUsIHBhcmVudCk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzc1LVx0aWYgKElTX0VSUihkZW50cnkpKVxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03ODEtXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NzgyOlx0aW5vZGUgPSB0cmFjZWZzX2dldF9pbm9kZShkZW50cnktXHUwMDNlZF9zYik7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzgzLVx0aWYgKHVubGlrZWx5KCFpbm9kZSkpXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc4NS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3ODY6XHQvLyBOb3RlOiB3ZSBoYXZlIGEgcmVmIHRvIHRoZSBkZW50cnkgZnJvbSB0cmFjZWZzX3N0YXJ0X2NyZWF0aW5nKClcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03ODctXHRyZWkgPSBnZXRfcm9vdF9pbm9kZShlaSk7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTgwNC1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo4MDU6XHR0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MDYtXHR0aS1cdTAwM2VmbGFncyB8PSBUUkFDRUZTX0VWRU5UX0lOT0RFO1xuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MjktXHRmc25vdGlmeV9ta2RpcihkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo4MzA6XHR0cmFjZWZzX2VuZF9jcmVhdGluZyhkZW50cnkpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTgzMS1cbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODM1LVx0Y2xlYW51cF9laShlaSk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6ODM2Olx0dHJhY2Vmc19mYWlsZWRfY3JlYXRpbmcoZGVudHJ5KTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MzctXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9ODkxPXZvaWQgZXZlbnRmc19yZW1vdmVfZXZlbnRzX2RpcihzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWkpXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTkwNC1cdC8qXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6OTA1Olx0ICogTWF0Y2hlcyB0aGUgZGdldCgpIGRvbmUgYnkgdHJhY2Vmc19zdGFydF9jcmVhdGluZygpXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtOTA2LVx0ICogaW4gZXZlbnRmc19jcmVhdGVfZXZlbnRzX2RpcigpIHdoZW4gaXQgdGhlIGRlbnRyeSB3YXNcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMi0vKlxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM6ICogIGlub2RlLmMgLSBwYXJ0IG9mIHRyYWNlZnMsIGEgcHNldWRvIGZpbGUgc3lzdGVtIGZvciBhY3RpdmF0aW5nIHRyYWNpbmdcbmZzL3RyYWNlZnMvaW5vZGUuYy00LSAqXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTgtICpcbmZzL3RyYWNlZnMvaW5vZGUuYzo5OiAqIHRyYWNlZnMgaXMgdGhlIGZpbGUgc3lzdGVtIHRoYXQgaXMgdXNlZCBieSB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cbmZzL3RyYWNlZnMvaW5vZGUuYy0xMC0gKi9cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTctI2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3RyYWNlZnMuaFx1MDAzZVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zzbm90aWZ5LmhcdTAwM2Vcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjYtI2RlZmluZSBUUkFDRUZTX0RFRkFVTFRfTU9ERVx0MDcwMFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI3OnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdHJhY2Vmc19pbm9kZV9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI5OnN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnRyYWNlZnNfbW91bnQ7XG5mcy90cmFjZWZzL2lub2RlLmM6MzA6c3RhdGljIGludCB0cmFjZWZzX21vdW50X2NvdW50O1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjMxOnN0YXRpYyBib29sIHRyYWNlZnNfcmVnaXN0ZXJlZDtcbmZzL3RyYWNlZnMvaW5vZGUuYy0zMi1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zMy0vKlxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM0OiAqIEtlZXAgdHJhY2sgb2YgYWxsIHRyYWNlZnNfaW5vZGVzIGluIG9yZGVyIHRvIHVwZGF0ZSB0aGVpclxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM1LSAqIGZsYWdzIGlmIG5lY2Vzc2FyeSBvbiBhIHJlbW91bnQuXG5mcy90cmFjZWZzL2lub2RlLmMtMzYtICovXG5mcy90cmFjZWZzL2lub2RlLmM6Mzc6c3RhdGljIERFRklORV9TUElOTE9DSyh0cmFjZWZzX2lub2RlX2xvY2spO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjM4OnN0YXRpYyBMSVNUX0hFQUQodHJhY2Vmc19pbm9kZXMpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTM5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQwOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKnRyYWNlZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3RyYWNlZnMvaW5vZGUuYy00MS17XG5mcy90cmFjZWZzL2lub2RlLmM6NDI6XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGk7XG5mcy90cmFjZWZzL2lub2RlLmMtNDMtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ0LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1Olx0dGkgPSBhbGxvY19pbm9kZV9zYihzYiwgdHJhY2Vmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ2LVx0aWYgKCF0aSlcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNDgtXG5mcy90cmFjZWZzL2lub2RlLmM6NDk6XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0cmFjZWZzX2lub2RlX2xvY2ssIGZsYWdzKTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MDpcdGxpc3RfYWRkX3JjdShcdTAwMjZ0aS1cdTAwM2VsaXN0LCBcdTAwMjZ0cmFjZWZzX2lub2Rlcyk7XG5mcy90cmFjZWZzL2lub2RlLmM6NTE6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRyYWNlZnNfaW5vZGVfbG9jaywgZmxhZ3MpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTUyLVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01NS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1NjpzdGF0aWMgdm9pZCB0cmFjZWZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL3RyYWNlZnMvaW5vZGUuYy01Ny17XG5mcy90cmFjZWZzL2lub2RlLmM6NTg6XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XG5mcy90cmFjZWZzL2lub2RlLmMtNTktXG5mcy90cmFjZWZzL2lub2RlLmM6NjA6XHRrbWVtX2NhY2hlX2ZyZWUodHJhY2Vmc19pbm9kZV9jYWNoZXAsIHRpKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy02MS19XG5mcy90cmFjZWZzL2lub2RlLmMtNjItXG5mcy90cmFjZWZzL2lub2RlLmM6NjM6c3RhdGljIHZvaWQgdHJhY2Vmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy90cmFjZWZzL2lub2RlLmMtNjQte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjY1Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTY2LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbmZzL3RyYWNlZnMvaW5vZGUuYy02Ny1cbmZzL3RyYWNlZnMvaW5vZGUuYzo2ODpcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRyYWNlZnNfaW5vZGVfbG9jaywgZmxhZ3MpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTY5LVx0bGlzdF9kZWxfcmN1KFx1MDAyNnRpLVx1MDAzZWxpc3QpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjcwOlx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0cmFjZWZzX2lub2RlX2xvY2ssIGZsYWdzKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy03MS19XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTc5PXN0YXRpYyBzc2l6ZV90IGRlZmF1bHRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtODQtXG5mcy90cmFjZWZzL2lub2RlLmM6ODU6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2Vmc19maWxlX29wZXJhdGlvbnMgPSB7XG5mcy90cmFjZWZzL2lub2RlLmMtODYtXHQucmVhZCA9XHRcdGRlZmF1bHRfcmVhZF9maWxlLFxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy05MS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo5MjpzdGF0aWMgc3RydWN0IHRyYWNlZnNfZGlyX29wcyB7XG5mcy90cmFjZWZzL2lub2RlLmMtOTMtXHRpbnQgKCpta2RpcikoY29uc3QgY2hhciAqbmFtZSk7XG5mcy90cmFjZWZzL2lub2RlLmMtOTQtXHRpbnQgKCpybWRpcikoY29uc3QgY2hhciAqbmFtZSk7XG5mcy90cmFjZWZzL2lub2RlLmM6OTU6fSB0cmFjZWZzX29wcyBfX3JvX2FmdGVyX2luaXQ7XG5mcy90cmFjZWZzL2lub2RlLmMtOTYtXG5mcy90cmFjZWZzL2lub2RlLmM6OTc6c3RhdGljIHN0cnVjdCBkZW50cnkgKnRyYWNlZnNfc3lzY2FsbF9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL3RyYWNlZnMvaW5vZGUuYy05OC1cdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTAwLXtcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMDE6XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGk7XG5mcy90cmFjZWZzL2lub2RlLmMtMTAyLVx0c3RydWN0IG5hbWVfc25hcHNob3QgbmFtZTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTA5LVx0ICovXG5mcy90cmFjZWZzL2lub2RlLmM6MTEwOlx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XG5mcy90cmFjZWZzL2lub2RlLmMtMTExLVx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19JTlNUQU5DRV9JTk9ERTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTE1LVx0ICogVGhlIG1rZGlyIGNhbGwgY2FuIGNhbGwgdGhlIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgY3JlYXRlXG5mcy90cmFjZWZzL2lub2RlLmM6MTE2Olx0ICogdGhlIGZpbGVzIHdpdGhpbiB0aGUgdHJhY2VmcyBzeXN0ZW0uIEl0IGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsXG5mcy90cmFjZWZzL2lub2RlLmMtMTE3LVx0ICogbWtkaXIgcm91dGluZSB0byBoYW5kbGUgcmFjZXMuXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTEyMC1cdGlub2RlX3VubG9jayhpbm9kZSk7XG5mcy90cmFjZWZzL2lub2RlLmM6MTIxOlx0cmV0ID0gdHJhY2Vmc19vcHMubWtkaXIobmFtZS5uYW1lLm5hbWUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTEyMi1cdGlub2RlX2xvY2soaW5vZGUpO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0xMjctXG5mcy90cmFjZWZzL2lub2RlLmM6MTI4OnN0YXRpYyBpbnQgdHJhY2Vmc19zeXNjYWxsX3JtZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMjkte1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0xMzQtXHQgKiBUaGUgcm1kaXIgY2FsbCBjYW4gY2FsbCB0aGUgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBjcmVhdGVcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMzU6XHQgKiB0aGUgZmlsZXMgd2l0aGluIHRoZSB0cmFjZWZzIHN5c3RlbS4gSXQgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMzYtXHQgKiBybWRpciByb3V0aW5lIHRvIGhhbmRsZSByYWNlcy5cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTQzLVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE0NDpcdHJldCA9IHRyYWNlZnNfb3BzLnJtZGlyKG5hbWUubmFtZS5uYW1lKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNDUtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE1Mi1cbmZzL3RyYWNlZnMvaW5vZGUuYzoxNTM6c3RhdGljIHZvaWQgc2V0X3RyYWNlZnNfaW5vZGVfb3duZXIoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNTQte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjE1NTpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNTYtXHRzdHJ1Y3QgaW5vZGUgKnJvb3RfaW5vZGUgPSB0aS1cdTAwM2Vwcml2YXRlO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0xNjgtXHRpZiAocm9vdF9pbm9kZSAhPSBkX2lub2RlKHJvb3RfaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX3Jvb3QpKSB7XG5mcy90cmFjZWZzL2lub2RlLmM6MTY5Olx0XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqcnRpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3MC1cbmZzL3RyYWNlZnMvaW5vZGUuYzoxNzE6XHRcdHJ0aSA9IGdldF90cmFjZWZzKHJvb3RfaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3Mi1cdFx0cm9vdF9pbm9kZSA9IGRfaW5vZGUocm9vdF9pbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfcm9vdCk7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5MS1cbmZzL3RyYWNlZnMvaW5vZGUuYzoxOTI6c3RhdGljIGludCB0cmFjZWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy90cmFjZWZzL2lub2RlLmMtMTkzLVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5NC17XG5mcy90cmFjZWZzL2lub2RlLmM6MTk1Olx0c2V0X3RyYWNlZnNfaW5vZGVfb3duZXIoaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5Ni1cdHJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTk4LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE5OTpzdGF0aWMgaW50IHRyYWNlZnNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDAtXHRcdFx0ICAgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCxcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjA0LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIwNTpcdHNldF90cmFjZWZzX2lub2RlX293bmVyKGlub2RlKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDYtXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjA5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIxMDpzdGF0aWMgaW50IHRyYWNlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxMS1cdFx0XHQgICBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxNC1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG5mcy90cmFjZWZzL2lub2RlLmM6MjE1Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxNi1cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjI1LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIyNjpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdHJhY2Vmc19pbnN0YW5jZV9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMjctXHQubG9va3VwXHRcdD0gc2ltcGxlX2xvb2t1cCxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMjg6XHQubWtkaXJcdFx0PSB0cmFjZWZzX3N5c2NhbGxfbWtkaXIsXG5mcy90cmFjZWZzL2lub2RlLmM6MjI5Olx0LnJtZGlyXHRcdD0gdHJhY2Vmc19zeXNjYWxsX3JtZGlyLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIzMDpcdC5wZXJtaXNzaW9uXHQ9IHRyYWNlZnNfcGVybWlzc2lvbixcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzE6XHQuZ2V0YXR0clx0PSB0cmFjZWZzX2dldGF0dHIsXG5mcy90cmFjZWZzL2lub2RlLmM6MjMyOlx0LnNldGF0dHJcdD0gdHJhY2Vmc19zZXRhdHRyLFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIzMy19O1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTIzNC1cbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzU6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHRyYWNlZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy90cmFjZWZzL2lub2RlLmMtMjM2LVx0Lmxvb2t1cFx0XHQ9IHNpbXBsZV9sb29rdXAsXG5mcy90cmFjZWZzL2lub2RlLmM6MjM3Olx0LnBlcm1pc3Npb25cdD0gdHJhY2Vmc19wZXJtaXNzaW9uLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIzODpcdC5nZXRhdHRyXHQ9IHRyYWNlZnNfZ2V0YXR0cixcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzk6XHQuc2V0YXR0clx0PSB0cmFjZWZzX3NldGF0dHIsXG5mcy90cmFjZWZzL2lub2RlLmMtMjQwLX07XG5mcy90cmFjZWZzL2lub2RlLmMtMjQxLVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI0MjpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdHJhY2Vmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy90cmFjZWZzL2lub2RlLmM6MjQzOlx0LnBlcm1pc3Npb25cdD0gdHJhY2Vmc19wZXJtaXNzaW9uLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI0NDpcdC5nZXRhdHRyXHQ9IHRyYWNlZnNfZ2V0YXR0cixcbmZzL3RyYWNlZnMvaW5vZGUuYzoyNDU6XHQuc2V0YXR0clx0PSB0cmFjZWZzX3NldGF0dHIsXG5mcy90cmFjZWZzL2lub2RlLmMtMjQ2LX07XG5mcy90cmFjZWZzL2lub2RlLmMtMjQ3LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI0ODpzdHJ1Y3QgaW5vZGUgKnRyYWNlZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy90cmFjZWZzL2lub2RlLmMtMjQ5LXtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjU3LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI1ODpzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvIHtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yNTktXHRrdWlkX3QgdWlkO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYz0yNjY9ZW51bSB7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI3MS1cbmZzL3RyYWNlZnMvaW5vZGUuYzoyNzI6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyB0cmFjZWZzX3BhcmFtX3NwZWNzW10gPSB7XG5mcy90cmFjZWZzL2lub2RlLmMtMjczLVx0ZnNwYXJhbV9naWRcdChcJiMzNDtnaWRcJiMzNDssXHRcdE9wdF9naWQpLFxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0yNzgtXG5mcy90cmFjZWZzL2lub2RlLmM6Mjc5OnN0YXRpYyBpbnQgdHJhY2Vmc19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4MC17XG5mcy90cmFjZWZzL2lub2RlLmM6MjgxOlx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqb3B0cyA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbmZzL3RyYWNlZnMvaW5vZGUuYy0yODItXHRzdHJ1Y3QgZnNfcGFyc2VfcmVzdWx0IHJlc3VsdDtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjg0LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI4NTpcdG9wdCA9IGZzX3BhcnNlKGZjLCB0cmFjZWZzX3BhcmFtX3NwZWNzLCBwYXJhbSwgXHUwMDI2cmVzdWx0KTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yODYtXHRpZiAob3B0IFx1MDAzYyAwKVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zMDAtXHQgKiBXZSBtaWdodCBsaWtlIHRvIHJlcG9ydCBiYWQgbW91bnQgb3B0aW9ucyBoZXJlO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjMwMTpcdCAqIGJ1dCB0cmFkaXRpb25hbGx5IHRyYWNlZnMgaGFzIGlnbm9yZWQgYWxsIG1vdW50IG9wdGlvbnNcbmZzL3RyYWNlZnMvaW5vZGUuYy0zMDItXHQgKi9cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMzA5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjMxMDpzdGF0aWMgaW50IHRyYWNlZnNfYXBwbHlfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIHJlbW91bnQpXG5mcy90cmFjZWZzL2lub2RlLmMtMzExLXtcbmZzL3RyYWNlZnMvaW5vZGUuYzozMTI6XHRzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvICpmc2kgPSBzYi1cdTAwM2VzX2ZzX2luZm87XG5mcy90cmFjZWZzL2lub2RlLmMtMzEzLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoc2ItXHUwMDNlc19yb290KTtcbmZzL3RyYWNlZnMvaW5vZGUuYzozMTQ6XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGk7XG5mcy90cmFjZWZzL2lub2RlLmMtMzE1LVx0Ym9vbCB1cGRhdGVfdWlkLCB1cGRhdGVfZ2lkO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zNDItXHRcdHJjdV9yZWFkX2xvY2soKTtcbmZzL3RyYWNlZnMvaW5vZGUuYzozNDM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRpLCBcdTAwMjZ0cmFjZWZzX2lub2RlcywgbGlzdCkge1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0NC1cdFx0XHRpZiAodXBkYXRlX3VpZCkge1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zNjgtXG5mcy90cmFjZWZzL2lub2RlLmM6MzY5OnN0YXRpYyBpbnQgdHJhY2Vmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy90cmFjZWZzL2lub2RlLmMtMzcwLXtcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNzEtXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmMtXHUwMDNlcm9vdC1cdTAwM2VkX3NiO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjM3MjpcdHN0cnVjdCB0cmFjZWZzX2ZzX2luZm8gKnNiX29wdHMgPSBzYi1cdTAwM2VzX2ZzX2luZm87XG5mcy90cmFjZWZzL2lub2RlLmM6MzczOlx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqbmV3X29wdHMgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG5mcy90cmFjZWZzL2lub2RlLmMtMzc0LVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zODEtXG5mcy90cmFjZWZzL2lub2RlLmM6MzgyOlx0cmV0dXJuIHRyYWNlZnNfYXBwbHlfb3B0aW9ucyhzYiwgdHJ1ZSk7XG5mcy90cmFjZWZzL2lub2RlLmMtMzgzLX1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zODQtXG5mcy90cmFjZWZzL2lub2RlLmM6Mzg1OnN0YXRpYyBpbnQgdHJhY2Vmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM4Ni17XG5mcy90cmFjZWZzL2lub2RlLmM6Mzg3Olx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqZnNpID0gcm9vdC1cdTAwM2VkX3NiLVx1MDAzZXNfZnNfaW5mbztcbmZzL3RyYWNlZnMvaW5vZGUuYy0zODgtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQwMC1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0MDE6c3RhdGljIGludCB0cmFjZWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDIte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjQwMzpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDQtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQxNi1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0MTc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHRyYWNlZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MTg6XHQuYWxsb2NfaW5vZGUgICAgPSB0cmFjZWZzX2FsbG9jX2lub2RlLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQxOTpcdC5mcmVlX2lub2RlICAgICA9IHRyYWNlZnNfZnJlZV9pbm9kZSxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MjA6XHQuZGVzdHJveV9pbm9kZSAgPSB0cmFjZWZzX2Rlc3Ryb3lfaW5vZGUsXG5mcy90cmFjZWZzL2lub2RlLmM6NDIxOlx0LmRyb3BfaW5vZGUgICAgID0gdHJhY2Vmc19kcm9wX2lub2RlLFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQyMi1cdC5zdGF0ZnNcdFx0PSBzaW1wbGVfc3RhdGZzLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQyMzpcdC5zaG93X29wdGlvbnNcdD0gdHJhY2Vmc19zaG93X29wdGlvbnMsXG5mcy90cmFjZWZzL2lub2RlLmMtNDI0LX07XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQzMy0gKi9cbmZzL3RyYWNlZnMvaW5vZGUuYzo0MzQ6c3RhdGljIHZvaWQgdHJhY2Vmc19kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQzNS17XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQzOS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0NDA6c3RhdGljIGludCB0cmFjZWZzX2RfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NDEtXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNDQ3LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ0ODpzdGF0aWMgaW50IHRyYWNlZnNfZF9kZWxldGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ0OS17XG5mcy90cmFjZWZzL2lub2RlLmMtNDUwLVx0LypcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NTE6XHQgKiBXZSB3YW50IHRvIGtlZXAgZXZlbnRmcyBkZW50cmllcyBhcm91bmQgYnV0IG5vdCB0cmFjZWZzXG5mcy90cmFjZWZzL2lub2RlLmMtNDUyLVx0ICogb25lcy4gZXZlbnRmcyBkZW50cmllcyBoYXZlIGNvbnRlbnQgaW4gZF9mc2RhdGEuXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ1Ny1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB0cmFjZWZzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1OTpcdC5kX3JldmFsaWRhdGUgPSB0cmFjZWZzX2RfcmV2YWxpZGF0ZSxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NjA6XHQuZF9yZWxlYXNlID0gdHJhY2Vmc19kX3JlbGVhc2UsXG5mcy90cmFjZWZzL2lub2RlLmM6NDYxOlx0LmRfZGVsZXRlID0gdHJhY2Vmc19kX2RlbGV0ZSxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjItfTtcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjMtXG5mcy90cmFjZWZzL2lub2RlLmM6NDY0OnN0YXRpYyBpbnQgdHJhY2Vmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjUte1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy00NzItXG5mcy90cmFjZWZzL2lub2RlLmM6NDczOlx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnRyYWNlZnNfc3VwZXJfb3BlcmF0aW9ucztcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NzQ6XHR0cmFjZWZzX2FwcGx5X29wdGlvbnMoc2IsIGZhbHNlKTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NzU6XHRzZXRfZGVmYXVsdF9kX29wKHNiLCBcdTAwMjZ0cmFjZWZzX2RlbnRyeV9vcGVyYXRpb25zKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy00NzYtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ3OS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0ODA6c3RhdGljIGludCB0cmFjZWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL3RyYWNlZnMvaW5vZGUuYy00ODEte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ4MjpcdGludCBlcnIgPSBnZXRfdHJlZV9zaW5nbGUoZmMsIHRyYWNlZnNfZmlsbF9zdXBlcik7XG5mcy90cmFjZWZzL2lub2RlLmMtNDgzLVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy00ODYtXG5mcy90cmFjZWZzL2lub2RlLmM6NDg3Olx0cmV0dXJuIHRyYWNlZnNfcmVjb25maWd1cmUoZmMpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4OC19XG5mcy90cmFjZWZzL2lub2RlLmMtNDg5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ5MDpzdGF0aWMgdm9pZCB0cmFjZWZzX2ZyZWVfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ5MS17XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ5NC1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTU6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgdHJhY2Vmc19jb250ZXh0X29wcyA9IHtcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTY6XHQuZnJlZVx0XHQ9IHRyYWNlZnNfZnJlZV9mYyxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTc6XHQucGFyc2VfcGFyYW1cdD0gdHJhY2Vmc19wYXJzZV9wYXJhbSxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTg6XHQuZ2V0X3RyZWVcdD0gdHJhY2Vmc19nZXRfdHJlZSxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTk6XHQucmVjb25maWd1cmVcdD0gdHJhY2Vmc19yZWNvbmZpZ3VyZSxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDAtfTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDEtXG5mcy90cmFjZWZzL2lub2RlLmM6NTAyOnN0YXRpYyBpbnQgdHJhY2Vmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUwMy17XG5mcy90cmFjZWZzL2lub2RlLmM6NTA0Olx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqZnNpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTUwNS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1MDY6XHRmc2kgPSBremFsbG9jX29iaihzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDctXHRpZiAoIWZzaSlcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNTEyLVx0ZmMtXHUwMDNlc19mc19pbmZvID0gZnNpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxMzpcdGZjLVx1MDAzZW9wcyA9IFx1MDAyNnRyYWNlZnNfY29udGV4dF9vcHM7XG5mcy90cmFjZWZzL2lub2RlLmMtNTE0LVx0cmV0dXJuIDA7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTUxNz1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdHJhY2VfZnNfdHlwZSA9IHtcbmZzL3RyYWNlZnMvaW5vZGUuYy01MTgtXHQub3duZXIgPVx0VEhJU19NT0RVTEUsXG5mcy90cmFjZWZzL2lub2RlLmM6NTE5Olx0Lm5hbWUgPVx0XHRcJiMzNDt0cmFjZWZzXCYjMzQ7LFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUyMDpcdC5pbml0X2ZzX2NvbnRleHQgPSB0cmFjZWZzX2luaXRfZnNfY29udGV4dCxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjE6XHQucGFyYW1ldGVyc1x0PSB0cmFjZWZzX3BhcmFtX3NwZWNzLFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUyMi1cdC5raWxsX3NiID1cdGtpbGxfYW5vbl9zdXBlcixcbmZzL3RyYWNlZnMvaW5vZGUuYy01MjMtfTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjQ6TU9EVUxFX0FMSUFTX0ZTKFwmIzM0O3RyYWNlZnNcJiMzNDspO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTUyNS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjY6c3RydWN0IGRlbnRyeSAqdHJhY2Vmc19zdGFydF9jcmVhdGluZyhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQpXG5mcy90cmFjZWZzL2lub2RlLmMtNTI3LXtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNTMwLVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUzMTpcdHByX2RlYnVnKFwmIzM0O3RyYWNlZnM6IGNyZWF0aW5nIGZpbGUgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LG5hbWUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTUzMi1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1MzM6XHRlcnJvciA9IHNpbXBsZV9waW5fZnMoXHUwMDI2dHJhY2VfZnNfdHlwZSwgXHUwMDI2dHJhY2Vmc19tb3VudCxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MzQ6XHRcdFx0ICAgICAgXHUwMDI2dHJhY2Vmc19tb3VudF9jb3VudCk7XG5mcy90cmFjZWZzL2lub2RlLmMtNTM1LVx0aWYgKGVycm9yKVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01NDMtXHRpZiAoIXBhcmVudClcbmZzL3RyYWNlZnMvaW5vZGUuYzo1NDQ6XHRcdHBhcmVudCA9IHRyYWNlZnNfbW91bnQtXHUwMDNlbW50X3Jvb3Q7XG5mcy90cmFjZWZzL2lub2RlLmMtNTQ1LVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01NDctXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG5mcy90cmFjZWZzL2lub2RlLmM6NTQ4Olx0XHRzaW1wbGVfcmVsZWFzZV9mcyhcdTAwMjZ0cmFjZWZzX21vdW50LCBcdTAwMjZ0cmFjZWZzX21vdW50X2NvdW50KTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01NDktXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1Mi1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1NTM6c3RydWN0IGRlbnRyeSAqdHJhY2Vmc19mYWlsZWRfY3JlYXRpbmcoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1NC17XG5mcy90cmFjZWZzL2lub2RlLmMtNTU1LVx0c2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo1NTY6XHRzaW1wbGVfcmVsZWFzZV9mcyhcdTAwMjZ0cmFjZWZzX21vdW50LCBcdTAwMjZ0cmFjZWZzX21vdW50X2NvdW50KTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01NTctXHRyZXR1cm4gTlVMTDtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNTU5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU2MDpzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX2VuZF9jcmVhdGluZyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy90cmFjZWZzL2lub2RlLmMtNTYxLXtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmM9NTY3PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmluc3RhbmNlX2lub2RlKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL3RyYWNlZnMvaW5vZGUuYy01Njgte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjU2OTpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01NzAtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU3Ni1cdHdoaWxlICghSVNfUk9PVChwYXJlbnQpKSB7XG5mcy90cmFjZWZzL2lub2RlLmM6NTc3Olx0XHR0aSA9IGdldF90cmFjZWZzKGRfaW5vZGUocGFyZW50KSk7XG5mcy90cmFjZWZzL2lub2RlLmMtNTc4LVx0XHRpZiAodGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfSU5TVEFOQ0VfSU5PREUpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU4Ni0vKipcbmZzL3RyYWNlZnMvaW5vZGUuYzo1ODc6ICogdHJhY2Vmc19jcmVhdGVfZmlsZSAtIGNyZWF0ZSBhIGZpbGUgaW4gdGhlIHRyYWNlZnMgZmlsZXN5c3RlbVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU4OC0gKiBAbmFtZTogYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01OTEtICogICAgICAgICAgZGlyZWN0b3J5IGRlbnRyeSBpZiBzZXQuICBJZiB0aGlzIHBhcmFtZXRlciBpcyBOVUxMLCB0aGVuIHRoZVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU5MjogKiAgICAgICAgICBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgdHJhY2VmcyBmaWxlc3lzdGVtLlxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU5My0gKiBAZGF0YTogYSBwb2ludGVyIHRvIHNvbWV0aGluZyB0aGF0IHRoZSBjYWxsZXIgd2lsbCB3YW50IHRvIGdldCB0byBsYXRlclxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01OTgtICpcbmZzL3RyYWNlZnMvaW5vZGUuYzo1OTk6ICogVGhpcyBpcyB0aGUgYmFzaWMgXCYjMzQ7Y3JlYXRlIGEgZmlsZVwmIzM0OyBmdW5jdGlvbiBmb3IgdHJhY2Vmcy4gIEl0IGFsbG93cyBmb3IgYVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwMC0gKiB3aWRlIHJhbmdlIG9mIGZsZXhpYmlsaXR5IGluIGNyZWF0aW5nIGEgZmlsZSwgb3IgYSBkaXJlY3RvcnkgKGlmIHlvdSB3YW50XG5mcy90cmFjZWZzL2lub2RlLmM6NjAxOiAqIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSwgdGhlIHRyYWNlZnNfY3JlYXRlX2RpcigpIGZ1bmN0aW9uIGlzXG5mcy90cmFjZWZzL2lub2RlLmMtNjAyLSAqIHJlY29tbWVuZGVkIHRvIGJlIHVzZWQgaW5zdGVhZC4pXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwNC0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgcG9pbnRlciB0byBhIGRlbnRyeSBpZiBpdCBzdWNjZWVkcy4gIFRoaXNcbmZzL3RyYWNlZnMvaW5vZGUuYzo2MDU6ICogcG9pbnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgdHJhY2Vmc19yZW1vdmUoKSBmdW5jdGlvbiB3aGVuIHRoZSBmaWxlIGlzXG5mcy90cmFjZWZzL2lub2RlLmMtNjA2LSAqIHRvIGJlIHJlbW92ZWQgKG5vIGF1dG9tYXRpYyBjbGVhbnVwIGhhcHBlbnMgaWYgeW91ciBtb2R1bGUgaXMgdW5sb2FkZWQsXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwOC0gKlxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYwOTogKiBJZiB0cmFjZWZzIGlzIG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWwsIHRoZSB2YWx1ZSAtJUVOT0RFViB3aWxsIGJlXG5mcy90cmFjZWZzL2lub2RlLmMtNjEwLSAqIHJldHVybmVkLlxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxMS0gKi9cbmZzL3RyYWNlZnMvaW5vZGUuYzo2MTI6c3RydWN0IGRlbnRyeSAqdHJhY2Vmc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUsXG5mcy90cmFjZWZzL2lub2RlLmMtNjEzLVx0XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLFxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy02MTUte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjYxNjpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcbmZzL3RyYWNlZnMvaW5vZGUuYy02MTctXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYyNS1cdEJVR19PTighU19JU1JFRyhtb2RlKSk7XG5mcy90cmFjZWZzL2lub2RlLmM6NjI2Olx0ZGVudHJ5ID0gdHJhY2Vmc19zdGFydF9jcmVhdGluZyhuYW1lLCBwYXJlbnQpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTYyNy1cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNjMwLVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzMTpcdGlub2RlID0gdHJhY2Vmc19nZXRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTYzMi1cdGlmICh1bmxpa2VseSghaW5vZGUpKVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzMzpcdFx0cmV0dXJuIHRyYWNlZnNfZmFpbGVkX2NyZWF0aW5nKGRlbnRyeSk7XG5mcy90cmFjZWZzL2lub2RlLmMtNjM0LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzNTpcdHRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTYzNi1cdHRpLVx1MDAzZXByaXZhdGUgPSBpbnN0YW5jZV9pbm9kZShwYXJlbnQsIGlub2RlKTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNjM4LVx0aW5vZGUtXHUwMDNlaV9tb2RlID0gbW9kZTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUmluZyBCdWZmZXIgbW1hcCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHJpbmcgYnVmZmVyJiMzOTtzIG1lbW9yeS1tYXBwZWQgYWNjZXNzLiBGaXJzdCwgSSBoYXZlIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGhhbmRsZWQgYnkgYENPTkZJR19UUkFDSU5HYCBvciBwZXJoYXBzIHRoZSBtb3JlIGdyYW51bGFyIGBDT05GSUdfRlRSQUNFYCwgb3IgZXZlbiBhbm90aGVyIGNvbmZpZyBlbnRpcmVseS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGBtZW51Y29uZmlnYCBvcHRpb25zIHVuZGVyIFRSQUNJTkcuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9ucyBzcGVjaWZpYyB0byByaW5nIGJ1ZmZlciBtbWFwLgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O2xsIGhlYWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGByaW5nX2J1ZmZlcl9tYXBgIGlzIGRlZmluZWQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCBhbmQgdGhlbiBicm9hZGVuIHRoZSBzZWFyY2ggdG8gaW5jbHVkZSBga2VybmVsL3RyYWNlL3RyYWNlLmNgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtZW1vcnkgbWFwcGluZyBpcyBtYW5hZ2VkIGFuZCBpZiB0aGVyZSBhcmUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaW5nX2J1ZmZlcl9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzgzMz1zdGF0aWMgaW50IF9fcmJfbWFwX3ZtYShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcixcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03ODM5LVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzg0MDppbnQgcmluZ19idWZmZXJfbWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc4NDEtXHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTA5LSAqL1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NzkxMDp2b2lkIHJpbmdfYnVmZmVyX21hcF9kdXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzkxMS17XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzkyNz1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjEtXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3OTYyOmludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYzLXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz03MzY1PXN0YXRpYyBsb25nIHRyYWNpbmdfYnVmZmVyc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4MC1cbmtlcm5lbC90cmFjZS90cmFjZS5jOjczODE6XHRcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgyLVx0XHRcdFx0XHRcdCAgaXRlci1cdTAwM2VjcHVfZmlsZSk7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQwNT1zdGF0aWMgdm9pZCB0cmFjaW5nX2J1ZmZlcnNfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0MDktXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDEwOlx0cmluZ19idWZmZXJfbWFwX2R1cChpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQxMS19XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQzNz1zdGF0aWMgaW50IHRyYWNpbmdfYnVmZmVyc19tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUwLVxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQ1MTpcdHJldCA9IHJpbmdfYnVmZmVyX21hcChpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsIGl0ZXItXHUwMDNlY3B1X2ZpbGUsIHZtYSk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUyLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2NzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBmb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYHJpbmdfYnVmZmVyX21hcGAgb3IgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBhcmUgd3JhcHBlZCBpbiBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzLCBzcGVjaWZpY2FsbHkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoaXMgaXMgYSBjb21tb24gcHJhY3RpY2UsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBvciBlbmFibGluZy9kaXNhYmxpbmcgZmVhdHVyZXMgYmFzZWQgb24gYnVpbGQgY29uZmlndXJhdGlvbnMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBjcml0aWNhbCBmb3IgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIsIHNvIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBJIG5lZWQgdG8ga25vdyAqaW1tZWRpYXRlbHkqIGlmIHRoZXkmIzM5O3JlIHRyZWF0ZWQgZGlmZmVyZW50bHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBTbywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzY2FuIGZvciB0aG9zZSBkaXJlY3RpdmVzIGFyb3VuZCB0aG9zZSB0d28gZnVuY3Rpb24gbmFtZXMuIFRoaXMgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGFkYXB0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzgzMDpcdFx0cmV0dXJuIGVycjtcbjc4MzE6XHR9XG43ODMyOlx0I2Vsc2Vcbjc4MzM6XHRzdGF0aWMgaW50IF9fcmJfbWFwX3ZtYShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcixcbjc4MzQ6XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbjc4MzU6XHR7XG43ODM2Olx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG43ODM3Olx0fVxuNzgzODpcdCNlbmRpZlxuNzgzOTpcdFxuNzg0MDpcdGludCByaW5nX2J1ZmZlcl9tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LFxuNzg0MTpcdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG43ODQyOlx0e1xuNzg0MzpcdFx0c3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7XG43ODQ0Olx0XHRzdHJ1Y3QgYnVmZmVyX3BhZ2UgKipzdWJidWZfaWRzO1xuNzg0NTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjc4NDY6XHRcdGludCBlcnI7XG43ODQ3Olx0XG43ODQ4Olx0XHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItXHUwMDNlY3B1bWFzaykgfHwgYnVmZmVyLVx1MDAzZXJlbW90ZSlcbjc4NDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODUwOlx0XG43ODUxOlx0XHRjcHVfYnVmZmVyID0gYnVmZmVyLVx1MDAzZWJ1ZmZlcnNbY3B1XTtcbjc4NTI6XHRcbjc4NTM6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZjcHVfYnVmZmVyLVx1MDAzZW1hcHBpbmdfbG9jayk7XG43ODU0Olx0XG43ODU1Olx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2V1c2VyX21hcHBlZCkge1xuNzg1NjpcdFx0XHRlcnIgPSBfX3JiX21hcF92bWEoY3B1X2J1ZmZlciwgdm1hKTtcbjc4NTc6XHRcdFx0aWYgKCFlcnIpXG43ODU4Olx0XHRcdFx0ZXJyID0gX19yYl9pbmNfZGVjX21hcHBlZChjcHVfYnVmZmVyLCB0cnVlKTtcbjc4NTk6XHRcdFx0cmV0dXJuIGVycjtcbjc4NjA6XHRcdH1cbjc4NjE6XHRcbjc4NjI6XHRcdC8qIHByZXZlbnQgYW5vdGhlciB0aHJlYWQgZnJvbSBjaGFuZ2luZyBidWZmZXIvc3ViLWJ1ZmZlciBzaXplcyAqL1xuNzg2MzpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmJ1ZmZlci1cdTAwM2VtdXRleCk7XG43ODY0Olx0XG43ODY1Olx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2Vucl9wYWdlcyBcdTAwM2UgcmJfc3RhdGljX21heF9wYWdlcygpKVxuNzg2NjpcdFx0XHRyZXR1cm4gLUUyQklHO1xuNzg2NzpcdFxuNzg2ODpcdFx0ZXJyID0gcmJfYWxsb2NfbWV0YV9wYWdlKGNwdV9idWZmZXIpO1xuNzg2OTpcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0ODAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgdHJhY2luZyBjb2RlLgoKKipEaXZpbmcgaW50byB0aGUgUmluZyBCdWZmZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFib3ZlIGxpbmUgNzgzMC4gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGZhaXJseSBsb3ctbGV2ZWwsIGxpa2VseSBkZWFsaW5nIHdpdGggY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoYXQgbGluZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXM6IEFyZSB3ZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgZGF0YSBhY2Nlc3MsIG9yIGVycm9yIGhhbmRsaW5nPyBJcyBpdCByZWxhdGVkIHRvIHdyaXRlciBvcGVyYXRpb25zLCBvciBtYXliZSBhIHJlYWRlciBzaWRlIHRoYXQgaXMgaW4gcGxhY2U/IEkgd2lsbCBleHBlY3QgaXQgdG8gYmUgYSBrZXkgYXJlYSB0aGF0IEkgY2FuIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIHNvdXJjZXMgdG8gdW5kZXJzdGFuZCB0aGUgd29ya2luZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc3OTA6XHRcdFx0Lypcbjc3OTE6XHRcdFx0ICogUGFkIHdpdGggdGhlIHplcm8tcGFnZSB0byBhbGlnbiB0aGUgbWV0YS1wYWdlIHdpdGggdGhlXG43NzkyOlx0XHRcdCAqIHN1Yi1idWZmZXJzLlxuNzc5MzpcdFx0XHQgKi9cbjc3OTQ6XHRcdFx0bWV0YV9wYWdlX3BhZGRpbmcgPSBzdWJidWZfcGFnZXMgLSAxO1xuNzc5NTpcdFx0XHR3aGlsZSAobWV0YV9wYWdlX3BhZGRpbmctLSBcdTAwMjZcdTAwMjYgcCBcdTAwM2MgbnJfcGFnZXMpIHtcbjc3OTY6XHRcdFx0XHR1bnNpZ25lZCBsb25nIF9fbWF5YmVfdW51c2VkIHplcm9fYWRkciA9XG43Nzk3Olx0XHRcdFx0XHR2bWEtXHUwMDNldm1fc3RhcnQgJiM0MzsgKFBBR0VfU0laRSAqIHApO1xuNzc5ODpcdFxuNzc5OTpcdFx0XHRcdHBhZ2VzW3AmIzQzOyYjNDM7XSA9IFpFUk9fUEFHRSh6ZXJvX2FkZHIpO1xuNzgwMDpcdFx0XHR9XG43ODAxOlx0XHR9IGVsc2Uge1xuNzgwMjpcdFx0XHQvKiBTa2lwIHRoZSBtZXRhLXBhZ2UgKi9cbjc4MDM6XHRcdFx0cGdvZmYgLT0gc3ViYnVmX3BhZ2VzO1xuNzgwNDpcdFxuNzgwNTpcdFx0XHRzICYjNDM7PSBwZ29mZiAvIHN1YmJ1Zl9wYWdlcztcbjc4MDY6XHRcdH1cbjc4MDc6XHRcbjc4MDg6XHRcdHdoaWxlIChwIFx1MDAzYyBucl9wYWdlcykge1xuNzgwOTpcdFx0XHRzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnN1YmJ1Zjtcbjc4MTA6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG43ODExOlx0XHRcdGludCBvZmYgPSAwO1xuNzgxMjpcdFxuNzgxMzpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKHMgXHUwMDNlPSBucl9zdWJidWZzKSlcbjc4MTQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4MTU6XHRcbjc4MTY6XHRcdFx0c3ViYnVmID0gY3B1X2J1ZmZlci1cdTAwM2VzdWJidWZfaWRzW3NdO1xuNzgxNzpcdFx0XHRwYWdlID0gdmlydF90b19wYWdlKCh2b2lkICopc3ViYnVmLVx1MDAzZXBhZ2UpO1xuNzgxODpcdFxuNzgxOTpcdFx0XHRmb3IgKDsgb2ZmIFx1MDAzYyAoMSBcdTAwM2NcdTAwM2MgKHN1YmJ1Zl9vcmRlcikpOyBvZmYmIzQzOyYjNDM7LCBwYWdlJiM0MzsmIzQzOykge1xuNzgyMDpcdFx0XHRcdGlmIChwIFx1MDAzZT0gbnJfcGFnZXMpXG43ODIxOlx0XHRcdFx0XHRicmVhaztcbjc4MjI6XHRcbjc4MjM6XHRcdFx0XHRwYWdlc1twJiM0MzsmIzQzO10gPSBwYWdlO1xuNzgyNDpcdFx0XHR9XG43ODI1Olx0XHRcdHMmIzQzOyYjNDM7O1xuNzgyNjpcdFx0fVxuNzgyNzpcdFxuNzgyODpcdFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBwYWdlcywgXHUwMDI2bnJfcGFnZXMpO1xuNzgyOTpcdFxuNzgzMDpcdFx0cmV0dXJuIGVycjtcbjc4MzE6XHR9XG43ODMyOlx0I2Vsc2Vcbjc4MzM6XHRzdGF0aWMgaW50IF9fcmJfbWFwX3ZtYShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcixcbjc4MzQ6XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gUmluZyBCdWZmZXIgVGVycml0b3J5KioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgYCNpZmRlZmAgYmxvY2sgYXJvdW5kIGxpbmUgNzc1MC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCB0aGVyZT8gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlLCBwcm9iYWJseSBndWFyZGluZyBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIG1heWJlIGEgZGVidWcgZmVhdHVyZSwgYSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgYSBzZWN0aW9uIG9mIGNvZGUgdGllZCB0byBhIHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbml0aWFsIGd1ZXNzIHdvdWxkIGJlIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgYnV0IEkgd2lsbCBnbyBhbmQgZmluZCBvdXQuIFRoaXMgY291bGQgYmUgcmVsZXZhbnQgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMgZGVwZW5kaW5nIG9uIHdoYXQgaXQgaXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1hY3JvIGlzIGJlaW5nIHRlc3RlZCBhbmQgdGhlbiBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGF0IG1hY3JvIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgY29udHJvbHMuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IHBhcnQgb2YgdGhlIHJpbmcgYnVmZmVyIGNvZGUgYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzc0MDpcdHtcbjc3NDE6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc3ViYnVmcywgbnJfcGFnZXMsIG5yX3ZtYV9wYWdlcztcbjc3NDI6XHRcdHBnb2ZmX3QgcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYodm1hKTtcbjc3NDM6XHRcdHVuc2lnbmVkIGludCBzdWJidWZfcGFnZXMsIHN1YmJ1Zl9vcmRlcjtcbjc3NDQ6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG43NzQ1Olx0XHRpbnQgcCA9IDAsIHMgPSAwO1xuNzc0NjpcdFx0aW50IGVycjtcbjc3NDc6XHRcbjc3NDg6XHRcdC8qIFJlZnVzZSBNUF9QUklWQVRFIG9yIHdyaXRhYmxlIG1hcHBpbmdzICovXG43NzQ5Olx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSB8fCB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMgfHxcbjc3NTA6XHRcdCAgICAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpKVxuNzc1MTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuNzc1MjpcdFxuNzc1MzpcdFx0c3ViYnVmX29yZGVyID0gY3B1X2J1ZmZlci1cdTAwM2VidWZmZXItXHUwMDNlc3ViYnVmX29yZGVyO1xuNzc1NDpcdFx0c3ViYnVmX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgc3ViYnVmX29yZGVyO1xuNzc1NTpcdFxuNzc1NjpcdFx0aWYgKHN1YmJ1Zl9vcmRlciBcdTAwMjZcdTAwMjYgcGdvZmYgJSBzdWJidWZfcGFnZXMpXG43NzU3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzc1ODpcdFxuNzc1OTpcdFx0Lypcbjc3NjA6XHRcdCAqIE1ha2Ugc3VyZSB0aGUgbWFwcGluZyBjYW5ub3QgYmVjb21lIHdyaXRhYmxlIGxhdGVyLiBBbHNvIHRlbGwgdGhlIFZNXG43NzYxOlx0XHQgKiB0byBub3QgdG91Y2ggdGhlc2UgcGFnZXMgKFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCkuXG43NzYyOlx0XHQgKi9cbjc3NjM6XHRcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLFxuNzc2NDpcdFx0XHQgICAgIFZNX01BWVdSSVRFKTtcbjc3NjU6XHRcbjc3NjY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3B1X2J1ZmZlci1cdTAwM2VtYXBwaW5nX2xvY2spO1xuNzc2NzpcdFxuNzc2ODpcdFx0bnJfc3ViYnVmcyA9IGNwdV9idWZmZXItXHUwMDNlbnJfcGFnZXMgJiM0MzsgMTsgLyogJiM0MzsgcmVhZGVyLXN1YmJ1ZiAqL1xuNzc2OTpcdFx0bnJfcGFnZXMgPSAoKG5yX3N1YmJ1ZnMgJiM0MzsgMSkgXHUwMDNjXHUwMDNjIHN1YmJ1Zl9vcmRlcik7IC8qICYjNDM7IG1ldGEtcGFnZSAqL1xuNzc3MDpcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzYz0gcGdvZmYpXG43NzcxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzc3MjpcdFxuNzc3MzpcdFx0bnJfcGFnZXMgLT0gcGdvZmY7XG43Nzc0Olx0XG43Nzc1Olx0XHRucl92bWFfcGFnZXMgPSB2bWFfcGFnZXModm1hKTtcbjc3NzY6XHRcdGlmICghbnJfdm1hX3BhZ2VzIHx8IG5yX3ZtYV9wYWdlcyBcdTAwM2UgbnJfcGFnZXMpXG43Nzc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzc3ODpcdFxuNzc3OTpcdFx0bnJfcGFnZXMgPSBucl92bWFfcGFnZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjgwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIGNvZGUsIGFuZCBJJiMzOTttIHNwZWNpZmljYWxseSBjdXJpb3VzIGFib3V0IGhvdyBgI2lmZGVmYCBkaXJlY3RpdmVzIGFyZSBiZWluZyB1c2VkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGluc3RhbmNlcyB0aGF0IGJlZ2luICphYm92ZSogbGluZSA3NzQwLiBUaGlzIHN1Z2dlc3RzIEkmIzM5O20gbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHBhdHRlcm4gb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSByZWxhdGVkIHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGhpbiBhIGxhcmdlciBibG9jayBvZiBjb2RlLiBJJiMzOTttIHByb2JhYmx5IHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBhIHNwZWNpZmljIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3IgcGVyaGFwcyBwaW5wb2ludGluZyBhIGJ1ZyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gVGhlIGxpbmUgbnVtYmVyIGlzIG15IGluaXRpYWwgYW5jaG9yIHBvaW50OyBpdCBjb3VsZCBiZSBhIHNlY3Rpb24gd2l0aCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvciBwcm9ibGVtYXRpYyBjb25kaXRpb25hbCBsb2dpYy4gSSBuZWVkIHRvIGtlZXAgdGhlIGNvbnRleHQgYXJvdW5kIHRoaXMgbGluZSBudW1iZXIgaW4gbWluZCwgYW5kIHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgbWF5IGJlIGFmZmVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NzIwOlx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9sb2NrLCBmbGFncyk7XG43NzIxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3B1X2J1ZmZlci1cdTAwM2VidWZmZXItXHUwMDNlbXV0ZXgpO1xuNzcyMjpcdFxuNzcyMzpcdFx0cmV0dXJuIDA7XG43NzI0Olx0fVxuNzcyNTpcdFxuNzcyNjpcdC8qXG43NzI3Olx0ICogICAmIzQzOy0tLS0tLS0tLS0tLS0tJiM0MzsgIHBnb2ZmID09IDBcbjc3Mjg6XHQgKiAgIHwgICBtZXRhIHBhZ2UgIHxcbjc3Mjk6XHQgKiAgICYjNDM7LS0tLS0tLS0tLS0tLS0mIzQzOyAgcGdvZmYgPT0gMVxuNzczMDpcdCAqICAgfCBzdWJidWZmZXIgMCAgfFxuNzczMTpcdCAqICAgfCAgICAgICAgICAgICAgfFxuNzczMjpcdCAqICAgJiM0MzstLS0tLS0tLS0tLS0tLSYjNDM7ICBwZ29mZiA9PSAoMSAmIzQzOyAoMSBcdTAwM2NcdTAwM2Mgc3ViYnVmX29yZGVyKSlcbjc3MzM6XHQgKiAgIHwgc3ViYnVmZmVyIDEgIHxcbjc3MzQ6XHQgKiAgIHwgICAgICAgICAgICAgIHxcbjc3MzU6XHQgKiAgICAgICAgIC4uLlxuNzczNjpcdCAqL1xuNzczNzpcdCNpZmRlZiBDT05GSUdfTU1VXG43NzM4Olx0c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG43NzM5Olx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG43NzQwOlx0e1xuNzc0MTpcdFx0dW5zaWduZWQgbG9uZyBucl9zdWJidWZzLCBucl9wYWdlcywgbnJfdm1hX3BhZ2VzO1xuNzc0MjpcdFx0cGdvZmZfdCBwZ29mZiA9IHZtYV9zdGFydF9wZ29mZih2bWEpO1xuNzc0MzpcdFx0dW5zaWduZWQgaW50IHN1YmJ1Zl9wYWdlcywgc3ViYnVmX29yZGVyO1xuNzc0NDpcdFx0c3RydWN0IHBhZ2UgKipwYWdlcyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MTgKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSaW5nIEJ1ZmZlciBWdWxuZXJhYmlsaXR5KioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoaXMgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgdnVsbmVyYWJpbGl0eSB0byB0YXJnZXQuIENvbnNpZGVyaW5nIHRoaXMgaXMgYW1kNjQsIGBDT05GSUdfTU1VYCBpcyBhIGdpdmVuLCBzbyB3ZSBjYW4gaWdub3JlIHRoYXQuIFRoZSBrZXkgY29uZmlncyB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGggYXJlIGBDT05GSUdfVFJBQ0lOR2AgYW5kIGBDT05GSUdfUklOR19CVUZGRVJgLiBXZSAqbXVzdCogZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgYXJlIGVuYWJsZWQgYmVjYXVzZSBgVFJBQ0lOR2AgaXMgd2hhdCBlbmFibGVzIGByaW5nX2J1ZmZlci5vYCBhbmQgYHRyYWNlLm9gLCB3aGljaCBhcmUgY2VudHJhbCBoZXJlLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG91ciBmb2N1cyBzeW1ib2xzLiBXZSBoYXZlOgoKKiAgIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAKKiAgIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgCiogICBgcmluZ19idWZmZXJfbWFwYAoqICAgYHJiX2dldF9yZWFkZXJfcGFnZWAKCk9rYXksIHRob3NlIGxvb2sgc3BvdCBvbi4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhpcyBjb2RlIHBhdGggYW5kIG5vdCB1YmlxdWl0b3VzIGFjcm9zcyB0aGUga2VybmVsLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4KCkkmIzM5O2xsIHF1aWNrbHkgdHJhY2UgdGhlIGNhbGwgZmxvdyB0byBlbnN1cmUgdGhpcyBpcyBzb2xpZDogYHRyYWNpbmdfYnVmZmVyc19pb2N0bGAgY2FsbHMgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCwgd2hpY2ggY2FsbHMgYHJiX2dldF9yZWFkZXJfcGFnZWAuIEFuZCBgdHJhY2luZ19idWZmZXJzX21tYXBgIGNhbGxzIGByaW5nX2J1ZmZlcl9tYXBgLiBMb29rcyBnb29kLgoKTm93LCB0aW1lIHRvIG5haWwgZG93biB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBzdW1tYXJpemUgZXZlcnl0aGluZyBmb3IgbWF4aW11bSBjbGFyaXR5OgoKKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLCBhYnNvbHV0ZWx5LgoqICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgYW5kIGFjY3VyYXRlOiBUaGUgbW9kaWZpY2F0aW9uIGluIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AgaXMgYWx0ZXJpbmcgYSBgV0FSTl9PTmAgYXNzZXJ0aW9uIGxvZ2ljIGluIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYHRyYWNlZnNgIGlvY3RsIGBUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVJgIG9uIGB0cmFjZV9waXBlX3Jhd2AuCiogICBgRm9jdXNTeW1ib2xzYDogQ29uZmlybWVkLiBJIGhhdmUgdGhlc2UgZXhhY3RseSByaWdodDogYFsmIzM0O3JpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyJiMzNDssICYjMzQ7dHJhY2luZ19idWZmZXJzX2lvY3RsJiMzNDssICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssICYjMzQ7cmJfZ2V0X3JlYWRlcl9wYWdlJiMzNDtdYC4KKiAgIGBFbmFibGVDb25maWdzYDogSnVzdCB0aGUgb25lIG5lZWRlZDogYFsmIzM0O1RSQUNJTkcmIzM0O11gLgoKUGVyZmVjdC4gRmluYWwgcmV2aWV3IGNvbXBsZXRlLiBSZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQUNJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgICAmIzM0O3JiX2dldF9yZWFkZXJfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFDSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXImIzM0OywKICAgICYjMzQ7dHJhY2luZ19idWZmZXJzX2lvY3RsJiMzNDssCiAgICAmIzM0O3JpbmdfYnVmZmVyX21hcCYjMzQ7LAogICAgJiMzNDtyYl9nZXRfcmVhZGVyX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgV0FSTl9PTiBhc3NlcnRpb24gbG9naWMgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKSBpbiBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYywgcmVsYXhpbmcgdGhlIGNvbmRpdGlvbiB3aGVuIHJiX2dldF9yZWFkZXJfcGFnZSgpIHJldHVybnMgTlVMTCB0byBvbmx5IHRyaWdnZXIgd2hlbiByZWFkZXJfcGFnZSBpcyBub3QgZXF1YWwgdG8gY29tbWl0X3BhZ2UuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUiBpb2N0bCBvbiB0cmFjZWZzIHBlci1DUFUgdHJhY2VfcGlwZV9yYXcgZmlsZXMgYWZ0ZXIgbW1hcHBpbmcgdGhlIGJ1ZmZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvci93YXJuaW5nIGNvbmRpdGlvbiBpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKWAgd2hlbiBgcmJfZ2V0X3JlYWRlcl9wYWdlKClgIHJldHVybnMgTlVMTC4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgdHJpZ2dlcmluZyBgV0FSTl9PTighcmVhZGVyKWAsIGl0IG5vdyBvbmx5IHdhcm5zIGlmIGBjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2VgIGJlZm9yZSBqdW1waW5nIHRvIGBvdXRgLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmNDhjMzlmNjA5YjdjNWI1MDcwOGVmNzBhYjZiMDA4YmI1MjRiMjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDEyOjM2OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCA5YzAzYTU1NWE2YmEyLi45ODEzMDE4MmUwNWRmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNzk5NSw4ICYjNDM7Nzk5NSwxMCBAQCBpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQogCQlnb3RvIG91dDsKIAogCXJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTsKLQlpZiAoV0FSTl9PTighcmVhZGVyKSkKJiM0MzsJaWYgKCFyZWFkZXIpIHsKJiM0MzsJCVdBUk5fT04oY3B1X2J1ZmZlci0mZ3Q7cmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci0mZ3Q7Y29tbWl0X3BhZ2UpOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJLyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi8KIAltaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci0mZ3Q7bG9zdF9ldmVudHM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBSaW5nIEJ1ZmZlciBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG8gcmV2aWV3LiBUaGUgZmlsZSBtb2RpZmllZCBpcyBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGludm9sdmVzIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiDigJMgZGVmaW5pdGVseSBhbiBhcmVhIEkmIzM5O20gZmFtaWxpYXIgd2l0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZnVuY3Rpb25hbGl0eS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDc5OTUuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBnZXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgaXMgY3JpdGljYWwgYmVmb3JlIHRyeWluZyB0byBndWVzcyB3aGF0IHRoZSBwdXJwb3NlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTgwOlx0XHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlKTtcbjc5ODE6XHRcbjc5ODI6XHRcdC8qXG43OTgzOlx0XHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cbjc5ODQ6XHRcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxuNzk4NTpcdFx0ICogZXZlcnl0aGluZy4gTGV0JiMzOTtzIHVwZGF0ZSB0aGUga2VybmVsIHJlYWRlciBhY2NvcmRpbmdseS5cbjc5ODY6XHRcdCAqL1xuNzk4NzpcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UtXHUwMDNlcmVhZCBcdTAwM2MgcmVhZGVyX3NpemUpIHtcbjc5ODg6XHRcdFx0d2hpbGUgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UtXHUwMDNlcmVhZCBcdTAwM2MgcmVhZGVyX3NpemUpXG43OTg5Olx0XHRcdFx0cmJfYWR2YW5jZV9yZWFkZXIoY3B1X2J1ZmZlcik7XG43OTkwOlx0XHRcdGdvdG8gb3V0O1xuNzk5MTpcdFx0fVxuNzk5MjpcdFxuNzk5MzpcdFx0LyogRGlkIHRoZSByZWFkZXIgY2F0Y2ggdXAgd2l0aCB0aGUgd3JpdGVyPyAqL1xuNzk5NDpcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSlcbjc5OTU6XHRcdFx0Z290byBvdXQ7XG43OTk2Olx0XG43OTk3Olx0XHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG43OTk4Olx0XHRpZiAoIXJlYWRlcikge1xuNzk5OTpcdFx0XHRXQVJOX09OKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSk7XG44MDAwOlx0XHRcdGdvdG8gb3V0O1xuODAwMTpcdFx0fVxuODAwMjpcdFxuODAwMzpcdFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cbjgwMDQ6XHRcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVx1MDAzZWxvc3RfZXZlbnRzO1xuODAwNTpcdFxuODAwNjpcdFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcbjgwMDc6XHRcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSkge1xuODAwODpcdFx0XHRcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cdTAwM2VwYWdlO1xuODAwOTpcdFx0XHRcdHVuc2lnbmVkIGludCBjb21taXQ7XG44MDEwOlx0XHRcdFx0LypcbjgwMTE6XHRcdFx0XHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxuODAxMjpcdFx0XHRcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXG44MDEzOlx0XHRcdFx0ICogb24gdGhlIHBhZ2UuXG44MDE0Olx0XHRcdFx0ICovXG44MDE1Olx0XHRcdFx0aWYgKHJlYWRlci1cdTAwM2VyZWFsX2VuZClcbjgwMTY6XHRcdFx0XHRcdGxvY2FsX3NldChcdTAwMjZkcGFnZS1cdTAwM2Vjb21taXQsIHJlYWRlci1cdTAwM2VyZWFsX2VuZCk7XG44MDE3Olx0XHRcdFx0LypcbjgwMTg6XHRcdFx0XHQgKiBJZiB0aGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UgdG8gc2F2ZSB0aGVcbjgwMTk6XHRcdFx0XHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cbjgwMjA6XHRcdFx0XHQgKi9cbjgwMjE6XHRcdFx0XHRjb21taXQgPSByYl9wYWdlX3NpemUocmVhZGVyKTtcbjgwMjI6XHRcdFx0XHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFx1MDAzZT0gc2l6ZW9mKG1pc3NlZF9ldmVudHMpKSB7XG44MDIzOlx0XHRcdFx0XHRtZW1jcHkoXHUwMDI2ZHBhZ2UtXHUwMDNlZGF0YVtjb21taXRdLCBcdTAwMjZtaXNzZWRfZXZlbnRzLFxuODAyNDpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihtaXNzZWRfZXZlbnRzKSk7XG44MDI1Olx0XHRcdFx0XHRsb2NhbF9hZGQoUkJfTUlTU0VEX1NUT1JFRCwgXHUwMDI2ZHBhZ2UtXHUwMDNlY29tbWl0KTtcbjgwMjY6XHRcdFx0XHR9XG44MDI3Olx0XHRcdFx0bG9jYWxfYWRkKFJCX01JU1NFRF9FVkVOVFMsIFx1MDAyNmRwYWdlLVx1MDAzZWNvbW1pdCk7XG44MDI4Olx0XHRcdH0gZWxzZSBpZiAoIVdBUk5fT05DRShjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNldGFpbF9wYWdlLFxuODAyOTpcdFx0XHRcdFx0ICAgICAgXCYjMzQ7UmVhZGVyIG9uIGNvbW1pdCB3aXRoICVsZCBtaXNzZWQgZXZlbnRzXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjAxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHdob2xlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24uIEkgY2FuJiMzOTt0IGp1c3QgbG9vayBhdCBzbmlwcGV0czsgSSBuZWVkIHRoZSBjb21wbGV0ZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBlbnRpcmV0eSBvZiB0aGUgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQganVkZ2VtZW50cyBhYm91dCBpdCwgb3IgaG93IGl0IG1pZ2h0IGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBiZSBhYmxlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIGZyb20gZW50cnkgdG8gZXhpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk2MDpcdH1cbjc5NjE6XHRcbjc5NjI6XHRpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuNzk2MzpcdHtcbjc5NjQ6XHRcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xuNzk2NTpcdFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XG43OTY2Olx0XHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XG43OTY3Olx0XHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xuNzk2ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjc5Njk6XHRcbjc5NzA6XHRcdGNwdV9idWZmZXIgPSByYl9nZXRfbWFwcGVkX2J1ZmZlcihidWZmZXIsIGNwdSk7XG43OTcxOlx0XHRpZiAoSVNfRVJSKGNwdV9idWZmZXIpKVxuNzk3MjpcdFx0XHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xuNzk3MzpcdFxuNzk3NDpcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwdV9idWZmZXItXHUwMDNlcmVhZGVyX2xvY2ssIGZsYWdzKTtcbjc5NzU6XHRcbjc5NzY6XHRjb25zdW1lOlxuNzk3NzpcdFx0aWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpXG43OTc4Olx0XHRcdGdvdG8gb3V0O1xuNzk3OTpcdFxuNzk4MDpcdFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSk7XG43OTgxOlx0XG43OTgyOlx0XHQvKlxuNzk4MzpcdFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXG43OTg0Olx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcbjc5ODU6XHRcdCAqIGV2ZXJ5dGhpbmcuIExldCYjMzk7cyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXG43OTg2Olx0XHQgKi9cbjc5ODc6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKSB7XG43OTg4Olx0XHRcdHdoaWxlIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKVxuNzk4OTpcdFx0XHRcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xuNzk5MDpcdFx0XHRnb3RvIG91dDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcbjc5OTM6XHRcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cbjc5OTQ6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpXG43OTk1Olx0XHRcdGdvdG8gb3V0O1xuNzk5NjpcdFxuNzk5NzpcdFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuNzk5ODpcdFx0aWYgKCFyZWFkZXIpIHtcbjc5OTk6XHRcdFx0V0FSTl9PTihjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpO1xuODAwMDpcdFx0XHRnb3RvIG91dDtcbjgwMDE6XHRcdH1cbjgwMDI6XHRcbjgwMDM6XHRcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXG44MDA0Olx0XHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cdTAwM2Vsb3N0X2V2ZW50cztcbjgwMDU6XHRcbjgwMDY6XHRcdGlmIChtaXNzZWRfZXZlbnRzKSB7XG44MDA3Olx0XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpIHtcbjgwMDg6XHRcdFx0XHRzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqZHBhZ2UgPSByZWFkZXItXHUwMDNlcGFnZTtcbjgwMDk6XHRcdFx0XHR1bnNpZ25lZCBpbnQgY29tbWl0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTAxCgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBSaW5nIEJ1ZmZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBkaWZmIHJlbGF0ZWQgdG8gYHJiX2dldF9yZWFkZXJfcGFnZWAuIEJlZm9yZSwgdGhlcmUgd2FzIGEgc2ltcGxlIGBXQVJOX09OKCFyZWFkZXIpYCBhZnRlciB0aGUgY2FsbC4gTm93LCB0aGF0JiMzOTtzIGJlZW4gcmVwbGFjZWQgd2l0aCBhbiBgaWYgKCFyZWFkZXIpYCBjaGVjayB0aGF0IGluY2x1ZGVzIGEgYFdBUk5fT04oY3B1X2J1ZmZlci0mZ3Q7cmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci0mZ3Q7Y29tbWl0X3BhZ2UpYCAqb25seSogaWYgYHJlYWRlcmAgaXMgTlVMTC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aHkgdGhlIGNoYW5nZT8gQWgsIHJpZ2h0LCB0aGUgZXhwbGFuYXRpb24gY2xhcmlmaWVzIHRoYXQgYHJiX2dldF9yZWFkZXJfcGFnZWAgY2FuIHJldHVybiBOVUxMIGlmIHRoZSB3cml0ZXIgaXMgY2F1Z2h0IHVwIG9yIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gcmVhZC4gVGhlIG9yaWdpbmFsIGBXQVJOX09OYCB3YXMgdW5jb25kaXRpb25hbCwgc28gaXQmIzM5O2QgdHJpZ2dlciBldmVuIGluIHRoZXNlIGxlZ2l0aW1hdGUgTlVMTCBzY2VuYXJpb3MuIFRoaXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgc2VlbXMgdG8gYmUgYW4gYXR0ZW1wdCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzLCBvbmx5IHdhcm5pbmcgaWYgdGhlIHJlYWRlciBhbmQgY29tbWl0IHBhZ2VzIGFyZSAqZGlmZmVyZW50KiB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuIEVzc2VudGlhbGx5LCB0aGV5IGFyZSB0cnlpbmcgdG8gZml4IGEgc3B1cmlvdXMgd2FybmluZy4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSBmb3IgcG90ZW50aWFsIHJpc2tzLiBMZXQmIzM5O3MgY29uc2lkZXIgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsd2F5cyB0aGUgZmlyc3QgY29uc2lkZXJhdGlvbiwgYW5kIGNvcHktdG8tdXNlciBpc3N1ZXMuCgoqICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucy4gR29vZC4KKiAgIE5vIG5ldyBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucy4gRmluZS4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGludm9sdmVkIGluIGJyYW5jaGluZyBvciBhbnkgbG9naWMuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KKiAgIFRoZSBjaGFuZ2UgaXMgKnNvbGVseSogcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCB3aXRoIGFuIGlmIHN0YXRlbWVudCBndWFyZGluZyB0aGUgbmV3IHdhcm5pbmcuIE5vdGhpbmcgaXMgYmVpbmcgZXhwb3NlZCBvciByZWFkLgoKR2l2ZW4gdGhlc2UgcG9pbnRzLCB0aGlzIGxvb2tzIHNhZmUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBlcnJvciBjaGVja2luZyB0byBiZSBtb3JlIGFjY3VyYXRlLiBObyBLTVNBTiBpcyBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgdGVzdGluZyB3aWxsIHN1ZmZpY2UuIEl0IHNlZW1zIHRvIGJlIGEgbWlub3IgY2xlYW4tdXAsIGZpeGluZyBhIHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZS4KCkFscmlnaHQsIEkgYW0gc2F0aXNmaWVkLiBMZXQmIzM5O3MgZ2V0IHRoZSBjYWxsIHJlYWR5LCBhbmQgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3Ivd2FybmluZyBjb25kaXRpb24gaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKClgIHdoZW4gYHJiX2dldF9yZWFkZXJfcGFnZSgpYCByZXR1cm5zIE5VTEwuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IHRyaWdnZXJpbmcgYFdBUk5fT04oIXJlYWRlcilgLCBpdCBub3cgb25seSB3YXJucyBpZiBgY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGRhdGEgc3RydWN0dXJlcyBvciBzdHJ1Y3QgcGFkZGluZywgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3Ivd2FybmluZyBjb25kaXRpb24gaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKClgIHdoZW4gYHJiX2dldF9yZWFkZXJfcGFnZSgpYCByZXR1cm5zIE5VTEwuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IHRyaWdnZXJpbmcgYFdBUk5fT04oIXJlYWRlcilgLCBpdCBub3cgb25seSB3YXJucyBpZiBgY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGRhdGEgc3RydWN0dXJlcyBvciBzdHJ1Y3QgcGFkZGluZywgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM2OjU5LjQ4MDYyNTk1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjg5NTYxNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQUNJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlclwiLFxuICAgIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgICBcInJiX2dldF9yZWFkZXJfcGFnZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yL3dhcm5pbmcgY29uZGl0aW9uIGluIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpYCB3aGVuIGByYl9nZXRfcmVhZGVyX3BhZ2UoKWAgcmV0dXJucyBOVUxMLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSB0cmlnZ2VyaW5nIGBXQVJOX09OKCFyZWFkZXIpYCwgaXQgbm93IG9ubHkgd2FybnMgaWYgYGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNjo1OS40ODA2Mzk1MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTY2MDc3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZjQ4YzM5ZjYwOWI3YzViNTA3MDhlZjcwYWI2YjAwOGJiNTI0YjI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTI6MzY6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xcbmluZGV4IDljMDNhNTU1YTZiYTIuLjk4MTMwMTgyZTA1ZGYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xcbkBAIC03OTk1LDggKzc5OTUsMTAgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XFxuLVxcdGlmIChXQVJOX09OKCFyZWFkZXIpKVxcbitcXHRpZiAoIXJlYWRlcikge1xcbitcXHRcXHRXQVJOX09OKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXFxuIFxcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVxcdTAwM2Vsb3N0X2V2ZW50cztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MDEuMTk4MjYxMzE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1ODQwMTA0NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFDSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJcIixcbiAgICBcInRyYWNpbmdfYnVmZmVyc19pb2N0bFwiLFxuICAgIFwicmluZ19idWZmZXJfbWFwXCIsXG4gICAgXCJyYl9nZXRfcmVhZGVyX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNmNDhjMzlmNjA5YjdjNWI1MDcwOGVmNzBhYjZiMDA4YmI1MjRiMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEyOjM2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuaW5kZXggOWMwM2E1NTVhNmJhMi4uOTgxMzAxODJlMDVkZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG4rKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuQEAgLTc5OTUsOCArNzk5NSwxMCBAQCBpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTtcbi1cdGlmIChXQVJOX09OKCFyZWFkZXIpKVxuK1x0aWYgKCFyZWFkZXIpIHtcbitcdFx0V0FSTl9PTihjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXG4gXHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cdTAwM2Vsb3N0X2V2ZW50cztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjAxLjE5ODI2MzcxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0NDI3MDU5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSaW5nIEJ1ZmZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgYW5kIHBpbnBvaW50IGV4YWN0bHkgd2hhdCdzIGJlaW5nIHRvdWNoZWQgd2l0aGluIHRoZSBrZXJuZWwncyBjb2RlLiBSaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIHVwZGF0ZSBjZW50ZXJzIGFyb3VuZCBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoaXMgY2hhbmdlLlxuXG5Ob3csIEknbGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gSSB3YW50IHRvIHNlZSBpdHMgZGVmaW5pdGlvbiwgaXRzIGltbWVkaWF0ZSBjYWxsZXJzLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIG9mIHRoZSByaW5nIGJ1ZmZlciBtZWNoYW5pc20uIFNlZWluZyB0aGUgcmVsYXRpb25zaGlwcyBhbmQgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIGFyZWEgb2YgdGhlIGtlcm5lbCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3QgYW5kIGludGVudCBvZiB0aGUgY2hhbmdlLiBUaGlzIGluaXRpYWwgZXhwbG9yYXRpb24gd2lsbCBpbmZvcm0gdGhlIGRpcmVjdGlvbiBvZiBteSBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjEwLjY0MDk3MTgwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTgwOlxcdFxcdHJlYWRlcl9zaXplID0gcmJfcGFnZV9zaXplKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlKTtcXG43OTgxOlxcdFxcbjc5ODI6XFx0XFx0LypcXG43OTgzOlxcdFxcdCAqIFRoZXJlIGFyZSBkYXRhIHRvIGJlIHJlYWQgb24gdGhlIGN1cnJlbnQgcmVhZGVyIHBhZ2UsIHdlIGNhblxcbjc5ODQ6XFx0XFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIuIEJ1dCBiZWZvcmUgdGhhdCwgd2UgYXNzdW1lIHRoZSBsYXR0ZXIgd2lsbCByZWFkXFxuNzk4NTpcXHRcXHQgKiBldmVyeXRoaW5nLiBMZXQncyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXFxuNzk4NjpcXHRcXHQgKi9cXG43OTg3OlxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZS1cXHUwMDNlcmVhZCBcXHUwMDNjIHJlYWRlcl9zaXplKSB7XFxuNzk4ODpcXHRcXHRcXHR3aGlsZSAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSlcXG43OTg5OlxcdFxcdFxcdFxcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xcbjc5OTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuNzk5MTpcXHRcXHR9XFxuNzk5MjpcXHRcXG43OTkzOlxcdFxcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cXG43OTk0OlxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSA9PSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSlcXG43OTk1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTY6XFx0XFxuNzk5NzpcXHRcXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XFxuNzk5ODpcXHRcXHRpZiAoIXJlYWRlcikge1xcbjc5OTk6XFx0XFx0XFx0V0FSTl9PTihjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSk7XFxuODAwMDpcXHRcXHRcXHRnb3RvIG91dDtcXG44MDAxOlxcdFxcdH1cXG44MDAyOlxcdFxcbjgwMDM6XFx0XFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cXG44MDA0OlxcdFxcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVxcdTAwM2Vsb3N0X2V2ZW50cztcXG44MDA1OlxcdFxcbjgwMDY6XFx0XFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcXG44MDA3OlxcdFxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSkge1xcbjgwMDg6XFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmRwYWdlID0gcmVhZGVyLVxcdTAwM2VwYWdlO1xcbjgwMDk6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvbW1pdDtcXG44MDEwOlxcdFxcdFxcdFxcdC8qXFxuODAxMTpcXHRcXHRcXHRcXHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxcbjgwMTI6XFx0XFx0XFx0XFx0ICogVGhpcyBnaXZlcyB1cyBhIGNoYW5jZSB0byBzdG9yZSB0aGUgbG9zdCBldmVudHNcXG44MDEzOlxcdFxcdFxcdFxcdCAqIG9uIHRoZSBwYWdlLlxcbjgwMTQ6XFx0XFx0XFx0XFx0ICovXFxuODAxNTpcXHRcXHRcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VyZWFsX2VuZClcXG44MDE2OlxcdFxcdFxcdFxcdFxcdGxvY2FsX3NldChcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCwgcmVhZGVyLVxcdTAwM2VyZWFsX2VuZCk7XFxuODAxNzpcXHRcXHRcXHRcXHQvKlxcbjgwMTg6XFx0XFx0XFx0XFx0ICogSWYgdGhlcmUgaXMgcm9vbSBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlIHRvIHNhdmUgdGhlXFxuODAxOTpcXHRcXHRcXHRcXHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cXG44MDIwOlxcdFxcdFxcdFxcdCAqL1xcbjgwMjE6XFx0XFx0XFx0XFx0Y29tbWl0ID0gcmJfcGFnZV9zaXplKHJlYWRlcik7XFxuODAyMjpcXHRcXHRcXHRcXHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFxcdTAwM2U9IHNpemVvZihtaXNzZWRfZXZlbnRzKSkge1xcbjgwMjM6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZkcGFnZS1cXHUwMDNlZGF0YVtjb21taXRdLCBcXHUwMDI2bWlzc2VkX2V2ZW50cyxcXG44MDI0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YobWlzc2VkX2V2ZW50cykpO1xcbjgwMjU6XFx0XFx0XFx0XFx0XFx0bG9jYWxfYWRkKFJCX01JU1NFRF9TVE9SRUQsIFxcdTAwMjZkcGFnZS1cXHUwMDNlY29tbWl0KTtcXG44MDI2OlxcdFxcdFxcdFxcdH1cXG44MDI3OlxcdFxcdFxcdFxcdGxvY2FsX2FkZChSQl9NSVNTRURfRVZFTlRTLCBcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCk7XFxuODAyODpcXHRcXHRcXHR9IGVsc2UgaWYgKCFXQVJOX09OQ0UoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNldGFpbF9wYWdlLFxcbjgwMjk6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlJlYWRlciBvbiBjb21taXQgd2l0aCAlbGQgbWlzc2VkIGV2ZW50c1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjEwLjY0MTk2MDc0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDc2NzUzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgQ2FsbHNpdGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgaXMgYmVpbmcgKnVzZWQqIGluIHRoaXMgY29kZWJhc2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLiAgSSB3YW50IHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIGl0LiBLbm93aW5nIHRoZSBjb250ZXh0IHdpbGwgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhcmdlciBkZXNpZ24uIEFtIEkgbG9va2luZyBhdCBhIGNyaXRpY2FsIHBhdGg/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgcmVsYXRlZCB0byBob3cgcmVhZGVycyBhcmUgYWNxdWlyZWQ/IEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIGFuc3dlcmluZyBhbGwgdGhvc2UgcXVlc3Rpb25zIGFuZCByZWFsbHkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlLiBMZXQncyBzZWUgd2hhdCB0aGUgSURFIG9yIG15IGdyZXAvZmluZCB1dGlsaXR5IHR1cm5zIHVwLiBUaGlzIGNhbGxzaXRlIGFuYWx5c2lzIGlzIHRoZSBseW5jaHBpbiB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MTIuNjg5NjM5NDkyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODY1NjE3MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oPTI1ND1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTtcXG5pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmg6MjU1OmludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpO1xcbmluY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaC0yNTYtXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz03OTI3PWludCByaW5nX2J1ZmZlcl91bm1hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYxLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc5NjI6aW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYzLXtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTczNjU9c3RhdGljIGxvbmcgdHJhY2luZ19idWZmZXJzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTczODAtXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzM4MTpcXHRcXHRyZXR1cm4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIsXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgIGl0ZXItXFx1MDAzZWNwdV9maWxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MTQuOTc2MjA4Nzc0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NDA4MDE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIGB0cmFjZS5jYCBpb2N0bCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBjb250cm9sIGludGVyZmFjZS4gTGV0J3MgaGVhZCBzdHJhaWdodCB0byBga2VybmVsL3RyYWNlL3RyYWNlLmNgLiBJIGV4cGVjdCB0aGUgYGlvY3RsYCBjYWxscyBpbiBoZXJlIHdpbGwgYmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHdoZXJlIHdlIGNvbmZpZ3VyZSwgZW5hYmxlLCBkaXNhYmxlLCBhbmQgcmV0cmlldmUgZGF0YSBmcm9tIHRoZSB0cmFjZXBvaW50cy4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGV5J3ZlIHN0cnVjdHVyZWQgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZy4gQXJlIHRoZXkgdXNpbmcgYSBzd2l0Y2ggc3RhdGVtZW50PyBXaGF0IGtpbmQgb2YgYXJndW1lbnRzIGFyZSB0aGV5IGV4cGVjdGluZz8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQga2luZCBvZiBzZWN1cml0eSBjaGVja3MgYXJlIHRoZXkgaW1wbGVtZW50aW5nPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1c2VyLXByb3ZpZGVkIGRhdGEgcGFzc2VkIHZpYSB0aGUgaW9jdGwgbnVtYmVycyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBhcmd1bWVudHMsIHNvIEknbGwgYmUgbWV0aWN1bG91c2x5IGNoZWNraW5nIGhvdyB0aG9zZSBhcmd1bWVudHMgYXJlIHZhbGlkYXRlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHJlbHlpbmcgb24gc3RyaWN0IHR5cGUgY2hlY2tpbmcsIHJhbmdlIHZhbGlkYXRpb24sIG9yIG1heWJlIGV2ZW4gc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGNhcGFiaWxpdHkgY2hlY2tzLiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIGdhdGV3YXkgZm9yIGFsbCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNpbmcgc3lzdGVtLCBhbmQgd2hlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSBsb29waG9sZXMgYXJlIGxpa2VseSB0byBiZSBmb3VuZC4gTGV0J3Mgc2VlIGlmIHRoZWlyIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBlbm91Z2gsIG9yIGlmIGl0IG9wZW5zIHRoZSBkb29yIHRvIGFueSBkZW5pYWwtb2Ytc2VydmljZSBvciBldmVuIHByaXZpbGVnZSBlc2NhbGF0aW9uIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzoxNy41NzAyOTEwOTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzM2NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzM2NTpcXHRzdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbjczNjY6XFx0e1xcbjczNjc6XFx0XFx0c3RydWN0IGZ0cmFjZV9idWZmZXJfaW5mbyAqaW5mbyA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG43MzY4OlxcdFxcdHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyO1xcbjczNjk6XFx0XFx0aW50IGVycjtcXG43MzcwOlxcdFxcbjczNzE6XFx0XFx0aWYgKGNtZCA9PSBUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVIpIHtcXG43MzcyOlxcdFxcdFxcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKSkge1xcbjczNzM6XFx0XFx0XFx0XFx0ZXJyID0gcmluZ19idWZmZXJfd2FpdChpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcixcXG43Mzc0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpdGVyLVxcdTAwM2VjcHVfZmlsZSxcXG43Mzc1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpdGVyLVxcdTAwM2V0ci1cXHUwMDNlYnVmZmVyX3BlcmNlbnQsXFxuNzM3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTlVMTCwgTlVMTCk7XFxuNzM3NzpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjczNzg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43Mzc5OlxcdFxcdFxcdH1cXG43MzgwOlxcdFxcbjczODE6XFx0XFx0XFx0cmV0dXJuIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLFxcbjczODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpdGVyLVxcdTAwM2VjcHVfZmlsZSk7XFxuNzM4MzpcXHRcXHR9IGVsc2UgaWYgKGNtZCkge1xcbjczODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuNzM4NTpcXHRcXHR9XFxuNzM4NjpcXHRcXG43Mzg3OlxcdFxcdC8qXFxuNzM4ODpcXHRcXHQgKiBBbiBpb2N0bCBjYWxsIHdpdGggY21kIDAgdG8gdGhlIHJpbmcgYnVmZmVyIGZpbGUgd2lsbCB3YWtlIHVwIGFsbFxcbjczODk6XFx0XFx0ICogd2FpdGVyc1xcbjczOTA6XFx0XFx0ICovXFxuNzM5MTpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNnRyYWNlX3R5cGVzX2xvY2spO1xcbjczOTI6XFx0XFxuNzM5MzpcXHRcXHQvKiBNYWtlIHN1cmUgdGhlIHdhaXRlcnMgc2VlIHRoZSBuZXcgd2FpdF9pbmRleCAqL1xcbjczOTQ6XFx0XFx0KHZvaWQpYXRvbWljX2ZldGNoX2luY19yZWxlYXNlKFxcdTAwMjZpdGVyLVxcdTAwM2V3YWl0X2luZGV4KTtcXG43Mzk1OlxcdFxcbjczOTY6XFx0XFx0cmluZ19idWZmZXJfd2FrZV93YWl0ZXJzKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLCBpdGVyLVxcdTAwM2VjcHVfZmlsZSk7XFxuNzM5NzpcXHRcXG43Mzk4OlxcdFxcdHJldHVybiAwO1xcbjczOTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzoxNy41NzA4OTM1ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjA4MDk4NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyByaW5nIGJ1ZmZlciBtbWFwIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5LiBUaW1lIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBhbmQgbGlzdCBvdXQgdGhlIGxpa2VseSBjYW5kaWRhdGVzLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYXNwZWN0cyBvZiB0aGUgZnVuY3Rpb25hbGl0eSBuZWVkIHRvIGJlIGNvbmZpZ3VyYWJsZSBhbmQgaG93IGJlc3QgdG8gZXhwb3NlIHRob3NlIGtub2JzIHRvIHRoZSB1c2VyLiBJJ2xsIHN0YXJ0IGJ5IGxpc3Rpbmcgd2hhdCBzZWVtcyBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGVuLCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdmFyaW91cyBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMgYW5kIHRoZSBpbXBhY3QgdGhvc2UgY2hvaWNlcyBoYXZlIG9uIHRoZSBkZXNpZ24sIHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjAuNzc4OTk0ODg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTE5MDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc4MzM9c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03ODM5LVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc4NDA6aW50IHJpbmdfYnVmZmVyX21hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzg0MS1cXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTA5LSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc5MTA6dm9pZCByaW5nX2J1ZmZlcl9tYXBfZHVwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTExLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc5Mjc9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjEtXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzk2MjppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjMte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzM2NT1zdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4MC1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3MzgxOlxcdFxcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcixcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgyLVxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlci1cXHUwMDNlY3B1X2ZpbGUpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQwNT1zdGF0aWMgdm9pZCB0cmFjaW5nX2J1ZmZlcnNfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQwOS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDEwOlxcdHJpbmdfYnVmZmVyX21hcF9kdXAoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIsIGl0ZXItXFx1MDAzZWNwdV9maWxlKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDExLX1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0Mzc9c3RhdGljIGludCB0cmFjaW5nX2J1ZmZlcnNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUwLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc0NTE6XFx0cmV0ID0gcmluZ19idWZmZXJfbWFwKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLCBpdGVyLVxcdTAwM2VjcHVfZmlsZSwgdm1hKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUyLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjIwLjg0NDE5MzI0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc4Mjk4Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIFRyYWNlIEluc3RydW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsJ3MgdHJhY2luZyBjYXBhYmlsaXRpZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IGhvdyB0aGluZ3MgYXJlIHB1dCB0b2dldGhlciBmb3IgdGhlIGBrZXJuZWwvdHJhY2VgIHN1YnN5c3RlbS4gSSdtIHN0YXJ0aW5nIHdpdGggYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeTsgaXQncyB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIGhvdyB0aGUgdHJhY2luZyBmdW5jdGlvbmFsaXR5IGdldHMgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIEFmdGVyIHRoYXQsIEknbSBtb3Zpbmcgb24gdG8gYHJpbmdfYnVmZmVyLmNgLiBJIGV4cGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHRoZSByaW5nIGJ1ZmZlciwgd2hpY2ggaXMgYSBjcnVjaWFsIGNvbXBvbmVudCBmb3IgdHJhY2UgZGF0YSBzdG9yYWdlLCByZXNpZGVzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGl0cyBkZXNpZ24sIHNwZWNpZmljYWxseSBob3cgaXQncyBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeSBpbiBhIGtlcm5lbCBjb250ZXh0LiBJIHN1c3BlY3QgdGhlIE1ha2VmaWxlIHdpbGwgcmVmZXJlbmNlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjIuOTIyNDk0NzIxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU5NTk0NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmluZ19idWZmZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICs9IGxpYmZ0cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gcmluZ19idWZmZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSArPSByaW5nX2J1ZmZlcl9iZW5jaG1hcmsub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEzMz1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFKSArPSB0cmFjZV9yZW1vdGUub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMzQ6b2JqLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgKz0gc2ltcGxlX3JpbmdfYnVmZmVyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEVfVEVTVCkgKz0gcmVtb3RlX3Rlc3Qub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTE2MT0kKG9iaikvJS5vLmNoZWNrZWQ6ICQob2JqKS8lLm8gJChvYmopL3VuZGVmc3ltc19iYXNlLm8gRk9SQ0VcXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjMtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjE2NDphbHdheXMtJChDT05GSUdfU0lNUExFX1JJTkdfQlVGRkVSKSArPSBzaW1wbGVfcmluZ19idWZmZXIuby5jaGVja2VkXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTE2NS1cXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTExMTc9X19wb2xsX3QgcmluZ19idWZmZXJfcG9sbF93YWl0KHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSxcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTExNzktXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6MTE4MDovKiBidWZmZXIgbWF5IGJlIGVpdGhlciByaW5nX2J1ZmZlciBvciByaW5nX2J1ZmZlcl9wZXJfY3B1ICovXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtMTE4MS0jZGVmaW5lIFJCX1dBUk5fT04oYiwgY29uZClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NDE0PUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGVfY3B1KTtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MTYtLyoqXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQxNzogKiByaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHMgLSBnZXQgdGhlIG9sZGVzdCBldmVudCB0aW1lc3RhbXAgZnJvbSB0aGUgYnVmZmVyXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQxOC0gKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXJcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MjAtICovXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQyMTp1NjQgcmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDIyLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0NDYtfVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0NDc6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKTtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDQ4LVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NTQ4NT1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDg3LS8qKlxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0ODg6ICogcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBjYXVzZWQgYnkgdGhlIHJpbmdcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDg5LSAqIGJ1ZmZlciB3cmFwcGluZyBhcm91bmQgKG9ubHkgaWYgUkJfRkxfT1ZFUldSSVRFIGlzIG9uKS5cXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0OTItICovXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQ5Mzp1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDk0LXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1MDUtfVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU1MDY6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1MDctXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NTkyPUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VudHJpZXMpO1xcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTU5NC0vKipcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NTk1OiAqIHJpbmdfYnVmZmVyX292ZXJydW5zIC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTU5Ni0gKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXJcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MDAtICovXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTYwMTp1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5zKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlcilcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjAyLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MTQtfVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU2MTU6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bnMpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MTYtXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmM9MjMyPXN0YXRpYyB2b2lkIHJpbmdfYnVmZmVyX3Byb2R1Y2VyKHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmMtMzAxLVxcdGVudHJpZXMgPSByaW5nX2J1ZmZlcl9lbnRyaWVzKGJ1ZmZlcik7XFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jOjMwMjpcXHRvdmVycnVucyA9IHJpbmdfYnVmZmVyX292ZXJydW5zKGJ1ZmZlcik7XFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jLTMwMy1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTI4MjI9Z2V0X3RvdGFsX2VudHJpZXNfY3B1KHN0cnVjdCBhcnJheV9idWZmZXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqdG90YWwsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0yODM4LVxcdFxcdCp0b3RhbCA9IGNvdW50ICtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzoyODM5OlxcdFxcdFxcdHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KGJ1Zi1cXHUwMDNlYnVmZmVyLCBjcHUpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5jLTI4NDAtXFx0KmVudHJpZXMgPSBjb3VudDtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTMzNjc9X190cmFjaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGJvb2wgc25hcHNob3QpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0zNDMwLVxcdC8qIEFubm90YXRlIHN0YXJ0IG9mIGJ1ZmZlcnMgaWYgd2UgaGFkIG92ZXJydW5zICovXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6MzQzMTpcXHRpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIpKVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTM0MzItXFx0XFx0aXRlci1cXHUwMDNlaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0FOTk9UQVRFO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQ3Mj10cmFjaW5nX3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQ5Mi1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDkzOlxcdGNudCA9IHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHRyYWNlX2J1Zi1cXHUwMDNlYnVmZmVyLCBjcHUpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0OTQtXFx0dHJhY2Vfc2VxX3ByaW50ZihzLCBcXFwib3ZlcnJ1bjogJWxkXFxcXG5cXFwiLCBjbnQpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUwMy1cXHRcXHQvKiBsb2NhbCBvciBnbG9iYWwgZm9yIHRyYWNlX2Nsb2NrICovXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzUwNDpcXHRcXHR0ID0gbnMydXNlY3MocmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHRyYWNlX2J1Zi1cXHUwMDNlYnVmZmVyLCBjcHUpKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTA1LVxcdFxcdHVzZWNfcmVtID0gZG9fZGl2KHQsIFVTRUNfUEVSX1NFQyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTE0LVxcdFxcdHRyYWNlX3NlcV9wcmludGYocywgXFxcIm9sZGVzdCBldmVudCB0czogJWxsdVxcXFxuXFxcIixcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NTE1OlxcdFxcdFxcdFxcdHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyh0cmFjZV9idWYtXFx1MDAzZWJ1ZmZlciwgY3B1KSk7XFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUxNi1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTkzNzg9c3RhdGljIHZvaWQgdHJhY2VfaW5pdF9pdGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgc3RydWN0IHRyYWNlX2FycmF5ICp0cilcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTkzODgtXFx0LyogQW5ub3RhdGUgc3RhcnQgb2YgYnVmZmVycyBpZiB3ZSBoYWQgb3ZlcnJ1bnMgKi9cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo5Mzg5OlxcdGlmIChyaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcikpXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtOTM5MC1cXHRcXHRpdGVyLVxcdTAwM2VpdGVyX2ZsYWdzIHw9IFRSQUNFX0ZJTEVfQU5OT1RBVEU7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmM9MTIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X292ZXJydW5zKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcilcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYy0xMjItXFx0dW5zaWduZWQgbG9uZyBjbnQgPSBhdG9taWNfeGNoZyhcXHUwMDI2ZHJvcHBlZF9jb3VudCwgMCk7XFxua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jOjEyMzpcXHR1bnNpZ25lZCBsb25nIG92ZXIgPSByaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcik7XFxua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jLTEyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjMuMDM4NDYyMzkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTY2MzM2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgS2NvbmZpZ2AgZm9yIFByZWNpc2UgVHJhY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlICpleGFjdCogY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBObyByb29tIGZvciBhbWJpZ3VpdHkgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGRldGFpbHMgSSBuZWVkIGFyZSBnb2luZyB0byBiZSBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgLiBJdCdzIHRoZSBjZW50cmFsIHBsYWNlIGZvciBhbGwgdGhpbmdzIHRyYWNlLXJlbGF0ZWQsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlLiBJJ20gdGhpbmtpbmcgdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcywgYW55IG9wdGlvbmFsIGZlYXR1cmVzIHRoYXQgbWlnaHQgYmUgaW50ZXJ0d2luZWQsIGFuZCB0aGUgdW5kZXJseWluZyBidWlsZCBmbGFncyAtIGl0J3MgYWxsIGluIHRoYXQgZmlsZS4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhlc2UgY29uZmlnIGRldGFpbHMgc28gSSBkb24ndCBtaXNzIGFueXRoaW5nLiBUaGlzIGlzIGFsbCBhYm91dCBwcmVjaXNpb24gYW5kIG1ha2luZyBzdXJlIGl0IGJ1aWxkcyBhcyBleHBlY3RlZCBhbmQgZnVuY3Rpb25zIGFzIGRlc2lyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzoyNS4wOTUwOTg4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxMjU2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJJTkdfQlVGRkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNDE9Y29uZmlnIFRSQUNFX0NMT0NLXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNDMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTQ0OmNvbmZpZyBSSU5HX0JVRkZFUlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE0NS1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xNTQ9Y29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTU2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE1Nzpjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE1OC1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz05ODc9Y29uZmlnIFRSQUNFUE9JTlRfQkVOQ0hNQVJLXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDE2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwMTc6Y29uZmlnIFJJTkdfQlVGRkVSX0JFTkNITUFSS1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwMTgtXFx0dHJpc3RhdGUgXFxcIlJpbmcgYnVmZmVyIGJlbmNobWFyayBzdHJlc3MgdGVzdGVyXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTA4Nj1jb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA5OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDk5OmNvbmZpZyBSSU5HX0JVRkZFUl9SRUNPUkRfUkVDVVJTSU9OXFxua2VybmVsL3RyYWNlL0tjb25maWctMTEwMC1cXHRib29sIFxcXCJSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiB0aGUgcmluZyBidWZmZXJcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTYwPWNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1RcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNzMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTE3NDpjb25maWcgUklOR19CVUZGRVJfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE3NS0gICAgICAgYm9vbCBcXFwiUmluZyBidWZmZXIgc3RhcnR1cCBzZWxmIHRlc3RcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTk2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExOTc6Y29uZmlnIFJJTkdfQlVGRkVSX1ZBTElEQVRFX1RJTUVfREVMVEFTXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE5OC1cXHRib29sIFxcXCJWZXJpZnkgcmluZyBidWZmZXIgdGltZSBzdGFtcCBkZWx0YXNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMjE2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEyMTc6Y29uZmlnIFJJTkdfQlVGRkVSX1BFUlNJU1RFTlRfSU5KRUNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTIxOC1cXHRib29sIFxcXCJFbmFibGUgcGVyc2lzdGVudCByaW5nIGJ1ZmZlciBlcnJvciBpbmplY3Rpb24gdGVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjUuMTYxMjI5ODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNzk4MDgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIGBSSU5HX0JVRkZFUmAgdmVyc3VzIGBUUkFDSU5HYC4gVGhlIHByb2JsZW0gbW9zdCBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIFRyYWNlIE1lY2hhbmlzbXMqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZS4gSSdsbCBmb2N1cyBhcm91bmQgbGluZSAxNDQgb2YgdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGNvbmRpdGlvbmFscywgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhlIGtlcm5lbCBidWlsZHMgd2l0aCB0aGUgcmluZyBidWZmZXIgdHJhY2UgbWVjaGFuaXNtLCBvciB3aXRoIGFuIGFsdGVybmF0aXZlIHRyYWNpbmcgbWVjaGFuaXNtLiBJJ20gbG9va2luZyBmb3IgYSBjbGVhciBpbmRpY2F0aW9uIG9mICp3aHkqIG9uZSBpcyBwcmVmZXJyZWQgb3ZlciB0aGUgb3RoZXIsIG9yIGlmIHRoZXkgY2FuIGV2ZW4gYmUgc2VsZWN0ZWQgaW5kZXBlbmRlbnRseS4gSSdtIGV4cGVjdGluZyBzb21lIEtjb25maWcgbWFnaWMgLSBwZXJoYXBzIGEgYHNlbGVjdGAsIGBkZXBlbmRzIG9uYCwgb3IgZXZlbiBhbiBgaWZgIHN0YXRlbWVudC4gSSBuZWVkIHRvIHNlZSB3aGF0IGZhY3RvcnMgYXJlIGluZmx1ZW5jaW5nIHRoYXQgY2hvaWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjcuNDg5MjEzMzg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0Y29uZmlnIEJVSUxEVElNRV9NQ09VTlRfU09SVFxcbiAxMzE6XFx0ICAgICAgIGJvb2xcXG4gMTMyOlxcdCAgICAgICBkZWZhdWx0IHlcXG4gMTMzOlxcdCAgICAgICBkZXBlbmRzIG9uIEhBVkVfQlVJTERUSU1FX01DT1VOVF9TT1JUIFxcdTAwMjZcXHUwMDI2IERZTkFNSUNfRlRSQUNFXFxuIDEzNDpcXHQgICAgICAgaGVscFxcbiAxMzU6XFx0ICAgICAgICAgU29ydCB0aGUgbWNvdW50X2xvYyBzZWN0aW9uIGF0IGJ1aWxkIHRpbWUuXFxuIDEzNjpcXHRcXG4gMTM3OlxcdGNvbmZpZyBUUkFDRVJfTUFYX1RSQUNFXFxuIDEzODpcXHRcXHRib29sXFxuIDEzOTpcXHRcXHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UXFxuIDE0MDpcXHRcXG4gMTQxOlxcdGNvbmZpZyBUUkFDRV9DTE9DS1xcbiAxNDI6XFx0XFx0Ym9vbFxcbiAxNDM6XFx0XFxuIDE0NDpcXHRjb25maWcgUklOR19CVUZGRVJcXG4gMTQ1OlxcdFxcdGJvb2xcXG4gMTQ2OlxcdFxcdHNlbGVjdCBUUkFDRV9DTE9DS1xcbiAxNDc6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDE0ODpcXHRcXG4gMTQ5OlxcdGNvbmZpZyBFVkVOVF9UUkFDSU5HXFxuIDE1MDpcXHRcXHRzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXFxuIDE1MTpcXHRcXHRzZWxlY3QgR0xPQlxcbiAxNTI6XFx0XFx0Ym9vbFxcbiAxNTM6XFx0XFxuIDE1NDpcXHRjb25maWcgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXFxuIDE1NTpcXHRcXHRib29sXFxuIDE1NjpcXHRcXG4gMTU3OlxcdGNvbmZpZyBSSU5HX0JVRkZFUl9BTExPV19TV0FQXFxuIDE1ODpcXHRcXHRib29sXFxuIDE1OTpcXHRcXHRoZWxwXFxuIDE2MDpcXHRcXHQgQWxsb3cgdGhlIHVzZSBvZiByaW5nX2J1ZmZlcl9zd2FwX2NwdS5cXG4gMTYxOlxcdFxcdCBBZGRzIGEgdmVyeSBzbGlnaHQgb3ZlcmhlYWQgdG8gdHJhY2luZyB3aGVuIGVuYWJsZWQuXFxuIDE2MjpcXHRcXG4gMTYzOlxcdGNvbmZpZyBQUkVFTVBUSVJRX1RSQUNFUE9JTlRTXFxuIDE2NDpcXHRcXHRib29sXFxuIDE2NTpcXHRcXHRkZXBlbmRzIG9uIFRSQUNFX1BSRUVNUFRfVE9HR0xFIHx8IFRSQUNFX0lSUUZMQUdTXFxuIDE2NjpcXHRcXHRzZWxlY3QgVFJBQ0lOR1xcbiAxNjc6XFx0XFx0ZGVmYXVsdCB5XFxuIDE2ODpcXHRcXHRoZWxwXFxuIDE2OTpcXHRcXHQgIENyZWF0ZSBwcmVlbXB0L2lycSB0b2dnbGUgdHJhY2Vwb2ludHMgaWYgbmVlZGVkLCBzbyB0aGF0IG90aGVyIHBhcnRzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjI3LjQ4OTQxOTA2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODM3NDE2OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsaW5nIHRyYWNpbmcgZmVhdHVyZXMgd2l0aGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgc3VzcGVjdHM6IGBDT05GSUdfVFJBQ0lOR2Agb3IgYENPTkZJR19GVFJBQ0VgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIGZsYWdzIHRoYXQgY29udHJvbCB0aGUgY29yZSB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIHNwZWNpZmljIEtjb25maWcgc3ltYm9scywgYW5kIHNlZSB3aGVyZSB0aGV5J3JlIGRlZmluZWQgYW5kIGhvdyB0aGV5J3JlIHJlbGF0ZWQgdG8gb3RoZXIgb3B0aW9ucy4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk3NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjkuMzI2ODM3ODQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3OTYzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFJJTkdfQlVGRkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNzk9Y29uZmlnIFRSQUNJTkdcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xODAtXFx0Ym9vbFxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE4MTpcXHRzZWxlY3QgUklOR19CVUZGRVJcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xODItXFx0c2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz00MjE9Y29uZmlnIElSUVNPRkZfVFJBQ0VSXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00MjctXFx0c2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo0Mjg6XFx0c2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00MjktXFx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVBcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTQ0ND1jb25maWcgUFJFRU1QVF9UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ0OS1cXHRzZWxlY3QgVFJBQ0VSX01BWF9UUkFDRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjQ1MDpcXHRzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ1MS1cXHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NjMxPWNvbmZpZyBUUkFDRVJfU05BUFNIT1RfUEVSX0NQVV9TV0FQXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy02MzMtXFx0ZGVwZW5kcyBvbiBUUkFDRVJfU05BUFNIT1RcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo2MzQ6XFx0c2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy02MzUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzoyOS40NDI2MzkyNzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4NTk3ODYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBUcmFjaW5nIE9wdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIHRoZSBtbWFwIGludGVyZmFjZSBmb3IgdGhlIHRyYWNlZnMvZGVidWdmcyB0cmFjaW5nIGJ1ZmZlci4gSXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGVpdGhlciBgQ09ORklHX0ZUUkFDRWAgb3IgYENPTkZJR19UUkFDSU5HYC4gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBzZWUgd2hpY2ggb25lJ3MgdGhlIGtleS4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGJ5IGdyZXBwaW5nIGZvciBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBvciBgdHJhY2luZ19idWZmZXJzX2ZvcHNgLiBUaGF0IHNob3VsZCBwaW5wb2ludCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiBwcmV0dHkgcXVpY2tseS4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjMxLjIyODYxOTg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYyMjY4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFjaW5nX2J1ZmZlcnNfZm9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL3RyYWNlLmM9NzQzNz1zdGF0aWMgaW50IHRyYWNpbmdfYnVmZmVyc19tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0NTktXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQ2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2J1ZmZlcnNfZm9wcyA9IHtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDYxLVxcdC5vcGVuXFx0XFx0PSB0cmFjaW5nX2J1ZmZlcnNfb3BlbixcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTc2MjU9dHJhY2luZ19pbml0X3RyYWNlZnNfcGVyY3B1KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGxvbmcgY3B1KVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzY0OS1cXHR0cmFjZV9jcmVhdGVfY3B1X2ZpbGUoXFxcInRyYWNlX3BpcGVfcmF3XFxcIiwgVFJBQ0VfTU9ERV9SRUFELCBkX2NwdSxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NjUwOlxcdFxcdFxcdFxcdHRyLCBjcHUsIFxcdTAwMjZ0cmFjaW5nX2J1ZmZlcnNfZm9wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzY1MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MzEuMzA5MjQ3Mzk3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MDkxNDg5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnRyYWNlIFJpbmcgQnVmZmVyIFJlYWRlciBQYWdlIFZ1bG5lcmFiaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBjaGFuZ2UgaW4gdGhlIGBmdHJhY2VgIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHRyYWNlX3BpcGVfcmF3YCBmaWxlIHdpdGhpbiB0aGUgYHRyYWNlZnNgLiBNeSBmb2N1cyBpcyBvbiB0aGUgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbi5cblxuSW5pdGlhbGx5LCBJJ20gbm90aW5nIHRoYXQgYHRyYWNlX3BpcGVfcmF3YCBpcyBjcmVhdGVkIGR1cmluZyBgdHJhY2Vmc2AgaW5pdGlhbGl6YXRpb24uIFVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBpdCB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucywgb3BlbmluZyBpdCwgbWFwcGluZyBpdCB3aXRoIGBtbWFwYCAodmlhIGB0cmFjaW5nX2J1ZmZlcnNfbW1hcGAgd2hpY2ggbWFwcyB0byBgcmluZ19idWZmZXJfbWFwYCksIGFuZCB0aGVuIHVzaW5nIGFuIGBpb2N0bGAgY2FsbCAoYFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUmApIHRoYXQgZXZlbnR1YWxseSBjYWxscyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJdCdzIHdpdGhpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIHRoYXQgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBhIGBXQVJOX09OYCBjYWxsLiBCZWZvcmUsIGBXQVJOX09OKCFyZWFkZXIpYCB3b3VsZCBhbHdheXMgdHJpZ2dlciBpZiB0aGUgYHJlYWRlcmAgcG9pbnRlciB3YXMgTlVMTC4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoaXMgdG8gYFdBUk5fT04oIXJlYWRlciBcdTAwMjZcdTAwMjYgY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiB0aGUgYXNzZXJ0aW9uIGxvZ2ljLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBhbmQgc3Vic3lzdGVtIHJlbGV2YW5jZS4gVGhpcyBpcyBpbiBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLCBzbyBpdCdzIGNvcmUgYGZ0cmFjZWAgcmluZyBidWZmZXIgZnVuY3Rpb25hbGl0eS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCBgaW9jdGxgIGNhbGxzIG9uIGB0cmFjZV9waXBlX3Jhd2AgaW4gYHRyYWNlZnNgLCB3aGljaCBpcyBhIGNvbW1vbiwgd2VsbC1leGVyY2lzZWQgYXJlYSwgb2Z0ZW4gZnV6emVkIHdpdGggc3l6a2FsbGVyIGV2ZW4gaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGlzIGxvb2tzIHByb21pc2luZy5cblxuUmVnYXJkaW5nIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSwgdGhlIGNoYW5nZSBpczpcbjEuICAqKkNvcmUgc3Vic3lzdGVtOioqIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2BcbjIuICAqKkFzc2VydGlvbi9Mb2dpYyBNb2RpZmljYXRpb246KiogSXQgY2hhbmdlcyB0aGUgbG9naWMgdGhhdCB0cmlnZ2VycyBhIGBXQVJOX09OYCwgd2hpY2ggaXMgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuIEl0IHJlZHVjZXMgdGhlIGNhc2VzIHdoZXJlIHRoZSBhc3NlcnRpb24gaXMgdHJpZ2dlcmVkLlxuMy4gICoqUmVhY2hhYmlsaXR5OioqIFVzZXJzcGFjZSBjYW4gdHJpZ2dlciB0aGlzIHZpYSBgaW9jdGxgIG9uIGB0cmFjZV9waXBlX3Jhd2AuIFRoaXMgaXMgY3JpdGljYWwuXG5cbkJhc2VkIG9uIHRoZXNlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLiBBbHNvLCBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCwgYHJpbmdfYnVmZmVyX21hcGAsIGFuZCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCBhcmUgcmVsZXZhbnQgZnVuY3Rpb25zLCBhcyB0aGV5J3JlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjYWxsIGNoYWluLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW55IGFyZSB1YmlxdWl0b3VzIGhvdHBhdGhzLiBGb3J0dW5hdGVseSwgbm9uZSBvZiB0aGVzZSBhcmUgaGlnaGx5IHViaXF1aXRvdXMgaG90cGF0aHM7IHRoZXkgYXJlIHF1aXRlIHNwZWNpZmljIHRvIHRoZSBgdHJhY2VfcGlwZV9yYXdgIG1tYXAvcmVhZGVyIGFjY2Vzcy5cblxuSSB3aWxsIGFsc28gbmVlZCB0byByZXZpZXcgdGhlIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgIHRvIHNlZSBob3cgdHJhY2luZyBpcyBjb25maWd1cmVkLiBJbiBwYXJ0aWN1bGFyLCBob3cgdGhlIGB0cmFjZS5vYCBpcyBjb25zdHJ1Y3RlZC4gVGhpcyB3aWxsIHByb3ZpZGUgZnVydGhlciBjb250ZXh0IG9uIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgZW5hYmxlcyBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBhbmQgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MzUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MzcuMTE4Mzk5MDU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNzYyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhY2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfVFJBQ0VfQ0xPQ0spICs9IHRyYWNlX2Nsb2NrLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjItXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICs9IGxpYmZ0cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gcmluZ19idWZmZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSArPSByaW5nX2J1ZmZlcl9iZW5jaG1hcmsub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02Ni1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjgtb2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlX291dHB1dC5vXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9ODg9b2JqLSQoQ09ORklHX1NUQUNLX1RSQUNFUikgKz0gdHJhY2Vfc3RhY2sub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo4OTpvYmotJChDT05GSUdfTU1JT1RSQUNFKSArPSB0cmFjZV9tbWlvdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05MC1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSB0cmFjZV9mdW5jdGlvbnNfZ3JhcGgub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05MT1vYmotJChDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORykgKz0gdHJhY2VfYnJhbmNoLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTI6b2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICs9IGJsa3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTMtb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgKz0gZmdyYXBoLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9OTQ9aWZlcSAoJChDT05GSUdfQkxPQ0spLHkpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjk1Om9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSBibGt0cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTk2LWVuZGlmXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgKz0gdHJhY2VfZXZlbnRzX3VzZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICs9IGJwZl90cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgKz0gdHJhY2Vfa3Byb2JlLm9cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xNjQ9YWx3YXlzLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgKz0gc2ltcGxlX3JpbmdfYnVmZmVyLm8uY2hlY2tlZFxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjE2NjpsaWJmdHJhY2UteSA6PSBmdHJhY2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzozNy4yMzc3ODE1MjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNDgwNDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdHJhY2luZyBpcyBzZXQgdXAgaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfVFJBQ0lOR2AgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIsIGFzIGl0IGNvbXBpbGVzIGB0cmFjZS5vYCwgYW5kIEkgc2VlIGl0IHB1bGxzIGluIGBDT05GSUdfUklOR19CVUZGRVJgLCB3aGljaCBpbiB0dXJuIGdlbmVyYXRlcyBgcmluZ19idWZmZXIub2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoaXMuIElzIGBDT05GSUdfRlRSQUNFYCBpbnZvbHZlZD8gT3IgYXJlIHRoZXJlIG90aGVyIGNvbmZpZ3MgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIGFueSB1c2VyLXNlbGVjdGFibGUgb3B0aW9ucyB0aGF0IGFyZSB0aWVkIHRvIGBDT05GSUdfVFJBQ0lOR2AuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcywgb2YgY291cnNlLCBga2VybmVsL3RyYWNlL0tjb25maWdgLiBJJ2xsIGRlbHZlIGludG8gdGhhdCBmaWxlIGFuZCBleGFtaW5lIHRoZSBzZWN0aW9uIGFyb3VuZCBgY29uZmlnIFRSQUNJTkdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJJ20gYWZ0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MzkuNTUyNTg4MDQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3NTpcXHQjIG9wdGlvbnMgZG8gbm90IGFwcGVhciB3aGVuIHNvbWV0aGluZyBlbHNlIHNlbGVjdHMgaXQuIFdlIG5lZWQgdGhlIHR3byBvcHRpb25zXFxuIDE3NjpcXHQjIEdFTkVSSUNfVFJBQ0VSIGFuZCBUUkFDSU5HIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB0byBhY2NvbXBsaXNoIHRoZVxcbiAxNzc6XFx0IyBoaWRpbmcgb2YgdGhlIGF1dG9tYXRpYyBvcHRpb25zLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRjb25maWcgVFJBQ0lOR1xcbiAxODA6XFx0XFx0Ym9vbFxcbiAxODE6XFx0XFx0c2VsZWN0IFJJTkdfQlVGRkVSXFxuIDE4MjpcXHRcXHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMTgzOlxcdFxcdHNlbGVjdCBUUkFDRVBPSU5UU1xcbiAxODQ6XFx0XFx0c2VsZWN0IE5PUF9UUkFDRVJcXG4gMTg1OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuIDE4NjpcXHRcXHRzZWxlY3QgRVZFTlRfVFJBQ0lOR1xcbiAxODc6XFx0XFx0c2VsZWN0IFRSQUNFX0NMT0NLXFxuIDE4ODpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gMTg5OlxcdFxcbiAxOTA6XFx0Y29uZmlnIEdFTkVSSUNfVFJBQ0VSXFxuIDE5MTpcXHRcXHRib29sXFxuIDE5MjpcXHRcXHRzZWxlY3QgVFJBQ0lOR1xcbiAxOTM6XFx0XFxuIDE5NDpcXHQjXFxuIDE5NTpcXHQjIE1pbmltdW0gcmVxdWlyZW1lbnRzIGFuIGFyY2hpdGVjdHVyZSBoYXMgdG8gbWVldCBmb3IgdXMgdG9cXG4gMTk2OlxcdCMgYmUgYWJsZSB0byBvZmZlciBnZW5lcmljIHRyYWNpbmcgZmFjaWxpdGllczpcXG4gMTk3OlxcdCNcXG4gMTk4OlxcdGNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcXG4gMTk5OlxcdFxcdGJvb2xcXG4gMjAwOlxcdFxcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxcbiAyMDE6XFx0XFx0ZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMjAyOlxcdFxcdGRlZmF1bHQgeVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRtZW51Y29uZmlnIEZUUkFDRVxcbiAyMDU6XFx0XFx0Ym9vbCBcXFwiVHJhY2Vyc1xcXCJcXG4gMjA2OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUXFxuIDIwNzpcXHRcXHRkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIEVuYWJsZSB0aGUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXFxuIDIxMDpcXHRcXG4gMjExOlxcdGlmIEZUUkFDRVxcbiAyMTI6XFx0XFxuIDIxMzpcXHRjb25maWcgVFJBQ0VGU19BVVRPTU9VTlRfREVQUkVDQVRFRFxcbiAyMTQ6XFx0XFx0Ym9vbCBcXFwiQXV0b21vdW50IHRyYWNlZnMgb24gZGVidWdmcyBbREVQUkVDQVRFRF1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjM5LjU1MjY4MTAxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjkwNDkwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gVHJhY2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBSaWdodCwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgRlRSQUNFYCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgbWVudWNvbmZpZyBlbnRyeSBwb2ludC4gSWYgdGhhdCdzIGVuYWJsZWQsIHRoZW4gd2UgaGF2ZSB0aGUgd2hvbGUgaG9zdCBvZiB0cmFjZXIgb3B0aW9ucywgdGhlIHZhcmlvdXMgYml0cyB1bmRlcm5lYXRoIGBGVFJBQ0VgLCBpbmNsdWRpbmcgdGhvc2UgY3JpdGljYWwgYFRSQUNJTkdgIGFuZCBgUklOR19CVUZGRVJgIGNvbXBvbmVudHMuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGVuYWJsZSBgdHJhY2Vmc2AsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB0cmFjZSBkYXRhLiBUaW1lIHRvIHVzZSBteSB1c3VhbCBhcHByb2FjaCwgSSdsbCBnbyBzdHJhaWdodCBmb3IgYENPTkZJR19UUkFDRUZTYCwgb3IgYSBnb29kIG9sZCBzZWFyY2ggZm9yIGBmcy90cmFjZWZzYCwgYW5kIHNlZSB3aGF0IHRoYXQgZ2V0cyBtZSBpbiB0ZXJtcyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwMiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NDEuODQzMTczOTQ2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY0MjcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFJBQ0VGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV2ZW50ZnNfZ2V0X2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGV2ZW50ZnNfYXR0ciAqYXR0cixcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDItXFx0dGktXFx1MDAzZXByaXZhdGUgPSBlaTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzQzOlxcdHRpLVxcdTAwM2VmbGFncyB8PSBUUkFDRUZTX0VWRU5UX0lOT0RFO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDQtXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTI5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpldmVudGZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTUzOC1cXHR0aSA9IGdldF90cmFjZWZzKGRpcik7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjUzOTpcXHRpZiAoV0FSTl9PTl9PTkNFKCEodGktXFx1MDAzZWZsYWdzIFxcdTAwMjYgVFJBQ0VGU19FVkVOVF9JTk9ERSkpKVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01NDAtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTc5PXN0YXRpYyBpbnQgZXZlbnRmc19pdGVyYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01OTUtXFx0dGkgPSBnZXRfdHJhY2VmcyhmX2lub2RlKTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTk2OlxcdGlmICghKHRpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRSQUNFRlNfRVZFTlRfSU5PREUpKVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01OTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NzU5PXN0cnVjdCBldmVudGZzX2lub2RlICpldmVudGZzX2NyZWF0ZV9ldmVudHNfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NzAtXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjc3MTpcXHRpZiAoc2VjdXJpdHlfbG9ja2VkX2Rvd24oTE9DS0RPV05fVFJBQ0VGUykpXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc3Mi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MDUtXFx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjgwNjpcXHR0aS1cXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19FVkVOVF9JTk9ERTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODA3LVxcdHRpLVxcdTAwM2Vwcml2YXRlID0gZWk7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMjUtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI2OiNkZWZpbmUgVFJBQ0VGU19ERUZBVUxUX01PREVcXHQwNzAwXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI3LXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdHJhY2Vmc19pbm9kZV9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX3N5c2NhbGxfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTEwLVxcdHRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMTE6XFx0dGktXFx1MDAzZWZsYWdzIHw9IFRSQUNFRlNfSU5TVEFOQ0VfSU5PREU7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTExMi1cXHR0aS1cXHUwMDNlcHJpdmF0ZSA9IGlub2RlO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTE1Mz1zdGF0aWMgdm9pZCBzZXRfdHJhY2Vmc19pbm9kZV9vd25lcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3My1cXG5mcy90cmFjZWZzL2lub2RlLmM6MTc0OlxcdFxcdGlmICghKHJ0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUUkFDRUZTX1VJRF9QRVJNX1NFVCkpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3NS1cXHRcXHRcXHR1aWQgPSByb290X2lub2RlLVxcdTAwM2VpX3VpZDtcXG5mcy90cmFjZWZzL2lub2RlLmMtMTc2LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxNzc6XFx0XFx0aWYgKCEocnRpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRSQUNFRlNfR0lEX1BFUk1fU0VUKSlcXG5mcy90cmFjZWZzL2lub2RlLmMtMTc4LVxcdFxcdFxcdGdpZCA9IHJvb3RfaW5vZGUtXFx1MDAzZWlfZ2lkO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE4NC1cXHQgKi9cXG5mcy90cmFjZWZzL2lub2RlLmM6MTg1OlxcdGlmICghKHRpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRSQUNFRlNfVUlEX1BFUk1fU0VUKSlcXG5mcy90cmFjZWZzL2lub2RlLmMtMTg2LVxcdFxcdGlub2RlLVxcdTAwM2VpX3VpZCA9IHVpZDtcXG5mcy90cmFjZWZzL2lub2RlLmMtMTg3LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxODg6XFx0aWYgKCEodGktXFx1MDAzZWZsYWdzIFxcdTAwMjYgVFJBQ0VGU19HSURfUEVSTV9TRVQpKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xODktXFx0XFx0aW5vZGUtXFx1MDAzZWlfZ2lkID0gZ2lkO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTIxMD1zdGF0aWMgaW50IHRyYWNlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxNy1cXHRpZiAoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX1VJRClcXG5mcy90cmFjZWZzL2lub2RlLmM6MjE4OlxcdFxcdHRpLVxcdTAwM2VmbGFncyB8PSBUUkFDRUZTX1VJRF9QRVJNX1NFVDtcXG5mcy90cmFjZWZzL2lub2RlLmMtMjE5LVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMjAtXFx0aWYgKGlhX3ZhbGlkIFxcdTAwMjYgQVRUUl9HSUQpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIyMTpcXHRcXHR0aS1cXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19HSURfUEVSTV9TRVQ7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIyMi1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYz0zMTA9c3RhdGljIGludCB0cmFjZWZzX2FwcGx5X29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCByZW1vdW50KVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0NC1cXHRcXHRcXHRpZiAodXBkYXRlX3VpZCkge1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozNDU6XFx0XFx0XFx0XFx0dGktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5UUkFDRUZTX1VJRF9QRVJNX1NFVDtcXG5mcy90cmFjZWZzL2lub2RlLmMtMzQ2LVxcdFxcdFxcdFxcdHRpLVxcdTAwM2V2ZnNfaW5vZGUuaV91aWQgPSBmc2ktXFx1MDAzZXVpZDtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNDktXFx0XFx0XFx0aWYgKHVwZGF0ZV9naWQpIHtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzUwOlxcdFxcdFxcdFxcdHRpLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+VFJBQ0VGU19HSURfUEVSTV9TRVQ7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM1MS1cXHRcXHRcXHRcXHR0aS1cXHUwMDNldmZzX2lub2RlLmlfZ2lkID0gZnNpLVxcdTAwM2VnaWQ7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMzU4LVxcdFxcdFxcdCAqL1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozNTk6XFx0XFx0XFx0aWYgKHRpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRSQUNFRlNfRVZFTlRfSU5PREUpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM2MC1cXHRcXHRcXHRcXHRldmVudGZzX3JlbW91bnQodGksIHVwZGF0ZV91aWQsIHVwZGF0ZV9naWQpO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTM4NT1zdGF0aWMgaW50IHRyYWNlZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zOTQtXFx0XFx0XFx0ICAgZnJvbV9rZ2lkX211bmdlZChcXHUwMDI2aW5pdF91c2VyX25zLCBmc2ktXFx1MDAzZWdpZCkpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozOTU6XFx0aWYgKGZzaS1cXHUwMDNlbW9kZSAhPSBUUkFDRUZTX0RFRkFVTFRfTU9ERSlcXG5mcy90cmFjZWZzL2lub2RlLmMtMzk2LVxcdFxcdHNlcV9wcmludGYobSwgXFxcIixtb2RlPSVvXFxcIiwgZnNpLVxcdTAwM2Vtb2RlKTtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYz00MDE9c3RhdGljIGludCB0cmFjZWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00MTEtXFx0ICovXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQxMjpcXHR0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflRSQUNFRlNfRVZFTlRfSU5PREU7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQxMy1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYz00NjQ9c3RhdGljIGludCB0cmFjZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ2OC1cXG5mcy90cmFjZWZzL2lub2RlLmM6NDY5OlxcdGVyciA9IHNpbXBsZV9maWxsX3N1cGVyKHNiLCBUUkFDRUZTX01BR0lDLCB0cmFjZV9maWxlcyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ3MC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTUwMj1zdGF0aWMgaW50IHRyYWNlZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDktXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxMDpcXHRmc2ktXFx1MDAzZW1vZGUgPSBUUkFDRUZTX0RFRkFVTFRfTU9ERTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNTExLVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTU2Nz1zdGF0aWMgc3RydWN0IGlub2RlICppbnN0YW5jZV9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNTc3LVxcdFxcdHRpID0gZ2V0X3RyYWNlZnMoZF9pbm9kZShwYXJlbnQpKTtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTc4OlxcdFxcdGlmICh0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUUkFDRUZTX0lOU1RBTkNFX0lOT0RFKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01NzktXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmM9NjEyPXN0cnVjdCBkZW50cnkgKnRyYWNlZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxOS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NjIwOlxcdGlmIChzZWN1cml0eV9sb2NrZWRfZG93bihMT0NLRE9XTl9UUkFDRUZTKSlcXG5mcy90cmFjZWZzL2lub2RlLmMtNjIxLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTY5OT1zdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50KVxcbmZzL3RyYWNlZnMvaW5vZGUuYy03MDAte1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo3MDE6XFx0aWYgKHNlY3VyaXR5X2xvY2tlZF9kb3duKExPQ0tET1dOX1RSQUNFRlMpKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy03MDItXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy90cmFjZWZzL2ludGVybmFsLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDoyOiNpZm5kZWYgX1RSQUNFRlNfSU5URVJOQUxfSFxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDozOiNkZWZpbmUgX1RSQUNFRlNfSU5URVJOQUxfSFxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaC00LVxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaD01PWVudW0ge1xcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDo2OlxcdFRSQUNFRlNfRVZFTlRfSU5PREVcXHRcXHQ9IEJJVCgxKSxcXG5mcy90cmFjZWZzL2ludGVybmFsLmg6NzpcXHRUUkFDRUZTX0dJRF9QRVJNX1NFVFxcdFxcdD0gQklUKDIpLFxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDo4OlxcdFRSQUNFRlNfVUlEX1BFUk1fU0VUXFx0XFx0PSBCSVQoMyksXFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oOjk6XFx0VFJBQ0VGU19JTlNUQU5DRV9JTk9ERVxcdFxcdD0gQklUKDQpLFxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaC0xMC19O1xcbi0tXFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oPTgwPXZvaWQgZXZlbnRmc19yZW1vdW50X3VubG9jayhpbnQgc3JjdV9pZHgpO1xcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaC04MS1cXG5mcy90cmFjZWZzL2ludGVybmFsLmg6ODI6I2VuZGlmIC8qIF9UUkFDRUZTX0lOVEVSTkFMX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NDIuMDI5NjA1NTM2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDkxNzc2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgVHJhY2VmcyBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIHByb2NlZHVyZSBmb3IgYHRyYWNlZnNgLiBMZXQncyBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGBmcy90cmFjZWZzL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGJ1aWxkaW5nIHRoZSB0cmFjZWZzIGZpbGVzeXN0ZW0gaXRzZWxmLiBJdCBzaG91bGQgZGV0YWlsIGhvdyB0aGUga2VybmVsIG1vZHVsZXMgc3BlY2lmaWMgdG8gYHRyYWNlZnNgIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5zdGFsbGVkLCBhbmQgYW55IG5lY2Vzc2FyeSBwcmUtcHJvY2Vzc2luZyBzdGVwcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBzdGFuZGFyZCBtYWtlZmlsZSB0YXJnZXRzIGxpa2UgYGFsbGAsIGBtb2R1bGVzYCwgYGluc3RhbGxgLCBhbmQgYW55dGhpbmcgc3BlY2lmaWMgdG8gYHRyYWNlZnNgLiBJJ2xsIGJlIHBhcnNpbmcgdGhlIGRlcGVuZGVuY2llcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGFuZCBoZWFkZXJzIGludm9sdmVkIGluIHRyYWNlZnMgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gYW5kIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgb2YgdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcwOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjQzLjkzODc4NTcyN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5OTU0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYWNlZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NDcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmZzL01ha2VmaWxlPTExNz1vYmotJChDT05GSUdfREVCVUdfRlMpXFx0XFx0Kz0gZGVidWdmcy9cXG5mcy9NYWtlZmlsZToxMTg6b2JqLSQoQ09ORklHX1RSQUNJTkcpXFx0XFx0Kz0gdHJhY2Vmcy9cXG5mcy9NYWtlZmlsZS0xMTktb2JqLSQoQ09ORklHX09DRlMyX0ZTKVxcdFxcdCs9IG9jZnMyL1xcbi0tXFxuZnMvdHJhY2Vmcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3RyYWNlZnMvTWFrZWZpbGU6Mjp0cmFjZWZzLW9ianNcXHQ6PSBpbm9kZS5vXFxuZnMvdHJhY2Vmcy9NYWtlZmlsZTozOnRyYWNlZnMtb2Jqc1xcdCs9IGV2ZW50X2lub2RlLm9cXG5mcy90cmFjZWZzL01ha2VmaWxlLTQtXFxuZnMvdHJhY2Vmcy9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19UUkFDSU5HKVxcdCs9IHRyYWNlZnMub1xcbmZzL3RyYWNlZnMvTWFrZWZpbGUtNi1cXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yLS8qXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjM6ICogIGV2ZW50X2lub2RlLmMgLSBwYXJ0IG9mIHRyYWNlZnMsIGEgcHNldWRvIGZpbGUgc3lzdGVtIGZvciBhY3RpdmF0aW5nIHRyYWNpbmdcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNC0gKlxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzoyMjojaW5jbHVkZSBcXHUwMDNjbGludXgvdHJhY2Vmcy5oXFx1MDAzZVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTI1Mj1zdGF0aWMgdm9pZCBldmVudGZzX3NldF9hdHRycyhzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWksIGJvb2wgdXBkYXRlX3VpZCwga3VpZF90IHVpZCxcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yOTMtLypcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6Mjk0OiAqIE9uIGEgcmVtb3VudCBvZiB0cmFjZWZzLCBpZiBVSUQgb3IgR0lEIG9wdGlvbnMgYXJlIHNldCwgdGhlblxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yOTUtICogdGhlIG1vdW50IHBvaW50IGlub2RlIHBlcm1pc3Npb25zIHNob3VsZCBiZSB1c2VkLlxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTI5Ny0gKi9cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6Mjk4OnZvaWQgZXZlbnRmc19yZW1vdW50KHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSwgYm9vbCB1cGRhdGVfdWlkLCBib29sIHVwZGF0ZV9naWQpXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTI5OS17XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV2ZW50ZnNfZ2V0X2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGV2ZW50ZnNfYXR0ciAqYXR0cixcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zMzMtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKnBlaTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzM0OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzM1LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTMzNi1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzM3OlxcdGlub2RlID0gdHJhY2Vmc19nZXRfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3NiKTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzM4LVxcdGlmICghaW5vZGUpXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzQwLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzozNDE6XFx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTM0Mi1cXHR0aS1cXHUwMDNlcHJpdmF0ZSA9IGVpO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTM1OS0vKipcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzYwOiAqIGxvb2t1cF9maWxlIC0gbG9vayB1cCBhIGZpbGUgaW4gdGhlIHRyYWNlZnMgZmlsZXN5c3RlbVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNjEtICogQHBhcmVudF9laTogUG9pbnRlciB0byB0aGUgZXZlbnRmc19pbm9kZSB0aGF0IHJlcHJlc2VudHMgcGFyZW50IG9mIHRoZSBmaWxlXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9MzcyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmlsZShzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqcGFyZW50X2VpLFxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTQwNS0vKipcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NDA2OiAqIGxvb2t1cF9kaXJfZW50cnkgLSBsb29rIHVwIGEgZGlyIGluIHRoZSB0cmFjZWZzIGZpbGVzeXN0ZW1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNDA3LSAqIEBkZW50cnk6IHRoZSBkaXJlY3RvcnkgdG8gbG9vayB1cFxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTUyOT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXZlbnRmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01MzMtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpX2NoaWxkO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo1MzQ6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01MzUtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTUzNy1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTM4OlxcdHRpID0gZ2V0X3RyYWNlZnMoZGlyKTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNTM5LVxcdGlmIChXQVJOX09OX09OQ0UoISh0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUUkFDRUZTX0VWRU5UX0lOT0RFKSkpXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTc5PXN0YXRpYyBpbnQgZXZlbnRmc19pdGVyYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01ODQtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpX2NoaWxkO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo1ODU6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01ODYtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5NC1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTk1OlxcdHRpID0gZ2V0X3RyYWNlZnMoZl9pbm9kZSk7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5Ni1cXHRpZiAoISh0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUUkFDRUZTX0VWRU5UX0lOT0RFKSlcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03MTUtICogICAgIHN5c3RlbS4gVGhlIGNhbGxiYWNrIG11c3Qgbm90IGNhbGwgYW55IGNvZGUgdGhhdCBtaWdodCBhbHNvIGNhbGwgaW50b1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3MTY6ICogICAgIHRoZSB0cmFjZWZzIG9yIGV2ZW50ZnMgc3lzdGVtIG9yIGl0IHdpbGwgcmlzayBjcmVhdGluZyBhIGRlYWRsb2NrLlxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03MTctICovXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTcxOD1zdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZXZlbnRmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBldmVudGZzX2lub2RlICpwYXJlbnQsXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzQ5LSAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSB0byBjcmVhdGUuXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjc1MDogKiBAcGFyZW50OiBQYXJlbnQgZGVudHJ5IGZvciB0aGlzIGZpbGUgaW4gdGhlIHRyYWNlZnMgZGlyZWN0b3J5LlxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NTEtICogQGVudHJpZXM6IEEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgcmVwcmVzZW50IHRoZSBmaWxlcyB1bmRlciB0aGlzIGRpcmVjdG9yeVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTc1OT1zdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZXZlbnRmc19jcmVhdGVfZXZlbnRzX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzY1LVxcdHN0cnVjdCBldmVudGZzX2lub2RlICplaTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NzY2OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzY3LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzczLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3NzQ6XFx0ZGVudHJ5ID0gdHJhY2Vmc19zdGFydF9jcmVhdGluZyhuYW1lLCBwYXJlbnQpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NzUtXFx0aWYgKElTX0VSUihkZW50cnkpKVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc4MS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NzgyOlxcdGlub2RlID0gdHJhY2Vmc19nZXRfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3NiKTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzgzLVxcdGlmICh1bmxpa2VseSghaW5vZGUpKVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc4NS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6Nzg2OlxcdC8vIE5vdGU6IHdlIGhhdmUgYSByZWYgdG8gdGhlIGRlbnRyeSBmcm9tIHRyYWNlZnNfc3RhcnRfY3JlYXRpbmcoKVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03ODctXFx0cmVpID0gZ2V0X3Jvb3RfaW5vZGUoZWkpO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTgwNC1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6ODA1OlxcdHRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MDYtXFx0dGktXFx1MDAzZWZsYWdzIHw9IFRSQUNFRlNfRVZFTlRfSU5PREU7XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODI5LVxcdGZzbm90aWZ5X21rZGlyKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQtXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjgzMDpcXHR0cmFjZWZzX2VuZF9jcmVhdGluZyhkZW50cnkpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MzEtXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODM1LVxcdGNsZWFudXBfZWkoZWkpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo4MzY6XFx0dHJhY2Vmc19mYWlsZWRfY3JlYXRpbmcoZGVudHJ5KTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODM3LVxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTg5MT12b2lkIGV2ZW50ZnNfcmVtb3ZlX2V2ZW50c19kaXIoc3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpKVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTkwNC1cXHQvKlxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo5MDU6XFx0ICogTWF0Y2hlcyB0aGUgZGdldCgpIGRvbmUgYnkgdHJhY2Vmc19zdGFydF9jcmVhdGluZygpXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTkwNi1cXHQgKiBpbiBldmVudGZzX2NyZWF0ZV9ldmVudHNfZGlyKCkgd2hlbiBpdCB0aGUgZGVudHJ5IHdhc1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTItLypcXG5mcy90cmFjZWZzL2lub2RlLmM6MzogKiAgaW5vZGUuYyAtIHBhcnQgb2YgdHJhY2VmcywgYSBwc2V1ZG8gZmlsZSBzeXN0ZW0gZm9yIGFjdGl2YXRpbmcgdHJhY2luZ1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00LSAqXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtOC0gKlxcbmZzL3RyYWNlZnMvaW5vZGUuYzo5OiAqIHRyYWNlZnMgaXMgdGhlIGZpbGUgc3lzdGVtIHRoYXQgaXMgdXNlZCBieSB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cXG5mcy90cmFjZWZzL2lub2RlLmMtMTAtICovXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25hbWVpLmhcXHUwMDNlXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC90cmFjZWZzLmhcXHUwMDNlXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc25vdGlmeS5oXFx1MDAzZVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI2LSNkZWZpbmUgVFJBQ0VGU19ERUZBVUxUX01PREVcXHQwNzAwXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI3OnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdHJhY2Vmc19pbm9kZV9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0yOC1cXG5mcy90cmFjZWZzL2lub2RlLmM6Mjk6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqdHJhY2Vmc19tb3VudDtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzA6c3RhdGljIGludCB0cmFjZWZzX21vdW50X2NvdW50O1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozMTpzdGF0aWMgYm9vbCB0cmFjZWZzX3JlZ2lzdGVyZWQ7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTMyLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zMy0vKlxcbmZzL3RyYWNlZnMvaW5vZGUuYzozNDogKiBLZWVwIHRyYWNrIG9mIGFsbCB0cmFjZWZzX2lub2RlcyBpbiBvcmRlciB0byB1cGRhdGUgdGhlaXJcXG5mcy90cmFjZWZzL2lub2RlLmMtMzUtICogZmxhZ3MgaWYgbmVjZXNzYXJ5IG9uIGEgcmVtb3VudC5cXG5mcy90cmFjZWZzL2lub2RlLmMtMzYtICovXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM3OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhY2Vmc19pbm9kZV9sb2NrKTtcXG5mcy90cmFjZWZzL2lub2RlLmM6Mzg6c3RhdGljIExJU1RfSEVBRCh0cmFjZWZzX2lub2Rlcyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM5LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MDpzdGF0aWMgc3RydWN0IGlub2RlICp0cmFjZWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQxLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6NDI6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00My1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00NC1cXG5mcy90cmFjZWZzL2lub2RlLmM6NDU6XFx0dGkgPSBhbGxvY19pbm9kZV9zYihzYiwgdHJhY2Vmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00Ni1cXHRpZiAoIXRpKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHJhY2Vmc19pbm9kZV9sb2NrLCBmbGFncyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUwOlxcdGxpc3RfYWRkX3JjdShcXHUwMDI2dGktXFx1MDAzZWxpc3QsIFxcdTAwMjZ0cmFjZWZzX2lub2Rlcyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxOlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRyYWNlZnNfaW5vZGVfbG9jaywgZmxhZ3MpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01Mi1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01NS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NTY6c3RhdGljIHZvaWQgdHJhY2Vmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU3LXtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTg6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01OS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NjA6XFx0a21lbV9jYWNoZV9mcmVlKHRyYWNlZnNfaW5vZGVfY2FjaGVwLCB0aSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxLX1cXG5mcy90cmFjZWZzL2lub2RlLmMtNjItXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzOnN0YXRpYyB2b2lkIHRyYWNlZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy02NC17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjY1OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNjYtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5mcy90cmFjZWZzL2lub2RlLmMtNjctXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjY4OlxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0cmFjZWZzX2lub2RlX2xvY2ssIGZsYWdzKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNjktXFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZ0aS1cXHUwMDNlbGlzdCk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjcwOlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRyYWNlZnNfaW5vZGVfbG9jaywgZmxhZ3MpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy03MS19XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmM9Nzk9c3RhdGljIHNzaXplX3QgZGVmYXVsdF93cml0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTg0LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo4NTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjZWZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmMtODYtXFx0LnJlYWQgPVxcdFxcdGRlZmF1bHRfcmVhZF9maWxlLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTkxLVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo5MjpzdGF0aWMgc3RydWN0IHRyYWNlZnNfZGlyX29wcyB7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTkzLVxcdGludCAoKm1rZGlyKShjb25zdCBjaGFyICpuYW1lKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtOTQtXFx0aW50ICgqcm1kaXIpKGNvbnN0IGNoYXIgKm5hbWUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo5NTp9IHRyYWNlZnNfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcXG5mcy90cmFjZWZzL2lub2RlLmMtOTYtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjk3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX3N5c2NhbGxfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTk4LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTAwLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6MTAxOlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcXG5mcy90cmFjZWZzL2lub2RlLmMtMTAyLVxcdHN0cnVjdCBuYW1lX3NuYXBzaG90IG5hbWU7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTA5LVxcdCAqL1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMTA6XFx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTExMS1cXHR0aS1cXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19JTlNUQU5DRV9JTk9ERTtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMTUtXFx0ICogVGhlIG1rZGlyIGNhbGwgY2FuIGNhbGwgdGhlIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgY3JlYXRlXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjExNjpcXHQgKiB0aGUgZmlsZXMgd2l0aGluIHRoZSB0cmFjZWZzIHN5c3RlbS4gSXQgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWxcXG5mcy90cmFjZWZzL2lub2RlLmMtMTE3LVxcdCAqIG1rZGlyIHJvdXRpbmUgdG8gaGFuZGxlIHJhY2VzLlxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTEyMC1cXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMjE6XFx0cmV0ID0gdHJhY2Vmc19vcHMubWtkaXIobmFtZS5uYW1lLm5hbWUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMjItXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTI3LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMjg6c3RhdGljIGludCB0cmFjZWZzX3N5c2NhbGxfcm1kaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMjkte1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTEzNC1cXHQgKiBUaGUgcm1kaXIgY2FsbCBjYW4gY2FsbCB0aGUgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBjcmVhdGVcXG5mcy90cmFjZWZzL2lub2RlLmM6MTM1OlxcdCAqIHRoZSBmaWxlcyB3aXRoaW4gdGhlIHRyYWNlZnMgc3lzdGVtLiBJdCBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbFxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMzYtXFx0ICogcm1kaXIgcm91dGluZSB0byBoYW5kbGUgcmFjZXMuXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTQzLVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxNDQ6XFx0cmV0ID0gdHJhY2Vmc19vcHMucm1kaXIobmFtZS5uYW1lLm5hbWUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNDUtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTUyLVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxNTM6c3RhdGljIHZvaWQgc2V0X3RyYWNlZnNfaW5vZGVfb3duZXIoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy90cmFjZWZzL2lub2RlLmMtMTU0LXtcXG5mcy90cmFjZWZzL2lub2RlLmM6MTU1OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtMTU2LVxcdHN0cnVjdCBpbm9kZSAqcm9vdF9pbm9kZSA9IHRpLVxcdTAwM2Vwcml2YXRlO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE2OC1cXHRpZiAocm9vdF9pbm9kZSAhPSBkX2lub2RlKHJvb3RfaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfcm9vdCkpIHtcXG5mcy90cmFjZWZzL2lub2RlLmM6MTY5OlxcdFxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICpydGk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3MC1cXG5mcy90cmFjZWZzL2lub2RlLmM6MTcxOlxcdFxcdHJ0aSA9IGdldF90cmFjZWZzKHJvb3RfaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzItXFx0XFx0cm9vdF9pbm9kZSA9IGRfaW5vZGUocm9vdF9pbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19yb290KTtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xOTEtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE5MjpzdGF0aWMgaW50IHRyYWNlZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy90cmFjZWZzL2lub2RlLmMtMTkzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xOTQte1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoxOTU6XFx0c2V0X3RyYWNlZnNfaW5vZGVfb3duZXIoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0xOTYtXFx0cmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5OC1cXG5mcy90cmFjZWZzL2lub2RlLmM6MTk5OnN0YXRpYyBpbnQgdHJhY2Vmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDAtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCxcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDQtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIwNTpcXHRzZXRfdHJhY2Vmc19pbm9kZV9vd25lcihpbm9kZSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIwNi1cXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDktXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIxMDpzdGF0aWMgaW50IHRyYWNlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMTEtXFx0XFx0XFx0ICAgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxNC1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMTU6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMTYtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMjI1LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMjY6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHRyYWNlZnNfaW5zdGFuY2VfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIyNy1cXHQubG9va3VwXFx0XFx0PSBzaW1wbGVfbG9va3VwLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMjg6XFx0Lm1rZGlyXFx0XFx0PSB0cmFjZWZzX3N5c2NhbGxfbWtkaXIsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIyOTpcXHQucm1kaXJcXHRcXHQ9IHRyYWNlZnNfc3lzY2FsbF9ybWRpcixcXG5mcy90cmFjZWZzL2lub2RlLmM6MjMwOlxcdC5wZXJtaXNzaW9uXFx0PSB0cmFjZWZzX3Blcm1pc3Npb24sXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIzMTpcXHQuZ2V0YXR0clxcdD0gdHJhY2Vmc19nZXRhdHRyLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzI6XFx0LnNldGF0dHJcXHQ9IHRyYWNlZnNfc2V0YXR0cixcXG5mcy90cmFjZWZzL2lub2RlLmMtMjMzLX07XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIzNC1cXG5mcy90cmFjZWZzL2lub2RlLmM6MjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB0cmFjZWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMzYtXFx0Lmxvb2t1cFxcdFxcdD0gc2ltcGxlX2xvb2t1cCxcXG5mcy90cmFjZWZzL2lub2RlLmM6MjM3OlxcdC5wZXJtaXNzaW9uXFx0PSB0cmFjZWZzX3Blcm1pc3Npb24sXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIzODpcXHQuZ2V0YXR0clxcdD0gdHJhY2Vmc19nZXRhdHRyLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzk6XFx0LnNldGF0dHJcXHQ9IHRyYWNlZnNfc2V0YXR0cixcXG5mcy90cmFjZWZzL2lub2RlLmMtMjQwLX07XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI0MS1cXG5mcy90cmFjZWZzL2lub2RlLmM6MjQyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB0cmFjZWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmM6MjQzOlxcdC5wZXJtaXNzaW9uXFx0PSB0cmFjZWZzX3Blcm1pc3Npb24sXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI0NDpcXHQuZ2V0YXR0clxcdD0gdHJhY2Vmc19nZXRhdHRyLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyNDU6XFx0LnNldGF0dHJcXHQ9IHRyYWNlZnNfc2V0YXR0cixcXG5mcy90cmFjZWZzL2lub2RlLmMtMjQ2LX07XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI0Ny1cXG5mcy90cmFjZWZzL2lub2RlLmM6MjQ4OnN0cnVjdCBpbm9kZSAqdHJhY2Vmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy90cmFjZWZzL2lub2RlLmMtMjQ5LXtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yNTctXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI1ODpzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvIHtcXG5mcy90cmFjZWZzL2lub2RlLmMtMjU5LVxcdGt1aWRfdCB1aWQ7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmM9MjY2PWVudW0ge1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI3MS1cXG5mcy90cmFjZWZzL2lub2RlLmM6MjcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgdHJhY2Vmc19wYXJhbV9zcGVjc1tdID0ge1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0yNzMtXFx0ZnNwYXJhbV9naWRcXHQoXFxcImdpZFxcXCIsXFx0XFx0T3B0X2dpZCksXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMjc4LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyNzk6c3RhdGljIGludCB0cmFjZWZzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4MC17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI4MTpcXHRzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvICpvcHRzID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG5mcy90cmFjZWZzL2lub2RlLmMtMjgyLVxcdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4NC1cXG5mcy90cmFjZWZzL2lub2RlLmM6Mjg1OlxcdG9wdCA9IGZzX3BhcnNlKGZjLCB0cmFjZWZzX3BhcmFtX3NwZWNzLCBwYXJhbSwgXFx1MDAyNnJlc3VsdCk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4Ni1cXHRpZiAob3B0IFxcdTAwM2MgMClcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zMDAtXFx0ICogV2UgbWlnaHQgbGlrZSB0byByZXBvcnQgYmFkIG1vdW50IG9wdGlvbnMgaGVyZTtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzAxOlxcdCAqIGJ1dCB0cmFkaXRpb25hbGx5IHRyYWNlZnMgaGFzIGlnbm9yZWQgYWxsIG1vdW50IG9wdGlvbnNcXG5mcy90cmFjZWZzL2lub2RlLmMtMzAyLVxcdCAqL1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTMwOS1cXG5mcy90cmFjZWZzL2lub2RlLmM6MzEwOnN0YXRpYyBpbnQgdHJhY2Vmc19hcHBseV9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgcmVtb3VudClcXG5mcy90cmFjZWZzL2lub2RlLmMtMzExLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzEyOlxcdHN0cnVjdCB0cmFjZWZzX2ZzX2luZm8gKmZzaSA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTMxMy1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShzYi1cXHUwMDNlc19yb290KTtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzE0OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcXG5mcy90cmFjZWZzL2lub2RlLmMtMzE1LVxcdGJvb2wgdXBkYXRlX3VpZCwgdXBkYXRlX2dpZDtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNDItXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozNDM6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGksIFxcdTAwMjZ0cmFjZWZzX2lub2RlcywgbGlzdCkge1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNDQtXFx0XFx0XFx0aWYgKHVwZGF0ZV91aWQpIHtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNjgtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM2OTpzdGF0aWMgaW50IHRyYWNlZnNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNzAte1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNzEtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZjLVxcdTAwM2Vyb290LVxcdTAwM2VkX3NiO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozNzI6XFx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqc2Jfb3B0cyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM3MzpcXHRzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvICpuZXdfb3B0cyA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM3NC1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zODEtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM4MjpcXHRyZXR1cm4gdHJhY2Vmc19hcHBseV9vcHRpb25zKHNiLCB0cnVlKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtMzgzLX1cXG5mcy90cmFjZWZzL2lub2RlLmMtMzg0LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzozODU6c3RhdGljIGludCB0cmFjZWZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM4Ni17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM4NzpcXHRzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvICpmc2kgPSByb290LVxcdTAwM2VkX3NiLVxcdTAwM2VzX2ZzX2luZm87XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM4OC1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDAtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQwMTpzdGF0aWMgaW50IHRyYWNlZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDIte1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MDM6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDQtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNDE2LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MTc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHRyYWNlZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmM6NDE4OlxcdC5hbGxvY19pbm9kZSAgICA9IHRyYWNlZnNfYWxsb2NfaW5vZGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQxOTpcXHQuZnJlZV9pbm9kZSAgICAgPSB0cmFjZWZzX2ZyZWVfaW5vZGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQyMDpcXHQuZGVzdHJveV9pbm9kZSAgPSB0cmFjZWZzX2Rlc3Ryb3lfaW5vZGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQyMTpcXHQuZHJvcF9pbm9kZSAgICAgPSB0cmFjZWZzX2Ryb3BfaW5vZGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQyMi1cXHQuc3RhdGZzXFx0XFx0PSBzaW1wbGVfc3RhdGZzLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MjM6XFx0LnNob3dfb3B0aW9uc1xcdD0gdHJhY2Vmc19zaG93X29wdGlvbnMsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQyNC19O1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQzMy0gKi9cXG5mcy90cmFjZWZzL2lub2RlLmM6NDM0OnN0YXRpYyB2b2lkIHRyYWNlZnNfZF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy90cmFjZWZzL2lub2RlLmMtNDM1LXtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00MzktXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ0MDpzdGF0aWMgaW50IHRyYWNlZnNfZF9yZXZhbGlkYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NDEtXFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNDQ3LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NDg6c3RhdGljIGludCB0cmFjZWZzX2RfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy90cmFjZWZzL2lub2RlLmMtNDQ5LXtcXG5mcy90cmFjZWZzL2lub2RlLmMtNDUwLVxcdC8qXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1MTpcXHQgKiBXZSB3YW50IHRvIGtlZXAgZXZlbnRmcyBkZW50cmllcyBhcm91bmQgYnV0IG5vdCB0cmFjZWZzXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ1Mi1cXHQgKiBvbmVzLiBldmVudGZzIGRlbnRyaWVzIGhhdmUgY29udGVudCBpbiBkX2ZzZGF0YS5cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NTctXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1ODpzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHRyYWNlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1OTpcXHQuZF9yZXZhbGlkYXRlID0gdHJhY2Vmc19kX3JldmFsaWRhdGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ2MDpcXHQuZF9yZWxlYXNlID0gdHJhY2Vmc19kX3JlbGVhc2UsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ2MTpcXHQuZF9kZWxldGUgPSB0cmFjZWZzX2RfZGVsZXRlLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjItfTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNDYzLVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NjQ6c3RhdGljIGludCB0cmFjZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjUte1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ3Mi1cXG5mcy90cmFjZWZzL2lub2RlLmM6NDczOlxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNnRyYWNlZnNfc3VwZXJfb3BlcmF0aW9ucztcXG5mcy90cmFjZWZzL2lub2RlLmM6NDc0OlxcdHRyYWNlZnNfYXBwbHlfb3B0aW9ucyhzYiwgZmFsc2UpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NzU6XFx0c2V0X2RlZmF1bHRfZF9vcChzYiwgXFx1MDAyNnRyYWNlZnNfZGVudHJ5X29wZXJhdGlvbnMpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00NzYtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNDc5LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0ODA6c3RhdGljIGludCB0cmFjZWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy90cmFjZWZzL2lub2RlLmMtNDgxLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6NDgyOlxcdGludCBlcnIgPSBnZXRfdHJlZV9zaW5nbGUoZmMsIHRyYWNlZnNfZmlsbF9zdXBlcik7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4My1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00ODYtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ4NzpcXHRyZXR1cm4gdHJhY2Vmc19yZWNvbmZpZ3VyZShmYyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4OC19XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4OS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NDkwOnN0YXRpYyB2b2lkIHRyYWNlZnNfZnJlZV9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ5MS17XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNDk0LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTU6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgdHJhY2Vmc19jb250ZXh0X29wcyA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmM6NDk2OlxcdC5mcmVlXFx0XFx0PSB0cmFjZWZzX2ZyZWVfZmMsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ5NzpcXHQucGFyc2VfcGFyYW1cXHQ9IHRyYWNlZnNfcGFyc2VfcGFyYW0sXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ5ODpcXHQuZ2V0X3RyZWVcXHQ9IHRyYWNlZnNfZ2V0X3RyZWUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ5OTpcXHQucmVjb25maWd1cmVcXHQ9IHRyYWNlZnNfcmVjb25maWd1cmUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUwMC19O1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDEtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUwMjpzdGF0aWMgaW50IHRyYWNlZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy90cmFjZWZzL2lub2RlLmMtNTAzLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTA0OlxcdHN0cnVjdCB0cmFjZWZzX2ZzX2luZm8gKmZzaTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNTA1LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MDY6XFx0ZnNpID0ga3phbGxvY19vYmooc3RydWN0IHRyYWNlZnNfZnNfaW5mbyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUwNy1cXHRpZiAoIWZzaSlcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MTItXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IGZzaTtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTEzOlxcdGZjLVxcdTAwM2VvcHMgPSBcXHUwMDI2dHJhY2Vmc19jb250ZXh0X29wcztcXG5mcy90cmFjZWZzL2lub2RlLmMtNTE0LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTUxNz1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdHJhY2VfZnNfdHlwZSA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmMtNTE4LVxcdC5vd25lciA9XFx0VEhJU19NT0RVTEUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxOTpcXHQubmFtZSA9XFx0XFx0XFxcInRyYWNlZnNcXFwiLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjA6XFx0LmluaXRfZnNfY29udGV4dCA9IHRyYWNlZnNfaW5pdF9mc19jb250ZXh0LFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjE6XFx0LnBhcmFtZXRlcnNcXHQ9IHRyYWNlZnNfcGFyYW1fc3BlY3MsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUyMi1cXHQua2lsbF9zYiA9XFx0a2lsbF9hbm9uX3N1cGVyLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MjMtfTtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTI0Ok1PRFVMRV9BTElBU19GUyhcXFwidHJhY2Vmc1xcXCIpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01MjUtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUyNjpzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX3N0YXJ0X2NyZWF0aW5nKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudClcXG5mcy90cmFjZWZzL2lub2RlLmMtNTI3LXtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MzAtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUzMTpcXHRwcl9kZWJ1ZyhcXFwidHJhY2VmczogY3JlYXRpbmcgZmlsZSAnJXMnXFxcXG5cXFwiLG5hbWUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01MzItXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUzMzpcXHRlcnJvciA9IHNpbXBsZV9waW5fZnMoXFx1MDAyNnRyYWNlX2ZzX3R5cGUsIFxcdTAwMjZ0cmFjZWZzX21vdW50LFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MzQ6XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRyYWNlZnNfbW91bnRfY291bnQpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01MzUtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU0My1cXHRpZiAoIXBhcmVudClcXG5mcy90cmFjZWZzL2lub2RlLmM6NTQ0OlxcdFxcdHBhcmVudCA9IHRyYWNlZnNfbW91bnQtXFx1MDAzZW1udF9yb290O1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01NDUtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNTQ3LVxcdGlmIChJU19FUlIoZGVudHJ5KSlcXG5mcy90cmFjZWZzL2lub2RlLmM6NTQ4OlxcdFxcdHNpbXBsZV9yZWxlYXNlX2ZzKFxcdTAwMjZ0cmFjZWZzX21vdW50LCBcXHUwMDI2dHJhY2Vmc19tb3VudF9jb3VudCk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU0OS1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01NTItXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU1MzpzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX2ZhaWxlZF9jcmVhdGluZyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1NC17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1NS1cXHRzaW1wbGVfZG9uZV9jcmVhdGluZyhkZW50cnkpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo1NTY6XFx0c2ltcGxlX3JlbGVhc2VfZnMoXFx1MDAyNnRyYWNlZnNfbW91bnQsIFxcdTAwMjZ0cmFjZWZzX21vdW50X2NvdW50KTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNTU3LVxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1OS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NTYwOnN0cnVjdCBkZW50cnkgKnRyYWNlZnNfZW5kX2NyZWF0aW5nKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy90cmFjZWZzL2lub2RlLmMtNTYxLXtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYz01Njc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaW5zdGFuY2VfaW5vZGUoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01Njgte1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo1Njk6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01NzAtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNTc2LVxcdHdoaWxlICghSVNfUk9PVChwYXJlbnQpKSB7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU3NzpcXHRcXHR0aSA9IGdldF90cmFjZWZzKGRfaW5vZGUocGFyZW50KSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU3OC1cXHRcXHRpZiAodGktXFx1MDAzZWZsYWdzIFxcdTAwMjYgVFJBQ0VGU19JTlNUQU5DRV9JTk9ERSlcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01ODYtLyoqXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU4NzogKiB0cmFjZWZzX2NyZWF0ZV9maWxlIC0gY3JlYXRlIGEgZmlsZSBpbiB0aGUgdHJhY2VmcyBmaWxlc3lzdGVtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU4OC0gKiBAbmFtZTogYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU5MS0gKiAgICAgICAgICBkaXJlY3RvcnkgZGVudHJ5IGlmIHNldC4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIE5VTEwsIHRoZW4gdGhlXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU5MjogKiAgICAgICAgICBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgdHJhY2VmcyBmaWxlc3lzdGVtLlxcbmZzL3RyYWNlZnMvaW5vZGUuYy01OTMtICogQGRhdGE6IGEgcG9pbnRlciB0byBzb21ldGhpbmcgdGhhdCB0aGUgY2FsbGVyIHdpbGwgd2FudCB0byBnZXQgdG8gbGF0ZXJcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01OTgtICpcXG5mcy90cmFjZWZzL2lub2RlLmM6NTk5OiAqIFRoaXMgaXMgdGhlIGJhc2ljIFxcXCJjcmVhdGUgYSBmaWxlXFxcIiBmdW5jdGlvbiBmb3IgdHJhY2Vmcy4gIEl0IGFsbG93cyBmb3IgYVxcbmZzL3RyYWNlZnMvaW5vZGUuYy02MDAtICogd2lkZSByYW5nZSBvZiBmbGV4aWJpbGl0eSBpbiBjcmVhdGluZyBhIGZpbGUsIG9yIGEgZGlyZWN0b3J5IChpZiB5b3Ugd2FudFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo2MDE6ICogdG8gY3JlYXRlIGEgZGlyZWN0b3J5LCB0aGUgdHJhY2Vmc19jcmVhdGVfZGlyKCkgZnVuY3Rpb24gaXNcXG5mcy90cmFjZWZzL2lub2RlLmMtNjAyLSAqIHJlY29tbWVuZGVkIHRvIGJlIHVzZWQgaW5zdGVhZC4pXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNjA0LSAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBwb2ludGVyIHRvIGEgZGVudHJ5IGlmIGl0IHN1Y2NlZWRzLiAgVGhpc1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo2MDU6ICogcG9pbnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgdHJhY2Vmc19yZW1vdmUoKSBmdW5jdGlvbiB3aGVuIHRoZSBmaWxlIGlzXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwNi0gKiB0byBiZSByZW1vdmVkIChubyBhdXRvbWF0aWMgY2xlYW51cCBoYXBwZW5zIGlmIHlvdXIgbW9kdWxlIGlzIHVubG9hZGVkLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwOC0gKlxcbmZzL3RyYWNlZnMvaW5vZGUuYzo2MDk6ICogSWYgdHJhY2VmcyBpcyBub3QgZW5hYmxlZCBpbiB0aGUga2VybmVsLCB0aGUgdmFsdWUgLSVFTk9ERVYgd2lsbCBiZVxcbmZzL3RyYWNlZnMvaW5vZGUuYy02MTAtICogcmV0dXJuZWQuXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxMS0gKi9cXG5mcy90cmFjZWZzL2lub2RlLmM6NjEyOnN0cnVjdCBkZW50cnkgKnRyYWNlZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW1vZGVfdCBtb2RlLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy02MTMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxNS17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYxNjpcXHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxNy1cXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNjI1LVxcdEJVR19PTighU19JU1JFRyhtb2RlKSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYyNjpcXHRkZW50cnkgPSB0cmFjZWZzX3N0YXJ0X2NyZWF0aW5nKG5hbWUsIHBhcmVudCk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYyNy1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy02MzAtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzMTpcXHRpbm9kZSA9IHRyYWNlZnNfZ2V0X2lub2RlKGRlbnRyeS1cXHUwMDNlZF9zYik7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYzMi1cXHRpZiAodW5saWtlbHkoIWlub2RlKSlcXG5mcy90cmFjZWZzL2lub2RlLmM6NjMzOlxcdFxcdHJldHVybiB0cmFjZWZzX2ZhaWxlZF9jcmVhdGluZyhkZW50cnkpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy02MzQtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzNTpcXHR0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNjM2LVxcdHRpLVxcdTAwM2Vwcml2YXRlID0gaW5zdGFuY2VfaW5vZGUocGFyZW50LCBpbm9kZSk7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNjM4LVxcdGlub2RlLVxcdTAwM2VpX21vZGUgPSBtb2RlO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo0NC4wNTg3NDQ5NzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4Njc5ODkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFJpbmcgQnVmZmVyIG1tYXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgcmluZyBidWZmZXIncyBtZW1vcnktbWFwcGVkIGFjY2Vzcy4gRmlyc3QsIEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBoYW5kbGVkIGJ5IGBDT05GSUdfVFJBQ0lOR2Agb3IgcGVyaGFwcyB0aGUgbW9yZSBncmFudWxhciBgQ09ORklHX0ZUUkFDRWAsIG9yIGV2ZW4gYW5vdGhlciBjb25maWcgZW50aXJlbHkuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGBtZW51Y29uZmlnYCBvcHRpb25zIHVuZGVyIFRSQUNJTkcuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIHRvIHJpbmcgYnVmZmVyIG1tYXAuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ2xsIGhlYWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGByaW5nX2J1ZmZlcl9tYXBgIGlzIGRlZmluZWQuIEknbGwgc3RhcnQgd2l0aCBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgIGFuZCB0aGVuIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBpbmNsdWRlIGBrZXJuZWwvdHJhY2UvdHJhY2UuY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG1lbW9yeSBtYXBwaW5nIGlzIG1hbmFnZWQgYW5kIGlmIHRoZXJlIGFyZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzI5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NDcuMDQ1NTQ2MTI1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzM4MTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc4MzM9c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03ODM5LVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc4NDA6aW50IHJpbmdfYnVmZmVyX21hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzg0MS1cXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTA5LSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc5MTA6dm9pZCByaW5nX2J1ZmZlcl9tYXBfZHVwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTExLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc5Mjc9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjEtXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzk2MjppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjMte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzM2NT1zdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4MC1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3MzgxOlxcdFxcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcixcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgyLVxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlci1cXHUwMDNlY3B1X2ZpbGUpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQwNT1zdGF0aWMgdm9pZCB0cmFjaW5nX2J1ZmZlcnNfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQwOS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDEwOlxcdHJpbmdfYnVmZmVyX21hcF9kdXAoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIsIGl0ZXItXFx1MDAzZWNwdV9maWxlKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDExLX1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0Mzc9c3RhdGljIGludCB0cmFjaW5nX2J1ZmZlcnNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUwLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc0NTE6XFx0cmV0ID0gcmluZ19idWZmZXJfbWFwKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLCBpdGVyLVxcdTAwM2VjcHVfZmlsZSwgdm1hKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUyLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjQ3LjE0MjkzMTc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzY3MzMwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgcmluZ19idWZmZXJfbWFwYCBvciBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIGFyZSB3cmFwcGVkIGluIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MsIHNwZWNpZmljYWxseSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gVGhpcyBpcyBhIGNvbW1vbiBwcmFjdGljZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIG9yIGVuYWJsaW5nL2Rpc2FibGluZyBmZWF0dXJlcyBiYXNlZCBvbiBidWlsZCBjb25maWd1cmF0aW9ucy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGNyaXRpY2FsIGZvciBlZmZpY2llbnQgZGF0YSB0cmFuc2Zlciwgc28gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0ncyBiZWhhdmlvci4gSSBuZWVkIHRvIGtub3cgKmltbWVkaWF0ZWx5KiBpZiB0aGV5J3JlIHRyZWF0ZWQgZGlmZmVyZW50bHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBTbywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gZm9yIHRob3NlIGRpcmVjdGl2ZXMgYXJvdW5kIHRob3NlIHR3byBmdW5jdGlvbiBuYW1lcy4gVGhpcyB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZnVuY3Rpb24ncyBhZGFwdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Njc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NDkuMDE5NjY5MTU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODMwOlxcdFxcdHJldHVybiBlcnI7XFxuNzgzMTpcXHR9XFxuNzgzMjpcXHQjZWxzZVxcbjc4MzM6XFx0c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXFxuNzgzNDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG43ODM1OlxcdHtcXG43ODM2OlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG43ODM3OlxcdH1cXG43ODM4OlxcdCNlbmRpZlxcbjc4Mzk6XFx0XFxuNzg0MDpcXHRpbnQgcmluZ19idWZmZXJfbWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSxcXG43ODQxOlxcdFxcdFxcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG43ODQyOlxcdHtcXG43ODQzOlxcdFxcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xcbjc4NDQ6XFx0XFx0c3RydWN0IGJ1ZmZlcl9wYWdlICoqc3ViYnVmX2lkcztcXG43ODQ1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuNzg0NjpcXHRcXHRpbnQgZXJyO1xcbjc4NDc6XFx0XFxuNzg0ODpcXHRcXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItXFx1MDAzZWNwdW1hc2spIHx8IGJ1ZmZlci1cXHUwMDNlcmVtb3RlKVxcbjc4NDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzg1MDpcXHRcXG43ODUxOlxcdFxcdGNwdV9idWZmZXIgPSBidWZmZXItXFx1MDAzZWJ1ZmZlcnNbY3B1XTtcXG43ODUyOlxcdFxcbjc4NTM6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VtYXBwaW5nX2xvY2spO1xcbjc4NTQ6XFx0XFxuNzg1NTpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNldXNlcl9tYXBwZWQpIHtcXG43ODU2OlxcdFxcdFxcdGVyciA9IF9fcmJfbWFwX3ZtYShjcHVfYnVmZmVyLCB2bWEpO1xcbjc4NTc6XFx0XFx0XFx0aWYgKCFlcnIpXFxuNzg1ODpcXHRcXHRcXHRcXHRlcnIgPSBfX3JiX2luY19kZWNfbWFwcGVkKGNwdV9idWZmZXIsIHRydWUpO1xcbjc4NTk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43ODYwOlxcdFxcdH1cXG43ODYxOlxcdFxcbjc4NjI6XFx0XFx0LyogcHJldmVudCBhbm90aGVyIHRocmVhZCBmcm9tIGNoYW5naW5nIGJ1ZmZlci9zdWItYnVmZmVyIHNpemVzICovXFxuNzg2MzpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNmJ1ZmZlci1cXHUwMDNlbXV0ZXgpO1xcbjc4NjQ6XFx0XFxuNzg2NTpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlbnJfcGFnZXMgXFx1MDAzZSByYl9zdGF0aWNfbWF4X3BhZ2VzKCkpXFxuNzg2NjpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbjc4Njc6XFx0XFxuNzg2ODpcXHRcXHRlcnIgPSByYl9hbGxvY19tZXRhX3BhZ2UoY3B1X2J1ZmZlcik7XFxuNzg2OTpcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo0OS4wMjAwMjQ5MTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MDcyNTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGtlcm5lbCB0cmFjaW5nIGNvZGUuXG5cbioqRGl2aW5nIGludG8gdGhlIFJpbmcgQnVmZmVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhYm92ZSBsaW5lIDc4MzAuIEdpdmVuIG15IGJhY2tncm91bmQsIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGZhaXJseSBsb3ctbGV2ZWwsIGxpa2VseSBkZWFsaW5nIHdpdGggY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoYXQgbGluZS4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlczogQXJlIHdlIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBkYXRhIGFjY2Vzcywgb3IgZXJyb3IgaGFuZGxpbmc/IElzIGl0IHJlbGF0ZWQgdG8gd3JpdGVyIG9wZXJhdGlvbnMsIG9yIG1heWJlIGEgcmVhZGVyIHNpZGUgdGhhdCBpcyBpbiBwbGFjZT8gSSB3aWxsIGV4cGVjdCBpdCB0byBiZSBhIGtleSBhcmVhIHRoYXQgSSBjYW4gdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgc291cmNlcyB0byB1bmRlcnN0YW5kIHRoZSB3b3JraW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0ODAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjUwLjk5MDc1NTA1OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc5MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzc5MDpcXHRcXHRcXHQvKlxcbjc3OTE6XFx0XFx0XFx0ICogUGFkIHdpdGggdGhlIHplcm8tcGFnZSB0byBhbGlnbiB0aGUgbWV0YS1wYWdlIHdpdGggdGhlXFxuNzc5MjpcXHRcXHRcXHQgKiBzdWItYnVmZmVycy5cXG43NzkzOlxcdFxcdFxcdCAqL1xcbjc3OTQ6XFx0XFx0XFx0bWV0YV9wYWdlX3BhZGRpbmcgPSBzdWJidWZfcGFnZXMgLSAxO1xcbjc3OTU6XFx0XFx0XFx0d2hpbGUgKG1ldGFfcGFnZV9wYWRkaW5nLS0gXFx1MDAyNlxcdTAwMjYgcCBcXHUwMDNjIG5yX3BhZ2VzKSB7XFxuNzc5NjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIF9fbWF5YmVfdW51c2VkIHplcm9fYWRkciA9XFxuNzc5NzpcXHRcXHRcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX3N0YXJ0ICsgKFBBR0VfU0laRSAqIHApO1xcbjc3OTg6XFx0XFxuNzc5OTpcXHRcXHRcXHRcXHRwYWdlc1twKytdID0gWkVST19QQUdFKHplcm9fYWRkcik7XFxuNzgwMDpcXHRcXHRcXHR9XFxuNzgwMTpcXHRcXHR9IGVsc2Uge1xcbjc4MDI6XFx0XFx0XFx0LyogU2tpcCB0aGUgbWV0YS1wYWdlICovXFxuNzgwMzpcXHRcXHRcXHRwZ29mZiAtPSBzdWJidWZfcGFnZXM7XFxuNzgwNDpcXHRcXG43ODA1OlxcdFxcdFxcdHMgKz0gcGdvZmYgLyBzdWJidWZfcGFnZXM7XFxuNzgwNjpcXHRcXHR9XFxuNzgwNzpcXHRcXG43ODA4OlxcdFxcdHdoaWxlIChwIFxcdTAwM2MgbnJfcGFnZXMpIHtcXG43ODA5OlxcdFxcdFxcdHN0cnVjdCBidWZmZXJfcGFnZSAqc3ViYnVmO1xcbjc4MTA6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNzgxMTpcXHRcXHRcXHRpbnQgb2ZmID0gMDtcXG43ODEyOlxcdFxcbjc4MTM6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShzIFxcdTAwM2U9IG5yX3N1YmJ1ZnMpKVxcbjc4MTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzgxNTpcXHRcXG43ODE2OlxcdFxcdFxcdHN1YmJ1ZiA9IGNwdV9idWZmZXItXFx1MDAzZXN1YmJ1Zl9pZHNbc107XFxuNzgxNzpcXHRcXHRcXHRwYWdlID0gdmlydF90b19wYWdlKCh2b2lkICopc3ViYnVmLVxcdTAwM2VwYWdlKTtcXG43ODE4OlxcdFxcbjc4MTk6XFx0XFx0XFx0Zm9yICg7IG9mZiBcXHUwMDNjICgxIFxcdTAwM2NcXHUwMDNjIChzdWJidWZfb3JkZXIpKTsgb2ZmKyssIHBhZ2UrKykge1xcbjc4MjA6XFx0XFx0XFx0XFx0aWYgKHAgXFx1MDAzZT0gbnJfcGFnZXMpXFxuNzgyMTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43ODIyOlxcdFxcbjc4MjM6XFx0XFx0XFx0XFx0cGFnZXNbcCsrXSA9IHBhZ2U7XFxuNzgyNDpcXHRcXHRcXHR9XFxuNzgyNTpcXHRcXHRcXHRzKys7XFxuNzgyNjpcXHRcXHR9XFxuNzgyNzpcXHRcXG43ODI4OlxcdFxcdGVyciA9IHZtX2luc2VydF9wYWdlcyh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHBhZ2VzLCBcXHUwMDI2bnJfcGFnZXMpO1xcbjc4Mjk6XFx0XFxuNzgzMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjc4MzE6XFx0fVxcbjc4MzI6XFx0I2Vsc2VcXG43ODMzOlxcdHN0YXRpYyBpbnQgX19yYl9tYXBfdm1hKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxcbjc4MzQ6XFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjUwLjk5MTM1NzA5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI4MTQ5NDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gUmluZyBCdWZmZXIgVGVycml0b3J5KipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGAjaWZkZWZgIGJsb2NrIGFyb3VuZCBsaW5lIDc3NTAuIFdoYXQncyB0aGUgY29udGV4dCB0aGVyZT8gSSdtIGJldHRpbmcgaXQncyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZSwgcHJvYmFibHkgZ3VhcmRpbmcgc29tZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBtYXliZSBhIGRlYnVnIGZlYXR1cmUsIGEgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGEgc2VjdGlvbiBvZiBjb2RlIHRpZWQgdG8gYSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW5pdGlhbCBndWVzcyB3b3VsZCBiZSBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGJ1dCBJIHdpbGwgZ28gYW5kIGZpbmQgb3V0LiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IGZvciBhIG51bWJlciBvZiByZWFzb25zIGRlcGVuZGluZyBvbiB3aGF0IGl0IGlzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1hY3JvIGlzIGJlaW5nIHRlc3RlZCBhbmQgdGhlbiBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGF0IG1hY3JvIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgY29udHJvbHMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgcGFydCBvZiB0aGUgcmluZyBidWZmZXIgY29kZSBiZWhhdmVzIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM0NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NTMuNTE5NTA5NzYxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NzQwOlxcdHtcXG43NzQxOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc3ViYnVmcywgbnJfcGFnZXMsIG5yX3ZtYV9wYWdlcztcXG43NzQyOlxcdFxcdHBnb2ZmX3QgcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYodm1hKTtcXG43NzQzOlxcdFxcdHVuc2lnbmVkIGludCBzdWJidWZfcGFnZXMsIHN1YmJ1Zl9vcmRlcjtcXG43NzQ0OlxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXMgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuNzc0NTpcXHRcXHRpbnQgcCA9IDAsIHMgPSAwO1xcbjc3NDY6XFx0XFx0aW50IGVycjtcXG43NzQ3OlxcdFxcbjc3NDg6XFx0XFx0LyogUmVmdXNlIE1QX1BSSVZBVEUgb3Igd3JpdGFibGUgbWFwcGluZ3MgKi9cXG43NzQ5OlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV1JJVEUgfHwgdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0VYRUMgfHxcXG43NzUwOlxcdFxcdCAgICAhKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9NQVlTSEFSRSkpXFxuNzc1MTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjc3NTI6XFx0XFxuNzc1MzpcXHRcXHRzdWJidWZfb3JkZXIgPSBjcHVfYnVmZmVyLVxcdTAwM2VidWZmZXItXFx1MDAzZXN1YmJ1Zl9vcmRlcjtcXG43NzU0OlxcdFxcdHN1YmJ1Zl9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2Mgc3ViYnVmX29yZGVyO1xcbjc3NTU6XFx0XFxuNzc1NjpcXHRcXHRpZiAoc3ViYnVmX29yZGVyIFxcdTAwMjZcXHUwMDI2IHBnb2ZmICUgc3ViYnVmX3BhZ2VzKVxcbjc3NTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzc1ODpcXHRcXG43NzU5OlxcdFxcdC8qXFxuNzc2MDpcXHRcXHQgKiBNYWtlIHN1cmUgdGhlIG1hcHBpbmcgY2Fubm90IGJlY29tZSB3cml0YWJsZSBsYXRlci4gQWxzbyB0ZWxsIHRoZSBWTVxcbjc3NjE6XFx0XFx0ICogdG8gbm90IHRvdWNoIHRoZXNlIHBhZ2VzIChWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQpLlxcbjc3NjI6XFx0XFx0ICovXFxuNzc2MzpcXHRcXHR2bV9mbGFnc19tb2Qodm1hLCBWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCxcXG43NzY0OlxcdFxcdFxcdCAgICAgVk1fTUFZV1JJVEUpO1xcbjc3NjU6XFx0XFxuNzc2NjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VtYXBwaW5nX2xvY2spO1xcbjc3Njc6XFx0XFxuNzc2ODpcXHRcXHRucl9zdWJidWZzID0gY3B1X2J1ZmZlci1cXHUwMDNlbnJfcGFnZXMgKyAxOyAvKiArIHJlYWRlci1zdWJidWYgKi9cXG43NzY5OlxcdFxcdG5yX3BhZ2VzID0gKChucl9zdWJidWZzICsgMSkgXFx1MDAzY1xcdTAwM2Mgc3ViYnVmX29yZGVyKTsgLyogKyBtZXRhLXBhZ2UgKi9cXG43NzcwOlxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNjPSBwZ29mZilcXG43NzcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc3NzI6XFx0XFxuNzc3MzpcXHRcXHRucl9wYWdlcyAtPSBwZ29mZjtcXG43Nzc0OlxcdFxcbjc3NzU6XFx0XFx0bnJfdm1hX3BhZ2VzID0gdm1hX3BhZ2VzKHZtYSk7XFxuNzc3NjpcXHRcXHRpZiAoIW5yX3ZtYV9wYWdlcyB8fCBucl92bWFfcGFnZXMgXFx1MDAzZSBucl9wYWdlcylcXG43Nzc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc3Nzg6XFx0XFxuNzc3OTpcXHRcXHRucl9wYWdlcyA9IG5yX3ZtYV9wYWdlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NTMuNTIwMDYxMTkxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODgxOTM2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIEknbSBzcGVjaWZpY2FsbHkgY3VyaW91cyBhYm91dCBob3cgYCNpZmRlZmAgZGlyZWN0aXZlcyBhcmUgYmVpbmcgdXNlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBpbnN0YW5jZXMgdGhhdCBiZWdpbiAqYWJvdmUqIGxpbmUgNzc0MC4gVGhpcyBzdWdnZXN0cyBJJ20gbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHBhdHRlcm4gb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSByZWxhdGVkIHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGhpbiBhIGxhcmdlciBibG9jayBvZiBjb2RlLiBJJ20gcHJvYmFibHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGEgc3BlY2lmaWMgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBwZXJoYXBzIHBpbnBvaW50aW5nIGEgYnVnIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaGUgbGluZSBudW1iZXIgaXMgbXkgaW5pdGlhbCBhbmNob3IgcG9pbnQ7IGl0IGNvdWxkIGJlIGEgc2VjdGlvbiB3aXRoIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9yIHByb2JsZW1hdGljIGNvbmRpdGlvbmFsIGxvZ2ljLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBhcm91bmQgdGhpcyBsaW5lIG51bWJlciBpbiBtaW5kLCBhbmQgdW5kZXJzdGFuZCB3aGljaCBmZWF0dXJlcyBtYXkgYmUgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo1NS40MDgyNTcyNTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NzIwOlxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfbG9jaywgZmxhZ3MpO1xcbjc3MjE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VidWZmZXItXFx1MDAzZW11dGV4KTtcXG43NzIyOlxcdFxcbjc3MjM6XFx0XFx0cmV0dXJuIDA7XFxuNzcyNDpcXHR9XFxuNzcyNTpcXHRcXG43NzI2OlxcdC8qXFxuNzcyNzpcXHQgKiAgICstLS0tLS0tLS0tLS0tLSsgIHBnb2ZmID09IDBcXG43NzI4OlxcdCAqICAgfCAgIG1ldGEgcGFnZSAgfFxcbjc3Mjk6XFx0ICogICArLS0tLS0tLS0tLS0tLS0rICBwZ29mZiA9PSAxXFxuNzczMDpcXHQgKiAgIHwgc3ViYnVmZmVyIDAgIHxcXG43NzMxOlxcdCAqICAgfCAgICAgICAgICAgICAgfFxcbjc3MzI6XFx0ICogICArLS0tLS0tLS0tLS0tLS0rICBwZ29mZiA9PSAoMSArICgxIFxcdTAwM2NcXHUwMDNjIHN1YmJ1Zl9vcmRlcikpXFxuNzczMzpcXHQgKiAgIHwgc3ViYnVmZmVyIDEgIHxcXG43NzM0OlxcdCAqICAgfCAgICAgICAgICAgICAgfFxcbjc3MzU6XFx0ICogICAgICAgICAuLi5cXG43NzM2OlxcdCAqL1xcbjc3Mzc6XFx0I2lmZGVmIENPTkZJR19NTVVcXG43NzM4OlxcdHN0YXRpYyBpbnQgX19yYl9tYXBfdm1hKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxcbjc3Mzk6XFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuNzc0MDpcXHR7XFxuNzc0MTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3N1YmJ1ZnMsIG5yX3BhZ2VzLCBucl92bWFfcGFnZXM7XFxuNzc0MjpcXHRcXHRwZ29mZl90IHBnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7XFxuNzc0MzpcXHRcXHR1bnNpZ25lZCBpbnQgc3ViYnVmX3BhZ2VzLCBzdWJidWZfb3JkZXI7XFxuNzc0NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo1NS40MDk4NTUzMTVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA3NTEyNDk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUmluZyBCdWZmZXIgVnVsbmVyYWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gVGhpcyBsb29rcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB2dWxuZXJhYmlsaXR5IHRvIHRhcmdldC4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhbWQ2NCwgYENPTkZJR19NTVVgIGlzIGEgZ2l2ZW4sIHNvIHdlIGNhbiBpZ25vcmUgdGhhdC4gVGhlIGtleSBjb25maWdzIHdlJ3JlIGNvbmNlcm5lZCB3aXRoIGFyZSBgQ09ORklHX1RSQUNJTkdgIGFuZCBgQ09ORklHX1JJTkdfQlVGRkVSYC4gV2UgKm11c3QqIGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBlbmFibGVkIGJlY2F1c2UgYFRSQUNJTkdgIGlzIHdoYXQgZW5hYmxlcyBgcmluZ19idWZmZXIub2AgYW5kIGB0cmFjZS5vYCwgd2hpY2ggYXJlIGNlbnRyYWwgaGVyZS5cblxuTm93LCBsZXQncyB2ZXJpZnkgb3VyIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmU6XG5cbiogICBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgXG4qICAgYHRyYWNpbmdfYnVmZmVyc19pb2N0bGBcbiogICBgcmluZ19idWZmZXJfbWFwYFxuKiAgIGByYl9nZXRfcmVhZGVyX3BhZ2VgXG5cbk9rYXksIHRob3NlIGxvb2sgc3BvdCBvbi4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhpcyBjb2RlIHBhdGggYW5kIG5vdCB1YmlxdWl0b3VzIGFjcm9zcyB0aGUga2VybmVsLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC5cblxuSSdsbCBxdWlja2x5IHRyYWNlIHRoZSBjYWxsIGZsb3cgdG8gZW5zdXJlIHRoaXMgaXMgc29saWQ6IGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGNhbGxzIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAsIHdoaWNoIGNhbGxzIGByYl9nZXRfcmVhZGVyX3BhZ2VgLiBBbmQgYHRyYWNpbmdfYnVmZmVyc19tbWFwYCBjYWxscyBgcmluZ19idWZmZXJfbWFwYC4gTG9va3MgZ29vZC5cblxuTm93LCB0aW1lIHRvIG5haWwgZG93biB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJ2xsIHN1bW1hcml6ZSBldmVyeXRoaW5nIGZvciBtYXhpbXVtIGNsYXJpdHk6XG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZSwgYWJzb2x1dGVseS5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBhbmQgYWNjdXJhdGU6IFRoZSBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCBpcyBhbHRlcmluZyBhIGBXQVJOX09OYCBhc3NlcnRpb24gbG9naWMgaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgdHJhY2Vmc2AgaW9jdGwgYFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUmAgb24gYHRyYWNlX3BpcGVfcmF3YC5cbiogICBgRm9jdXNTeW1ib2xzYDogQ29uZmlybWVkLiBJIGhhdmUgdGhlc2UgZXhhY3RseSByaWdodDogYFtcInJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyXCIsIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsIFwicmluZ19idWZmZXJfbWFwXCIsIFwicmJfZ2V0X3JlYWRlcl9wYWdlXCJdYC5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEp1c3QgdGhlIG9uZSBuZWVkZWQ6IGBbXCJUUkFDSU5HXCJdYC5cblxuUGVyZmVjdC4gRmluYWwgcmV2aWV3IGNvbXBsZXRlLiBSZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MTgsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NTkuNDg0OTg0MDk3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MzE3OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFDSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJcIixcbiAgICBcInRyYWNpbmdfYnVmZmVyc19pb2N0bFwiLFxuICAgIFwicmluZ19idWZmZXJfbWFwXCIsXG4gICAgXCJyYl9nZXRfcmVhZGVyX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQUNJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlclwiLFxuICAgIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgICBcInJiX2dldF9yZWFkZXJfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFdBUk5fT04gYXNzZXJ0aW9uIGxvZ2ljIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkgaW4ga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMsIHJlbGF4aW5nIHRoZSBjb25kaXRpb24gd2hlbiByYl9nZXRfcmVhZGVyX3BhZ2UoKSByZXR1cm5zIE5VTEwgdG8gb25seSB0cmlnZ2VyIHdoZW4gcmVhZGVyX3BhZ2UgaXMgbm90IGVxdWFsIHRvIGNvbW1pdF9wYWdlLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVIgaW9jdGwgb24gdHJhY2VmcyBwZXItQ1BVIHRyYWNlX3BpcGVfcmF3IGZpbGVzIGFmdGVyIG1tYXBwaW5nIHRoZSBidWZmZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjU5LjU5OTMxMTA4OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NzA4NTAzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo1OS42MDAxNjYyNjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDU2OTk4NjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yL3dhcm5pbmcgY29uZGl0aW9uIGluIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpYCB3aGVuIGByYl9nZXRfcmVhZGVyX3BhZ2UoKWAgcmV0dXJucyBOVUxMLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSB0cmlnZ2VyaW5nIGBXQVJOX09OKCFyZWFkZXIpYCwgaXQgbm93IG9ubHkgd2FybnMgaWYgYGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZjQ4YzM5ZjYwOWI3YzViNTA3MDhlZjcwYWI2YjAwOGJiNTI0YjI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMjozNjo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbmluZGV4IDljMDNhNTU1YTZiYTIuLjk4MTMwMTgyZTA1ZGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbkBAIC03OTk1LDggKzc5OTUsMTAgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG4tXHRpZiAoV0FSTl9PTighcmVhZGVyKSlcbitcdGlmICghcmVhZGVyKSB7XG4rXHRcdFdBUk5fT04oY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKTtcbiBcdFx0Z290byBvdXQ7XG4rXHR9XG4gXG4gXHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xuIFx0bWlzc2VkX2V2ZW50cyA9IGNwdV9idWZmZXItXHUwMDNlbG9zdF9ldmVudHM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo1OS42MDAxNjgwMDhaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2MDA5NjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBSaW5nIEJ1ZmZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldy4gVGhlIGZpbGUgbW9kaWZpZWQgaXMgYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpbnZvbHZlcyB0aGUga2VybmVsJ3MgdHJhY2luZyByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiDigJMgZGVmaW5pdGVseSBhbiBhcmVhIEknbSBmYW1pbGlhciB3aXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGZ1bmN0aW9uYWxpdHkuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgY29kZSBhcm91bmQgbGluZSA3OTk1LiBJJ2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBnZXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLiBVbmRlcnN0YW5kaW5nIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBpcyBjcml0aWNhbCBiZWZvcmUgdHJ5aW5nIHRvIGd1ZXNzIHdoYXQgdGhlIHB1cnBvc2UgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM4OjA0LjU2MDI2NzAyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk4MDpcXHRcXHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSk7XFxuNzk4MTpcXHRcXG43OTgyOlxcdFxcdC8qXFxuNzk4MzpcXHRcXHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cXG43OTg0OlxcdFxcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxcbjc5ODU6XFx0XFx0ICogZXZlcnl0aGluZy4gTGV0J3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5Llxcbjc5ODY6XFx0XFx0ICovXFxuNzk4NzpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSkge1xcbjc5ODg6XFx0XFx0XFx0d2hpbGUgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpXFxuNzk4OTpcXHRcXHRcXHRcXHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcXG43OTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTE6XFx0XFx0fVxcbjc5OTI6XFx0XFxuNzk5MzpcXHRcXHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXFxuNzk5NDpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpXFxuNzk5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTk2OlxcdFxcbjc5OTc6XFx0XFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xcbjc5OTg6XFx0XFx0aWYgKCFyZWFkZXIpIHtcXG43OTk5OlxcdFxcdFxcdFdBUk5fT04oY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpO1xcbjgwMDA6XFx0XFx0XFx0Z290byBvdXQ7XFxuODAwMTpcXHRcXHR9XFxuODAwMjpcXHRcXG44MDAzOlxcdFxcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXFxuODAwNDpcXHRcXHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cXHUwMDNlbG9zdF9ldmVudHM7XFxuODAwNTpcXHRcXG44MDA2OlxcdFxcdGlmIChtaXNzZWRfZXZlbnRzKSB7XFxuODAwNzpcXHRcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpIHtcXG44MDA4OlxcdFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cXHUwMDNlcGFnZTtcXG44MDA5OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjb21taXQ7XFxuODAxMDpcXHRcXHRcXHRcXHQvKlxcbjgwMTE6XFx0XFx0XFx0XFx0ICogVXNlIHRoZSByZWFsX2VuZCBmb3IgdGhlIGRhdGEgc2l6ZSxcXG44MDEyOlxcdFxcdFxcdFxcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXFxuODAxMzpcXHRcXHRcXHRcXHQgKiBvbiB0aGUgcGFnZS5cXG44MDE0OlxcdFxcdFxcdFxcdCAqL1xcbjgwMTU6XFx0XFx0XFx0XFx0aWYgKHJlYWRlci1cXHUwMDNlcmVhbF9lbmQpXFxuODAxNjpcXHRcXHRcXHRcXHRcXHRsb2NhbF9zZXQoXFx1MDAyNmRwYWdlLVxcdTAwM2Vjb21taXQsIHJlYWRlci1cXHUwMDNlcmVhbF9lbmQpO1xcbjgwMTc6XFx0XFx0XFx0XFx0LypcXG44MDE4OlxcdFxcdFxcdFxcdCAqIElmIHRoZXJlIGlzIHJvb20gYXQgdGhlIGVuZCBvZiB0aGUgcGFnZSB0byBzYXZlIHRoZVxcbjgwMTk6XFx0XFx0XFx0XFx0ICogbWlzc2VkIGV2ZW50cywgdGhlbiByZWNvcmQgaXQgdGhlcmUuXFxuODAyMDpcXHRcXHRcXHRcXHQgKi9cXG44MDIxOlxcdFxcdFxcdFxcdGNvbW1pdCA9IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpO1xcbjgwMjI6XFx0XFx0XFx0XFx0aWYgKHJiX3BhZ2VfY2FwYWNpdHkocmVhZGVyKSAtIGNvbW1pdCBcXHUwMDNlPSBzaXplb2YobWlzc2VkX2V2ZW50cykpIHtcXG44MDIzOlxcdFxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2ZHBhZ2UtXFx1MDAzZWRhdGFbY29tbWl0XSwgXFx1MDAyNm1pc3NlZF9ldmVudHMsXFxuODAyNDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG1pc3NlZF9ldmVudHMpKTtcXG44MDI1OlxcdFxcdFxcdFxcdFxcdGxvY2FsX2FkZChSQl9NSVNTRURfU1RPUkVELCBcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCk7XFxuODAyNjpcXHRcXHRcXHRcXHR9XFxuODAyNzpcXHRcXHRcXHRcXHRsb2NhbF9hZGQoUkJfTUlTU0VEX0VWRU5UUywgXFx1MDAyNmRwYWdlLVxcdTAwM2Vjb21taXQpO1xcbjgwMjg6XFx0XFx0XFx0fSBlbHNlIGlmICghV0FSTl9PTkNFKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXFx1MDAzZXRhaWxfcGFnZSxcXG44MDI5OlxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJSZWFkZXIgb24gY29tbWl0IHdpdGggJWxkIG1pc3NlZCBldmVudHNcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozODowNC41NjA4OTc0NjhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0MTk1NDI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSB3aG9sZSBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIGZ1bmN0aW9uLiBJIGNhbid0IGp1c3QgbG9vayBhdCBzbmlwcGV0czsgSSBuZWVkIHRoZSBjb21wbGV0ZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBlbnRpcmV0eSBvZiB0aGUgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQganVkZ2VtZW50cyBhYm91dCBpdCwgb3IgaG93IGl0IG1pZ2h0IGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBiZSBhYmxlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIGZyb20gZW50cnkgdG8gZXhpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzg6MDUuOTAyODU1MjUxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTYwOlxcdH1cXG43OTYxOlxcdFxcbjc5NjI6XFx0aW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG43OTYzOlxcdHtcXG43OTY0OlxcdFxcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xcbjc5NjU6XFx0XFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XFxuNzk2NjpcXHRcXHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XFxuNzk2NzpcXHRcXHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xcbjc5Njg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG43OTY5OlxcdFxcbjc5NzA6XFx0XFx0Y3B1X2J1ZmZlciA9IHJiX2dldF9tYXBwZWRfYnVmZmVyKGJ1ZmZlciwgY3B1KTtcXG43OTcxOlxcdFxcdGlmIChJU19FUlIoY3B1X2J1ZmZlcikpXFxuNzk3MjpcXHRcXHRcXHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xcbjc5NzM6XFx0XFxuNzk3NDpcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9sb2NrLCBmbGFncyk7XFxuNzk3NTpcXHRcXG43OTc2OlxcdGNvbnN1bWU6XFxuNzk3NzpcXHRcXHRpZiAocmJfcGVyX2NwdV9lbXB0eShjcHVfYnVmZmVyKSlcXG43OTc4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5Nzk6XFx0XFxuNzk4MDpcXHRcXHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSk7XFxuNzk4MTpcXHRcXG43OTgyOlxcdFxcdC8qXFxuNzk4MzpcXHRcXHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cXG43OTg0OlxcdFxcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxcbjc5ODU6XFx0XFx0ICogZXZlcnl0aGluZy4gTGV0J3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5Llxcbjc5ODY6XFx0XFx0ICovXFxuNzk4NzpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSkge1xcbjc5ODg6XFx0XFx0XFx0d2hpbGUgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpXFxuNzk4OTpcXHRcXHRcXHRcXHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcXG43OTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTE6XFx0XFx0fVxcbjc5OTI6XFx0XFxuNzk5MzpcXHRcXHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXFxuNzk5NDpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpXFxuNzk5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTk2OlxcdFxcbjc5OTc6XFx0XFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xcbjc5OTg6XFx0XFx0aWYgKCFyZWFkZXIpIHtcXG43OTk5OlxcdFxcdFxcdFdBUk5fT04oY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpO1xcbjgwMDA6XFx0XFx0XFx0Z290byBvdXQ7XFxuODAwMTpcXHRcXHR9XFxuODAwMjpcXHRcXG44MDAzOlxcdFxcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXFxuODAwNDpcXHRcXHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cXHUwMDNlbG9zdF9ldmVudHM7XFxuODAwNTpcXHRcXG44MDA2OlxcdFxcdGlmIChtaXNzZWRfZXZlbnRzKSB7XFxuODAwNzpcXHRcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpIHtcXG44MDA4OlxcdFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cXHUwMDNlcGFnZTtcXG44MDA5OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjb21taXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM4OjA1LjkwMzUyNjI4MVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjY0NTUyNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFJpbmcgQnVmZmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBkaWZmIHJlbGF0ZWQgdG8gYHJiX2dldF9yZWFkZXJfcGFnZWAuIEJlZm9yZSwgdGhlcmUgd2FzIGEgc2ltcGxlIGBXQVJOX09OKCFyZWFkZXIpYCBhZnRlciB0aGUgY2FsbC4gTm93LCB0aGF0J3MgYmVlbiByZXBsYWNlZCB3aXRoIGFuIGBpZiAoIXJlYWRlcilgIGNoZWNrIHRoYXQgaW5jbHVkZXMgYSBgV0FSTl9PTihjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpYCAqb25seSogaWYgYHJlYWRlcmAgaXMgTlVMTC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeSB0aGUgY2hhbmdlPyBBaCwgcmlnaHQsIHRoZSBleHBsYW5hdGlvbiBjbGFyaWZpZXMgdGhhdCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCBjYW4gcmV0dXJuIE5VTEwgaWYgdGhlIHdyaXRlciBpcyBjYXVnaHQgdXAgb3IgdGhlcmUncyBub3RoaW5nIHRvIHJlYWQuIFRoZSBvcmlnaW5hbCBgV0FSTl9PTmAgd2FzIHVuY29uZGl0aW9uYWwsIHNvIGl0J2QgdHJpZ2dlciBldmVuIGluIHRoZXNlIGxlZ2l0aW1hdGUgTlVMTCBzY2VuYXJpb3MuIFRoaXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgc2VlbXMgdG8gYmUgYW4gYXR0ZW1wdCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzLCBvbmx5IHdhcm5pbmcgaWYgdGhlIHJlYWRlciBhbmQgY29tbWl0IHBhZ2VzIGFyZSAqZGlmZmVyZW50KiB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuIEVzc2VudGlhbGx5LCB0aGV5IGFyZSB0cnlpbmcgdG8gZml4IGEgc3B1cmlvdXMgd2FybmluZy5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIGZvciBwb3RlbnRpYWwgcmlza3MuIExldCdzIGNvbnNpZGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBhbHdheXMgdGhlIGZpcnN0IGNvbnNpZGVyYXRpb24sIGFuZCBjb3B5LXRvLXVzZXIgaXNzdWVzLlxuXG4qICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucy4gR29vZC5cbiogICBObyBuZXcgY29weS10by11c2VyIG9wZXJhdGlvbnMuIEZpbmUuXG4qICAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gYnJhbmNoaW5nIG9yIGFueSBsb2dpYy4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG4qICAgVGhlIGNoYW5nZSBpcyAqc29sZWx5KiByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIHdpdGggYW4gaWYgc3RhdGVtZW50IGd1YXJkaW5nIHRoZSBuZXcgd2FybmluZy4gTm90aGluZyBpcyBiZWluZyBleHBvc2VkIG9yIHJlYWQuXG5cbkdpdmVuIHRoZXNlIHBvaW50cywgdGhpcyBsb29rcyBzYWZlLiBJdCdzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBlcnJvciBjaGVja2luZyB0byBiZSBtb3JlIGFjY3VyYXRlLiBObyBLTVNBTiBpcyBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgdGVzdGluZyB3aWxsIHN1ZmZpY2UuIEl0IHNlZW1zIHRvIGJlIGEgbWlub3IgY2xlYW4tdXAsIGZpeGluZyBhIHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZS5cblxuQWxyaWdodCwgSSBhbSBzYXRpc2ZpZWQuIExldCdzIGdldCB0aGUgY2FsbCByZWFkeSwgYW5kIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwMSwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozODoxMC4xNjgwODE5MzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvci93YXJuaW5nIGNvbmRpdGlvbiBpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKWAgd2hlbiBgcmJfZ2V0X3JlYWRlcl9wYWdlKClgIHJldHVybnMgTlVMTC4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgdHJpZ2dlcmluZyBgV0FSTl9PTighcmVhZGVyKWAsIGl0IG5vdyBvbmx5IHdhcm5zIGlmIGBjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZWAgYmVmb3JlIGp1bXBpbmcgdG8gYG91dGAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGRhdGEgc3RydWN0dXJlcyBvciBzdHJ1Y3QgcGFkZGluZywgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yL3dhcm5pbmcgY29uZGl0aW9uIGluIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpYCB3aGVuIGByYl9nZXRfcmVhZGVyX3BhZ2UoKWAgcmV0dXJucyBOVUxMLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSB0cmlnZ2VyaW5nIGBXQVJOX09OKCFyZWFkZXIpYCwgaXQgbm93IG9ubHkgd2FybnMgaWYgYGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmdd4d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 12:32:55 +0000 UTC FinishedAt: 2026-09-08 12:38:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRACING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRACING" ], "series_id": "cdf141a9-21eb-45f1-a428-b6846cc21164" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ring_buffer_map_get_reader", "tracing_buffers_ioctl", "ring_buffer_map", "rb_get_reader_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQUNJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgICAmIzM0O3JiX2dldF9yZWFkZXJfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvci93YXJuaW5nIGNvbmRpdGlvbiBpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKWAgd2hlbiBgcmJfZ2V0X3JlYWRlcl9wYWdlKClgIHJldHVybnMgTlVMTC4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgdHJpZ2dlcmluZyBgV0FSTl9PTighcmVhZGVyKWAsIGl0IG5vdyBvbmx5IHdhcm5zIGlmIGBjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2VgIGJlZm9yZSBqdW1waW5nIHRvIGBvdXRgLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgV0FSTl9PTiBhc3NlcnRpb24gbG9naWMgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKSBpbiBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYywgcmVsYXhpbmcgdGhlIGNvbmRpdGlvbiB3aGVuIHJiX2dldF9yZWFkZXJfcGFnZSgpIHJldHVybnMgTlVMTCB0byBvbmx5IHRyaWdnZXIgd2hlbiByZWFkZXJfcGFnZSBpcyBub3QgZXF1YWwgdG8gY29tbWl0X3BhZ2UuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUiBpb2N0bCBvbiB0cmFjZWZzIHBlci1DUFUgdHJhY2VfcGlwZV9yYXcgZmlsZXMgYWZ0ZXIgbW1hcHBpbmcgdGhlIGJ1ZmZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmNDhjMzlmNjA5YjdjNWI1MDcwOGVmNzBhYjZiMDA4YmI1MjRiMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEyOjM2OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbmluZGV4IDljMDNhNTU1YTZiYTIuLjk4MTMwMTgyZTA1ZGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbkBAIC03OTk1LDggJiM0Mzs3OTk1LDEwIEBAIGludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuLVx0aWYgKFdBUk5fT04oIXJlYWRlcikpXG4mIzQzO1x0aWYgKCFyZWFkZXIpIHtcbiYjNDM7XHRcdFdBUk5fT04oY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKTtcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cbiBcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVx1MDAzZWxvc3RfZXZlbnRzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQUNJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgICAmIzM0O3JiX2dldF9yZWFkZXJfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2Y0OGMzOWY2MDliN2M1YjUwNzA4ZWY3MGFiNmIwMDhiYjUyNGIyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTI6MzY6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IDljMDNhNTU1YTZiYTIuLjk4MTMwMTgyZTA1ZGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC03OTk1LDggJiM0Mzs3OTk1LDEwIEBAIGludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCiAJCWdvdG8gb3V0OwogCiAJcmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpOwotCWlmIChXQVJOX09OKCFyZWFkZXIpKQomIzQzOwlpZiAoIXJlYWRlcikgewomIzQzOwkJV0FSTl9PTihjcHVfYnVmZmVyLSZndDtyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLSZndDtjb21taXRfcGFnZSk7CiAJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAkvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqLwogCW1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLSZndDtsb3N0X2V2ZW50czsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmluZyBCdWZmZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgYW5kIHBpbnBvaW50IGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyB0b3VjaGVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvZGUuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgdXBkYXRlIGNlbnRlcnMgYXJvdW5kIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb24gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhpcyBjaGFuZ2UuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAuIEkgd2FudCB0byBzZWUgaXRzIGRlZmluaXRpb24sIGl0cyBpbW1lZGlhdGUgY2FsbGVycywgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBvZiB0aGUgcmluZyBidWZmZXIgbWVjaGFuaXNtLiBTZWVpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGludGVyYWN0aW9ucyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IGFuZCBpbnRlbnQgb2YgdGhlIGNoYW5nZS4gVGhpcyBpbml0aWFsIGV4cGxvcmF0aW9uIHdpbGwgaW5mb3JtIHRoZSBkaXJlY3Rpb24gb2YgbXkgZGVlcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc5ODA6XHRcdHJlYWRlcl9zaXplID0gcmJfcGFnZV9zaXplKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UpO1xuNzk4MTpcdFxuNzk4MjpcdFx0Lypcbjc5ODM6XHRcdCAqIFRoZXJlIGFyZSBkYXRhIHRvIGJlIHJlYWQgb24gdGhlIGN1cnJlbnQgcmVhZGVyIHBhZ2UsIHdlIGNhblxuNzk4NDpcdFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIuIEJ1dCBiZWZvcmUgdGhhdCwgd2UgYXNzdW1lIHRoZSBsYXR0ZXIgd2lsbCByZWFkXG43OTg1Olx0XHQgKiBldmVyeXRoaW5nLiBMZXQmIzM5O3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5LlxuNzk4NjpcdFx0ICovXG43OTg3Olx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZS1cdTAwM2VyZWFkIFx1MDAzYyByZWFkZXJfc2l6ZSkge1xuNzk4ODpcdFx0XHR3aGlsZSAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZS1cdTAwM2VyZWFkIFx1MDAzYyByZWFkZXJfc2l6ZSlcbjc5ODk6XHRcdFx0XHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcbjc5OTA6XHRcdFx0Z290byBvdXQ7XG43OTkxOlx0XHR9XG43OTkyOlx0XG43OTkzOlx0XHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXG43OTk0Olx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSA9PSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKVxuNzk5NTpcdFx0XHRnb3RvIG91dDtcbjc5OTY6XHRcbjc5OTc6XHRcdHJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTtcbjc5OTg6XHRcdGlmICghcmVhZGVyKSB7XG43OTk5Olx0XHRcdFdBUk5fT04oY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKTtcbjgwMDA6XHRcdFx0Z290byBvdXQ7XG44MDAxOlx0XHR9XG44MDAyOlx0XG44MDAzOlx0XHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xuODAwNDpcdFx0bWlzc2VkX2V2ZW50cyA9IGNwdV9idWZmZXItXHUwMDNlbG9zdF9ldmVudHM7XG44MDA1Olx0XG44MDA2Olx0XHRpZiAobWlzc2VkX2V2ZW50cykge1xuODAwNzpcdFx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKSB7XG44MDA4Olx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmRwYWdlID0gcmVhZGVyLVx1MDAzZXBhZ2U7XG44MDA5Olx0XHRcdFx0dW5zaWduZWQgaW50IGNvbW1pdDtcbjgwMTA6XHRcdFx0XHQvKlxuODAxMTpcdFx0XHRcdCAqIFVzZSB0aGUgcmVhbF9lbmQgZm9yIHRoZSBkYXRhIHNpemUsXG44MDEyOlx0XHRcdFx0ICogVGhpcyBnaXZlcyB1cyBhIGNoYW5jZSB0byBzdG9yZSB0aGUgbG9zdCBldmVudHNcbjgwMTM6XHRcdFx0XHQgKiBvbiB0aGUgcGFnZS5cbjgwMTQ6XHRcdFx0XHQgKi9cbjgwMTU6XHRcdFx0XHRpZiAocmVhZGVyLVx1MDAzZXJlYWxfZW5kKVxuODAxNjpcdFx0XHRcdFx0bG9jYWxfc2V0KFx1MDAyNmRwYWdlLVx1MDAzZWNvbW1pdCwgcmVhZGVyLVx1MDAzZXJlYWxfZW5kKTtcbjgwMTc6XHRcdFx0XHQvKlxuODAxODpcdFx0XHRcdCAqIElmIHRoZXJlIGlzIHJvb20gYXQgdGhlIGVuZCBvZiB0aGUgcGFnZSB0byBzYXZlIHRoZVxuODAxOTpcdFx0XHRcdCAqIG1pc3NlZCBldmVudHMsIHRoZW4gcmVjb3JkIGl0IHRoZXJlLlxuODAyMDpcdFx0XHRcdCAqL1xuODAyMTpcdFx0XHRcdGNvbW1pdCA9IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpO1xuODAyMjpcdFx0XHRcdGlmIChyYl9wYWdlX2NhcGFjaXR5KHJlYWRlcikgLSBjb21taXQgXHUwMDNlPSBzaXplb2YobWlzc2VkX2V2ZW50cykpIHtcbjgwMjM6XHRcdFx0XHRcdG1lbWNweShcdTAwMjZkcGFnZS1cdTAwM2VkYXRhW2NvbW1pdF0sIFx1MDAyNm1pc3NlZF9ldmVudHMsXG44MDI0Olx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKG1pc3NlZF9ldmVudHMpKTtcbjgwMjU6XHRcdFx0XHRcdGxvY2FsX2FkZChSQl9NSVNTRURfU1RPUkVELCBcdTAwMjZkcGFnZS1cdTAwM2Vjb21taXQpO1xuODAyNjpcdFx0XHRcdH1cbjgwMjc6XHRcdFx0XHRsb2NhbF9hZGQoUkJfTUlTU0VEX0VWRU5UUywgXHUwMDI2ZHBhZ2UtXHUwMDNlY29tbWl0KTtcbjgwMjg6XHRcdFx0fSBlbHNlIGlmICghV0FSTl9PTkNFKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cdTAwM2V0YWlsX3BhZ2UsXG44MDI5Olx0XHRcdFx0XHQgICAgICBcJiMzNDtSZWFkZXIgb24gY29tbWl0IHdpdGggJWxkIG1pc3NlZCBldmVudHNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxOAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgQ2FsbHNpdGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIGlzIGJlaW5nICp1c2VkKiBpbiB0aGlzIGNvZGViYXNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgY2FsbCBncmFwaC4gIEkgd2FudCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCwgdW5kZXIgd2hhdCBjb25kaXRpb25zLCBhbmQgd2hhdCBhcmd1bWVudHMgYXJlIGJlaW5nIHBhc3NlZCB0byBpdC4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYXJnZXIgZGVzaWduLiBBbSBJIGxvb2tpbmcgYXQgYSBjcml0aWNhbCBwYXRoPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gaG93IHJlYWRlcnMgYXJlIGFjcXVpcmVkPyBGaW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCB0byBhbnN3ZXJpbmcgYWxsIHRob3NlIHF1ZXN0aW9ucyBhbmQgcmVhbGx5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgSURFIG9yIG15IGdyZXAvZmluZCB1dGlsaXR5IHR1cm5zIHVwLiBUaGlzIGNhbGxzaXRlIGFuYWx5c2lzIGlzIHRoZSBseW5jaHBpbiB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmg9MjU0PWludCByaW5nX2J1ZmZlcl91bm1hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpO1xuaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oOjI1NTppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTtcbmluY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaC0yNTYtXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzkyNz1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjEtXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3OTYyOmludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYzLXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz03MzY1PXN0YXRpYyBsb25nIHRyYWNpbmdfYnVmZmVyc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4MC1cbmtlcm5lbC90cmFjZS90cmFjZS5jOjczODE6XHRcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgyLVx0XHRcdFx0XHRcdCAgaXRlci1cdTAwM2VjcHVfZmlsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBgdHJhY2UuY2AgaW9jdGwqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBjb250cm9sIGludGVyZmFjZS4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gYGtlcm5lbC90cmFjZS90cmFjZS5jYC4gSSBleHBlY3QgdGhlIGBpb2N0bGAgY2FsbHMgaW4gaGVyZSB3aWxsIGJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyB3aGVyZSB3ZSBjb25maWd1cmUsIGVuYWJsZSwgZGlzYWJsZSwgYW5kIHJldHJpZXZlIGRhdGEgZnJvbSB0aGUgdHJhY2Vwb2ludHMuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZy4gQXJlIHRoZXkgdXNpbmcgYSBzd2l0Y2ggc3RhdGVtZW50PyBXaGF0IGtpbmQgb2YgYXJndW1lbnRzIGFyZSB0aGV5IGV4cGVjdGluZz8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQga2luZCBvZiBzZWN1cml0eSBjaGVja3MgYXJlIHRoZXkgaW1wbGVtZW50aW5nPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdXNlci1wcm92aWRlZCBkYXRhIHBhc3NlZCB2aWEgdGhlIGlvY3RsIG51bWJlcnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgYXJndW1lbnRzLCBzbyBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgY2hlY2tpbmcgaG93IHRob3NlIGFyZ3VtZW50cyBhcmUgdmFsaWRhdGVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHJlbHlpbmcgb24gc3RyaWN0IHR5cGUgY2hlY2tpbmcsIHJhbmdlIHZhbGlkYXRpb24sIG9yIG1heWJlIGV2ZW4gc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGNhcGFiaWxpdHkgY2hlY2tzLiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIGdhdGV3YXkgZm9yIGFsbCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNpbmcgc3lzdGVtLCBhbmQgd2hlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSBsb29waG9sZXMgYXJlIGxpa2VseSB0byBiZSBmb3VuZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVpciBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgZW5vdWdoLCBvciBpZiBpdCBvcGVucyB0aGUgZG9vciB0byBhbnkgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgZXZlbiBwcml2aWxlZ2UgZXNjYWxhdGlvbiBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczNjU6XHRzdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuNzM2NjpcdHtcbjczNjc6XHRcdHN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm8gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjczNjg6XHRcdHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IFx1MDAyNmluZm8tXHUwMDNlaXRlcjtcbjczNjk6XHRcdGludCBlcnI7XG43MzcwOlx0XG43MzcxOlx0XHRpZiAoY21kID09IFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikge1xuNzM3MjpcdFx0XHRpZiAoIShmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spKSB7XG43MzczOlx0XHRcdFx0ZXJyID0gcmluZ19idWZmZXJfd2FpdChpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG43Mzc0Olx0XHRcdFx0XHRcdCAgICAgICBpdGVyLVx1MDAzZWNwdV9maWxlLFxuNzM3NTpcdFx0XHRcdFx0XHQgICAgICAgaXRlci1cdTAwM2V0ci1cdTAwM2VidWZmZXJfcGVyY2VudCxcbjczNzY6XHRcdFx0XHRcdFx0ICAgICAgIE5VTEwsIE5VTEwpO1xuNzM3NzpcdFx0XHRcdGlmIChlcnIpXG43Mzc4Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuNzM3OTpcdFx0XHR9XG43MzgwOlx0XG43MzgxOlx0XHRcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG43MzgyOlx0XHRcdFx0XHRcdFx0ICBpdGVyLVx1MDAzZWNwdV9maWxlKTtcbjczODM6XHRcdH0gZWxzZSBpZiAoY21kKSB7XG43Mzg0Olx0XHRcdHJldHVybiAtRU5PVFRZO1xuNzM4NTpcdFx0fVxuNzM4NjpcdFxuNzM4NzpcdFx0LypcbjczODg6XHRcdCAqIEFuIGlvY3RsIGNhbGwgd2l0aCBjbWQgMCB0byB0aGUgcmluZyBidWZmZXIgZmlsZSB3aWxsIHdha2UgdXAgYWxsXG43Mzg5Olx0XHQgKiB3YWl0ZXJzXG43MzkwOlx0XHQgKi9cbjczOTE6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZ0cmFjZV90eXBlc19sb2NrKTtcbjczOTI6XHRcbjczOTM6XHRcdC8qIE1ha2Ugc3VyZSB0aGUgd2FpdGVycyBzZWUgdGhlIG5ldyB3YWl0X2luZGV4ICovXG43Mzk0Olx0XHQodm9pZClhdG9taWNfZmV0Y2hfaW5jX3JlbGVhc2UoXHUwMDI2aXRlci1cdTAwM2V3YWl0X2luZGV4KTtcbjczOTU6XHRcbjczOTY6XHRcdHJpbmdfYnVmZmVyX3dha2Vfd2FpdGVycyhpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xuNzM5NzpcdFxuNzM5ODpcdFx0cmV0dXJuIDA7XG43Mzk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHJpbmcgYnVmZmVyIG1tYXAgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBuZWNlc3NhcnkuIFRpbWUgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGFuZCBsaXN0IG91dCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBhc3BlY3RzIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG5lZWQgdG8gYmUgY29uZmlndXJhYmxlIGFuZCBob3cgYmVzdCB0byBleHBvc2UgdGhvc2Uga25vYnMgdG8gdGhlIHVzZXIuIEkmIzM5O2xsIHN0YXJ0IGJ5IGxpc3Rpbmcgd2hhdCBzZWVtcyBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGVuLCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdmFyaW91cyBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMgYW5kIHRoZSBpbXBhY3QgdGhvc2UgY2hvaWNlcyBoYXZlIG9uIHRoZSBkZXNpZ24sIHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc4MzM9c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzgzOS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc4NDA6aW50IHJpbmdfYnVmZmVyX21hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03ODQxLVx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzkwOS0gKi9cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc5MTA6dm9pZCByaW5nX2J1ZmZlcl9tYXBfZHVwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5MTEte1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc5Mjc9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYxLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzk2MjppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzk2My17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzM2NT1zdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTczODAtXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3MzgxOlx0XHRyZXR1cm4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyLFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4Mi1cdFx0XHRcdFx0XHQgIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0MDU9c3RhdGljIHZvaWQgdHJhY2luZ19idWZmZXJzX21tYXBfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDA5LVxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQxMDpcdHJpbmdfYnVmZmVyX21hcF9kdXAoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyLCBpdGVyLVx1MDAzZWNwdV9maWxlKTtcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0MTEtfVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0Mzc9c3RhdGljIGludCB0cmFjaW5nX2J1ZmZlcnNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQ1MC1cbmtlcm5lbC90cmFjZS90cmFjZS5jOjc0NTE6XHRyZXQgPSByaW5nX2J1ZmZlcl9tYXAoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyLCBpdGVyLVx1MDAzZWNwdV9maWxlLCB2bWEpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQ1Mi1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS2VybmVsIFRyYWNlIEluc3RydW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBjYXBhYmlsaXRpZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IGhvdyB0aGluZ3MgYXJlIHB1dCB0b2dldGhlciBmb3IgdGhlIGBrZXJuZWwvdHJhY2VgIHN1YnN5c3RlbS4gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBNYWtlZmlsZWAgaW4gdGhhdCBkaXJlY3Rvcnk7IGl0JiMzOTtzIHRoZSB1c3VhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSB0cmFjaW5nIGZ1bmN0aW9uYWxpdHkgZ2V0cyBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gQWZ0ZXIgdGhhdCwgSSYjMzk7bSBtb3Zpbmcgb24gdG8gYHJpbmdfYnVmZmVyLmNgLiBJIGV4cGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHRoZSByaW5nIGJ1ZmZlciwgd2hpY2ggaXMgYSBjcnVjaWFsIGNvbXBvbmVudCBmb3IgdHJhY2UgZGF0YSBzdG9yYWdlLCByZXNpZGVzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBpdHMgZGVzaWduLCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGluIGEga2VybmVsIGNvbnRleHQuIEkgc3VzcGVjdCB0aGUgTWFrZWZpbGUgd2lsbCByZWZlcmVuY2UgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JpbmdfYnVmZmVyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICYjNDM7PSBsaWJmdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgJiM0Mzs9IHJpbmdfYnVmZmVyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSAmIzQzOz0gcmluZ19idWZmZXJfYmVuY2htYXJrLm9cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTMzPW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEUpICYjNDM7PSB0cmFjZV9yZW1vdGUub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjEzNDpvYmotJChDT05GSUdfU0lNUExFX1JJTkdfQlVGRkVSKSAmIzQzOz0gc2ltcGxlX3JpbmdfYnVmZmVyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMzUtb2JqLSQoQ09ORklHX1RSQUNFX1JFTU9URV9URVNUKSAmIzQzOz0gcmVtb3RlX3Rlc3Qub1xuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xNjE9JChvYmopLyUuby5jaGVja2VkOiAkKG9iaikvJS5vICQob2JqKS91bmRlZnN5bXNfYmFzZS5vIEZPUkNFXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTE2My1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxNjQ6YWx3YXlzLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgJiM0Mzs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vLmNoZWNrZWRcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjUtXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9MTExNz1fX3BvbGxfdCByaW5nX2J1ZmZlcl9wb2xsX3dhaXQoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LFxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTExNzktXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzoxMTgwOi8qIGJ1ZmZlciBtYXkgYmUgZWl0aGVyIHJpbmdfYnVmZmVyIG9yIHJpbmdfYnVmZmVyX3Blcl9jcHUgKi9cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTExODEtI2RlZmluZSBSQl9XQVJOX09OKGIsIGNvbmQpXHRcdFx0XHRcdFx0XFxcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NDE0PUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGVfY3B1KTtcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDE2LS8qKlxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQxNzogKiByaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHMgLSBnZXQgdGhlIG9sZGVzdCBldmVudCB0aW1lc3RhbXAgZnJvbSB0aGUgYnVmZmVyXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDE4LSAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlclxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MjAtICovXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDIxOnU2NCByaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHMoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQyMi17XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ0Ni19XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDQ3OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyk7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDQ4LVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTU0ODU9RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllc19jcHUpO1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0ODctLyoqXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDg4OiAqIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgY2F1c2VkIGJ5IHRoZSByaW5nXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDg5LSAqIGJ1ZmZlciB3cmFwcGluZyBhcm91bmQgKG9ubHkgaWYgUkJfRkxfT1ZFUldSSVRFIGlzIG9uKS5cbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDkyLSAqL1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQ5Mzp1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0OTQte1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1MDUtfVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTUwNjpFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSk7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTA3LVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTU1OTI9RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllcyk7XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTU5NC0vKipcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU1OTU6ICogcmluZ19idWZmZXJfb3ZlcnJ1bnMgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXJcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1OTYtICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYwMC0gKi9cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU2MDE6dW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9vdmVycnVucyhzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIpXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjAyLXtcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjE0LX1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU2MTU6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bnMpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYxNi1cbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmM9MjMyPXN0YXRpYyB2b2lkIHJpbmdfYnVmZmVyX3Byb2R1Y2VyKHZvaWQpXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jLTMwMS1cdGVudHJpZXMgPSByaW5nX2J1ZmZlcl9lbnRyaWVzKGJ1ZmZlcik7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmM6MzAyOlx0b3ZlcnJ1bnMgPSByaW5nX2J1ZmZlcl9vdmVycnVucyhidWZmZXIpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jLTMwMy1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz0yODIyPWdldF90b3RhbF9lbnRyaWVzX2NwdShzdHJ1Y3QgYXJyYXlfYnVmZmVyICpidWYsIHVuc2lnbmVkIGxvbmcgKnRvdGFsLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTI4MzgtXHRcdCp0b3RhbCA9IGNvdW50ICYjNDM7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYzoyODM5Olx0XHRcdHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KGJ1Zi1cdTAwM2VidWZmZXIsIGNwdSk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0yODQwLVx0KmVudHJpZXMgPSBjb3VudDtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz0zMzY3PV9fdHJhY2luZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBib29sIHNuYXBzaG90KVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTM0MzAtXHQvKiBBbm5vdGF0ZSBzdGFydCBvZiBidWZmZXJzIGlmIHdlIGhhZCBvdmVycnVucyAqL1xua2VybmVsL3RyYWNlL3RyYWNlLmM6MzQzMTpcdGlmIChyaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIpKVxua2VybmVsL3RyYWNlL3RyYWNlLmMtMzQzMi1cdFx0aXRlci1cdTAwM2VpdGVyX2ZsYWdzIHw9IFRSQUNFX0ZJTEVfQU5OT1RBVEU7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQ3Mj10cmFjaW5nX3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0OTItXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDkzOlx0Y250ID0gcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUodHJhY2VfYnVmLVx1MDAzZWJ1ZmZlciwgY3B1KTtcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0OTQtXHR0cmFjZV9zZXFfcHJpbnRmKHMsIFwmIzM0O292ZXJydW46ICVsZFxcblwmIzM0OywgY250KTtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTAzLVx0XHQvKiBsb2NhbCBvciBnbG9iYWwgZm9yIHRyYWNlX2Nsb2NrICovXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NTA0Olx0XHR0ID0gbnMydXNlY3MocmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHRyYWNlX2J1Zi1cdTAwM2VidWZmZXIsIGNwdSkpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUwNS1cdFx0dXNlY19yZW0gPSBkb19kaXYodCwgVVNFQ19QRVJfU0VDKTtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTE0LVx0XHR0cmFjZV9zZXFfcHJpbnRmKHMsIFwmIzM0O29sZGVzdCBldmVudCB0czogJWxsdVxcblwmIzM0Oyxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc1MTU6XHRcdFx0XHRyaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHModHJhY2VfYnVmLVx1MDAzZWJ1ZmZlciwgY3B1KSk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTE2LVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jPTkzNzg9c3RhdGljIHZvaWQgdHJhY2VfaW5pdF9pdGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgc3RydWN0IHRyYWNlX2FycmF5ICp0cilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy05Mzg4LVx0LyogQW5ub3RhdGUgc3RhcnQgb2YgYnVmZmVycyBpZiB3ZSBoYWQgb3ZlcnJ1bnMgKi9cbmtlcm5lbC90cmFjZS90cmFjZS5jOjkzODk6XHRpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyKSlcbmtlcm5lbC90cmFjZS90cmFjZS5jLTkzOTAtXHRcdGl0ZXItXHUwMDNlaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0FOTk9UQVRFO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYz0xMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfb3ZlcnJ1bnMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYy0xMjItXHR1bnNpZ25lZCBsb25nIGNudCA9IGF0b21pY194Y2hnKFx1MDAyNmRyb3BwZWRfY291bnQsIDApO1xua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jOjEyMzpcdHVuc2lnbmVkIGxvbmcgb3ZlciA9IHJpbmdfYnVmZmVyX292ZXJydW5zKGl0ZXItXHUwMDNlYXJyYXlfYnVmZmVyLVx1MDAzZWJ1ZmZlcik7XG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMtMTI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBLY29uZmlnYCBmb3IgUHJlY2lzZSBUcmFjZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlICpleGFjdCogY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBObyByb29tIGZvciBhbWJpZ3VpdHkgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGRldGFpbHMgSSBuZWVkIGFyZSBnb2luZyB0byBiZSBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBwbGFjZSBmb3IgYWxsIHRoaW5ncyB0cmFjZS1yZWxhdGVkLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZS4gSSYjMzk7bSB0aGlua2luZyB0aGUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCBhbnkgb3B0aW9uYWwgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbnRlcnR3aW5lZCwgYW5kIHRoZSB1bmRlcmx5aW5nIGJ1aWxkIGZsYWdzIC0gaXQmIzM5O3MgYWxsIGluIHRoYXQgZmlsZS4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhlc2UgY29uZmlnIGRldGFpbHMgc28gSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gVGhpcyBpcyBhbGwgYWJvdXQgcHJlY2lzaW9uIGFuZCBtYWtpbmcgc3VyZSBpdCBidWlsZHMgYXMgZXhwZWN0ZWQgYW5kIGZ1bmN0aW9ucyBhcyBkZXNpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUklOR19CVUZGRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MTQxPWNvbmZpZyBUUkFDRV9DTE9DS1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTE0My1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjE0NDpjb25maWcgUklOR19CVUZGRVJcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE0NS1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xNTQ9Y29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUlxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTE1Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjE1Nzpjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxua2VybmVsL3RyYWNlL0tjb25maWctMTU4LVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTk4Nz1jb25maWcgVFJBQ0VQT0lOVF9CRU5DSE1BUktcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDE2LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTAxNzpjb25maWcgUklOR19CVUZGRVJfQkVOQ0hNQVJLXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDE4LVx0dHJpc3RhdGUgXCYjMzQ7UmluZyBidWZmZXIgYmVuY2htYXJrIHN0cmVzcyB0ZXN0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMDg2PWNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTA5OC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwOTk6Y29uZmlnIFJJTkdfQlVGRkVSX1JFQ09SRF9SRUNVUlNJT05cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMDAtXHRib29sIFwmIzM0O1JlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIHRoZSByaW5nIGJ1ZmZlclwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTExNjA9Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNzMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTc0OmNvbmZpZyBSSU5HX0JVRkZFUl9TVEFSVFVQX1RFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNzUtICAgICAgIGJvb2wgXCYjMzQ7UmluZyBidWZmZXIgc3RhcnR1cCBzZWxmIHRlc3RcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTk2LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTE5Nzpjb25maWcgUklOR19CVUZGRVJfVkFMSURBVEVfVElNRV9ERUxUQVNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExOTgtXHRib29sIFwmIzM0O1ZlcmlmeSByaW5nIGJ1ZmZlciB0aW1lIHN0YW1wIGRlbHRhc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEyMTYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMjE3OmNvbmZpZyBSSU5HX0JVRkZFUl9QRVJTSVNURU5UX0lOSkVDVFxua2VybmVsL3RyYWNlL0tjb25maWctMTIxOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHBlcnNpc3RlbnQgcmluZyBidWZmZXIgZXJyb3IgaW5qZWN0aW9uIHRlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIGBSSU5HX0JVRkZFUmAgdmVyc3VzIGBUUkFDSU5HYC4gVGhlIHByb2JsZW0gbW9zdCBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBUcmFjZSBNZWNoYW5pc21zKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBmb2N1cyBhcm91bmQgbGluZSAxNDQgb2YgdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGNvbmRpdGlvbmFscywgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhlIGtlcm5lbCBidWlsZHMgd2l0aCB0aGUgcmluZyBidWZmZXIgdHJhY2UgbWVjaGFuaXNtLCBvciB3aXRoIGFuIGFsdGVybmF0aXZlIHRyYWNpbmcgbWVjaGFuaXNtLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiAqd2h5KiBvbmUgaXMgcHJlZmVycmVkIG92ZXIgdGhlIG90aGVyLCBvciBpZiB0aGV5IGNhbiBldmVuIGJlIHNlbGVjdGVkIGluZGVwZW5kZW50bHkuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgS2NvbmZpZyBtYWdpYyAtIHBlcmhhcHMgYSBgc2VsZWN0YCwgYGRlcGVuZHMgb25gLCBvciBldmVuIGFuIGBpZmAgc3RhdGVtZW50LiBJIG5lZWQgdG8gc2VlIHdoYXQgZmFjdG9ycyBhcmUgaW5mbHVlbmNpbmcgdGhhdCBjaG9pY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdGNvbmZpZyBCVUlMRFRJTUVfTUNPVU5UX1NPUlRcbiAxMzE6XHQgICAgICAgYm9vbFxuIDEzMjpcdCAgICAgICBkZWZhdWx0IHlcbiAxMzM6XHQgICAgICAgZGVwZW5kcyBvbiBIQVZFX0JVSUxEVElNRV9NQ09VTlRfU09SVCBcdTAwMjZcdTAwMjYgRFlOQU1JQ19GVFJBQ0VcbiAxMzQ6XHQgICAgICAgaGVscFxuIDEzNTpcdCAgICAgICAgIFNvcnQgdGhlIG1jb3VudF9sb2Mgc2VjdGlvbiBhdCBidWlsZCB0aW1lLlxuIDEzNjpcdFxuIDEzNzpcdGNvbmZpZyBUUkFDRVJfTUFYX1RSQUNFXG4gMTM4Olx0XHRib29sXG4gMTM5Olx0XHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UXG4gMTQwOlx0XG4gMTQxOlx0Y29uZmlnIFRSQUNFX0NMT0NLXG4gMTQyOlx0XHRib29sXG4gMTQzOlx0XG4gMTQ0Olx0Y29uZmlnIFJJTkdfQlVGRkVSXG4gMTQ1Olx0XHRib29sXG4gMTQ2Olx0XHRzZWxlY3QgVFJBQ0VfQ0xPQ0tcbiAxNDc6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDE0ODpcdFxuIDE0OTpcdGNvbmZpZyBFVkVOVF9UUkFDSU5HXG4gMTUwOlx0XHRzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXG4gMTUxOlx0XHRzZWxlY3QgR0xPQlxuIDE1MjpcdFx0Ym9vbFxuIDE1MzpcdFxuIDE1NDpcdGNvbmZpZyBDT05URVhUX1NXSVRDSF9UUkFDRVJcbiAxNTU6XHRcdGJvb2xcbiAxNTY6XHRcbiAxNTc6XHRjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxuIDE1ODpcdFx0Ym9vbFxuIDE1OTpcdFx0aGVscFxuIDE2MDpcdFx0IEFsbG93IHRoZSB1c2Ugb2YgcmluZ19idWZmZXJfc3dhcF9jcHUuXG4gMTYxOlx0XHQgQWRkcyBhIHZlcnkgc2xpZ2h0IG92ZXJoZWFkIHRvIHRyYWNpbmcgd2hlbiBlbmFibGVkLlxuIDE2MjpcdFxuIDE2MzpcdGNvbmZpZyBQUkVFTVBUSVJRX1RSQUNFUE9JTlRTXG4gMTY0Olx0XHRib29sXG4gMTY1Olx0XHRkZXBlbmRzIG9uIFRSQUNFX1BSRUVNUFRfVE9HR0xFIHx8IFRSQUNFX0lSUUZMQUdTXG4gMTY2Olx0XHRzZWxlY3QgVFJBQ0lOR1xuIDE2NzpcdFx0ZGVmYXVsdCB5XG4gMTY4Olx0XHRoZWxwXG4gMTY5Olx0XHQgIENyZWF0ZSBwcmVlbXB0L2lycSB0b2dnbGUgdHJhY2Vwb2ludHMgaWYgbmVlZGVkLCBzbyB0aGF0IG90aGVyIHBhcnRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGVuYWJsaW5nIHRyYWNpbmcgZmVhdHVyZXMgd2l0aGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgc3VzcGVjdHM6IGBDT05GSUdfVFJBQ0lOR2Agb3IgYENPTkZJR19GVFJBQ0VgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIGZsYWdzIHRoYXQgY29udHJvbCB0aGUgY29yZSB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBzcGVjaWZpYyBLY29uZmlnIHN5bWJvbHMsIGFuZCBzZWUgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZCBhbmQgaG93IHRoZXkmIzM5O3JlIHJlbGF0ZWQgdG8gb3RoZXIgb3B0aW9ucy4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFJJTkdfQlVGRkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTE3OT1jb25maWcgVFJBQ0lOR1xua2VybmVsL3RyYWNlL0tjb25maWctMTgwLVx0Ym9vbFxua2VybmVsL3RyYWNlL0tjb25maWc6MTgxOlx0c2VsZWN0IFJJTkdfQlVGRkVSXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xODItXHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz00MjE9Y29uZmlnIElSUVNPRkZfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNDI3LVx0c2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnOjQyODpcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00MjktXHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTQ0ND1jb25maWcgUFJFRU1QVF9UUkFDRVJcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00NDktXHRzZWxlY3QgVFJBQ0VSX01BWF9UUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWc6NDUwOlx0c2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ1MS1cdHNlbGVjdCBUUkFDRVJfU05BUFNIT1RfUEVSX0NQVV9TV0FQXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NjMxPWNvbmZpZyBUUkFDRVJfU05BUFNIT1RfUEVSX0NQVV9TV0FQXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNjMzLVx0ZGVwZW5kcyBvbiBUUkFDRVJfU05BUFNIT1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnOjYzNDpcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy02MzUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLZXJuZWwgVHJhY2luZyBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIHRoZSBtbWFwIGludGVyZmFjZSBmb3IgdGhlIHRyYWNlZnMvZGVidWdmcyB0cmFjaW5nIGJ1ZmZlci4gSXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBlaXRoZXIgYENPTkZJR19GVFJBQ0VgIG9yIGBDT05GSUdfVFJBQ0lOR2AuIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoaWNoIG9uZSYjMzk7cyB0aGUga2V5LiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gYnkgZ3JlcHBpbmcgZm9yIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIG9yIGB0cmFjaW5nX2J1ZmZlcnNfZm9wc2AuIFRoYXQgc2hvdWxkIHBpbnBvaW50IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHByZXR0eSBxdWlja2x5LiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFjaW5nX2J1ZmZlcnNfZm9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvdHJhY2UuYz03NDM3PXN0YXRpYyBpbnQgdHJhY2luZ19idWZmZXJzX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0NTktXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDYwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfYnVmZmVyc19mb3BzID0ge1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQ2MS1cdC5vcGVuXHRcdD0gdHJhY2luZ19idWZmZXJzX29wZW4sXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzYyNT10cmFjaW5nX2luaXRfdHJhY2Vmc19wZXJjcHUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgbG9uZyBjcHUpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzY0OS1cdHRyYWNlX2NyZWF0ZV9jcHVfZmlsZShcJiMzNDt0cmFjZV9waXBlX3Jhd1wmIzM0OywgVFJBQ0VfTU9ERV9SRUFELCBkX2NwdSxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc2NTA6XHRcdFx0XHR0ciwgY3B1LCBcdTAwMjZ0cmFjaW5nX2J1ZmZlcnNfZm9wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NjUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDgwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdHJhY2UgUmluZyBCdWZmZXIgUmVhZGVyIFBhZ2UgVnVsbmVyYWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgY2hhbmdlIGluIHRoZSBgZnRyYWNlYCByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGB0cmFjZV9waXBlX3Jhd2AgZmlsZSB3aXRoaW4gdGhlIGB0cmFjZWZzYC4gTXkgZm9jdXMgaXMgb24gdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24uCgpJbml0aWFsbHksIEkmIzM5O20gbm90aW5nIHRoYXQgYHRyYWNlX3BpcGVfcmF3YCBpcyBjcmVhdGVkIGR1cmluZyBgdHJhY2Vmc2AgaW5pdGlhbGl6YXRpb24uIFVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBpdCB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucywgb3BlbmluZyBpdCwgbWFwcGluZyBpdCB3aXRoIGBtbWFwYCAodmlhIGB0cmFjaW5nX2J1ZmZlcnNfbW1hcGAgd2hpY2ggbWFwcyB0byBgcmluZ19idWZmZXJfbWFwYCksIGFuZCB0aGVuIHVzaW5nIGFuIGBpb2N0bGAgY2FsbCAoYFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUmApIHRoYXQgZXZlbnR1YWxseSBjYWxscyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJdCYjMzk7cyB3aXRoaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCB0aGF0IHRoZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNoYW5naW5nIHRoZSBjb25kaXRpb24gZm9yIGEgYFdBUk5fT05gIGNhbGwuIEJlZm9yZSwgYFdBUk5fT04oIXJlYWRlcilgIHdvdWxkIGFsd2F5cyB0cmlnZ2VyIGlmIHRoZSBgcmVhZGVyYCBwb2ludGVyIHdhcyBOVUxMLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhpcyB0byBgV0FSTl9PTighcmVhZGVyICZhbXA7JmFtcDsgY3B1X2J1ZmZlci0mZ3Q7cmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci0mZ3Q7Y29tbWl0X3BhZ2UpYC4gVGhpcyBpcyBhIGNydWNpYWwgY2hhbmdlIGluIHRoZSBhc3NlcnRpb24gbG9naWMuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucy4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IGFuZCBzdWJzeXN0ZW0gcmVsZXZhbmNlLiBUaGlzIGlzIGluIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AsIHNvIGl0JiMzOTtzIGNvcmUgYGZ0cmFjZWAgcmluZyBidWZmZXIgZnVuY3Rpb25hbGl0eS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCBgaW9jdGxgIGNhbGxzIG9uIGB0cmFjZV9waXBlX3Jhd2AgaW4gYHRyYWNlZnNgLCB3aGljaCBpcyBhIGNvbW1vbiwgd2VsbC1leGVyY2lzZWQgYXJlYSwgb2Z0ZW4gZnV6emVkIHdpdGggc3l6a2FsbGVyIGV2ZW4gaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGlzIGxvb2tzIHByb21pc2luZy4KClJlZ2FyZGluZyB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoZSBjaGFuZ2UgaXM6CjEuICAqKkNvcmUgc3Vic3lzdGVtOioqIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AKMi4gICoqQXNzZXJ0aW9uL0xvZ2ljIE1vZGlmaWNhdGlvbjoqKiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyB0aGF0IHRyaWdnZXJzIGEgYFdBUk5fT05gLCB3aGljaCBpcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4gSXQgcmVkdWNlcyB0aGUgY2FzZXMgd2hlcmUgdGhlIGFzc2VydGlvbiBpcyB0cmlnZ2VyZWQuCjMuICAqKlJlYWNoYWJpbGl0eToqKiBVc2Vyc3BhY2UgY2FuIHRyaWdnZXIgdGhpcyB2aWEgYGlvY3RsYCBvbiBgdHJhY2VfcGlwZV9yYXdgLiBUaGlzIGlzIGNyaXRpY2FsLgoKQmFzZWQgb24gdGhlc2UsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLiBBbHNvLCBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCwgYHJpbmdfYnVmZmVyX21hcGAsIGFuZCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCBhcmUgcmVsZXZhbnQgZnVuY3Rpb25zLCBhcyB0aGV5JiMzOTtyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgY2FsbCBjaGFpbi4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBhbnkgYXJlIHViaXF1aXRvdXMgaG90cGF0aHMuIEZvcnR1bmF0ZWx5LCBub25lIG9mIHRoZXNlIGFyZSBoaWdobHkgdWJpcXVpdG91cyBob3RwYXRoczsgdGhleSBhcmUgcXVpdGUgc3BlY2lmaWMgdG8gdGhlIGB0cmFjZV9waXBlX3Jhd2AgbW1hcC9yZWFkZXIgYWNjZXNzLgoKSSB3aWxsIGFsc28gbmVlZCB0byByZXZpZXcgdGhlIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgIHRvIHNlZSBob3cgdHJhY2luZyBpcyBjb25maWd1cmVkLiBJbiBwYXJ0aWN1bGFyLCBob3cgdGhlIGB0cmFjZS5vYCBpcyBjb25zdHJ1Y3RlZC4gVGhpcyB3aWxsIHByb3ZpZGUgZnVydGhlciBjb250ZXh0IG9uIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgZW5hYmxlcyBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBhbmQgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9NjE9b2JqLSQoQ09ORklHX1RSQUNFX0NMT0NLKSAmIzQzOz0gdHJhY2VfY2xvY2sub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTYyLVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICYjNDM7PSBsaWJmdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgJiM0Mzs9IHJpbmdfYnVmZmVyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSAmIzQzOz0gcmluZ19idWZmZXJfYmVuY2htYXJrLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02Ni1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfVFJBQ0lORykgJiM0Mzs9IHRyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02OC1vYmotJChDT05GSUdfVFJBQ0lORykgJiM0Mzs9IHRyYWNlX291dHB1dC5vXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTg4PW9iai0kKENPTkZJR19TVEFDS19UUkFDRVIpICYjNDM7PSB0cmFjZV9zdGFjay5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6ODk6b2JqLSQoQ09ORklHX01NSU9UUkFDRSkgJiM0Mzs9IHRyYWNlX21taW90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTAtb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgJiM0Mzs9IHRyYWNlX2Z1bmN0aW9uc19ncmFwaC5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9OTE9b2JqLSQoQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcpICYjNDM7PSB0cmFjZV9icmFuY2gub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjkyOm9iai0kKENPTkZJR19CTEtfREVWX0lPX1RSQUNFKSAmIzQzOz0gYmxrdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTkzLW9iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpICYjNDM7PSBmZ3JhcGgub1xua2VybmVsL3RyYWNlL01ha2VmaWxlPTk0PWlmZXEgKCQoQ09ORklHX0JMT0NLKSx5KVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjk1Om9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSAmIzQzOz0gYmxrdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTk2LWVuZGlmXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICYjNDM7PSB0cmFjZV9ldmVudHNfdXNlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSAmIzQzOz0gYnBmX3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICYjNDM7PSB0cmFjZV9rcHJvYmUub1xuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xNjQ9YWx3YXlzLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgJiM0Mzs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vLmNoZWNrZWRcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjUtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTY2OmxpYmZ0cmFjZS15IDo9IGZ0cmFjZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpczoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0cmFjaW5nIGlzIHNldCB1cCBpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19UUkFDSU5HYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBsYXllciwgYXMgaXQgY29tcGlsZXMgYHRyYWNlLm9gLCBhbmQgSSBzZWUgaXQgcHVsbHMgaW4gYENPTkZJR19SSU5HX0JVRkZFUmAsIHdoaWNoIGluIHR1cm4gZ2VuZXJhdGVzIGByaW5nX2J1ZmZlci5vYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoaXMuIElzIGBDT05GSUdfRlRSQUNFYCBpbnZvbHZlZD8gT3IgYXJlIHRoZXJlIG90aGVyIGNvbmZpZ3MgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIGFueSB1c2VyLXNlbGVjdGFibGUgb3B0aW9ucyB0aGF0IGFyZSB0aWVkIHRvIGBDT05GSUdfVFJBQ0lOR2AuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcywgb2YgY291cnNlLCBga2VybmVsL3RyYWNlL0tjb25maWdgLiBJJiMzOTtsbCBkZWx2ZSBpbnRvIHRoYXQgZmlsZSBhbmQgZXhhbWluZSB0aGUgc2VjdGlvbiBhcm91bmQgYGNvbmZpZyBUUkFDSU5HYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSYjMzk7bSBhZnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTc1Olx0IyBvcHRpb25zIGRvIG5vdCBhcHBlYXIgd2hlbiBzb21ldGhpbmcgZWxzZSBzZWxlY3RzIGl0LiBXZSBuZWVkIHRoZSB0d28gb3B0aW9uc1xuIDE3NjpcdCMgR0VORVJJQ19UUkFDRVIgYW5kIFRSQUNJTkcgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHRvIGFjY29tcGxpc2ggdGhlXG4gMTc3Olx0IyBoaWRpbmcgb2YgdGhlIGF1dG9tYXRpYyBvcHRpb25zLlxuIDE3ODpcdFxuIDE3OTpcdGNvbmZpZyBUUkFDSU5HXG4gMTgwOlx0XHRib29sXG4gMTgxOlx0XHRzZWxlY3QgUklOR19CVUZGRVJcbiAxODI6XHRcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxuIDE4MzpcdFx0c2VsZWN0IFRSQUNFUE9JTlRTXG4gMTg0Olx0XHRzZWxlY3QgTk9QX1RSQUNFUlxuIDE4NTpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAxODY6XHRcdHNlbGVjdCBFVkVOVF9UUkFDSU5HXG4gMTg3Olx0XHRzZWxlY3QgVFJBQ0VfQ0xPQ0tcbiAxODg6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuIDE4OTpcdFxuIDE5MDpcdGNvbmZpZyBHRU5FUklDX1RSQUNFUlxuIDE5MTpcdFx0Ym9vbFxuIDE5MjpcdFx0c2VsZWN0IFRSQUNJTkdcbiAxOTM6XHRcbiAxOTQ6XHQjXG4gMTk1Olx0IyBNaW5pbXVtIHJlcXVpcmVtZW50cyBhbiBhcmNoaXRlY3R1cmUgaGFzIHRvIG1lZXQgZm9yIHVzIHRvXG4gMTk2Olx0IyBiZSBhYmxlIHRvIG9mZmVyIGdlbmVyaWMgdHJhY2luZyBmYWNpbGl0aWVzOlxuIDE5NzpcdCNcbiAxOTg6XHRjb25maWcgVFJBQ0lOR19TVVBQT1JUXG4gMTk5Olx0XHRib29sXG4gMjAwOlx0XHRkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcbiAyMDE6XHRcdGRlcGVuZHMgb24gU1RBQ0tUUkFDRV9TVVBQT1JUXG4gMjAyOlx0XHRkZWZhdWx0IHlcbiAyMDM6XHRcbiAyMDQ6XHRtZW51Y29uZmlnIEZUUkFDRVxuIDIwNTpcdFx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4gMjA2Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxuIDIwNzpcdFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxuIDIwODpcdFx0aGVscFxuIDIwOTpcdFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuIDIxMDpcdFxuIDIxMTpcdGlmIEZUUkFDRVxuIDIxMjpcdFxuIDIxMzpcdGNvbmZpZyBUUkFDRUZTX0FVVE9NT1VOVF9ERVBSRUNBVEVEXG4gMjE0Olx0XHRib29sIFwmIzM0O0F1dG9tb3VudCB0cmFjZWZzIG9uIGRlYnVnZnMgW0RFUFJFQ0FURURdXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTAyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBGVFJBQ0VgIHdoaWNoIEkga25vdyBpcyB0aGUgY29yZSBtZW51Y29uZmlnIGVudHJ5IHBvaW50LiBJZiB0aGF0JiMzOTtzIGVuYWJsZWQsIHRoZW4gd2UgaGF2ZSB0aGUgd2hvbGUgaG9zdCBvZiB0cmFjZXIgb3B0aW9ucywgdGhlIHZhcmlvdXMgYml0cyB1bmRlcm5lYXRoIGBGVFJBQ0VgLCBpbmNsdWRpbmcgdGhvc2UgY3JpdGljYWwgYFRSQUNJTkdgIGFuZCBgUklOR19CVUZGRVJgIGNvbXBvbmVudHMuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGVuYWJsZSBgdHJhY2Vmc2AsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB0cmFjZSBkYXRhLiBUaW1lIHRvIHVzZSBteSB1c3VhbCBhcHByb2FjaCwgSSYjMzk7bGwgZ28gc3RyYWlnaHQgZm9yIGBDT05GSUdfVFJBQ0VGU2AsIG9yIGEgZ29vZCBvbGQgc2VhcmNoIGZvciBgZnMvdHJhY2Vmc2AsIGFuZCBzZWUgd2hhdCB0aGF0IGdldHMgbWUgaW4gdGVybXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VFJBQ0VGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYz0zMjk9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXZlbnRmc19nZXRfaW5vZGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZXZlbnRmc19hdHRyICphdHRyLFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDItXHR0aS1cdTAwM2Vwcml2YXRlID0gZWk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzQzOlx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19FVkVOVF9JTk9ERTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDQtXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTUyOT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXZlbnRmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNTM4LVx0dGkgPSBnZXRfdHJhY2VmcyhkaXIpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjUzOTpcdGlmIChXQVJOX09OX09OQ0UoISh0aS1cdTAwM2VmbGFncyBcdTAwMjYgVFJBQ0VGU19FVkVOVF9JTk9ERSkpKVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU0MC1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTU3OT1zdGF0aWMgaW50IGV2ZW50ZnNfaXRlcmF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5NS1cdHRpID0gZ2V0X3RyYWNlZnMoZl9pbm9kZSk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTk2Olx0aWYgKCEodGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfRVZFTlRfSU5PREUpKVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTc1OT1zdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZXZlbnRmc19jcmVhdGVfZXZlbnRzX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc3MC1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3NzE6XHRpZiAoc2VjdXJpdHlfbG9ja2VkX2Rvd24oTE9DS0RPV05fVFJBQ0VGUykpXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzcyLVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODA1LVx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6ODA2Olx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19FVkVOVF9JTk9ERTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MDctXHR0aS1cdTAwM2Vwcml2YXRlID0gZWk7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI1LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI2OiNkZWZpbmUgVFJBQ0VGU19ERUZBVUxUX01PREVcdDA3MDBcbmZzL3RyYWNlZnMvaW5vZGUuYy0yNy1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnRyYWNlZnNfaW5vZGVfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmM9OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKnRyYWNlZnNfc3lzY2FsbF9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTEwLVx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XG5mcy90cmFjZWZzL2lub2RlLmM6MTExOlx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19JTlNUQU5DRV9JTk9ERTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMTItXHR0aS1cdTAwM2Vwcml2YXRlID0gaW5vZGU7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTE1Mz1zdGF0aWMgdm9pZCBzZXRfdHJhY2Vmc19pbm9kZV9vd25lcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzMtXG5mcy90cmFjZWZzL2lub2RlLmM6MTc0Olx0XHRpZiAoIShydGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfVUlEX1BFUk1fU0VUKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzUtXHRcdFx0dWlkID0gcm9vdF9pbm9kZS1cdTAwM2VpX3VpZDtcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzYtXG5mcy90cmFjZWZzL2lub2RlLmM6MTc3Olx0XHRpZiAoIShydGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfR0lEX1BFUk1fU0VUKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzgtXHRcdFx0Z2lkID0gcm9vdF9pbm9kZS1cdTAwM2VpX2dpZDtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTg0LVx0ICovXG5mcy90cmFjZWZzL2lub2RlLmM6MTg1Olx0aWYgKCEodGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfVUlEX1BFUk1fU0VUKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xODYtXHRcdGlub2RlLVx1MDAzZWlfdWlkID0gdWlkO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTE4Ny1cbmZzL3RyYWNlZnMvaW5vZGUuYzoxODg6XHRpZiAoISh0aS1cdTAwM2VmbGFncyBcdTAwMjYgVFJBQ0VGU19HSURfUEVSTV9TRVQpKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE4OS1cdFx0aW5vZGUtXHUwMDNlaV9naWQgPSBnaWQ7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTIxMD1zdGF0aWMgaW50IHRyYWNlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0yMTctXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfVUlEKVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIxODpcdFx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19VSURfUEVSTV9TRVQ7XG5mcy90cmFjZWZzL2lub2RlLmMtMjE5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIyMC1cdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpXG5mcy90cmFjZWZzL2lub2RlLmM6MjIxOlx0XHR0aS1cdTAwM2VmbGFncyB8PSBUUkFDRUZTX0dJRF9QRVJNX1NFVDtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMjItXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTMxMD1zdGF0aWMgaW50IHRyYWNlZnNfYXBwbHlfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIHJlbW91bnQpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0NC1cdFx0XHRpZiAodXBkYXRlX3VpZCkge1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjM0NTpcdFx0XHRcdHRpLVx1MDAzZWZsYWdzIFx1MDAyNj0gflRSQUNFRlNfVUlEX1BFUk1fU0VUO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0Ni1cdFx0XHRcdHRpLVx1MDAzZXZmc19pbm9kZS5pX3VpZCA9IGZzaS1cdTAwM2V1aWQ7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0OS1cdFx0XHRpZiAodXBkYXRlX2dpZCkge1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjM1MDpcdFx0XHRcdHRpLVx1MDAzZWZsYWdzIFx1MDAyNj0gflRSQUNFRlNfR0lEX1BFUk1fU0VUO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTM1MS1cdFx0XHRcdHRpLVx1MDAzZXZmc19pbm9kZS5pX2dpZCA9IGZzaS1cdTAwM2VnaWQ7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM1OC1cdFx0XHQgKi9cbmZzL3RyYWNlZnMvaW5vZGUuYzozNTk6XHRcdFx0aWYgKHRpLVx1MDAzZWZsYWdzIFx1MDAyNiBUUkFDRUZTX0VWRU5UX0lOT0RFKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM2MC1cdFx0XHRcdGV2ZW50ZnNfcmVtb3VudCh0aSwgdXBkYXRlX3VpZCwgdXBkYXRlX2dpZCk7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTM4NT1zdGF0aWMgaW50IHRyYWNlZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMzk0LVx0XHRcdCAgIGZyb21fa2dpZF9tdW5nZWQoXHUwMDI2aW5pdF91c2VyX25zLCBmc2ktXHUwMDNlZ2lkKSk7XG5mcy90cmFjZWZzL2lub2RlLmM6Mzk1Olx0aWYgKGZzaS1cdTAwM2Vtb2RlICE9IFRSQUNFRlNfREVGQVVMVF9NT0RFKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM5Ni1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssbW9kZT0lb1wmIzM0OywgZnNpLVx1MDAzZW1vZGUpO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYz00MDE9c3RhdGljIGludCB0cmFjZWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNDExLVx0ICovXG5mcy90cmFjZWZzL2lub2RlLmM6NDEyOlx0dGktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+VFJBQ0VGU19FVkVOVF9JTk9ERTtcbmZzL3RyYWNlZnMvaW5vZGUuYy00MTMtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTQ2ND1zdGF0aWMgaW50IHRyYWNlZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ2OC1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0Njk6XHRlcnIgPSBzaW1wbGVfZmlsbF9zdXBlcihzYiwgVFJBQ0VGU19NQUdJQywgdHJhY2VfZmlsZXMpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ3MC1cdGlmIChlcnIpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTUwMj1zdGF0aWMgaW50IHRyYWNlZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNTA5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxMDpcdGZzaS1cdTAwM2Vtb2RlID0gVFJBQ0VGU19ERUZBVUxUX01PREU7XG5mcy90cmFjZWZzL2lub2RlLmMtNTExLVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYz01Njc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaW5zdGFuY2VfaW5vZGUoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01NzctXHRcdHRpID0gZ2V0X3RyYWNlZnMoZF9pbm9kZShwYXJlbnQpKTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo1Nzg6XHRcdGlmICh0aS1cdTAwM2VmbGFncyBcdTAwMjYgVFJBQ0VGU19JTlNUQU5DRV9JTk9ERSlcbmZzL3RyYWNlZnMvaW5vZGUuYy01NzktXHRcdFx0YnJlYWs7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTYxMj1zdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNjE5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYyMDpcdGlmIChzZWN1cml0eV9sb2NrZWRfZG93bihMT0NLRE9XTl9UUkFDRUZTKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy02MjEtXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYz02OTk9c3RydWN0IGRlbnRyeSAqdHJhY2Vmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudClcbmZzL3RyYWNlZnMvaW5vZGUuYy03MDAte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjcwMTpcdGlmIChzZWN1cml0eV9sb2NrZWRfZG93bihMT0NLRE9XTl9UUkFDRUZTKSlcbmZzL3RyYWNlZnMvaW5vZGUuYy03MDItXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL3RyYWNlZnMvaW50ZXJuYWwuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5mcy90cmFjZWZzL2ludGVybmFsLmg6MjojaWZuZGVmIF9UUkFDRUZTX0lOVEVSTkFMX0hcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDozOiNkZWZpbmUgX1RSQUNFRlNfSU5URVJOQUxfSFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oLTQtXG5mcy90cmFjZWZzL2ludGVybmFsLmg9NT1lbnVtIHtcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDo2Olx0VFJBQ0VGU19FVkVOVF9JTk9ERVx0XHQ9IEJJVCgxKSxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDo3Olx0VFJBQ0VGU19HSURfUEVSTV9TRVRcdFx0PSBCSVQoMiksXG5mcy90cmFjZWZzL2ludGVybmFsLmg6ODpcdFRSQUNFRlNfVUlEX1BFUk1fU0VUXHRcdD0gQklUKDMpLFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oOjk6XHRUUkFDRUZTX0lOU1RBTkNFX0lOT0RFXHRcdD0gQklUKDQpLFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oLTEwLX07XG4tLVxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oPTgwPXZvaWQgZXZlbnRmc19yZW1vdW50X3VubG9jayhpbnQgc3JjdV9pZHgpO1xuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oLTgxLVxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oOjgyOiNlbmRpZiAvKiBfVFJBQ0VGU19JTlRFUk5BTF9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzA4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBUcmFjZWZzIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIHByb2NlZHVyZSBmb3IgYHRyYWNlZnNgLiBMZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgZnMvdHJhY2Vmcy9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGJ1aWxkaW5nIHRoZSB0cmFjZWZzIGZpbGVzeXN0ZW0gaXRzZWxmLiBJdCBzaG91bGQgZGV0YWlsIGhvdyB0aGUga2VybmVsIG1vZHVsZXMgc3BlY2lmaWMgdG8gYHRyYWNlZnNgIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5zdGFsbGVkLCBhbmQgYW55IG5lY2Vzc2FyeSBwcmUtcHJvY2Vzc2luZyBzdGVwcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3RhbmRhcmQgbWFrZWZpbGUgdGFyZ2V0cyBsaWtlIGBhbGxgLCBgbW9kdWxlc2AsIGBpbnN0YWxsYCwgYW5kIGFueXRoaW5nIHNwZWNpZmljIHRvIGB0cmFjZWZzYC4gSSYjMzk7bGwgYmUgcGFyc2luZyB0aGUgZGVwZW5kZW5jaWVzIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGhlYWRlcnMgaW52b2x2ZWQgaW4gdHJhY2VmcyBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBvZiB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYWNlZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQ3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9NYWtlZmlsZT0xMTc9b2JqLSQoQ09ORklHX0RFQlVHX0ZTKVx0XHQmIzQzOz0gZGVidWdmcy9cbmZzL01ha2VmaWxlOjExODpvYmotJChDT05GSUdfVFJBQ0lORylcdFx0JiM0Mzs9IHRyYWNlZnMvXG5mcy9NYWtlZmlsZS0xMTktb2JqLSQoQ09ORklHX09DRlMyX0ZTKVx0XHQmIzQzOz0gb2NmczIvXG4tLVxuZnMvdHJhY2Vmcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvdHJhY2Vmcy9NYWtlZmlsZToyOnRyYWNlZnMtb2Jqc1x0Oj0gaW5vZGUub1xuZnMvdHJhY2Vmcy9NYWtlZmlsZTozOnRyYWNlZnMtb2Jqc1x0JiM0Mzs9IGV2ZW50X2lub2RlLm9cbmZzL3RyYWNlZnMvTWFrZWZpbGUtNC1cbmZzL3RyYWNlZnMvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVFJBQ0lORylcdCYjNDM7PSB0cmFjZWZzLm9cbmZzL3RyYWNlZnMvTWFrZWZpbGUtNi1cbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMi0vKlxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjM6ICogIGV2ZW50X2lub2RlLmMgLSBwYXJ0IG9mIHRyYWNlZnMsIGEgcHNldWRvIGZpbGUgc3lzdGVtIGZvciBhY3RpdmF0aW5nIHRyYWNpbmdcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy00LSAqXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTIxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzoyMjojaW5jbHVkZSBcdTAwM2NsaW51eC90cmFjZWZzLmhcdTAwM2VcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2Vcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9MjUyPXN0YXRpYyB2b2lkIGV2ZW50ZnNfc2V0X2F0dHJzKHN0cnVjdCBldmVudGZzX2lub2RlICplaSwgYm9vbCB1cGRhdGVfdWlkLCBrdWlkX3QgdWlkLFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yOTMtLypcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzoyOTQ6ICogT24gYSByZW1vdW50IG9mIHRyYWNlZnMsIGlmIFVJRCBvciBHSUQgb3B0aW9ucyBhcmUgc2V0LCB0aGVuXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMjk1LSAqIHRoZSBtb3VudCBwb2ludCBpbm9kZSBwZXJtaXNzaW9ucyBzaG91bGQgYmUgdXNlZC5cbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMjk3LSAqL1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjI5ODp2b2lkIGV2ZW50ZnNfcmVtb3VudChzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGksIGJvb2wgdXBkYXRlX3VpZCwgYm9vbCB1cGRhdGVfZ2lkKVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTI5OS17XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTMyOT1zdGF0aWMgc3RydWN0IGlub2RlICpldmVudGZzX2dldF9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBldmVudGZzX2F0dHIgKmF0dHIsXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTMzMy1cdHN0cnVjdCBldmVudGZzX2lub2RlICpwZWk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzM0Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTMzNS1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzM2LVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjMzNzpcdGlub2RlID0gdHJhY2Vmc19nZXRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTMzOC1cdGlmICghaW5vZGUpXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTM0MC1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzozNDE6XHR0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDItXHR0aS1cdTAwM2Vwcml2YXRlID0gZWk7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTM1OS0vKipcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzozNjA6ICogbG9va3VwX2ZpbGUgLSBsb29rIHVwIGEgZmlsZSBpbiB0aGUgdHJhY2VmcyBmaWxlc3lzdGVtXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzYxLSAqIEBwYXJlbnRfZWk6IFBvaW50ZXIgdG8gdGhlIGV2ZW50ZnNfaW5vZGUgdGhhdCByZXByZXNlbnRzIHBhcmVudCBvZiB0aGUgZmlsZVxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYz0zNzI9c3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9maWxlKHN0cnVjdCBldmVudGZzX2lub2RlICpwYXJlbnRfZWksXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTQwNS0vKipcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo0MDY6ICogbG9va3VwX2Rpcl9lbnRyeSAtIGxvb2sgdXAgYSBkaXIgaW4gdGhlIHRyYWNlZnMgZmlsZXN5c3RlbVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTQwNy0gKiBAZGVudHJ5OiB0aGUgZGlyZWN0b3J5IHRvIGxvb2sgdXBcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTI5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpldmVudGZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01MzMtXHRzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWlfY2hpbGQ7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTM0Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTUzNS1cdHN0cnVjdCBldmVudGZzX2lub2RlICplaTtcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNTM3LVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjUzODpcdHRpID0gZ2V0X3RyYWNlZnMoZGlyKTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01MzktXHRpZiAoV0FSTl9PTl9PTkNFKCEodGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfRVZFTlRfSU5PREUpKSlcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTc5PXN0YXRpYyBpbnQgZXZlbnRmc19pdGVyYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNTg0LVx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpX2NoaWxkO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjU4NTpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01ODYtXHRzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWk7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5NC1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo1OTU6XHR0aSA9IGdldF90cmFjZWZzKGZfaW5vZGUpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5Ni1cdGlmICghKHRpLVx1MDAzZWZsYWdzIFx1MDAyNiBUUkFDRUZTX0VWRU5UX0lOT0RFKSlcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzE1LSAqICAgICBzeXN0ZW0uIFRoZSBjYWxsYmFjayBtdXN0IG5vdCBjYWxsIGFueSBjb2RlIHRoYXQgbWlnaHQgYWxzbyBjYWxsIGludG9cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3MTY6ICogICAgIHRoZSB0cmFjZWZzIG9yIGV2ZW50ZnMgc3lzdGVtIG9yIGl0IHdpbGwgcmlzayBjcmVhdGluZyBhIGRlYWRsb2NrLlxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTcxNy0gKi9cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYz03MTg9c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmV2ZW50ZnNfY3JlYXRlX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqcGFyZW50LFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NDktICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IHRvIGNyZWF0ZS5cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3NTA6ICogQHBhcmVudDogUGFyZW50IGRlbnRyeSBmb3IgdGhpcyBmaWxlIGluIHRoZSB0cmFjZWZzIGRpcmVjdG9yeS5cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NTEtICogQGVudHJpZXM6IEEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgcmVwcmVzZW50IHRoZSBmaWxlcyB1bmRlciB0aGlzIGRpcmVjdG9yeVxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYz03NTk9c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmV2ZW50ZnNfY3JlYXRlX2V2ZW50c19kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NjUtXHRzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NzY2Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc2Ny1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc3My1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3NzQ6XHRkZW50cnkgPSB0cmFjZWZzX3N0YXJ0X2NyZWF0aW5nKG5hbWUsIHBhcmVudCk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzc1LVx0aWYgKElTX0VSUihkZW50cnkpKVxuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03ODEtXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NzgyOlx0aW5vZGUgPSB0cmFjZWZzX2dldF9pbm9kZShkZW50cnktXHUwMDNlZF9zYik7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzgzLVx0aWYgKHVubGlrZWx5KCFpbm9kZSkpXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc4NS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3ODY6XHQvLyBOb3RlOiB3ZSBoYXZlIGEgcmVmIHRvIHRoZSBkZW50cnkgZnJvbSB0cmFjZWZzX3N0YXJ0X2NyZWF0aW5nKClcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03ODctXHRyZWkgPSBnZXRfcm9vdF9pbm9kZShlaSk7XG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTgwNC1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo4MDU6XHR0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MDYtXHR0aS1cdTAwM2VmbGFncyB8PSBUUkFDRUZTX0VWRU5UX0lOT0RFO1xuLS1cbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MjktXHRmc25vdGlmeV9ta2RpcihkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo4MzA6XHR0cmFjZWZzX2VuZF9jcmVhdGluZyhkZW50cnkpO1xuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTgzMS1cbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODM1LVx0Y2xlYW51cF9laShlaSk7XG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6ODM2Olx0dHJhY2Vmc19mYWlsZWRfY3JlYXRpbmcoZGVudHJ5KTtcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MzctXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbi0tXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9ODkxPXZvaWQgZXZlbnRmc19yZW1vdmVfZXZlbnRzX2RpcihzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWkpXG4tLVxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTkwNC1cdC8qXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6OTA1Olx0ICogTWF0Y2hlcyB0aGUgZGdldCgpIGRvbmUgYnkgdHJhY2Vmc19zdGFydF9jcmVhdGluZygpXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtOTA2LVx0ICogaW4gZXZlbnRmc19jcmVhdGVfZXZlbnRzX2RpcigpIHdoZW4gaXQgdGhlIGRlbnRyeSB3YXNcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMi0vKlxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM6ICogIGlub2RlLmMgLSBwYXJ0IG9mIHRyYWNlZnMsIGEgcHNldWRvIGZpbGUgc3lzdGVtIGZvciBhY3RpdmF0aW5nIHRyYWNpbmdcbmZzL3RyYWNlZnMvaW5vZGUuYy00LSAqXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTgtICpcbmZzL3RyYWNlZnMvaW5vZGUuYzo5OiAqIHRyYWNlZnMgaXMgdGhlIGZpbGUgc3lzdGVtIHRoYXQgaXMgdXNlZCBieSB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cbmZzL3RyYWNlZnMvaW5vZGUuYy0xMC0gKi9cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTctI2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3RyYWNlZnMuaFx1MDAzZVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zzbm90aWZ5LmhcdTAwM2Vcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjYtI2RlZmluZSBUUkFDRUZTX0RFRkFVTFRfTU9ERVx0MDcwMFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI3OnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdHJhY2Vmc19pbm9kZV9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI5OnN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnRyYWNlZnNfbW91bnQ7XG5mcy90cmFjZWZzL2lub2RlLmM6MzA6c3RhdGljIGludCB0cmFjZWZzX21vdW50X2NvdW50O1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjMxOnN0YXRpYyBib29sIHRyYWNlZnNfcmVnaXN0ZXJlZDtcbmZzL3RyYWNlZnMvaW5vZGUuYy0zMi1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zMy0vKlxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM0OiAqIEtlZXAgdHJhY2sgb2YgYWxsIHRyYWNlZnNfaW5vZGVzIGluIG9yZGVyIHRvIHVwZGF0ZSB0aGVpclxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM1LSAqIGZsYWdzIGlmIG5lY2Vzc2FyeSBvbiBhIHJlbW91bnQuXG5mcy90cmFjZWZzL2lub2RlLmMtMzYtICovXG5mcy90cmFjZWZzL2lub2RlLmM6Mzc6c3RhdGljIERFRklORV9TUElOTE9DSyh0cmFjZWZzX2lub2RlX2xvY2spO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjM4OnN0YXRpYyBMSVNUX0hFQUQodHJhY2Vmc19pbm9kZXMpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTM5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQwOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKnRyYWNlZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3RyYWNlZnMvaW5vZGUuYy00MS17XG5mcy90cmFjZWZzL2lub2RlLmM6NDI6XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGk7XG5mcy90cmFjZWZzL2lub2RlLmMtNDMtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ0LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1Olx0dGkgPSBhbGxvY19pbm9kZV9zYihzYiwgdHJhY2Vmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ2LVx0aWYgKCF0aSlcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNDgtXG5mcy90cmFjZWZzL2lub2RlLmM6NDk6XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0cmFjZWZzX2lub2RlX2xvY2ssIGZsYWdzKTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MDpcdGxpc3RfYWRkX3JjdShcdTAwMjZ0aS1cdTAwM2VsaXN0LCBcdTAwMjZ0cmFjZWZzX2lub2Rlcyk7XG5mcy90cmFjZWZzL2lub2RlLmM6NTE6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRyYWNlZnNfaW5vZGVfbG9jaywgZmxhZ3MpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTUyLVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01NS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1NjpzdGF0aWMgdm9pZCB0cmFjZWZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL3RyYWNlZnMvaW5vZGUuYy01Ny17XG5mcy90cmFjZWZzL2lub2RlLmM6NTg6XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XG5mcy90cmFjZWZzL2lub2RlLmMtNTktXG5mcy90cmFjZWZzL2lub2RlLmM6NjA6XHRrbWVtX2NhY2hlX2ZyZWUodHJhY2Vmc19pbm9kZV9jYWNoZXAsIHRpKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy02MS19XG5mcy90cmFjZWZzL2lub2RlLmMtNjItXG5mcy90cmFjZWZzL2lub2RlLmM6NjM6c3RhdGljIHZvaWQgdHJhY2Vmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy90cmFjZWZzL2lub2RlLmMtNjQte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjY1Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTY2LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbmZzL3RyYWNlZnMvaW5vZGUuYy02Ny1cbmZzL3RyYWNlZnMvaW5vZGUuYzo2ODpcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRyYWNlZnNfaW5vZGVfbG9jaywgZmxhZ3MpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTY5LVx0bGlzdF9kZWxfcmN1KFx1MDAyNnRpLVx1MDAzZWxpc3QpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjcwOlx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0cmFjZWZzX2lub2RlX2xvY2ssIGZsYWdzKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy03MS19XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTc5PXN0YXRpYyBzc2l6ZV90IGRlZmF1bHRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtODQtXG5mcy90cmFjZWZzL2lub2RlLmM6ODU6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2Vmc19maWxlX29wZXJhdGlvbnMgPSB7XG5mcy90cmFjZWZzL2lub2RlLmMtODYtXHQucmVhZCA9XHRcdGRlZmF1bHRfcmVhZF9maWxlLFxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy05MS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo5MjpzdGF0aWMgc3RydWN0IHRyYWNlZnNfZGlyX29wcyB7XG5mcy90cmFjZWZzL2lub2RlLmMtOTMtXHRpbnQgKCpta2RpcikoY29uc3QgY2hhciAqbmFtZSk7XG5mcy90cmFjZWZzL2lub2RlLmMtOTQtXHRpbnQgKCpybWRpcikoY29uc3QgY2hhciAqbmFtZSk7XG5mcy90cmFjZWZzL2lub2RlLmM6OTU6fSB0cmFjZWZzX29wcyBfX3JvX2FmdGVyX2luaXQ7XG5mcy90cmFjZWZzL2lub2RlLmMtOTYtXG5mcy90cmFjZWZzL2lub2RlLmM6OTc6c3RhdGljIHN0cnVjdCBkZW50cnkgKnRyYWNlZnNfc3lzY2FsbF9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL3RyYWNlZnMvaW5vZGUuYy05OC1cdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTAwLXtcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMDE6XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGk7XG5mcy90cmFjZWZzL2lub2RlLmMtMTAyLVx0c3RydWN0IG5hbWVfc25hcHNob3QgbmFtZTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTA5LVx0ICovXG5mcy90cmFjZWZzL2lub2RlLmM6MTEwOlx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XG5mcy90cmFjZWZzL2lub2RlLmMtMTExLVx0dGktXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19JTlNUQU5DRV9JTk9ERTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTE1LVx0ICogVGhlIG1rZGlyIGNhbGwgY2FuIGNhbGwgdGhlIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgY3JlYXRlXG5mcy90cmFjZWZzL2lub2RlLmM6MTE2Olx0ICogdGhlIGZpbGVzIHdpdGhpbiB0aGUgdHJhY2VmcyBzeXN0ZW0uIEl0IGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsXG5mcy90cmFjZWZzL2lub2RlLmMtMTE3LVx0ICogbWtkaXIgcm91dGluZSB0byBoYW5kbGUgcmFjZXMuXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTEyMC1cdGlub2RlX3VubG9jayhpbm9kZSk7XG5mcy90cmFjZWZzL2lub2RlLmM6MTIxOlx0cmV0ID0gdHJhY2Vmc19vcHMubWtkaXIobmFtZS5uYW1lLm5hbWUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTEyMi1cdGlub2RlX2xvY2soaW5vZGUpO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0xMjctXG5mcy90cmFjZWZzL2lub2RlLmM6MTI4OnN0YXRpYyBpbnQgdHJhY2Vmc19zeXNjYWxsX3JtZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMjkte1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0xMzQtXHQgKiBUaGUgcm1kaXIgY2FsbCBjYW4gY2FsbCB0aGUgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBjcmVhdGVcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMzU6XHQgKiB0aGUgZmlsZXMgd2l0aGluIHRoZSB0cmFjZWZzIHN5c3RlbS4gSXQgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMzYtXHQgKiBybWRpciByb3V0aW5lIHRvIGhhbmRsZSByYWNlcy5cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTQzLVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE0NDpcdHJldCA9IHRyYWNlZnNfb3BzLnJtZGlyKG5hbWUubmFtZS5uYW1lKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNDUtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE1Mi1cbmZzL3RyYWNlZnMvaW5vZGUuYzoxNTM6c3RhdGljIHZvaWQgc2V0X3RyYWNlZnNfaW5vZGVfb3duZXIoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNTQte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjE1NTpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNTYtXHRzdHJ1Y3QgaW5vZGUgKnJvb3RfaW5vZGUgPSB0aS1cdTAwM2Vwcml2YXRlO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0xNjgtXHRpZiAocm9vdF9pbm9kZSAhPSBkX2lub2RlKHJvb3RfaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX3Jvb3QpKSB7XG5mcy90cmFjZWZzL2lub2RlLmM6MTY5Olx0XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqcnRpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3MC1cbmZzL3RyYWNlZnMvaW5vZGUuYzoxNzE6XHRcdHJ0aSA9IGdldF90cmFjZWZzKHJvb3RfaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3Mi1cdFx0cm9vdF9pbm9kZSA9IGRfaW5vZGUocm9vdF9pbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfcm9vdCk7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5MS1cbmZzL3RyYWNlZnMvaW5vZGUuYzoxOTI6c3RhdGljIGludCB0cmFjZWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy90cmFjZWZzL2lub2RlLmMtMTkzLVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5NC17XG5mcy90cmFjZWZzL2lub2RlLmM6MTk1Olx0c2V0X3RyYWNlZnNfaW5vZGVfb3duZXIoaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5Ni1cdHJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMTk4LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE5OTpzdGF0aWMgaW50IHRyYWNlZnNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDAtXHRcdFx0ICAgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCxcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjA0LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIwNTpcdHNldF90cmFjZWZzX2lub2RlX293bmVyKGlub2RlKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDYtXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjA5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIxMDpzdGF0aWMgaW50IHRyYWNlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxMS1cdFx0XHQgICBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxNC1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG5mcy90cmFjZWZzL2lub2RlLmM6MjE1Olx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxNi1cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjI1LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIyNjpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdHJhY2Vmc19pbnN0YW5jZV9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMjctXHQubG9va3VwXHRcdD0gc2ltcGxlX2xvb2t1cCxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMjg6XHQubWtkaXJcdFx0PSB0cmFjZWZzX3N5c2NhbGxfbWtkaXIsXG5mcy90cmFjZWZzL2lub2RlLmM6MjI5Olx0LnJtZGlyXHRcdD0gdHJhY2Vmc19zeXNjYWxsX3JtZGlyLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIzMDpcdC5wZXJtaXNzaW9uXHQ9IHRyYWNlZnNfcGVybWlzc2lvbixcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzE6XHQuZ2V0YXR0clx0PSB0cmFjZWZzX2dldGF0dHIsXG5mcy90cmFjZWZzL2lub2RlLmM6MjMyOlx0LnNldGF0dHJcdD0gdHJhY2Vmc19zZXRhdHRyLFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIzMy19O1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTIzNC1cbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzU6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHRyYWNlZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy90cmFjZWZzL2lub2RlLmMtMjM2LVx0Lmxvb2t1cFx0XHQ9IHNpbXBsZV9sb29rdXAsXG5mcy90cmFjZWZzL2lub2RlLmM6MjM3Olx0LnBlcm1pc3Npb25cdD0gdHJhY2Vmc19wZXJtaXNzaW9uLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIzODpcdC5nZXRhdHRyXHQ9IHRyYWNlZnNfZ2V0YXR0cixcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzk6XHQuc2V0YXR0clx0PSB0cmFjZWZzX3NldGF0dHIsXG5mcy90cmFjZWZzL2lub2RlLmMtMjQwLX07XG5mcy90cmFjZWZzL2lub2RlLmMtMjQxLVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI0MjpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdHJhY2Vmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy90cmFjZWZzL2lub2RlLmM6MjQzOlx0LnBlcm1pc3Npb25cdD0gdHJhY2Vmc19wZXJtaXNzaW9uLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI0NDpcdC5nZXRhdHRyXHQ9IHRyYWNlZnNfZ2V0YXR0cixcbmZzL3RyYWNlZnMvaW5vZGUuYzoyNDU6XHQuc2V0YXR0clx0PSB0cmFjZWZzX3NldGF0dHIsXG5mcy90cmFjZWZzL2lub2RlLmMtMjQ2LX07XG5mcy90cmFjZWZzL2lub2RlLmMtMjQ3LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI0ODpzdHJ1Y3QgaW5vZGUgKnRyYWNlZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy90cmFjZWZzL2lub2RlLmMtMjQ5LXtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjU3LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI1ODpzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvIHtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yNTktXHRrdWlkX3QgdWlkO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYz0yNjY9ZW51bSB7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI3MS1cbmZzL3RyYWNlZnMvaW5vZGUuYzoyNzI6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyB0cmFjZWZzX3BhcmFtX3NwZWNzW10gPSB7XG5mcy90cmFjZWZzL2lub2RlLmMtMjczLVx0ZnNwYXJhbV9naWRcdChcJiMzNDtnaWRcJiMzNDssXHRcdE9wdF9naWQpLFxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0yNzgtXG5mcy90cmFjZWZzL2lub2RlLmM6Mjc5OnN0YXRpYyBpbnQgdHJhY2Vmc19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4MC17XG5mcy90cmFjZWZzL2lub2RlLmM6MjgxOlx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqb3B0cyA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbmZzL3RyYWNlZnMvaW5vZGUuYy0yODItXHRzdHJ1Y3QgZnNfcGFyc2VfcmVzdWx0IHJlc3VsdDtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMjg0LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI4NTpcdG9wdCA9IGZzX3BhcnNlKGZjLCB0cmFjZWZzX3BhcmFtX3NwZWNzLCBwYXJhbSwgXHUwMDI2cmVzdWx0KTtcbmZzL3RyYWNlZnMvaW5vZGUuYy0yODYtXHRpZiAob3B0IFx1MDAzYyAwKVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zMDAtXHQgKiBXZSBtaWdodCBsaWtlIHRvIHJlcG9ydCBiYWQgbW91bnQgb3B0aW9ucyBoZXJlO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjMwMTpcdCAqIGJ1dCB0cmFkaXRpb25hbGx5IHRyYWNlZnMgaGFzIGlnbm9yZWQgYWxsIG1vdW50IG9wdGlvbnNcbmZzL3RyYWNlZnMvaW5vZGUuYy0zMDItXHQgKi9cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtMzA5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjMxMDpzdGF0aWMgaW50IHRyYWNlZnNfYXBwbHlfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIHJlbW91bnQpXG5mcy90cmFjZWZzL2lub2RlLmMtMzExLXtcbmZzL3RyYWNlZnMvaW5vZGUuYzozMTI6XHRzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvICpmc2kgPSBzYi1cdTAwM2VzX2ZzX2luZm87XG5mcy90cmFjZWZzL2lub2RlLmMtMzEzLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoc2ItXHUwMDNlc19yb290KTtcbmZzL3RyYWNlZnMvaW5vZGUuYzozMTQ6XHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGk7XG5mcy90cmFjZWZzL2lub2RlLmMtMzE1LVx0Ym9vbCB1cGRhdGVfdWlkLCB1cGRhdGVfZ2lkO1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zNDItXHRcdHJjdV9yZWFkX2xvY2soKTtcbmZzL3RyYWNlZnMvaW5vZGUuYzozNDM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRpLCBcdTAwMjZ0cmFjZWZzX2lub2RlcywgbGlzdCkge1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0NC1cdFx0XHRpZiAodXBkYXRlX3VpZCkge1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zNjgtXG5mcy90cmFjZWZzL2lub2RlLmM6MzY5OnN0YXRpYyBpbnQgdHJhY2Vmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy90cmFjZWZzL2lub2RlLmMtMzcwLXtcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNzEtXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmMtXHUwMDNlcm9vdC1cdTAwM2VkX3NiO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjM3MjpcdHN0cnVjdCB0cmFjZWZzX2ZzX2luZm8gKnNiX29wdHMgPSBzYi1cdTAwM2VzX2ZzX2luZm87XG5mcy90cmFjZWZzL2lub2RlLmM6MzczOlx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqbmV3X29wdHMgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG5mcy90cmFjZWZzL2lub2RlLmMtMzc0LVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zODEtXG5mcy90cmFjZWZzL2lub2RlLmM6MzgyOlx0cmV0dXJuIHRyYWNlZnNfYXBwbHlfb3B0aW9ucyhzYiwgdHJ1ZSk7XG5mcy90cmFjZWZzL2lub2RlLmMtMzgzLX1cbmZzL3RyYWNlZnMvaW5vZGUuYy0zODQtXG5mcy90cmFjZWZzL2lub2RlLmM6Mzg1OnN0YXRpYyBpbnQgdHJhY2Vmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM4Ni17XG5mcy90cmFjZWZzL2lub2RlLmM6Mzg3Olx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqZnNpID0gcm9vdC1cdTAwM2VkX3NiLVx1MDAzZXNfZnNfaW5mbztcbmZzL3RyYWNlZnMvaW5vZGUuYy0zODgtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQwMC1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0MDE6c3RhdGljIGludCB0cmFjZWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDIte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjQwMzpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDQtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQxNi1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0MTc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHRyYWNlZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MTg6XHQuYWxsb2NfaW5vZGUgICAgPSB0cmFjZWZzX2FsbG9jX2lub2RlLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQxOTpcdC5mcmVlX2lub2RlICAgICA9IHRyYWNlZnNfZnJlZV9pbm9kZSxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MjA6XHQuZGVzdHJveV9pbm9kZSAgPSB0cmFjZWZzX2Rlc3Ryb3lfaW5vZGUsXG5mcy90cmFjZWZzL2lub2RlLmM6NDIxOlx0LmRyb3BfaW5vZGUgICAgID0gdHJhY2Vmc19kcm9wX2lub2RlLFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQyMi1cdC5zdGF0ZnNcdFx0PSBzaW1wbGVfc3RhdGZzLFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQyMzpcdC5zaG93X29wdGlvbnNcdD0gdHJhY2Vmc19zaG93X29wdGlvbnMsXG5mcy90cmFjZWZzL2lub2RlLmMtNDI0LX07XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQzMy0gKi9cbmZzL3RyYWNlZnMvaW5vZGUuYzo0MzQ6c3RhdGljIHZvaWQgdHJhY2Vmc19kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQzNS17XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQzOS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0NDA6c3RhdGljIGludCB0cmFjZWZzX2RfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NDEtXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNDQ3LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ0ODpzdGF0aWMgaW50IHRyYWNlZnNfZF9kZWxldGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ0OS17XG5mcy90cmFjZWZzL2lub2RlLmMtNDUwLVx0LypcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NTE6XHQgKiBXZSB3YW50IHRvIGtlZXAgZXZlbnRmcyBkZW50cmllcyBhcm91bmQgYnV0IG5vdCB0cmFjZWZzXG5mcy90cmFjZWZzL2lub2RlLmMtNDUyLVx0ICogb25lcy4gZXZlbnRmcyBkZW50cmllcyBoYXZlIGNvbnRlbnQgaW4gZF9mc2RhdGEuXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ1Ny1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB0cmFjZWZzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1OTpcdC5kX3JldmFsaWRhdGUgPSB0cmFjZWZzX2RfcmV2YWxpZGF0ZSxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NjA6XHQuZF9yZWxlYXNlID0gdHJhY2Vmc19kX3JlbGVhc2UsXG5mcy90cmFjZWZzL2lub2RlLmM6NDYxOlx0LmRfZGVsZXRlID0gdHJhY2Vmc19kX2RlbGV0ZSxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjItfTtcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjMtXG5mcy90cmFjZWZzL2lub2RlLmM6NDY0OnN0YXRpYyBpbnQgdHJhY2Vmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjUte1xuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy00NzItXG5mcy90cmFjZWZzL2lub2RlLmM6NDczOlx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnRyYWNlZnNfc3VwZXJfb3BlcmF0aW9ucztcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NzQ6XHR0cmFjZWZzX2FwcGx5X29wdGlvbnMoc2IsIGZhbHNlKTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NzU6XHRzZXRfZGVmYXVsdF9kX29wKHNiLCBcdTAwMjZ0cmFjZWZzX2RlbnRyeV9vcGVyYXRpb25zKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy00NzYtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ3OS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0ODA6c3RhdGljIGludCB0cmFjZWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL3RyYWNlZnMvaW5vZGUuYy00ODEte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ4MjpcdGludCBlcnIgPSBnZXRfdHJlZV9zaW5nbGUoZmMsIHRyYWNlZnNfZmlsbF9zdXBlcik7XG5mcy90cmFjZWZzL2lub2RlLmMtNDgzLVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy00ODYtXG5mcy90cmFjZWZzL2lub2RlLmM6NDg3Olx0cmV0dXJuIHRyYWNlZnNfcmVjb25maWd1cmUoZmMpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4OC19XG5mcy90cmFjZWZzL2lub2RlLmMtNDg5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ5MDpzdGF0aWMgdm9pZCB0cmFjZWZzX2ZyZWVfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ5MS17XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ5NC1cbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTU6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgdHJhY2Vmc19jb250ZXh0X29wcyA9IHtcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTY6XHQuZnJlZVx0XHQ9IHRyYWNlZnNfZnJlZV9mYyxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTc6XHQucGFyc2VfcGFyYW1cdD0gdHJhY2Vmc19wYXJzZV9wYXJhbSxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTg6XHQuZ2V0X3RyZWVcdD0gdHJhY2Vmc19nZXRfdHJlZSxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTk6XHQucmVjb25maWd1cmVcdD0gdHJhY2Vmc19yZWNvbmZpZ3VyZSxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDAtfTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDEtXG5mcy90cmFjZWZzL2lub2RlLmM6NTAyOnN0YXRpYyBpbnQgdHJhY2Vmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUwMy17XG5mcy90cmFjZWZzL2lub2RlLmM6NTA0Olx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqZnNpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTUwNS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1MDY6XHRmc2kgPSBremFsbG9jX29iaihzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvKTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDctXHRpZiAoIWZzaSlcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNTEyLVx0ZmMtXHUwMDNlc19mc19pbmZvID0gZnNpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxMzpcdGZjLVx1MDAzZW9wcyA9IFx1MDAyNnRyYWNlZnNfY29udGV4dF9vcHM7XG5mcy90cmFjZWZzL2lub2RlLmMtNTE0LVx0cmV0dXJuIDA7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jPTUxNz1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdHJhY2VfZnNfdHlwZSA9IHtcbmZzL3RyYWNlZnMvaW5vZGUuYy01MTgtXHQub3duZXIgPVx0VEhJU19NT0RVTEUsXG5mcy90cmFjZWZzL2lub2RlLmM6NTE5Olx0Lm5hbWUgPVx0XHRcJiMzNDt0cmFjZWZzXCYjMzQ7LFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUyMDpcdC5pbml0X2ZzX2NvbnRleHQgPSB0cmFjZWZzX2luaXRfZnNfY29udGV4dCxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjE6XHQucGFyYW1ldGVyc1x0PSB0cmFjZWZzX3BhcmFtX3NwZWNzLFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUyMi1cdC5raWxsX3NiID1cdGtpbGxfYW5vbl9zdXBlcixcbmZzL3RyYWNlZnMvaW5vZGUuYy01MjMtfTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjQ6TU9EVUxFX0FMSUFTX0ZTKFwmIzM0O3RyYWNlZnNcJiMzNDspO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTUyNS1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjY6c3RydWN0IGRlbnRyeSAqdHJhY2Vmc19zdGFydF9jcmVhdGluZyhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQpXG5mcy90cmFjZWZzL2lub2RlLmMtNTI3LXtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNTMwLVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUzMTpcdHByX2RlYnVnKFwmIzM0O3RyYWNlZnM6IGNyZWF0aW5nIGZpbGUgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LG5hbWUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTUzMi1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1MzM6XHRlcnJvciA9IHNpbXBsZV9waW5fZnMoXHUwMDI2dHJhY2VfZnNfdHlwZSwgXHUwMDI2dHJhY2Vmc19tb3VudCxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MzQ6XHRcdFx0ICAgICAgXHUwMDI2dHJhY2Vmc19tb3VudF9jb3VudCk7XG5mcy90cmFjZWZzL2lub2RlLmMtNTM1LVx0aWYgKGVycm9yKVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01NDMtXHRpZiAoIXBhcmVudClcbmZzL3RyYWNlZnMvaW5vZGUuYzo1NDQ6XHRcdHBhcmVudCA9IHRyYWNlZnNfbW91bnQtXHUwMDNlbW50X3Jvb3Q7XG5mcy90cmFjZWZzL2lub2RlLmMtNTQ1LVxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01NDctXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG5mcy90cmFjZWZzL2lub2RlLmM6NTQ4Olx0XHRzaW1wbGVfcmVsZWFzZV9mcyhcdTAwMjZ0cmFjZWZzX21vdW50LCBcdTAwMjZ0cmFjZWZzX21vdW50X2NvdW50KTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01NDktXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1Mi1cbmZzL3RyYWNlZnMvaW5vZGUuYzo1NTM6c3RydWN0IGRlbnRyeSAqdHJhY2Vmc19mYWlsZWRfY3JlYXRpbmcoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1NC17XG5mcy90cmFjZWZzL2lub2RlLmMtNTU1LVx0c2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTtcbmZzL3RyYWNlZnMvaW5vZGUuYzo1NTY6XHRzaW1wbGVfcmVsZWFzZV9mcyhcdTAwMjZ0cmFjZWZzX21vdW50LCBcdTAwMjZ0cmFjZWZzX21vdW50X2NvdW50KTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01NTctXHRyZXR1cm4gTlVMTDtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNTU5LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU2MDpzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX2VuZF9jcmVhdGluZyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy90cmFjZWZzL2lub2RlLmMtNTYxLXtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmM9NTY3PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmluc3RhbmNlX2lub2RlKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL3RyYWNlZnMvaW5vZGUuYy01Njgte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjU2OTpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcbmZzL3RyYWNlZnMvaW5vZGUuYy01NzAtXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU3Ni1cdHdoaWxlICghSVNfUk9PVChwYXJlbnQpKSB7XG5mcy90cmFjZWZzL2lub2RlLmM6NTc3Olx0XHR0aSA9IGdldF90cmFjZWZzKGRfaW5vZGUocGFyZW50KSk7XG5mcy90cmFjZWZzL2lub2RlLmMtNTc4LVx0XHRpZiAodGktXHUwMDNlZmxhZ3MgXHUwMDI2IFRSQUNFRlNfSU5TVEFOQ0VfSU5PREUpXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU4Ni0vKipcbmZzL3RyYWNlZnMvaW5vZGUuYzo1ODc6ICogdHJhY2Vmc19jcmVhdGVfZmlsZSAtIGNyZWF0ZSBhIGZpbGUgaW4gdGhlIHRyYWNlZnMgZmlsZXN5c3RlbVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU4OC0gKiBAbmFtZTogYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01OTEtICogICAgICAgICAgZGlyZWN0b3J5IGRlbnRyeSBpZiBzZXQuICBJZiB0aGlzIHBhcmFtZXRlciBpcyBOVUxMLCB0aGVuIHRoZVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU5MjogKiAgICAgICAgICBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgdHJhY2VmcyBmaWxlc3lzdGVtLlxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU5My0gKiBAZGF0YTogYSBwb2ludGVyIHRvIHNvbWV0aGluZyB0aGF0IHRoZSBjYWxsZXIgd2lsbCB3YW50IHRvIGdldCB0byBsYXRlclxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy01OTgtICpcbmZzL3RyYWNlZnMvaW5vZGUuYzo1OTk6ICogVGhpcyBpcyB0aGUgYmFzaWMgXCYjMzQ7Y3JlYXRlIGEgZmlsZVwmIzM0OyBmdW5jdGlvbiBmb3IgdHJhY2Vmcy4gIEl0IGFsbG93cyBmb3IgYVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwMC0gKiB3aWRlIHJhbmdlIG9mIGZsZXhpYmlsaXR5IGluIGNyZWF0aW5nIGEgZmlsZSwgb3IgYSBkaXJlY3RvcnkgKGlmIHlvdSB3YW50XG5mcy90cmFjZWZzL2lub2RlLmM6NjAxOiAqIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSwgdGhlIHRyYWNlZnNfY3JlYXRlX2RpcigpIGZ1bmN0aW9uIGlzXG5mcy90cmFjZWZzL2lub2RlLmMtNjAyLSAqIHJlY29tbWVuZGVkIHRvIGJlIHVzZWQgaW5zdGVhZC4pXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwNC0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgcG9pbnRlciB0byBhIGRlbnRyeSBpZiBpdCBzdWNjZWVkcy4gIFRoaXNcbmZzL3RyYWNlZnMvaW5vZGUuYzo2MDU6ICogcG9pbnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgdHJhY2Vmc19yZW1vdmUoKSBmdW5jdGlvbiB3aGVuIHRoZSBmaWxlIGlzXG5mcy90cmFjZWZzL2lub2RlLmMtNjA2LSAqIHRvIGJlIHJlbW92ZWQgKG5vIGF1dG9tYXRpYyBjbGVhbnVwIGhhcHBlbnMgaWYgeW91ciBtb2R1bGUgaXMgdW5sb2FkZWQsXG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwOC0gKlxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYwOTogKiBJZiB0cmFjZWZzIGlzIG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWwsIHRoZSB2YWx1ZSAtJUVOT0RFViB3aWxsIGJlXG5mcy90cmFjZWZzL2lub2RlLmMtNjEwLSAqIHJldHVybmVkLlxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxMS0gKi9cbmZzL3RyYWNlZnMvaW5vZGUuYzo2MTI6c3RydWN0IGRlbnRyeSAqdHJhY2Vmc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUsXG5mcy90cmFjZWZzL2lub2RlLmMtNjEzLVx0XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLFxuLS1cbmZzL3RyYWNlZnMvaW5vZGUuYy02MTUte1xuZnMvdHJhY2Vmcy9pbm9kZS5jOjYxNjpcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcbmZzL3RyYWNlZnMvaW5vZGUuYy02MTctXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4tLVxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYyNS1cdEJVR19PTighU19JU1JFRyhtb2RlKSk7XG5mcy90cmFjZWZzL2lub2RlLmM6NjI2Olx0ZGVudHJ5ID0gdHJhY2Vmc19zdGFydF9jcmVhdGluZyhuYW1lLCBwYXJlbnQpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTYyNy1cbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNjMwLVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzMTpcdGlub2RlID0gdHJhY2Vmc19nZXRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTYzMi1cdGlmICh1bmxpa2VseSghaW5vZGUpKVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzMzpcdFx0cmV0dXJuIHRyYWNlZnNfZmFpbGVkX2NyZWF0aW5nKGRlbnRyeSk7XG5mcy90cmFjZWZzL2lub2RlLmMtNjM0LVxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzNTpcdHRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xuZnMvdHJhY2Vmcy9pbm9kZS5jLTYzNi1cdHRpLVx1MDAzZXByaXZhdGUgPSBpbnN0YW5jZV9pbm9kZShwYXJlbnQsIGlub2RlKTtcbi0tXG5mcy90cmFjZWZzL2lub2RlLmMtNjM4LVx0aW5vZGUtXHUwMDNlaV9tb2RlID0gbW9kZTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUmluZyBCdWZmZXIgbW1hcCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHJpbmcgYnVmZmVyJiMzOTtzIG1lbW9yeS1tYXBwZWQgYWNjZXNzLiBGaXJzdCwgSSBoYXZlIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGhhbmRsZWQgYnkgYENPTkZJR19UUkFDSU5HYCBvciBwZXJoYXBzIHRoZSBtb3JlIGdyYW51bGFyIGBDT05GSUdfRlRSQUNFYCwgb3IgZXZlbiBhbm90aGVyIGNvbmZpZyBlbnRpcmVseS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGBtZW51Y29uZmlnYCBvcHRpb25zIHVuZGVyIFRSQUNJTkcuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9ucyBzcGVjaWZpYyB0byByaW5nIGJ1ZmZlciBtbWFwLgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O2xsIGhlYWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGByaW5nX2J1ZmZlcl9tYXBgIGlzIGRlZmluZWQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCBhbmQgdGhlbiBicm9hZGVuIHRoZSBzZWFyY2ggdG8gaW5jbHVkZSBga2VybmVsL3RyYWNlL3RyYWNlLmNgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtZW1vcnkgbWFwcGluZyBpcyBtYW5hZ2VkIGFuZCBpZiB0aGVyZSBhcmUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaW5nX2J1ZmZlcl9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzgzMz1zdGF0aWMgaW50IF9fcmJfbWFwX3ZtYShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcixcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03ODM5LVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzg0MDppbnQgcmluZ19idWZmZXJfbWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc4NDEtXHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTA5LSAqL1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NzkxMDp2b2lkIHJpbmdfYnVmZmVyX21hcF9kdXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzkxMS17XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzkyNz1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjEtXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3OTYyOmludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYzLXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz03MzY1PXN0YXRpYyBsb25nIHRyYWNpbmdfYnVmZmVyc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4MC1cbmtlcm5lbC90cmFjZS90cmFjZS5jOjczODE6XHRcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgyLVx0XHRcdFx0XHRcdCAgaXRlci1cdTAwM2VjcHVfZmlsZSk7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQwNT1zdGF0aWMgdm9pZCB0cmFjaW5nX2J1ZmZlcnNfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0MDktXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDEwOlx0cmluZ19idWZmZXJfbWFwX2R1cChpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQxMS19XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQzNz1zdGF0aWMgaW50IHRyYWNpbmdfYnVmZmVyc19tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUwLVxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQ1MTpcdHJldCA9IHJpbmdfYnVmZmVyX21hcChpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsIGl0ZXItXHUwMDNlY3B1X2ZpbGUsIHZtYSk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUyLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2NzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBmb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYHJpbmdfYnVmZmVyX21hcGAgb3IgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBhcmUgd3JhcHBlZCBpbiBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzLCBzcGVjaWZpY2FsbHkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoaXMgaXMgYSBjb21tb24gcHJhY3RpY2UsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBvciBlbmFibGluZy9kaXNhYmxpbmcgZmVhdHVyZXMgYmFzZWQgb24gYnVpbGQgY29uZmlndXJhdGlvbnMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBjcml0aWNhbCBmb3IgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIsIHNvIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBJIG5lZWQgdG8ga25vdyAqaW1tZWRpYXRlbHkqIGlmIHRoZXkmIzM5O3JlIHRyZWF0ZWQgZGlmZmVyZW50bHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBTbywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzY2FuIGZvciB0aG9zZSBkaXJlY3RpdmVzIGFyb3VuZCB0aG9zZSB0d28gZnVuY3Rpb24gbmFtZXMuIFRoaXMgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGFkYXB0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzgzMDpcdFx0cmV0dXJuIGVycjtcbjc4MzE6XHR9XG43ODMyOlx0I2Vsc2Vcbjc4MzM6XHRzdGF0aWMgaW50IF9fcmJfbWFwX3ZtYShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcixcbjc4MzQ6XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbjc4MzU6XHR7XG43ODM2Olx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG43ODM3Olx0fVxuNzgzODpcdCNlbmRpZlxuNzgzOTpcdFxuNzg0MDpcdGludCByaW5nX2J1ZmZlcl9tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LFxuNzg0MTpcdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG43ODQyOlx0e1xuNzg0MzpcdFx0c3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7XG43ODQ0Olx0XHRzdHJ1Y3QgYnVmZmVyX3BhZ2UgKipzdWJidWZfaWRzO1xuNzg0NTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjc4NDY6XHRcdGludCBlcnI7XG43ODQ3Olx0XG43ODQ4Olx0XHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItXHUwMDNlY3B1bWFzaykgfHwgYnVmZmVyLVx1MDAzZXJlbW90ZSlcbjc4NDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODUwOlx0XG43ODUxOlx0XHRjcHVfYnVmZmVyID0gYnVmZmVyLVx1MDAzZWJ1ZmZlcnNbY3B1XTtcbjc4NTI6XHRcbjc4NTM6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZjcHVfYnVmZmVyLVx1MDAzZW1hcHBpbmdfbG9jayk7XG43ODU0Olx0XG43ODU1Olx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2V1c2VyX21hcHBlZCkge1xuNzg1NjpcdFx0XHRlcnIgPSBfX3JiX21hcF92bWEoY3B1X2J1ZmZlciwgdm1hKTtcbjc4NTc6XHRcdFx0aWYgKCFlcnIpXG43ODU4Olx0XHRcdFx0ZXJyID0gX19yYl9pbmNfZGVjX21hcHBlZChjcHVfYnVmZmVyLCB0cnVlKTtcbjc4NTk6XHRcdFx0cmV0dXJuIGVycjtcbjc4NjA6XHRcdH1cbjc4NjE6XHRcbjc4NjI6XHRcdC8qIHByZXZlbnQgYW5vdGhlciB0aHJlYWQgZnJvbSBjaGFuZ2luZyBidWZmZXIvc3ViLWJ1ZmZlciBzaXplcyAqL1xuNzg2MzpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmJ1ZmZlci1cdTAwM2VtdXRleCk7XG43ODY0Olx0XG43ODY1Olx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2Vucl9wYWdlcyBcdTAwM2UgcmJfc3RhdGljX21heF9wYWdlcygpKVxuNzg2NjpcdFx0XHRyZXR1cm4gLUUyQklHO1xuNzg2NzpcdFxuNzg2ODpcdFx0ZXJyID0gcmJfYWxsb2NfbWV0YV9wYWdlKGNwdV9idWZmZXIpO1xuNzg2OTpcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0ODAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgdHJhY2luZyBjb2RlLgoKKipEaXZpbmcgaW50byB0aGUgUmluZyBCdWZmZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFib3ZlIGxpbmUgNzgzMC4gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGZhaXJseSBsb3ctbGV2ZWwsIGxpa2VseSBkZWFsaW5nIHdpdGggY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoYXQgbGluZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXM6IEFyZSB3ZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgZGF0YSBhY2Nlc3MsIG9yIGVycm9yIGhhbmRsaW5nPyBJcyBpdCByZWxhdGVkIHRvIHdyaXRlciBvcGVyYXRpb25zLCBvciBtYXliZSBhIHJlYWRlciBzaWRlIHRoYXQgaXMgaW4gcGxhY2U/IEkgd2lsbCBleHBlY3QgaXQgdG8gYmUgYSBrZXkgYXJlYSB0aGF0IEkgY2FuIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIHNvdXJjZXMgdG8gdW5kZXJzdGFuZCB0aGUgd29ya2luZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc3OTA6XHRcdFx0Lypcbjc3OTE6XHRcdFx0ICogUGFkIHdpdGggdGhlIHplcm8tcGFnZSB0byBhbGlnbiB0aGUgbWV0YS1wYWdlIHdpdGggdGhlXG43NzkyOlx0XHRcdCAqIHN1Yi1idWZmZXJzLlxuNzc5MzpcdFx0XHQgKi9cbjc3OTQ6XHRcdFx0bWV0YV9wYWdlX3BhZGRpbmcgPSBzdWJidWZfcGFnZXMgLSAxO1xuNzc5NTpcdFx0XHR3aGlsZSAobWV0YV9wYWdlX3BhZGRpbmctLSBcdTAwMjZcdTAwMjYgcCBcdTAwM2MgbnJfcGFnZXMpIHtcbjc3OTY6XHRcdFx0XHR1bnNpZ25lZCBsb25nIF9fbWF5YmVfdW51c2VkIHplcm9fYWRkciA9XG43Nzk3Olx0XHRcdFx0XHR2bWEtXHUwMDNldm1fc3RhcnQgJiM0MzsgKFBBR0VfU0laRSAqIHApO1xuNzc5ODpcdFxuNzc5OTpcdFx0XHRcdHBhZ2VzW3AmIzQzOyYjNDM7XSA9IFpFUk9fUEFHRSh6ZXJvX2FkZHIpO1xuNzgwMDpcdFx0XHR9XG43ODAxOlx0XHR9IGVsc2Uge1xuNzgwMjpcdFx0XHQvKiBTa2lwIHRoZSBtZXRhLXBhZ2UgKi9cbjc4MDM6XHRcdFx0cGdvZmYgLT0gc3ViYnVmX3BhZ2VzO1xuNzgwNDpcdFxuNzgwNTpcdFx0XHRzICYjNDM7PSBwZ29mZiAvIHN1YmJ1Zl9wYWdlcztcbjc4MDY6XHRcdH1cbjc4MDc6XHRcbjc4MDg6XHRcdHdoaWxlIChwIFx1MDAzYyBucl9wYWdlcykge1xuNzgwOTpcdFx0XHRzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnN1YmJ1Zjtcbjc4MTA6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG43ODExOlx0XHRcdGludCBvZmYgPSAwO1xuNzgxMjpcdFxuNzgxMzpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKHMgXHUwMDNlPSBucl9zdWJidWZzKSlcbjc4MTQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4MTU6XHRcbjc4MTY6XHRcdFx0c3ViYnVmID0gY3B1X2J1ZmZlci1cdTAwM2VzdWJidWZfaWRzW3NdO1xuNzgxNzpcdFx0XHRwYWdlID0gdmlydF90b19wYWdlKCh2b2lkICopc3ViYnVmLVx1MDAzZXBhZ2UpO1xuNzgxODpcdFxuNzgxOTpcdFx0XHRmb3IgKDsgb2ZmIFx1MDAzYyAoMSBcdTAwM2NcdTAwM2MgKHN1YmJ1Zl9vcmRlcikpOyBvZmYmIzQzOyYjNDM7LCBwYWdlJiM0MzsmIzQzOykge1xuNzgyMDpcdFx0XHRcdGlmIChwIFx1MDAzZT0gbnJfcGFnZXMpXG43ODIxOlx0XHRcdFx0XHRicmVhaztcbjc4MjI6XHRcbjc4MjM6XHRcdFx0XHRwYWdlc1twJiM0MzsmIzQzO10gPSBwYWdlO1xuNzgyNDpcdFx0XHR9XG43ODI1Olx0XHRcdHMmIzQzOyYjNDM7O1xuNzgyNjpcdFx0fVxuNzgyNzpcdFxuNzgyODpcdFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBwYWdlcywgXHUwMDI2bnJfcGFnZXMpO1xuNzgyOTpcdFxuNzgzMDpcdFx0cmV0dXJuIGVycjtcbjc4MzE6XHR9XG43ODMyOlx0I2Vsc2Vcbjc4MzM6XHRzdGF0aWMgaW50IF9fcmJfbWFwX3ZtYShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcixcbjc4MzQ6XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gUmluZyBCdWZmZXIgVGVycml0b3J5KioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgYCNpZmRlZmAgYmxvY2sgYXJvdW5kIGxpbmUgNzc1MC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCB0aGVyZT8gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlLCBwcm9iYWJseSBndWFyZGluZyBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIG1heWJlIGEgZGVidWcgZmVhdHVyZSwgYSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgYSBzZWN0aW9uIG9mIGNvZGUgdGllZCB0byBhIHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbml0aWFsIGd1ZXNzIHdvdWxkIGJlIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgYnV0IEkgd2lsbCBnbyBhbmQgZmluZCBvdXQuIFRoaXMgY291bGQgYmUgcmVsZXZhbnQgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMgZGVwZW5kaW5nIG9uIHdoYXQgaXQgaXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1hY3JvIGlzIGJlaW5nIHRlc3RlZCBhbmQgdGhlbiBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGF0IG1hY3JvIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgY29udHJvbHMuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IHBhcnQgb2YgdGhlIHJpbmcgYnVmZmVyIGNvZGUgYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzc0MDpcdHtcbjc3NDE6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc3ViYnVmcywgbnJfcGFnZXMsIG5yX3ZtYV9wYWdlcztcbjc3NDI6XHRcdHBnb2ZmX3QgcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYodm1hKTtcbjc3NDM6XHRcdHVuc2lnbmVkIGludCBzdWJidWZfcGFnZXMsIHN1YmJ1Zl9vcmRlcjtcbjc3NDQ6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG43NzQ1Olx0XHRpbnQgcCA9IDAsIHMgPSAwO1xuNzc0NjpcdFx0aW50IGVycjtcbjc3NDc6XHRcbjc3NDg6XHRcdC8qIFJlZnVzZSBNUF9QUklWQVRFIG9yIHdyaXRhYmxlIG1hcHBpbmdzICovXG43NzQ5Olx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSB8fCB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMgfHxcbjc3NTA6XHRcdCAgICAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpKVxuNzc1MTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuNzc1MjpcdFxuNzc1MzpcdFx0c3ViYnVmX29yZGVyID0gY3B1X2J1ZmZlci1cdTAwM2VidWZmZXItXHUwMDNlc3ViYnVmX29yZGVyO1xuNzc1NDpcdFx0c3ViYnVmX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgc3ViYnVmX29yZGVyO1xuNzc1NTpcdFxuNzc1NjpcdFx0aWYgKHN1YmJ1Zl9vcmRlciBcdTAwMjZcdTAwMjYgcGdvZmYgJSBzdWJidWZfcGFnZXMpXG43NzU3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzc1ODpcdFxuNzc1OTpcdFx0Lypcbjc3NjA6XHRcdCAqIE1ha2Ugc3VyZSB0aGUgbWFwcGluZyBjYW5ub3QgYmVjb21lIHdyaXRhYmxlIGxhdGVyLiBBbHNvIHRlbGwgdGhlIFZNXG43NzYxOlx0XHQgKiB0byBub3QgdG91Y2ggdGhlc2UgcGFnZXMgKFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCkuXG43NzYyOlx0XHQgKi9cbjc3NjM6XHRcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QLFxuNzc2NDpcdFx0XHQgICAgIFZNX01BWVdSSVRFKTtcbjc3NjU6XHRcbjc3NjY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3B1X2J1ZmZlci1cdTAwM2VtYXBwaW5nX2xvY2spO1xuNzc2NzpcdFxuNzc2ODpcdFx0bnJfc3ViYnVmcyA9IGNwdV9idWZmZXItXHUwMDNlbnJfcGFnZXMgJiM0MzsgMTsgLyogJiM0MzsgcmVhZGVyLXN1YmJ1ZiAqL1xuNzc2OTpcdFx0bnJfcGFnZXMgPSAoKG5yX3N1YmJ1ZnMgJiM0MzsgMSkgXHUwMDNjXHUwMDNjIHN1YmJ1Zl9vcmRlcik7IC8qICYjNDM7IG1ldGEtcGFnZSAqL1xuNzc3MDpcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzYz0gcGdvZmYpXG43NzcxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzc3MjpcdFxuNzc3MzpcdFx0bnJfcGFnZXMgLT0gcGdvZmY7XG43Nzc0Olx0XG43Nzc1Olx0XHRucl92bWFfcGFnZXMgPSB2bWFfcGFnZXModm1hKTtcbjc3NzY6XHRcdGlmICghbnJfdm1hX3BhZ2VzIHx8IG5yX3ZtYV9wYWdlcyBcdTAwM2UgbnJfcGFnZXMpXG43Nzc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzc3ODpcdFxuNzc3OTpcdFx0bnJfcGFnZXMgPSBucl92bWFfcGFnZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjgwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIGNvZGUsIGFuZCBJJiMzOTttIHNwZWNpZmljYWxseSBjdXJpb3VzIGFib3V0IGhvdyBgI2lmZGVmYCBkaXJlY3RpdmVzIGFyZSBiZWluZyB1c2VkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGluc3RhbmNlcyB0aGF0IGJlZ2luICphYm92ZSogbGluZSA3NzQwLiBUaGlzIHN1Z2dlc3RzIEkmIzM5O20gbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHBhdHRlcm4gb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSByZWxhdGVkIHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGhpbiBhIGxhcmdlciBibG9jayBvZiBjb2RlLiBJJiMzOTttIHByb2JhYmx5IHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBhIHNwZWNpZmljIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3IgcGVyaGFwcyBwaW5wb2ludGluZyBhIGJ1ZyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gVGhlIGxpbmUgbnVtYmVyIGlzIG15IGluaXRpYWwgYW5jaG9yIHBvaW50OyBpdCBjb3VsZCBiZSBhIHNlY3Rpb24gd2l0aCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvciBwcm9ibGVtYXRpYyBjb25kaXRpb25hbCBsb2dpYy4gSSBuZWVkIHRvIGtlZXAgdGhlIGNvbnRleHQgYXJvdW5kIHRoaXMgbGluZSBudW1iZXIgaW4gbWluZCwgYW5kIHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgbWF5IGJlIGFmZmVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NzIwOlx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9sb2NrLCBmbGFncyk7XG43NzIxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3B1X2J1ZmZlci1cdTAwM2VidWZmZXItXHUwMDNlbXV0ZXgpO1xuNzcyMjpcdFxuNzcyMzpcdFx0cmV0dXJuIDA7XG43NzI0Olx0fVxuNzcyNTpcdFxuNzcyNjpcdC8qXG43NzI3Olx0ICogICAmIzQzOy0tLS0tLS0tLS0tLS0tJiM0MzsgIHBnb2ZmID09IDBcbjc3Mjg6XHQgKiAgIHwgICBtZXRhIHBhZ2UgIHxcbjc3Mjk6XHQgKiAgICYjNDM7LS0tLS0tLS0tLS0tLS0mIzQzOyAgcGdvZmYgPT0gMVxuNzczMDpcdCAqICAgfCBzdWJidWZmZXIgMCAgfFxuNzczMTpcdCAqICAgfCAgICAgICAgICAgICAgfFxuNzczMjpcdCAqICAgJiM0MzstLS0tLS0tLS0tLS0tLSYjNDM7ICBwZ29mZiA9PSAoMSAmIzQzOyAoMSBcdTAwM2NcdTAwM2Mgc3ViYnVmX29yZGVyKSlcbjc3MzM6XHQgKiAgIHwgc3ViYnVmZmVyIDEgIHxcbjc3MzQ6XHQgKiAgIHwgICAgICAgICAgICAgIHxcbjc3MzU6XHQgKiAgICAgICAgIC4uLlxuNzczNjpcdCAqL1xuNzczNzpcdCNpZmRlZiBDT05GSUdfTU1VXG43NzM4Olx0c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG43NzM5Olx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG43NzQwOlx0e1xuNzc0MTpcdFx0dW5zaWduZWQgbG9uZyBucl9zdWJidWZzLCBucl9wYWdlcywgbnJfdm1hX3BhZ2VzO1xuNzc0MjpcdFx0cGdvZmZfdCBwZ29mZiA9IHZtYV9zdGFydF9wZ29mZih2bWEpO1xuNzc0MzpcdFx0dW5zaWduZWQgaW50IHN1YmJ1Zl9wYWdlcywgc3ViYnVmX29yZGVyO1xuNzc0NDpcdFx0c3RydWN0IHBhZ2UgKipwYWdlcyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MTgKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSaW5nIEJ1ZmZlciBWdWxuZXJhYmlsaXR5KioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoaXMgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgdnVsbmVyYWJpbGl0eSB0byB0YXJnZXQuIENvbnNpZGVyaW5nIHRoaXMgaXMgYW1kNjQsIGBDT05GSUdfTU1VYCBpcyBhIGdpdmVuLCBzbyB3ZSBjYW4gaWdub3JlIHRoYXQuIFRoZSBrZXkgY29uZmlncyB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGggYXJlIGBDT05GSUdfVFJBQ0lOR2AgYW5kIGBDT05GSUdfUklOR19CVUZGRVJgLiBXZSAqbXVzdCogZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgYXJlIGVuYWJsZWQgYmVjYXVzZSBgVFJBQ0lOR2AgaXMgd2hhdCBlbmFibGVzIGByaW5nX2J1ZmZlci5vYCBhbmQgYHRyYWNlLm9gLCB3aGljaCBhcmUgY2VudHJhbCBoZXJlLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG91ciBmb2N1cyBzeW1ib2xzLiBXZSBoYXZlOgoKKiAgIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAKKiAgIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgCiogICBgcmluZ19idWZmZXJfbWFwYAoqICAgYHJiX2dldF9yZWFkZXJfcGFnZWAKCk9rYXksIHRob3NlIGxvb2sgc3BvdCBvbi4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhpcyBjb2RlIHBhdGggYW5kIG5vdCB1YmlxdWl0b3VzIGFjcm9zcyB0aGUga2VybmVsLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4KCkkmIzM5O2xsIHF1aWNrbHkgdHJhY2UgdGhlIGNhbGwgZmxvdyB0byBlbnN1cmUgdGhpcyBpcyBzb2xpZDogYHRyYWNpbmdfYnVmZmVyc19pb2N0bGAgY2FsbHMgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCwgd2hpY2ggY2FsbHMgYHJiX2dldF9yZWFkZXJfcGFnZWAuIEFuZCBgdHJhY2luZ19idWZmZXJzX21tYXBgIGNhbGxzIGByaW5nX2J1ZmZlcl9tYXBgLiBMb29rcyBnb29kLgoKTm93LCB0aW1lIHRvIG5haWwgZG93biB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBzdW1tYXJpemUgZXZlcnl0aGluZyBmb3IgbWF4aW11bSBjbGFyaXR5OgoKKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLCBhYnNvbHV0ZWx5LgoqICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgYW5kIGFjY3VyYXRlOiBUaGUgbW9kaWZpY2F0aW9uIGluIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AgaXMgYWx0ZXJpbmcgYSBgV0FSTl9PTmAgYXNzZXJ0aW9uIGxvZ2ljIGluIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYHRyYWNlZnNgIGlvY3RsIGBUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVJgIG9uIGB0cmFjZV9waXBlX3Jhd2AuCiogICBgRm9jdXNTeW1ib2xzYDogQ29uZmlybWVkLiBJIGhhdmUgdGhlc2UgZXhhY3RseSByaWdodDogYFsmIzM0O3JpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyJiMzNDssICYjMzQ7dHJhY2luZ19idWZmZXJzX2lvY3RsJiMzNDssICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssICYjMzQ7cmJfZ2V0X3JlYWRlcl9wYWdlJiMzNDtdYC4KKiAgIGBFbmFibGVDb25maWdzYDogSnVzdCB0aGUgb25lIG5lZWRlZDogYFsmIzM0O1RSQUNJTkcmIzM0O11gLgoKUGVyZmVjdC4gRmluYWwgcmV2aWV3IGNvbXBsZXRlLiBSZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQUNJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgICAmIzM0O3JiX2dldF9yZWFkZXJfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFDSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXImIzM0OywKICAgICYjMzQ7dHJhY2luZ19idWZmZXJzX2lvY3RsJiMzNDssCiAgICAmIzM0O3JpbmdfYnVmZmVyX21hcCYjMzQ7LAogICAgJiMzNDtyYl9nZXRfcmVhZGVyX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgV0FSTl9PTiBhc3NlcnRpb24gbG9naWMgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKSBpbiBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYywgcmVsYXhpbmcgdGhlIGNvbmRpdGlvbiB3aGVuIHJiX2dldF9yZWFkZXJfcGFnZSgpIHJldHVybnMgTlVMTCB0byBvbmx5IHRyaWdnZXIgd2hlbiByZWFkZXJfcGFnZSBpcyBub3QgZXF1YWwgdG8gY29tbWl0X3BhZ2UuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUiBpb2N0bCBvbiB0cmFjZWZzIHBlci1DUFUgdHJhY2VfcGlwZV9yYXcgZmlsZXMgYWZ0ZXIgbW1hcHBpbmcgdGhlIGJ1ZmZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvci93YXJuaW5nIGNvbmRpdGlvbiBpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKWAgd2hlbiBgcmJfZ2V0X3JlYWRlcl9wYWdlKClgIHJldHVybnMgTlVMTC4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgdHJpZ2dlcmluZyBgV0FSTl9PTighcmVhZGVyKWAsIGl0IG5vdyBvbmx5IHdhcm5zIGlmIGBjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2VgIGJlZm9yZSBqdW1waW5nIHRvIGBvdXRgLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmNDhjMzlmNjA5YjdjNWI1MDcwOGVmNzBhYjZiMDA4YmI1MjRiMjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDEyOjM2OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCA5YzAzYTU1NWE2YmEyLi45ODEzMDE4MmUwNWRmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNzk5NSw4ICYjNDM7Nzk5NSwxMCBAQCBpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQogCQlnb3RvIG91dDsKIAogCXJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTsKLQlpZiAoV0FSTl9PTighcmVhZGVyKSkKJiM0MzsJaWYgKCFyZWFkZXIpIHsKJiM0MzsJCVdBUk5fT04oY3B1X2J1ZmZlci0mZ3Q7cmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci0mZ3Q7Y29tbWl0X3BhZ2UpOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJLyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi8KIAltaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci0mZ3Q7bG9zdF9ldmVudHM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBSaW5nIEJ1ZmZlciBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG8gcmV2aWV3LiBUaGUgZmlsZSBtb2RpZmllZCBpcyBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGludm9sdmVzIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiDigJMgZGVmaW5pdGVseSBhbiBhcmVhIEkmIzM5O20gZmFtaWxpYXIgd2l0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZnVuY3Rpb25hbGl0eS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDc5OTUuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBnZXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgaXMgY3JpdGljYWwgYmVmb3JlIHRyeWluZyB0byBndWVzcyB3aGF0IHRoZSBwdXJwb3NlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTgwOlx0XHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlKTtcbjc5ODE6XHRcbjc5ODI6XHRcdC8qXG43OTgzOlx0XHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cbjc5ODQ6XHRcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxuNzk4NTpcdFx0ICogZXZlcnl0aGluZy4gTGV0JiMzOTtzIHVwZGF0ZSB0aGUga2VybmVsIHJlYWRlciBhY2NvcmRpbmdseS5cbjc5ODY6XHRcdCAqL1xuNzk4NzpcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UtXHUwMDNlcmVhZCBcdTAwM2MgcmVhZGVyX3NpemUpIHtcbjc5ODg6XHRcdFx0d2hpbGUgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UtXHUwMDNlcmVhZCBcdTAwM2MgcmVhZGVyX3NpemUpXG43OTg5Olx0XHRcdFx0cmJfYWR2YW5jZV9yZWFkZXIoY3B1X2J1ZmZlcik7XG43OTkwOlx0XHRcdGdvdG8gb3V0O1xuNzk5MTpcdFx0fVxuNzk5MjpcdFxuNzk5MzpcdFx0LyogRGlkIHRoZSByZWFkZXIgY2F0Y2ggdXAgd2l0aCB0aGUgd3JpdGVyPyAqL1xuNzk5NDpcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSlcbjc5OTU6XHRcdFx0Z290byBvdXQ7XG43OTk2Olx0XG43OTk3Olx0XHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG43OTk4Olx0XHRpZiAoIXJlYWRlcikge1xuNzk5OTpcdFx0XHRXQVJOX09OKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSk7XG44MDAwOlx0XHRcdGdvdG8gb3V0O1xuODAwMTpcdFx0fVxuODAwMjpcdFxuODAwMzpcdFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cbjgwMDQ6XHRcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVx1MDAzZWxvc3RfZXZlbnRzO1xuODAwNTpcdFxuODAwNjpcdFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcbjgwMDc6XHRcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSkge1xuODAwODpcdFx0XHRcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cdTAwM2VwYWdlO1xuODAwOTpcdFx0XHRcdHVuc2lnbmVkIGludCBjb21taXQ7XG44MDEwOlx0XHRcdFx0LypcbjgwMTE6XHRcdFx0XHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxuODAxMjpcdFx0XHRcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXG44MDEzOlx0XHRcdFx0ICogb24gdGhlIHBhZ2UuXG44MDE0Olx0XHRcdFx0ICovXG44MDE1Olx0XHRcdFx0aWYgKHJlYWRlci1cdTAwM2VyZWFsX2VuZClcbjgwMTY6XHRcdFx0XHRcdGxvY2FsX3NldChcdTAwMjZkcGFnZS1cdTAwM2Vjb21taXQsIHJlYWRlci1cdTAwM2VyZWFsX2VuZCk7XG44MDE3Olx0XHRcdFx0LypcbjgwMTg6XHRcdFx0XHQgKiBJZiB0aGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UgdG8gc2F2ZSB0aGVcbjgwMTk6XHRcdFx0XHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cbjgwMjA6XHRcdFx0XHQgKi9cbjgwMjE6XHRcdFx0XHRjb21taXQgPSByYl9wYWdlX3NpemUocmVhZGVyKTtcbjgwMjI6XHRcdFx0XHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFx1MDAzZT0gc2l6ZW9mKG1pc3NlZF9ldmVudHMpKSB7XG44MDIzOlx0XHRcdFx0XHRtZW1jcHkoXHUwMDI2ZHBhZ2UtXHUwMDNlZGF0YVtjb21taXRdLCBcdTAwMjZtaXNzZWRfZXZlbnRzLFxuODAyNDpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihtaXNzZWRfZXZlbnRzKSk7XG44MDI1Olx0XHRcdFx0XHRsb2NhbF9hZGQoUkJfTUlTU0VEX1NUT1JFRCwgXHUwMDI2ZHBhZ2UtXHUwMDNlY29tbWl0KTtcbjgwMjY6XHRcdFx0XHR9XG44MDI3Olx0XHRcdFx0bG9jYWxfYWRkKFJCX01JU1NFRF9FVkVOVFMsIFx1MDAyNmRwYWdlLVx1MDAzZWNvbW1pdCk7XG44MDI4Olx0XHRcdH0gZWxzZSBpZiAoIVdBUk5fT05DRShjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNldGFpbF9wYWdlLFxuODAyOTpcdFx0XHRcdFx0ICAgICAgXCYjMzQ7UmVhZGVyIG9uIGNvbW1pdCB3aXRoICVsZCBtaXNzZWQgZXZlbnRzXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjAxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHdob2xlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24uIEkgY2FuJiMzOTt0IGp1c3QgbG9vayBhdCBzbmlwcGV0czsgSSBuZWVkIHRoZSBjb21wbGV0ZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBlbnRpcmV0eSBvZiB0aGUgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQganVkZ2VtZW50cyBhYm91dCBpdCwgb3IgaG93IGl0IG1pZ2h0IGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBiZSBhYmxlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIGZyb20gZW50cnkgdG8gZXhpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk2MDpcdH1cbjc5NjE6XHRcbjc5NjI6XHRpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuNzk2MzpcdHtcbjc5NjQ6XHRcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xuNzk2NTpcdFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XG43OTY2Olx0XHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XG43OTY3Olx0XHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xuNzk2ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjc5Njk6XHRcbjc5NzA6XHRcdGNwdV9idWZmZXIgPSByYl9nZXRfbWFwcGVkX2J1ZmZlcihidWZmZXIsIGNwdSk7XG43OTcxOlx0XHRpZiAoSVNfRVJSKGNwdV9idWZmZXIpKVxuNzk3MjpcdFx0XHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xuNzk3MzpcdFxuNzk3NDpcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwdV9idWZmZXItXHUwMDNlcmVhZGVyX2xvY2ssIGZsYWdzKTtcbjc5NzU6XHRcbjc5NzY6XHRjb25zdW1lOlxuNzk3NzpcdFx0aWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpXG43OTc4Olx0XHRcdGdvdG8gb3V0O1xuNzk3OTpcdFxuNzk4MDpcdFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSk7XG43OTgxOlx0XG43OTgyOlx0XHQvKlxuNzk4MzpcdFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXG43OTg0Olx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcbjc5ODU6XHRcdCAqIGV2ZXJ5dGhpbmcuIExldCYjMzk7cyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXG43OTg2Olx0XHQgKi9cbjc5ODc6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKSB7XG43OTg4Olx0XHRcdHdoaWxlIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKVxuNzk4OTpcdFx0XHRcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xuNzk5MDpcdFx0XHRnb3RvIG91dDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcbjc5OTM6XHRcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cbjc5OTQ6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpXG43OTk1Olx0XHRcdGdvdG8gb3V0O1xuNzk5NjpcdFxuNzk5NzpcdFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuNzk5ODpcdFx0aWYgKCFyZWFkZXIpIHtcbjc5OTk6XHRcdFx0V0FSTl9PTihjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpO1xuODAwMDpcdFx0XHRnb3RvIG91dDtcbjgwMDE6XHRcdH1cbjgwMDI6XHRcbjgwMDM6XHRcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXG44MDA0Olx0XHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cdTAwM2Vsb3N0X2V2ZW50cztcbjgwMDU6XHRcbjgwMDY6XHRcdGlmIChtaXNzZWRfZXZlbnRzKSB7XG44MDA3Olx0XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpIHtcbjgwMDg6XHRcdFx0XHRzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqZHBhZ2UgPSByZWFkZXItXHUwMDNlcGFnZTtcbjgwMDk6XHRcdFx0XHR1bnNpZ25lZCBpbnQgY29tbWl0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTAxCgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBSaW5nIEJ1ZmZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBkaWZmIHJlbGF0ZWQgdG8gYHJiX2dldF9yZWFkZXJfcGFnZWAuIEJlZm9yZSwgdGhlcmUgd2FzIGEgc2ltcGxlIGBXQVJOX09OKCFyZWFkZXIpYCBhZnRlciB0aGUgY2FsbC4gTm93LCB0aGF0JiMzOTtzIGJlZW4gcmVwbGFjZWQgd2l0aCBhbiBgaWYgKCFyZWFkZXIpYCBjaGVjayB0aGF0IGluY2x1ZGVzIGEgYFdBUk5fT04oY3B1X2J1ZmZlci0mZ3Q7cmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci0mZ3Q7Y29tbWl0X3BhZ2UpYCAqb25seSogaWYgYHJlYWRlcmAgaXMgTlVMTC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aHkgdGhlIGNoYW5nZT8gQWgsIHJpZ2h0LCB0aGUgZXhwbGFuYXRpb24gY2xhcmlmaWVzIHRoYXQgYHJiX2dldF9yZWFkZXJfcGFnZWAgY2FuIHJldHVybiBOVUxMIGlmIHRoZSB3cml0ZXIgaXMgY2F1Z2h0IHVwIG9yIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gcmVhZC4gVGhlIG9yaWdpbmFsIGBXQVJOX09OYCB3YXMgdW5jb25kaXRpb25hbCwgc28gaXQmIzM5O2QgdHJpZ2dlciBldmVuIGluIHRoZXNlIGxlZ2l0aW1hdGUgTlVMTCBzY2VuYXJpb3MuIFRoaXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgc2VlbXMgdG8gYmUgYW4gYXR0ZW1wdCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzLCBvbmx5IHdhcm5pbmcgaWYgdGhlIHJlYWRlciBhbmQgY29tbWl0IHBhZ2VzIGFyZSAqZGlmZmVyZW50KiB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuIEVzc2VudGlhbGx5LCB0aGV5IGFyZSB0cnlpbmcgdG8gZml4IGEgc3B1cmlvdXMgd2FybmluZy4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSBmb3IgcG90ZW50aWFsIHJpc2tzLiBMZXQmIzM5O3MgY29uc2lkZXIgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsd2F5cyB0aGUgZmlyc3QgY29uc2lkZXJhdGlvbiwgYW5kIGNvcHktdG8tdXNlciBpc3N1ZXMuCgoqICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucy4gR29vZC4KKiAgIE5vIG5ldyBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucy4gRmluZS4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGludm9sdmVkIGluIGJyYW5jaGluZyBvciBhbnkgbG9naWMuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KKiAgIFRoZSBjaGFuZ2UgaXMgKnNvbGVseSogcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCB3aXRoIGFuIGlmIHN0YXRlbWVudCBndWFyZGluZyB0aGUgbmV3IHdhcm5pbmcuIE5vdGhpbmcgaXMgYmVpbmcgZXhwb3NlZCBvciByZWFkLgoKR2l2ZW4gdGhlc2UgcG9pbnRzLCB0aGlzIGxvb2tzIHNhZmUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBlcnJvciBjaGVja2luZyB0byBiZSBtb3JlIGFjY3VyYXRlLiBObyBLTVNBTiBpcyBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgdGVzdGluZyB3aWxsIHN1ZmZpY2UuIEl0IHNlZW1zIHRvIGJlIGEgbWlub3IgY2xlYW4tdXAsIGZpeGluZyBhIHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZS4KCkFscmlnaHQsIEkgYW0gc2F0aXNmaWVkLiBMZXQmIzM5O3MgZ2V0IHRoZSBjYWxsIHJlYWR5LCBhbmQgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3Ivd2FybmluZyBjb25kaXRpb24gaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKClgIHdoZW4gYHJiX2dldF9yZWFkZXJfcGFnZSgpYCByZXR1cm5zIE5VTEwuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IHRyaWdnZXJpbmcgYFdBUk5fT04oIXJlYWRlcilgLCBpdCBub3cgb25seSB3YXJucyBpZiBgY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGRhdGEgc3RydWN0dXJlcyBvciBzdHJ1Y3QgcGFkZGluZywgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3Ivd2FybmluZyBjb25kaXRpb24gaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKClgIHdoZW4gYHJiX2dldF9yZWFkZXJfcGFnZSgpYCByZXR1cm5zIE5VTEwuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IHRyaWdnZXJpbmcgYFdBUk5fT04oIXJlYWRlcilgLCBpdCBub3cgb25seSB3YXJucyBpZiBgY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGRhdGEgc3RydWN0dXJlcyBvciBzdHJ1Y3QgcGFkZGluZywgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM2OjU5LjQ4MDYyNTk1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjg5NTYxNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQUNJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlclwiLFxuICAgIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgICBcInJiX2dldF9yZWFkZXJfcGFnZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yL3dhcm5pbmcgY29uZGl0aW9uIGluIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpYCB3aGVuIGByYl9nZXRfcmVhZGVyX3BhZ2UoKWAgcmV0dXJucyBOVUxMLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSB0cmlnZ2VyaW5nIGBXQVJOX09OKCFyZWFkZXIpYCwgaXQgbm93IG9ubHkgd2FybnMgaWYgYGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNjo1OS40ODA2Mzk1MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTY2MDc3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZjQ4YzM5ZjYwOWI3YzViNTA3MDhlZjcwYWI2YjAwOGJiNTI0YjI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTI6MzY6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xcbmluZGV4IDljMDNhNTU1YTZiYTIuLjk4MTMwMTgyZTA1ZGYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xcbkBAIC03OTk1LDggKzc5OTUsMTAgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XFxuLVxcdGlmIChXQVJOX09OKCFyZWFkZXIpKVxcbitcXHRpZiAoIXJlYWRlcikge1xcbitcXHRcXHRXQVJOX09OKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXFxuIFxcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVxcdTAwM2Vsb3N0X2V2ZW50cztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MDEuMTk4MjYxMzE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1ODQwMTA0NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFDSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJcIixcbiAgICBcInRyYWNpbmdfYnVmZmVyc19pb2N0bFwiLFxuICAgIFwicmluZ19idWZmZXJfbWFwXCIsXG4gICAgXCJyYl9nZXRfcmVhZGVyX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNmNDhjMzlmNjA5YjdjNWI1MDcwOGVmNzBhYjZiMDA4YmI1MjRiMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEyOjM2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuaW5kZXggOWMwM2E1NTVhNmJhMi4uOTgxMzAxODJlMDVkZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG4rKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuQEAgLTc5OTUsOCArNzk5NSwxMCBAQCBpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTtcbi1cdGlmIChXQVJOX09OKCFyZWFkZXIpKVxuK1x0aWYgKCFyZWFkZXIpIHtcbitcdFx0V0FSTl9PTihjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXG4gXHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cdTAwM2Vsb3N0X2V2ZW50cztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjAxLjE5ODI2MzcxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0NDI3MDU5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSaW5nIEJ1ZmZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgYW5kIHBpbnBvaW50IGV4YWN0bHkgd2hhdCdzIGJlaW5nIHRvdWNoZWQgd2l0aGluIHRoZSBrZXJuZWwncyBjb2RlLiBSaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIHVwZGF0ZSBjZW50ZXJzIGFyb3VuZCBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoaXMgY2hhbmdlLlxuXG5Ob3csIEknbGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gSSB3YW50IHRvIHNlZSBpdHMgZGVmaW5pdGlvbiwgaXRzIGltbWVkaWF0ZSBjYWxsZXJzLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIG9mIHRoZSByaW5nIGJ1ZmZlciBtZWNoYW5pc20uIFNlZWluZyB0aGUgcmVsYXRpb25zaGlwcyBhbmQgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIGFyZWEgb2YgdGhlIGtlcm5lbCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3QgYW5kIGludGVudCBvZiB0aGUgY2hhbmdlLiBUaGlzIGluaXRpYWwgZXhwbG9yYXRpb24gd2lsbCBpbmZvcm0gdGhlIGRpcmVjdGlvbiBvZiBteSBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjEwLjY0MDk3MTgwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTgwOlxcdFxcdHJlYWRlcl9zaXplID0gcmJfcGFnZV9zaXplKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlKTtcXG43OTgxOlxcdFxcbjc5ODI6XFx0XFx0LypcXG43OTgzOlxcdFxcdCAqIFRoZXJlIGFyZSBkYXRhIHRvIGJlIHJlYWQgb24gdGhlIGN1cnJlbnQgcmVhZGVyIHBhZ2UsIHdlIGNhblxcbjc5ODQ6XFx0XFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIuIEJ1dCBiZWZvcmUgdGhhdCwgd2UgYXNzdW1lIHRoZSBsYXR0ZXIgd2lsbCByZWFkXFxuNzk4NTpcXHRcXHQgKiBldmVyeXRoaW5nLiBMZXQncyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXFxuNzk4NjpcXHRcXHQgKi9cXG43OTg3OlxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZS1cXHUwMDNlcmVhZCBcXHUwMDNjIHJlYWRlcl9zaXplKSB7XFxuNzk4ODpcXHRcXHRcXHR3aGlsZSAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSlcXG43OTg5OlxcdFxcdFxcdFxcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xcbjc5OTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuNzk5MTpcXHRcXHR9XFxuNzk5MjpcXHRcXG43OTkzOlxcdFxcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cXG43OTk0OlxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSA9PSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSlcXG43OTk1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTY6XFx0XFxuNzk5NzpcXHRcXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XFxuNzk5ODpcXHRcXHRpZiAoIXJlYWRlcikge1xcbjc5OTk6XFx0XFx0XFx0V0FSTl9PTihjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSk7XFxuODAwMDpcXHRcXHRcXHRnb3RvIG91dDtcXG44MDAxOlxcdFxcdH1cXG44MDAyOlxcdFxcbjgwMDM6XFx0XFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cXG44MDA0OlxcdFxcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVxcdTAwM2Vsb3N0X2V2ZW50cztcXG44MDA1OlxcdFxcbjgwMDY6XFx0XFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcXG44MDA3OlxcdFxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSkge1xcbjgwMDg6XFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmRwYWdlID0gcmVhZGVyLVxcdTAwM2VwYWdlO1xcbjgwMDk6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvbW1pdDtcXG44MDEwOlxcdFxcdFxcdFxcdC8qXFxuODAxMTpcXHRcXHRcXHRcXHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxcbjgwMTI6XFx0XFx0XFx0XFx0ICogVGhpcyBnaXZlcyB1cyBhIGNoYW5jZSB0byBzdG9yZSB0aGUgbG9zdCBldmVudHNcXG44MDEzOlxcdFxcdFxcdFxcdCAqIG9uIHRoZSBwYWdlLlxcbjgwMTQ6XFx0XFx0XFx0XFx0ICovXFxuODAxNTpcXHRcXHRcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VyZWFsX2VuZClcXG44MDE2OlxcdFxcdFxcdFxcdFxcdGxvY2FsX3NldChcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCwgcmVhZGVyLVxcdTAwM2VyZWFsX2VuZCk7XFxuODAxNzpcXHRcXHRcXHRcXHQvKlxcbjgwMTg6XFx0XFx0XFx0XFx0ICogSWYgdGhlcmUgaXMgcm9vbSBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlIHRvIHNhdmUgdGhlXFxuODAxOTpcXHRcXHRcXHRcXHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cXG44MDIwOlxcdFxcdFxcdFxcdCAqL1xcbjgwMjE6XFx0XFx0XFx0XFx0Y29tbWl0ID0gcmJfcGFnZV9zaXplKHJlYWRlcik7XFxuODAyMjpcXHRcXHRcXHRcXHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFxcdTAwM2U9IHNpemVvZihtaXNzZWRfZXZlbnRzKSkge1xcbjgwMjM6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZkcGFnZS1cXHUwMDNlZGF0YVtjb21taXRdLCBcXHUwMDI2bWlzc2VkX2V2ZW50cyxcXG44MDI0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YobWlzc2VkX2V2ZW50cykpO1xcbjgwMjU6XFx0XFx0XFx0XFx0XFx0bG9jYWxfYWRkKFJCX01JU1NFRF9TVE9SRUQsIFxcdTAwMjZkcGFnZS1cXHUwMDNlY29tbWl0KTtcXG44MDI2OlxcdFxcdFxcdFxcdH1cXG44MDI3OlxcdFxcdFxcdFxcdGxvY2FsX2FkZChSQl9NSVNTRURfRVZFTlRTLCBcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCk7XFxuODAyODpcXHRcXHRcXHR9IGVsc2UgaWYgKCFXQVJOX09OQ0UoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNldGFpbF9wYWdlLFxcbjgwMjk6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlJlYWRlciBvbiBjb21taXQgd2l0aCAlbGQgbWlzc2VkIGV2ZW50c1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjEwLjY0MTk2MDc0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDc2NzUzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgQ2FsbHNpdGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgaXMgYmVpbmcgKnVzZWQqIGluIHRoaXMgY29kZWJhc2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLiAgSSB3YW50IHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIGl0LiBLbm93aW5nIHRoZSBjb250ZXh0IHdpbGwgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhcmdlciBkZXNpZ24uIEFtIEkgbG9va2luZyBhdCBhIGNyaXRpY2FsIHBhdGg/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgcmVsYXRlZCB0byBob3cgcmVhZGVycyBhcmUgYWNxdWlyZWQ/IEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIGFuc3dlcmluZyBhbGwgdGhvc2UgcXVlc3Rpb25zIGFuZCByZWFsbHkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlLiBMZXQncyBzZWUgd2hhdCB0aGUgSURFIG9yIG15IGdyZXAvZmluZCB1dGlsaXR5IHR1cm5zIHVwLiBUaGlzIGNhbGxzaXRlIGFuYWx5c2lzIGlzIHRoZSBseW5jaHBpbiB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MTIuNjg5NjM5NDkyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODY1NjE3MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oPTI1ND1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTtcXG5pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmg6MjU1OmludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpO1xcbmluY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaC0yNTYtXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz03OTI3PWludCByaW5nX2J1ZmZlcl91bm1hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYxLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc5NjI6aW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYzLXtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTczNjU9c3RhdGljIGxvbmcgdHJhY2luZ19idWZmZXJzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTczODAtXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzM4MTpcXHRcXHRyZXR1cm4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIsXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgIGl0ZXItXFx1MDAzZWNwdV9maWxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MTQuOTc2MjA4Nzc0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NDA4MDE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIGB0cmFjZS5jYCBpb2N0bCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBjb250cm9sIGludGVyZmFjZS4gTGV0J3MgaGVhZCBzdHJhaWdodCB0byBga2VybmVsL3RyYWNlL3RyYWNlLmNgLiBJIGV4cGVjdCB0aGUgYGlvY3RsYCBjYWxscyBpbiBoZXJlIHdpbGwgYmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHdoZXJlIHdlIGNvbmZpZ3VyZSwgZW5hYmxlLCBkaXNhYmxlLCBhbmQgcmV0cmlldmUgZGF0YSBmcm9tIHRoZSB0cmFjZXBvaW50cy4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGV5J3ZlIHN0cnVjdHVyZWQgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZy4gQXJlIHRoZXkgdXNpbmcgYSBzd2l0Y2ggc3RhdGVtZW50PyBXaGF0IGtpbmQgb2YgYXJndW1lbnRzIGFyZSB0aGV5IGV4cGVjdGluZz8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQga2luZCBvZiBzZWN1cml0eSBjaGVja3MgYXJlIHRoZXkgaW1wbGVtZW50aW5nPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1c2VyLXByb3ZpZGVkIGRhdGEgcGFzc2VkIHZpYSB0aGUgaW9jdGwgbnVtYmVycyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBhcmd1bWVudHMsIHNvIEknbGwgYmUgbWV0aWN1bG91c2x5IGNoZWNraW5nIGhvdyB0aG9zZSBhcmd1bWVudHMgYXJlIHZhbGlkYXRlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHJlbHlpbmcgb24gc3RyaWN0IHR5cGUgY2hlY2tpbmcsIHJhbmdlIHZhbGlkYXRpb24sIG9yIG1heWJlIGV2ZW4gc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGNhcGFiaWxpdHkgY2hlY2tzLiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIGdhdGV3YXkgZm9yIGFsbCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNpbmcgc3lzdGVtLCBhbmQgd2hlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSBsb29waG9sZXMgYXJlIGxpa2VseSB0byBiZSBmb3VuZC4gTGV0J3Mgc2VlIGlmIHRoZWlyIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBlbm91Z2gsIG9yIGlmIGl0IG9wZW5zIHRoZSBkb29yIHRvIGFueSBkZW5pYWwtb2Ytc2VydmljZSBvciBldmVuIHByaXZpbGVnZSBlc2NhbGF0aW9uIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzoxNy41NzAyOTEwOTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzM2NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzM2NTpcXHRzdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbjczNjY6XFx0e1xcbjczNjc6XFx0XFx0c3RydWN0IGZ0cmFjZV9idWZmZXJfaW5mbyAqaW5mbyA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG43MzY4OlxcdFxcdHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyO1xcbjczNjk6XFx0XFx0aW50IGVycjtcXG43MzcwOlxcdFxcbjczNzE6XFx0XFx0aWYgKGNtZCA9PSBUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVIpIHtcXG43MzcyOlxcdFxcdFxcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKSkge1xcbjczNzM6XFx0XFx0XFx0XFx0ZXJyID0gcmluZ19idWZmZXJfd2FpdChpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcixcXG43Mzc0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpdGVyLVxcdTAwM2VjcHVfZmlsZSxcXG43Mzc1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpdGVyLVxcdTAwM2V0ci1cXHUwMDNlYnVmZmVyX3BlcmNlbnQsXFxuNzM3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTlVMTCwgTlVMTCk7XFxuNzM3NzpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjczNzg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43Mzc5OlxcdFxcdFxcdH1cXG43MzgwOlxcdFxcbjczODE6XFx0XFx0XFx0cmV0dXJuIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLFxcbjczODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpdGVyLVxcdTAwM2VjcHVfZmlsZSk7XFxuNzM4MzpcXHRcXHR9IGVsc2UgaWYgKGNtZCkge1xcbjczODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuNzM4NTpcXHRcXHR9XFxuNzM4NjpcXHRcXG43Mzg3OlxcdFxcdC8qXFxuNzM4ODpcXHRcXHQgKiBBbiBpb2N0bCBjYWxsIHdpdGggY21kIDAgdG8gdGhlIHJpbmcgYnVmZmVyIGZpbGUgd2lsbCB3YWtlIHVwIGFsbFxcbjczODk6XFx0XFx0ICogd2FpdGVyc1xcbjczOTA6XFx0XFx0ICovXFxuNzM5MTpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNnRyYWNlX3R5cGVzX2xvY2spO1xcbjczOTI6XFx0XFxuNzM5MzpcXHRcXHQvKiBNYWtlIHN1cmUgdGhlIHdhaXRlcnMgc2VlIHRoZSBuZXcgd2FpdF9pbmRleCAqL1xcbjczOTQ6XFx0XFx0KHZvaWQpYXRvbWljX2ZldGNoX2luY19yZWxlYXNlKFxcdTAwMjZpdGVyLVxcdTAwM2V3YWl0X2luZGV4KTtcXG43Mzk1OlxcdFxcbjczOTY6XFx0XFx0cmluZ19idWZmZXJfd2FrZV93YWl0ZXJzKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLCBpdGVyLVxcdTAwM2VjcHVfZmlsZSk7XFxuNzM5NzpcXHRcXG43Mzk4OlxcdFxcdHJldHVybiAwO1xcbjczOTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzoxNy41NzA4OTM1ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjA4MDk4NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyByaW5nIGJ1ZmZlciBtbWFwIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5LiBUaW1lIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBhbmQgbGlzdCBvdXQgdGhlIGxpa2VseSBjYW5kaWRhdGVzLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYXNwZWN0cyBvZiB0aGUgZnVuY3Rpb25hbGl0eSBuZWVkIHRvIGJlIGNvbmZpZ3VyYWJsZSBhbmQgaG93IGJlc3QgdG8gZXhwb3NlIHRob3NlIGtub2JzIHRvIHRoZSB1c2VyLiBJJ2xsIHN0YXJ0IGJ5IGxpc3Rpbmcgd2hhdCBzZWVtcyBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGVuLCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdmFyaW91cyBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMgYW5kIHRoZSBpbXBhY3QgdGhvc2UgY2hvaWNlcyBoYXZlIG9uIHRoZSBkZXNpZ24sIHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjAuNzc4OTk0ODg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTE5MDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc4MzM9c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03ODM5LVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc4NDA6aW50IHJpbmdfYnVmZmVyX21hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzg0MS1cXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTA5LSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc5MTA6dm9pZCByaW5nX2J1ZmZlcl9tYXBfZHVwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTExLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc5Mjc9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjEtXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzk2MjppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjMte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzM2NT1zdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4MC1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3MzgxOlxcdFxcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcixcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgyLVxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlci1cXHUwMDNlY3B1X2ZpbGUpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQwNT1zdGF0aWMgdm9pZCB0cmFjaW5nX2J1ZmZlcnNfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQwOS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDEwOlxcdHJpbmdfYnVmZmVyX21hcF9kdXAoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIsIGl0ZXItXFx1MDAzZWNwdV9maWxlKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDExLX1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0Mzc9c3RhdGljIGludCB0cmFjaW5nX2J1ZmZlcnNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUwLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc0NTE6XFx0cmV0ID0gcmluZ19idWZmZXJfbWFwKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLCBpdGVyLVxcdTAwM2VjcHVfZmlsZSwgdm1hKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUyLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjIwLjg0NDE5MzI0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc4Mjk4Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIFRyYWNlIEluc3RydW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsJ3MgdHJhY2luZyBjYXBhYmlsaXRpZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IGhvdyB0aGluZ3MgYXJlIHB1dCB0b2dldGhlciBmb3IgdGhlIGBrZXJuZWwvdHJhY2VgIHN1YnN5c3RlbS4gSSdtIHN0YXJ0aW5nIHdpdGggYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeTsgaXQncyB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIGhvdyB0aGUgdHJhY2luZyBmdW5jdGlvbmFsaXR5IGdldHMgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIEFmdGVyIHRoYXQsIEknbSBtb3Zpbmcgb24gdG8gYHJpbmdfYnVmZmVyLmNgLiBJIGV4cGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHRoZSByaW5nIGJ1ZmZlciwgd2hpY2ggaXMgYSBjcnVjaWFsIGNvbXBvbmVudCBmb3IgdHJhY2UgZGF0YSBzdG9yYWdlLCByZXNpZGVzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGl0cyBkZXNpZ24sIHNwZWNpZmljYWxseSBob3cgaXQncyBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeSBpbiBhIGtlcm5lbCBjb250ZXh0LiBJIHN1c3BlY3QgdGhlIE1ha2VmaWxlIHdpbGwgcmVmZXJlbmNlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjIuOTIyNDk0NzIxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU5NTk0NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmluZ19idWZmZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICs9IGxpYmZ0cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gcmluZ19idWZmZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSArPSByaW5nX2J1ZmZlcl9iZW5jaG1hcmsub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEzMz1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFKSArPSB0cmFjZV9yZW1vdGUub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMzQ6b2JqLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgKz0gc2ltcGxlX3JpbmdfYnVmZmVyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEVfVEVTVCkgKz0gcmVtb3RlX3Rlc3Qub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTE2MT0kKG9iaikvJS5vLmNoZWNrZWQ6ICQob2JqKS8lLm8gJChvYmopL3VuZGVmc3ltc19iYXNlLm8gRk9SQ0VcXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjMtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjE2NDphbHdheXMtJChDT05GSUdfU0lNUExFX1JJTkdfQlVGRkVSKSArPSBzaW1wbGVfcmluZ19idWZmZXIuby5jaGVja2VkXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTE2NS1cXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTExMTc9X19wb2xsX3QgcmluZ19idWZmZXJfcG9sbF93YWl0KHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSxcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTExNzktXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6MTE4MDovKiBidWZmZXIgbWF5IGJlIGVpdGhlciByaW5nX2J1ZmZlciBvciByaW5nX2J1ZmZlcl9wZXJfY3B1ICovXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtMTE4MS0jZGVmaW5lIFJCX1dBUk5fT04oYiwgY29uZClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NDE0PUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGVfY3B1KTtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MTYtLyoqXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQxNzogKiByaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHMgLSBnZXQgdGhlIG9sZGVzdCBldmVudCB0aW1lc3RhbXAgZnJvbSB0aGUgYnVmZmVyXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQxOC0gKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXJcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MjAtICovXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQyMTp1NjQgcmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDIyLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0NDYtfVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0NDc6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKTtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDQ4LVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NTQ4NT1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDg3LS8qKlxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0ODg6ICogcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBjYXVzZWQgYnkgdGhlIHJpbmdcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDg5LSAqIGJ1ZmZlciB3cmFwcGluZyBhcm91bmQgKG9ubHkgaWYgUkJfRkxfT1ZFUldSSVRFIGlzIG9uKS5cXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0OTItICovXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQ5Mzp1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDk0LXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1MDUtfVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU1MDY6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1MDctXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NTkyPUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VudHJpZXMpO1xcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTU5NC0vKipcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NTk1OiAqIHJpbmdfYnVmZmVyX292ZXJydW5zIC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTU5Ni0gKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXJcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MDAtICovXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTYwMTp1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5zKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlcilcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjAyLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MTQtfVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU2MTU6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bnMpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MTYtXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmM9MjMyPXN0YXRpYyB2b2lkIHJpbmdfYnVmZmVyX3Byb2R1Y2VyKHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmMtMzAxLVxcdGVudHJpZXMgPSByaW5nX2J1ZmZlcl9lbnRyaWVzKGJ1ZmZlcik7XFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jOjMwMjpcXHRvdmVycnVucyA9IHJpbmdfYnVmZmVyX292ZXJydW5zKGJ1ZmZlcik7XFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jLTMwMy1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTI4MjI9Z2V0X3RvdGFsX2VudHJpZXNfY3B1KHN0cnVjdCBhcnJheV9idWZmZXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqdG90YWwsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0yODM4LVxcdFxcdCp0b3RhbCA9IGNvdW50ICtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzoyODM5OlxcdFxcdFxcdHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KGJ1Zi1cXHUwMDNlYnVmZmVyLCBjcHUpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5jLTI4NDAtXFx0KmVudHJpZXMgPSBjb3VudDtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTMzNjc9X190cmFjaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGJvb2wgc25hcHNob3QpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0zNDMwLVxcdC8qIEFubm90YXRlIHN0YXJ0IG9mIGJ1ZmZlcnMgaWYgd2UgaGFkIG92ZXJydW5zICovXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6MzQzMTpcXHRpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIpKVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTM0MzItXFx0XFx0aXRlci1cXHUwMDNlaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0FOTk9UQVRFO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQ3Mj10cmFjaW5nX3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQ5Mi1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDkzOlxcdGNudCA9IHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHRyYWNlX2J1Zi1cXHUwMDNlYnVmZmVyLCBjcHUpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0OTQtXFx0dHJhY2Vfc2VxX3ByaW50ZihzLCBcXFwib3ZlcnJ1bjogJWxkXFxcXG5cXFwiLCBjbnQpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUwMy1cXHRcXHQvKiBsb2NhbCBvciBnbG9iYWwgZm9yIHRyYWNlX2Nsb2NrICovXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzUwNDpcXHRcXHR0ID0gbnMydXNlY3MocmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHRyYWNlX2J1Zi1cXHUwMDNlYnVmZmVyLCBjcHUpKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTA1LVxcdFxcdHVzZWNfcmVtID0gZG9fZGl2KHQsIFVTRUNfUEVSX1NFQyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NTE0LVxcdFxcdHRyYWNlX3NlcV9wcmludGYocywgXFxcIm9sZGVzdCBldmVudCB0czogJWxsdVxcXFxuXFxcIixcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NTE1OlxcdFxcdFxcdFxcdHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyh0cmFjZV9idWYtXFx1MDAzZWJ1ZmZlciwgY3B1KSk7XFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUxNi1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTkzNzg9c3RhdGljIHZvaWQgdHJhY2VfaW5pdF9pdGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgc3RydWN0IHRyYWNlX2FycmF5ICp0cilcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTkzODgtXFx0LyogQW5ub3RhdGUgc3RhcnQgb2YgYnVmZmVycyBpZiB3ZSBoYWQgb3ZlcnJ1bnMgKi9cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo5Mzg5OlxcdGlmIChyaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcikpXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtOTM5MC1cXHRcXHRpdGVyLVxcdTAwM2VpdGVyX2ZsYWdzIHw9IFRSQUNFX0ZJTEVfQU5OT1RBVEU7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmM9MTIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X292ZXJydW5zKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcilcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYy0xMjItXFx0dW5zaWduZWQgbG9uZyBjbnQgPSBhdG9taWNfeGNoZyhcXHUwMDI2ZHJvcHBlZF9jb3VudCwgMCk7XFxua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jOjEyMzpcXHR1bnNpZ25lZCBsb25nIG92ZXIgPSByaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcik7XFxua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jLTEyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjMuMDM4NDYyMzkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTY2MzM2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgS2NvbmZpZ2AgZm9yIFByZWNpc2UgVHJhY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlICpleGFjdCogY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBObyByb29tIGZvciBhbWJpZ3VpdHkgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGRldGFpbHMgSSBuZWVkIGFyZSBnb2luZyB0byBiZSBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgLiBJdCdzIHRoZSBjZW50cmFsIHBsYWNlIGZvciBhbGwgdGhpbmdzIHRyYWNlLXJlbGF0ZWQsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIHN0YXJ0IHRoZXJlLiBJJ20gdGhpbmtpbmcgdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcywgYW55IG9wdGlvbmFsIGZlYXR1cmVzIHRoYXQgbWlnaHQgYmUgaW50ZXJ0d2luZWQsIGFuZCB0aGUgdW5kZXJseWluZyBidWlsZCBmbGFncyAtIGl0J3MgYWxsIGluIHRoYXQgZmlsZS4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhlc2UgY29uZmlnIGRldGFpbHMgc28gSSBkb24ndCBtaXNzIGFueXRoaW5nLiBUaGlzIGlzIGFsbCBhYm91dCBwcmVjaXNpb24gYW5kIG1ha2luZyBzdXJlIGl0IGJ1aWxkcyBhcyBleHBlY3RlZCBhbmQgZnVuY3Rpb25zIGFzIGRlc2lyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzoyNS4wOTUwOTg4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxMjU2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJJTkdfQlVGRkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNDE9Y29uZmlnIFRSQUNFX0NMT0NLXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNDMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTQ0OmNvbmZpZyBSSU5HX0JVRkZFUlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE0NS1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xNTQ9Y29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTU2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE1Nzpjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE1OC1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz05ODc9Y29uZmlnIFRSQUNFUE9JTlRfQkVOQ0hNQVJLXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDE2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwMTc6Y29uZmlnIFJJTkdfQlVGRkVSX0JFTkNITUFSS1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwMTgtXFx0dHJpc3RhdGUgXFxcIlJpbmcgYnVmZmVyIGJlbmNobWFyayBzdHJlc3MgdGVzdGVyXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTA4Nj1jb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA5OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDk5OmNvbmZpZyBSSU5HX0JVRkZFUl9SRUNPUkRfUkVDVVJTSU9OXFxua2VybmVsL3RyYWNlL0tjb25maWctMTEwMC1cXHRib29sIFxcXCJSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiB0aGUgcmluZyBidWZmZXJcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTYwPWNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1RcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNzMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTE3NDpjb25maWcgUklOR19CVUZGRVJfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE3NS0gICAgICAgYm9vbCBcXFwiUmluZyBidWZmZXIgc3RhcnR1cCBzZWxmIHRlc3RcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTk2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExOTc6Y29uZmlnIFJJTkdfQlVGRkVSX1ZBTElEQVRFX1RJTUVfREVMVEFTXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE5OC1cXHRib29sIFxcXCJWZXJpZnkgcmluZyBidWZmZXIgdGltZSBzdGFtcCBkZWx0YXNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMjE2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEyMTc6Y29uZmlnIFJJTkdfQlVGRkVSX1BFUlNJU1RFTlRfSU5KRUNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTIxOC1cXHRib29sIFxcXCJFbmFibGUgcGVyc2lzdGVudCByaW5nIGJ1ZmZlciBlcnJvciBpbmplY3Rpb24gdGVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjUuMTYxMjI5ODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNzk4MDgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIGBSSU5HX0JVRkZFUmAgdmVyc3VzIGBUUkFDSU5HYC4gVGhlIHByb2JsZW0gbW9zdCBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIFRyYWNlIE1lY2hhbmlzbXMqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZS4gSSdsbCBmb2N1cyBhcm91bmQgbGluZSAxNDQgb2YgdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGNvbmRpdGlvbmFscywgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhlIGtlcm5lbCBidWlsZHMgd2l0aCB0aGUgcmluZyBidWZmZXIgdHJhY2UgbWVjaGFuaXNtLCBvciB3aXRoIGFuIGFsdGVybmF0aXZlIHRyYWNpbmcgbWVjaGFuaXNtLiBJJ20gbG9va2luZyBmb3IgYSBjbGVhciBpbmRpY2F0aW9uIG9mICp3aHkqIG9uZSBpcyBwcmVmZXJyZWQgb3ZlciB0aGUgb3RoZXIsIG9yIGlmIHRoZXkgY2FuIGV2ZW4gYmUgc2VsZWN0ZWQgaW5kZXBlbmRlbnRseS4gSSdtIGV4cGVjdGluZyBzb21lIEtjb25maWcgbWFnaWMgLSBwZXJoYXBzIGEgYHNlbGVjdGAsIGBkZXBlbmRzIG9uYCwgb3IgZXZlbiBhbiBgaWZgIHN0YXRlbWVudC4gSSBuZWVkIHRvIHNlZSB3aGF0IGZhY3RvcnMgYXJlIGluZmx1ZW5jaW5nIHRoYXQgY2hvaWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjcuNDg5MjEzMzg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0Y29uZmlnIEJVSUxEVElNRV9NQ09VTlRfU09SVFxcbiAxMzE6XFx0ICAgICAgIGJvb2xcXG4gMTMyOlxcdCAgICAgICBkZWZhdWx0IHlcXG4gMTMzOlxcdCAgICAgICBkZXBlbmRzIG9uIEhBVkVfQlVJTERUSU1FX01DT1VOVF9TT1JUIFxcdTAwMjZcXHUwMDI2IERZTkFNSUNfRlRSQUNFXFxuIDEzNDpcXHQgICAgICAgaGVscFxcbiAxMzU6XFx0ICAgICAgICAgU29ydCB0aGUgbWNvdW50X2xvYyBzZWN0aW9uIGF0IGJ1aWxkIHRpbWUuXFxuIDEzNjpcXHRcXG4gMTM3OlxcdGNvbmZpZyBUUkFDRVJfTUFYX1RSQUNFXFxuIDEzODpcXHRcXHRib29sXFxuIDEzOTpcXHRcXHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UXFxuIDE0MDpcXHRcXG4gMTQxOlxcdGNvbmZpZyBUUkFDRV9DTE9DS1xcbiAxNDI6XFx0XFx0Ym9vbFxcbiAxNDM6XFx0XFxuIDE0NDpcXHRjb25maWcgUklOR19CVUZGRVJcXG4gMTQ1OlxcdFxcdGJvb2xcXG4gMTQ2OlxcdFxcdHNlbGVjdCBUUkFDRV9DTE9DS1xcbiAxNDc6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDE0ODpcXHRcXG4gMTQ5OlxcdGNvbmZpZyBFVkVOVF9UUkFDSU5HXFxuIDE1MDpcXHRcXHRzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXFxuIDE1MTpcXHRcXHRzZWxlY3QgR0xPQlxcbiAxNTI6XFx0XFx0Ym9vbFxcbiAxNTM6XFx0XFxuIDE1NDpcXHRjb25maWcgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXFxuIDE1NTpcXHRcXHRib29sXFxuIDE1NjpcXHRcXG4gMTU3OlxcdGNvbmZpZyBSSU5HX0JVRkZFUl9BTExPV19TV0FQXFxuIDE1ODpcXHRcXHRib29sXFxuIDE1OTpcXHRcXHRoZWxwXFxuIDE2MDpcXHRcXHQgQWxsb3cgdGhlIHVzZSBvZiByaW5nX2J1ZmZlcl9zd2FwX2NwdS5cXG4gMTYxOlxcdFxcdCBBZGRzIGEgdmVyeSBzbGlnaHQgb3ZlcmhlYWQgdG8gdHJhY2luZyB3aGVuIGVuYWJsZWQuXFxuIDE2MjpcXHRcXG4gMTYzOlxcdGNvbmZpZyBQUkVFTVBUSVJRX1RSQUNFUE9JTlRTXFxuIDE2NDpcXHRcXHRib29sXFxuIDE2NTpcXHRcXHRkZXBlbmRzIG9uIFRSQUNFX1BSRUVNUFRfVE9HR0xFIHx8IFRSQUNFX0lSUUZMQUdTXFxuIDE2NjpcXHRcXHRzZWxlY3QgVFJBQ0lOR1xcbiAxNjc6XFx0XFx0ZGVmYXVsdCB5XFxuIDE2ODpcXHRcXHRoZWxwXFxuIDE2OTpcXHRcXHQgIENyZWF0ZSBwcmVlbXB0L2lycSB0b2dnbGUgdHJhY2Vwb2ludHMgaWYgbmVlZGVkLCBzbyB0aGF0IG90aGVyIHBhcnRzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjI3LjQ4OTQxOTA2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODM3NDE2OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsaW5nIHRyYWNpbmcgZmVhdHVyZXMgd2l0aGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgSSBzaG91bGQgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgc3VzcGVjdHM6IGBDT05GSUdfVFJBQ0lOR2Agb3IgYENPTkZJR19GVFJBQ0VgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIGZsYWdzIHRoYXQgY29udHJvbCB0aGUgY29yZSB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIHNwZWNpZmljIEtjb25maWcgc3ltYm9scywgYW5kIHNlZSB3aGVyZSB0aGV5J3JlIGRlZmluZWQgYW5kIGhvdyB0aGV5J3JlIHJlbGF0ZWQgdG8gb3RoZXIgb3B0aW9ucy4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk3NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MjkuMzI2ODM3ODQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3OTYzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFJJTkdfQlVGRkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNzk9Y29uZmlnIFRSQUNJTkdcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xODAtXFx0Ym9vbFxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE4MTpcXHRzZWxlY3QgUklOR19CVUZGRVJcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xODItXFx0c2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz00MjE9Y29uZmlnIElSUVNPRkZfVFJBQ0VSXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00MjctXFx0c2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo0Mjg6XFx0c2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00MjktXFx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVBcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTQ0ND1jb25maWcgUFJFRU1QVF9UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ0OS1cXHRzZWxlY3QgVFJBQ0VSX01BWF9UUkFDRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjQ1MDpcXHRzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ1MS1cXHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NjMxPWNvbmZpZyBUUkFDRVJfU05BUFNIT1RfUEVSX0NQVV9TV0FQXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy02MzMtXFx0ZGVwZW5kcyBvbiBUUkFDRVJfU05BUFNIT1RcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo2MzQ6XFx0c2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy02MzUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzoyOS40NDI2MzkyNzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4NTk3ODYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBUcmFjaW5nIE9wdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIHRoZSBtbWFwIGludGVyZmFjZSBmb3IgdGhlIHRyYWNlZnMvZGVidWdmcyB0cmFjaW5nIGJ1ZmZlci4gSXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGVpdGhlciBgQ09ORklHX0ZUUkFDRWAgb3IgYENPTkZJR19UUkFDSU5HYC4gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBzZWUgd2hpY2ggb25lJ3MgdGhlIGtleS4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGJ5IGdyZXBwaW5nIGZvciBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBvciBgdHJhY2luZ19idWZmZXJzX2ZvcHNgLiBUaGF0IHNob3VsZCBwaW5wb2ludCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiBwcmV0dHkgcXVpY2tseS4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjMxLjIyODYxOTg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYyMjY4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFjaW5nX2J1ZmZlcnNfZm9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL3RyYWNlLmM9NzQzNz1zdGF0aWMgaW50IHRyYWNpbmdfYnVmZmVyc19tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0NTktXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQ2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2J1ZmZlcnNfZm9wcyA9IHtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDYxLVxcdC5vcGVuXFx0XFx0PSB0cmFjaW5nX2J1ZmZlcnNfb3BlbixcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTc2MjU9dHJhY2luZ19pbml0X3RyYWNlZnNfcGVyY3B1KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGxvbmcgY3B1KVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzY0OS1cXHR0cmFjZV9jcmVhdGVfY3B1X2ZpbGUoXFxcInRyYWNlX3BpcGVfcmF3XFxcIiwgVFJBQ0VfTU9ERV9SRUFELCBkX2NwdSxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NjUwOlxcdFxcdFxcdFxcdHRyLCBjcHUsIFxcdTAwMjZ0cmFjaW5nX2J1ZmZlcnNfZm9wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzY1MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MzEuMzA5MjQ3Mzk3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MDkxNDg5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnRyYWNlIFJpbmcgQnVmZmVyIFJlYWRlciBQYWdlIFZ1bG5lcmFiaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBjaGFuZ2UgaW4gdGhlIGBmdHJhY2VgIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHRyYWNlX3BpcGVfcmF3YCBmaWxlIHdpdGhpbiB0aGUgYHRyYWNlZnNgLiBNeSBmb2N1cyBpcyBvbiB0aGUgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbi5cblxuSW5pdGlhbGx5LCBJJ20gbm90aW5nIHRoYXQgYHRyYWNlX3BpcGVfcmF3YCBpcyBjcmVhdGVkIGR1cmluZyBgdHJhY2Vmc2AgaW5pdGlhbGl6YXRpb24uIFVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBpdCB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucywgb3BlbmluZyBpdCwgbWFwcGluZyBpdCB3aXRoIGBtbWFwYCAodmlhIGB0cmFjaW5nX2J1ZmZlcnNfbW1hcGAgd2hpY2ggbWFwcyB0byBgcmluZ19idWZmZXJfbWFwYCksIGFuZCB0aGVuIHVzaW5nIGFuIGBpb2N0bGAgY2FsbCAoYFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUmApIHRoYXQgZXZlbnR1YWxseSBjYWxscyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJdCdzIHdpdGhpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIHRoYXQgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgY29uZGl0aW9uIGZvciBhIGBXQVJOX09OYCBjYWxsLiBCZWZvcmUsIGBXQVJOX09OKCFyZWFkZXIpYCB3b3VsZCBhbHdheXMgdHJpZ2dlciBpZiB0aGUgYHJlYWRlcmAgcG9pbnRlciB3YXMgTlVMTC4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoaXMgdG8gYFdBUk5fT04oIXJlYWRlciBcdTAwMjZcdTAwMjYgY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiB0aGUgYXNzZXJ0aW9uIGxvZ2ljLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBhbmQgc3Vic3lzdGVtIHJlbGV2YW5jZS4gVGhpcyBpcyBpbiBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLCBzbyBpdCdzIGNvcmUgYGZ0cmFjZWAgcmluZyBidWZmZXIgZnVuY3Rpb25hbGl0eS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCBgaW9jdGxgIGNhbGxzIG9uIGB0cmFjZV9waXBlX3Jhd2AgaW4gYHRyYWNlZnNgLCB3aGljaCBpcyBhIGNvbW1vbiwgd2VsbC1leGVyY2lzZWQgYXJlYSwgb2Z0ZW4gZnV6emVkIHdpdGggc3l6a2FsbGVyIGV2ZW4gaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGlzIGxvb2tzIHByb21pc2luZy5cblxuUmVnYXJkaW5nIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSwgdGhlIGNoYW5nZSBpczpcbjEuICAqKkNvcmUgc3Vic3lzdGVtOioqIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2BcbjIuICAqKkFzc2VydGlvbi9Mb2dpYyBNb2RpZmljYXRpb246KiogSXQgY2hhbmdlcyB0aGUgbG9naWMgdGhhdCB0cmlnZ2VycyBhIGBXQVJOX09OYCwgd2hpY2ggaXMgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuIEl0IHJlZHVjZXMgdGhlIGNhc2VzIHdoZXJlIHRoZSBhc3NlcnRpb24gaXMgdHJpZ2dlcmVkLlxuMy4gICoqUmVhY2hhYmlsaXR5OioqIFVzZXJzcGFjZSBjYW4gdHJpZ2dlciB0aGlzIHZpYSBgaW9jdGxgIG9uIGB0cmFjZV9waXBlX3Jhd2AuIFRoaXMgaXMgY3JpdGljYWwuXG5cbkJhc2VkIG9uIHRoZXNlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMuIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLiBBbHNvLCBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCwgYHJpbmdfYnVmZmVyX21hcGAsIGFuZCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCBhcmUgcmVsZXZhbnQgZnVuY3Rpb25zLCBhcyB0aGV5J3JlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjYWxsIGNoYWluLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW55IGFyZSB1YmlxdWl0b3VzIGhvdHBhdGhzLiBGb3J0dW5hdGVseSwgbm9uZSBvZiB0aGVzZSBhcmUgaGlnaGx5IHViaXF1aXRvdXMgaG90cGF0aHM7IHRoZXkgYXJlIHF1aXRlIHNwZWNpZmljIHRvIHRoZSBgdHJhY2VfcGlwZV9yYXdgIG1tYXAvcmVhZGVyIGFjY2Vzcy5cblxuSSB3aWxsIGFsc28gbmVlZCB0byByZXZpZXcgdGhlIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgIHRvIHNlZSBob3cgdHJhY2luZyBpcyBjb25maWd1cmVkLiBJbiBwYXJ0aWN1bGFyLCBob3cgdGhlIGB0cmFjZS5vYCBpcyBjb25zdHJ1Y3RlZC4gVGhpcyB3aWxsIHByb3ZpZGUgZnVydGhlciBjb250ZXh0IG9uIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgZW5hYmxlcyBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBhbmQgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MzUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MzcuMTE4Mzk5MDU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNzYyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhY2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfVFJBQ0VfQ0xPQ0spICs9IHRyYWNlX2Nsb2NrLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjItXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICs9IGxpYmZ0cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gcmluZ19idWZmZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSArPSByaW5nX2J1ZmZlcl9iZW5jaG1hcmsub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02Ni1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjgtb2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlX291dHB1dC5vXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9ODg9b2JqLSQoQ09ORklHX1NUQUNLX1RSQUNFUikgKz0gdHJhY2Vfc3RhY2sub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo4OTpvYmotJChDT05GSUdfTU1JT1RSQUNFKSArPSB0cmFjZV9tbWlvdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05MC1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSB0cmFjZV9mdW5jdGlvbnNfZ3JhcGgub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05MT1vYmotJChDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORykgKz0gdHJhY2VfYnJhbmNoLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTI6b2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICs9IGJsa3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTMtb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgKz0gZmdyYXBoLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9OTQ9aWZlcSAoJChDT05GSUdfQkxPQ0spLHkpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjk1Om9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSBibGt0cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTk2LWVuZGlmXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgKz0gdHJhY2VfZXZlbnRzX3VzZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICs9IGJwZl90cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgKz0gdHJhY2Vfa3Byb2JlLm9cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xNjQ9YWx3YXlzLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgKz0gc2ltcGxlX3JpbmdfYnVmZmVyLm8uY2hlY2tlZFxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjE2NjpsaWJmdHJhY2UteSA6PSBmdHJhY2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzozNy4yMzc3ODE1MjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNDgwNDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdHJhY2luZyBpcyBzZXQgdXAgaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfVFJBQ0lOR2AgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIsIGFzIGl0IGNvbXBpbGVzIGB0cmFjZS5vYCwgYW5kIEkgc2VlIGl0IHB1bGxzIGluIGBDT05GSUdfUklOR19CVUZGRVJgLCB3aGljaCBpbiB0dXJuIGdlbmVyYXRlcyBgcmluZ19idWZmZXIub2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoaXMuIElzIGBDT05GSUdfRlRSQUNFYCBpbnZvbHZlZD8gT3IgYXJlIHRoZXJlIG90aGVyIGNvbmZpZ3MgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIGFueSB1c2VyLXNlbGVjdGFibGUgb3B0aW9ucyB0aGF0IGFyZSB0aWVkIHRvIGBDT05GSUdfVFJBQ0lOR2AuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcywgb2YgY291cnNlLCBga2VybmVsL3RyYWNlL0tjb25maWdgLiBJJ2xsIGRlbHZlIGludG8gdGhhdCBmaWxlIGFuZCBleGFtaW5lIHRoZSBzZWN0aW9uIGFyb3VuZCBgY29uZmlnIFRSQUNJTkdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJJ20gYWZ0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6MzkuNTUyNTg4MDQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3NTpcXHQjIG9wdGlvbnMgZG8gbm90IGFwcGVhciB3aGVuIHNvbWV0aGluZyBlbHNlIHNlbGVjdHMgaXQuIFdlIG5lZWQgdGhlIHR3byBvcHRpb25zXFxuIDE3NjpcXHQjIEdFTkVSSUNfVFJBQ0VSIGFuZCBUUkFDSU5HIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB0byBhY2NvbXBsaXNoIHRoZVxcbiAxNzc6XFx0IyBoaWRpbmcgb2YgdGhlIGF1dG9tYXRpYyBvcHRpb25zLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRjb25maWcgVFJBQ0lOR1xcbiAxODA6XFx0XFx0Ym9vbFxcbiAxODE6XFx0XFx0c2VsZWN0IFJJTkdfQlVGRkVSXFxuIDE4MjpcXHRcXHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMTgzOlxcdFxcdHNlbGVjdCBUUkFDRVBPSU5UU1xcbiAxODQ6XFx0XFx0c2VsZWN0IE5PUF9UUkFDRVJcXG4gMTg1OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuIDE4NjpcXHRcXHRzZWxlY3QgRVZFTlRfVFJBQ0lOR1xcbiAxODc6XFx0XFx0c2VsZWN0IFRSQUNFX0NMT0NLXFxuIDE4ODpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gMTg5OlxcdFxcbiAxOTA6XFx0Y29uZmlnIEdFTkVSSUNfVFJBQ0VSXFxuIDE5MTpcXHRcXHRib29sXFxuIDE5MjpcXHRcXHRzZWxlY3QgVFJBQ0lOR1xcbiAxOTM6XFx0XFxuIDE5NDpcXHQjXFxuIDE5NTpcXHQjIE1pbmltdW0gcmVxdWlyZW1lbnRzIGFuIGFyY2hpdGVjdHVyZSBoYXMgdG8gbWVldCBmb3IgdXMgdG9cXG4gMTk2OlxcdCMgYmUgYWJsZSB0byBvZmZlciBnZW5lcmljIHRyYWNpbmcgZmFjaWxpdGllczpcXG4gMTk3OlxcdCNcXG4gMTk4OlxcdGNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcXG4gMTk5OlxcdFxcdGJvb2xcXG4gMjAwOlxcdFxcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxcbiAyMDE6XFx0XFx0ZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMjAyOlxcdFxcdGRlZmF1bHQgeVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRtZW51Y29uZmlnIEZUUkFDRVxcbiAyMDU6XFx0XFx0Ym9vbCBcXFwiVHJhY2Vyc1xcXCJcXG4gMjA2OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUXFxuIDIwNzpcXHRcXHRkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIEVuYWJsZSB0aGUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXFxuIDIxMDpcXHRcXG4gMjExOlxcdGlmIEZUUkFDRVxcbiAyMTI6XFx0XFxuIDIxMzpcXHRjb25maWcgVFJBQ0VGU19BVVRPTU9VTlRfREVQUkVDQVRFRFxcbiAyMTQ6XFx0XFx0Ym9vbCBcXFwiQXV0b21vdW50IHRyYWNlZnMgb24gZGVidWdmcyBbREVQUkVDQVRFRF1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjM5LjU1MjY4MTAxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjkwNDkwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gVHJhY2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBSaWdodCwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgRlRSQUNFYCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgbWVudWNvbmZpZyBlbnRyeSBwb2ludC4gSWYgdGhhdCdzIGVuYWJsZWQsIHRoZW4gd2UgaGF2ZSB0aGUgd2hvbGUgaG9zdCBvZiB0cmFjZXIgb3B0aW9ucywgdGhlIHZhcmlvdXMgYml0cyB1bmRlcm5lYXRoIGBGVFJBQ0VgLCBpbmNsdWRpbmcgdGhvc2UgY3JpdGljYWwgYFRSQUNJTkdgIGFuZCBgUklOR19CVUZGRVJgIGNvbXBvbmVudHMuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGVuYWJsZSBgdHJhY2Vmc2AsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB0cmFjZSBkYXRhLiBUaW1lIHRvIHVzZSBteSB1c3VhbCBhcHByb2FjaCwgSSdsbCBnbyBzdHJhaWdodCBmb3IgYENPTkZJR19UUkFDRUZTYCwgb3IgYSBnb29kIG9sZCBzZWFyY2ggZm9yIGBmcy90cmFjZWZzYCwgYW5kIHNlZSB3aGF0IHRoYXQgZ2V0cyBtZSBpbiB0ZXJtcyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwMiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NDEuODQzMTczOTQ2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY0MjcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFJBQ0VGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV2ZW50ZnNfZ2V0X2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGV2ZW50ZnNfYXR0ciAqYXR0cixcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDItXFx0dGktXFx1MDAzZXByaXZhdGUgPSBlaTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzQzOlxcdHRpLVxcdTAwM2VmbGFncyB8PSBUUkFDRUZTX0VWRU5UX0lOT0RFO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNDQtXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTI5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpldmVudGZzX3Jvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTUzOC1cXHR0aSA9IGdldF90cmFjZWZzKGRpcik7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjUzOTpcXHRpZiAoV0FSTl9PTl9PTkNFKCEodGktXFx1MDAzZWZsYWdzIFxcdTAwMjYgVFJBQ0VGU19FVkVOVF9JTk9ERSkpKVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01NDAtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTc5PXN0YXRpYyBpbnQgZXZlbnRmc19pdGVyYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01OTUtXFx0dGkgPSBnZXRfdHJhY2VmcyhmX2lub2RlKTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTk2OlxcdGlmICghKHRpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRSQUNFRlNfRVZFTlRfSU5PREUpKVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01OTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NzU5PXN0cnVjdCBldmVudGZzX2lub2RlICpldmVudGZzX2NyZWF0ZV9ldmVudHNfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NzAtXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjc3MTpcXHRpZiAoc2VjdXJpdHlfbG9ja2VkX2Rvd24oTE9DS0RPV05fVFJBQ0VGUykpXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc3Mi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MDUtXFx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjgwNjpcXHR0aS1cXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19FVkVOVF9JTk9ERTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODA3LVxcdHRpLVxcdTAwM2Vwcml2YXRlID0gZWk7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMjUtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI2OiNkZWZpbmUgVFJBQ0VGU19ERUZBVUxUX01PREVcXHQwNzAwXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI3LXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdHJhY2Vmc19pbm9kZV9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX3N5c2NhbGxfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTEwLVxcdHRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMTE6XFx0dGktXFx1MDAzZWZsYWdzIHw9IFRSQUNFRlNfSU5TVEFOQ0VfSU5PREU7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTExMi1cXHR0aS1cXHUwMDNlcHJpdmF0ZSA9IGlub2RlO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTE1Mz1zdGF0aWMgdm9pZCBzZXRfdHJhY2Vmc19pbm9kZV9vd25lcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3My1cXG5mcy90cmFjZWZzL2lub2RlLmM6MTc0OlxcdFxcdGlmICghKHJ0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUUkFDRUZTX1VJRF9QRVJNX1NFVCkpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3NS1cXHRcXHRcXHR1aWQgPSByb290X2lub2RlLVxcdTAwM2VpX3VpZDtcXG5mcy90cmFjZWZzL2lub2RlLmMtMTc2LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxNzc6XFx0XFx0aWYgKCEocnRpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRSQUNFRlNfR0lEX1BFUk1fU0VUKSlcXG5mcy90cmFjZWZzL2lub2RlLmMtMTc4LVxcdFxcdFxcdGdpZCA9IHJvb3RfaW5vZGUtXFx1MDAzZWlfZ2lkO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE4NC1cXHQgKi9cXG5mcy90cmFjZWZzL2lub2RlLmM6MTg1OlxcdGlmICghKHRpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRSQUNFRlNfVUlEX1BFUk1fU0VUKSlcXG5mcy90cmFjZWZzL2lub2RlLmMtMTg2LVxcdFxcdGlub2RlLVxcdTAwM2VpX3VpZCA9IHVpZDtcXG5mcy90cmFjZWZzL2lub2RlLmMtMTg3LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxODg6XFx0aWYgKCEodGktXFx1MDAzZWZsYWdzIFxcdTAwMjYgVFJBQ0VGU19HSURfUEVSTV9TRVQpKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xODktXFx0XFx0aW5vZGUtXFx1MDAzZWlfZ2lkID0gZ2lkO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTIxMD1zdGF0aWMgaW50IHRyYWNlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxNy1cXHRpZiAoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX1VJRClcXG5mcy90cmFjZWZzL2lub2RlLmM6MjE4OlxcdFxcdHRpLVxcdTAwM2VmbGFncyB8PSBUUkFDRUZTX1VJRF9QRVJNX1NFVDtcXG5mcy90cmFjZWZzL2lub2RlLmMtMjE5LVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMjAtXFx0aWYgKGlhX3ZhbGlkIFxcdTAwMjYgQVRUUl9HSUQpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIyMTpcXHRcXHR0aS1cXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19HSURfUEVSTV9TRVQ7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIyMi1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYz0zMTA9c3RhdGljIGludCB0cmFjZWZzX2FwcGx5X29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCByZW1vdW50KVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM0NC1cXHRcXHRcXHRpZiAodXBkYXRlX3VpZCkge1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozNDU6XFx0XFx0XFx0XFx0dGktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5UUkFDRUZTX1VJRF9QRVJNX1NFVDtcXG5mcy90cmFjZWZzL2lub2RlLmMtMzQ2LVxcdFxcdFxcdFxcdHRpLVxcdTAwM2V2ZnNfaW5vZGUuaV91aWQgPSBmc2ktXFx1MDAzZXVpZDtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNDktXFx0XFx0XFx0aWYgKHVwZGF0ZV9naWQpIHtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzUwOlxcdFxcdFxcdFxcdHRpLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+VFJBQ0VGU19HSURfUEVSTV9TRVQ7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM1MS1cXHRcXHRcXHRcXHR0aS1cXHUwMDNldmZzX2lub2RlLmlfZ2lkID0gZnNpLVxcdTAwM2VnaWQ7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMzU4LVxcdFxcdFxcdCAqL1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozNTk6XFx0XFx0XFx0aWYgKHRpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRSQUNFRlNfRVZFTlRfSU5PREUpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM2MC1cXHRcXHRcXHRcXHRldmVudGZzX3JlbW91bnQodGksIHVwZGF0ZV91aWQsIHVwZGF0ZV9naWQpO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTM4NT1zdGF0aWMgaW50IHRyYWNlZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zOTQtXFx0XFx0XFx0ICAgZnJvbV9rZ2lkX211bmdlZChcXHUwMDI2aW5pdF91c2VyX25zLCBmc2ktXFx1MDAzZWdpZCkpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozOTU6XFx0aWYgKGZzaS1cXHUwMDNlbW9kZSAhPSBUUkFDRUZTX0RFRkFVTFRfTU9ERSlcXG5mcy90cmFjZWZzL2lub2RlLmMtMzk2LVxcdFxcdHNlcV9wcmludGYobSwgXFxcIixtb2RlPSVvXFxcIiwgZnNpLVxcdTAwM2Vtb2RlKTtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYz00MDE9c3RhdGljIGludCB0cmFjZWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00MTEtXFx0ICovXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQxMjpcXHR0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflRSQUNFRlNfRVZFTlRfSU5PREU7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQxMy1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYz00NjQ9c3RhdGljIGludCB0cmFjZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ2OC1cXG5mcy90cmFjZWZzL2lub2RlLmM6NDY5OlxcdGVyciA9IHNpbXBsZV9maWxsX3N1cGVyKHNiLCBUUkFDRUZTX01BR0lDLCB0cmFjZV9maWxlcyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ3MC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTUwMj1zdGF0aWMgaW50IHRyYWNlZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDktXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxMDpcXHRmc2ktXFx1MDAzZW1vZGUgPSBUUkFDRUZTX0RFRkFVTFRfTU9ERTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNTExLVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTU2Nz1zdGF0aWMgc3RydWN0IGlub2RlICppbnN0YW5jZV9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNTc3LVxcdFxcdHRpID0gZ2V0X3RyYWNlZnMoZF9pbm9kZShwYXJlbnQpKTtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTc4OlxcdFxcdGlmICh0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUUkFDRUZTX0lOU1RBTkNFX0lOT0RFKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01NzktXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmM9NjEyPXN0cnVjdCBkZW50cnkgKnRyYWNlZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxOS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NjIwOlxcdGlmIChzZWN1cml0eV9sb2NrZWRfZG93bihMT0NLRE9XTl9UUkFDRUZTKSlcXG5mcy90cmFjZWZzL2lub2RlLmMtNjIxLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTY5OT1zdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50KVxcbmZzL3RyYWNlZnMvaW5vZGUuYy03MDAte1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo3MDE6XFx0aWYgKHNlY3VyaXR5X2xvY2tlZF9kb3duKExPQ0tET1dOX1RSQUNFRlMpKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy03MDItXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy90cmFjZWZzL2ludGVybmFsLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDoyOiNpZm5kZWYgX1RSQUNFRlNfSU5URVJOQUxfSFxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDozOiNkZWZpbmUgX1RSQUNFRlNfSU5URVJOQUxfSFxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaC00LVxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaD01PWVudW0ge1xcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDo2OlxcdFRSQUNFRlNfRVZFTlRfSU5PREVcXHRcXHQ9IEJJVCgxKSxcXG5mcy90cmFjZWZzL2ludGVybmFsLmg6NzpcXHRUUkFDRUZTX0dJRF9QRVJNX1NFVFxcdFxcdD0gQklUKDIpLFxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaDo4OlxcdFRSQUNFRlNfVUlEX1BFUk1fU0VUXFx0XFx0PSBCSVQoMyksXFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oOjk6XFx0VFJBQ0VGU19JTlNUQU5DRV9JTk9ERVxcdFxcdD0gQklUKDQpLFxcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaC0xMC19O1xcbi0tXFxuZnMvdHJhY2Vmcy9pbnRlcm5hbC5oPTgwPXZvaWQgZXZlbnRmc19yZW1vdW50X3VubG9jayhpbnQgc3JjdV9pZHgpO1xcbmZzL3RyYWNlZnMvaW50ZXJuYWwuaC04MS1cXG5mcy90cmFjZWZzL2ludGVybmFsLmg6ODI6I2VuZGlmIC8qIF9UUkFDRUZTX0lOVEVSTkFMX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NDIuMDI5NjA1NTM2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDkxNzc2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgVHJhY2VmcyBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIHByb2NlZHVyZSBmb3IgYHRyYWNlZnNgLiBMZXQncyBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGBmcy90cmFjZWZzL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGJ1aWxkaW5nIHRoZSB0cmFjZWZzIGZpbGVzeXN0ZW0gaXRzZWxmLiBJdCBzaG91bGQgZGV0YWlsIGhvdyB0aGUga2VybmVsIG1vZHVsZXMgc3BlY2lmaWMgdG8gYHRyYWNlZnNgIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5zdGFsbGVkLCBhbmQgYW55IG5lY2Vzc2FyeSBwcmUtcHJvY2Vzc2luZyBzdGVwcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBzdGFuZGFyZCBtYWtlZmlsZSB0YXJnZXRzIGxpa2UgYGFsbGAsIGBtb2R1bGVzYCwgYGluc3RhbGxgLCBhbmQgYW55dGhpbmcgc3BlY2lmaWMgdG8gYHRyYWNlZnNgLiBJJ2xsIGJlIHBhcnNpbmcgdGhlIGRlcGVuZGVuY2llcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGFuZCBoZWFkZXJzIGludm9sdmVkIGluIHRyYWNlZnMgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gYW5kIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgb2YgdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcwOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjQzLjkzODc4NTcyN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5OTU0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYWNlZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NDcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmZzL01ha2VmaWxlPTExNz1vYmotJChDT05GSUdfREVCVUdfRlMpXFx0XFx0Kz0gZGVidWdmcy9cXG5mcy9NYWtlZmlsZToxMTg6b2JqLSQoQ09ORklHX1RSQUNJTkcpXFx0XFx0Kz0gdHJhY2Vmcy9cXG5mcy9NYWtlZmlsZS0xMTktb2JqLSQoQ09ORklHX09DRlMyX0ZTKVxcdFxcdCs9IG9jZnMyL1xcbi0tXFxuZnMvdHJhY2Vmcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3RyYWNlZnMvTWFrZWZpbGU6Mjp0cmFjZWZzLW9ianNcXHQ6PSBpbm9kZS5vXFxuZnMvdHJhY2Vmcy9NYWtlZmlsZTozOnRyYWNlZnMtb2Jqc1xcdCs9IGV2ZW50X2lub2RlLm9cXG5mcy90cmFjZWZzL01ha2VmaWxlLTQtXFxuZnMvdHJhY2Vmcy9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19UUkFDSU5HKVxcdCs9IHRyYWNlZnMub1xcbmZzL3RyYWNlZnMvTWFrZWZpbGUtNi1cXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yLS8qXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjM6ICogIGV2ZW50X2lub2RlLmMgLSBwYXJ0IG9mIHRyYWNlZnMsIGEgcHNldWRvIGZpbGUgc3lzdGVtIGZvciBhY3RpdmF0aW5nIHRyYWNpbmdcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNC0gKlxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzoyMjojaW5jbHVkZSBcXHUwMDNjbGludXgvdHJhY2Vmcy5oXFx1MDAzZVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTI1Mj1zdGF0aWMgdm9pZCBldmVudGZzX3NldF9hdHRycyhzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZWksIGJvb2wgdXBkYXRlX3VpZCwga3VpZF90IHVpZCxcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yOTMtLypcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6Mjk0OiAqIE9uIGEgcmVtb3VudCBvZiB0cmFjZWZzLCBpZiBVSUQgb3IgR0lEIG9wdGlvbnMgYXJlIHNldCwgdGhlblxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0yOTUtICogdGhlIG1vdW50IHBvaW50IGlub2RlIHBlcm1pc3Npb25zIHNob3VsZCBiZSB1c2VkLlxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTI5Ny0gKi9cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6Mjk4OnZvaWQgZXZlbnRmc19yZW1vdW50KHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSwgYm9vbCB1cGRhdGVfdWlkLCBib29sIHVwZGF0ZV9naWQpXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTI5OS17XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV2ZW50ZnNfZ2V0X2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGV2ZW50ZnNfYXR0ciAqYXR0cixcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zMzMtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKnBlaTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzM0OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzM1LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTMzNi1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzM3OlxcdGlub2RlID0gdHJhY2Vmc19nZXRfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3NiKTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzM4LVxcdGlmICghaW5vZGUpXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtMzQwLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzozNDE6XFx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTM0Mi1cXHR0aS1cXHUwMDNlcHJpdmF0ZSA9IGVpO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTM1OS0vKipcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6MzYwOiAqIGxvb2t1cF9maWxlIC0gbG9vayB1cCBhIGZpbGUgaW4gdGhlIHRyYWNlZnMgZmlsZXN5c3RlbVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy0zNjEtICogQHBhcmVudF9laTogUG9pbnRlciB0byB0aGUgZXZlbnRmc19pbm9kZSB0aGF0IHJlcHJlc2VudHMgcGFyZW50IG9mIHRoZSBmaWxlXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9MzcyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmlsZShzdHJ1Y3QgZXZlbnRmc19pbm9kZSAqcGFyZW50X2VpLFxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTQwNS0vKipcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NDA2OiAqIGxvb2t1cF9kaXJfZW50cnkgLSBsb29rIHVwIGEgZGlyIGluIHRoZSB0cmFjZWZzIGZpbGVzeXN0ZW1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNDA3LSAqIEBkZW50cnk6IHRoZSBkaXJlY3RvcnkgdG8gbG9vayB1cFxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTUyOT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXZlbnRmc19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01MzMtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpX2NoaWxkO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo1MzQ6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01MzUtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTUzNy1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTM4OlxcdHRpID0gZ2V0X3RyYWNlZnMoZGlyKTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNTM5LVxcdGlmIChXQVJOX09OX09OQ0UoISh0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUUkFDRUZTX0VWRU5UX0lOT0RFKSkpXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM9NTc5PXN0YXRpYyBpbnQgZXZlbnRmc19pdGVyYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01ODQtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpX2NoaWxkO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo1ODU6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy01ODYtXFx0c3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5NC1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NTk1OlxcdHRpID0gZ2V0X3RyYWNlZnMoZl9pbm9kZSk7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTU5Ni1cXHRpZiAoISh0aS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUUkFDRUZTX0VWRU5UX0lOT0RFKSlcXG4tLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03MTUtICogICAgIHN5c3RlbS4gVGhlIGNhbGxiYWNrIG11c3Qgbm90IGNhbGwgYW55IGNvZGUgdGhhdCBtaWdodCBhbHNvIGNhbGwgaW50b1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3MTY6ICogICAgIHRoZSB0cmFjZWZzIG9yIGV2ZW50ZnMgc3lzdGVtIG9yIGl0IHdpbGwgcmlzayBjcmVhdGluZyBhIGRlYWRsb2NrLlxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03MTctICovXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTcxOD1zdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZXZlbnRmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBldmVudGZzX2lub2RlICpwYXJlbnQsXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzQ5LSAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSB0byBjcmVhdGUuXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjc1MDogKiBAcGFyZW50OiBQYXJlbnQgZGVudHJ5IGZvciB0aGlzIGZpbGUgaW4gdGhlIHRyYWNlZnMgZGlyZWN0b3J5LlxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NTEtICogQGVudHJpZXM6IEEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgcmVwcmVzZW50IHRoZSBmaWxlcyB1bmRlciB0aGlzIGRpcmVjdG9yeVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTc1OT1zdHJ1Y3QgZXZlbnRmc19pbm9kZSAqZXZlbnRmc19jcmVhdGVfZXZlbnRzX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzY1LVxcdHN0cnVjdCBldmVudGZzX2lub2RlICplaTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NzY2OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzY3LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzczLVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo3NzQ6XFx0ZGVudHJ5ID0gdHJhY2Vmc19zdGFydF9jcmVhdGluZyhuYW1lLCBwYXJlbnQpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03NzUtXFx0aWYgKElTX0VSUihkZW50cnkpKVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc4MS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6NzgyOlxcdGlub2RlID0gdHJhY2Vmc19nZXRfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3NiKTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtNzgzLVxcdGlmICh1bmxpa2VseSghaW5vZGUpKVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTc4NS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6Nzg2OlxcdC8vIE5vdGU6IHdlIGhhdmUgYSByZWYgdG8gdGhlIGRlbnRyeSBmcm9tIHRyYWNlZnNfc3RhcnRfY3JlYXRpbmcoKVxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy03ODctXFx0cmVpID0gZ2V0X3Jvb3RfaW5vZGUoZWkpO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTgwNC1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmM6ODA1OlxcdHRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MDYtXFx0dGktXFx1MDAzZWZsYWdzIHw9IFRSQUNFRlNfRVZFTlRfSU5PREU7XFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODI5LVxcdGZzbm90aWZ5X21rZGlyKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQtXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jOjgzMDpcXHR0cmFjZWZzX2VuZF9jcmVhdGluZyhkZW50cnkpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYy04MzEtXFxuLS1cXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODM1LVxcdGNsZWFudXBfZWkoZWkpO1xcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo4MzY6XFx0dHJhY2Vmc19mYWlsZWRfY3JlYXRpbmcoZGVudHJ5KTtcXG5mcy90cmFjZWZzL2V2ZW50X2lub2RlLmMtODM3LVxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jPTg5MT12b2lkIGV2ZW50ZnNfcmVtb3ZlX2V2ZW50c19kaXIoc3RydWN0IGV2ZW50ZnNfaW5vZGUgKmVpKVxcbi0tXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTkwNC1cXHQvKlxcbmZzL3RyYWNlZnMvZXZlbnRfaW5vZGUuYzo5MDU6XFx0ICogTWF0Y2hlcyB0aGUgZGdldCgpIGRvbmUgYnkgdHJhY2Vmc19zdGFydF9jcmVhdGluZygpXFxuZnMvdHJhY2Vmcy9ldmVudF9pbm9kZS5jLTkwNi1cXHQgKiBpbiBldmVudGZzX2NyZWF0ZV9ldmVudHNfZGlyKCkgd2hlbiBpdCB0aGUgZGVudHJ5IHdhc1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTItLypcXG5mcy90cmFjZWZzL2lub2RlLmM6MzogKiAgaW5vZGUuYyAtIHBhcnQgb2YgdHJhY2VmcywgYSBwc2V1ZG8gZmlsZSBzeXN0ZW0gZm9yIGFjdGl2YXRpbmcgdHJhY2luZ1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00LSAqXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtOC0gKlxcbmZzL3RyYWNlZnMvaW5vZGUuYzo5OiAqIHRyYWNlZnMgaXMgdGhlIGZpbGUgc3lzdGVtIHRoYXQgaXMgdXNlZCBieSB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cXG5mcy90cmFjZWZzL2lub2RlLmMtMTAtICovXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25hbWVpLmhcXHUwMDNlXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC90cmFjZWZzLmhcXHUwMDNlXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc25vdGlmeS5oXFx1MDAzZVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI2LSNkZWZpbmUgVFJBQ0VGU19ERUZBVUxUX01PREVcXHQwNzAwXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI3OnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdHJhY2Vmc19pbm9kZV9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0yOC1cXG5mcy90cmFjZWZzL2lub2RlLmM6Mjk6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqdHJhY2Vmc19tb3VudDtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzA6c3RhdGljIGludCB0cmFjZWZzX21vdW50X2NvdW50O1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozMTpzdGF0aWMgYm9vbCB0cmFjZWZzX3JlZ2lzdGVyZWQ7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTMyLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zMy0vKlxcbmZzL3RyYWNlZnMvaW5vZGUuYzozNDogKiBLZWVwIHRyYWNrIG9mIGFsbCB0cmFjZWZzX2lub2RlcyBpbiBvcmRlciB0byB1cGRhdGUgdGhlaXJcXG5mcy90cmFjZWZzL2lub2RlLmMtMzUtICogZmxhZ3MgaWYgbmVjZXNzYXJ5IG9uIGEgcmVtb3VudC5cXG5mcy90cmFjZWZzL2lub2RlLmMtMzYtICovXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM3OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhY2Vmc19pbm9kZV9sb2NrKTtcXG5mcy90cmFjZWZzL2lub2RlLmM6Mzg6c3RhdGljIExJU1RfSEVBRCh0cmFjZWZzX2lub2Rlcyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM5LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MDpzdGF0aWMgc3RydWN0IGlub2RlICp0cmFjZWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQxLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6NDI6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00My1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00NC1cXG5mcy90cmFjZWZzL2lub2RlLmM6NDU6XFx0dGkgPSBhbGxvY19pbm9kZV9zYihzYiwgdHJhY2Vmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00Ni1cXHRpZiAoIXRpKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHJhY2Vmc19pbm9kZV9sb2NrLCBmbGFncyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUwOlxcdGxpc3RfYWRkX3JjdShcXHUwMDI2dGktXFx1MDAzZWxpc3QsIFxcdTAwMjZ0cmFjZWZzX2lub2Rlcyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxOlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRyYWNlZnNfaW5vZGVfbG9jaywgZmxhZ3MpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01Mi1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01NS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NTY6c3RhdGljIHZvaWQgdHJhY2Vmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU3LXtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTg6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01OS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NjA6XFx0a21lbV9jYWNoZV9mcmVlKHRyYWNlZnNfaW5vZGVfY2FjaGVwLCB0aSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxLX1cXG5mcy90cmFjZWZzL2lub2RlLmMtNjItXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzOnN0YXRpYyB2b2lkIHRyYWNlZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy02NC17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjY1OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNjYtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5mcy90cmFjZWZzL2lub2RlLmMtNjctXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjY4OlxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0cmFjZWZzX2lub2RlX2xvY2ssIGZsYWdzKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNjktXFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZ0aS1cXHUwMDNlbGlzdCk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjcwOlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRyYWNlZnNfaW5vZGVfbG9jaywgZmxhZ3MpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy03MS19XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmM9Nzk9c3RhdGljIHNzaXplX3QgZGVmYXVsdF93cml0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTg0LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo4NTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjZWZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmMtODYtXFx0LnJlYWQgPVxcdFxcdGRlZmF1bHRfcmVhZF9maWxlLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTkxLVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo5MjpzdGF0aWMgc3RydWN0IHRyYWNlZnNfZGlyX29wcyB7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTkzLVxcdGludCAoKm1rZGlyKShjb25zdCBjaGFyICpuYW1lKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtOTQtXFx0aW50ICgqcm1kaXIpKGNvbnN0IGNoYXIgKm5hbWUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo5NTp9IHRyYWNlZnNfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcXG5mcy90cmFjZWZzL2lub2RlLmMtOTYtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjk3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX3N5c2NhbGxfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTk4LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTAwLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6MTAxOlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcXG5mcy90cmFjZWZzL2lub2RlLmMtMTAyLVxcdHN0cnVjdCBuYW1lX3NuYXBzaG90IG5hbWU7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTA5LVxcdCAqL1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMTA6XFx0dGkgPSBnZXRfdHJhY2Vmcyhpbm9kZSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTExMS1cXHR0aS1cXHUwMDNlZmxhZ3MgfD0gVFJBQ0VGU19JTlNUQU5DRV9JTk9ERTtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMTUtXFx0ICogVGhlIG1rZGlyIGNhbGwgY2FuIGNhbGwgdGhlIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgY3JlYXRlXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjExNjpcXHQgKiB0aGUgZmlsZXMgd2l0aGluIHRoZSB0cmFjZWZzIHN5c3RlbS4gSXQgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWxcXG5mcy90cmFjZWZzL2lub2RlLmMtMTE3LVxcdCAqIG1rZGlyIHJvdXRpbmUgdG8gaGFuZGxlIHJhY2VzLlxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTEyMC1cXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMjE6XFx0cmV0ID0gdHJhY2Vmc19vcHMubWtkaXIobmFtZS5uYW1lLm5hbWUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMjItXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTI3LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxMjg6c3RhdGljIGludCB0cmFjZWZzX3N5c2NhbGxfcm1kaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMjkte1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTEzNC1cXHQgKiBUaGUgcm1kaXIgY2FsbCBjYW4gY2FsbCB0aGUgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBjcmVhdGVcXG5mcy90cmFjZWZzL2lub2RlLmM6MTM1OlxcdCAqIHRoZSBmaWxlcyB3aXRoaW4gdGhlIHRyYWNlZnMgc3lzdGVtLiBJdCBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbFxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xMzYtXFx0ICogcm1kaXIgcm91dGluZSB0byBoYW5kbGUgcmFjZXMuXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTQzLVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxNDQ6XFx0cmV0ID0gdHJhY2Vmc19vcHMucm1kaXIobmFtZS5uYW1lLm5hbWUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNDUtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMTUyLVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoxNTM6c3RhdGljIHZvaWQgc2V0X3RyYWNlZnNfaW5vZGVfb3duZXIoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy90cmFjZWZzL2lub2RlLmMtMTU0LXtcXG5mcy90cmFjZWZzL2lub2RlLmM6MTU1OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtMTU2LVxcdHN0cnVjdCBpbm9kZSAqcm9vdF9pbm9kZSA9IHRpLVxcdTAwM2Vwcml2YXRlO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE2OC1cXHRpZiAocm9vdF9pbm9kZSAhPSBkX2lub2RlKHJvb3RfaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfcm9vdCkpIHtcXG5mcy90cmFjZWZzL2lub2RlLmM6MTY5OlxcdFxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICpydGk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE3MC1cXG5mcy90cmFjZWZzL2lub2RlLmM6MTcxOlxcdFxcdHJ0aSA9IGdldF90cmFjZWZzKHJvb3RfaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0xNzItXFx0XFx0cm9vdF9pbm9kZSA9IGRfaW5vZGUocm9vdF9pbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19yb290KTtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xOTEtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjE5MjpzdGF0aWMgaW50IHRyYWNlZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy90cmFjZWZzL2lub2RlLmMtMTkzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0xOTQte1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoxOTU6XFx0c2V0X3RyYWNlZnNfaW5vZGVfb3duZXIoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0xOTYtXFx0cmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTE5OC1cXG5mcy90cmFjZWZzL2lub2RlLmM6MTk5OnN0YXRpYyBpbnQgdHJhY2Vmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDAtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCxcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDQtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIwNTpcXHRzZXRfdHJhY2Vmc19pbm9kZV9vd25lcihpbm9kZSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIwNi1cXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMDktXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIxMDpzdGF0aWMgaW50IHRyYWNlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMTEtXFx0XFx0XFx0ICAgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIxNC1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMTU6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMTYtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMjI1LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMjY6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHRyYWNlZnNfaW5zdGFuY2VfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIyNy1cXHQubG9va3VwXFx0XFx0PSBzaW1wbGVfbG9va3VwLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMjg6XFx0Lm1rZGlyXFx0XFx0PSB0cmFjZWZzX3N5c2NhbGxfbWtkaXIsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIyOTpcXHQucm1kaXJcXHRcXHQ9IHRyYWNlZnNfc3lzY2FsbF9ybWRpcixcXG5mcy90cmFjZWZzL2lub2RlLmM6MjMwOlxcdC5wZXJtaXNzaW9uXFx0PSB0cmFjZWZzX3Blcm1pc3Npb24sXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIzMTpcXHQuZ2V0YXR0clxcdD0gdHJhY2Vmc19nZXRhdHRyLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzI6XFx0LnNldGF0dHJcXHQ9IHRyYWNlZnNfc2V0YXR0cixcXG5mcy90cmFjZWZzL2lub2RlLmMtMjMzLX07XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTIzNC1cXG5mcy90cmFjZWZzL2lub2RlLmM6MjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB0cmFjZWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0yMzYtXFx0Lmxvb2t1cFxcdFxcdD0gc2ltcGxlX2xvb2t1cCxcXG5mcy90cmFjZWZzL2lub2RlLmM6MjM3OlxcdC5wZXJtaXNzaW9uXFx0PSB0cmFjZWZzX3Blcm1pc3Npb24sXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjIzODpcXHQuZ2V0YXR0clxcdD0gdHJhY2Vmc19nZXRhdHRyLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyMzk6XFx0LnNldGF0dHJcXHQ9IHRyYWNlZnNfc2V0YXR0cixcXG5mcy90cmFjZWZzL2lub2RlLmMtMjQwLX07XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI0MS1cXG5mcy90cmFjZWZzL2lub2RlLmM6MjQyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB0cmFjZWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmM6MjQzOlxcdC5wZXJtaXNzaW9uXFx0PSB0cmFjZWZzX3Blcm1pc3Npb24sXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI0NDpcXHQuZ2V0YXR0clxcdD0gdHJhY2Vmc19nZXRhdHRyLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyNDU6XFx0LnNldGF0dHJcXHQ9IHRyYWNlZnNfc2V0YXR0cixcXG5mcy90cmFjZWZzL2lub2RlLmMtMjQ2LX07XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI0Ny1cXG5mcy90cmFjZWZzL2lub2RlLmM6MjQ4OnN0cnVjdCBpbm9kZSAqdHJhY2Vmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy90cmFjZWZzL2lub2RlLmMtMjQ5LXtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0yNTctXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI1ODpzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvIHtcXG5mcy90cmFjZWZzL2lub2RlLmMtMjU5LVxcdGt1aWRfdCB1aWQ7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmM9MjY2PWVudW0ge1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI3MS1cXG5mcy90cmFjZWZzL2lub2RlLmM6MjcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgdHJhY2Vmc19wYXJhbV9zcGVjc1tdID0ge1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0yNzMtXFx0ZnNwYXJhbV9naWRcXHQoXFxcImdpZFxcXCIsXFx0XFx0T3B0X2dpZCksXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtMjc4LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzoyNzk6c3RhdGljIGludCB0cmFjZWZzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4MC17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjI4MTpcXHRzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvICpvcHRzID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG5mcy90cmFjZWZzL2lub2RlLmMtMjgyLVxcdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4NC1cXG5mcy90cmFjZWZzL2lub2RlLmM6Mjg1OlxcdG9wdCA9IGZzX3BhcnNlKGZjLCB0cmFjZWZzX3BhcmFtX3NwZWNzLCBwYXJhbSwgXFx1MDAyNnJlc3VsdCk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTI4Ni1cXHRpZiAob3B0IFxcdTAwM2MgMClcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zMDAtXFx0ICogV2UgbWlnaHQgbGlrZSB0byByZXBvcnQgYmFkIG1vdW50IG9wdGlvbnMgaGVyZTtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzAxOlxcdCAqIGJ1dCB0cmFkaXRpb25hbGx5IHRyYWNlZnMgaGFzIGlnbm9yZWQgYWxsIG1vdW50IG9wdGlvbnNcXG5mcy90cmFjZWZzL2lub2RlLmMtMzAyLVxcdCAqL1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTMwOS1cXG5mcy90cmFjZWZzL2lub2RlLmM6MzEwOnN0YXRpYyBpbnQgdHJhY2Vmc19hcHBseV9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgcmVtb3VudClcXG5mcy90cmFjZWZzL2lub2RlLmMtMzExLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzEyOlxcdHN0cnVjdCB0cmFjZWZzX2ZzX2luZm8gKmZzaSA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTMxMy1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShzYi1cXHUwMDNlc19yb290KTtcXG5mcy90cmFjZWZzL2lub2RlLmM6MzE0OlxcdHN0cnVjdCB0cmFjZWZzX2lub2RlICp0aTtcXG5mcy90cmFjZWZzL2lub2RlLmMtMzE1LVxcdGJvb2wgdXBkYXRlX3VpZCwgdXBkYXRlX2dpZDtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNDItXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozNDM6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGksIFxcdTAwMjZ0cmFjZWZzX2lub2RlcywgbGlzdCkge1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNDQtXFx0XFx0XFx0aWYgKHVwZGF0ZV91aWQpIHtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNjgtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM2OTpzdGF0aWMgaW50IHRyYWNlZnNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNzAte1xcbmZzL3RyYWNlZnMvaW5vZGUuYy0zNzEtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZjLVxcdTAwM2Vyb290LVxcdTAwM2VkX3NiO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzozNzI6XFx0c3RydWN0IHRyYWNlZnNfZnNfaW5mbyAqc2Jfb3B0cyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM3MzpcXHRzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvICpuZXdfb3B0cyA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM3NC1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy0zODEtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM4MjpcXHRyZXR1cm4gdHJhY2Vmc19hcHBseV9vcHRpb25zKHNiLCB0cnVlKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtMzgzLX1cXG5mcy90cmFjZWZzL2lub2RlLmMtMzg0LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzozODU6c3RhdGljIGludCB0cmFjZWZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM4Ni17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjM4NzpcXHRzdHJ1Y3QgdHJhY2Vmc19mc19pbmZvICpmc2kgPSByb290LVxcdTAwM2VkX3NiLVxcdTAwM2VzX2ZzX2luZm87XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTM4OC1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDAtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQwMTpzdGF0aWMgaW50IHRyYWNlZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDIte1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MDM6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpID0gZ2V0X3RyYWNlZnMoaW5vZGUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00MDQtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNDE2LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MTc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHRyYWNlZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmM6NDE4OlxcdC5hbGxvY19pbm9kZSAgICA9IHRyYWNlZnNfYWxsb2NfaW5vZGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQxOTpcXHQuZnJlZV9pbm9kZSAgICAgPSB0cmFjZWZzX2ZyZWVfaW5vZGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQyMDpcXHQuZGVzdHJveV9pbm9kZSAgPSB0cmFjZWZzX2Rlc3Ryb3lfaW5vZGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQyMTpcXHQuZHJvcF9pbm9kZSAgICAgPSB0cmFjZWZzX2Ryb3BfaW5vZGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQyMi1cXHQuc3RhdGZzXFx0XFx0PSBzaW1wbGVfc3RhdGZzLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0MjM6XFx0LnNob3dfb3B0aW9uc1xcdD0gdHJhY2Vmc19zaG93X29wdGlvbnMsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQyNC19O1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQzMy0gKi9cXG5mcy90cmFjZWZzL2lub2RlLmM6NDM0OnN0YXRpYyB2b2lkIHRyYWNlZnNfZF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy90cmFjZWZzL2lub2RlLmMtNDM1LXtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00MzktXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ0MDpzdGF0aWMgaW50IHRyYWNlZnNfZF9yZXZhbGlkYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NDEtXFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNDQ3LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NDg6c3RhdGljIGludCB0cmFjZWZzX2RfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy90cmFjZWZzL2lub2RlLmMtNDQ5LXtcXG5mcy90cmFjZWZzL2lub2RlLmMtNDUwLVxcdC8qXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1MTpcXHQgKiBXZSB3YW50IHRvIGtlZXAgZXZlbnRmcyBkZW50cmllcyBhcm91bmQgYnV0IG5vdCB0cmFjZWZzXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ1Mi1cXHQgKiBvbmVzLiBldmVudGZzIGRlbnRyaWVzIGhhdmUgY29udGVudCBpbiBkX2ZzZGF0YS5cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NTctXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1ODpzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHRyYWNlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ1OTpcXHQuZF9yZXZhbGlkYXRlID0gdHJhY2Vmc19kX3JldmFsaWRhdGUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ2MDpcXHQuZF9yZWxlYXNlID0gdHJhY2Vmc19kX3JlbGVhc2UsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ2MTpcXHQuZF9kZWxldGUgPSB0cmFjZWZzX2RfZGVsZXRlLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjItfTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNDYzLVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NjQ6c3RhdGljIGludCB0cmFjZWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00NjUte1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ3Mi1cXG5mcy90cmFjZWZzL2lub2RlLmM6NDczOlxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNnRyYWNlZnNfc3VwZXJfb3BlcmF0aW9ucztcXG5mcy90cmFjZWZzL2lub2RlLmM6NDc0OlxcdHRyYWNlZnNfYXBwbHlfb3B0aW9ucyhzYiwgZmFsc2UpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo0NzU6XFx0c2V0X2RlZmF1bHRfZF9vcChzYiwgXFx1MDAyNnRyYWNlZnNfZGVudHJ5X29wZXJhdGlvbnMpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy00NzYtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNDc5LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0ODA6c3RhdGljIGludCB0cmFjZWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy90cmFjZWZzL2lub2RlLmMtNDgxLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6NDgyOlxcdGludCBlcnIgPSBnZXRfdHJlZV9zaW5nbGUoZmMsIHRyYWNlZnNfZmlsbF9zdXBlcik7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4My1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy00ODYtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ4NzpcXHRyZXR1cm4gdHJhY2Vmc19yZWNvbmZpZ3VyZShmYyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4OC19XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ4OS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NDkwOnN0YXRpYyB2b2lkIHRyYWNlZnNfZnJlZV9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTQ5MS17XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNDk0LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo0OTU6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgdHJhY2Vmc19jb250ZXh0X29wcyA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmM6NDk2OlxcdC5mcmVlXFx0XFx0PSB0cmFjZWZzX2ZyZWVfZmMsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ5NzpcXHQucGFyc2VfcGFyYW1cXHQ9IHRyYWNlZnNfcGFyc2VfcGFyYW0sXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ5ODpcXHQuZ2V0X3RyZWVcXHQ9IHRyYWNlZnNfZ2V0X3RyZWUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjQ5OTpcXHQucmVjb25maWd1cmVcXHQ9IHRyYWNlZnNfcmVjb25maWd1cmUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUwMC19O1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01MDEtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUwMjpzdGF0aWMgaW50IHRyYWNlZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy90cmFjZWZzL2lub2RlLmMtNTAzLXtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTA0OlxcdHN0cnVjdCB0cmFjZWZzX2ZzX2luZm8gKmZzaTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNTA1LVxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MDY6XFx0ZnNpID0ga3phbGxvY19vYmooc3RydWN0IHRyYWNlZnNfZnNfaW5mbyk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUwNy1cXHRpZiAoIWZzaSlcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MTItXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IGZzaTtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTEzOlxcdGZjLVxcdTAwM2VvcHMgPSBcXHUwMDI2dHJhY2Vmc19jb250ZXh0X29wcztcXG5mcy90cmFjZWZzL2lub2RlLmMtNTE0LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jPTUxNz1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdHJhY2VfZnNfdHlwZSA9IHtcXG5mcy90cmFjZWZzL2lub2RlLmMtNTE4LVxcdC5vd25lciA9XFx0VEhJU19NT0RVTEUsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUxOTpcXHQubmFtZSA9XFx0XFx0XFxcInRyYWNlZnNcXFwiLFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjA6XFx0LmluaXRfZnNfY29udGV4dCA9IHRyYWNlZnNfaW5pdF9mc19jb250ZXh0LFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MjE6XFx0LnBhcmFtZXRlcnNcXHQ9IHRyYWNlZnNfcGFyYW1fc3BlY3MsXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTUyMi1cXHQua2lsbF9zYiA9XFx0a2lsbF9hbm9uX3N1cGVyLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MjMtfTtcXG5mcy90cmFjZWZzL2lub2RlLmM6NTI0Ok1PRFVMRV9BTElBU19GUyhcXFwidHJhY2Vmc1xcXCIpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01MjUtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUyNjpzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX3N0YXJ0X2NyZWF0aW5nKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudClcXG5mcy90cmFjZWZzL2lub2RlLmMtNTI3LXtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01MzAtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUzMTpcXHRwcl9kZWJ1ZyhcXFwidHJhY2VmczogY3JlYXRpbmcgZmlsZSAnJXMnXFxcXG5cXFwiLG5hbWUpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01MzItXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjUzMzpcXHRlcnJvciA9IHNpbXBsZV9waW5fZnMoXFx1MDAyNnRyYWNlX2ZzX3R5cGUsIFxcdTAwMjZ0cmFjZWZzX21vdW50LFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo1MzQ6XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRyYWNlZnNfbW91bnRfY291bnQpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01MzUtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU0My1cXHRpZiAoIXBhcmVudClcXG5mcy90cmFjZWZzL2lub2RlLmM6NTQ0OlxcdFxcdHBhcmVudCA9IHRyYWNlZnNfbW91bnQtXFx1MDAzZW1udF9yb290O1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01NDUtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNTQ3LVxcdGlmIChJU19FUlIoZGVudHJ5KSlcXG5mcy90cmFjZWZzL2lub2RlLmM6NTQ4OlxcdFxcdHNpbXBsZV9yZWxlYXNlX2ZzKFxcdTAwMjZ0cmFjZWZzX21vdW50LCBcXHUwMDI2dHJhY2Vmc19tb3VudF9jb3VudCk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU0OS1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01NTItXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU1MzpzdHJ1Y3QgZGVudHJ5ICp0cmFjZWZzX2ZhaWxlZF9jcmVhdGluZyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1NC17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1NS1cXHRzaW1wbGVfZG9uZV9jcmVhdGluZyhkZW50cnkpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo1NTY6XFx0c2ltcGxlX3JlbGVhc2VfZnMoXFx1MDAyNnRyYWNlZnNfbW91bnQsIFxcdTAwMjZ0cmFjZWZzX21vdW50X2NvdW50KTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNTU3LVxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU1OS1cXG5mcy90cmFjZWZzL2lub2RlLmM6NTYwOnN0cnVjdCBkZW50cnkgKnRyYWNlZnNfZW5kX2NyZWF0aW5nKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy90cmFjZWZzL2lub2RlLmMtNTYxLXtcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYz01Njc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaW5zdGFuY2VfaW5vZGUoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01Njgte1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo1Njk6XFx0c3RydWN0IHRyYWNlZnNfaW5vZGUgKnRpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy01NzAtXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNTc2LVxcdHdoaWxlICghSVNfUk9PVChwYXJlbnQpKSB7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU3NzpcXHRcXHR0aSA9IGdldF90cmFjZWZzKGRfaW5vZGUocGFyZW50KSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU3OC1cXHRcXHRpZiAodGktXFx1MDAzZWZsYWdzIFxcdTAwMjYgVFJBQ0VGU19JTlNUQU5DRV9JTk9ERSlcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01ODYtLyoqXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU4NzogKiB0cmFjZWZzX2NyZWF0ZV9maWxlIC0gY3JlYXRlIGEgZmlsZSBpbiB0aGUgdHJhY2VmcyBmaWxlc3lzdGVtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU4OC0gKiBAbmFtZTogYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTU5MS0gKiAgICAgICAgICBkaXJlY3RvcnkgZGVudHJ5IGlmIHNldC4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIE5VTEwsIHRoZW4gdGhlXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjU5MjogKiAgICAgICAgICBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgdHJhY2VmcyBmaWxlc3lzdGVtLlxcbmZzL3RyYWNlZnMvaW5vZGUuYy01OTMtICogQGRhdGE6IGEgcG9pbnRlciB0byBzb21ldGhpbmcgdGhhdCB0aGUgY2FsbGVyIHdpbGwgd2FudCB0byBnZXQgdG8gbGF0ZXJcXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy01OTgtICpcXG5mcy90cmFjZWZzL2lub2RlLmM6NTk5OiAqIFRoaXMgaXMgdGhlIGJhc2ljIFxcXCJjcmVhdGUgYSBmaWxlXFxcIiBmdW5jdGlvbiBmb3IgdHJhY2Vmcy4gIEl0IGFsbG93cyBmb3IgYVxcbmZzL3RyYWNlZnMvaW5vZGUuYy02MDAtICogd2lkZSByYW5nZSBvZiBmbGV4aWJpbGl0eSBpbiBjcmVhdGluZyBhIGZpbGUsIG9yIGEgZGlyZWN0b3J5IChpZiB5b3Ugd2FudFxcbmZzL3RyYWNlZnMvaW5vZGUuYzo2MDE6ICogdG8gY3JlYXRlIGEgZGlyZWN0b3J5LCB0aGUgdHJhY2Vmc19jcmVhdGVfZGlyKCkgZnVuY3Rpb24gaXNcXG5mcy90cmFjZWZzL2lub2RlLmMtNjAyLSAqIHJlY29tbWVuZGVkIHRvIGJlIHVzZWQgaW5zdGVhZC4pXFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNjA0LSAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBwb2ludGVyIHRvIGEgZGVudHJ5IGlmIGl0IHN1Y2NlZWRzLiAgVGhpc1xcbmZzL3RyYWNlZnMvaW5vZGUuYzo2MDU6ICogcG9pbnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgdHJhY2Vmc19yZW1vdmUoKSBmdW5jdGlvbiB3aGVuIHRoZSBmaWxlIGlzXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwNi0gKiB0byBiZSByZW1vdmVkIChubyBhdXRvbWF0aWMgY2xlYW51cCBoYXBwZW5zIGlmIHlvdXIgbW9kdWxlIGlzIHVubG9hZGVkLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYwOC0gKlxcbmZzL3RyYWNlZnMvaW5vZGUuYzo2MDk6ICogSWYgdHJhY2VmcyBpcyBub3QgZW5hYmxlZCBpbiB0aGUga2VybmVsLCB0aGUgdmFsdWUgLSVFTk9ERVYgd2lsbCBiZVxcbmZzL3RyYWNlZnMvaW5vZGUuYy02MTAtICogcmV0dXJuZWQuXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxMS0gKi9cXG5mcy90cmFjZWZzL2lub2RlLmM6NjEyOnN0cnVjdCBkZW50cnkgKnRyYWNlZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW1vZGVfdCBtb2RlLFxcbmZzL3RyYWNlZnMvaW5vZGUuYy02MTMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLFxcbi0tXFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxNS17XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYxNjpcXHRzdHJ1Y3QgdHJhY2Vmc19pbm9kZSAqdGk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYxNy1cXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNjI1LVxcdEJVR19PTighU19JU1JFRyhtb2RlKSk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYyNjpcXHRkZW50cnkgPSB0cmFjZWZzX3N0YXJ0X2NyZWF0aW5nKG5hbWUsIHBhcmVudCk7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYyNy1cXG4tLVxcbmZzL3RyYWNlZnMvaW5vZGUuYy02MzAtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzMTpcXHRpbm9kZSA9IHRyYWNlZnNfZ2V0X2lub2RlKGRlbnRyeS1cXHUwMDNlZF9zYik7XFxuZnMvdHJhY2Vmcy9pbm9kZS5jLTYzMi1cXHRpZiAodW5saWtlbHkoIWlub2RlKSlcXG5mcy90cmFjZWZzL2lub2RlLmM6NjMzOlxcdFxcdHJldHVybiB0cmFjZWZzX2ZhaWxlZF9jcmVhdGluZyhkZW50cnkpO1xcbmZzL3RyYWNlZnMvaW5vZGUuYy02MzQtXFxuZnMvdHJhY2Vmcy9pbm9kZS5jOjYzNTpcXHR0aSA9IGdldF90cmFjZWZzKGlub2RlKTtcXG5mcy90cmFjZWZzL2lub2RlLmMtNjM2LVxcdHRpLVxcdTAwM2Vwcml2YXRlID0gaW5zdGFuY2VfaW5vZGUocGFyZW50LCBpbm9kZSk7XFxuLS1cXG5mcy90cmFjZWZzL2lub2RlLmMtNjM4LVxcdGlub2RlLVxcdTAwM2VpX21vZGUgPSBtb2RlO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo0NC4wNTg3NDQ5NzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4Njc5ODkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFJpbmcgQnVmZmVyIG1tYXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgcmluZyBidWZmZXIncyBtZW1vcnktbWFwcGVkIGFjY2Vzcy4gRmlyc3QsIEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBoYW5kbGVkIGJ5IGBDT05GSUdfVFJBQ0lOR2Agb3IgcGVyaGFwcyB0aGUgbW9yZSBncmFudWxhciBgQ09ORklHX0ZUUkFDRWAsIG9yIGV2ZW4gYW5vdGhlciBjb25maWcgZW50aXJlbHkuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGBtZW51Y29uZmlnYCBvcHRpb25zIHVuZGVyIFRSQUNJTkcuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIHRvIHJpbmcgYnVmZmVyIG1tYXAuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ2xsIGhlYWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGByaW5nX2J1ZmZlcl9tYXBgIGlzIGRlZmluZWQuIEknbGwgc3RhcnQgd2l0aCBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgIGFuZCB0aGVuIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBpbmNsdWRlIGBrZXJuZWwvdHJhY2UvdHJhY2UuY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG1lbW9yeSBtYXBwaW5nIGlzIG1hbmFnZWQgYW5kIGlmIHRoZXJlIGFyZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzI5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NDcuMDQ1NTQ2MTI1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzM4MTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc4MzM9c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03ODM5LVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc4NDA6aW50IHJpbmdfYnVmZmVyX21hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzg0MS1cXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTA5LSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc5MTA6dm9pZCByaW5nX2J1ZmZlcl9tYXBfZHVwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTExLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc5Mjc9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjEtXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzk2MjppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc5NjMte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzM2NT1zdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4MC1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3MzgxOlxcdFxcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcixcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgyLVxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlci1cXHUwMDNlY3B1X2ZpbGUpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzQwNT1zdGF0aWMgdm9pZCB0cmFjaW5nX2J1ZmZlcnNfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzQwOS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NDEwOlxcdHJpbmdfYnVmZmVyX21hcF9kdXAoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIsIGl0ZXItXFx1MDAzZWNwdV9maWxlKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDExLX1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0Mzc9c3RhdGljIGludCB0cmFjaW5nX2J1ZmZlcnNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUwLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc0NTE6XFx0cmV0ID0gcmluZ19idWZmZXJfbWFwKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLCBpdGVyLVxcdTAwM2VjcHVfZmlsZSwgdm1hKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDUyLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjQ3LjE0MjkzMTc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzY3MzMwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgcmluZ19idWZmZXJfbWFwYCBvciBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIGFyZSB3cmFwcGVkIGluIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MsIHNwZWNpZmljYWxseSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gVGhpcyBpcyBhIGNvbW1vbiBwcmFjdGljZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIG9yIGVuYWJsaW5nL2Rpc2FibGluZyBmZWF0dXJlcyBiYXNlZCBvbiBidWlsZCBjb25maWd1cmF0aW9ucy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGNyaXRpY2FsIGZvciBlZmZpY2llbnQgZGF0YSB0cmFuc2Zlciwgc28gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0ncyBiZWhhdmlvci4gSSBuZWVkIHRvIGtub3cgKmltbWVkaWF0ZWx5KiBpZiB0aGV5J3JlIHRyZWF0ZWQgZGlmZmVyZW50bHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBTbywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gZm9yIHRob3NlIGRpcmVjdGl2ZXMgYXJvdW5kIHRob3NlIHR3byBmdW5jdGlvbiBuYW1lcy4gVGhpcyB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZnVuY3Rpb24ncyBhZGFwdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Njc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NDkuMDE5NjY5MTU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODMwOlxcdFxcdHJldHVybiBlcnI7XFxuNzgzMTpcXHR9XFxuNzgzMjpcXHQjZWxzZVxcbjc4MzM6XFx0c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXFxuNzgzNDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG43ODM1OlxcdHtcXG43ODM2OlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG43ODM3OlxcdH1cXG43ODM4OlxcdCNlbmRpZlxcbjc4Mzk6XFx0XFxuNzg0MDpcXHRpbnQgcmluZ19idWZmZXJfbWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSxcXG43ODQxOlxcdFxcdFxcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG43ODQyOlxcdHtcXG43ODQzOlxcdFxcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xcbjc4NDQ6XFx0XFx0c3RydWN0IGJ1ZmZlcl9wYWdlICoqc3ViYnVmX2lkcztcXG43ODQ1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuNzg0NjpcXHRcXHRpbnQgZXJyO1xcbjc4NDc6XFx0XFxuNzg0ODpcXHRcXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItXFx1MDAzZWNwdW1hc2spIHx8IGJ1ZmZlci1cXHUwMDNlcmVtb3RlKVxcbjc4NDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzg1MDpcXHRcXG43ODUxOlxcdFxcdGNwdV9idWZmZXIgPSBidWZmZXItXFx1MDAzZWJ1ZmZlcnNbY3B1XTtcXG43ODUyOlxcdFxcbjc4NTM6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VtYXBwaW5nX2xvY2spO1xcbjc4NTQ6XFx0XFxuNzg1NTpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNldXNlcl9tYXBwZWQpIHtcXG43ODU2OlxcdFxcdFxcdGVyciA9IF9fcmJfbWFwX3ZtYShjcHVfYnVmZmVyLCB2bWEpO1xcbjc4NTc6XFx0XFx0XFx0aWYgKCFlcnIpXFxuNzg1ODpcXHRcXHRcXHRcXHRlcnIgPSBfX3JiX2luY19kZWNfbWFwcGVkKGNwdV9idWZmZXIsIHRydWUpO1xcbjc4NTk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43ODYwOlxcdFxcdH1cXG43ODYxOlxcdFxcbjc4NjI6XFx0XFx0LyogcHJldmVudCBhbm90aGVyIHRocmVhZCBmcm9tIGNoYW5naW5nIGJ1ZmZlci9zdWItYnVmZmVyIHNpemVzICovXFxuNzg2MzpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNmJ1ZmZlci1cXHUwMDNlbXV0ZXgpO1xcbjc4NjQ6XFx0XFxuNzg2NTpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlbnJfcGFnZXMgXFx1MDAzZSByYl9zdGF0aWNfbWF4X3BhZ2VzKCkpXFxuNzg2NjpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbjc4Njc6XFx0XFxuNzg2ODpcXHRcXHRlcnIgPSByYl9hbGxvY19tZXRhX3BhZ2UoY3B1X2J1ZmZlcik7XFxuNzg2OTpcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo0OS4wMjAwMjQ5MTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MDcyNTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGtlcm5lbCB0cmFjaW5nIGNvZGUuXG5cbioqRGl2aW5nIGludG8gdGhlIFJpbmcgQnVmZmVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhYm92ZSBsaW5lIDc4MzAuIEdpdmVuIG15IGJhY2tncm91bmQsIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGZhaXJseSBsb3ctbGV2ZWwsIGxpa2VseSBkZWFsaW5nIHdpdGggY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoYXQgbGluZS4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlczogQXJlIHdlIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBkYXRhIGFjY2Vzcywgb3IgZXJyb3IgaGFuZGxpbmc/IElzIGl0IHJlbGF0ZWQgdG8gd3JpdGVyIG9wZXJhdGlvbnMsIG9yIG1heWJlIGEgcmVhZGVyIHNpZGUgdGhhdCBpcyBpbiBwbGFjZT8gSSB3aWxsIGV4cGVjdCBpdCB0byBiZSBhIGtleSBhcmVhIHRoYXQgSSBjYW4gdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgc291cmNlcyB0byB1bmRlcnN0YW5kIHRoZSB3b3JraW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0ODAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjUwLjk5MDc1NTA1OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc5MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzc5MDpcXHRcXHRcXHQvKlxcbjc3OTE6XFx0XFx0XFx0ICogUGFkIHdpdGggdGhlIHplcm8tcGFnZSB0byBhbGlnbiB0aGUgbWV0YS1wYWdlIHdpdGggdGhlXFxuNzc5MjpcXHRcXHRcXHQgKiBzdWItYnVmZmVycy5cXG43NzkzOlxcdFxcdFxcdCAqL1xcbjc3OTQ6XFx0XFx0XFx0bWV0YV9wYWdlX3BhZGRpbmcgPSBzdWJidWZfcGFnZXMgLSAxO1xcbjc3OTU6XFx0XFx0XFx0d2hpbGUgKG1ldGFfcGFnZV9wYWRkaW5nLS0gXFx1MDAyNlxcdTAwMjYgcCBcXHUwMDNjIG5yX3BhZ2VzKSB7XFxuNzc5NjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIF9fbWF5YmVfdW51c2VkIHplcm9fYWRkciA9XFxuNzc5NzpcXHRcXHRcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX3N0YXJ0ICsgKFBBR0VfU0laRSAqIHApO1xcbjc3OTg6XFx0XFxuNzc5OTpcXHRcXHRcXHRcXHRwYWdlc1twKytdID0gWkVST19QQUdFKHplcm9fYWRkcik7XFxuNzgwMDpcXHRcXHRcXHR9XFxuNzgwMTpcXHRcXHR9IGVsc2Uge1xcbjc4MDI6XFx0XFx0XFx0LyogU2tpcCB0aGUgbWV0YS1wYWdlICovXFxuNzgwMzpcXHRcXHRcXHRwZ29mZiAtPSBzdWJidWZfcGFnZXM7XFxuNzgwNDpcXHRcXG43ODA1OlxcdFxcdFxcdHMgKz0gcGdvZmYgLyBzdWJidWZfcGFnZXM7XFxuNzgwNjpcXHRcXHR9XFxuNzgwNzpcXHRcXG43ODA4OlxcdFxcdHdoaWxlIChwIFxcdTAwM2MgbnJfcGFnZXMpIHtcXG43ODA5OlxcdFxcdFxcdHN0cnVjdCBidWZmZXJfcGFnZSAqc3ViYnVmO1xcbjc4MTA6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNzgxMTpcXHRcXHRcXHRpbnQgb2ZmID0gMDtcXG43ODEyOlxcdFxcbjc4MTM6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShzIFxcdTAwM2U9IG5yX3N1YmJ1ZnMpKVxcbjc4MTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzgxNTpcXHRcXG43ODE2OlxcdFxcdFxcdHN1YmJ1ZiA9IGNwdV9idWZmZXItXFx1MDAzZXN1YmJ1Zl9pZHNbc107XFxuNzgxNzpcXHRcXHRcXHRwYWdlID0gdmlydF90b19wYWdlKCh2b2lkICopc3ViYnVmLVxcdTAwM2VwYWdlKTtcXG43ODE4OlxcdFxcbjc4MTk6XFx0XFx0XFx0Zm9yICg7IG9mZiBcXHUwMDNjICgxIFxcdTAwM2NcXHUwMDNjIChzdWJidWZfb3JkZXIpKTsgb2ZmKyssIHBhZ2UrKykge1xcbjc4MjA6XFx0XFx0XFx0XFx0aWYgKHAgXFx1MDAzZT0gbnJfcGFnZXMpXFxuNzgyMTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43ODIyOlxcdFxcbjc4MjM6XFx0XFx0XFx0XFx0cGFnZXNbcCsrXSA9IHBhZ2U7XFxuNzgyNDpcXHRcXHRcXHR9XFxuNzgyNTpcXHRcXHRcXHRzKys7XFxuNzgyNjpcXHRcXHR9XFxuNzgyNzpcXHRcXG43ODI4OlxcdFxcdGVyciA9IHZtX2luc2VydF9wYWdlcyh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHBhZ2VzLCBcXHUwMDI2bnJfcGFnZXMpO1xcbjc4Mjk6XFx0XFxuNzgzMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjc4MzE6XFx0fVxcbjc4MzI6XFx0I2Vsc2VcXG43ODMzOlxcdHN0YXRpYyBpbnQgX19yYl9tYXBfdm1hKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxcbjc4MzQ6XFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjUwLjk5MTM1NzA5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI4MTQ5NDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gUmluZyBCdWZmZXIgVGVycml0b3J5KipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGAjaWZkZWZgIGJsb2NrIGFyb3VuZCBsaW5lIDc3NTAuIFdoYXQncyB0aGUgY29udGV4dCB0aGVyZT8gSSdtIGJldHRpbmcgaXQncyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZSwgcHJvYmFibHkgZ3VhcmRpbmcgc29tZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBtYXliZSBhIGRlYnVnIGZlYXR1cmUsIGEgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGEgc2VjdGlvbiBvZiBjb2RlIHRpZWQgdG8gYSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW5pdGlhbCBndWVzcyB3b3VsZCBiZSBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGJ1dCBJIHdpbGwgZ28gYW5kIGZpbmQgb3V0LiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IGZvciBhIG51bWJlciBvZiByZWFzb25zIGRlcGVuZGluZyBvbiB3aGF0IGl0IGlzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1hY3JvIGlzIGJlaW5nIHRlc3RlZCBhbmQgdGhlbiBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGF0IG1hY3JvIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgY29udHJvbHMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgcGFydCBvZiB0aGUgcmluZyBidWZmZXIgY29kZSBiZWhhdmVzIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM0NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NTMuNTE5NTA5NzYxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NzQwOlxcdHtcXG43NzQxOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc3ViYnVmcywgbnJfcGFnZXMsIG5yX3ZtYV9wYWdlcztcXG43NzQyOlxcdFxcdHBnb2ZmX3QgcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYodm1hKTtcXG43NzQzOlxcdFxcdHVuc2lnbmVkIGludCBzdWJidWZfcGFnZXMsIHN1YmJ1Zl9vcmRlcjtcXG43NzQ0OlxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXMgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuNzc0NTpcXHRcXHRpbnQgcCA9IDAsIHMgPSAwO1xcbjc3NDY6XFx0XFx0aW50IGVycjtcXG43NzQ3OlxcdFxcbjc3NDg6XFx0XFx0LyogUmVmdXNlIE1QX1BSSVZBVEUgb3Igd3JpdGFibGUgbWFwcGluZ3MgKi9cXG43NzQ5OlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV1JJVEUgfHwgdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0VYRUMgfHxcXG43NzUwOlxcdFxcdCAgICAhKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9NQVlTSEFSRSkpXFxuNzc1MTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjc3NTI6XFx0XFxuNzc1MzpcXHRcXHRzdWJidWZfb3JkZXIgPSBjcHVfYnVmZmVyLVxcdTAwM2VidWZmZXItXFx1MDAzZXN1YmJ1Zl9vcmRlcjtcXG43NzU0OlxcdFxcdHN1YmJ1Zl9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2Mgc3ViYnVmX29yZGVyO1xcbjc3NTU6XFx0XFxuNzc1NjpcXHRcXHRpZiAoc3ViYnVmX29yZGVyIFxcdTAwMjZcXHUwMDI2IHBnb2ZmICUgc3ViYnVmX3BhZ2VzKVxcbjc3NTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzc1ODpcXHRcXG43NzU5OlxcdFxcdC8qXFxuNzc2MDpcXHRcXHQgKiBNYWtlIHN1cmUgdGhlIG1hcHBpbmcgY2Fubm90IGJlY29tZSB3cml0YWJsZSBsYXRlci4gQWxzbyB0ZWxsIHRoZSBWTVxcbjc3NjE6XFx0XFx0ICogdG8gbm90IHRvdWNoIHRoZXNlIHBhZ2VzIChWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQpLlxcbjc3NjI6XFx0XFx0ICovXFxuNzc2MzpcXHRcXHR2bV9mbGFnc19tb2Qodm1hLCBWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCxcXG43NzY0OlxcdFxcdFxcdCAgICAgVk1fTUFZV1JJVEUpO1xcbjc3NjU6XFx0XFxuNzc2NjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VtYXBwaW5nX2xvY2spO1xcbjc3Njc6XFx0XFxuNzc2ODpcXHRcXHRucl9zdWJidWZzID0gY3B1X2J1ZmZlci1cXHUwMDNlbnJfcGFnZXMgKyAxOyAvKiArIHJlYWRlci1zdWJidWYgKi9cXG43NzY5OlxcdFxcdG5yX3BhZ2VzID0gKChucl9zdWJidWZzICsgMSkgXFx1MDAzY1xcdTAwM2Mgc3ViYnVmX29yZGVyKTsgLyogKyBtZXRhLXBhZ2UgKi9cXG43NzcwOlxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNjPSBwZ29mZilcXG43NzcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc3NzI6XFx0XFxuNzc3MzpcXHRcXHRucl9wYWdlcyAtPSBwZ29mZjtcXG43Nzc0OlxcdFxcbjc3NzU6XFx0XFx0bnJfdm1hX3BhZ2VzID0gdm1hX3BhZ2VzKHZtYSk7XFxuNzc3NjpcXHRcXHRpZiAoIW5yX3ZtYV9wYWdlcyB8fCBucl92bWFfcGFnZXMgXFx1MDAzZSBucl9wYWdlcylcXG43Nzc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc3Nzg6XFx0XFxuNzc3OTpcXHRcXHRucl9wYWdlcyA9IG5yX3ZtYV9wYWdlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NTMuNTIwMDYxMTkxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODgxOTM2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIEknbSBzcGVjaWZpY2FsbHkgY3VyaW91cyBhYm91dCBob3cgYCNpZmRlZmAgZGlyZWN0aXZlcyBhcmUgYmVpbmcgdXNlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBpbnN0YW5jZXMgdGhhdCBiZWdpbiAqYWJvdmUqIGxpbmUgNzc0MC4gVGhpcyBzdWdnZXN0cyBJJ20gbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHBhdHRlcm4gb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSByZWxhdGVkIHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGhpbiBhIGxhcmdlciBibG9jayBvZiBjb2RlLiBJJ20gcHJvYmFibHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGEgc3BlY2lmaWMgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBwZXJoYXBzIHBpbnBvaW50aW5nIGEgYnVnIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaGUgbGluZSBudW1iZXIgaXMgbXkgaW5pdGlhbCBhbmNob3IgcG9pbnQ7IGl0IGNvdWxkIGJlIGEgc2VjdGlvbiB3aXRoIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9yIHByb2JsZW1hdGljIGNvbmRpdGlvbmFsIGxvZ2ljLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBhcm91bmQgdGhpcyBsaW5lIG51bWJlciBpbiBtaW5kLCBhbmQgdW5kZXJzdGFuZCB3aGljaCBmZWF0dXJlcyBtYXkgYmUgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo1NS40MDgyNTcyNTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NzIwOlxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfbG9jaywgZmxhZ3MpO1xcbjc3MjE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VidWZmZXItXFx1MDAzZW11dGV4KTtcXG43NzIyOlxcdFxcbjc3MjM6XFx0XFx0cmV0dXJuIDA7XFxuNzcyNDpcXHR9XFxuNzcyNTpcXHRcXG43NzI2OlxcdC8qXFxuNzcyNzpcXHQgKiAgICstLS0tLS0tLS0tLS0tLSsgIHBnb2ZmID09IDBcXG43NzI4OlxcdCAqICAgfCAgIG1ldGEgcGFnZSAgfFxcbjc3Mjk6XFx0ICogICArLS0tLS0tLS0tLS0tLS0rICBwZ29mZiA9PSAxXFxuNzczMDpcXHQgKiAgIHwgc3ViYnVmZmVyIDAgIHxcXG43NzMxOlxcdCAqICAgfCAgICAgICAgICAgICAgfFxcbjc3MzI6XFx0ICogICArLS0tLS0tLS0tLS0tLS0rICBwZ29mZiA9PSAoMSArICgxIFxcdTAwM2NcXHUwMDNjIHN1YmJ1Zl9vcmRlcikpXFxuNzczMzpcXHQgKiAgIHwgc3ViYnVmZmVyIDEgIHxcXG43NzM0OlxcdCAqICAgfCAgICAgICAgICAgICAgfFxcbjc3MzU6XFx0ICogICAgICAgICAuLi5cXG43NzM2OlxcdCAqL1xcbjc3Mzc6XFx0I2lmZGVmIENPTkZJR19NTVVcXG43NzM4OlxcdHN0YXRpYyBpbnQgX19yYl9tYXBfdm1hKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxcbjc3Mzk6XFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuNzc0MDpcXHR7XFxuNzc0MTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3N1YmJ1ZnMsIG5yX3BhZ2VzLCBucl92bWFfcGFnZXM7XFxuNzc0MjpcXHRcXHRwZ29mZl90IHBnb2ZmID0gdm1hX3N0YXJ0X3Bnb2ZmKHZtYSk7XFxuNzc0MzpcXHRcXHR1bnNpZ25lZCBpbnQgc3ViYnVmX3BhZ2VzLCBzdWJidWZfb3JkZXI7XFxuNzc0NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo1NS40MDk4NTUzMTVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA3NTEyNDk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUmluZyBCdWZmZXIgVnVsbmVyYWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gVGhpcyBsb29rcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB2dWxuZXJhYmlsaXR5IHRvIHRhcmdldC4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhbWQ2NCwgYENPTkZJR19NTVVgIGlzIGEgZ2l2ZW4sIHNvIHdlIGNhbiBpZ25vcmUgdGhhdC4gVGhlIGtleSBjb25maWdzIHdlJ3JlIGNvbmNlcm5lZCB3aXRoIGFyZSBgQ09ORklHX1RSQUNJTkdgIGFuZCBgQ09ORklHX1JJTkdfQlVGRkVSYC4gV2UgKm11c3QqIGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBlbmFibGVkIGJlY2F1c2UgYFRSQUNJTkdgIGlzIHdoYXQgZW5hYmxlcyBgcmluZ19idWZmZXIub2AgYW5kIGB0cmFjZS5vYCwgd2hpY2ggYXJlIGNlbnRyYWwgaGVyZS5cblxuTm93LCBsZXQncyB2ZXJpZnkgb3VyIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmU6XG5cbiogICBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgXG4qICAgYHRyYWNpbmdfYnVmZmVyc19pb2N0bGBcbiogICBgcmluZ19idWZmZXJfbWFwYFxuKiAgIGByYl9nZXRfcmVhZGVyX3BhZ2VgXG5cbk9rYXksIHRob3NlIGxvb2sgc3BvdCBvbi4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhpcyBjb2RlIHBhdGggYW5kIG5vdCB1YmlxdWl0b3VzIGFjcm9zcyB0aGUga2VybmVsLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC5cblxuSSdsbCBxdWlja2x5IHRyYWNlIHRoZSBjYWxsIGZsb3cgdG8gZW5zdXJlIHRoaXMgaXMgc29saWQ6IGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGNhbGxzIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAsIHdoaWNoIGNhbGxzIGByYl9nZXRfcmVhZGVyX3BhZ2VgLiBBbmQgYHRyYWNpbmdfYnVmZmVyc19tbWFwYCBjYWxscyBgcmluZ19idWZmZXJfbWFwYC4gTG9va3MgZ29vZC5cblxuTm93LCB0aW1lIHRvIG5haWwgZG93biB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJ2xsIHN1bW1hcml6ZSBldmVyeXRoaW5nIGZvciBtYXhpbXVtIGNsYXJpdHk6XG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZSwgYWJzb2x1dGVseS5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBhbmQgYWNjdXJhdGU6IFRoZSBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCBpcyBhbHRlcmluZyBhIGBXQVJOX09OYCBhc3NlcnRpb24gbG9naWMgaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgdHJhY2Vmc2AgaW9jdGwgYFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUmAgb24gYHRyYWNlX3BpcGVfcmF3YC5cbiogICBgRm9jdXNTeW1ib2xzYDogQ29uZmlybWVkLiBJIGhhdmUgdGhlc2UgZXhhY3RseSByaWdodDogYFtcInJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyXCIsIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsIFwicmluZ19idWZmZXJfbWFwXCIsIFwicmJfZ2V0X3JlYWRlcl9wYWdlXCJdYC5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEp1c3QgdGhlIG9uZSBuZWVkZWQ6IGBbXCJUUkFDSU5HXCJdYC5cblxuUGVyZmVjdC4gRmluYWwgcmV2aWV3IGNvbXBsZXRlLiBSZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MTgsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzc6NTkuNDg0OTg0MDk3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MzE3OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFDSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJcIixcbiAgICBcInRyYWNpbmdfYnVmZmVyc19pb2N0bFwiLFxuICAgIFwicmluZ19idWZmZXJfbWFwXCIsXG4gICAgXCJyYl9nZXRfcmVhZGVyX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBXQVJOX09OIGFzc2VydGlvbiBsb2dpYyBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpIGluIGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLCByZWxheGluZyB0aGUgY29uZGl0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIHRvIG9ubHkgdHJpZ2dlciB3aGVuIHJlYWRlcl9wYWdlIGlzIG5vdCBlcXVhbCB0byBjb21taXRfcGFnZS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSIGlvY3RsIG9uIHRyYWNlZnMgcGVyLUNQVSB0cmFjZV9waXBlX3JhdyBmaWxlcyBhZnRlciBtbWFwcGluZyB0aGUgYnVmZmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQUNJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlclwiLFxuICAgIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgICBcInJiX2dldF9yZWFkZXJfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFdBUk5fT04gYXNzZXJ0aW9uIGxvZ2ljIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkgaW4ga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMsIHJlbGF4aW5nIHRoZSBjb25kaXRpb24gd2hlbiByYl9nZXRfcmVhZGVyX3BhZ2UoKSByZXR1cm5zIE5VTEwgdG8gb25seSB0cmlnZ2VyIHdoZW4gcmVhZGVyX3BhZ2UgaXMgbm90IGVxdWFsIHRvIGNvbW1pdF9wYWdlLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVIgaW9jdGwgb24gdHJhY2VmcyBwZXItQ1BVIHRyYWNlX3BpcGVfcmF3IGZpbGVzIGFmdGVyIG1tYXBwaW5nIHRoZSBidWZmZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM3OjU5LjU5OTMxMTA4OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NzA4NTAzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo1OS42MDAxNjYyNjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDU2OTk4NjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yL3dhcm5pbmcgY29uZGl0aW9uIGluIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpYCB3aGVuIGByYl9nZXRfcmVhZGVyX3BhZ2UoKWAgcmV0dXJucyBOVUxMLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSB0cmlnZ2VyaW5nIGBXQVJOX09OKCFyZWFkZXIpYCwgaXQgbm93IG9ubHkgd2FybnMgaWYgYGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZjQ4YzM5ZjYwOWI3YzViNTA3MDhlZjcwYWI2YjAwOGJiNTI0YjI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMjozNjo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbmluZGV4IDljMDNhNTU1YTZiYTIuLjk4MTMwMTgyZTA1ZGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbkBAIC03OTk1LDggKzc5OTUsMTAgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG4tXHRpZiAoV0FSTl9PTighcmVhZGVyKSlcbitcdGlmICghcmVhZGVyKSB7XG4rXHRcdFdBUk5fT04oY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKTtcbiBcdFx0Z290byBvdXQ7XG4rXHR9XG4gXG4gXHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xuIFx0bWlzc2VkX2V2ZW50cyA9IGNwdV9idWZmZXItXHUwMDNlbG9zdF9ldmVudHM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozNzo1OS42MDAxNjgwMDhaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2MDA5NjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBSaW5nIEJ1ZmZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldy4gVGhlIGZpbGUgbW9kaWZpZWQgaXMgYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpbnZvbHZlcyB0aGUga2VybmVsJ3MgdHJhY2luZyByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiDigJMgZGVmaW5pdGVseSBhbiBhcmVhIEknbSBmYW1pbGlhciB3aXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGZ1bmN0aW9uYWxpdHkuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgY29kZSBhcm91bmQgbGluZSA3OTk1LiBJJ2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBnZXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLiBVbmRlcnN0YW5kaW5nIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBpcyBjcml0aWNhbCBiZWZvcmUgdHJ5aW5nIHRvIGd1ZXNzIHdoYXQgdGhlIHB1cnBvc2UgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM4OjA0LjU2MDI2NzAyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk4MDpcXHRcXHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSk7XFxuNzk4MTpcXHRcXG43OTgyOlxcdFxcdC8qXFxuNzk4MzpcXHRcXHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cXG43OTg0OlxcdFxcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxcbjc5ODU6XFx0XFx0ICogZXZlcnl0aGluZy4gTGV0J3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5Llxcbjc5ODY6XFx0XFx0ICovXFxuNzk4NzpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSkge1xcbjc5ODg6XFx0XFx0XFx0d2hpbGUgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpXFxuNzk4OTpcXHRcXHRcXHRcXHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcXG43OTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTE6XFx0XFx0fVxcbjc5OTI6XFx0XFxuNzk5MzpcXHRcXHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXFxuNzk5NDpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpXFxuNzk5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTk2OlxcdFxcbjc5OTc6XFx0XFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xcbjc5OTg6XFx0XFx0aWYgKCFyZWFkZXIpIHtcXG43OTk5OlxcdFxcdFxcdFdBUk5fT04oY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpO1xcbjgwMDA6XFx0XFx0XFx0Z290byBvdXQ7XFxuODAwMTpcXHRcXHR9XFxuODAwMjpcXHRcXG44MDAzOlxcdFxcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXFxuODAwNDpcXHRcXHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cXHUwMDNlbG9zdF9ldmVudHM7XFxuODAwNTpcXHRcXG44MDA2OlxcdFxcdGlmIChtaXNzZWRfZXZlbnRzKSB7XFxuODAwNzpcXHRcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpIHtcXG44MDA4OlxcdFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cXHUwMDNlcGFnZTtcXG44MDA5OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjb21taXQ7XFxuODAxMDpcXHRcXHRcXHRcXHQvKlxcbjgwMTE6XFx0XFx0XFx0XFx0ICogVXNlIHRoZSByZWFsX2VuZCBmb3IgdGhlIGRhdGEgc2l6ZSxcXG44MDEyOlxcdFxcdFxcdFxcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXFxuODAxMzpcXHRcXHRcXHRcXHQgKiBvbiB0aGUgcGFnZS5cXG44MDE0OlxcdFxcdFxcdFxcdCAqL1xcbjgwMTU6XFx0XFx0XFx0XFx0aWYgKHJlYWRlci1cXHUwMDNlcmVhbF9lbmQpXFxuODAxNjpcXHRcXHRcXHRcXHRcXHRsb2NhbF9zZXQoXFx1MDAyNmRwYWdlLVxcdTAwM2Vjb21taXQsIHJlYWRlci1cXHUwMDNlcmVhbF9lbmQpO1xcbjgwMTc6XFx0XFx0XFx0XFx0LypcXG44MDE4OlxcdFxcdFxcdFxcdCAqIElmIHRoZXJlIGlzIHJvb20gYXQgdGhlIGVuZCBvZiB0aGUgcGFnZSB0byBzYXZlIHRoZVxcbjgwMTk6XFx0XFx0XFx0XFx0ICogbWlzc2VkIGV2ZW50cywgdGhlbiByZWNvcmQgaXQgdGhlcmUuXFxuODAyMDpcXHRcXHRcXHRcXHQgKi9cXG44MDIxOlxcdFxcdFxcdFxcdGNvbW1pdCA9IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpO1xcbjgwMjI6XFx0XFx0XFx0XFx0aWYgKHJiX3BhZ2VfY2FwYWNpdHkocmVhZGVyKSAtIGNvbW1pdCBcXHUwMDNlPSBzaXplb2YobWlzc2VkX2V2ZW50cykpIHtcXG44MDIzOlxcdFxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2ZHBhZ2UtXFx1MDAzZWRhdGFbY29tbWl0XSwgXFx1MDAyNm1pc3NlZF9ldmVudHMsXFxuODAyNDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG1pc3NlZF9ldmVudHMpKTtcXG44MDI1OlxcdFxcdFxcdFxcdFxcdGxvY2FsX2FkZChSQl9NSVNTRURfU1RPUkVELCBcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCk7XFxuODAyNjpcXHRcXHRcXHRcXHR9XFxuODAyNzpcXHRcXHRcXHRcXHRsb2NhbF9hZGQoUkJfTUlTU0VEX0VWRU5UUywgXFx1MDAyNmRwYWdlLVxcdTAwM2Vjb21taXQpO1xcbjgwMjg6XFx0XFx0XFx0fSBlbHNlIGlmICghV0FSTl9PTkNFKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXFx1MDAzZXRhaWxfcGFnZSxcXG44MDI5OlxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJSZWFkZXIgb24gY29tbWl0IHdpdGggJWxkIG1pc3NlZCBldmVudHNcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozODowNC41NjA4OTc0NjhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0MTk1NDI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSB3aG9sZSBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIGZ1bmN0aW9uLiBJIGNhbid0IGp1c3QgbG9vayBhdCBzbmlwcGV0czsgSSBuZWVkIHRoZSBjb21wbGV0ZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBlbnRpcmV0eSBvZiB0aGUgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQganVkZ2VtZW50cyBhYm91dCBpdCwgb3IgaG93IGl0IG1pZ2h0IGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBiZSBhYmxlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIGZyb20gZW50cnkgdG8gZXhpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6Mzg6MDUuOTAyODU1MjUxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTYwOlxcdH1cXG43OTYxOlxcdFxcbjc5NjI6XFx0aW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG43OTYzOlxcdHtcXG43OTY0OlxcdFxcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xcbjc5NjU6XFx0XFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XFxuNzk2NjpcXHRcXHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XFxuNzk2NzpcXHRcXHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xcbjc5Njg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG43OTY5OlxcdFxcbjc5NzA6XFx0XFx0Y3B1X2J1ZmZlciA9IHJiX2dldF9tYXBwZWRfYnVmZmVyKGJ1ZmZlciwgY3B1KTtcXG43OTcxOlxcdFxcdGlmIChJU19FUlIoY3B1X2J1ZmZlcikpXFxuNzk3MjpcXHRcXHRcXHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xcbjc5NzM6XFx0XFxuNzk3NDpcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9sb2NrLCBmbGFncyk7XFxuNzk3NTpcXHRcXG43OTc2OlxcdGNvbnN1bWU6XFxuNzk3NzpcXHRcXHRpZiAocmJfcGVyX2NwdV9lbXB0eShjcHVfYnVmZmVyKSlcXG43OTc4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5Nzk6XFx0XFxuNzk4MDpcXHRcXHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSk7XFxuNzk4MTpcXHRcXG43OTgyOlxcdFxcdC8qXFxuNzk4MzpcXHRcXHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cXG43OTg0OlxcdFxcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxcbjc5ODU6XFx0XFx0ICogZXZlcnl0aGluZy4gTGV0J3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5Llxcbjc5ODY6XFx0XFx0ICovXFxuNzk4NzpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSkge1xcbjc5ODg6XFx0XFx0XFx0d2hpbGUgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpXFxuNzk4OTpcXHRcXHRcXHRcXHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcXG43OTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTE6XFx0XFx0fVxcbjc5OTI6XFx0XFxuNzk5MzpcXHRcXHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXFxuNzk5NDpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpXFxuNzk5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTk2OlxcdFxcbjc5OTc6XFx0XFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xcbjc5OTg6XFx0XFx0aWYgKCFyZWFkZXIpIHtcXG43OTk5OlxcdFxcdFxcdFdBUk5fT04oY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpO1xcbjgwMDA6XFx0XFx0XFx0Z290byBvdXQ7XFxuODAwMTpcXHRcXHR9XFxuODAwMjpcXHRcXG44MDAzOlxcdFxcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXFxuODAwNDpcXHRcXHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cXHUwMDNlbG9zdF9ldmVudHM7XFxuODAwNTpcXHRcXG44MDA2OlxcdFxcdGlmIChtaXNzZWRfZXZlbnRzKSB7XFxuODAwNzpcXHRcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpIHtcXG44MDA4OlxcdFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cXHUwMDNlcGFnZTtcXG44MDA5OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjb21taXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjM4OjA1LjkwMzUyNjI4MVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjY0NTUyNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFJpbmcgQnVmZmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBkaWZmIHJlbGF0ZWQgdG8gYHJiX2dldF9yZWFkZXJfcGFnZWAuIEJlZm9yZSwgdGhlcmUgd2FzIGEgc2ltcGxlIGBXQVJOX09OKCFyZWFkZXIpYCBhZnRlciB0aGUgY2FsbC4gTm93LCB0aGF0J3MgYmVlbiByZXBsYWNlZCB3aXRoIGFuIGBpZiAoIXJlYWRlcilgIGNoZWNrIHRoYXQgaW5jbHVkZXMgYSBgV0FSTl9PTihjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpYCAqb25seSogaWYgYHJlYWRlcmAgaXMgTlVMTC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeSB0aGUgY2hhbmdlPyBBaCwgcmlnaHQsIHRoZSBleHBsYW5hdGlvbiBjbGFyaWZpZXMgdGhhdCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCBjYW4gcmV0dXJuIE5VTEwgaWYgdGhlIHdyaXRlciBpcyBjYXVnaHQgdXAgb3IgdGhlcmUncyBub3RoaW5nIHRvIHJlYWQuIFRoZSBvcmlnaW5hbCBgV0FSTl9PTmAgd2FzIHVuY29uZGl0aW9uYWwsIHNvIGl0J2QgdHJpZ2dlciBldmVuIGluIHRoZXNlIGxlZ2l0aW1hdGUgTlVMTCBzY2VuYXJpb3MuIFRoaXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgc2VlbXMgdG8gYmUgYW4gYXR0ZW1wdCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzLCBvbmx5IHdhcm5pbmcgaWYgdGhlIHJlYWRlciBhbmQgY29tbWl0IHBhZ2VzIGFyZSAqZGlmZmVyZW50KiB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuIEVzc2VudGlhbGx5LCB0aGV5IGFyZSB0cnlpbmcgdG8gZml4IGEgc3B1cmlvdXMgd2FybmluZy5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIGZvciBwb3RlbnRpYWwgcmlza3MuIExldCdzIGNvbnNpZGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBhbHdheXMgdGhlIGZpcnN0IGNvbnNpZGVyYXRpb24sIGFuZCBjb3B5LXRvLXVzZXIgaXNzdWVzLlxuXG4qICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucy4gR29vZC5cbiogICBObyBuZXcgY29weS10by11c2VyIG9wZXJhdGlvbnMuIEZpbmUuXG4qICAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gYnJhbmNoaW5nIG9yIGFueSBsb2dpYy4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG4qICAgVGhlIGNoYW5nZSBpcyAqc29sZWx5KiByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIHdpdGggYW4gaWYgc3RhdGVtZW50IGd1YXJkaW5nIHRoZSBuZXcgd2FybmluZy4gTm90aGluZyBpcyBiZWluZyBleHBvc2VkIG9yIHJlYWQuXG5cbkdpdmVuIHRoZXNlIHBvaW50cywgdGhpcyBsb29rcyBzYWZlLiBJdCdzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBlcnJvciBjaGVja2luZyB0byBiZSBtb3JlIGFjY3VyYXRlLiBObyBLTVNBTiBpcyBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgdGVzdGluZyB3aWxsIHN1ZmZpY2UuIEl0IHNlZW1zIHRvIGJlIGEgbWlub3IgY2xlYW4tdXAsIGZpeGluZyBhIHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZS5cblxuQWxyaWdodCwgSSBhbSBzYXRpc2ZpZWQuIExldCdzIGdldCB0aGUgY2FsbCByZWFkeSwgYW5kIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwMSwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjozODoxMC4xNjgwODE5MzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvci93YXJuaW5nIGNvbmRpdGlvbiBpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKWAgd2hlbiBgcmJfZ2V0X3JlYWRlcl9wYWdlKClgIHJldHVybnMgTlVMTC4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgdHJpZ2dlcmluZyBgV0FSTl9PTighcmVhZGVyKWAsIGl0IG5vdyBvbmx5IHdhcm5zIGlmIGBjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZWAgYmVmb3JlIGp1bXBpbmcgdG8gYG91dGAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGRhdGEgc3RydWN0dXJlcyBvciBzdHJ1Y3QgcGFkZGluZywgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yL3dhcm5pbmcgY29uZGl0aW9uIGluIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpYCB3aGVuIGByYl9nZXRfcmVhZGVyX3BhZ2UoKWAgcmV0dXJucyBOVUxMLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSB0cmlnZ2VyaW5nIGBXQVJOX09OKCFyZWFkZXIpYCwgaXQgbm93IG9ubHkgd2FybnMgaWYgYGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlYCBiZWZvcmUganVtcGluZyB0byBgb3V0YC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN0cnVjdCBwYWRkaW5nLCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmdd4d[1] Phase: Succeeded StartedAt: 2026-09-08 12:38:21 +0000 UTC FinishedAt: 2026-09-08 12:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 12:38:21 +0000 UTC FinishedAt: 2026-09-08 12:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2] Phase: Succeeded StartedAt: 2026-09-08 12:38:21 +0000 UTC FinishedAt: 2026-09-08 16:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 12:38:21 +0000 UTC FinishedAt: 2026-09-08 16:23:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 12:38:21 +0000 UTC FinishedAt: 2026-09-08 12:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 12:38:21 +0000 UTC FinishedAt: 2026-09-08 12:38:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmdd4d/series-workflowmdd4d-convert-artifact-111279487/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 12:38:31 +0000 UTC FinishedAt: 2026-09-08 12:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 12:38:31 +0000 UTC FinishedAt: 2026-09-08 12:56:21 +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:*e86d1fc1-1677-423b-a04f-6ce3b6bd485c,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-workflowmdd4d/series-workflowmdd4d-convert-artifact-111279487/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": "3a10b7d9-9a72-4fc8-9319-ee0a40b16f89", "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-workflowmdd4d/series-workflowmdd4d-build-action-2082002949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 12:38:31 +0000 UTC FinishedAt: 2026-09-08 12:56:11 +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:*e86d1fc1-1677-423b-a04f-6ce3b6bd485c,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-workflowmdd4d/series-workflowmdd4d-convert-artifact-111279487/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": "3a10b7d9-9a72-4fc8-9319-ee0a40b16f89", "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-workflowmdd4d/series-workflowmdd4d-build-action-2082002949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 12:56:21 +0000 UTC FinishedAt: 2026-09-08 12:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 12:56:21 +0000 UTC FinishedAt: 2026-09-08 12:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 12:56:21 +0000 UTC FinishedAt: 2026-09-08 12:56:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 12:56:21 +0000 UTC FinishedAt: 2026-09-08 12:56:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmdd4d/series-workflowmdd4d-convert-artifact-1676707470/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 12:56:32 +0000 UTC FinishedAt: 2026-09-08 12:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 12:56:32 +0000 UTC FinishedAt: 2026-09-08 12:58:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a10b7d9-9a72-4fc8-9319-ee0a40b16f89,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-workflowmdd4d/series-workflowmdd4d-build-action-2082002949/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-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 12:58:24 +0000 UTC FinishedAt: 2026-09-08 12:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 12:58:24 +0000 UTC FinishedAt: 2026-09-08 12:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 12:58:24 +0000 UTC FinishedAt: 2026-09-08 13:17:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 12:58:24 +0000 UTC FinishedAt: 2026-09-08 13:17:30 +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:*e86d1fc1-1677-423b-a04f-6ce3b6bd485c,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-workflowmdd4d/series-workflowmdd4d-convert-artifact-1676707470/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": "b7ba27f6-e2c6-4fc6-8347-1b6c1e032ab7", "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-workflowmdd4d/series-workflowmdd4d-build-action-180083746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 12:58:24 +0000 UTC FinishedAt: 2026-09-08 13:17:20 +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:*e86d1fc1-1677-423b-a04f-6ce3b6bd485c,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-workflowmdd4d/series-workflowmdd4d-convert-artifact-1676707470/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": "b7ba27f6-e2c6-4fc6-8347-1b6c1e032ab7", "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-workflowmdd4d/series-workflowmdd4d-build-action-180083746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 13:17:30 +0000 UTC FinishedAt: 2026-09-08 13:17:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 13:17:30 +0000 UTC FinishedAt: 2026-09-08 13:17:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 13:17:30 +0000 UTC FinishedAt: 2026-09-08 13:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 13:17:30 +0000 UTC FinishedAt: 2026-09-08 13:19:08 +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:*b7ba27f6-e2c6-4fc6-8347-1b6c1e032ab7,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-workflowmdd4d/series-workflowmdd4d-build-action-180083746/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-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 13:19:18 +0000 UTC FinishedAt: 2026-09-08 16:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 13:19:18 +0000 UTC FinishedAt: 2026-09-08 16:23:00 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"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:*3a10b7d9-9a72-4fc8-9319-ee0a40b16f89,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b7ba27f6-e2c6-4fc6-8347-1b6c1e032ab7,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-workflowmdd4d/series-workflowmdd4d-build-action-2082002949/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-workflowmdd4d/series-workflowmdd4d-build-action-180083746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 13:19:18 +0000 UTC FinishedAt: 2026-09-08 13:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 13:19:18 +0000 UTC FinishedAt: 2026-09-08 13:19:25 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"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-workflowmdd4d/series-workflowmdd4d-convert-artifact-2687028659/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 13:19:18 +0000 UTC FinishedAt: 2026-09-08 13:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 13:19:18 +0000 UTC FinishedAt: 2026-09-08 13:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 13:19:18 +0000 UTC FinishedAt: 2026-09-08 13:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 13:19:28 +0000 UTC FinishedAt: 2026-09-08 16:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmdd4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","ring_buffer_map","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING"],"series_id":"cdf141a9-21eb-45f1-a428-b6846cc21164","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 13:19:28 +0000 UTC FinishedAt: 2026-09-08 16:22:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a10b7d9-9a72-4fc8-9319-ee0a40b16f89,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b7ba27f6-e2c6-4fc6-8347-1b6c1e032ab7,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-workflowmdd4d/series-workflowmdd4d-build-action-2082002949/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-workflowmdd4d/series-workflowmdd4d-build-action-180083746/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-workflowmdd4d/series-workflowmdd4d-convert-artifact-2687028659/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,}