Name: series-workflow7lhn7 Phase: Succeeded StartedAt: 2026-08-31 17:32:13 +0000 UTC FinishedAt: 2026-08-31 21:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[0] Phase: Succeeded StartedAt: 2026-08-31 17:32:13 +0000 UTC FinishedAt: 2026-08-31 17:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 17:32:13 +0000 UTC FinishedAt: 2026-08-31 17:47: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": "c20313e98b04ce543936431b6122dd639d3a8346", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c20313e98b04ce543936431b6122dd639d3a8346", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_for_each_map_elem", "bpf_each_rhash_elem" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9mb3JfZWFjaF9tYXBfZWxlbSYjMzQ7LAogICAgJiMzNDticGZfZWFjaF9yaGFzaF9lbGVtJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBieSBib3VuZGluZyB0aGUgaXRlcmF0aW9uIGxvb3Agd2l0aCBhIGB2aXNpdF9idWRnZXRgIGRlcml2ZWQgZnJvbSBgYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKWAsIGFuZCBhZGRzIGNvcnJlc3BvbmRpbmcgc3RyZXNzIHNlbGZ0ZXN0cy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQuIExvY2FsIHZhcmlhYmxlcyBgdmlzaXRfYnVkZ2V0YCBhbmQgYG51bV9lbGVtc2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmlwdWxhdGVkIGFzIHNjYWxhciBpbnRlZ2VyIHR5cGVzLlxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcyBhcmUgZXhwb3NlZCBvciBjaGVja2VkLlxuMy4gQW55IGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGNvbmNlcm5zIGludm9sdmluZyBSQ1UtcHJvdGVjdGVkIHJoYXNodGFibGUgZWxlbWVudHMgYXJlIGFkZHJlc3NlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTG9ja2RlcCBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2VhY2hfcmhhc2hfZWxlbSgpYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIHRvIGVuZm9yY2UgYW4gaXRlcmF0aW9uIGJ1ZGdldCBiYXNlZCBvbiBhdG9taWMgYG5lbGVtc2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzIHZpYSBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtKClgLiBUaGlzIGJvdW5kcyB0aGUgaXRlcmF0aW9uIGxvb3AgYW5kIHByZXZlbnRzIHVuYm91bmRlZCBpdGVyYXRpb25zIGR1cmluZyBjb25jdXJyZW50IG1hcCBvcGVyYXRpb25zLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzozMzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCBkNDBjYjVkZDQ0NmNhLi4yY2FkNjdjOTAxNTQzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMzE5OCw3ICYjNDM7MzE5OCw4IEBAIHN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXG4gXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4gXHR2b2lkICpwcmV2X2tleSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcbi1cdGludCBudW1fZWxlbXMgPSAwO1xuJiM0MztcdHUzMiB2aXNpdF9idWRnZXQ7XG4mIzQzO1x0dTMyIG51bV9lbGVtcyA9IDA7XG4gXHR1NjQgcmV0ID0gMDtcbiBcbiBcdGNhbnRfbWlncmF0ZSgpO1xuQEAgLTMyMTIsNyAmIzQzOzMyMTMsOSBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxuIFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXG4gXHQgKiBlbGVtZW50cyB2aXNpdGVkLlxuIFx0ICovXG4tXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBwcmV2X2tleSkpKSB7XG4mIzQzO1x0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbiYjNDM7XHR3aGlsZSAobnVtX2VsZW1zIFx1MDAzYyB2aXNpdF9idWRnZXQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIChlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcHJldl9rZXkpKSkge1xuIFx0XHRpZiAoSVNfRVJSKGVsZW0pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRudW1fZWxlbXMmIzQzOyYjNDM7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXG5pbmRleCA5OGJiNjY5MDdiN2Y3Li5mMWEwYThlM2ZjMWFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xuQEAgLTMsMTIgJiM0MzszLDE2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3JoYXNoLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gXG4mIzQzOyNkZWZpbmUgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TXHQoM1VMTCAqIDEwMDAwMDAwMDBVTEwpXG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJoYXNoX3J1bihjb25zdCBjaGFyICpwcm9nX25hbWUpXG4ge1xuIFx0c3RydWN0IHJoYXNoICpza2VsO1xuQEAgLTUzLDYgJiM0Mzs1NywxMTIgQEAgc3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXG4gXHRcdFx0ICAgICAgc2l6ZW9mKF9fdTMyKSwgc2l6ZW9mKF9fdTY0KSwgbWF4X2VudHJpZXMsIFx1MDAyNm9wdHMpO1xuIH1cbiBcbiYjNDM7c3RydWN0IHJoYXNoX3N0cmVzc19hcmcge1xuJiM0MztcdGludCBtYXBfZmQ7XG4mIzQzO1x0YXRvbWljX2Jvb2wgKnN0b3A7XG4mIzQzO1x0X191MzIgbnJfa2V5cztcbiYjNDM7XHRfX3UzMiBzZWVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnJoYXNoX3N0cmVzc191cGRhdGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByaGFzaF9zdHJlc3NfYXJnICphcmcgPSBkYXRhO1xuJiM0MztcdF9fdTY0IHZhbHVlID0gMDtcbiYjNDM7XHRfX3UzMiBrZXk7XG4mIzQzO1x0X191MzIgaTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFhdG9taWNfbG9hZChhcmctXHUwMDNlc3RvcCkpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZy1cdTAwM2Vucl9rZXlzIFx1MDAyNlx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctXHUwMDNlc2VlZCkgJSBhcmctXHUwMDNlbnJfa2V5cztcbiYjNDM7XHRcdFx0YnBmX21hcF91cGRhdGVfZWxlbShhcmctXHUwMDNlbWFwX2ZkLCBcdTAwMjZrZXksIFx1MDAyNnZhbHVlLCBCUEZfQU5ZKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZy1cdTAwM2Vucl9rZXlzIFx1MDAyNlx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctXHUwMDNlc2VlZCkgJSBhcmctXHUwMDNlbnJfa2V5cztcbiYjNDM7XHRcdFx0YnBmX21hcF9kZWxldGVfZWxlbShhcmctXHUwMDNlbWFwX2ZkLCBcdTAwMjZrZXkpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJoYXNoX2l0ZXJfc3RyZXNzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgcmhhc2ggKnNrZWwgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCByaGFzaF9zdHJlc3NfYXJnIGFyZ3NbMl07XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdGF0b21pY19ib29sIHN0b3AgPSBmYWxzZTtcbiYjNDM7XHRib29sIHJhbiA9IGZhbHNlO1xuJiM0MztcdF9fdTY0IHN0YXJ0O1xuJiM0MztcdHB0aHJlYWRfdCB0aHJlYWRzWzJdO1xuJiM0MztcdGJvb2wgY3JlYXRlZFsyXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiYjNDM7XHRpbnQgbnJfY3B1cztcbiYjNDM7XHRfX3UzMiB3b3JraW5nX3NldDtcbiYjNDM7XHRpbnQgbWFwX2ZkLCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdG5yX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChucl9jcHVzLCAwLCBcJiMzNDtudW1fcG9zc2libGVfY3B1c1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5yX2NwdXMgXHUwMDNjIDIpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSByaGFzaF9fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtyaGFzaF9fb3BlbiBzdHJlc3NcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHdvcmtpbmdfc2V0ID0gc2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlc3RyZXNzX3dvcmtpbmdfc2V0O1xuJiM0MztcbiYjNDM7XHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2tlbC1cdTAwM2VvYmosXG4mIzQzO1x0XHRcdFx0XHRcdFwmIzM0O3Rlc3Rfcmhhc2hfaXRlcl9zdHJlc3NcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihwcm9nLCBcJiMzNDtmaW5kIHN0cmVzcyBwcm9ncmFtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHByb2csIHRydWUpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSByaGFzaF9fbG9hZChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3N0cmVzcyBza2VsX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuc3RyZXNzX3JobWFwKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRocmVhZHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0YXJnc1tpXS5tYXBfZmQgPSBtYXBfZmQ7XG4mIzQzO1x0XHRhcmdzW2ldLnN0b3AgPSBcdTAwMjZzdG9wO1xuJiM0MztcdFx0YXJnc1tpXS5ucl9rZXlzID0gd29ya2luZ19zZXQ7XG4mIzQzO1x0XHRhcmdzW2ldLnNlZWQgPSBpICogOTc3O1xuJiM0MztcdFx0ZXJyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNmFyZ3NbaV0pO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gc3RvcF90aHJlYWRzO1xuJiM0MztcdFx0Y3JlYXRlZFtpXSA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdGFydCA9IGdldF90aW1lX25zKCk7XG4mIzQzO1x0d2hpbGUgKGdldF90aW1lX25zKCkgLSBzdGFydCBcdTAwM2MgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7XG4mIzQzO1x0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2b3B0cyk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3N0cmVzcyBwcm9nIHJ1blwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gc3RvcF90aHJlYWRzO1xuJiM0MztcdFx0cmFuID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztzdG9wX3RocmVhZHM6XG4mIzQzO1x0YXRvbWljX3N0b3JlKFx1MDAyNnN0b3AsIHRydWUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGNyZWF0ZWRbaV0pXG4mIzQzO1x0XHRcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVyciB8fCAhcmFuKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX21heF92aXNpdHMsIDAsIFwmIzM0O3N0cmVzcyBjYWxsYmFjayB2aXNpdHNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJlc3NfZnVsbF93YWxrcywgMCwgXCYjMzQ7c3RyZXNzIGZ1bGwgd2Fsa3NcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJlc3Nfb3ZlcnJ1bnMsIDAsIFwmIzM0O3N0cmVzcyBjYWxsYmFjayBib3VuZFwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O3N0cmVzcyBtYXggY2FsbGJhY2sgdmlzaXRzOiAlbGx1IChsaW1pdCAldSlcXG5cJiMzNDssXG4mIzQzO1x0ICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX21heF92aXNpdHMsXG4mIzQzO1x0ICAgICAgIHdvcmtpbmdfc2V0KTtcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRyaGFzaF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCByaGFzaF9tYXBfZXh0cmFfcHJlc2l6ZSh2b2lkKVxuIHtcbiBcdGNvbnN0IF9fdTMyIG1heF9lbnRyaWVzID0gMTAyNDtcbkBAIC0xODAsNCAmIzQzOzI5MCw3IEBAIHZvaWQgdGVzdF9yaGFzaCh2b2lkKVxuIFxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dGVzdF9yaGFzaF9pdGVyXCYjMzQ7KSlcbiBcdFx0cmhhc2hfaXRlcl90ZXN0KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3Rlc3Rfcmhhc2hfaXRlcl9zdHJlc3NcJiMzNDspKVxuJiM0MztcdFx0cmhhc2hfaXRlcl9zdHJlc3MoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY1xuaW5kZXggZmMyZGFjM2E3MTllOS4uM2Q3MjAxNDMwYmFiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY1xuQEAgLTksMTEgJiM0Mzs5LDE4IEBAXG4gXG4gI2RlZmluZSBFTk9FTlQgMlxuICNkZWZpbmUgRUVYSVNUIDE3XG4mIzQzOyNkZWZpbmUgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTICgxVSBcdTAwM2NcdTAwM2MgMjApXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiBcbiBpbnQgZXJyO1xuIFxuJiM0Mztjb25zdCB2b2xhdGlsZSBfX3UzMiBzdHJlc3Nfd29ya2luZ19zZXQgPSA0MDk2O1xuJiM0MztcbiYjNDM7dm9sYXRpbGUgX191NjQgc3RyZXNzX21heF92aXNpdHM7XG4mIzQzO3ZvbGF0aWxlIF9fdTY0IHN0cmVzc19vdmVycnVucztcbiYjNDM7dm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7XG4mIzQzO1xuIHN0cnVjdCBlbGVtIHtcbiBcdGNoYXIgYXJyWzEyOF07XG4gXHRpbnQgdmFsO1xuQEAgLTI3LDYgJiM0MzszNCwyMCBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7XG4gfSByaG1hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIFJIQVNIX1NUUkVTU19NQVhfRU5UUklFUyk7XG4mIzQzO1x0X190eXBlKGtleSwgX191MzIpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IHN0cmVzc19yaG1hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIF9fdTY0IHN0cmVzc19pdGVyX2NiKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXG4mIzQzO1x0XHRcdCAgICB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBpbnQgdGVzdF9yaGFzaF9sb29rdXBfdXBkYXRlKHZvaWQgKmN0eClcbiB7XG5AQCAtMjQ2LDMgJiM0MzsyNjcsMjMgQEAgaW50IHRlc3Rfcmhhc2hfZGVsZXRlX25vbmV4aXN0ZW50KHZvaWQgKmN0eClcbiBcdGVyciA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IHRlc3Rfcmhhc2hfaXRlcl9zdHJlc3Modm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDb25jdXJyZW50IHJlaGFzaCBtYXkgcHJvZHVjZSBkdXBsaWNhdGUgdmlzaXRzLiBDaGVjayB0aGF0IHRoZVxuJiM0MztcdCAqIGhlbHBlciBzdGlsbCBnaXZlcyBvbmUgd2FsayBhIGZpbml0ZSBjYWxsYmFjayBib3VuZDsgbm8gc25hcHNob3RcbiYjNDM7XHQgKiBvciB1bmlxdWUtdmlzaXQgZ3VhcmFudGVlIGlzIGV4cGVjdGVkIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0bG9uZyB2aXNpdHM7XG4mIzQzO1xuJiM0MztcdHZpc2l0cyA9IGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZzdHJlc3NfcmhtYXAsIHN0cmVzc19pdGVyX2NiLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAodmlzaXRzIFx1MDAzZSBzdHJlc3NfbWF4X3Zpc2l0cylcbiYjNDM7XHRcdHN0cmVzc19tYXhfdmlzaXRzID0gdmlzaXRzO1xuJiM0MztcdGlmICh2aXNpdHMgXHUwMDNlIHN0cmVzc193b3JraW5nX3NldClcbiYjNDM7XHRcdHN0cmVzc19vdmVycnVucyYjNDM7JiM0Mzs7XG4mIzQzO1x0aWYgKHZpc2l0cyA9PSBzdHJlc3Nfd29ya2luZ19zZXQpXG4mIzQzO1x0XHRzdHJlc3NfZnVsbF93YWxrcyYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZm9yX2VhY2hfbWFwX2VsZW0mIzM0OywKICAgICYjMzQ7YnBmX2VhY2hfcmhhc2hfZWxlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2VhY2hfcmhhc2hfZWxlbSgpYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIHRvIGVuZm9yY2UgYW4gaXRlcmF0aW9uIGJ1ZGdldCBiYXNlZCBvbiBhdG9taWMgYG5lbGVtc2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzIHZpYSBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtKClgLiBUaGlzIGJvdW5kcyB0aGUgaXRlcmF0aW9uIGxvb3AgYW5kIHByZXZlbnRzIHVuYm91bmRlZCBpdGVyYXRpb25zIGR1cmluZyBjb25jdXJyZW50IG1hcCBvcGVyYXRpb25zLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzozMzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggZDQwY2I1ZGQ0NDZjYS4uMmNhZDY3YzkwMTU0MyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTMxOTgsNyAmIzQzOzMxOTgsOCBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLAogCXN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTsKIAl2b2lkICpwcmV2X2tleSA9IE5VTEw7CiAJc3RydWN0IHJodGFiX2VsZW0gKmVsZW07Ci0JaW50IG51bV9lbGVtcyA9IDA7CiYjNDM7CXUzMiB2aXNpdF9idWRnZXQ7CiYjNDM7CXUzMiBudW1fZWxlbXMgPSAwOwogCXU2NCByZXQgPSAwOwogCiAJY2FudF9taWdyYXRlKCk7CkBAIC0zMjEyLDcgJiM0MzszMjEzLDkgQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbiwKIAkgKiBlbGVtZW50cyBhcmUgZGVsZXRlZC9pbnNlcnRlZCwgdGhlcmUgbWF5IGJlIG1pc3NlZCBvciBkdXBsaWNhdGUKIAkgKiBlbGVtZW50cyB2aXNpdGVkLgogCSAqLwotCXdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoJmFtcDtyaHRhYi0mZ3Q7aHQsIHByZXZfa2V5KSkpIHsKJiM0MzsJdmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoJmFtcDtyaHRhYi0mZ3Q7aHQubmVsZW1zKTsKJiM0MzsJd2hpbGUgKG51bV9lbGVtcyAmbHQ7IHZpc2l0X2J1ZGdldCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoJmFtcDtyaHRhYi0mZ3Q7aHQsIHByZXZfa2V5KSkpIHsKIAkJaWYgKElTX0VSUihlbGVtKSkKIAkJCWJyZWFrOwogCQludW1fZWxlbXMmIzQzOyYjNDM7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMKaW5kZXggOThiYjY2OTA3YjdmNy4uZjFhMGE4ZTNmYzFhYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jCkBAIC0zLDEyICYjNDM7MywxNiBAQAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGF0b21pYy5oJmd0OwogI2luY2x1ZGUgJiMzNDtyaGFzaC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfaXRlcl9icGZfcmhhc2hfbWFwLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAKJiM0MzsjZGVmaW5lIFJIQVNIX1NUUkVTU19EVVJBVElPTl9OUwkoM1VMTCAqIDEwMDAwMDAwMDBVTEwpCiYjNDM7CiBzdGF0aWMgdm9pZCByaGFzaF9ydW4oY29uc3QgY2hhciAqcHJvZ19uYW1lKQogewogCXN0cnVjdCByaGFzaCAqc2tlbDsKQEAgLTUzLDYgJiM0Mzs1NywxMTIgQEAgc3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpCiAJCQkgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgJmFtcDtvcHRzKTsKIH0KIAomIzQzO3N0cnVjdCByaGFzaF9zdHJlc3NfYXJnIHsKJiM0MzsJaW50IG1hcF9mZDsKJiM0MzsJYXRvbWljX2Jvb2wgKnN0b3A7CiYjNDM7CV9fdTMyIG5yX2tleXM7CiYjNDM7CV9fdTMyIHNlZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcmhhc2hfc3RyZXNzX3VwZGF0ZSh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHJoYXNoX3N0cmVzc19hcmcgKmFyZyA9IGRhdGE7CiYjNDM7CV9fdTY0IHZhbHVlID0gMDsKJiM0MzsJX191MzIga2V5OwomIzQzOwlfX3UzMiBpOwomIzQzOwomIzQzOwl3aGlsZSAoIWF0b21pY19sb2FkKGFyZy0mZ3Q7c3RvcCkpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yX2tleXMgJmFtcDsmYW1wOyAhYXRvbWljX2xvYWQoYXJnLSZndDtzdG9wKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctJmd0O3NlZWQpICUgYXJnLSZndDtucl9rZXlzOwomIzQzOwkJCWJwZl9tYXBfdXBkYXRlX2VsZW0oYXJnLSZndDttYXBfZmQsICZhbXA7a2V5LCAmYW1wO3ZhbHVlLCBCUEZfQU5ZKTsKJiM0MzsJCX0KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yX2tleXMgJmFtcDsmYW1wOyAhYXRvbWljX2xvYWQoYXJnLSZndDtzdG9wKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctJmd0O3NlZWQpICUgYXJnLSZndDtucl9rZXlzOwomIzQzOwkJCWJwZl9tYXBfZGVsZXRlX2VsZW0oYXJnLSZndDttYXBfZmQsICZhbXA7a2V5KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmhhc2hfaXRlcl9zdHJlc3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByaGFzaCAqc2tlbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCByaGFzaF9zdHJlc3NfYXJnIGFyZ3NbMl07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJYXRvbWljX2Jvb2wgc3RvcCA9IGZhbHNlOwomIzQzOwlib29sIHJhbiA9IGZhbHNlOwomIzQzOwlfX3U2NCBzdGFydDsKJiM0MzsJcHRocmVhZF90IHRocmVhZHNbMl07CiYjNDM7CWJvb2wgY3JlYXRlZFsyXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7CiYjNDM7CWludCBucl9jcHVzOwomIzQzOwlfX3UzMiB3b3JraW5nX3NldDsKJiM0MzsJaW50IG1hcF9mZCwgZXJyLCBpOwomIzQzOwomIzQzOwlucl9jcHVzID0gbGliYnBmX251bV9wb3NzaWJsZV9jcHVzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG5yX2NwdXMsIDAsICYjMzQ7bnVtX3Bvc3NpYmxlX2NwdXMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChucl9jcHVzICZsdDsgMikgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSByaGFzaF9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtyaGFzaF9fb3BlbiBzdHJlc3MmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXdvcmtpbmdfc2V0ID0gc2tlbC0mZ3Q7cm9kYXRhLSZndDtzdHJlc3Nfd29ya2luZ19zZXQ7CiYjNDM7CiYjNDM7CXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShza2VsLSZndDtvYmosCiYjNDM7CQkJCQkJJiMzNDt0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIocHJvZywgJiMzNDtmaW5kIHN0cmVzcyBwcm9ncmFtJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHByb2csIHRydWUpOwomIzQzOwomIzQzOwllcnIgPSByaGFzaF9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3N0cmVzcyBza2VsX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuc3RyZXNzX3JobWFwKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlhcmdzW2ldLm1hcF9mZCA9IG1hcF9mZDsKJiM0MzsJCWFyZ3NbaV0uc3RvcCA9ICZhbXA7c3RvcDsKJiM0MzsJCWFyZ3NbaV0ubnJfa2V5cyA9IHdvcmtpbmdfc2V0OwomIzQzOwkJYXJnc1tpXS5zZWVkID0gaSAqIDk3NzsKJiM0MzsJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSwKJiM0MzsJCQkJICAgICAmYW1wO2FyZ3NbaV0pOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3B0aHJlYWRfY3JlYXRlJiMzNDspKQomIzQzOwkJCWdvdG8gc3RvcF90aHJlYWRzOwomIzQzOwkJY3JlYXRlZFtpXSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhcnQgPSBnZXRfdGltZV9ucygpOwomIzQzOwl3aGlsZSAoZ2V0X3RpbWVfbnMoKSAtIHN0YXJ0ICZsdDsgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7CiYjNDM7CQllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgJmFtcDtvcHRzKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzdHJlc3MgcHJvZyBydW4mIzM0OykpCiYjNDM7CQkJZ290byBzdG9wX3RocmVhZHM7CiYjNDM7CQlyYW4gPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7c3RvcF90aHJlYWRzOgomIzQzOwlhdG9taWNfc3RvcmUoJmFtcDtzdG9wLCB0cnVlKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KQomIzQzOwkJaWYgKGNyZWF0ZWRbaV0pCiYjNDM7CQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwomIzQzOwomIzQzOwlpZiAoZXJyIHx8ICFyYW4pCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3N0cmVzc19tYXhfdmlzaXRzLCAwLCAmIzM0O3N0cmVzcyBjYWxsYmFjayB2aXNpdHMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3N0cmVzc19mdWxsX3dhbGtzLCAwLCAmIzM0O3N0cmVzcyBmdWxsIHdhbGtzJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJlc3Nfb3ZlcnJ1bnMsIDAsICYjMzQ7c3RyZXNzIGNhbGxiYWNrIGJvdW5kJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDtzdHJlc3MgbWF4IGNhbGxiYWNrIHZpc2l0czogJWxsdSAobGltaXQgJXUpXG4mIzM0OywKJiM0MzsJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2tlbC0mZ3Q7YnNzLSZndDtzdHJlc3NfbWF4X3Zpc2l0cywKJiM0MzsJICAgICAgIHdvcmtpbmdfc2V0KTsKJiM0MztjbGVhbnVwOgomIzQzOwlyaGFzaF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByaGFzaF9tYXBfZXh0cmFfcHJlc2l6ZSh2b2lkKQogewogCWNvbnN0IF9fdTMyIG1heF9lbnRyaWVzID0gMTAyNDsKQEAgLTE4MCw0ICYjNDM7MjkwLDcgQEAgdm9pZCB0ZXN0X3JoYXNoKHZvaWQpCiAKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3Rlc3Rfcmhhc2hfaXRlciYjMzQ7KSkKIAkJcmhhc2hfaXRlcl90ZXN0KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGVzdF9yaGFzaF9pdGVyX3N0cmVzcyYjMzQ7KSkKJiM0MzsJCXJoYXNoX2l0ZXJfc3RyZXNzKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCmluZGV4IGZjMmRhYzNhNzE5ZTkuLjNkNzIwMTQzMGJhYmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCkBAIC05LDExICYjNDM7OSwxOCBAQAogCiAjZGVmaW5lIEVOT0VOVCAyCiAjZGVmaW5lIEVFWElTVCAxNwomIzQzOyNkZWZpbmUgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTICgxVSAmbHQ7Jmx0OyAyMCkKIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogCiBpbnQgZXJyOwogCiYjNDM7Y29uc3Qgdm9sYXRpbGUgX191MzIgc3RyZXNzX3dvcmtpbmdfc2V0ID0gNDA5NjsKJiM0MzsKJiM0Mzt2b2xhdGlsZSBfX3U2NCBzdHJlc3NfbWF4X3Zpc2l0czsKJiM0Mzt2b2xhdGlsZSBfX3U2NCBzdHJlc3Nfb3ZlcnJ1bnM7CiYjNDM7dm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7CiYjNDM7CiBzdHJ1Y3QgZWxlbSB7CiAJY2hhciBhcnJbMTI4XTsKIAlpbnQgdmFsOwpAQCAtMjcsNiAmIzQzOzM0LDIwIEBAIHN0cnVjdCB7CiAJX190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7CiB9IHJobWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCBSSEFTSF9TVFJFU1NfTUFYX0VOVFJJRVMpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gc3RyZXNzX3JobWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBfX3U2NCBzdHJlc3NfaXRlcl9jYihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLAomIzQzOwkJCSAgICB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBpbnQgdGVzdF9yaGFzaF9sb29rdXBfdXBkYXRlKHZvaWQgKmN0eCkKIHsKQEAgLTI0NiwzICYjNDM7MjY3LDIzIEBAIGludCB0ZXN0X3JoYXNoX2RlbGV0ZV9ub25leGlzdGVudCh2b2lkICpjdHgpCiAJZXJyID0gMDsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IHRlc3Rfcmhhc2hfaXRlcl9zdHJlc3Modm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQ29uY3VycmVudCByZWhhc2ggbWF5IHByb2R1Y2UgZHVwbGljYXRlIHZpc2l0cy4gQ2hlY2sgdGhhdCB0aGUKJiM0MzsJICogaGVscGVyIHN0aWxsIGdpdmVzIG9uZSB3YWxrIGEgZmluaXRlIGNhbGxiYWNrIGJvdW5kOyBubyBzbmFwc2hvdAomIzQzOwkgKiBvciB1bmlxdWUtdmlzaXQgZ3VhcmFudGVlIGlzIGV4cGVjdGVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsb25nIHZpc2l0czsKJiM0MzsKJiM0MzsJdmlzaXRzID0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtKCZhbXA7c3RyZXNzX3JobWFwLCBzdHJlc3NfaXRlcl9jYiwgTlVMTCwgMCk7CiYjNDM7CWlmICh2aXNpdHMgJmd0OyBzdHJlc3NfbWF4X3Zpc2l0cykKJiM0MzsJCXN0cmVzc19tYXhfdmlzaXRzID0gdmlzaXRzOwomIzQzOwlpZiAodmlzaXRzICZndDsgc3RyZXNzX3dvcmtpbmdfc2V0KQomIzQzOwkJc3RyZXNzX292ZXJydW5zJiM0MzsmIzQzOzsKJiM0MzsJaWYgKHZpc2l0cyA9PSBzdHJlc3Nfd29ya2luZ19zZXQpCiYjNDM7CQlzdHJlc3NfZnVsbF93YWxrcyYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBIYXNodGFibGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIGFuZCB0aGVyZSBhcmUgc29tZSBhc3NvY2lhdGVkIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuCgpGb2N1c2luZyBvbiB0aGUgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBjaGFuZ2UsIGF0IGEgZ2xhbmNlLCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGluIHRoZSBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgZnVuY3Rpb24uICBJdCBsb29rcyBsaWtlIGEgYHZpc2l0X2J1ZGdldGAgdmFyaWFibGUgaGFzIGJlZW4gaW50cm9kdWNlZCwgYW5kIHRoZSBsb29wIGNvbmRpdGlvbiBpcyBiZWluZyBhZGp1c3RlZC4gU3BlY2lmaWNhbGx5LCB0aGUgb2xkIGB3aGlsZWAgbG9vcCBjb25kaXRpb24gaGFzIGJlZW4gZXhwYW5kZWQgdG8gbm93IGluY2x1ZGUgYSBgbnVtX2VsZW1zICZsdDsgdmlzaXRfYnVkZ2V0YCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuCgpNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGlzIGludHJvZHVjZXMgc29tZSBraW5kIG9mIGl0ZXJhdGlvbiBsaW1pdCwgcG9zc2libHkgdG8gcHJldmVudCB1bmJvdW5kZWQgbG9vcHMgb3IgdG8gaW50cm9kdWNlIGZhaXJuZXNzLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVG8gY29uZmlybSBteSBpbml0aWFsIHRob3VnaHRzLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMzE5OCBvZiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgcHJvbXB0ZWQgdGhlIGNoYW5nZSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE5MDpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7OiBcJiMzNDspO1xuMzE5MTpcdFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkLCB2YWx1ZSwgbSk7XG4zMTkyOlx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbjMxOTM6XHR9XG4zMTk0Olx0XG4zMTk1Olx0c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbjMxOTY6XHRcdFx0XHRcdHZvaWQgKmNhbGxiYWNrX2N0eCwgdTY0IGZsYWdzKVxuMzE5NzpcdHtcbjMxOTg6XHRcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbjMxOTk6XHRcdHZvaWQgKnByZXZfa2V5ID0gTlVMTDtcbjMyMDA6XHRcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xuMzIwMTpcdFx0dTMyIHZpc2l0X2J1ZGdldDtcbjMyMDI6XHRcdHUzMiBudW1fZWxlbXMgPSAwO1xuMzIwMzpcdFx0dTY0IHJldCA9IDA7XG4zMjA0Olx0XG4zMjA1Olx0XHRjYW50X21pZ3JhdGUoKTtcbjMyMDY6XHRcbjMyMDc6XHRcdGlmIChmbGFncyAhPSAwKVxuMzIwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMyMDk6XHRcbjMyMTA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMyMTE6XHRcdC8qXG4zMjEyOlx0XHQgKiBCZXN0LWVmZm9ydCBpdGVyYXRpb246IGlmIHJoYXNodGFibGUgaXMgY29uY3VycmVudGx5IHJlc2l6ZWQgb3JcbjMyMTM6XHRcdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuMzIxNDpcdFx0ICogZWxlbWVudHMgdmlzaXRlZC5cbjMyMTU6XHRcdCAqL1xuMzIxNjpcdFx0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbjMyMTc6XHRcdHdoaWxlIChudW1fZWxlbXMgXHUwMDNjIHZpc2l0X2J1ZGdldCBcdTAwMjZcdTAwMjZcbjMyMTg6XHRcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbjMyMTk6XHRcdFx0aWYgKElTX0VSUihlbGVtKSlcbjMyMjA6XHRcdFx0XHRicmVhaztcbjMyMjE6XHRcdFx0bnVtX2VsZW1zJiM0MzsmIzQzOztcbjMyMjI6XHRcdFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsXG4zMjIzOlx0XHRcdFx0XHQgICh1NjQpKGxvbmcpZWxlbS1cdTAwM2VkYXRhLFxuMzIyNDpcdFx0XHRcdFx0ICAodTY0KShsb25nKXJodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKSxcbjMyMjU6XHRcdFx0XHRcdCAgKHU2NCkobG9uZyljYWxsYmFja19jdHgsIDApO1xuMzIyNjpcdFx0XHRpZiAocmV0KVxuMzIyNzpcdFx0XHRcdGJyZWFrO1xuMzIyODpcdFxuMzIyOTpcdFx0XHRwcmV2X2tleSA9IGVsZW0tXHUwMDNlZGF0YTtcdC8qIHZhbGlkIHdoaWxlIFJDVSBoZWxkICovXG4zMjMwOlx0XHR9XG4zMjMxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMyMzI6XHRcbjMyMzM6XHRcdHJldHVybiBudW1fZWxlbXM7XG4zMjM0Olx0fVxuMzIzNTpcdFxuMzIzNjpcdHN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuMzIzNzpcdHtcbjMyMzg6XHRcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbjMyMzk6XHRcdHU2NCBudW1fZW50cmllcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGVtcGxveWVkLiBNeSBndXQgdGVsbHMgbWUgaXQmIzM5O3MgY2VudHJhbCB0byBzb21ldGhpbmcsIGxpa2VseSByZWxhdGVkIHRvIGl0ZXJhdGluZyB0aHJvdWdoIGVsZW1lbnRzIHdpdGhpbiBhIHJhZGl4IGhhc2ggdGFibGUsIGJ1dCBsZXQmIzM5O3Mgbm90IGFzc3VtZS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb2RlYmFzZSYjMzk7cyB1c2FnZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgYnJvYWQgYXBwcm9hY2guIEkmIzM5O2xsIGV4ZWN1dGUgYSBxdWljayBncmVwIHRvIHNlYXJjaCBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgdGhlIHN0cmluZyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAuIEkmIzM5O2xsIGFsc28gZXhwYW5kIHRoZSBzY29wZSBvZiBteSBzZWFyY2guIEkmIzM5O2xsIHVzZSByZWxhdGVkIHRlcm1zLiBUaGluZ3MgbGlrZSBgcmh0YWJfbWFwX29wc2AsIGJlY2F1c2UgSSBzdXNwZWN0IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGEgbWFwIGltcGxlbWVudGF0aW9uIGFuZCBtYXkgYmUgYWNjZXNzZWQgdmlhIHRoZSBtYXAgb3BlcmF0aW9ucy4gQnJvYWQgc3Ryb2tlcyBmaXJzdCwgdGhlbiBJIGNhbiBkcmlsbCBkb3duIGlmIG5lZWRlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIGNvbnRleHQgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBnZXQgdGhhdCBzZWFyY2ggcnVubmluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZWFjaF9yaGFzaF9lbGVtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxOTU6c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxOTYtXHRcdFx0XHR2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTE2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzAtXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUzMTpcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZWFjaF9yaGFzaF9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUzMi1cdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTUzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGlzIEJQRiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IHNlZXMgYSBmZXcga2V5IGlkZW50aWZpZXJzIGZsYXNoaW5nOiBgQlBGX01BUF9UWVBFX1JIQVNIYCwgdGhlIGByaHRhYl9tYXBfb3BzYCBzdHJ1Y3R1cmUsIGFuZCB0aGUgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgZnVuY3Rpb24uIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGVzZSB0aHJlZSBhcmUgaGlnaGx5IGludGVycmVsYXRlZCwgYWxtb3N0IGNlcnRhaW5seSBmb3JtaW5nIHRoZSBjb3JlIG9mIGhvdyB0aGlzIHNwZWNpZmljIEJQRiBtYXAgdHlwZSBmdW5jdGlvbnMuCgpSaWdodCBub3csIG15IGd1dCBzYXlzIHRoaXMgaXMgbGlrZWx5IGEgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhlICYjMzQ7UkhBU0gmIzM0OyBpbW1lZGlhdGVseSBwb2ludHMgaW4gdGhhdCBkaXJlY3Rpb24uIFRoZSAmIzM0O29wcyYjMzQ7IHN0cnVjdHVyZSB0eXBpY2FsbHkgY29udGFpbnMgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoZSB2YXJpb3VzIG9wZXJhdGlvbnMgb24gdGhlIG1hcDogaW5zZXJ0aW5nLCBkZWxldGluZywgbG9va3VwLCBpdGVyYXRpb24gLSB0aGUgdXN1YWwgc3VzcGVjdHMuIEFuZCBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtYC4uLiB3ZWxsLCB0aGF04oCZcyBjbGVhcmx5IHRoZSBtZWNoYW5pc20gZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBzdG9yZWQgd2l0aGluIHRoZSBtYXAuIFNvLCB3aGF0IEkgbmVlZCB0byBkbyBpcyBkcmlsbCBkb3duIGFuZCBmaW5kIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkLiBJIHNob3VsZCBzZWFyY2ggZm9yIGVhY2ggb2YgdGhlbSwgc3RhcnRpbmcgd2l0aCB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFjcm8uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHNlYXJjaCB0aHJvdWdoIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTUFQX1RZUEVfUkhBU0gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcdEJQRl9NQVBfVFlQRV9SSEFTSCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVx0X19NQVhfQlBGX01BUF9UWVBFXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVx0XHQgKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XHRcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cdFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTI2LVx0XHQgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxMjc6XHRcdCBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIKVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cdFx0Z290byBwdXRfbWFwO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNTU9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyOTktXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMDpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMS1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTQtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNi1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMjYtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMyNzpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyOC1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDIwLVx0ICAgIGF0dHItXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSRU5BIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQyMTpcdCAgICBhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjItXHQgICAgYXR0ci1cdTAwM2VtYXBfZXh0cmEgIT0gMCkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0OTItXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ5MzpcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ5NC1cdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIyMTY9c3RhdGljIGludCBtYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMjc1LVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9QRVJDUFVfSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjI3NjpcdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3Ny1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODYwNT1zdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2NTMtXHRcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg2NTQ6XHRcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NjU1LVx0XHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXHRCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlx0QlBGX01BUF9UWVBFX1JIQVNILFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNTEtXHRfX01BWF9CUEZfTUFQX1RZUEVcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXHRcdCAqXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcdFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVx0XHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xOTgtXHRbQlBGX01BUF9UWVBFX0lOU05fQVJSQVldXHRcdD0gXCYjMzQ7aW5zbl9hcnJheVwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTk5Olx0W0JQRl9NQVBfVFlQRV9SSEFTSF1cdFx0XHQ9IFwmIzM0O3JoYXNoXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMDAtfTtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0yOTI9c3RhdGljIGludCBwcm9iZV9tYXBfY3JlYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cdFx0YnJlYWs7XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMy1cdFx0b3B0cy5tYXBfZmxhZ3NcdD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jPTM3PXN0YXRpYyB2b2lkIGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVx0YnBmX21hcF9fc2V0X3R5cGUoY3R4LnNrZWwtXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCwgbWFwX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01Mi1cdFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhjdHguc2tlbC1cdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz04MD1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgxLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcdGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0xNTE9c3RhdGljIHZvaWQgaGFzaG1hcF9sb29rdXBfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXHRtYXBfZmxhZ3MgPSBhcmdzLm1hcF9mbGFncztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MTY4Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY5LVx0XHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0yMTE9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MjEzOlx0aGFzaG1hcF9sb29rdXBfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM9MTU1PXN0YXRpYyB2b2lkIGh0YWJfbWVtX3NldHVwX2ltcGwoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4NC1cdGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhtYXAsIE1BWCg4MTkyLCA2NCAqIGVudi5ucl9jcHVzKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1Olx0aWYgKG1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMTg2LVx0XHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IH5CUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjIzMTpcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzItfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NTA9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTY6XHRyZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1JIQVNILCBcJiMzNDtyaGFzaF9leHRyYVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMtNTctXHRcdFx0ICAgICAgc2l6ZW9mKF9fdTMyKSwgc2l6ZW9mKF9fdTY0KSwgbWF4X2VudHJpZXMsIFx1MDAyNm9wdHMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmM9OD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jLTEwLVx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jPTI5PXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYzozMDpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMtMzEtXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmM9Mzc9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jOjM4Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYy0zOS1cdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBCUEYgTWFwIEl0ZXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIG1hcCBpdGVyYXRpb24gY2FsbGJhY2ssIGAubWFwX2Zvcl9lYWNoX2NhbGxiYWNrYCwgaXMgaW52b2tlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgbWVjaGFuaXNtIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIGEgQlBGIG1hcC4KCkkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZSBiYXNlIGZvciBpbnN0YW5jZXMgb2YgYG1hcF9mb3JfZWFjaF9jYWxsYmFja2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCB3aXRoaW4gd2hpY2ggYC5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgIGlzIGJlaW5nIHVzZWQuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIHN0cnVjdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9mb3JfZWFjaF9jYWxsYmFjayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xODAtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTgxOlx0bG9uZyAoKm1hcF9mb3JfZWFjaF9jYWxsYmFjaykoc3RydWN0IGJwZl9tYXAgKm1hcCxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTgyLVx0XHRcdFx0ICAgICBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzctXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3ODpcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfYXJyYXlfZWxlbSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzktXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg4NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwMi1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAzOlx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9hcnJheV9lbGVtLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwNC1cdC5tYXBfbWVtX3VzYWdlID0gYXJyYXlfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NzExPUJQRl9DQUxMXzQoYnBmX2Zvcl9lYWNoX21hcF9lbGVtLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHZvaWQgKiwgY2FsbGJhY2tfZm4sXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxMy17XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzE0Olx0cmV0dXJuIG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2Zvcl9lYWNoX2NhbGxiYWNrKG1hcCwgY2FsbGJhY2tfZm4sIGNhbGxiYWNrX2N0eCwgZmxhZ3MpO1xua2VybmVsL2JwZi9icGZfaXRlci5jLTcxNS19XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTA4PWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDItXHRcdFx0XHQgICAgIChsb25nICgqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW5kZXgsIHU2NCBmbGFncykpTlVMTCkpO1xua2VybmVsL2JwZi9maXh1cHMuYzoyMTAzOlx0XHRcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjayxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEwNC1cdFx0XHRcdCAgICAgKGxvbmcgKCopKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTM0LVx0XHRcdGNhc2UgQlBGX0ZVTkNfZm9yX2VhY2hfbWFwX2VsZW06XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxMzU6XHRcdFx0XHRpbnNuLVx1MDAzZWltbSA9IEJQRl9DQUxMX0lNTShvcHMtXHUwMDNlbWFwX2Zvcl9lYWNoX2NhbGxiYWNrKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzNi1cdFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNTc9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzcwLVx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzNzE6XHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzItXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0Zixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzc5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTMtXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NDpcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5NS1cdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjA9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU3My1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTc0Olx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTc1LVx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU4Mj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU5NC1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTk1Olx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk2LVx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUxNj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMwLVx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MzE6XHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzItXHQubWFwX21lbV91c2FnZSA9IHJodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMDA2PXN0YXRpYyBpbnQgc2V0X21hcF9lbGVtX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDE3LVx0aWYgKCFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDE4Olx0ICAgICFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjaykge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDE5LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gbm90IGFsbG93ZWQgZm9yIG1hcFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjc2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIGFuZCBSSEFTSCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgKmVzc2VudGlhbCogZm9yIGVuYWJsaW5nIEJQRiwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhhc2h0YWIuYyBhbmQgdGhlIGBCUEZfTUFQX1RZUEVfUkhBU0hgIHR5cGUuIEl0JiMzOTtzIGEgcXVpY2sgYXVkaXQsIHJlYWxseS4gSSBrbm93IHdoZXJlIHRvIGxvb2suIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIGp1bXBpbmctb2ZmIHBvaW50IGZvciB0cmFjaW5nIGRlcGVuZGVuY2llcyBhbmQgaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50IHN3aXRjaGVzLiBIb3BlZnVsbHksIGl0JiMzOTtzIGFsbCBzdHJhaWdodGZvcndhcmQ7IEkgY2FuIHByb2JhYmx5IHBhcnNlIGl0IGluIG15IGhlYWQgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSwgYnV0IGxldCYjMzk7cyBtYWtlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2h0YWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMy0jaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2J0Zi5oXHUwMDNlXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9ODY9c3RydWN0IGJwZl9odGFiIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05Ni1cdHN0cnVjdCBodGFiX2VsZW0gKl9fcGVyY3B1ICpleHRyYV9lbGVtcztcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjk3Olx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIG5vbi1wcmVhbGxvY2F0ZWQgaGFzaHRhYmxlIGFyZSBrZXB0XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05OC1cdCAqIGluIGVpdGhlciBwY291bnQgb3IgY291bnRcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzM9c3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTgtICpcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTogKiBJbiBoYXNodGFiLmMsIHRvIGF2b2lkIGRlYWRsb2NrLCBsb2NrIGFjcXVpc2l0aW9uIG9mXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDAtICogYnVja2V0X2xvY2sgZm9sbG93ZWQgYnkgbHJ1X2xvY2sgaXMgbm90IGFsbG93ZWQuIEluIHN1Y2ggY2FzZXMsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc1MT1zdHJ1Y3QgYnBmX3JodGFiIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NTItXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzUzOlx0c3RydWN0IHJoYXNodGFibGUgaHQ7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzU0LVx0c3RydWN0IGJwZl9tZW1fYWxsb2MgbWE7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc1OC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NTk6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzYwLVx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3NjQ9c3RhdGljIGlubGluZSB2b2lkICpyaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCByaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc2OS0vKiBTcGVjaWFsaXplIGhhc2ggZnVuY3Rpb24gYW5kIG9iamNtcCBmb3IgbG9uZyBzaXplZCBrZXkgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NzA6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmh0YWJfa2V5X2NtcF9sb25nKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzcxLVx0XHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpwdHIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc3OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiByaHRhYl9oYXNoZm5fbG9uZyhjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzg1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHJodGFiX3BhcmFtc19sb25nID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjc4Ny1cdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBub2RlKSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzk0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5NS17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzk2Olx0c3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcztcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3OTctXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODIzLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgyNDpcdGVyciA9IHJoYXNodGFibGVfaW5pdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2cGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjUtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODI4Olx0LyogU2V0IG1heF9lbGVtcyBhZnRlciByaGFzaHRhYmxlX2luaXQoKSBzaW5jZSBpbml0IHplcm9lcyB0aGUgc3RydWN0ICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODI5LVx0cmh0YWItXHUwMDNlaHQubWF4X2VsZW1zID0gcmh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MzctZGVzdHJveV9yaHRhYjpcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4Mzg6XHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2cmh0YWItXHUwMDNlaHQpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzOS1mcmVlX3JodGFiOlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4OTg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAxLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkwMjpcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcmh0YWJfZnJlZV9lbGVtLCByaHRhYik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAzLVx0YnBmX21lbV9hbGxvY19kZXN0cm95KFx1MDAyNnJodGFiLVx1MDAzZW1hKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTA3PXN0YXRpYyB2b2lkICpyaHRhYl9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxNC1cdGlmIChtYXAtXHUwMDNla2V5X3NpemUgPT0gc2l6ZW9mKGxvbmcpKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkxNTpcdFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcdTAwMjZyaHRhYi1cdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXNfbG9uZyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE2LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkxNzpcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGtleSwgcmh0YWJfcGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTgtfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5Mzk9c3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKmNvcHksXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk0NS1cdCAqIGRpc2FibGVfaW5zdHJ1bWVudGF0aW9uKCkgbWl0aWdhdGVzIHRoZSBkZWFkbG9jayBmb3IgcHJvZ3JhbXMgcnVubmluZyBpbiBOTUkgY29udGV4dC5cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDY6XHQgKiByaGFzaHRhYmxlIGxvY2tzIGJ1Y2tldCB3aXRoIGxvY2FsX2lycV9zYXZlKCkuIE9ubHkgTk1JIHByb2dyYW1zIG1heSByZWVudGVyXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTQ3Olx0ICogcmhhc2h0YWJsZSBjb2RlLCBicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBkaXNhYmxlcyBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSwgZXhjZXB0XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTQ4Olx0ICogcmF3IHRyYWNlcG9pbnRzLCB3aGljaCB3ZSBkb24mIzM5O3QgaGF2ZSBpbiByaGFzaHRhYmxlLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk0OS1cdCAqL1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTItXHRpZiAocmh0YWItXHUwMDNlbWFwLmtleV9zaXplID09IHNpemVvZihsb25nKSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTM6XHRcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1NC1cdGVsc2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTU6XHRcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTYtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAzMj1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc0LVx0aWYgKG1hcC1cdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDc1Olx0XHR0bXAgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA3Ni1cdGVsc2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwNzc6XHRcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA3OC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTE2PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTE4LVx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzExOTpcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjAtXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMyLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzMzpcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTM0Olx0cmhhc2h0YWJsZV93YWxrX3N0YXJ0KFx1MDAyNml0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzNS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMzY6XHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcdTAwMjZpdGVyKSkpIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMzctXHRcdGlmIChJU19FUlIoZWxlbSkpIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ1LVx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHsgLyogQXZvaWQgc3RhbGxzIG9uIGxhcmdlIG1hcHMgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNDY6XHRcdFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ3LVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0ODpcdFx0XHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ5LVx0XHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1MS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTI6XHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTM6XHRyaGFzaHRhYmxlX3dhbGtfZXhpdChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTQtXHRXUklURV9PTkNFKHJodGFiLVx1MDAzZWZyZWVpbmdfaW50ZXJuYWwsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTU3PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjItXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTYzOlx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGtleSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY0LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjYtXHRpZiAoUFRSX0VSUihlbGVtKSA9PSAtRU5PRU5UKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2NzpcdFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIE5VTEwpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2OC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTc4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxODEtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTgyOlx0LyogR3VhcmFudGVlIHRoYXQgaGFzaHRhYiB2YWx1ZSBpcyBub3QgZnJlZWQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxODMtXHRndWFyZChyY3UpKCk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE5NT1zdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTEtXHQvKlxua2VybmVsL2JwZi9oYXNodGFiLmM6MzIxMjpcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxMy1cdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTctXHR3aGlsZSAobnVtX2VsZW1zIFx1MDAzYyB2aXNpdF9idWRnZXQgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjE4Olx0ICAgICAgIChlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcHJldl9rZXkpKSkge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxOS1cdFx0aWYgKElTX0VSUihlbGVtKSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjM2PXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNDAtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjQxOlx0LyogRXhjbHVkZXMgcmhhc2h0YWJsZSBidWNrZXQgb3ZlcmhlYWQgKH4gbmVsZW1zICogc2l6ZW9mKHZvaWQgKikgYXQgNzUlIGxvYWQpLiAqL1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzI0Mi1cdG51bV9lbnRyaWVzID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ2PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzIwLVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzMjE6XHRcdGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBOVUxMKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjItXHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzMzI6XHRcdGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBkc3Rfa2V5KTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMzMtXHRcdGRzdF9rZXkgJiM0Mzs9IGtleV9zaXplO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMzOTQ9c3RydWN0IGJwZl9pdGVyX3NlcV9yaGFzaF9tYXBfaW5mbyB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5Ni1cdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5NzpcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTgtfTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDAwPXN0YXRpYyB2b2lkICpicGZfcmhhc2hfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQwNS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MDY6XHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDctXHQvKlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MTItXHRkbyB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDEzOlx0XHRlbGVtID0gcmhhc2h0YWJsZV93YWxrX3BlZWsoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MTQtXHR9IHdoaWxlIChQVFJfRVJSKGVsZW0pID09IC1FQUdBSU4pO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0MjQ9c3RhdGljIHZvaWQgKmJwZl9yaGFzaF9tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MzItXHRkbyB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDMzOlx0XHRlbGVtID0gcmhhc2h0YWJsZV93YWxrX25leHQoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MzQtXHR9IHdoaWxlIChQVFJfRVJSKGVsZW0pID09IC1FQUdBSU4pO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0NzA9c3RhdGljIHZvaWQgYnBmX3JoYXNoX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDc3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ3ODpcdHJoYXNodGFibGVfd2Fsa19zdG9wKFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDc5LX1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDgxPXN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF9yaGFzaF9tYXAodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDg4LVx0aW5mby1cdTAwM2VyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDg5Olx0cmhhc2h0YWJsZV93YWxrX2VudGVyKFx1MDAyNmluZm8tXHUwMDNlcmh0YWItXHUwMDNlaHQsIFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDkwLVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ5Mz1zdGF0aWMgdm9pZCBicGZfaXRlcl9maW5pX3JoYXNoX21hcCh2b2lkICpwcml2X2RhdGEpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5Ni1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0OTc6XHRyaGFzaHRhYmxlX3dhbGtfZXhpdChcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5OC1cdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihpbmZvLVx1MDAzZW1hcCk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTUtI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2Vcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2h0YWJsZS5oXHUwMDNlXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9qaGFzaC5oXHUwMDNlXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19ucy5oXHUwMDNlXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNTojaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2Vcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9MzM9c3RydWN0IGJwZl9vZmZsb2FkX25ldGRldiB7XG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDEtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo0MjpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIG9mZmRldnNfcGFyYW1zID0ge1xua2VybmVsL2JwZi9vZmZsb2FkLmMtNDMtXHQubmVsZW1faGludFx0XHQ9IDQsXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDktXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo1MDpzdGF0aWMgc3RydWN0IHJoYXNodGFibGUgb2ZmZGV2cztcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxLVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTYyPWJwZl9vZmZsb2FkX2ZpbmRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtNjUtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo2NjpcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm5ldGRldiwgb2ZmZGV2c19wYXJhbXMpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtNjctfVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTY5PXN0YXRpYyBpbnQgX19icGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3JlZ2lzdGVyKHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldixcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04My1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjg0Olx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZvbmRldi1cdTAwM2VsLCBvZmZkZXZzX3BhcmFtcyk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NS1cdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0xMzY9c3RhdGljIHZvaWQgX19icGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3VucmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0NC1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE0NTpcdG9uZGV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZuZXRkZXYsIG9mZmRldnNfcGFyYW1zKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0Ni1cdGlmIChXQVJOX09OKCFvbmRldikpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ4LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTQ5Olx0V0FSTl9PTihyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm9uZGV2LVx1MDAzZWwsIG9mZmRldnNfcGFyYW1zKSk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNTAtXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9MTc5PXN0YXRpYyBpbnQgX19icGZfcHJvZ19kZXZfYm91bmRfaW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjAxLVx0XHQvKiBXaGVuIG9ubHkgYmluZGluZyB0byB0aGUgZGV2aWNlLCBleHBsaWNpdGx5XG5rZXJuZWwvYnBmL29mZmxvYWQuYzoyMDI6XHRcdCAqIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgaGFzaHRhYmxlLlxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjAzLVx0XHQgKi9cbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz04NjE9c3RhdGljIGludCBfX2luaXQgYnBmX29mZmxvYWRfaW5pdCh2b2lkKVxua2VybmVsL2JwZi9vZmZsb2FkLmMtODYyLXtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjg2MzpcdHJldHVybiByaGFzaHRhYmxlX2luaXQoXHUwMDI2b2ZmZGV2cywgXHUwMDI2b2ZmZGV2c19wYXJhbXMpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtODY0LX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzMy1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MzQ6XHQvKiBmaW5kIG1hcCB0eXBlIGFuZCBpbml0IG1hcDogaGFzaHRhYmxlIHZzIHJidHJlZSB2cyBibG9vbSB2cyAuLi4gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzUtXHRtYXBfdHlwZSA9IGF0dHItXHUwMDNlbWFwX3R5cGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBGb3ItRWFjaCBJdGVyYXRpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzIGFyZSBpdGVyYXRlZCB3aXRoaW4gQlBGIHByb2dyYW1zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHBhdGgsIHN0YXJ0aW5nIHdpdGggYGJwZl9lYWNoX3JoYXNoX2VsZW1gLCB3aGljaCBJIGtub3cgaXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSByZWFsaXplIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyByZWFjaGVkIGJ5IGNhbGxpbmcgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgZnJvbSBhIEJQRiBwcm9ncmFtLgoKQnV0IHRoZW4gYSBkZXRhaWwgcG9wcyB1cDogSXMgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGlubGluZWQ/IEkgcXVpY2tseSByZWNhbGwgc29tZXRoaW5nIGZyb20gdGhlIHZlcmlmaWVyIGZpeHVwcyDigJMgc3BlY2lmaWNhbGx5IHRoZSBsaW5lIGBpbnNuLSZndDtpbW0gPSBCUEZfQ0FMTF9JTU0ob3BzLSZndDttYXBfZm9yX2VhY2hfY2FsbGJhY2spO2AuIFRoYXQgYXNzaWdubWVudCYjMzk7cyBrZXkuIEl0IHR1cm5zIG91dCB0aGF0IGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpcyAqc3RhdGljKiB3aXRoaW4gYGhhc2h0YWIuY2AsIGhvd2V2ZXIgaXRzICpwb2ludGVyKiBpcyBhc3NpZ25lZCB0byBgcmh0YWJfbWFwX29wcy5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgLiBTbyB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzbiYjMzk7dCBkaXJlY3RseSBleHBvc2VkIGFzIGFuIGVudHJ5IHBvaW50LiBJdCYjMzk7cyB0aGUgcG9pbnRlciBhc3NpZ25tZW50IHRoYXQmIzM5O3MgY3JpdGljYWwuCgpOb3csIG15IG1pbmQgZ29lcyB0byB0aGUgYnJvYWRlciBzY29wZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLiBMZXQgbWUgdmVyaWZ5IGlmIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gIGl0c2VsZiwgb3IgYW55IHJlbGF0ZWQgZnVuY3Rpb24sIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgYXMgYSBwcmltYXJ5IHN5bWJvbCBvciBlbnRyeSBwb2ludC4gVGhpcyByZXF1aXJlcyBhIHNlYXJjaCBmb3Igbm9uLXN0YXRpYyBzeW1ib2xzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBsb29rIGF0IGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9mb3JfZWFjaF9tYXBfZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfaXRlci5jPTY4MD1pbnQgYnBmX2l0ZXJfcnVuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgpXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxMC1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3MTE6QlBGX0NBTExfNChicGZfZm9yX2VhY2hfbWFwX2VsZW0sIHN0cnVjdCBicGZfbWFwICosIG1hcCwgdm9pZCAqLCBjYWxsYmFja19mbixcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MTItXHQgICB2b2lkICosIGNhbGxiYWNrX2N0eCwgdTY0LCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzE2LVxua2VybmVsL2JwZi9icGZfaXRlci5jOjcxNzpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2Zvcl9lYWNoX21hcF9lbGVtX3Byb3RvID0ge1xua2VybmVsL2JwZi9icGZfaXRlci5jOjcxODpcdC5mdW5jXHRcdD0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxOS1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE0OC1cdGNhc2UgQlBGX0ZVTkNfZm9yX2VhY2hfbWFwX2VsZW06XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMTQ5Olx0XHRyZXR1cm4gXHUwMDI2YnBmX2Zvcl9lYWNoX21hcF9lbGVtX3Byb3RvO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE1MC1cdGNhc2UgQlBGX0ZVTkNfbG9vcDpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTk2NT1pbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk5Njgte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk5Njk6XHQvKiBicGZfZm9yX2VhY2hfbWFwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqY2FsbGJhY2tfZm4sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk3MC1cdCAqICAgICAgdm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDI2Nz1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzE3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzE4Olx0LyogZm9yIGNhbGxiYWNrcyBsaWtlIGJwZl9sb29wIG9yIGJwZl9mb3JfZWFjaF9tYXBfZWxlbSBnbyBiYWNrIHRvIGNhbGxzaXRlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzE5LVx0ICogdGhlcmUgZnVuY3Rpb24gY2FsbCBsb2dpYyB3b3VsZCByZXNjaGVkdWxlIGNhbGxiYWNrIHZpc2l0LiBJZiBpdGVyYXRpb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6CgoqKkNoZWNraW5nIEJQRl9TWVNDQUxMIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBCUEZfU1lTQ0FMTGAuIFNpbmNlIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgQlBGIHN5c3RlbSBjYWxscy4gU28sIEkgbmVlZCB0byB0cmFjZSBpdHMgY29uZmlndXJhdGlvbiBwYXRoLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL0tjb25maWdgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gZm9yIGFueXRoaW5nIEJQRi1yZWxhdGVkLiBUaGVuLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IGBpbml0L0tjb25maWdgLiBgaW5pdC9LY29uZmlnYCBvZnRlbiBoYW5kbGVzIGdsb2JhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2Ugb3RoZXIgZmVhdHVyZXMsIHNvIGl0JiMzOTtzIHNtYXJ0IHRvIGNoZWNrIHRoZXJlIGZvciBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBlbnN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLiBCeSBzeXN0ZW1hdGljYWxseSBjaGVja2luZyB0aGVzZSBmaWxlcywgSSBjYW4gdmVyaWZ5IGlmIHRoZXJlIGlzIGFuIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgbG9vayBpbnRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgd29ya2luZyB3aXRoIGBLY29uZmlnYCBmaWxlcyBiZWZvcmU7IHRoZXkmIzM5O3JlIHRoZSBicmVhZCBhbmQgYnV0dGVyIGZvciBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBJJiMzOTttIHRoaW5raW5nIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyNy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgY29yZSBlbmFibGluZyBvcHRpb25zIGZvciBCUEYsIG9yIHBlcmhhcHMgY29uZmlndXJhdGlvbiBvZiBzb21lIG9mIHRoZSBCUEYgc3Vic3lzdGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIGhlcmUgSSYjMzk7bGwgc2VlIHdoYXQgdGhlIG9wdGlvbnMgYXJlIGFuZCB3aGF0IG15IHVuZGVyc3RhbmRpbmcgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbiAgNjM6XHRcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxuICA2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgzMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBTdWJzeXN0ZW0gQ29tcGlsYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IGZvciBgaGFzaHRhYi5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aWVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBpbmRpY2F0ZWQgYnkgdGhhdCBsaW5lIGluIHRoZSBNYWtlZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9gLiBTbywgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgdGhlc2Ugb2JqZWN0IGZpbGVzIGdldCBidWlsdC4KCk5vdywgSSYjMzk7bSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXQgcGxheSBoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGl0c2VsZiBoYXMgYW55IHByZWNvbmRpdGlvbnMuIE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgLCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHJlbGF0ZWQgc2V0dGluZ3MgdG8gcmVzaWRlLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBMaW5lIDI1IG9mIGBrZXJuZWwvYnBmL0tjb25maWdgIGRlZmluZXMgdGhlICYjMzQ7QlBGIHN1YnN5c3RlbSYjMzQ7IG1lbnUsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBkZWNsYXJlZCByaWdodCBhZnRlci4gR29vZC4gTm8gZGVwZW5kZW5jaWVzIGxpc3RlZCBkaXJlY3RseSBmb3IgYENPTkZJR19CUEZfU1lTQ0FMTGAuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIGRvdWJsZSBjaGVjayBmb3IgYW55IG1lbnUgY29uZGl0aW9ucyBvciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgYm90aCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZm9yIGFueSBpbmRpcmVjdCBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBlbmFibGVtZW50IG9mIGBDT05GSUdfQlBGX1NZU0NBTExgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjYKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdCMgQlBGIGludGVycHJldGVyIHRoYXQsIGZvciBleGFtcGxlLCBjbGFzc2ljIHNvY2tldCBmaWx0ZXJzIGRlcGVuZCBvbi5cbiAgIDQ6XHRjb25maWcgQlBGXG4gICA1Olx0XHRib29sXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgIDc6XHRcbiAgIDg6XHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgc3VwcG9ydCBCUEYgSklUIGNvbXBpbGVyIHBsdXMgd2hpY2hcbiAgIDk6XHQjIGZsYXZvdXIuIE9ubHkgb25lIG9mIHRoZSB0d28gY2FuIGJlIHNlbGVjdGVkIGZvciBhIHNwZWNpZmljIGFyY2ggc2luY2VcbiAgMTA6XHQjIGVCUEYgSklUIHN1cGVyc2VkZXMgdGhlIGNCUEYgSklULlxuICAxMTpcdFxuICAxMjpcdCMgQ2xhc3NpYyBCUEYgSklUIChjQlBGKVxuICAxMzpcdGNvbmZpZyBIQVZFX0NCUEZfSklUXG4gIDE0Olx0XHRib29sXG4gIDE1Olx0XG4gIDE2Olx0IyBFeHRlbmRlZCBCUEYgSklUIChlQlBGKVxuICAxNzpcdGNvbmZpZyBIQVZFX0VCUEZfSklUXG4gIDE4Olx0XHRib29sXG4gIDE5Olx0XG4gIDIwOlx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxuICAyMTpcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG4gIDIyOlx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbiAgMjM6XHRcdGJvb2xcbiAgMjQ6XHRcbiAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGluIEJQRiBIYXNoIFRhYmxlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgZmlsZSBhZ2Fpbi4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgaGlkZGVuIGJlaGluZCBgI2lmZGVmYCBkaXJlY3RpdmVzIG9yIHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucywgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9yIGF2YWlsYWJpbGl0eSBvZiBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgb3IgdGhlIHJlbGF0ZWQgYHJodGFiX21hcF9vcHNgIHN0cnVjdHVyZXMuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCB0byB0aGUgcmVzaXplIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24sIGFuZCBJIHdhbnQgdG8gYmUgKnN1cmUqIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSSYjMzk7bSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCwgbGVhZGluZyB0byBwb3RlbnRpYWwgZGlmZmVyZW5jZXMgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi4KClRvIGdldCBhIGdvb2Qgb3ZlcnZpZXcsIEkgdGhpbmsgSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBzZWN0aW9uIG9mIHRoZSBmaWxlIGJldHdlZW4gYXBwcm94aW1hdGVseSBsaW5lcyAzMTkwIGFuZCAzNTQwLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgcmVsZXZhbnQgcG9ydGlvbnMgZGVhbGluZyB3aXRoIHRoZSByZXNpemUgaGFzaCB0YWJsZSBvcGVyYXRpb25zIGFuZCB0aGUgaXRlcmF0aW9uIGZ1bmN0aW9uLiBIb3BlZnVsbHksIGJ5IHJldmlld2luZyB0aGlzIHJlZ2lvbiBjbG9zZWx5LCBJIGNhbiBzcG90IGFueSBzdWJ0bGUgdmFyaWF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IHRoZXNlIGZ1bmN0aW9ucyBiZWhhdmUgaW4gZGlmZmVyZW50IGtlcm5lbCBidWlsZHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGRpZmZlcmVudCBtYXAgdHlwZXMsIG9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGRpc2FibGUgb3IgYWx0ZXIgdGhlIGJlaGF2aW9yLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbGFyaXR5IGFuZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNTEwOlx0XHQuaW5pdF9zZXFfcHJpdmF0ZSA9IGJwZl9pdGVyX2luaXRfcmhhc2hfbWFwLFxuMzUxMTpcdFx0LmZpbmlfc2VxX3ByaXZhdGUgPSBicGZfaXRlcl9maW5pX3JoYXNoX21hcCxcbjM1MTI6XHRcdC5zZXFfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl9zZXFfcmhhc2hfbWFwX2luZm8pLFxuMzUxMzpcdH07XG4zNTE0Olx0XG4zNTE1Olx0QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcbjM1MTY6XHRjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbjM1MTc6XHRcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbjM1MTg6XHRcdC5tYXBfYWxsb2NfY2hlY2sgPSByaHRhYl9tYXBfYWxsb2NfY2hlY2ssXG4zNTE5Olx0XHQubWFwX2FsbG9jID0gcmh0YWJfbWFwX2FsbG9jLFxuMzUyMDpcdFx0Lm1hcF9mcmVlID0gcmh0YWJfbWFwX2ZyZWUsXG4zNTIxOlx0XHQubWFwX2dldF9uZXh0X2tleSA9IHJodGFiX21hcF9nZXRfbmV4dF9rZXksXG4zNTIyOlx0XHQubWFwX3JlbGVhc2VfdXJlZiA9IHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMsXG4zNTIzOlx0XHQubWFwX2NoZWNrX2J0ZiA9IHJodGFiX21hcF9jaGVja19idGYsXG4zNTI0Olx0XHQubWFwX2xvb2t1cF9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9lbGVtLFxuMzUyNTpcdFx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG4zNTI2Olx0XHQubWFwX3VwZGF0ZV9lbGVtID0gcmh0YWJfbWFwX3VwZGF0ZV9lbGVtLFxuMzUyNzpcdFx0Lm1hcF9kZWxldGVfZWxlbSA9IHJodGFiX21hcF9kZWxldGVfZWxlbSxcbjM1Mjg6XHRcdC5tYXBfZ2VuX2xvb2t1cCA9IHJodGFiX21hcF9nZW5fbG9va3VwLFxuMzUyOTpcdFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4zNTMwOlx0XHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxuMzUzMTpcdFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9lYWNoX3JoYXNoX2VsZW0sXG4zNTMyOlx0XHQubWFwX21lbV91c2FnZSA9IHJodGFiX21hcF9tZW1fdXNhZ2UsXG4zNTMzOlx0XHRCQVRDSF9PUFMocmh0YWIpLFxuMzUzNDpcdFx0Lm1hcF9idGZfaWQgPSBcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcbjM1MzU6XHRcdC5pdGVyX3NlcV9pbmZvID0gXHUwMDI2cmhhc2hfaXRlcl9zZXFfaW5mbyxcbjM1MzY6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc3NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIFBvdGVudGlhbCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmLiBJbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCB0aGUgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgcHJldmlvdXMgdmVyc2lvbiBlc3NlbnRpYWxseSBpdGVyYXRlZCBpbmRlZmluaXRlbHkgdGhyb3VnaCBhbiByaGFzaCB0YWJsZS4gTm93LCB0aGVyZSYjMzk7cyBhIGxpbWl0IGludHJvZHVjZWQ6IGB2aXNpdF9idWRnZXQgPSBhdG9taWNfcmVhZCgmYW1wO3JodGFiLSZndDtodC5uZWxlbXMpYC4gVGhlIGxvb3Agd2lsbCBub3cgdGVybWluYXRlIGlmIGl0IHJlYWNoZXMgdGhhdCBidWRnZXQuIFRoaXMgaXMgKmNydWNpYWwqIGJlY2F1c2UgaXQgcHJldmVudHMgaW5maW5pdGUgbG9vcHMgZHVyaW5nIGl0ZXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZWxlbWVudHMgYXJlIGJlaW5nIGFkZGVkIGNvbmN1cnJlbnRseS4gVGhhdCYjMzk7cyBhIHNvbGlkIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYywgc29tZXRoaW5nIHRoYXQgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciB2dWxuZXJhYmlsaXRpZXMuCgpUaGlzIGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgYmVpbmcgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHNpbmNlIGl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgQlBGIHN5c2NhbGxzOiBjcmVhdGluZyBhbiByaGFzaCBtYXAsIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB0aGF0IHVzZXMgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgb24gdGhhdCBtYXAsIGFuZCB0aGVuIHJ1bm5pbmcgdGhlIHByb2dyYW0uIFNvLCB5ZWFoLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGltcGFjdCBpcyBoaWdoIOKAkyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBjYW4gbGVhZCB0byBzZXJpb3VzIGRlbmlhbC1vZi1zZXJ2aWNlIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3Mgb2Ygc2V0dGluZyB1cCBhIGZ1enppbmcgY2FtcGFpZ24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZ1enppbmcgdGhlIHJpZ2h0IGNhbGxzLgoKU28sICpmb2N1cyBzeW1ib2xzKi4uLiBjbGVhcmx5IGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gIGlzIGEgcHJpbWFyeSB0YXJnZXQuIFRoYXQmIzM5O3MgdGhlIEJQRiBoZWxwZXIgdGhhdCBpbml0aWF0ZXMgdGhlIGl0ZXJhdGlvbi4gQnV0IHdoYXQgYWJvdXQgYGJwZl9lYWNoX3JoYXNoX2VsZW1gPyBIb2xkIG9uLCBpc24mIzM5O3QgdGhhdCBzdGF0aWM/IFllcywgYnV0IGl0JiMzOTtzIGFkZHJlc3MgaXMgc3RvcmVkIGluIGByaHRhYl9tYXBfb3BzLm1hcF9mb3JfZWFjaF9jYWxsYmFja2AuIFdhaXQsIGluIHZlcmlmaWVyIGZpeHVwcywgaXQmIzM5O3MgdGhlcmUgYGluc24tJmd0O2ltbSA9IEJQRl9DQUxMX0lNTShvcHMtJmd0O21hcF9mb3JfZWFjaF9jYWxsYmFjaylgLiBJZiBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgdGhlbiBpdCBpcyBhIHN5bWJvbCBpbiBrYWxsc3ltcy4gQnV0LCBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsJiMzOTtzIGRvY3VtZW50YXRpb24sIGFzIHNvbWV0aW1lcywgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLgoKVGhlIGRvY3VtZW50YXRpb24gcmVjb21tZW5kcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIE5vdywgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0IHNlZW1zIGlkZWFsLiBIb3dldmVyLCBgQlBGX0NBTExfNGAgY3JlYXRlcyBlaXRoZXIgYF9fX2JwZl9mb3JfZWFjaF9tYXBfZWxlbWAgb3IgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQlBGX0NBTExgIGRlZmluZXMgdGhlc2Ugc3ltYm9scy4gT2theSwgSSBuZWVkIHRvIGdyZXAgZm9yIGBCUEZfQ0FMTGAgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIG9yIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkgdG8gdW5kZXJzdGFuZCB0aGUgc3ltYm9sIG5hbWluZyBjb252ZW50aW9ucy4gVGhpcyB3aWxsIGhlbHAgcmVmaW5lIHRoZSBmdXp6aW5nIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBCUEZfQ0FMTF80JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9NDI0PXN0YXRpYyBpbmxpbmUgaW50IGJwZl9hdG9taWNfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjgyLSNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgzOiNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjg0LSNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEJQRiBDYWxsIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIEJQRiBjYWxscyBhcmUgZGVmaW5lZC4gVGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgaXMgYWx3YXlzIHRoZSBrZXJuZWwmIzM5O3MgaW5jbHVkZSBmaWxlcywgc28gbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgZm9yIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYEJQRl9DQUxMX3hgIG1hY3Jvcywgc2luY2UgdGhvc2UgYXJlIHRoZSBoZWFydCBvZiBob3cgd2UgaW50ZXJmYWNlIHdpdGggdGhlIEJQRiBzdWJzeXN0ZW0gYXQgdGhpcyBsZXZlbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgYXJlIGNvbnN0cnVjdGVkLCB3aGF0IHNvcnQgb2YgcHJlcHJvY2Vzc29yIG1hZ2ljIGlzIHVzZWQsIHdoYXQgY29uc3RyYWludHMgYXJlIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZGVmaW5pdGlvbiBpcyBnb2luZyB0byBjYXVzZSBzb21lIHNpZGUgZWZmZWN0cywgb3IgbWF5YmUgZXhwb3NlIHNvbWUgaW50ZXJlc3RpbmcgYXNwZWN0cyBvZiB0aGUgY2FsbCBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcbiA2NjE6XHRcbiA2NjI6XHQjZGVmaW5lIF9fQlBGX1BBRChuKVx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjYzOlx0XHRfX0JQRl9NQVAobiwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9OLCB1NjQsIF9fdXJfMSwgdTY0LCBfX3VyXzIsICAgICAgIFxcXG4gNjY0Olx0XHRcdCAgdTY0LCBfX3VyXzMsIHU2NCwgX191cl80LCB1NjQsIF9fdXJfNSlcbiA2NjU6XHRcbiA2NjY6XHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbiA2Njc6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2Njg6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcbiA2Njk6XHRcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcbiA2NzA6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcbiA2NzE6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcbiA2NzI6XHRcdHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjczOlx0XHRcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcbiA2NzQ6XHRcdH1cdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjc1Olx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjc2Olx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXG4gNjc3Olx0XG4gNjc4Olx0I2RlZmluZSBfX05PQVRUUlxuIDY3OTpcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2ODA6XHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjgxOlx0I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY4MjpcdCNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2ODM6XHQjZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjg0Olx0I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgTWFwIEl0ZXJhdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgQlBGX0NBTExfNChicGZfZm9yX2VhY2hfbWFwX2VsZW0sIC4uLilgIGRlZmluZXMgdGhlIHB1YmxpYywgbm9uLXN0YXRpYyBmdW5jdGlvbiBgdTY0IGJwZl9mb3JfZWFjaF9tYXBfZWxlbSguLi4pYC4gIFRoZW4gdGhlcmUmIzM5O3MgYGJwZl9lYWNoX3JoYXNoX2VsZW1gLCB3aGljaCBpcyBzdGF0aWMgYnV0IHVzZWQgdmlhIGByaHRhYl9tYXBfb3BzYC4gIEkgbmVlZCB0byBjb25maXJtIGlmIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpcyBjYWxsZWQgZWxzZXdoZXJlIG9yIGlmIGl0IG5lZWRzIHRvIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAuIEkgdGhpbmsgaW5jbHVkaW5nIGJvdGggYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGFuZCBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtYCBpbiBgRm9jdXNTeW1ib2xzYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4KCk5leHQsIEkmIzM5O2xsIG1vdmUgb24gdG8gY29uZmlndXJhdGlvbi4gVG8gZ2V0IEJQRiBzeXNjYWxscyBhbmQgbWFwcyB3b3JraW5nLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwsIHRoYXQmIzM5O3MgYSBnaXZlbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdG8gYmUgc3VyZS4KCkxvb2tpbmcgYXQgYGtlcm5lbC9icGYvTWFrZWZpbGVgLCBpdCBsb29rcyBsaWtlIGBoYXNodGFiLm9gIGlzIGFsd2F5cyBidWlsdCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGFjdGl2ZSwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gTm93LCBJIHNob3VsZCBtYWtlIGNlcnRhaW4gd2hldGhlciBgQlBGX01BUF9UWVBFX1JIQVNIYCBoYXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgZGl2ZSBpbnRvIGBoYXNodGFiLmNgIGFuZCBzZWFyY2ggZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJvdW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gYHJodGFiX2Agb3IgYEJQRl9NQVBfVFlQRV9SSEFTSGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmhhc2h0YWJsZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZi4qUkhBU0h8I2lmLipyaHRhYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqQ2hlY2tpbmcgZm9yIENvbmZpZyBPdmVybGFwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmaWxlcyBpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgY29kZSBoYXMgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEdpdmVuIHRoZSBzZW5zaXRpdmUgbmF0dXJlIG9mIEJQRiBhbmQgaG93IGRlZXBseSBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIGtlcm5lbCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3Igb3ZlcmxhcHBpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBzY2FuIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSwgb3IgYmUgaW5mbHVlbmNlZCBieSwgdGhlIHNldHRpbmdzIHRoYXQgZ292ZXJuIHRoaXMgcGFydGljdWxhciBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbC1sZXZlbCBjaGFuZ2VzLiBMZXQgbWUgY2FyZWZ1bGx5IGV4YW1pbmUgYWxsIHJlbGV2YW50IGZpbGVzIHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWZ8I2lmIElTX0VOQUJMRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzAyCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSGFzaHRhYmxlIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gV2hhdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgaXMgdGhlIGNvbXBsZXRlIGFic2VuY2Ugb2YgYW55IHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgKGAjaWZkZWZgcykuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoYXQgdGhlIG9ubHkga2VybmVsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgZm9yIHRoaXMgbW9kdWxlIGlzIHRoZSBlbmFibGluZyBvZiB0aGUgQlBGIHN5c3RlbSBjYWxsIChgQlBGX1NZU0NBTExgKS4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVwZW5kZW5jeS4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgYnkgZ29pbmcgdGhyb3VnaCB0aGUgcmVxdWlyZW1lbnRzIG1vcmUgbWV0aG9kaWNhbGx5OgoKMS4gIGBXb3J0aEZ1enppbmdgOiBDb25maXJtZWQsIGl0JiMzOTtzIHNldCB0byAmIzM0O3RydWUmIzM0Oy4gVGhpcyBpbmRpY2F0ZXMgdGhlIGNvZGUgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgd2hpY2ggbWVhbnMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBhcmUgbGlrZWx5IHRvIGJlIHByZXNlbnQuCjIuICBgRm9jdXNTeW1ib2xzYDogSSBhbSBmb2N1c2luZyBvbiB0d28ga2V5IHN5bWJvbHMgaGVyZSwgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgYW5kIGBicGZfZWFjaF9yaGFzaF9lbGVtYC4gVGhlc2UgYXJlIG15IHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QuIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBpdGVyYXRpbmcgdGhyb3VnaCBCUEYgbWFwIGVsZW1lbnRzLgozLiAgYEVuYWJsZUNvbmZpZ3NgOiBJJiMzOTt2ZSBhbHJlYWR5IGNoZWNrZWQgdGhpcy4gYFsmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYCBpcyB0aGUgb25seSByZXF1aXJlbWVudCwgd2hpY2ggaXMgdmVyeSBzaW1wbGUuCjQuICBgUmVhc29uaW5nYDogQWgsIHJpZ2h0LiBUaGUgcGF0Y2ggSSYjMzk7bSBleGFtaW5pbmcgaXMgYWxsIGFib3V0IG1hbmFnaW5nIGl0ZXJhdGlvbiBidWRnZXRzIHdpdGhpbiBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgc3BlY2lmaWNhbGx5IHdoZW4gaXQmIzM5O3MgdXNlZCB3aXRoIGBCUEZfTUFQX1RZUEVfUkhBU0hgIEJQRiByaGFzaCBtYXBzLiBUaGUgcHVycG9zZSBpcyB0byBwcmV2ZW50IHVuYm91bmRlZCBpdGVyYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gZGVuaWFsLW9mLXNlcnZpY2UsIGVzcGVjaWFsbHkgZHVyaW5nIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyB0byB0aGUgaGFzaCB0YWJsZS4gVGhpcyBpcyBpbXBvcnRhbnQ6IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGNvdWxkIGVhc2lseSBsZWFkIHRvIGFuIGV4cGxvaXRhYmxlIHNpdHVhdGlvbiBpZiB0aGUgYnVkZ2V0IGlzIG5vdCBtYW5hZ2VkLCB3aGljaCBpcyB3aHkgSSB3YXMgZm9jdXNpbmcgb24gdGhvc2UgZnVuY3Rpb25zLgoKV2l0aCB0aGF0LCBJIGFtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2Zvcl9lYWNoX21hcF9lbGVtJiMzNDssCiAgICAmIzM0O2JwZl9lYWNoX3JoYXNoX2VsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9lYWNoX3JoYXNoX2VsZW0oKWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBlbmZvcmNlIGFuIGl0ZXJhdGlvbiBidWRnZXQgYmFzZWQgb24gYXRvbWljIGBuZWxlbXNgIHdoZW4gaXRlcmF0aW5nIG92ZXIgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcyB2aWEgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbSgpYC4gVGhpcyBib3VuZHMgdGhlIGl0ZXJhdGlvbiBsb29wIGFuZCBwcmV2ZW50cyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBkdXJpbmcgY29uY3VycmVudCBtYXAgb3BlcmF0aW9ucy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2Zvcl9lYWNoX21hcF9lbGVtJiMzNDssCiAgICAmIzM0O2JwZl9lYWNoX3JoYXNoX2VsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9lYWNoX3JoYXNoX2VsZW0oKWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBlbmZvcmNlIGFuIGl0ZXJhdGlvbiBidWRnZXQgYmFzZWQgb24gYXRvbWljIGBuZWxlbXNgIHdoZW4gaXRlcmF0aW5nIG92ZXIgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcyB2aWEgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbSgpYC4gVGhpcyBib3VuZHMgdGhlIGl0ZXJhdGlvbiBsb29wIGFuZCBwcmV2ZW50cyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBkdXJpbmcgY29uY3VycmVudCBtYXAgb3BlcmF0aW9ucy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGJ5IGJvdW5kaW5nIHRoZSBpdGVyYXRpb24gbG9vcCB3aXRoIGEgYHZpc2l0X2J1ZGdldGAgZGVyaXZlZCBmcm9tIGBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzIGFyZSBleHBvc2VkIG9yIGNoZWNrZWQuXG4zLiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgY29uY2VybnMgaW52b2x2aW5nIFJDVS1wcm90ZWN0ZWQgcmhhc2h0YWJsZSBlbGVtZW50cyBhcmUgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMb2NrZGVwIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzozMzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggZDQwY2I1ZGQ0NDZjYS4uMmNhZDY3YzkwMTU0MyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTMxOTgsNyAmIzQzOzMxOTgsOCBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLAogCXN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTsKIAl2b2lkICpwcmV2X2tleSA9IE5VTEw7CiAJc3RydWN0IHJodGFiX2VsZW0gKmVsZW07Ci0JaW50IG51bV9lbGVtcyA9IDA7CiYjNDM7CXUzMiB2aXNpdF9idWRnZXQ7CiYjNDM7CXUzMiBudW1fZWxlbXMgPSAwOwogCXU2NCByZXQgPSAwOwogCiAJY2FudF9taWdyYXRlKCk7CkBAIC0zMjEyLDcgJiM0MzszMjEzLDkgQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbiwKIAkgKiBlbGVtZW50cyBhcmUgZGVsZXRlZC9pbnNlcnRlZCwgdGhlcmUgbWF5IGJlIG1pc3NlZCBvciBkdXBsaWNhdGUKIAkgKiBlbGVtZW50cyB2aXNpdGVkLgogCSAqLwotCXdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoJmFtcDtyaHRhYi0mZ3Q7aHQsIHByZXZfa2V5KSkpIHsKJiM0MzsJdmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoJmFtcDtyaHRhYi0mZ3Q7aHQubmVsZW1zKTsKJiM0MzsJd2hpbGUgKG51bV9lbGVtcyAmbHQ7IHZpc2l0X2J1ZGdldCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoJmFtcDtyaHRhYi0mZ3Q7aHQsIHByZXZfa2V5KSkpIHsKIAkJaWYgKElTX0VSUihlbGVtKSkKIAkJCWJyZWFrOwogCQludW1fZWxlbXMmIzQzOyYjNDM7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMKaW5kZXggOThiYjY2OTA3YjdmNy4uZjFhMGE4ZTNmYzFhYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jCkBAIC0zLDEyICYjNDM7MywxNiBAQAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGF0b21pYy5oJmd0OwogI2luY2x1ZGUgJiMzNDtyaGFzaC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfaXRlcl9icGZfcmhhc2hfbWFwLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAKJiM0MzsjZGVmaW5lIFJIQVNIX1NUUkVTU19EVVJBVElPTl9OUwkoM1VMTCAqIDEwMDAwMDAwMDBVTEwpCiYjNDM7CiBzdGF0aWMgdm9pZCByaGFzaF9ydW4oY29uc3QgY2hhciAqcHJvZ19uYW1lKQogewogCXN0cnVjdCByaGFzaCAqc2tlbDsKQEAgLTUzLDYgJiM0Mzs1NywxMTIgQEAgc3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpCiAJCQkgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgJmFtcDtvcHRzKTsKIH0KIAomIzQzO3N0cnVjdCByaGFzaF9zdHJlc3NfYXJnIHsKJiM0MzsJaW50IG1hcF9mZDsKJiM0MzsJYXRvbWljX2Jvb2wgKnN0b3A7CiYjNDM7CV9fdTMyIG5yX2tleXM7CiYjNDM7CV9fdTMyIHNlZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcmhhc2hfc3RyZXNzX3VwZGF0ZSh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHJoYXNoX3N0cmVzc19hcmcgKmFyZyA9IGRhdGE7CiYjNDM7CV9fdTY0IHZhbHVlID0gMDsKJiM0MzsJX191MzIga2V5OwomIzQzOwlfX3UzMiBpOwomIzQzOwomIzQzOwl3aGlsZSAoIWF0b21pY19sb2FkKGFyZy0mZ3Q7c3RvcCkpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yX2tleXMgJmFtcDsmYW1wOyAhYXRvbWljX2xvYWQoYXJnLSZndDtzdG9wKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctJmd0O3NlZWQpICUgYXJnLSZndDtucl9rZXlzOwomIzQzOwkJCWJwZl9tYXBfdXBkYXRlX2VsZW0oYXJnLSZndDttYXBfZmQsICZhbXA7a2V5LCAmYW1wO3ZhbHVlLCBCUEZfQU5ZKTsKJiM0MzsJCX0KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yX2tleXMgJmFtcDsmYW1wOyAhYXRvbWljX2xvYWQoYXJnLSZndDtzdG9wKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctJmd0O3NlZWQpICUgYXJnLSZndDtucl9rZXlzOwomIzQzOwkJCWJwZl9tYXBfZGVsZXRlX2VsZW0oYXJnLSZndDttYXBfZmQsICZhbXA7a2V5KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmhhc2hfaXRlcl9zdHJlc3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByaGFzaCAqc2tlbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCByaGFzaF9zdHJlc3NfYXJnIGFyZ3NbMl07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJYXRvbWljX2Jvb2wgc3RvcCA9IGZhbHNlOwomIzQzOwlib29sIHJhbiA9IGZhbHNlOwomIzQzOwlfX3U2NCBzdGFydDsKJiM0MzsJcHRocmVhZF90IHRocmVhZHNbMl07CiYjNDM7CWJvb2wgY3JlYXRlZFsyXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7CiYjNDM7CWludCBucl9jcHVzOwomIzQzOwlfX3UzMiB3b3JraW5nX3NldDsKJiM0MzsJaW50IG1hcF9mZCwgZXJyLCBpOwomIzQzOwomIzQzOwlucl9jcHVzID0gbGliYnBmX251bV9wb3NzaWJsZV9jcHVzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG5yX2NwdXMsIDAsICYjMzQ7bnVtX3Bvc3NpYmxlX2NwdXMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChucl9jcHVzICZsdDsgMikgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSByaGFzaF9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtyaGFzaF9fb3BlbiBzdHJlc3MmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXdvcmtpbmdfc2V0ID0gc2tlbC0mZ3Q7cm9kYXRhLSZndDtzdHJlc3Nfd29ya2luZ19zZXQ7CiYjNDM7CiYjNDM7CXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShza2VsLSZndDtvYmosCiYjNDM7CQkJCQkJJiMzNDt0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIocHJvZywgJiMzNDtmaW5kIHN0cmVzcyBwcm9ncmFtJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHByb2csIHRydWUpOwomIzQzOwomIzQzOwllcnIgPSByaGFzaF9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3N0cmVzcyBza2VsX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuc3RyZXNzX3JobWFwKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlhcmdzW2ldLm1hcF9mZCA9IG1hcF9mZDsKJiM0MzsJCWFyZ3NbaV0uc3RvcCA9ICZhbXA7c3RvcDsKJiM0MzsJCWFyZ3NbaV0ubnJfa2V5cyA9IHdvcmtpbmdfc2V0OwomIzQzOwkJYXJnc1tpXS5zZWVkID0gaSAqIDk3NzsKJiM0MzsJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSwKJiM0MzsJCQkJICAgICAmYW1wO2FyZ3NbaV0pOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3B0aHJlYWRfY3JlYXRlJiMzNDspKQomIzQzOwkJCWdvdG8gc3RvcF90aHJlYWRzOwomIzQzOwkJY3JlYXRlZFtpXSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhcnQgPSBnZXRfdGltZV9ucygpOwomIzQzOwl3aGlsZSAoZ2V0X3RpbWVfbnMoKSAtIHN0YXJ0ICZsdDsgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7CiYjNDM7CQllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgJmFtcDtvcHRzKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzdHJlc3MgcHJvZyBydW4mIzM0OykpCiYjNDM7CQkJZ290byBzdG9wX3RocmVhZHM7CiYjNDM7CQlyYW4gPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7c3RvcF90aHJlYWRzOgomIzQzOwlhdG9taWNfc3RvcmUoJmFtcDtzdG9wLCB0cnVlKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KQomIzQzOwkJaWYgKGNyZWF0ZWRbaV0pCiYjNDM7CQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwomIzQzOwomIzQzOwlpZiAoZXJyIHx8ICFyYW4pCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3N0cmVzc19tYXhfdmlzaXRzLCAwLCAmIzM0O3N0cmVzcyBjYWxsYmFjayB2aXNpdHMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3N0cmVzc19mdWxsX3dhbGtzLCAwLCAmIzM0O3N0cmVzcyBmdWxsIHdhbGtzJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJlc3Nfb3ZlcnJ1bnMsIDAsICYjMzQ7c3RyZXNzIGNhbGxiYWNrIGJvdW5kJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDtzdHJlc3MgbWF4IGNhbGxiYWNrIHZpc2l0czogJWxsdSAobGltaXQgJXUpXG4mIzM0OywKJiM0MzsJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2tlbC0mZ3Q7YnNzLSZndDtzdHJlc3NfbWF4X3Zpc2l0cywKJiM0MzsJICAgICAgIHdvcmtpbmdfc2V0KTsKJiM0MztjbGVhbnVwOgomIzQzOwlyaGFzaF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByaGFzaF9tYXBfZXh0cmFfcHJlc2l6ZSh2b2lkKQogewogCWNvbnN0IF9fdTMyIG1heF9lbnRyaWVzID0gMTAyNDsKQEAgLTE4MCw0ICYjNDM7MjkwLDcgQEAgdm9pZCB0ZXN0X3JoYXNoKHZvaWQpCiAKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3Rlc3Rfcmhhc2hfaXRlciYjMzQ7KSkKIAkJcmhhc2hfaXRlcl90ZXN0KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGVzdF9yaGFzaF9pdGVyX3N0cmVzcyYjMzQ7KSkKJiM0MzsJCXJoYXNoX2l0ZXJfc3RyZXNzKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCmluZGV4IGZjMmRhYzNhNzE5ZTkuLjNkNzIwMTQzMGJhYmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCkBAIC05LDExICYjNDM7OSwxOCBAQAogCiAjZGVmaW5lIEVOT0VOVCAyCiAjZGVmaW5lIEVFWElTVCAxNwomIzQzOyNkZWZpbmUgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTICgxVSAmbHQ7Jmx0OyAyMCkKIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogCiBpbnQgZXJyOwogCiYjNDM7Y29uc3Qgdm9sYXRpbGUgX191MzIgc3RyZXNzX3dvcmtpbmdfc2V0ID0gNDA5NjsKJiM0MzsKJiM0Mzt2b2xhdGlsZSBfX3U2NCBzdHJlc3NfbWF4X3Zpc2l0czsKJiM0Mzt2b2xhdGlsZSBfX3U2NCBzdHJlc3Nfb3ZlcnJ1bnM7CiYjNDM7dm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7CiYjNDM7CiBzdHJ1Y3QgZWxlbSB7CiAJY2hhciBhcnJbMTI4XTsKIAlpbnQgdmFsOwpAQCAtMjcsNiAmIzQzOzM0LDIwIEBAIHN0cnVjdCB7CiAJX190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7CiB9IHJobWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCBSSEFTSF9TVFJFU1NfTUFYX0VOVFJJRVMpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gc3RyZXNzX3JobWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBfX3U2NCBzdHJlc3NfaXRlcl9jYihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLAomIzQzOwkJCSAgICB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBpbnQgdGVzdF9yaGFzaF9sb29rdXBfdXBkYXRlKHZvaWQgKmN0eCkKIHsKQEAgLTI0NiwzICYjNDM7MjY3LDIzIEBAIGludCB0ZXN0X3JoYXNoX2RlbGV0ZV9ub25leGlzdGVudCh2b2lkICpjdHgpCiAJZXJyID0gMDsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IHRlc3Rfcmhhc2hfaXRlcl9zdHJlc3Modm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQ29uY3VycmVudCByZWhhc2ggbWF5IHByb2R1Y2UgZHVwbGljYXRlIHZpc2l0cy4gQ2hlY2sgdGhhdCB0aGUKJiM0MzsJICogaGVscGVyIHN0aWxsIGdpdmVzIG9uZSB3YWxrIGEgZmluaXRlIGNhbGxiYWNrIGJvdW5kOyBubyBzbmFwc2hvdAomIzQzOwkgKiBvciB1bmlxdWUtdmlzaXQgZ3VhcmFudGVlIGlzIGV4cGVjdGVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsb25nIHZpc2l0czsKJiM0MzsKJiM0MzsJdmlzaXRzID0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtKCZhbXA7c3RyZXNzX3JobWFwLCBzdHJlc3NfaXRlcl9jYiwgTlVMTCwgMCk7CiYjNDM7CWlmICh2aXNpdHMgJmd0OyBzdHJlc3NfbWF4X3Zpc2l0cykKJiM0MzsJCXN0cmVzc19tYXhfdmlzaXRzID0gdmlzaXRzOwomIzQzOwlpZiAodmlzaXRzICZndDsgc3RyZXNzX3dvcmtpbmdfc2V0KQomIzQzOwkJc3RyZXNzX292ZXJydW5zJiM0MzsmIzQzOzsKJiM0MzsJaWYgKHZpc2l0cyA9PSBzdHJlc3Nfd29ya2luZ19zZXQpCiYjNDM7CQlzdHJlc3NfZnVsbF93YWxrcyYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBkaWZmIGFmZmVjdHMgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgd2hpY2ggaXMgYSBjb3JlIEJQRiBjb21wb25lbnQsIGFuZCB0aGUgc2VsZnRlc3RzOiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY2AuIFJpZ2h0LCBzbyB0aGlzIGhhcyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBoYXNoIHRhYmxlIGJlaGF2aW9yIGFuZCB0aGUgYXNzb2NpYXRlZCB0ZXN0cy4KCk15IGZpcnN0IHN0ZXAgaXMgdG8gZm9jdXMgb24gdGhlIGtlcm5lbC1zaWRlIGNoYW5nZSBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBJJiMzOTtsbCB3YW50IHRvIGdldCBhIGxvb2sgYXQgYXJvdW5kIGxpbmUgMzE5OC4gRWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzaG91bGQgZG8gdGhlIHRyaWNrOyBJIGp1c3QgbmVlZCB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBhZmZlY3RlZCBjb2RlIGFuZCBzZWUgd2hhdCBtb2RpZmljYXRpb25zIHdlcmUgaW50cm9kdWNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGFsdGVyZWQgaW4gdGhpcyBjcnVjaWFsIGFyZWEuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSB3aWxsIGxpa2VseSBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2VhY2hfcmhhc2hfZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxOTU6c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxOTYtXHRcdFx0XHR2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTE2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzAtXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUzMTpcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZWFjaF9yaGFzaF9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUzMi1cdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIGxpbmVzIG9mIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgSGFzaHRhYmxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDMxOTAgdG8gMzI0MC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoaXMgc2VjdGlvbi4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gaG93IHRoaXMgc3BlY2lmaWMgcGFydCBvZiB0aGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uIG9wZXJhdGVzLiBJJiMzOTtsbCByZWFkIHRocm91Z2ggdGhlc2UgbGluZXMgY2FyZWZ1bGx5LCBsb29raW5nIGZvciBwYXR0ZXJucywgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVmaW5lcyBpdHMgYmVoYXZpb3IuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGF0dGVudGlvbiB0byBob3cgdGhlIG9wZXJhdGlvbnMgYWZmZWN0IG92ZXJhbGwgcGVyZm9ybWFuY2UgYXMgd2VsbC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gZWl0aGVyIGVsZW1lbnQgaW5zZXJ0aW9uLCByZXRyaWV2YWwsIG9yIGRlbGV0aW9uIHdpdGhpbiB0aGUgdGFibGUsIG9yIHBvc3NpYmx5IG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMgb2YgdGhlIGhhc2h0YWJsZS4gTXkgZ29hbCBpcyB0byBleHRyYWN0IHRoZSBjb3JlIGxvZ2ljIGJlaW5nIHBlcmZvcm1lZCBieSB0aGVzZSBsaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE5MDpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7OiBcJiMzNDspO1xuMzE5MTpcdFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkLCB2YWx1ZSwgbSk7XG4zMTkyOlx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbjMxOTM6XHR9XG4zMTk0Olx0XG4zMTk1Olx0c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbjMxOTY6XHRcdFx0XHRcdHZvaWQgKmNhbGxiYWNrX2N0eCwgdTY0IGZsYWdzKVxuMzE5NzpcdHtcbjMxOTg6XHRcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbjMxOTk6XHRcdHZvaWQgKnByZXZfa2V5ID0gTlVMTDtcbjMyMDA6XHRcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xuMzIwMTpcdFx0dTMyIHZpc2l0X2J1ZGdldDtcbjMyMDI6XHRcdHUzMiBudW1fZWxlbXMgPSAwO1xuMzIwMzpcdFx0dTY0IHJldCA9IDA7XG4zMjA0Olx0XG4zMjA1Olx0XHRjYW50X21pZ3JhdGUoKTtcbjMyMDY6XHRcbjMyMDc6XHRcdGlmIChmbGFncyAhPSAwKVxuMzIwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMyMDk6XHRcbjMyMTA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMyMTE6XHRcdC8qXG4zMjEyOlx0XHQgKiBCZXN0LWVmZm9ydCBpdGVyYXRpb246IGlmIHJoYXNodGFibGUgaXMgY29uY3VycmVudGx5IHJlc2l6ZWQgb3JcbjMyMTM6XHRcdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuMzIxNDpcdFx0ICogZWxlbWVudHMgdmlzaXRlZC5cbjMyMTU6XHRcdCAqL1xuMzIxNjpcdFx0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbjMyMTc6XHRcdHdoaWxlIChudW1fZWxlbXMgXHUwMDNjIHZpc2l0X2J1ZGdldCBcdTAwMjZcdTAwMjZcbjMyMTg6XHRcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbjMyMTk6XHRcdFx0aWYgKElTX0VSUihlbGVtKSlcbjMyMjA6XHRcdFx0XHRicmVhaztcbjMyMjE6XHRcdFx0bnVtX2VsZW1zJiM0MzsmIzQzOztcbjMyMjI6XHRcdFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsXG4zMjIzOlx0XHRcdFx0XHQgICh1NjQpKGxvbmcpZWxlbS1cdTAwM2VkYXRhLFxuMzIyNDpcdFx0XHRcdFx0ICAodTY0KShsb25nKXJodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKSxcbjMyMjU6XHRcdFx0XHRcdCAgKHU2NCkobG9uZyljYWxsYmFja19jdHgsIDApO1xuMzIyNjpcdFx0XHRpZiAocmV0KVxuMzIyNzpcdFx0XHRcdGJyZWFrO1xuMzIyODpcdFxuMzIyOTpcdFx0XHRwcmV2X2tleSA9IGVsZW0tXHUwMDNlZGF0YTtcdC8qIHZhbGlkIHdoaWxlIFJDVSBoZWxkICovXG4zMjMwOlx0XHR9XG4zMjMxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMyMzI6XHRcbjMyMzM6XHRcdHJldHVybiBudW1fZWxlbXM7XG4zMjM0Olx0fVxuMzIzNTpcdFxuMzIzNjpcdHN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuMzIzNzpcdHtcbjMyMzg6XHRcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbjMyMzk6XHRcdHU2NCBudW1fZW50cmllcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwMQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gc3RhYmlsaXppbmcgdGhlIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfTUFQX1RZUEVfUkhBU0hgIG1hcHMuIFRoZSBjb3JlIGNoYW5nZSBsaW1pdHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB2aXNpdGVkIGR1cmluZyBpdGVyYXRpb24gdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIChgYXRvbWljX3JlYWQoJmFtcDtyaHRhYi0mZ3Q7aHQubmVsZW1zKWApIGluIHRoZSByaGFzaHRhYmxlLiBQcmV2aW91c2x5LCB3ZSByaXNrZWQgaW5maW5pdGUgbG9vcHMgb3IgaW5lZmZpY2llbnQgaXRlcmF0aW9ucyBpZiB0aGVyZSB3ZXJlIGNvbmN1cnJlbnQgdXBkYXRlcyBoYXBwZW5pbmcgdG8gdGhlIG1hcC4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCBzdHJlc3MgdGVzdHMgdG8gdmFsaWRhdGUgdGhpcyBmaXguCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY3JlYXRlcyBhbnkgS01TQU4gY29uY2VybnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGRvZXNuJiMzOTt0ICpzZWVtKiBsaWtlIGl0IHdpbGwuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIEtNU0FOIGNyaXRlcmlhOiBhcmUgd2Ugc2VuZGluZyBvciBtb2RpZnlpbmcga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgZGF0YSBleHBvc2VkIHRvIHVzZXJzcGFjZT8gQXJlIHRoZXJlIGFueSBicmFuY2hlcyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gQXJlIG5ldyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IERvZXMgdGhlIHBhdGNoIG1lc3Mgd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIGdpdmUgcmVhZCBhY2Nlc3MgdG8gdW5pbml0YWxpemVkIGRhdGE/IElzIHRoZXJlIGFueSBraW5kIG9mIGluZm9ybWF0aW9uIGxlYWssIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBwYWRkaW5nIGlzc3Vlcz8KCk5vLiBgdmlzaXRfYnVkZ2V0YCBpcyByZWFkIGZyb20gdGhlIGBhdG9taWNfcmVhZCgpYCBmdW5jdGlvbiwgYW5kIGlzIGluaXRpYWxpemVkLiBgbnVtX2VsZW1zYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCYjMzk7cyBqdXN0IGEgbG9vcCBib3VuZCBjaGVjayB0byBwcmV2ZW50IHVuYm91bmRlZCBpdGVyYXRpb24uIEl0IGlzIGFsbCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgoKTGV0IG1lIGRvdWJsZS1jaGVjay4gSSBzZWUgdGhhdCBgdmlzaXRfYnVkZ2V0YCBpcyBhc3NpZ25lZCB1c2luZyBgYXRvbWljX3JlYWQoKWAsIGBudW1fZWxlbXNgIGlzIHNldCB0byB6ZXJvLCBhbmQgYHByZXZfa2V5YCBpcyBzZXQgdG8gTlVMTC4gVGhlIHJldHVybiB2YWx1ZSwgYG51bV9lbGVtc2AsIGlzIGFsc28gaW5pdGlhbGl6ZWQuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhcHBlYXJzIHRvIGJlIHJlYWQgb3IgZXhwb3NlZC4gQW55IGNvbmN1cnJlbmN5IG9yIFJDVSByZWxhdGVkIGlzc3VlcyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgdG9vbHMuIEkgYW0gbm90IHNlZWluZyBhbnkgaXNzdWVzLgoKT2theSwgbGV0IG1lIHB1dCB0aGlzIGludG8gYSBmb3JtYWwgYXJndW1lbnQ6CgoxLiAgKipQYXRjaCBGdW5jdGlvbjoqKiBUaGUgcGF0Y2ggYWRkcyBhIGB2aXNpdF9idWRnZXRgIGxpbWl0IHVzaW5nIGBhdG9taWNfcmVhZCgmYW1wO3JodGFiLSZndDtodC5uZWxlbXMpYCB0byBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgd2hlbiBpdGVyYXRpbmcgb3ZlciBlbGVtZW50cyBpbiBlQlBGIGBCUEZfTUFQX1RZUEVfUkhBU0hgLiBUaGlzIGlzIHRvIHByZXZlbnQgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG1vZGlmaWNhdGlvbnMsIGFuZCBpdCBpbmNsdWRlcyBhZGRlZCBzZWxmdGVzdHMgZm9yIHZhbGlkYXRpb24uCjIuICAqKktNU0FOIEFwcGxpY2FiaWxpdHk6KiogS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCAqb25seSogaW50cm9kdWNlcyBsb2NhbCB2YXJpYWJsZXMgKGB2aXNpdF9idWRnZXRgLCBgbnVtX2VsZW1zYCksIHRoYXQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBib3VuZHMtY2hlY2tlZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBjb3B5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLgozLiAgKipLQVNBTi9TdGFuZGFyZCBUb29scyBBcHBsaWNhYmlsaXR5OioqIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBjb25jdXJyZW5jeSwgUkNVIG9iamVjdCBsaWZldGltZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1cmluZyByaGFzaHRhYmxlIHRyYXZlcnNhbCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGNvbmZpZ3VyYXRpb25zLgo0LiAgKipDb25jbHVzaW9uOioqIFRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIExldCYjMzk7cyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGJ5IGJvdW5kaW5nIHRoZSBpdGVyYXRpb24gbG9vcCB3aXRoIGEgYHZpc2l0X2J1ZGdldGAgZGVyaXZlZCBmcm9tIGBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzIGFyZSBleHBvc2VkIG9yIGNoZWNrZWQuXG4zLiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgY29uY2VybnMgaW52b2x2aW5nIFJDVS1wcm90ZWN0ZWQgcmhhc2h0YWJsZSBlbGVtZW50cyBhcmUgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMb2NrZGVwIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGJ5IGJvdW5kaW5nIHRoZSBpdGVyYXRpb24gbG9vcCB3aXRoIGEgYHZpc2l0X2J1ZGdldGAgZGVyaXZlZCBmcm9tIGBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzIGFyZSBleHBvc2VkIG9yIGNoZWNrZWQuXG4zLiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgY29uY2VybnMgaW52b2x2aW5nIFJDVS1wcm90ZWN0ZWQgcmhhc2h0YWJsZSBlbGVtZW50cyBhcmUgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMb2NrZGVwIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjMzOjUxLjg1MTExOTA3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODI2MDM2Mzg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9mb3JfZWFjaF9tYXBfZWxlbVwiLFxuICAgIFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBieSBib3VuZGluZyB0aGUgaXRlcmF0aW9uIGxvb3Agd2l0aCBhIGB2aXNpdF9idWRnZXRgIGRlcml2ZWQgZnJvbSBgYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcyBhcmUgZXhwb3NlZCBvciBjaGVja2VkLlxcbjMuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBjb25jZXJucyBpbnZvbHZpbmcgUkNVLXByb3RlY3RlZCByaGFzaHRhYmxlIGVsZW1lbnRzIGFyZSBhZGRyZXNzZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExvY2tkZXAgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfZWFjaF9yaGFzaF9lbGVtKClgIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdG8gZW5mb3JjZSBhbiBpdGVyYXRpb24gYnVkZ2V0IGJhc2VkIG9uIGF0b21pYyBgbmVsZW1zYCB3aGVuIGl0ZXJhdGluZyBvdmVyIGBCUEZfTUFQX1RZUEVfUkhBU0hgIG1hcHMgdmlhIGBicGZfZm9yX2VhY2hfbWFwX2VsZW0oKWAuIFRoaXMgYm91bmRzIHRoZSBpdGVyYXRpb24gbG9vcCBhbmQgcHJldmVudHMgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG9wZXJhdGlvbnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozMzo1MS44NTExMzM1ODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTMzMDkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTc6MzM6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLjJjYWQ2N2M5MDE1NDMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC0zMTk4LDcgKzMxOTgsOCBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbiBcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuIFxcdHZvaWQgKnByZXZfa2V5ID0gTlVMTDtcXG4gXFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW07XFxuLVxcdGludCBudW1fZWxlbXMgPSAwO1xcbitcXHR1MzIgdmlzaXRfYnVkZ2V0O1xcbitcXHR1MzIgbnVtX2VsZW1zID0gMDtcXG4gXFx0dTY0IHJldCA9IDA7XFxuIFxcbiBcXHRjYW50X21pZ3JhdGUoKTtcXG5AQCAtMzIxMiw3ICszMjEzLDkgQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcXG4gXFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuIFxcdCAqIGVsZW1lbnRzIHZpc2l0ZWQuXFxuIFxcdCAqL1xcbi1cXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcXG4rXFx0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpO1xcbitcXHR3aGlsZSAobnVtX2VsZW1zIFxcdTAwM2MgdmlzaXRfYnVkZ2V0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgcHJldl9rZXkpKSkge1xcbiBcXHRcXHRpZiAoSVNfRVJSKGVsZW0pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0bnVtX2VsZW1zKys7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXFxuaW5kZXggOThiYjY2OTA3YjdmNy4uZjFhMGE4ZTNmYzFhYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xcbkBAIC0zLDEyICszLDE2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRhdG9taWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInJoYXNoLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJwZl9pdGVyX2JwZl9yaGFzaF9tYXAuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiBcXG4rI2RlZmluZSBSSEFTSF9TVFJFU1NfRFVSQVRJT05fTlNcXHQoM1VMTCAqIDEwMDAwMDAwMDBVTEwpXFxuK1xcbiBzdGF0aWMgdm9pZCByaGFzaF9ydW4oY29uc3QgY2hhciAqcHJvZ19uYW1lKVxcbiB7XFxuIFxcdHN0cnVjdCByaGFzaCAqc2tlbDtcXG5AQCAtNTMsNiArNTcsMTEyIEBAIHN0YXRpYyBpbnQgcmhhc2hfbWFwX2NyZWF0ZShfX3UzMiBtYXhfZW50cmllcywgX191NjQgbWFwX2V4dHJhKVxcbiBcXHRcXHRcXHQgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgXFx1MDAyNm9wdHMpO1xcbiB9XFxuIFxcbitzdHJ1Y3Qgcmhhc2hfc3RyZXNzX2FyZyB7XFxuK1xcdGludCBtYXBfZmQ7XFxuK1xcdGF0b21pY19ib29sICpzdG9wO1xcbitcXHRfX3UzMiBucl9rZXlzO1xcbitcXHRfX3UzMiBzZWVkO1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgKnJoYXNoX3N0cmVzc191cGRhdGUodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3Qgcmhhc2hfc3RyZXNzX2FyZyAqYXJnID0gZGF0YTtcXG4rXFx0X191NjQgdmFsdWUgPSAwO1xcbitcXHRfX3UzMiBrZXk7XFxuK1xcdF9fdTMyIGk7XFxuK1xcbitcXHR3aGlsZSAoIWF0b21pY19sb2FkKGFyZy1cXHUwMDNlc3RvcCkpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZy1cXHUwMDNlbnJfa2V5cyBcXHUwMDI2XFx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVxcdTAwM2VzdG9wKTsgaSsrKSB7XFxuK1xcdFxcdFxcdGtleSA9ICgoX191MzIpaSAqIDI2NTQ0MzU3NjFVICsgYXJnLVxcdTAwM2VzZWVkKSAlIGFyZy1cXHUwMDNlbnJfa2V5cztcXG4rXFx0XFx0XFx0YnBmX21hcF91cGRhdGVfZWxlbShhcmctXFx1MDAzZW1hcF9mZCwgXFx1MDAyNmtleSwgXFx1MDAyNnZhbHVlLCBCUEZfQU5ZKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXJnLVxcdTAwM2Vucl9rZXlzIFxcdTAwMjZcXHUwMDI2ICFhdG9taWNfbG9hZChhcmctXFx1MDAzZXN0b3ApOyBpKyspIHtcXG4rXFx0XFx0XFx0a2V5ID0gKChfX3UzMilpICogMjY1NDQzNTc2MVUgKyBhcmctXFx1MDAzZXNlZWQpICUgYXJnLVxcdTAwM2Vucl9rZXlzO1xcbitcXHRcXHRcXHRicGZfbWFwX2RlbGV0ZV9lbGVtKGFyZy1cXHUwMDNlbWFwX2ZkLCBcXHUwMDI2a2V5KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmhhc2hfaXRlcl9zdHJlc3Modm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgcmhhc2ggKnNrZWwgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgcmhhc2hfc3RyZXNzX2FyZyBhcmdzWzJdO1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdGF0b21pY19ib29sIHN0b3AgPSBmYWxzZTtcXG4rXFx0Ym9vbCByYW4gPSBmYWxzZTtcXG4rXFx0X191NjQgc3RhcnQ7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWRzWzJdO1xcbitcXHRib29sIGNyZWF0ZWRbMl0gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xcbitcXHRpbnQgbnJfY3B1cztcXG4rXFx0X191MzIgd29ya2luZ19zZXQ7XFxuK1xcdGludCBtYXBfZmQsIGVyciwgaTtcXG4rXFxuK1xcdG5yX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QobnJfY3B1cywgMCwgXFxcIm51bV9wb3NzaWJsZV9jcHVzXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKG5yX2NwdXMgXFx1MDAzYyAyKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gcmhhc2hfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJyaGFzaF9fb3BlbiBzdHJlc3NcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR3b3JraW5nX3NldCA9IHNrZWwtXFx1MDAzZXJvZGF0YS1cXHUwMDNlc3RyZXNzX3dvcmtpbmdfc2V0O1xcbitcXG4rXFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNrZWwtXFx1MDAzZW9iaixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcInRlc3Rfcmhhc2hfaXRlcl9zdHJlc3NcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHByb2csIFxcXCJmaW5kIHN0cmVzcyBwcm9ncmFtXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0YnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChwcm9nLCB0cnVlKTtcXG4rXFxuK1xcdGVyciA9IHJoYXNoX19sb2FkKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzdHJlc3Mgc2tlbF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXFx1MDAzZW1hcHMuc3RyZXNzX3JobWFwKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGhyZWFkcyk7IGkrKykge1xcbitcXHRcXHRhcmdzW2ldLm1hcF9mZCA9IG1hcF9mZDtcXG4rXFx0XFx0YXJnc1tpXS5zdG9wID0gXFx1MDAyNnN0b3A7XFxuK1xcdFxcdGFyZ3NbaV0ubnJfa2V5cyA9IHdvcmtpbmdfc2V0O1xcbitcXHRcXHRhcmdzW2ldLnNlZWQgPSBpICogOTc3O1xcbitcXHRcXHRlcnIgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2YXJnc1tpXSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInB0aHJlYWRfY3JlYXRlXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gc3RvcF90aHJlYWRzO1xcbitcXHRcXHRjcmVhdGVkW2ldID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0c3RhcnQgPSBnZXRfdGltZV9ucygpO1xcbitcXHR3aGlsZSAoZ2V0X3RpbWVfbnMoKSAtIHN0YXJ0IFxcdTAwM2MgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7XFxuK1xcdFxcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcXHUwMDI2b3B0cyk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInN0cmVzcyBwcm9nIHJ1blxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIHN0b3BfdGhyZWFkcztcXG4rXFx0XFx0cmFuID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rc3RvcF90aHJlYWRzOlxcbitcXHRhdG9taWNfc3RvcmUoXFx1MDAyNnN0b3AsIHRydWUpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0aHJlYWRzKTsgaSsrKVxcbitcXHRcXHRpZiAoY3JlYXRlZFtpXSlcXG4rXFx0XFx0XFx0cHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpO1xcbitcXG4rXFx0aWYgKGVyciB8fCAhcmFuKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRBU1NFUlRfR1Qoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJlc3NfbWF4X3Zpc2l0cywgMCwgXFxcInN0cmVzcyBjYWxsYmFjayB2aXNpdHNcXFwiKTtcXG4rXFx0QVNTRVJUX0dUKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc3RyZXNzX2Z1bGxfd2Fsa3MsIDAsIFxcXCJzdHJlc3MgZnVsbCB3YWxrc1xcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJlc3Nfb3ZlcnJ1bnMsIDAsIFxcXCJzdHJlc3MgY2FsbGJhY2sgYm91bmRcXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCJzdHJlc3MgbWF4IGNhbGxiYWNrIHZpc2l0czogJWxsdSAobGltaXQgJXUpXFxcXG5cXFwiLFxcbitcXHQgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cmVzc19tYXhfdmlzaXRzLFxcbitcXHQgICAgICAgd29ya2luZ19zZXQpO1xcbitjbGVhbnVwOlxcbitcXHRyaGFzaF9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcmhhc2hfbWFwX2V4dHJhX3ByZXNpemUodm9pZClcXG4ge1xcbiBcXHRjb25zdCBfX3UzMiBtYXhfZW50cmllcyA9IDEwMjQ7XFxuQEAgLTE4MCw0ICsyOTAsNyBAQCB2b2lkIHRlc3Rfcmhhc2godm9pZClcXG4gXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ0ZXN0X3JoYXNoX2l0ZXJcXFwiKSlcXG4gXFx0XFx0cmhhc2hfaXRlcl90ZXN0KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidGVzdF9yaGFzaF9pdGVyX3N0cmVzc1xcXCIpKVxcbitcXHRcXHRyaGFzaF9pdGVyX3N0cmVzcygpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmNcXG5pbmRleCBmYzJkYWMzYTcxOWU5Li4zZDcyMDE0MzBiYWJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmNcXG5AQCAtOSwxMSArOSwxOCBAQFxcbiBcXG4gI2RlZmluZSBFTk9FTlQgMlxcbiAjZGVmaW5lIEVFWElTVCAxN1xcbisjZGVmaW5lIFJIQVNIX1NUUkVTU19NQVhfRU5UUklFUyAoMVUgXFx1MDAzY1xcdTAwM2MgMjApXFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gXFxuIGludCBlcnI7XFxuIFxcbitjb25zdCB2b2xhdGlsZSBfX3UzMiBzdHJlc3Nfd29ya2luZ19zZXQgPSA0MDk2O1xcbitcXG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX21heF92aXNpdHM7XFxuK3ZvbGF0aWxlIF9fdTY0IHN0cmVzc19vdmVycnVucztcXG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7XFxuK1xcbiBzdHJ1Y3QgZWxlbSB7XFxuIFxcdGNoYXIgYXJyWzEyOF07XFxuIFxcdGludCB2YWw7XFxuQEAgLTI3LDYgKzM0LDIwIEBAIHN0cnVjdCB7XFxuIFxcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGVsZW0pO1xcbiB9IHJobWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTKTtcXG4rXFx0X190eXBlKGtleSwgX191MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG4rfSBzdHJlc3NfcmhtYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rc3RhdGljIF9fdTY0IHN0cmVzc19pdGVyX2NiKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXFxuK1xcdFxcdFxcdCAgICB2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIGludCB0ZXN0X3JoYXNoX2xvb2t1cF91cGRhdGUodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTI0NiwzICsyNjcsMjMgQEAgaW50IHRlc3Rfcmhhc2hfZGVsZXRlX25vbmV4aXN0ZW50KHZvaWQgKmN0eClcXG4gXFx0ZXJyID0gMDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCB0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzKHZvaWQgKmN0eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBDb25jdXJyZW50IHJlaGFzaCBtYXkgcHJvZHVjZSBkdXBsaWNhdGUgdmlzaXRzLiBDaGVjayB0aGF0IHRoZVxcbitcXHQgKiBoZWxwZXIgc3RpbGwgZ2l2ZXMgb25lIHdhbGsgYSBmaW5pdGUgY2FsbGJhY2sgYm91bmQ7IG5vIHNuYXBzaG90XFxuK1xcdCAqIG9yIHVuaXF1ZS12aXNpdCBndWFyYW50ZWUgaXMgZXhwZWN0ZWQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdGxvbmcgdmlzaXRzO1xcbitcXG4rXFx0dmlzaXRzID0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtKFxcdTAwMjZzdHJlc3NfcmhtYXAsIHN0cmVzc19pdGVyX2NiLCBOVUxMLCAwKTtcXG4rXFx0aWYgKHZpc2l0cyBcXHUwMDNlIHN0cmVzc19tYXhfdmlzaXRzKVxcbitcXHRcXHRzdHJlc3NfbWF4X3Zpc2l0cyA9IHZpc2l0cztcXG4rXFx0aWYgKHZpc2l0cyBcXHUwMDNlIHN0cmVzc193b3JraW5nX3NldClcXG4rXFx0XFx0c3RyZXNzX292ZXJydW5zKys7XFxuK1xcdGlmICh2aXNpdHMgPT0gc3RyZXNzX3dvcmtpbmdfc2V0KVxcbitcXHRcXHRzdHJlc3NfZnVsbF93YWxrcysrO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozMzo1Mi4yNzI5NzA4OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjcxODA0NDA4NTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9mb3JfZWFjaF9tYXBfZWxlbVwiLFxuICAgIFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfZWFjaF9yaGFzaF9lbGVtKClgIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdG8gZW5mb3JjZSBhbiBpdGVyYXRpb24gYnVkZ2V0IGJhc2VkIG9uIGF0b21pYyBgbmVsZW1zYCB3aGVuIGl0ZXJhdGluZyBvdmVyIGBCUEZfTUFQX1RZUEVfUkhBU0hgIG1hcHMgdmlhIGBicGZfZm9yX2VhY2hfbWFwX2VsZW0oKWAuIFRoaXMgYm91bmRzIHRoZSBpdGVyYXRpb24gbG9vcCBhbmQgcHJldmVudHMgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG9wZXJhdGlvbnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDQ0MDMwOTkxYzYxNzVmNzNmZDQxODcyMzU0NjIwN2EwMjU5OGU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTc6MzM6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCBkNDBjYjVkZDQ0NmNhLi4yY2FkNjdjOTAxNTQzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbisrKyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMzE5OCw3ICszMTk4LDggQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbiBcdHZvaWQgKnByZXZfa2V5ID0gTlVMTDtcbiBcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xuLVx0aW50IG51bV9lbGVtcyA9IDA7XG4rXHR1MzIgdmlzaXRfYnVkZ2V0O1xuK1x0dTMyIG51bV9lbGVtcyA9IDA7XG4gXHR1NjQgcmV0ID0gMDtcbiBcbiBcdGNhbnRfbWlncmF0ZSgpO1xuQEAgLTMyMTIsNyArMzIxMyw5IEBAIHN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXG4gXHQgKiBlbGVtZW50cyBhcmUgZGVsZXRlZC9pbnNlcnRlZCwgdGhlcmUgbWF5IGJlIG1pc3NlZCBvciBkdXBsaWNhdGVcbiBcdCAqIGVsZW1lbnRzIHZpc2l0ZWQuXG4gXHQgKi9cbi1cdHdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbitcdHZpc2l0X2J1ZGdldCA9IGF0b21pY19yZWFkKFx1MDAyNnJodGFiLVx1MDAzZWh0Lm5lbGVtcyk7XG4rXHR3aGlsZSAobnVtX2VsZW1zIFx1MDAzYyB2aXNpdF9idWRnZXQgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBwcmV2X2tleSkpKSB7XG4gXHRcdGlmIChJU19FUlIoZWxlbSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdG51bV9lbGVtcysrO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXG5pbmRleCA5OGJiNjY5MDdiN2Y3Li5mMWEwYThlM2ZjMWFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xuQEAgLTMsMTIgKzMsMTYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRhdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFwicmhhc2guc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9pdGVyX2JwZl9yaGFzaF9tYXAuc2tlbC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiBcbisjZGVmaW5lIFJIQVNIX1NUUkVTU19EVVJBVElPTl9OU1x0KDNVTEwgKiAxMDAwMDAwMDAwVUxMKVxuK1xuIHN0YXRpYyB2b2lkIHJoYXNoX3J1bihjb25zdCBjaGFyICpwcm9nX25hbWUpXG4ge1xuIFx0c3RydWN0IHJoYXNoICpza2VsO1xuQEAgLTUzLDYgKzU3LDExMiBAQCBzdGF0aWMgaW50IHJoYXNoX21hcF9jcmVhdGUoX191MzIgbWF4X2VudHJpZXMsIF9fdTY0IG1hcF9leHRyYSlcbiBcdFx0XHQgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgXHUwMDI2b3B0cyk7XG4gfVxuIFxuK3N0cnVjdCByaGFzaF9zdHJlc3NfYXJnIHtcbitcdGludCBtYXBfZmQ7XG4rXHRhdG9taWNfYm9vbCAqc3RvcDtcbitcdF9fdTMyIG5yX2tleXM7XG4rXHRfX3UzMiBzZWVkO1xuK307XG4rXG4rc3RhdGljIHZvaWQgKnJoYXNoX3N0cmVzc191cGRhdGUodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3Qgcmhhc2hfc3RyZXNzX2FyZyAqYXJnID0gZGF0YTtcbitcdF9fdTY0IHZhbHVlID0gMDtcbitcdF9fdTMyIGtleTtcbitcdF9fdTMyIGk7XG4rXG4rXHR3aGlsZSAoIWF0b21pY19sb2FkKGFyZy1cdTAwM2VzdG9wKSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmctXHUwMDNlbnJfa2V5cyBcdTAwMjZcdTAwMjYgIWF0b21pY19sb2FkKGFyZy1cdTAwM2VzdG9wKTsgaSsrKSB7XG4rXHRcdFx0a2V5ID0gKChfX3UzMilpICogMjY1NDQzNTc2MVUgKyBhcmctXHUwMDNlc2VlZCkgJSBhcmctXHUwMDNlbnJfa2V5cztcbitcdFx0XHRicGZfbWFwX3VwZGF0ZV9lbGVtKGFyZy1cdTAwM2VtYXBfZmQsIFx1MDAyNmtleSwgXHUwMDI2dmFsdWUsIEJQRl9BTlkpO1xuK1x0XHR9XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZy1cdTAwM2Vucl9rZXlzIFx1MDAyNlx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApOyBpKyspIHtcbitcdFx0XHRrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSArIGFyZy1cdTAwM2VzZWVkKSAlIGFyZy1cdTAwM2Vucl9rZXlzO1xuK1x0XHRcdGJwZl9tYXBfZGVsZXRlX2VsZW0oYXJnLVx1MDAzZW1hcF9mZCwgXHUwMDI2a2V5KTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJoYXNoX2l0ZXJfc3RyZXNzKHZvaWQpXG4re1xuK1x0c3RydWN0IHJoYXNoICpza2VsID0gTlVMTDtcbitcdHN0cnVjdCByaGFzaF9zdHJlc3NfYXJnIGFyZ3NbMl07XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRhdG9taWNfYm9vbCBzdG9wID0gZmFsc2U7XG4rXHRib29sIHJhbiA9IGZhbHNlO1xuK1x0X191NjQgc3RhcnQ7XG4rXHRwdGhyZWFkX3QgdGhyZWFkc1syXTtcbitcdGJvb2wgY3JlYXRlZFsyXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xuK1x0aW50IG5yX2NwdXM7XG4rXHRfX3UzMiB3b3JraW5nX3NldDtcbitcdGludCBtYXBfZmQsIGVyciwgaTtcbitcbitcdG5yX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbitcdGlmICghQVNTRVJUX0dUKG5yX2NwdXMsIDAsIFwibnVtX3Bvc3NpYmxlX2NwdXNcIikpXG4rXHRcdHJldHVybjtcbitcdGlmIChucl9jcHVzIFx1MDAzYyAyKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tlbCA9IHJoYXNoX19vcGVuKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJyaGFzaF9fb3BlbiBzdHJlc3NcIikpXG4rXHRcdHJldHVybjtcbitcdHdvcmtpbmdfc2V0ID0gc2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlc3RyZXNzX3dvcmtpbmdfc2V0O1xuK1xuK1x0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNrZWwtXHUwMDNlb2JqLFxuK1x0XHRcdFx0XHRcdFwidGVzdF9yaGFzaF9pdGVyX3N0cmVzc1wiKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihwcm9nLCBcImZpbmQgc3RyZXNzIHByb2dyYW1cIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQocHJvZywgdHJ1ZSk7XG4rXG4rXHRlcnIgPSByaGFzaF9fbG9hZChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzdHJlc3Mgc2tlbF9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuc3RyZXNzX3JobWFwKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGhyZWFkcyk7IGkrKykge1xuK1x0XHRhcmdzW2ldLm1hcF9mZCA9IG1hcF9mZDtcbitcdFx0YXJnc1tpXS5zdG9wID0gXHUwMDI2c3RvcDtcbitcdFx0YXJnc1tpXS5ucl9rZXlzID0gd29ya2luZ19zZXQ7XG4rXHRcdGFyZ3NbaV0uc2VlZCA9IGkgKiA5Nzc7XG4rXHRcdGVyciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIHJoYXNoX3N0cmVzc191cGRhdGUsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmFyZ3NbaV0pO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicHRocmVhZF9jcmVhdGVcIikpXG4rXHRcdFx0Z290byBzdG9wX3RocmVhZHM7XG4rXHRcdGNyZWF0ZWRbaV0gPSB0cnVlO1xuK1x0fVxuK1xuK1x0c3RhcnQgPSBnZXRfdGltZV9ucygpO1xuK1x0d2hpbGUgKGdldF90aW1lX25zKCkgLSBzdGFydCBcdTAwM2MgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7XG4rXHRcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcdTAwMjZvcHRzKTtcbitcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcInN0cmVzcyBwcm9nIHJ1blwiKSlcbitcdFx0XHRnb3RvIHN0b3BfdGhyZWFkcztcbitcdFx0cmFuID0gdHJ1ZTtcbitcdH1cbitcbitzdG9wX3RocmVhZHM6XG4rXHRhdG9taWNfc3RvcmUoXHUwMDI2c3RvcCwgdHJ1ZSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRocmVhZHMpOyBpKyspXG4rXHRcdGlmIChjcmVhdGVkW2ldKVxuK1x0XHRcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbitcbitcdGlmIChlcnIgfHwgIXJhbilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cmVzc19tYXhfdmlzaXRzLCAwLCBcInN0cmVzcyBjYWxsYmFjayB2aXNpdHNcIik7XG4rXHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX2Z1bGxfd2Fsa3MsIDAsIFwic3RyZXNzIGZ1bGwgd2Fsa3NcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX292ZXJydW5zLCAwLCBcInN0cmVzcyBjYWxsYmFjayBib3VuZFwiKTtcbitcdHByaW50ZihcInN0cmVzcyBtYXggY2FsbGJhY2sgdmlzaXRzOiAlbGx1IChsaW1pdCAldSlcXG5cIixcbitcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cmVzc19tYXhfdmlzaXRzLFxuK1x0ICAgICAgIHdvcmtpbmdfc2V0KTtcbitjbGVhbnVwOlxuK1x0cmhhc2hfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJoYXNoX21hcF9leHRyYV9wcmVzaXplKHZvaWQpXG4ge1xuIFx0Y29uc3QgX191MzIgbWF4X2VudHJpZXMgPSAxMDI0O1xuQEAgLTE4MCw0ICsyOTAsNyBAQCB2b2lkIHRlc3Rfcmhhc2godm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGVzdF9yaGFzaF9pdGVyXCIpKVxuIFx0XHRyaGFzaF9pdGVyX3Rlc3QoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGVzdF9yaGFzaF9pdGVyX3N0cmVzc1wiKSlcbitcdFx0cmhhc2hfaXRlcl9zdHJlc3MoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY1xuaW5kZXggZmMyZGFjM2E3MTllOS4uM2Q3MjAxNDMwYmFiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY1xuQEAgLTksMTEgKzksMTggQEBcbiBcbiAjZGVmaW5lIEVOT0VOVCAyXG4gI2RlZmluZSBFRVhJU1QgMTdcbisjZGVmaW5lIFJIQVNIX1NUUkVTU19NQVhfRU5UUklFUyAoMVUgXHUwMDNjXHUwMDNjIDIwKVxuIFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiBcbiBpbnQgZXJyO1xuIFxuK2NvbnN0IHZvbGF0aWxlIF9fdTMyIHN0cmVzc193b3JraW5nX3NldCA9IDQwOTY7XG4rXG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX21heF92aXNpdHM7XG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX292ZXJydW5zO1xuK3ZvbGF0aWxlIF9fdTY0IHN0cmVzc19mdWxsX3dhbGtzO1xuK1xuIHN0cnVjdCBlbGVtIHtcbiBcdGNoYXIgYXJyWzEyOF07XG4gXHRpbnQgdmFsO1xuQEAgLTI3LDYgKzM0LDIwIEBAIHN0cnVjdCB7XG4gXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBlbGVtKTtcbiB9IHJobWFwIFNFQyhcIi5tYXBzXCIpO1xuIFxuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdWludChtYXhfZW50cmllcywgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTKTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuK30gc3RyZXNzX3JobWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBfX3U2NCBzdHJlc3NfaXRlcl9jYihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLFxuK1x0XHRcdCAgICB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcInN5c2NhbGxcIilcbiBpbnQgdGVzdF9yaGFzaF9sb29rdXBfdXBkYXRlKHZvaWQgKmN0eClcbiB7XG5AQCAtMjQ2LDMgKzI2NywyMyBAQCBpbnQgdGVzdF9yaGFzaF9kZWxldGVfbm9uZXhpc3RlbnQodm9pZCAqY3R4KVxuIFx0ZXJyID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IHRlc3Rfcmhhc2hfaXRlcl9zdHJlc3Modm9pZCAqY3R4KVxuK3tcbitcdC8qXG4rXHQgKiBDb25jdXJyZW50IHJlaGFzaCBtYXkgcHJvZHVjZSBkdXBsaWNhdGUgdmlzaXRzLiBDaGVjayB0aGF0IHRoZVxuK1x0ICogaGVscGVyIHN0aWxsIGdpdmVzIG9uZSB3YWxrIGEgZmluaXRlIGNhbGxiYWNrIGJvdW5kOyBubyBzbmFwc2hvdFxuK1x0ICogb3IgdW5pcXVlLXZpc2l0IGd1YXJhbnRlZSBpcyBleHBlY3RlZCBoZXJlLlxuK1x0ICovXG4rXHRsb25nIHZpc2l0cztcbitcbitcdHZpc2l0cyA9IGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZzdHJlc3NfcmhtYXAsIHN0cmVzc19pdGVyX2NiLCBOVUxMLCAwKTtcbitcdGlmICh2aXNpdHMgXHUwMDNlIHN0cmVzc19tYXhfdmlzaXRzKVxuK1x0XHRzdHJlc3NfbWF4X3Zpc2l0cyA9IHZpc2l0cztcbitcdGlmICh2aXNpdHMgXHUwMDNlIHN0cmVzc193b3JraW5nX3NldClcbitcdFx0c3RyZXNzX292ZXJydW5zKys7XG4rXHRpZiAodmlzaXRzID09IHN0cmVzc193b3JraW5nX3NldClcbitcdFx0c3RyZXNzX2Z1bGxfd2Fsa3MrKztcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjMzOjUyLjI3Mjk3MjM3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODIzNDYwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEhhc2h0YWJsZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgYW5kIHRoZXJlIGFyZSBzb21lIGFzc29jaWF0ZWQgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYC5cblxuRm9jdXNpbmcgb24gdGhlIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgY2hhbmdlLCBhdCBhIGdsYW5jZSwgSSBzZWUgdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiB0aGUgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uLiAgSXQgbG9va3MgbGlrZSBhIGB2aXNpdF9idWRnZXRgIHZhcmlhYmxlIGhhcyBiZWVuIGludHJvZHVjZWQsIGFuZCB0aGUgbG9vcCBjb25kaXRpb24gaXMgYmVpbmcgYWRqdXN0ZWQuIFNwZWNpZmljYWxseSwgdGhlIG9sZCBgd2hpbGVgIGxvb3AgY29uZGl0aW9uIGhhcyBiZWVuIGV4cGFuZGVkIHRvIG5vdyBpbmNsdWRlIGEgYG51bV9lbGVtcyBcdTAwM2MgdmlzaXRfYnVkZ2V0YCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoaXMgaW50cm9kdWNlcyBzb21lIGtpbmQgb2YgaXRlcmF0aW9uIGxpbWl0LCBwb3NzaWJseSB0byBwcmV2ZW50IHVuYm91bmRlZCBsb29wcyBvciB0byBpbnRyb2R1Y2UgZmFpcm5lc3MuIExldCdzIGRpZyBkZWVwZXIuIFRvIGNvbmZpcm0gbXkgaW5pdGlhbCB0aG91Z2h0cywgSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMzE5OCBvZiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgcHJvbXB0ZWQgdGhlIGNoYW5nZSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNDoxMy4wOTY0MzUzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTkwOlxcdFxcdHNlcV9wdXRzKG0sIFxcXCI6IFxcXCIpO1xcbjMxOTE6XFx0XFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQsIHZhbHVlLCBtKTtcXG4zMTkyOlxcdFxcdHNlcV9wdXRjKG0sICdcXFxcbicpO1xcbjMxOTM6XFx0fVxcbjMxOTQ6XFx0XFxuMzE5NTpcXHRzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbjMxOTY6XFx0XFx0XFx0XFx0XFx0dm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpXFxuMzE5NzpcXHR7XFxuMzE5ODpcXHRcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuMzE5OTpcXHRcXHR2b2lkICpwcmV2X2tleSA9IE5VTEw7XFxuMzIwMDpcXHRcXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcXG4zMjAxOlxcdFxcdHUzMiB2aXNpdF9idWRnZXQ7XFxuMzIwMjpcXHRcXHR1MzIgbnVtX2VsZW1zID0gMDtcXG4zMjAzOlxcdFxcdHU2NCByZXQgPSAwO1xcbjMyMDQ6XFx0XFxuMzIwNTpcXHRcXHRjYW50X21pZ3JhdGUoKTtcXG4zMjA2OlxcdFxcbjMyMDc6XFx0XFx0aWYgKGZsYWdzICE9IDApXFxuMzIwODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMjA5OlxcdFxcbjMyMTA6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjMyMTE6XFx0XFx0LypcXG4zMjEyOlxcdFxcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxcbjMyMTM6XFx0XFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuMzIxNDpcXHRcXHQgKiBlbGVtZW50cyB2aXNpdGVkLlxcbjMyMTU6XFx0XFx0ICovXFxuMzIxNjpcXHRcXHR2aXNpdF9idWRnZXQgPSBhdG9taWNfcmVhZChcXHUwMDI2cmh0YWItXFx1MDAzZWh0Lm5lbGVtcyk7XFxuMzIxNzpcXHRcXHR3aGlsZSAobnVtX2VsZW1zIFxcdTAwM2MgdmlzaXRfYnVkZ2V0IFxcdTAwMjZcXHUwMDI2XFxuMzIxODpcXHRcXHQgICAgICAgKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcXG4zMjE5OlxcdFxcdFxcdGlmIChJU19FUlIoZWxlbSkpXFxuMzIyMDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMjIxOlxcdFxcdFxcdG51bV9lbGVtcysrO1xcbjMyMjI6XFx0XFx0XFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsXFxuMzIyMzpcXHRcXHRcXHRcXHRcXHQgICh1NjQpKGxvbmcpZWxlbS1cXHUwMDNlZGF0YSxcXG4zMjI0OlxcdFxcdFxcdFxcdFxcdCAgKHU2NCkobG9uZylyaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpLFxcbjMyMjU6XFx0XFx0XFx0XFx0XFx0ICAodTY0KShsb25nKWNhbGxiYWNrX2N0eCwgMCk7XFxuMzIyNjpcXHRcXHRcXHRpZiAocmV0KVxcbjMyMjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzIyODpcXHRcXG4zMjI5OlxcdFxcdFxcdHByZXZfa2V5ID0gZWxlbS1cXHUwMDNlZGF0YTtcXHQvKiB2YWxpZCB3aGlsZSBSQ1UgaGVsZCAqL1xcbjMyMzA6XFx0XFx0fVxcbjMyMzE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzIzMjpcXHRcXG4zMjMzOlxcdFxcdHJldHVybiBudW1fZWxlbXM7XFxuMzIzNDpcXHR9XFxuMzIzNTpcXHRcXG4zMjM2OlxcdHN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbjMyMzc6XFx0e1xcbjMyMzg6XFx0XFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbjMyMzk6XFx0XFx0dTY0IG51bV9lbnRyaWVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNDoxMy4wOTY1NzIzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NjUzMDE4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGVtcGxveWVkLiBNeSBndXQgdGVsbHMgbWUgaXQncyBjZW50cmFsIHRvIHNvbWV0aGluZywgbGlrZWx5IHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRocm91Z2ggZWxlbWVudHMgd2l0aGluIGEgcmFkaXggaGFzaCB0YWJsZSwgYnV0IGxldCdzIG5vdCBhc3N1bWUuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29kZWJhc2UncyB1c2FnZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBicm9hZCBhcHByb2FjaC4gSSdsbCBleGVjdXRlIGEgcXVpY2sgZ3JlcCB0byBzZWFyY2ggZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIHRoZSBzdHJpbmcgYGJwZl9lYWNoX3JoYXNoX2VsZW1gLiBJJ2xsIGFsc28gZXhwYW5kIHRoZSBzY29wZSBvZiBteSBzZWFyY2guIEknbGwgdXNlIHJlbGF0ZWQgdGVybXMuIFRoaW5ncyBsaWtlIGByaHRhYl9tYXBfb3BzYCwgYmVjYXVzZSBJIHN1c3BlY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgYSBtYXAgaW1wbGVtZW50YXRpb24gYW5kIG1heSBiZSBhY2Nlc3NlZCB2aWEgdGhlIG1hcCBvcGVyYXRpb25zLiBCcm9hZCBzdHJva2VzIGZpcnN0LCB0aGVuIEkgY2FuIGRyaWxsIGRvd24gaWYgbmVlZGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZnVuY3Rpb24ncyBjb250ZXh0IGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBnZXQgdGhhdCBzZWFyY2ggcnVubmluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MzQ6MTcuNTYxODc3NDQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTk0MjgyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTc4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTk1OnN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5Ni1cXHRcXHRcXHRcXHR2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MTY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMwLVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUzMTpcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMyLVxcdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MzQ6MTkuMTgxMzExNjY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc2Mjg0NTczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgQlBGIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IHNlZXMgYSBmZXcga2V5IGlkZW50aWZpZXJzIGZsYXNoaW5nOiBgQlBGX01BUF9UWVBFX1JIQVNIYCwgdGhlIGByaHRhYl9tYXBfb3BzYCBzdHJ1Y3R1cmUsIGFuZCB0aGUgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgZnVuY3Rpb24uIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGVzZSB0aHJlZSBhcmUgaGlnaGx5IGludGVycmVsYXRlZCwgYWxtb3N0IGNlcnRhaW5seSBmb3JtaW5nIHRoZSBjb3JlIG9mIGhvdyB0aGlzIHNwZWNpZmljIEJQRiBtYXAgdHlwZSBmdW5jdGlvbnMuXG5cblJpZ2h0IG5vdywgbXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgYSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLiBUaGUgXCJSSEFTSFwiIGltbWVkaWF0ZWx5IHBvaW50cyBpbiB0aGF0IGRpcmVjdGlvbi4gVGhlIFwib3BzXCIgc3RydWN0dXJlIHR5cGljYWxseSBjb250YWlucyBmdW5jdGlvbiBwb2ludGVycyBmb3IgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyBvbiB0aGUgbWFwOiBpbnNlcnRpbmcsIGRlbGV0aW5nLCBsb29rdXAsIGl0ZXJhdGlvbiAtIHRoZSB1c3VhbCBzdXNwZWN0cy4gQW5kIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gLi4uIHdlbGwsIHRoYXTigJlzIGNsZWFybHkgdGhlIG1lY2hhbmlzbSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIHN0b3JlZCB3aXRoaW4gdGhlIG1hcC4gU28sIHdoYXQgSSBuZWVkIHRvIGRvIGlzIGRyaWxsIGRvd24gYW5kIGZpbmQgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQuIEkgc2hvdWxkIHNlYXJjaCBmb3IgZWFjaCBvZiB0aGVtLCBzdGFydGluZyB3aXRoIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYWNyby4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZWJhc2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjM0OjI1Ljk0NDE1OTAxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4OTEzMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9SSEFTSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXFx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwNTA6XFx0QlBGX01BUF9UWVBFX1JIQVNILFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVxcdF9fTUFYX0JQRl9NQVBfVFlQRVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXFx0XFx0ICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcXHRcXHQgKiBCUEZfTUFQX1RZUEVfUkhBU0ggLSBpbml0aWFsIHRhYmxlIHNpemUgaGludFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVxcdFxcdCAqIChuZWxlbV9oaW50KS4gMCA9IHVzZSByaGFzaHRhYmxlIGRlZmF1bHQuIE11c3QgYmVcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjYtXFx0XFx0IG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjEyNzpcXHRcXHQgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cXHRcXHRnb3RvIHB1dF9tYXA7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjU1PXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyOTktXFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMzAwOlxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDEtXFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE0LVxcdFxcdFxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE2LVxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyNi1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMjc6XFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyOC1cXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjAtXFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MjE6XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjItXFx0ICAgIGF0dHItXFx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDkyLVxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ5MzpcXHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDk0LVxcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjIxNj1zdGF0aWMgaW50IG1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3NS1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMjc2OlxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JIQVNIIHx8XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3Ny1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NjA1PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NjUzLVxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NjU0OlxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODY1NS1cXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVxcdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlxcdEJQRl9NQVBfVFlQRV9SSEFTSCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cXHRfX01BWF9CUEZfTUFQX1RZUEVcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVxcdFxcdCAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XFx0XFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cXHRcXHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTk4LVxcdFtCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWV1cXHRcXHQ9IFxcXCJpbnNuX2FycmF5XFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE5OTpcXHRbQlBGX01BUF9UWVBFX1JIQVNIXVxcdFxcdFxcdD0gXFxcInJoYXNoXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMC19O1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MjkyPXN0YXRpYyBpbnQgcHJvYmVfbWFwX2NyZWF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cXHRcXHRicmVhaztcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzEzLVxcdFxcdG9wdHMubWFwX2ZsYWdzXFx0PSBCUEZfRl9OT19QUkVBTExPQztcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz0zNz1zdGF0aWMgdm9pZCBoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVxcdGJwZl9tYXBfX3NldF90eXBlKGN0eC5za2VsLVxcdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLCBtYXBfdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUyLVxcdFxcdGJwZl9tYXBfX3NldF9tYXBfZmxhZ3MoY3R4LnNrZWwtXFx1MDAzZW1hcHMuaGFzaF9tYXBfYmVuY2gsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9ODA9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtODEte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcXHRoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MTUxPXN0YXRpYyB2b2lkIGhhc2htYXBfbG9va3VwX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXFx0bWFwX2ZsYWdzID0gYXJncy5tYXBfZmxhZ3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYzoxNjg6XFx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTE2OS1cXHRcXHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jPTIxMT1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjIxMzpcXHRoYXNobWFwX2xvb2t1cF9zZXR1cChCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0xNTU9c3RhdGljIHZvaWQgaHRhYl9tZW1fc2V0dXBfaW1wbChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODQtXFx0YnBmX21hcF9fc2V0X21heF9lbnRyaWVzKG1hcCwgTUFYKDgxOTIsIDY0ICogZW52Lm5yX2NwdXMpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1OlxcdGlmIChtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4Ni1cXHRcXHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXFx1MDAyNiB+QlBGX0ZfTk9fUFJFQUxMT0MpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MjMxOlxcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMyLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NTA9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTU1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTY6XFx0cmV0dXJuIGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9SSEFTSCwgXFxcInJoYXNoX2V4dHJhXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTU3LVxcdFxcdFxcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcXHUwMDI2b3B0cyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jOjk6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYy0xMC1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYz0yOT1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jOjMwOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jLTMxLVxcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jPTM3PXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmM6Mzg6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMtMzktXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNDoyNy41ODMwNzcyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0OTYxMDc5MzU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgQlBGIE1hcCBJdGVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyB0aGUgbWFwIGl0ZXJhdGlvbiBjYWxsYmFjaywgYC5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgLCBpcyBpbnZva2VkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBtZWNoYW5pc20gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgYSBCUEYgbWFwLlxuXG5JJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZSBiYXNlIGZvciBpbnN0YW5jZXMgb2YgYG1hcF9mb3JfZWFjaF9jYWxsYmFja2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCB3aXRoaW4gd2hpY2ggYC5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgIGlzIGJlaW5nIHVzZWQuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MzY6NTcuMTkzODc0NTI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI3Mzk3OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9mb3JfZWFjaF9jYWxsYmFja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoxODE6XFx0bG9uZyAoKm1hcF9mb3JfZWFjaF9jYWxsYmFjaykoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4Mi1cXHRcXHRcXHRcXHQgICAgIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzctXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODc4OlxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfYXJyYXlfZWxlbSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc5LVxcdC5tYXBfbWVtX3VzYWdlID0gYXJyYXlfbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwMi1cXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo5MDM6XFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9hcnJheV9lbGVtLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MDQtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBhcnJheV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTcxMT1CUEZfQ0FMTF80KGJwZl9mb3JfZWFjaF9tYXBfZWxlbSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGNhbGxiYWNrX2ZuLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxMy17XFxua2VybmVsL2JwZi9icGZfaXRlci5jOjcxNDpcXHRyZXR1cm4gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjayhtYXAsIGNhbGxiYWNrX2ZuLCBjYWxsYmFja19jdHgsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzE1LX1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwOD1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDItXFx0XFx0XFx0XFx0ICAgICAobG9uZyAoKikoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGluZGV4LCB1NjQgZmxhZ3MpKU5VTEwpKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxMDM6XFx0XFx0XFx0QlVJTERfQlVHX09OKCFfX3NhbWVfdHlwZShvcHMtXFx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjayxcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDQtXFx0XFx0XFx0XFx0ICAgICAobG9uZyAoKikoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzNC1cXHRcXHRcXHRjYXNlIEJQRl9GVU5DX2Zvcl9lYWNoX21hcF9lbGVtOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjEzNTpcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VpbW0gPSBCUEZfQ0FMTF9JTU0ob3BzLVxcdTAwM2VtYXBfZm9yX2VhY2hfY2FsbGJhY2spO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzNi1cXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNTc9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzAtXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzcxOlxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzItXFx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzc5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5My1cXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzOTQ6XFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5NS1cXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjA9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTczLVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU3NDpcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTc1LVxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU4Mj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk0LVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU5NTpcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk2LVxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUxNj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzAtXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTMxOlxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZWFjaF9yaGFzaF9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzItXFx0Lm1hcF9tZW1fdXNhZ2UgPSByaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMDA2PXN0YXRpYyBpbnQgc2V0X21hcF9lbGVtX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwMTctXFx0aWYgKCFtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDE4OlxcdCAgICAhbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjaykge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAxOS1cXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBhbGxvd2VkIGZvciBtYXBcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNjo1OC43MjEyODAwODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc5ODY4MzEzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIGFuZCBSSEFTSCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIENoZWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSAqZXNzZW50aWFsKiBmb3IgZW5hYmxpbmcgQlBGLCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gaGFzaHRhYi5jIGFuZCB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgdHlwZS4gSXQncyBhIHF1aWNrIGF1ZGl0LCByZWFsbHkuIEkga25vdyB3aGVyZSB0byBsb29rLiBMZXQncyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdGhlIGxvZ2ljYWwganVtcGluZy1vZmYgcG9pbnQgZm9yIHRyYWNpbmcgZGVwZW5kZW5jaWVzIGFuZCBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgc3dpdGNoZXMuIEhvcGVmdWxseSwgaXQncyBhbGwgc3RyYWlnaHRmb3J3YXJkOyBJIGNhbiBwcm9iYWJseSBwYXJzZSBpdCBpbiBteSBoZWFkIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIGJ1dCBsZXQncyBtYWtlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjc2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6Mzc6MTYuNzA4MTEzOTUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ1NTkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNodGFiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMy0jaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9idGYuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTg2PXN0cnVjdCBicGZfaHRhYiB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05Ni1cXHRzdHJ1Y3QgaHRhYl9lbGVtICpfX3BlcmNwdSAqZXh0cmFfZWxlbXM7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6OTc6XFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIG5vbi1wcmVhbGxvY2F0ZWQgaGFzaHRhYmxlIGFyZSBrZXB0XFxua2VybmVsL2JwZi9oYXNodGFiLmMtOTgtXFx0ICogaW4gZWl0aGVyIHBjb3VudCBvciBjb3VudFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTgtICpcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk6ICogSW4gaGFzaHRhYi5jLCB0byBhdm9pZCBkZWFkbG9jaywgbG9jayBhY3F1aXNpdGlvbiBvZlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMC0gKiBidWNrZXRfbG9jayBmb2xsb3dlZCBieSBscnVfbG9jayBpcyBub3QgYWxsb3dlZC4gSW4gc3VjaCBjYXNlcyxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3NTE9c3RydWN0IGJwZl9yaHRhYiB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc1Mi1cXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc1MzpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZSBodDtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzU0LVxcdHN0cnVjdCBicGZfbWVtX2FsbG9jIG1hO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc1OC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzU5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcmh0YWJfcGFyYW1zID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NjAtXFx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc2ND1zdGF0aWMgaW5saW5lIHZvaWQgKnJodGFiX2VsZW1fdmFsdWUoc3RydWN0IHJodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NjktLyogU3BlY2lhbGl6ZSBoYXNoIGZ1bmN0aW9uIGFuZCBvYmpjbXAgZm9yIGxvbmcgc2l6ZWQga2V5ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc3MDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByaHRhYl9rZXlfY21wX2xvbmcoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzcxLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3Nzk9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgcmh0YWJfaGFzaGZuX2xvbmcoY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzg1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3ODY6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXNfbG9uZyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzg3LVxcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBub2RlKSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3OTQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5NS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc5NjpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3OTctXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWI7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODIzLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4MjQ6XFx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZwYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjUtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgyODpcXHQvKiBTZXQgbWF4X2VsZW1zIGFmdGVyIHJoYXNodGFibGVfaW5pdCgpIHNpbmNlIGluaXQgemVyb2VzIHRoZSBzdHJ1Y3QgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODI5LVxcdHJodGFiLVxcdTAwM2VodC5tYXhfZWxlbXMgPSByaHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzNy1kZXN0cm95X3JodGFiOlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4Mzg6XFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MzktZnJlZV9yaHRhYjpcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4OTg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDEtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkwMjpcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgcmh0YWJfZnJlZV9lbGVtLCByaHRhYik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkwMy1cXHRicGZfbWVtX2FsbG9jX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VtYSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTA3PXN0YXRpYyB2b2lkICpyaHRhYl9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE0LVxcdGlmIChtYXAtXFx1MDAzZWtleV9zaXplID09IHNpemVvZihsb25nKSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTE1OlxcdFxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXNfbG9uZyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxNi1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTE3OlxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTgtfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjkzOT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NDUtXFx0ICogZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBtaXRpZ2F0ZXMgdGhlIGRlYWRsb2NrIGZvciBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSBjb250ZXh0Llxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDY6XFx0ICogcmhhc2h0YWJsZSBsb2NrcyBidWNrZXQgd2l0aCBsb2NhbF9pcnFfc2F2ZSgpLiBPbmx5IE5NSSBwcm9ncmFtcyBtYXkgcmVlbnRlclxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDc6XFx0ICogcmhhc2h0YWJsZSBjb2RlLCBicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBkaXNhYmxlcyBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSwgZXhjZXB0XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0ODpcXHQgKiByYXcgdHJhY2Vwb2ludHMsIHdoaWNoIHdlIGRvbid0IGhhdmUgaW4gcmhhc2h0YWJsZS5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTQ5LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Mi1cXHRpZiAocmh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1MzpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXNfbG9uZyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1NC1cXHRlbHNlXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1NTpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTYtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDMyPXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA3NC1cXHRpZiAobWFwLVxcdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA3NTpcXHRcXHR0bXAgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmVsZW0tXFx1MDAzZW5vZGUsIHJodGFiX3BhcmFtc19sb25nKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc2LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDc3OlxcdFxcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc4LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzExNj1zdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTE4LVxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTE5OlxcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTIwLVxcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzMi1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTMzOlxcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzNDpcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMzUtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzNjpcXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcXHUwMDI2aXRlcikpKSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzNy1cXHRcXHRpZiAoSVNfRVJSKGVsZW0pKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ1LVxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkgeyAvKiBBdm9pZCBzdGFsbHMgb24gbGFyZ2UgbWFwcyAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNDY6XFx0XFx0XFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDctXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0ODpcXHRcXHRcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDktXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1MS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTUyOlxcdHJoYXNodGFibGVfd2Fsa19zdG9wKFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTUzOlxcdHJoYXNodGFibGVfd2Fsa19leGl0KFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTU0LVxcdFdSSVRFX09OQ0Uocmh0YWItXFx1MDAzZWZyZWVpbmdfaW50ZXJuYWwsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNTc9c3RhdGljIGludCByaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTYyLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjM6XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5KTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY0LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2Ni1cXHRpZiAoUFRSX0VSUihlbGVtKSA9PSAtRU5PRU5UKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjc6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgTlVMTCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2OC1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTgxLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxODI6XFx0LyogR3VhcmFudGVlIHRoYXQgaGFzaHRhYiB2YWx1ZSBpcyBub3QgZnJlZWQgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTgzLVxcdGd1YXJkKHJjdSkoKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxOTU9c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTEtXFx0LypcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjEyOlxcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTMtXFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjE3LVxcdHdoaWxlIChudW1fZWxlbXMgXFx1MDAzYyB2aXNpdF9idWRnZXQgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjE4OlxcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgcHJldl9rZXkpKSkge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTktXFx0XFx0aWYgKElTX0VSUihlbGVtKSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyMzY9c3RhdGljIHU2NCByaHRhYl9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQwLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNDE6XFx0LyogRXhjbHVkZXMgcmhhc2h0YWJsZSBidWNrZXQgb3ZlcmhlYWQgKH4gbmVsZW1zICogc2l6ZW9mKHZvaWQgKikgYXQgNzUlIGxvYWQpLiAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNDItXFx0bnVtX2VudHJpZXMgPSBhdG9taWNfcmVhZChcXHUwMDI2cmh0YWItXFx1MDAzZWh0Lm5lbGVtcyk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ2PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjAtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzIxOlxcdFxcdGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIE5VTEwpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjItXFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzMyOlxcdFxcdGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIGRzdF9rZXkpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMzMtXFx0XFx0ZHN0X2tleSArPSBrZXlfc2l6ZTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMzOTQ9c3RydWN0IGJwZl9pdGVyX3NlcV9yaGFzaF9tYXBfaW5mbyB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk2LVxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzOTc6XFx0c3RydWN0IHJoYXNodGFibGVfaXRlciBpdGVyO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTgtfTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0MDA9c3RhdGljIHZvaWQgKmJwZl9yaGFzaF9tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDUtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQwNjpcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDctXFx0LypcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MTItXFx0ZG8ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MTM6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfd2Fsa19wZWVrKFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDE0LVxcdH0gd2hpbGUgKFBUUl9FUlIoZWxlbSkgPT0gLUVBR0FJTik7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDI0PXN0YXRpYyB2b2lkICpicGZfcmhhc2hfbWFwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MzItXFx0ZG8ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MzM6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfd2Fsa19uZXh0KFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDM0LVxcdH0gd2hpbGUgKFBUUl9FUlIoZWxlbSkgPT0gLUVBR0FJTik7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDcwPXN0YXRpYyB2b2lkIGJwZl9yaGFzaF9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDc3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0Nzg6XFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0NzktfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ4MT1zdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfcmhhc2hfbWFwKHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDg4LVxcdGluZm8tXFx1MDAzZXJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDg5OlxcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcXHUwMDI2aW5mby1cXHUwMDNlcmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5MC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0OTM9c3RhdGljIHZvaWQgYnBmX2l0ZXJfZmluaV9yaGFzaF9tYXAodm9pZCAqcHJpdl9kYXRhKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5Ni1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDk3OlxcdHJoYXNodGFibGVfd2Fsa19leGl0KFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDk4LVxcdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihpbmZvLVxcdTAwM2VtYXApO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zi5oXFx1MDAzZVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9oYXNodGFibGUuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvamhhc2guaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX25zLmhcXHUwMDNlXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0zMz1zdHJ1Y3QgYnBmX29mZmxvYWRfbmV0ZGV2IHtcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQxLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjQyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgb2ZmZGV2c19wYXJhbXMgPSB7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDMtXFx0Lm5lbGVtX2hpbnRcXHRcXHQ9IDQsXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00OS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo1MDpzdGF0aWMgc3RydWN0IHJoYXNodGFibGUgb2ZmZGV2cztcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MS1cXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTYyPWJwZl9vZmZsb2FkX2ZpbmRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy02NS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo2NjpcXHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm5ldGRldiwgb2ZmZGV2c19wYXJhbXMpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTY3LX1cXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTY5PXN0YXRpYyBpbnQgX19icGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3JlZ2lzdGVyKHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldixcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTgzLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjg0OlxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZvbmRldi1cXHUwMDNlbCwgb2ZmZGV2c19wYXJhbXMpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg1LVxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTEzNj1zdGF0aWMgdm9pZCBfX2JwZl9vZmZsb2FkX2Rldl9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDQtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTQ1OlxcdG9uZGV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm5ldGRldiwgb2ZmZGV2c19wYXJhbXMpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0Ni1cXHRpZiAoV0FSTl9PTighb25kZXYpKVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ4LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE0OTpcXHRXQVJOX09OKHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZvbmRldi1cXHUwMDNlbCwgb2ZmZGV2c19wYXJhbXMpKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNTAtXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0xNzk9c3RhdGljIGludCBfX2JwZl9wcm9nX2Rldl9ib3VuZF9pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIwMS1cXHRcXHQvKiBXaGVuIG9ubHkgYmluZGluZyB0byB0aGUgZGV2aWNlLCBleHBsaWNpdGx5XFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MjAyOlxcdFxcdCAqIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgaGFzaHRhYmxlLlxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIwMy1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTg2MT1zdGF0aWMgaW50IF9faW5pdCBicGZfb2ZmbG9hZF9pbml0KHZvaWQpXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtODYyLXtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo4NjM6XFx0cmV0dXJuIHJoYXNodGFibGVfaW5pdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm9mZmRldnNfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NjQtfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzMy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNDM0OlxcdC8qIGZpbmQgbWFwIHR5cGUgYW5kIGluaXQgbWFwOiBoYXNodGFibGUgdnMgcmJ0cmVlIHZzIGJsb29tIHZzIC4uLiAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzUtXFx0bWFwX3R5cGUgPSBhdHRyLVxcdTAwM2VtYXBfdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6Mzc6MTYuNzU2NTc1NDg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjU2OTQ1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBGb3ItRWFjaCBJdGVyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcyBhcmUgaXRlcmF0ZWQgd2l0aGluIEJQRiBwcm9ncmFtcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBwYXRoLCBzdGFydGluZyB3aXRoIGBicGZfZWFjaF9yaGFzaF9lbGVtYCwgd2hpY2ggSSBrbm93IGlzIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgcmVhbGl6ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hlZCBieSBjYWxsaW5nIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gIGZyb20gYSBCUEYgcHJvZ3JhbS5cblxuQnV0IHRoZW4gYSBkZXRhaWwgcG9wcyB1cDogSXMgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGlubGluZWQ/IEkgcXVpY2tseSByZWNhbGwgc29tZXRoaW5nIGZyb20gdGhlIHZlcmlmaWVyIGZpeHVwcyDigJMgc3BlY2lmaWNhbGx5IHRoZSBsaW5lIGBpbnNuLVx1MDAzZWltbSA9IEJQRl9DQUxMX0lNTShvcHMtXHUwMDNlbWFwX2Zvcl9lYWNoX2NhbGxiYWNrKTtgLiBUaGF0IGFzc2lnbm1lbnQncyBrZXkuIEl0IHR1cm5zIG91dCB0aGF0IGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpcyAqc3RhdGljKiB3aXRoaW4gYGhhc2h0YWIuY2AsIGhvd2V2ZXIgaXRzICpwb2ludGVyKiBpcyBhc3NpZ25lZCB0byBgcmh0YWJfbWFwX29wcy5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgLiBTbyB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzbid0IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQuIEl0J3MgdGhlIHBvaW50ZXIgYXNzaWdubWVudCB0aGF0J3MgY3JpdGljYWwuXG5cbk5vdywgbXkgbWluZCBnb2VzIHRvIHRoZSBicm9hZGVyIHNjb3BlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gTGV0IG1lIHZlcmlmeSBpZiBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtYCBpdHNlbGYsIG9yIGFueSByZWxhdGVkIGZ1bmN0aW9uLCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGFzIGEgcHJpbWFyeSBzeW1ib2wgb3IgZW50cnkgcG9pbnQuIFRoaXMgcmVxdWlyZXMgYSBzZWFyY2ggZm9yIG5vbi1zdGF0aWMgc3ltYm9scy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBsb29rIGF0IGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6Mzc6MjguMDEzNTI0MzA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAxOTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZm9yX2VhY2hfbWFwX2VsZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9pdGVyLmM9NjgwPWludCBicGZfaXRlcl9ydW5fcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHZvaWQgKmN0eClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MTAtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjcxMTpCUEZfQ0FMTF80KGJwZl9mb3JfZWFjaF9tYXBfZWxlbSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGNhbGxiYWNrX2ZuLFxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MTItXFx0ICAgdm9pZCAqLCBjYWxsYmFja19jdHgsIHU2NCwgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzE2LVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3MTc6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9mb3JfZWFjaF9tYXBfZWxlbV9wcm90byA9IHtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzE4OlxcdC5mdW5jXFx0XFx0PSBicGZfZm9yX2VhY2hfbWFwX2VsZW0sXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxOS1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE0OC1cXHRjYXNlIEJQRl9GVU5DX2Zvcl9lYWNoX21hcF9lbGVtOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIxNDk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZm9yX2VhY2hfbWFwX2VsZW1fcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE1MC1cXHRjYXNlIEJQRl9GVU5DX2xvb3A6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTk2NT1pbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk2OC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk5Njk6XFx0LyogYnBmX2Zvcl9lYWNoX21hcF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmNhbGxiYWNrX2ZuLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05OTcwLVxcdCAqICAgICAgdm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMjY3PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMxNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzMTg6XFx0LyogZm9yIGNhbGxiYWNrcyBsaWtlIGJwZl9sb29wIG9yIGJwZl9mb3JfZWFjaF9tYXBfZWxlbSBnbyBiYWNrIHRvIGNhbGxzaXRlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMxOS1cXHQgKiB0aGVyZSBmdW5jdGlvbiBjYWxsIGxvZ2ljIHdvdWxkIHJlc2NoZWR1bGUgY2FsbGJhY2sgdmlzaXQuIElmIGl0ZXJhdGlvblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNzoyOC4wNTk1NTE3MTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4MDQ0MDg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6XG5cbioqQ2hlY2tpbmcgQlBGX1NZU0NBTEwgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQlBGX1NZU0NBTExgLiBTaW5jZSBJJ20gd29ya2luZyB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgQlBGIHN5c3RlbSBjYWxscy4gU28sIEkgbmVlZCB0byB0cmFjZSBpdHMgY29uZmlndXJhdGlvbiBwYXRoLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIHN0YXJ0IHdpdGggYGtlcm5lbC9icGYvS2NvbmZpZ2Ag4oCTIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gZm9yIGFueXRoaW5nIEJQRi1yZWxhdGVkLiBUaGVuLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0J3MgZ29vZCBwcmFjdGljZSwgSSdsbCBhbHNvIGdsYW5jZSBhdCBgaW5pdC9LY29uZmlnYC4gYGluaXQvS2NvbmZpZ2Agb2Z0ZW4gaGFuZGxlcyBnbG9iYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIG90aGVyIGZlYXR1cmVzLCBzbyBpdCdzIHNtYXJ0IHRvIGNoZWNrIHRoZXJlIGZvciBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBlbnN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLiBCeSBzeXN0ZW1hdGljYWxseSBjaGVja2luZyB0aGVzZSBmaWxlcywgSSBjYW4gdmVyaWZ5IGlmIHRoZXJlIGlzIGFuIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY1NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjM3OjM3LjAzOTk5NTE3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTc0MDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNzozOC41ODk3NDI1NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAzNTY2MDUyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGxvb2sgaW50byB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb25maWd1cmF0aW9uLiBJIHJlbWVtYmVyIHdvcmtpbmcgd2l0aCBgS2NvbmZpZ2AgZmlsZXMgYmVmb3JlOyB0aGV5J3JlIHRoZSBicmVhZCBhbmQgYnV0dGVyIGZvciBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMuIExldCdzIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUsIEknbSB0aGlua2luZyBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMjcuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBkZWFsIHdpdGggdGhlIGNvcmUgZW5hYmxpbmcgb3B0aW9ucyBmb3IgQlBGLCBvciBwZXJoYXBzIGNvbmZpZ3VyYXRpb24gb2Ygc29tZSBvZiB0aGUgQlBGIHN1YnN5c3RlbXMuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgdGhlcmUuIEZyb20gaGVyZSBJJ2xsIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZSBhbmQgd2hhdCBteSB1bmRlcnN0YW5kaW5nIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjM4OjA4Ljk0NjM1MDI5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcXG4gIDYzOlxcdFxcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxcbiAgNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjM4OjA4Ljk0NjQzODEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODUzNjQ2MzQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRiBTdWJzeXN0ZW0gQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudCBmb3IgYGhhc2h0YWIuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyB0aWVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBpbmRpY2F0ZWQgYnkgdGhhdCBsaW5lIGluIHRoZSBNYWtlZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub2AuIFNvLCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCB0aGVzZSBvYmplY3QgZmlsZXMgZ2V0IGJ1aWx0LlxuXG5Ob3csIEknbSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXQgcGxheSBoZXJlLiBMZXQncyBzZWUgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXRzZWxmIGhhcyBhbnkgcHJlY29uZGl0aW9ucy4gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIGFzIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHJlbGF0ZWQgc2V0dGluZ3MgdG8gcmVzaWRlLiBBbHJpZ2h0LCBsZXQncyBzZWUuIExpbmUgMjUgb2YgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZGVmaW5lcyB0aGUgXCJCUEYgc3Vic3lzdGVtXCIgbWVudSwgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGRlY2xhcmVkIHJpZ2h0IGFmdGVyLiBHb29kLiBObyBkZXBlbmRlbmNpZXMgbGlzdGVkIGRpcmVjdGx5IGZvciBgQ09ORklHX0JQRl9TWVNDQUxMYC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBkb3VibGUgY2hlY2sgZm9yIGFueSBtZW51IGNvbmRpdGlvbnMgb3IgaGlkZGVuIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYm90aCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZm9yIGFueSBpbmRpcmVjdCBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBlbmFibGVtZW50IG9mIGBDT05GSUdfQlBGX1NZU0NBTExgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQxOjA3LjQ4MjkwNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHQjIEJQRiBpbnRlcnByZXRlciB0aGF0LCBmb3IgZXhhbXBsZSwgY2xhc3NpYyBzb2NrZXQgZmlsdGVycyBkZXBlbmQgb24uXFxuICAgNDpcXHRjb25maWcgQlBGXFxuICAgNTpcXHRcXHRib29sXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gICA3OlxcdFxcbiAgIDg6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHN1cHBvcnQgQlBGIEpJVCBjb21waWxlciBwbHVzIHdoaWNoXFxuICAgOTpcXHQjIGZsYXZvdXIuIE9ubHkgb25lIG9mIHRoZSB0d28gY2FuIGJlIHNlbGVjdGVkIGZvciBhIHNwZWNpZmljIGFyY2ggc2luY2VcXG4gIDEwOlxcdCMgZUJQRiBKSVQgc3VwZXJzZWRlcyB0aGUgY0JQRiBKSVQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdCMgQ2xhc3NpYyBCUEYgSklUIChjQlBGKVxcbiAgMTM6XFx0Y29uZmlnIEhBVkVfQ0JQRl9KSVRcXG4gIDE0OlxcdFxcdGJvb2xcXG4gIDE1OlxcdFxcbiAgMTY6XFx0IyBFeHRlbmRlZCBCUEYgSklUIChlQlBGKVxcbiAgMTc6XFx0Y29uZmlnIEhBVkVfRUJQRl9KSVRcXG4gIDE4OlxcdFxcdGJvb2xcXG4gIDE5OlxcdFxcbiAgMjA6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbiAgMjE6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDIyOlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyMzpcXHRcXHRib29sXFxuICAyNDpcXHRcXG4gIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDE6MDcuNDgzMDUzOTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2OTc2NTk4MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGluIEJQRiBIYXNoIFRhYmxlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBmaWxlIGFnYWluLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBoaWRkZW4gYmVoaW5kIGAjaWZkZWZgIGRpcmVjdGl2ZXMgb3Igc3BlY2lmaWMga2VybmVsIGNvbmZpZyBvcHRpb25zLCB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb3IgYXZhaWxhYmlsaXR5IG9mIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBvciB0aGUgcmVsYXRlZCBgcmh0YWJfbWFwX29wc2Agc3RydWN0dXJlcy4gSSBrbm93IHRoZXNlIGFyZSByZWxhdGVkIHRvIHRoZSByZXNpemUgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgd2FudCB0byBiZSAqc3VyZSogSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwuIEknbSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCwgbGVhZGluZyB0byBwb3RlbnRpYWwgZGlmZmVyZW5jZXMgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuVG8gZ2V0IGEgZ29vZCBvdmVydmlldywgSSB0aGluayBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgc2VjdGlvbiBvZiB0aGUgZmlsZSBiZXR3ZWVuIGFwcHJveGltYXRlbHkgbGluZXMgMzE5MCBhbmQgMzU0MC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIHJlbGV2YW50IHBvcnRpb25zIGRlYWxpbmcgd2l0aCB0aGUgcmVzaXplIGhhc2ggdGFibGUgb3BlcmF0aW9ucyBhbmQgdGhlIGl0ZXJhdGlvbiBmdW5jdGlvbi4gSG9wZWZ1bGx5LCBieSByZXZpZXdpbmcgdGhpcyByZWdpb24gY2xvc2VseSwgSSBjYW4gc3BvdCBhbnkgc3VidGxlIHZhcmlhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYmVoYXZlIGluIGRpZmZlcmVudCBrZXJuZWwgYnVpbGRzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGRpZmZlcmVudCBtYXAgdHlwZXMsIG9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGRpc2FibGUgb3IgYWx0ZXIgdGhlIGJlaGF2aW9yLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsYXJpdHkgYW5kIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0MzoyNC40NTk2NTQ1NDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1MTA6XFx0XFx0LmluaXRfc2VxX3ByaXZhdGUgPSBicGZfaXRlcl9pbml0X3JoYXNoX21hcCxcXG4zNTExOlxcdFxcdC5maW5pX3NlcV9wcml2YXRlID0gYnBmX2l0ZXJfZmluaV9yaGFzaF9tYXAsXFxuMzUxMjpcXHRcXHQuc2VxX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3JoYXNoX21hcF9pbmZvKSxcXG4zNTEzOlxcdH07XFxuMzUxNDpcXHRcXG4zNTE1OlxcdEJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXFxuMzUxNjpcXHRjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG4zNTE3OlxcdFxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG4zNTE4OlxcdFxcdC5tYXBfYWxsb2NfY2hlY2sgPSByaHRhYl9tYXBfYWxsb2NfY2hlY2ssXFxuMzUxOTpcXHRcXHQubWFwX2FsbG9jID0gcmh0YWJfbWFwX2FsbG9jLFxcbjM1MjA6XFx0XFx0Lm1hcF9mcmVlID0gcmh0YWJfbWFwX2ZyZWUsXFxuMzUyMTpcXHRcXHQubWFwX2dldF9uZXh0X2tleSA9IHJodGFiX21hcF9nZXRfbmV4dF9rZXksXFxuMzUyMjpcXHRcXHQubWFwX3JlbGVhc2VfdXJlZiA9IHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMsXFxuMzUyMzpcXHRcXHQubWFwX2NoZWNrX2J0ZiA9IHJodGFiX21hcF9jaGVja19idGYsXFxuMzUyNDpcXHRcXHQubWFwX2xvb2t1cF9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9lbGVtLFxcbjM1MjU6XFx0XFx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXFxuMzUyNjpcXHRcXHQubWFwX3VwZGF0ZV9lbGVtID0gcmh0YWJfbWFwX3VwZGF0ZV9lbGVtLFxcbjM1Mjc6XFx0XFx0Lm1hcF9kZWxldGVfZWxlbSA9IHJodGFiX21hcF9kZWxldGVfZWxlbSxcXG4zNTI4OlxcdFxcdC5tYXBfZ2VuX2xvb2t1cCA9IHJodGFiX21hcF9nZW5fbG9va3VwLFxcbjM1Mjk6XFx0XFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXFxuMzUzMDpcXHRcXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbjM1MzE6XFx0XFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9lYWNoX3JoYXNoX2VsZW0sXFxuMzUzMjpcXHRcXHQubWFwX21lbV91c2FnZSA9IHJodGFiX21hcF9tZW1fdXNhZ2UsXFxuMzUzMzpcXHRcXHRCQVRDSF9PUFMocmh0YWIpLFxcbjM1MzQ6XFx0XFx0Lm1hcF9idGZfaWQgPSBcXHUwMDI2cmh0YWJfbWFwX2J0Zl9pZHNbMF0sXFxuMzUzNTpcXHRcXHQuaXRlcl9zZXFfaW5mbyA9IFxcdTAwMjZyaGFzaF9pdGVyX3NlcV9pbmZvLFxcbjM1MzY6XFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDM6MjQuNDU5ODI5NDA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDk3MDk1MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmLiBJbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCB0aGUgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgcHJldmlvdXMgdmVyc2lvbiBlc3NlbnRpYWxseSBpdGVyYXRlZCBpbmRlZmluaXRlbHkgdGhyb3VnaCBhbiByaGFzaCB0YWJsZS4gTm93LCB0aGVyZSdzIGEgbGltaXQgaW50cm9kdWNlZDogYHZpc2l0X2J1ZGdldCA9IGF0b21pY19yZWFkKFx1MDAyNnJodGFiLVx1MDAzZWh0Lm5lbGVtcylgLiBUaGUgbG9vcCB3aWxsIG5vdyB0ZXJtaW5hdGUgaWYgaXQgcmVhY2hlcyB0aGF0IGJ1ZGdldC4gVGhpcyBpcyAqY3J1Y2lhbCogYmVjYXVzZSBpdCBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBkdXJpbmcgaXRlcmF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBlbGVtZW50cyBhcmUgYmVpbmcgYWRkZWQgY29uY3VycmVudGx5LiBUaGF0J3MgYSBzb2xpZCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMsIHNvbWV0aGluZyB0aGF0IGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vayBmb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGlzIGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgYmVpbmcgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHNpbmNlIGl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgQlBGIHN5c2NhbGxzOiBjcmVhdGluZyBhbiByaGFzaCBtYXAsIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB0aGF0IHVzZXMgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgb24gdGhhdCBtYXAsIGFuZCB0aGVuIHJ1bm5pbmcgdGhlIHByb2dyYW0uIFNvLCB5ZWFoLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGltcGFjdCBpcyBoaWdoIOKAkyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBjYW4gbGVhZCB0byBzZXJpb3VzIGRlbmlhbC1vZi1zZXJ2aWNlIGlzc3Vlcy5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzIG9mIHNldHRpbmcgdXAgYSBmdXp6aW5nIGNhbXBhaWduLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdXp6aW5nIHRoZSByaWdodCBjYWxscy5cblxuU28sICpmb2N1cyBzeW1ib2xzKi4uLiBjbGVhcmx5IGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gIGlzIGEgcHJpbWFyeSB0YXJnZXQuIFRoYXQncyB0aGUgQlBGIGhlbHBlciB0aGF0IGluaXRpYXRlcyB0aGUgaXRlcmF0aW9uLiBCdXQgd2hhdCBhYm91dCBgYnBmX2VhY2hfcmhhc2hfZWxlbWA/IEhvbGQgb24sIGlzbid0IHRoYXQgc3RhdGljPyBZZXMsIGJ1dCBpdCdzIGFkZHJlc3MgaXMgc3RvcmVkIGluIGByaHRhYl9tYXBfb3BzLm1hcF9mb3JfZWFjaF9jYWxsYmFja2AuIFdhaXQsIGluIHZlcmlmaWVyIGZpeHVwcywgaXQncyB0aGVyZSBgaW5zbi1cdTAwM2VpbW0gPSBCUEZfQ0FMTF9JTU0ob3BzLVx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjaylgLiBJZiBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgdGhlbiBpdCBpcyBhIHN5bWJvbCBpbiBrYWxsc3ltcy4gQnV0LCBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsJ3MgZG9jdW1lbnRhdGlvbiwgYXMgc29tZXRpbWVzLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuVGhlIGRvY3VtZW50YXRpb24gcmVjb21tZW5kcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIE5vdywgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0IHNlZW1zIGlkZWFsLiBIb3dldmVyLCBgQlBGX0NBTExfNGAgY3JlYXRlcyBlaXRoZXIgYF9fX2JwZl9mb3JfZWFjaF9tYXBfZWxlbWAgb3IgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQlBGX0NBTExgIGRlZmluZXMgdGhlc2Ugc3ltYm9scy4gT2theSwgSSBuZWVkIHRvIGdyZXAgZm9yIGBCUEZfQ0FMTGAgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIG9yIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkgdG8gdW5kZXJzdGFuZCB0aGUgc3ltYm9sIG5hbWluZyBjb252ZW50aW9ucy4gVGhpcyB3aWxsIGhlbHAgcmVmaW5lIHRoZSBmdXp6aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NzQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0Mzo0Ni41NTY5Mjg0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MDAyMTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMXzRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY4Mi0jZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgzOiNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODQtI2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDM6NDguMjk2OTU2NjExWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NDI1NzY3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQlBGIENhbGwgRGVmaW5pdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBCUEYgY2FsbHMgYXJlIGRlZmluZWQuIFRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IGlzIGFsd2F5cyB0aGUga2VybmVsJ3MgaW5jbHVkZSBmaWxlcywgc28gbGV0J3MgaGVhZCBzdHJhaWdodCBmb3IgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgQlBGX0NBTExfeGAgbWFjcm9zLCBzaW5jZSB0aG9zZSBhcmUgdGhlIGhlYXJ0IG9mIGhvdyB3ZSBpbnRlcmZhY2Ugd2l0aCB0aGUgQlBGIHN1YnN5c3RlbSBhdCB0aGlzIGxldmVsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBhcmUgY29uc3RydWN0ZWQsIHdoYXQgc29ydCBvZiBwcmVwcm9jZXNzb3IgbWFnaWMgaXMgdXNlZCwgd2hhdCBjb25zdHJhaW50cyBhcmUgdGhlcmUuIExldCdzIHNlZSBpZiB0aGlzIGRlZmluaXRpb24gaXMgZ29pbmcgdG8gY2F1c2Ugc29tZSBzaWRlIGVmZmVjdHMsIG9yIG1heWJlIGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGFzcGVjdHMgb2YgdGhlIGNhbGwgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI3MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQzOjU1LjczOTUzNTQ4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcXG4gNjYxOlxcdFxcbiA2NjI6XFx0I2RlZmluZSBfX0JQRl9QQUQobilcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2NjM6XFx0XFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxcXFxuIDY2NDpcXHRcXHRcXHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXFxuIDY2NTpcXHRcXG4gNjY2OlxcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjY3OlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2Njg6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxcXFxuIDY2OTpcXHRcXHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXFxcXG4gNjcwOlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcXFxcbiA2NzE6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxcXFxuIDY3MjpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjczOlxcdFxcdFxcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcXFxcbiA2NzQ6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDY3NTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjc2OlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0I2RlZmluZSBfX05PQVRUUlxcbiA2Nzk6XFx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjgwOlxcdCNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY4MTpcXHQjZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2ODI6XFx0I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjgzOlxcdCNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY4NDpcXHQjZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0Mzo1NS43Mzk2Mzg1MDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMwODUwOTUwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQlBGIE1hcCBJdGVyYXRpb24gYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBCUEZfQ0FMTF80KGJwZl9mb3JfZWFjaF9tYXBfZWxlbSwgLi4uKWAgZGVmaW5lcyB0aGUgcHVibGljLCBub24tc3RhdGljIGZ1bmN0aW9uIGB1NjQgYnBmX2Zvcl9lYWNoX21hcF9lbGVtKC4uLilgLiAgVGhlbiB0aGVyZSdzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCwgd2hpY2ggaXMgc3RhdGljIGJ1dCB1c2VkIHZpYSBgcmh0YWJfbWFwX29wc2AuICBJIG5lZWQgdG8gY29uZmlybSBpZiBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaXMgY2FsbGVkIGVsc2V3aGVyZSBvciBpZiBpdCBuZWVkcyB0byBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gLiBJIHRoaW5rIGluY2x1ZGluZyBib3RoIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBhbmQgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgaW4gYEZvY3VzU3ltYm9sc2AgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guXG5cbk5leHQsIEknbGwgbW92ZSBvbiB0byBjb25maWd1cmF0aW9uLiBUbyBnZXQgQlBGIHN5c2NhbGxzIGFuZCBtYXBzIHdvcmtpbmcsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCwgdGhhdCdzIGEgZ2l2ZW4uIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBiZSBzdXJlLlxuXG5Mb29raW5nIGF0IGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgaXQgbG9va3MgbGlrZSBgaGFzaHRhYi5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhY3RpdmUsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QuIE5vdywgSSBzaG91bGQgbWFrZSBjZXJ0YWluIHdoZXRoZXIgYEJQRl9NQVBfVFlQRV9SSEFTSGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEknbGwgZGl2ZSBpbnRvIGBoYXNodGFiLmNgIGFuZCBzZWFyY2ggZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJvdW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gYHJodGFiX2Agb3IgYEJQRl9NQVBfVFlQRV9SSEFTSGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmhhc2h0YWJsZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ0OjU4LjgyNDczNjc1N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNTkxNDE4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWYuKlJIQVNIfCNpZi4qcmh0YWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDQ6NTkuMjU1MzM2ODQ1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDcxMDcwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOlxuXG4qKkNoZWNraW5nIGZvciBDb25maWcgT3ZlcmxhcCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIHBvdGVudGlhbGx5IG90aGVyIGZpbGVzIGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjb2RlIGhhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gR2l2ZW4gdGhlIHNlbnNpdGl2ZSBuYXR1cmUgb2YgQlBGIGFuZCBob3cgZGVlcGx5IGl0IGludGVncmF0ZXMgd2l0aCB0aGUga2VybmVsLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIG9yIG92ZXJsYXBwaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBzY2FuIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSwgb3IgYmUgaW5mbHVlbmNlZCBieSwgdGhlIHNldHRpbmdzIHRoYXQgZ292ZXJuIHRoaXMgcGFydGljdWxhciBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbC1sZXZlbCBjaGFuZ2VzLiBMZXQgbWUgY2FyZWZ1bGx5IGV4YW1pbmUgYWxsIHJlbGV2YW50IGZpbGVzIHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwNTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0NToxOC43MjY0MTEwNDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDQxNzY3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZ8I2lmIElTX0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ1OjE4Ljc3Mzg1OTQ2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQ2ODM3NDI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSGFzaHRhYmxlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIFdoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lIGlzIHRoZSBjb21wbGV0ZSBhYnNlbmNlIG9mIGFueSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzIChgI2lmZGVmYHMpLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoYXQgdGhlIG9ubHkga2VybmVsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgZm9yIHRoaXMgbW9kdWxlIGlzIHRoZSBlbmFibGluZyBvZiB0aGUgQlBGIHN5c3RlbSBjYWxsIChgQlBGX1NZU0NBTExgKS4gVGhhdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5LlxuXG5Ob3csIGxldCBtZSBqdXN0IGNvbmZpcm0gbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGJ5IGdvaW5nIHRocm91Z2ggdGhlIHJlcXVpcmVtZW50cyBtb3JlIG1ldGhvZGljYWxseTpcblxuMS4gIGBXb3J0aEZ1enppbmdgOiBDb25maXJtZWQsIGl0J3Mgc2V0IHRvIFwidHJ1ZVwiLiBUaGlzIGluZGljYXRlcyB0aGUgY29kZSBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCB3aGljaCBtZWFucyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBsaWtlbHkgdG8gYmUgcHJlc2VudC5cbjIuICBgRm9jdXNTeW1ib2xzYDogSSBhbSBmb2N1c2luZyBvbiB0d28ga2V5IHN5bWJvbHMgaGVyZSwgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgYW5kIGBicGZfZWFjaF9yaGFzaF9lbGVtYC4gVGhlc2UgYXJlIG15IHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QuIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhleSdyZSByZWxhdGVkIHRvIGl0ZXJhdGluZyB0aHJvdWdoIEJQRiBtYXAgZWxlbWVudHMuXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBJJ3ZlIGFscmVhZHkgY2hlY2tlZCB0aGlzLiBgW1wiQlBGX1NZU0NBTExcIl1gIGlzIHRoZSBvbmx5IHJlcXVpcmVtZW50LCB3aGljaCBpcyB2ZXJ5IHNpbXBsZS5cbjQuICBgUmVhc29uaW5nYDogQWgsIHJpZ2h0LiBUaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBpcyBhbGwgYWJvdXQgbWFuYWdpbmcgaXRlcmF0aW9uIGJ1ZGdldHMgd2l0aGluIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBzcGVjaWZpY2FsbHkgd2hlbiBpdCdzIHVzZWQgd2l0aCBgQlBGX01BUF9UWVBFX1JIQVNIYCBCUEYgcmhhc2ggbWFwcy4gVGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCB1bmJvdW5kZWQgaXRlcmF0aW9uLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRlbmlhbC1vZi1zZXJ2aWNlLCBlc3BlY2lhbGx5IGR1cmluZyBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gdGhlIGhhc2ggdGFibGUuIFRoaXMgaXMgaW1wb3J0YW50OiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBjb3VsZCBlYXNpbHkgbGVhZCB0byBhbiBleHBsb2l0YWJsZSBzaXR1YXRpb24gaWYgdGhlIGJ1ZGdldCBpcyBub3QgbWFuYWdlZCwgd2hpY2ggaXMgd2h5IEkgd2FzIGZvY3VzaW5nIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuV2l0aCB0aGF0LCBJIGFtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMDIsIk91dHB1dFRva2VucyI6MTU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ1OjUwLjI0MjIzNjQ4NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODE2NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9mb3JfZWFjaF9tYXBfZWxlbVwiLFxuICAgIFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfZWFjaF9yaGFzaF9lbGVtKClgIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdG8gZW5mb3JjZSBhbiBpdGVyYXRpb24gYnVkZ2V0IGJhc2VkIG9uIGF0b21pYyBgbmVsZW1zYCB3aGVuIGl0ZXJhdGluZyBvdmVyIGBCUEZfTUFQX1RZUEVfUkhBU0hgIG1hcHMgdmlhIGBicGZfZm9yX2VhY2hfbWFwX2VsZW0oKWAuIFRoaXMgYm91bmRzIHRoZSBpdGVyYXRpb24gbG9vcCBhbmQgcHJldmVudHMgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG9wZXJhdGlvbnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2Zvcl9lYWNoX21hcF9lbGVtXCIsXG4gICAgXCJicGZfZWFjaF9yaGFzaF9lbGVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9lYWNoX3JoYXNoX2VsZW0oKWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBlbmZvcmNlIGFuIGl0ZXJhdGlvbiBidWRnZXQgYmFzZWQgb24gYXRvbWljIGBuZWxlbXNgIHdoZW4gaXRlcmF0aW5nIG92ZXIgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcyB2aWEgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbSgpYC4gVGhpcyBib3VuZHMgdGhlIGl0ZXJhdGlvbiBsb29wIGFuZCBwcmV2ZW50cyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBkdXJpbmcgY29uY3VycmVudCBtYXAgb3BlcmF0aW9ucy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ1OjUwLjMxNzA1OTg4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3OTQ0MTM0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0NTo1MC4zMTc1NTgxMDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2OTc5MzkxMDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBieSBib3VuZGluZyB0aGUgaXRlcmF0aW9uIGxvb3Agd2l0aCBhIGB2aXNpdF9idWRnZXRgIGRlcml2ZWQgZnJvbSBgYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcyBhcmUgZXhwb3NlZCBvciBjaGVja2VkLlxcbjMuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBjb25jZXJucyBpbnZvbHZpbmcgUkNVLXByb3RlY3RlZCByaGFzaHRhYmxlIGVsZW1lbnRzIGFyZSBhZGRyZXNzZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExvY2tkZXAgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzozMzo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLjJjYWQ2N2M5MDE1NDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0zMTk4LDcgKzMxOTgsOCBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxuIFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xuIFx0dm9pZCAqcHJldl9rZXkgPSBOVUxMO1xuIFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW07XG4tXHRpbnQgbnVtX2VsZW1zID0gMDtcbitcdHUzMiB2aXNpdF9idWRnZXQ7XG4rXHR1MzIgbnVtX2VsZW1zID0gMDtcbiBcdHU2NCByZXQgPSAwO1xuIFxuIFx0Y2FudF9taWdyYXRlKCk7XG5AQCAtMzIxMiw3ICszMjEzLDkgQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbiBcdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuIFx0ICogZWxlbWVudHMgdmlzaXRlZC5cbiBcdCAqL1xuLVx0d2hpbGUgKChlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcHJldl9rZXkpKSkge1xuK1x0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbitcdHdoaWxlIChudW1fZWxlbXMgXHUwMDNjIHZpc2l0X2J1ZGdldCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbiBcdFx0aWYgKElTX0VSUihlbGVtKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0bnVtX2VsZW1zKys7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmNcbmluZGV4IDk4YmI2NjkwN2I3ZjcuLmYxYTBhOGUzZmMxYWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXG5AQCAtMywxMiArMywxNiBAQFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGF0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJyaGFzaC5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5za2VsLmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuIFxuKyNkZWZpbmUgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TXHQoM1VMTCAqIDEwMDAwMDAwMDBVTEwpXG4rXG4gc3RhdGljIHZvaWQgcmhhc2hfcnVuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSlcbiB7XG4gXHRzdHJ1Y3Qgcmhhc2ggKnNrZWw7XG5AQCAtNTMsNiArNTcsMTEyIEBAIHN0YXRpYyBpbnQgcmhhc2hfbWFwX2NyZWF0ZShfX3UzMiBtYXhfZW50cmllcywgX191NjQgbWFwX2V4dHJhKVxuIFx0XHRcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcdTAwMjZvcHRzKTtcbiB9XG4gXG4rc3RydWN0IHJoYXNoX3N0cmVzc19hcmcge1xuK1x0aW50IG1hcF9mZDtcbitcdGF0b21pY19ib29sICpzdG9wO1xuK1x0X191MzIgbnJfa2V5cztcbitcdF9fdTMyIHNlZWQ7XG4rfTtcbitcbitzdGF0aWMgdm9pZCAqcmhhc2hfc3RyZXNzX3VwZGF0ZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCByaGFzaF9zdHJlc3NfYXJnICphcmcgPSBkYXRhO1xuK1x0X191NjQgdmFsdWUgPSAwO1xuK1x0X191MzIga2V5O1xuK1x0X191MzIgaTtcbitcbitcdHdoaWxlICghYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZy1cdTAwM2Vucl9rZXlzIFx1MDAyNlx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApOyBpKyspIHtcbitcdFx0XHRrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSArIGFyZy1cdTAwM2VzZWVkKSAlIGFyZy1cdTAwM2Vucl9rZXlzO1xuK1x0XHRcdGJwZl9tYXBfdXBkYXRlX2VsZW0oYXJnLVx1MDAzZW1hcF9mZCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWx1ZSwgQlBGX0FOWSk7XG4rXHRcdH1cbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXJnLVx1MDAzZW5yX2tleXMgXHUwMDI2XHUwMDI2ICFhdG9taWNfbG9hZChhcmctXHUwMDNlc3RvcCk7IGkrKykge1xuK1x0XHRcdGtleSA9ICgoX191MzIpaSAqIDI2NTQ0MzU3NjFVICsgYXJnLVx1MDAzZXNlZWQpICUgYXJnLVx1MDAzZW5yX2tleXM7XG4rXHRcdFx0YnBmX21hcF9kZWxldGVfZWxlbShhcmctXHUwMDNlbWFwX2ZkLCBcdTAwMjZrZXkpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmhhc2hfaXRlcl9zdHJlc3Modm9pZClcbit7XG4rXHRzdHJ1Y3Qgcmhhc2ggKnNrZWwgPSBOVUxMO1xuK1x0c3RydWN0IHJoYXNoX3N0cmVzc19hcmcgYXJnc1syXTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdGF0b21pY19ib29sIHN0b3AgPSBmYWxzZTtcbitcdGJvb2wgcmFuID0gZmFsc2U7XG4rXHRfX3U2NCBzdGFydDtcbitcdHB0aHJlYWRfdCB0aHJlYWRzWzJdO1xuK1x0Ym9vbCBjcmVhdGVkWzJdID0ge307XG4rXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4rXHRpbnQgbnJfY3B1cztcbitcdF9fdTMyIHdvcmtpbmdfc2V0O1xuK1x0aW50IG1hcF9mZCwgZXJyLCBpO1xuK1xuK1x0bnJfY3B1cyA9IGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpO1xuK1x0aWYgKCFBU1NFUlRfR1QobnJfY3B1cywgMCwgXCJudW1fcG9zc2libGVfY3B1c1wiKSlcbitcdFx0cmV0dXJuO1xuK1x0aWYgKG5yX2NwdXMgXHUwMDNjIDIpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRza2VsID0gcmhhc2hfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInJoYXNoX19vcGVuIHN0cmVzc1wiKSlcbitcdFx0cmV0dXJuO1xuK1x0d29ya2luZ19zZXQgPSBza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VzdHJlc3Nfd29ya2luZ19zZXQ7XG4rXG4rXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2tlbC1cdTAwM2VvYmosXG4rXHRcdFx0XHRcdFx0XCJ0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHByb2csIFwiZmluZCBzdHJlc3MgcHJvZ3JhbVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0YnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChwcm9nLCB0cnVlKTtcbitcbitcdGVyciA9IHJoYXNoX19sb2FkKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInN0cmVzcyBza2VsX2xvYWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5zdHJlc3NfcmhtYXApO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0aHJlYWRzKTsgaSsrKSB7XG4rXHRcdGFyZ3NbaV0ubWFwX2ZkID0gbWFwX2ZkO1xuK1x0XHRhcmdzW2ldLnN0b3AgPSBcdTAwMjZzdG9wO1xuK1x0XHRhcmdzW2ldLm5yX2tleXMgPSB3b3JraW5nX3NldDtcbitcdFx0YXJnc1tpXS5zZWVkID0gaSAqIDk3NztcbitcdFx0ZXJyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSxcbitcdFx0XHRcdCAgICAgXHUwMDI2YXJnc1tpXSk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJwdGhyZWFkX2NyZWF0ZVwiKSlcbitcdFx0XHRnb3RvIHN0b3BfdGhyZWFkcztcbitcdFx0Y3JlYXRlZFtpXSA9IHRydWU7XG4rXHR9XG4rXG4rXHRzdGFydCA9IGdldF90aW1lX25zKCk7XG4rXHR3aGlsZSAoZ2V0X3RpbWVfbnMoKSAtIHN0YXJ0IFx1MDAzYyBSSEFTSF9TVFJFU1NfRFVSQVRJT05fTlMpIHtcbitcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQocHJvZyksIFx1MDAyNm9wdHMpO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic3RyZXNzIHByb2cgcnVuXCIpKVxuK1x0XHRcdGdvdG8gc3RvcF90aHJlYWRzO1xuK1x0XHRyYW4gPSB0cnVlO1xuK1x0fVxuK1xuK3N0b3BfdGhyZWFkczpcbitcdGF0b21pY19zdG9yZShcdTAwMjZzdG9wLCB0cnVlKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGhyZWFkcyk7IGkrKylcbitcdFx0aWYgKGNyZWF0ZWRbaV0pXG4rXHRcdFx0cHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpO1xuK1xuK1x0aWYgKGVyciB8fCAhcmFuKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX21heF92aXNpdHMsIDAsIFwic3RyZXNzIGNhbGxiYWNrIHZpc2l0c1wiKTtcbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJlc3NfZnVsbF93YWxrcywgMCwgXCJzdHJlc3MgZnVsbCB3YWxrc1wiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJlc3Nfb3ZlcnJ1bnMsIDAsIFwic3RyZXNzIGNhbGxiYWNrIGJvdW5kXCIpO1xuK1x0cHJpbnRmKFwic3RyZXNzIG1heCBjYWxsYmFjayB2aXNpdHM6ICVsbHUgKGxpbWl0ICV1KVxcblwiLFxuK1x0ICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX21heF92aXNpdHMsXG4rXHQgICAgICAgd29ya2luZ19zZXQpO1xuK2NsZWFudXA6XG4rXHRyaGFzaF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcmhhc2hfbWFwX2V4dHJhX3ByZXNpemUodm9pZClcbiB7XG4gXHRjb25zdCBfX3UzMiBtYXhfZW50cmllcyA9IDEwMjQ7XG5AQCAtMTgwLDQgKzI5MCw3IEBAIHZvaWQgdGVzdF9yaGFzaCh2b2lkKVxuIFxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0ZXN0X3JoYXNoX2l0ZXJcIikpXG4gXHRcdHJoYXNoX2l0ZXJfdGVzdCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzXCIpKVxuK1x0XHRyaGFzaF9pdGVyX3N0cmVzcygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXG5pbmRleCBmYzJkYWMzYTcxOWU5Li4zZDcyMDE0MzBiYWJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXG5AQCAtOSwxMSArOSwxOCBAQFxuIFxuICNkZWZpbmUgRU5PRU5UIDJcbiAjZGVmaW5lIEVFWElTVCAxN1xuKyNkZWZpbmUgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTICgxVSBcdTAwM2NcdTAwM2MgMjApXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIFxuIGludCBlcnI7XG4gXG4rY29uc3Qgdm9sYXRpbGUgX191MzIgc3RyZXNzX3dvcmtpbmdfc2V0ID0gNDA5Njtcbitcbit2b2xhdGlsZSBfX3U2NCBzdHJlc3NfbWF4X3Zpc2l0cztcbit2b2xhdGlsZSBfX3U2NCBzdHJlc3Nfb3ZlcnJ1bnM7XG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7XG4rXG4gc3RydWN0IGVsZW0ge1xuIFx0Y2hhciBhcnJbMTI4XTtcbiBcdGludCB2YWw7XG5AQCAtMjcsNiArMzQsMjAgQEAgc3RydWN0IHtcbiBcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGVsZW0pO1xuIH0gcmhtYXAgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCBSSEFTSF9TVFJFU1NfTUFYX0VOVFJJRVMpO1xuK1x0X190eXBlKGtleSwgX191MzIpO1xuK1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4rfSBzdHJlc3NfcmhtYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4rc3RhdGljIF9fdTY0IHN0cmVzc19pdGVyX2NiKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXG4rXHRcdFx0ICAgIHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwic3lzY2FsbFwiKVxuIGludCB0ZXN0X3JoYXNoX2xvb2t1cF91cGRhdGUodm9pZCAqY3R4KVxuIHtcbkBAIC0yNDYsMyArMjY3LDIzIEBAIGludCB0ZXN0X3JoYXNoX2RlbGV0ZV9ub25leGlzdGVudCh2b2lkICpjdHgpXG4gXHRlcnIgPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgdGVzdF9yaGFzaF9pdGVyX3N0cmVzcyh2b2lkICpjdHgpXG4re1xuK1x0LypcbitcdCAqIENvbmN1cnJlbnQgcmVoYXNoIG1heSBwcm9kdWNlIGR1cGxpY2F0ZSB2aXNpdHMuIENoZWNrIHRoYXQgdGhlXG4rXHQgKiBoZWxwZXIgc3RpbGwgZ2l2ZXMgb25lIHdhbGsgYSBmaW5pdGUgY2FsbGJhY2sgYm91bmQ7IG5vIHNuYXBzaG90XG4rXHQgKiBvciB1bmlxdWUtdmlzaXQgZ3VhcmFudGVlIGlzIGV4cGVjdGVkIGhlcmUuXG4rXHQgKi9cbitcdGxvbmcgdmlzaXRzO1xuK1xuK1x0dmlzaXRzID0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNnN0cmVzc19yaG1hcCwgc3RyZXNzX2l0ZXJfY2IsIE5VTEwsIDApO1xuK1x0aWYgKHZpc2l0cyBcdTAwM2Ugc3RyZXNzX21heF92aXNpdHMpXG4rXHRcdHN0cmVzc19tYXhfdmlzaXRzID0gdmlzaXRzO1xuK1x0aWYgKHZpc2l0cyBcdTAwM2Ugc3RyZXNzX3dvcmtpbmdfc2V0KVxuK1x0XHRzdHJlc3Nfb3ZlcnJ1bnMrKztcbitcdGlmICh2aXNpdHMgPT0gc3RyZXNzX3dvcmtpbmdfc2V0KVxuK1x0XHRzdHJlc3NfZnVsbF93YWxrcysrO1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDU6NTAuMzE3NTU4OTQ5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMTg2NjQxNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlIGRpZmYgYWZmZWN0cyBga2VybmVsL2JwZi9oYXNodGFiLmNgLCB3aGljaCBpcyBhIGNvcmUgQlBGIGNvbXBvbmVudCwgYW5kIHRoZSBzZWxmdGVzdHM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jYC4gUmlnaHQsIHNvIHRoaXMgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGhhc2ggdGFibGUgYmVoYXZpb3IgYW5kIHRoZSBhc3NvY2lhdGVkIHRlc3RzLlxuXG5NeSBmaXJzdCBzdGVwIGlzIHRvIGZvY3VzIG9uIHRoZSBrZXJuZWwtc2lkZSBjaGFuZ2UgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSdsbCB3YW50IHRvIGdldCBhIGxvb2sgYXQgYXJvdW5kIGxpbmUgMzE5OC4gRWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzaG91bGQgZG8gdGhlIHRyaWNrOyBJIGp1c3QgbmVlZCB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBhZmZlY3RlZCBjb2RlIGFuZCBzZWUgd2hhdCBtb2RpZmljYXRpb25zIHdlcmUgaW50cm9kdWNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgYWx0ZXJlZCBpbiB0aGlzIGNydWNpYWwgYXJlYS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHdpbGwgbGlrZWx5IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDY6NDMuNTA0MjA0MDM3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ0NTUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTc4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTk1OnN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5Ni1cXHRcXHRcXHRcXHR2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MTY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMwLVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUzMTpcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMyLVxcdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDY6NDMuODk4NjY1MDk3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDY3NjY4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIGxpbmVzIG9mIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBIYXNodGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDMxOTAgdG8gMzI0MC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBzZWN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiBob3cgdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBoYXNodGFibGUgaW1wbGVtZW50YXRpb24gb3BlcmF0ZXMuIEknbGwgcmVhZCB0aHJvdWdoIHRoZXNlIGxpbmVzIGNhcmVmdWxseSwgbG9va2luZyBmb3IgcGF0dGVybnMsIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlZmluZXMgaXRzIGJlaGF2aW9yLiBJJ20gZ29pbmcgdG8gcGF5IGF0dGVudGlvbiB0byBob3cgdGhlIG9wZXJhdGlvbnMgYWZmZWN0IG92ZXJhbGwgcGVyZm9ybWFuY2UgYXMgd2VsbC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBlaXRoZXIgZWxlbWVudCBpbnNlcnRpb24sIHJldHJpZXZhbCwgb3IgZGVsZXRpb24gd2l0aGluIHRoZSB0YWJsZSwgb3IgcG9zc2libHkgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyBvZiB0aGUgaGFzaHRhYmxlLiBNeSBnb2FsIGlzIHRvIGV4dHJhY3QgdGhlIGNvcmUgbG9naWMgYmVpbmcgcGVyZm9ybWVkIGJ5IHRoZXNlIGxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDY6NDguOTQ1NDM0MjQxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTkwOlxcdFxcdHNlcV9wdXRzKG0sIFxcXCI6IFxcXCIpO1xcbjMxOTE6XFx0XFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQsIHZhbHVlLCBtKTtcXG4zMTkyOlxcdFxcdHNlcV9wdXRjKG0sICdcXFxcbicpO1xcbjMxOTM6XFx0fVxcbjMxOTQ6XFx0XFxuMzE5NTpcXHRzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbjMxOTY6XFx0XFx0XFx0XFx0XFx0dm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpXFxuMzE5NzpcXHR7XFxuMzE5ODpcXHRcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuMzE5OTpcXHRcXHR2b2lkICpwcmV2X2tleSA9IE5VTEw7XFxuMzIwMDpcXHRcXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcXG4zMjAxOlxcdFxcdHUzMiB2aXNpdF9idWRnZXQ7XFxuMzIwMjpcXHRcXHR1MzIgbnVtX2VsZW1zID0gMDtcXG4zMjAzOlxcdFxcdHU2NCByZXQgPSAwO1xcbjMyMDQ6XFx0XFxuMzIwNTpcXHRcXHRjYW50X21pZ3JhdGUoKTtcXG4zMjA2OlxcdFxcbjMyMDc6XFx0XFx0aWYgKGZsYWdzICE9IDApXFxuMzIwODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMjA5OlxcdFxcbjMyMTA6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjMyMTE6XFx0XFx0LypcXG4zMjEyOlxcdFxcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxcbjMyMTM6XFx0XFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuMzIxNDpcXHRcXHQgKiBlbGVtZW50cyB2aXNpdGVkLlxcbjMyMTU6XFx0XFx0ICovXFxuMzIxNjpcXHRcXHR2aXNpdF9idWRnZXQgPSBhdG9taWNfcmVhZChcXHUwMDI2cmh0YWItXFx1MDAzZWh0Lm5lbGVtcyk7XFxuMzIxNzpcXHRcXHR3aGlsZSAobnVtX2VsZW1zIFxcdTAwM2MgdmlzaXRfYnVkZ2V0IFxcdTAwMjZcXHUwMDI2XFxuMzIxODpcXHRcXHQgICAgICAgKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcXG4zMjE5OlxcdFxcdFxcdGlmIChJU19FUlIoZWxlbSkpXFxuMzIyMDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMjIxOlxcdFxcdFxcdG51bV9lbGVtcysrO1xcbjMyMjI6XFx0XFx0XFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsXFxuMzIyMzpcXHRcXHRcXHRcXHRcXHQgICh1NjQpKGxvbmcpZWxlbS1cXHUwMDNlZGF0YSxcXG4zMjI0OlxcdFxcdFxcdFxcdFxcdCAgKHU2NCkobG9uZylyaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpLFxcbjMyMjU6XFx0XFx0XFx0XFx0XFx0ICAodTY0KShsb25nKWNhbGxiYWNrX2N0eCwgMCk7XFxuMzIyNjpcXHRcXHRcXHRpZiAocmV0KVxcbjMyMjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzIyODpcXHRcXG4zMjI5OlxcdFxcdFxcdHByZXZfa2V5ID0gZWxlbS1cXHUwMDNlZGF0YTtcXHQvKiB2YWxpZCB3aGlsZSBSQ1UgaGVsZCAqL1xcbjMyMzA6XFx0XFx0fVxcbjMyMzE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzIzMjpcXHRcXG4zMjMzOlxcdFxcdHJldHVybiBudW1fZWxlbXM7XFxuMzIzNDpcXHR9XFxuMzIzNTpcXHRcXG4zMjM2OlxcdHN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbjMyMzc6XFx0e1xcbjMyMzg6XFx0XFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbjMyMzk6XFx0XFx0dTY0IG51bV9lbnRyaWVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0Njo0OC45NDU1NzkzODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNjU4Njg1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHN0YWJpbGl6aW5nIHRoZSBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzLiBUaGUgY29yZSBjaGFuZ2UgbGltaXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdmlzaXRlZCBkdXJpbmcgaXRlcmF0aW9uIHRvIHRoZSBjdXJyZW50IG51bWJlciBvZiBlbGVtZW50cyAoYGF0b21pY19yZWFkKFx1MDAyNnJodGFiLVx1MDAzZWh0Lm5lbGVtcylgKSBpbiB0aGUgcmhhc2h0YWJsZS4gUHJldmlvdXNseSwgd2Ugcmlza2VkIGluZmluaXRlIGxvb3BzIG9yIGluZWZmaWNpZW50IGl0ZXJhdGlvbnMgaWYgdGhlcmUgd2VyZSBjb25jdXJyZW50IHVwZGF0ZXMgaGFwcGVuaW5nIHRvIHRoZSBtYXAuIFRoZXkndmUgYWxzbyBhZGRlZCBzdHJlc3MgdGVzdHMgdG8gdmFsaWRhdGUgdGhpcyBmaXguXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGxldCdzIHNlZSBpZiB0aGlzIGNyZWF0ZXMgYW55IEtNU0FOIGNvbmNlcm5zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBkb2Vzbid0ICpzZWVtKiBsaWtlIGl0IHdpbGwuIEknbSBmb2N1c2luZyBvbiB0aGUgS01TQU4gY3JpdGVyaWE6IGFyZSB3ZSBzZW5kaW5nIG9yIG1vZGlmeWluZyBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGhhdmUgdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zZWQgdG8gdXNlcnNwYWNlPyBBcmUgdGhlcmUgYW55IGJyYW5jaGVzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBcmUgbmV3IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbml0aWFsaXplZCBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcz8gRG9lcyB0aGUgcGF0Y2ggbWVzcyB3aXRoIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgZ2l2ZSByZWFkIGFjY2VzcyB0byB1bmluaXRhbGl6ZWQgZGF0YT8gSXMgdGhlcmUgYW55IGtpbmQgb2YgaW5mb3JtYXRpb24gbGVhaywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIHBhZGRpbmcgaXNzdWVzP1xuXG5Oby4gYHZpc2l0X2J1ZGdldGAgaXMgcmVhZCBmcm9tIHRoZSBgYXRvbWljX3JlYWQoKWAgZnVuY3Rpb24sIGFuZCBpcyBpbml0aWFsaXplZC4gYG51bV9lbGVtc2AgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSXQncyBqdXN0IGEgbG9vcCBib3VuZCBjaGVjayB0byBwcmV2ZW50IHVuYm91bmRlZCBpdGVyYXRpb24uIEl0IGlzIGFsbCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrLiBJIHNlZSB0aGF0IGB2aXNpdF9idWRnZXRgIGlzIGFzc2lnbmVkIHVzaW5nIGBhdG9taWNfcmVhZCgpYCwgYG51bV9lbGVtc2AgaXMgc2V0IHRvIHplcm8sIGFuZCBgcHJldl9rZXlgIGlzIHNldCB0byBOVUxMLiBUaGUgcmV0dXJuIHZhbHVlLCBgbnVtX2VsZW1zYCwgaXMgYWxzbyBpbml0aWFsaXplZC4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFwcGVhcnMgdG8gYmUgcmVhZCBvciBleHBvc2VkLiBBbnkgY29uY3VycmVuY3kgb3IgUkNVIHJlbGF0ZWQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciB0b29scy4gSSBhbSBub3Qgc2VlaW5nIGFueSBpc3N1ZXMuXG5cbk9rYXksIGxldCBtZSBwdXQgdGhpcyBpbnRvIGEgZm9ybWFsIGFyZ3VtZW50OlxuXG4xLiAgKipQYXRjaCBGdW5jdGlvbjoqKiBUaGUgcGF0Y2ggYWRkcyBhIGB2aXNpdF9idWRnZXRgIGxpbWl0IHVzaW5nIGBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpYCB0byBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgd2hlbiBpdGVyYXRpbmcgb3ZlciBlbGVtZW50cyBpbiBlQlBGIGBCUEZfTUFQX1RZUEVfUkhBU0hgLiBUaGlzIGlzIHRvIHByZXZlbnQgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG1vZGlmaWNhdGlvbnMsIGFuZCBpdCBpbmNsdWRlcyBhZGRlZCBzZWxmdGVzdHMgZm9yIHZhbGlkYXRpb24uXG4yLiAgKipLTVNBTiBBcHBsaWNhYmlsaXR5OioqIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggKm9ubHkqIGludHJvZHVjZXMgbG9jYWwgdmFyaWFibGVzIChgdmlzaXRfYnVkZ2V0YCwgYG51bV9lbGVtc2ApLCB0aGF0IGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgYm91bmRzLWNoZWNrZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgY29weSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS5cbjMuICAqKktBU0FOL1N0YW5kYXJkIFRvb2xzIEFwcGxpY2FiaWxpdHk6KiogQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIGNvbmN1cnJlbmN5LCBSQ1Ugb2JqZWN0IGxpZmV0aW1lcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVyaW5nIHJoYXNodGFibGUgdHJhdmVyc2FsIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlndXJhdGlvbnMuXG40LiAgKipDb25jbHVzaW9uOioqIFRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBMZXQncyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTAxLCJPdXRwdXRUb2tlbnMiOjIxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ3OjAwLjExMTQ1MTA3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGJ5IGJvdW5kaW5nIHRoZSBpdGVyYXRpb24gbG9vcCB3aXRoIGEgYHZpc2l0X2J1ZGdldGAgZGVyaXZlZCBmcm9tIGBhdG9taWNfcmVhZChcXHUwMDI2cmh0YWItXFx1MDAzZWh0Lm5lbGVtcylgLCBhbmQgYWRkcyBjb3JyZXNwb25kaW5nIHN0cmVzcyBzZWxmdGVzdHMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBleHBvc2VkLiBMb2NhbCB2YXJpYWJsZXMgYHZpc2l0X2J1ZGdldGAgYW5kIGBudW1fZWxlbXNgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFuZCBtYW5pcHVsYXRlZCBhcyBzY2FsYXIgaW50ZWdlciB0eXBlcy5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzIGFyZSBleHBvc2VkIG9yIGNoZWNrZWQuXFxuMy4gQW55IGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGNvbmNlcm5zIGludm9sdmluZyBSQ1UtcHJvdGVjdGVkIHJoYXNodGFibGUgZWxlbWVudHMgYXJlIGFkZHJlc3NlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTG9ja2RlcCBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBieSBib3VuZGluZyB0aGUgaXRlcmF0aW9uIGxvb3Agd2l0aCBhIGB2aXNpdF9idWRnZXRgIGRlcml2ZWQgZnJvbSBgYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcyBhcmUgZXhwb3NlZCBvciBjaGVja2VkLlxcbjMuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBjb25jZXJucyBpbnZvbHZpbmcgUkNVLXByb3RlY3RlZCByaGFzaHRhYmxlIGVsZW1lbnRzIGFyZSBhZGRyZXNzZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExvY2tkZXAgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7lhn7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 17:32:13 +0000 UTC FinishedAt: 2026-08-31 17:47:02 +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": "c20313e98b04ce543936431b6122dd639d3a8346", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c20313e98b04ce543936431b6122dd639d3a8346", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_for_each_map_elem", "bpf_each_rhash_elem" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9mb3JfZWFjaF9tYXBfZWxlbSYjMzQ7LAogICAgJiMzNDticGZfZWFjaF9yaGFzaF9lbGVtJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBieSBib3VuZGluZyB0aGUgaXRlcmF0aW9uIGxvb3Agd2l0aCBhIGB2aXNpdF9idWRnZXRgIGRlcml2ZWQgZnJvbSBgYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKWAsIGFuZCBhZGRzIGNvcnJlc3BvbmRpbmcgc3RyZXNzIHNlbGZ0ZXN0cy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQuIExvY2FsIHZhcmlhYmxlcyBgdmlzaXRfYnVkZ2V0YCBhbmQgYG51bV9lbGVtc2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmlwdWxhdGVkIGFzIHNjYWxhciBpbnRlZ2VyIHR5cGVzLlxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcyBhcmUgZXhwb3NlZCBvciBjaGVja2VkLlxuMy4gQW55IGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGNvbmNlcm5zIGludm9sdmluZyBSQ1UtcHJvdGVjdGVkIHJoYXNodGFibGUgZWxlbWVudHMgYXJlIGFkZHJlc3NlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTG9ja2RlcCBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2VhY2hfcmhhc2hfZWxlbSgpYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIHRvIGVuZm9yY2UgYW4gaXRlcmF0aW9uIGJ1ZGdldCBiYXNlZCBvbiBhdG9taWMgYG5lbGVtc2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzIHZpYSBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtKClgLiBUaGlzIGJvdW5kcyB0aGUgaXRlcmF0aW9uIGxvb3AgYW5kIHByZXZlbnRzIHVuYm91bmRlZCBpdGVyYXRpb25zIGR1cmluZyBjb25jdXJyZW50IG1hcCBvcGVyYXRpb25zLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzozMzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCBkNDBjYjVkZDQ0NmNhLi4yY2FkNjdjOTAxNTQzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMzE5OCw3ICYjNDM7MzE5OCw4IEBAIHN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXG4gXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4gXHR2b2lkICpwcmV2X2tleSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcbi1cdGludCBudW1fZWxlbXMgPSAwO1xuJiM0MztcdHUzMiB2aXNpdF9idWRnZXQ7XG4mIzQzO1x0dTMyIG51bV9lbGVtcyA9IDA7XG4gXHR1NjQgcmV0ID0gMDtcbiBcbiBcdGNhbnRfbWlncmF0ZSgpO1xuQEAgLTMyMTIsNyAmIzQzOzMyMTMsOSBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxuIFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXG4gXHQgKiBlbGVtZW50cyB2aXNpdGVkLlxuIFx0ICovXG4tXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBwcmV2X2tleSkpKSB7XG4mIzQzO1x0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbiYjNDM7XHR3aGlsZSAobnVtX2VsZW1zIFx1MDAzYyB2aXNpdF9idWRnZXQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIChlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcHJldl9rZXkpKSkge1xuIFx0XHRpZiAoSVNfRVJSKGVsZW0pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRudW1fZWxlbXMmIzQzOyYjNDM7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXG5pbmRleCA5OGJiNjY5MDdiN2Y3Li5mMWEwYThlM2ZjMWFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xuQEAgLTMsMTIgJiM0MzszLDE2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3JoYXNoLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gXG4mIzQzOyNkZWZpbmUgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TXHQoM1VMTCAqIDEwMDAwMDAwMDBVTEwpXG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJoYXNoX3J1bihjb25zdCBjaGFyICpwcm9nX25hbWUpXG4ge1xuIFx0c3RydWN0IHJoYXNoICpza2VsO1xuQEAgLTUzLDYgJiM0Mzs1NywxMTIgQEAgc3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXG4gXHRcdFx0ICAgICAgc2l6ZW9mKF9fdTMyKSwgc2l6ZW9mKF9fdTY0KSwgbWF4X2VudHJpZXMsIFx1MDAyNm9wdHMpO1xuIH1cbiBcbiYjNDM7c3RydWN0IHJoYXNoX3N0cmVzc19hcmcge1xuJiM0MztcdGludCBtYXBfZmQ7XG4mIzQzO1x0YXRvbWljX2Jvb2wgKnN0b3A7XG4mIzQzO1x0X191MzIgbnJfa2V5cztcbiYjNDM7XHRfX3UzMiBzZWVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnJoYXNoX3N0cmVzc191cGRhdGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByaGFzaF9zdHJlc3NfYXJnICphcmcgPSBkYXRhO1xuJiM0MztcdF9fdTY0IHZhbHVlID0gMDtcbiYjNDM7XHRfX3UzMiBrZXk7XG4mIzQzO1x0X191MzIgaTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFhdG9taWNfbG9hZChhcmctXHUwMDNlc3RvcCkpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZy1cdTAwM2Vucl9rZXlzIFx1MDAyNlx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctXHUwMDNlc2VlZCkgJSBhcmctXHUwMDNlbnJfa2V5cztcbiYjNDM7XHRcdFx0YnBmX21hcF91cGRhdGVfZWxlbShhcmctXHUwMDNlbWFwX2ZkLCBcdTAwMjZrZXksIFx1MDAyNnZhbHVlLCBCUEZfQU5ZKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZy1cdTAwM2Vucl9rZXlzIFx1MDAyNlx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctXHUwMDNlc2VlZCkgJSBhcmctXHUwMDNlbnJfa2V5cztcbiYjNDM7XHRcdFx0YnBmX21hcF9kZWxldGVfZWxlbShhcmctXHUwMDNlbWFwX2ZkLCBcdTAwMjZrZXkpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJoYXNoX2l0ZXJfc3RyZXNzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgcmhhc2ggKnNrZWwgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCByaGFzaF9zdHJlc3NfYXJnIGFyZ3NbMl07XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdGF0b21pY19ib29sIHN0b3AgPSBmYWxzZTtcbiYjNDM7XHRib29sIHJhbiA9IGZhbHNlO1xuJiM0MztcdF9fdTY0IHN0YXJ0O1xuJiM0MztcdHB0aHJlYWRfdCB0aHJlYWRzWzJdO1xuJiM0MztcdGJvb2wgY3JlYXRlZFsyXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiYjNDM7XHRpbnQgbnJfY3B1cztcbiYjNDM7XHRfX3UzMiB3b3JraW5nX3NldDtcbiYjNDM7XHRpbnQgbWFwX2ZkLCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdG5yX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChucl9jcHVzLCAwLCBcJiMzNDtudW1fcG9zc2libGVfY3B1c1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5yX2NwdXMgXHUwMDNjIDIpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSByaGFzaF9fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtyaGFzaF9fb3BlbiBzdHJlc3NcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHdvcmtpbmdfc2V0ID0gc2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlc3RyZXNzX3dvcmtpbmdfc2V0O1xuJiM0MztcbiYjNDM7XHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2tlbC1cdTAwM2VvYmosXG4mIzQzO1x0XHRcdFx0XHRcdFwmIzM0O3Rlc3Rfcmhhc2hfaXRlcl9zdHJlc3NcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihwcm9nLCBcJiMzNDtmaW5kIHN0cmVzcyBwcm9ncmFtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHByb2csIHRydWUpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSByaGFzaF9fbG9hZChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3N0cmVzcyBza2VsX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuc3RyZXNzX3JobWFwKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRocmVhZHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0YXJnc1tpXS5tYXBfZmQgPSBtYXBfZmQ7XG4mIzQzO1x0XHRhcmdzW2ldLnN0b3AgPSBcdTAwMjZzdG9wO1xuJiM0MztcdFx0YXJnc1tpXS5ucl9rZXlzID0gd29ya2luZ19zZXQ7XG4mIzQzO1x0XHRhcmdzW2ldLnNlZWQgPSBpICogOTc3O1xuJiM0MztcdFx0ZXJyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNmFyZ3NbaV0pO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gc3RvcF90aHJlYWRzO1xuJiM0MztcdFx0Y3JlYXRlZFtpXSA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdGFydCA9IGdldF90aW1lX25zKCk7XG4mIzQzO1x0d2hpbGUgKGdldF90aW1lX25zKCkgLSBzdGFydCBcdTAwM2MgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7XG4mIzQzO1x0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2b3B0cyk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3N0cmVzcyBwcm9nIHJ1blwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gc3RvcF90aHJlYWRzO1xuJiM0MztcdFx0cmFuID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztzdG9wX3RocmVhZHM6XG4mIzQzO1x0YXRvbWljX3N0b3JlKFx1MDAyNnN0b3AsIHRydWUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGNyZWF0ZWRbaV0pXG4mIzQzO1x0XHRcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVyciB8fCAhcmFuKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX21heF92aXNpdHMsIDAsIFwmIzM0O3N0cmVzcyBjYWxsYmFjayB2aXNpdHNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJlc3NfZnVsbF93YWxrcywgMCwgXCYjMzQ7c3RyZXNzIGZ1bGwgd2Fsa3NcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJlc3Nfb3ZlcnJ1bnMsIDAsIFwmIzM0O3N0cmVzcyBjYWxsYmFjayBib3VuZFwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O3N0cmVzcyBtYXggY2FsbGJhY2sgdmlzaXRzOiAlbGx1IChsaW1pdCAldSlcXG5cJiMzNDssXG4mIzQzO1x0ICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX21heF92aXNpdHMsXG4mIzQzO1x0ICAgICAgIHdvcmtpbmdfc2V0KTtcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRyaGFzaF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCByaGFzaF9tYXBfZXh0cmFfcHJlc2l6ZSh2b2lkKVxuIHtcbiBcdGNvbnN0IF9fdTMyIG1heF9lbnRyaWVzID0gMTAyNDtcbkBAIC0xODAsNCAmIzQzOzI5MCw3IEBAIHZvaWQgdGVzdF9yaGFzaCh2b2lkKVxuIFxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dGVzdF9yaGFzaF9pdGVyXCYjMzQ7KSlcbiBcdFx0cmhhc2hfaXRlcl90ZXN0KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3Rlc3Rfcmhhc2hfaXRlcl9zdHJlc3NcJiMzNDspKVxuJiM0MztcdFx0cmhhc2hfaXRlcl9zdHJlc3MoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY1xuaW5kZXggZmMyZGFjM2E3MTllOS4uM2Q3MjAxNDMwYmFiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY1xuQEAgLTksMTEgJiM0Mzs5LDE4IEBAXG4gXG4gI2RlZmluZSBFTk9FTlQgMlxuICNkZWZpbmUgRUVYSVNUIDE3XG4mIzQzOyNkZWZpbmUgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTICgxVSBcdTAwM2NcdTAwM2MgMjApXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiBcbiBpbnQgZXJyO1xuIFxuJiM0Mztjb25zdCB2b2xhdGlsZSBfX3UzMiBzdHJlc3Nfd29ya2luZ19zZXQgPSA0MDk2O1xuJiM0MztcbiYjNDM7dm9sYXRpbGUgX191NjQgc3RyZXNzX21heF92aXNpdHM7XG4mIzQzO3ZvbGF0aWxlIF9fdTY0IHN0cmVzc19vdmVycnVucztcbiYjNDM7dm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7XG4mIzQzO1xuIHN0cnVjdCBlbGVtIHtcbiBcdGNoYXIgYXJyWzEyOF07XG4gXHRpbnQgdmFsO1xuQEAgLTI3LDYgJiM0MzszNCwyMCBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7XG4gfSByaG1hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIFJIQVNIX1NUUkVTU19NQVhfRU5UUklFUyk7XG4mIzQzO1x0X190eXBlKGtleSwgX191MzIpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IHN0cmVzc19yaG1hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIF9fdTY0IHN0cmVzc19pdGVyX2NiKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXG4mIzQzO1x0XHRcdCAgICB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBpbnQgdGVzdF9yaGFzaF9sb29rdXBfdXBkYXRlKHZvaWQgKmN0eClcbiB7XG5AQCAtMjQ2LDMgJiM0MzsyNjcsMjMgQEAgaW50IHRlc3Rfcmhhc2hfZGVsZXRlX25vbmV4aXN0ZW50KHZvaWQgKmN0eClcbiBcdGVyciA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IHRlc3Rfcmhhc2hfaXRlcl9zdHJlc3Modm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDb25jdXJyZW50IHJlaGFzaCBtYXkgcHJvZHVjZSBkdXBsaWNhdGUgdmlzaXRzLiBDaGVjayB0aGF0IHRoZVxuJiM0MztcdCAqIGhlbHBlciBzdGlsbCBnaXZlcyBvbmUgd2FsayBhIGZpbml0ZSBjYWxsYmFjayBib3VuZDsgbm8gc25hcHNob3RcbiYjNDM7XHQgKiBvciB1bmlxdWUtdmlzaXQgZ3VhcmFudGVlIGlzIGV4cGVjdGVkIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0bG9uZyB2aXNpdHM7XG4mIzQzO1xuJiM0MztcdHZpc2l0cyA9IGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZzdHJlc3NfcmhtYXAsIHN0cmVzc19pdGVyX2NiLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAodmlzaXRzIFx1MDAzZSBzdHJlc3NfbWF4X3Zpc2l0cylcbiYjNDM7XHRcdHN0cmVzc19tYXhfdmlzaXRzID0gdmlzaXRzO1xuJiM0MztcdGlmICh2aXNpdHMgXHUwMDNlIHN0cmVzc193b3JraW5nX3NldClcbiYjNDM7XHRcdHN0cmVzc19vdmVycnVucyYjNDM7JiM0Mzs7XG4mIzQzO1x0aWYgKHZpc2l0cyA9PSBzdHJlc3Nfd29ya2luZ19zZXQpXG4mIzQzO1x0XHRzdHJlc3NfZnVsbF93YWxrcyYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZm9yX2VhY2hfbWFwX2VsZW0mIzM0OywKICAgICYjMzQ7YnBmX2VhY2hfcmhhc2hfZWxlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2VhY2hfcmhhc2hfZWxlbSgpYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIHRvIGVuZm9yY2UgYW4gaXRlcmF0aW9uIGJ1ZGdldCBiYXNlZCBvbiBhdG9taWMgYG5lbGVtc2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzIHZpYSBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtKClgLiBUaGlzIGJvdW5kcyB0aGUgaXRlcmF0aW9uIGxvb3AgYW5kIHByZXZlbnRzIHVuYm91bmRlZCBpdGVyYXRpb25zIGR1cmluZyBjb25jdXJyZW50IG1hcCBvcGVyYXRpb25zLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzozMzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggZDQwY2I1ZGQ0NDZjYS4uMmNhZDY3YzkwMTU0MyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTMxOTgsNyAmIzQzOzMxOTgsOCBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLAogCXN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTsKIAl2b2lkICpwcmV2X2tleSA9IE5VTEw7CiAJc3RydWN0IHJodGFiX2VsZW0gKmVsZW07Ci0JaW50IG51bV9lbGVtcyA9IDA7CiYjNDM7CXUzMiB2aXNpdF9idWRnZXQ7CiYjNDM7CXUzMiBudW1fZWxlbXMgPSAwOwogCXU2NCByZXQgPSAwOwogCiAJY2FudF9taWdyYXRlKCk7CkBAIC0zMjEyLDcgJiM0MzszMjEzLDkgQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbiwKIAkgKiBlbGVtZW50cyBhcmUgZGVsZXRlZC9pbnNlcnRlZCwgdGhlcmUgbWF5IGJlIG1pc3NlZCBvciBkdXBsaWNhdGUKIAkgKiBlbGVtZW50cyB2aXNpdGVkLgogCSAqLwotCXdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoJmFtcDtyaHRhYi0mZ3Q7aHQsIHByZXZfa2V5KSkpIHsKJiM0MzsJdmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoJmFtcDtyaHRhYi0mZ3Q7aHQubmVsZW1zKTsKJiM0MzsJd2hpbGUgKG51bV9lbGVtcyAmbHQ7IHZpc2l0X2J1ZGdldCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoJmFtcDtyaHRhYi0mZ3Q7aHQsIHByZXZfa2V5KSkpIHsKIAkJaWYgKElTX0VSUihlbGVtKSkKIAkJCWJyZWFrOwogCQludW1fZWxlbXMmIzQzOyYjNDM7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMKaW5kZXggOThiYjY2OTA3YjdmNy4uZjFhMGE4ZTNmYzFhYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jCkBAIC0zLDEyICYjNDM7MywxNiBAQAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGF0b21pYy5oJmd0OwogI2luY2x1ZGUgJiMzNDtyaGFzaC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfaXRlcl9icGZfcmhhc2hfbWFwLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAKJiM0MzsjZGVmaW5lIFJIQVNIX1NUUkVTU19EVVJBVElPTl9OUwkoM1VMTCAqIDEwMDAwMDAwMDBVTEwpCiYjNDM7CiBzdGF0aWMgdm9pZCByaGFzaF9ydW4oY29uc3QgY2hhciAqcHJvZ19uYW1lKQogewogCXN0cnVjdCByaGFzaCAqc2tlbDsKQEAgLTUzLDYgJiM0Mzs1NywxMTIgQEAgc3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpCiAJCQkgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgJmFtcDtvcHRzKTsKIH0KIAomIzQzO3N0cnVjdCByaGFzaF9zdHJlc3NfYXJnIHsKJiM0MzsJaW50IG1hcF9mZDsKJiM0MzsJYXRvbWljX2Jvb2wgKnN0b3A7CiYjNDM7CV9fdTMyIG5yX2tleXM7CiYjNDM7CV9fdTMyIHNlZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcmhhc2hfc3RyZXNzX3VwZGF0ZSh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHJoYXNoX3N0cmVzc19hcmcgKmFyZyA9IGRhdGE7CiYjNDM7CV9fdTY0IHZhbHVlID0gMDsKJiM0MzsJX191MzIga2V5OwomIzQzOwlfX3UzMiBpOwomIzQzOwomIzQzOwl3aGlsZSAoIWF0b21pY19sb2FkKGFyZy0mZ3Q7c3RvcCkpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yX2tleXMgJmFtcDsmYW1wOyAhYXRvbWljX2xvYWQoYXJnLSZndDtzdG9wKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctJmd0O3NlZWQpICUgYXJnLSZndDtucl9rZXlzOwomIzQzOwkJCWJwZl9tYXBfdXBkYXRlX2VsZW0oYXJnLSZndDttYXBfZmQsICZhbXA7a2V5LCAmYW1wO3ZhbHVlLCBCUEZfQU5ZKTsKJiM0MzsJCX0KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yX2tleXMgJmFtcDsmYW1wOyAhYXRvbWljX2xvYWQoYXJnLSZndDtzdG9wKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctJmd0O3NlZWQpICUgYXJnLSZndDtucl9rZXlzOwomIzQzOwkJCWJwZl9tYXBfZGVsZXRlX2VsZW0oYXJnLSZndDttYXBfZmQsICZhbXA7a2V5KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmhhc2hfaXRlcl9zdHJlc3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByaGFzaCAqc2tlbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCByaGFzaF9zdHJlc3NfYXJnIGFyZ3NbMl07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJYXRvbWljX2Jvb2wgc3RvcCA9IGZhbHNlOwomIzQzOwlib29sIHJhbiA9IGZhbHNlOwomIzQzOwlfX3U2NCBzdGFydDsKJiM0MzsJcHRocmVhZF90IHRocmVhZHNbMl07CiYjNDM7CWJvb2wgY3JlYXRlZFsyXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7CiYjNDM7CWludCBucl9jcHVzOwomIzQzOwlfX3UzMiB3b3JraW5nX3NldDsKJiM0MzsJaW50IG1hcF9mZCwgZXJyLCBpOwomIzQzOwomIzQzOwlucl9jcHVzID0gbGliYnBmX251bV9wb3NzaWJsZV9jcHVzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG5yX2NwdXMsIDAsICYjMzQ7bnVtX3Bvc3NpYmxlX2NwdXMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChucl9jcHVzICZsdDsgMikgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSByaGFzaF9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtyaGFzaF9fb3BlbiBzdHJlc3MmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXdvcmtpbmdfc2V0ID0gc2tlbC0mZ3Q7cm9kYXRhLSZndDtzdHJlc3Nfd29ya2luZ19zZXQ7CiYjNDM7CiYjNDM7CXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShza2VsLSZndDtvYmosCiYjNDM7CQkJCQkJJiMzNDt0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIocHJvZywgJiMzNDtmaW5kIHN0cmVzcyBwcm9ncmFtJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHByb2csIHRydWUpOwomIzQzOwomIzQzOwllcnIgPSByaGFzaF9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3N0cmVzcyBza2VsX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuc3RyZXNzX3JobWFwKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlhcmdzW2ldLm1hcF9mZCA9IG1hcF9mZDsKJiM0MzsJCWFyZ3NbaV0uc3RvcCA9ICZhbXA7c3RvcDsKJiM0MzsJCWFyZ3NbaV0ubnJfa2V5cyA9IHdvcmtpbmdfc2V0OwomIzQzOwkJYXJnc1tpXS5zZWVkID0gaSAqIDk3NzsKJiM0MzsJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSwKJiM0MzsJCQkJICAgICAmYW1wO2FyZ3NbaV0pOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3B0aHJlYWRfY3JlYXRlJiMzNDspKQomIzQzOwkJCWdvdG8gc3RvcF90aHJlYWRzOwomIzQzOwkJY3JlYXRlZFtpXSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhcnQgPSBnZXRfdGltZV9ucygpOwomIzQzOwl3aGlsZSAoZ2V0X3RpbWVfbnMoKSAtIHN0YXJ0ICZsdDsgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7CiYjNDM7CQllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgJmFtcDtvcHRzKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzdHJlc3MgcHJvZyBydW4mIzM0OykpCiYjNDM7CQkJZ290byBzdG9wX3RocmVhZHM7CiYjNDM7CQlyYW4gPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7c3RvcF90aHJlYWRzOgomIzQzOwlhdG9taWNfc3RvcmUoJmFtcDtzdG9wLCB0cnVlKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KQomIzQzOwkJaWYgKGNyZWF0ZWRbaV0pCiYjNDM7CQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwomIzQzOwomIzQzOwlpZiAoZXJyIHx8ICFyYW4pCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3N0cmVzc19tYXhfdmlzaXRzLCAwLCAmIzM0O3N0cmVzcyBjYWxsYmFjayB2aXNpdHMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3N0cmVzc19mdWxsX3dhbGtzLCAwLCAmIzM0O3N0cmVzcyBmdWxsIHdhbGtzJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJlc3Nfb3ZlcnJ1bnMsIDAsICYjMzQ7c3RyZXNzIGNhbGxiYWNrIGJvdW5kJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDtzdHJlc3MgbWF4IGNhbGxiYWNrIHZpc2l0czogJWxsdSAobGltaXQgJXUpXG4mIzM0OywKJiM0MzsJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2tlbC0mZ3Q7YnNzLSZndDtzdHJlc3NfbWF4X3Zpc2l0cywKJiM0MzsJICAgICAgIHdvcmtpbmdfc2V0KTsKJiM0MztjbGVhbnVwOgomIzQzOwlyaGFzaF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByaGFzaF9tYXBfZXh0cmFfcHJlc2l6ZSh2b2lkKQogewogCWNvbnN0IF9fdTMyIG1heF9lbnRyaWVzID0gMTAyNDsKQEAgLTE4MCw0ICYjNDM7MjkwLDcgQEAgdm9pZCB0ZXN0X3JoYXNoKHZvaWQpCiAKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3Rlc3Rfcmhhc2hfaXRlciYjMzQ7KSkKIAkJcmhhc2hfaXRlcl90ZXN0KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGVzdF9yaGFzaF9pdGVyX3N0cmVzcyYjMzQ7KSkKJiM0MzsJCXJoYXNoX2l0ZXJfc3RyZXNzKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCmluZGV4IGZjMmRhYzNhNzE5ZTkuLjNkNzIwMTQzMGJhYmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCkBAIC05LDExICYjNDM7OSwxOCBAQAogCiAjZGVmaW5lIEVOT0VOVCAyCiAjZGVmaW5lIEVFWElTVCAxNwomIzQzOyNkZWZpbmUgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTICgxVSAmbHQ7Jmx0OyAyMCkKIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogCiBpbnQgZXJyOwogCiYjNDM7Y29uc3Qgdm9sYXRpbGUgX191MzIgc3RyZXNzX3dvcmtpbmdfc2V0ID0gNDA5NjsKJiM0MzsKJiM0Mzt2b2xhdGlsZSBfX3U2NCBzdHJlc3NfbWF4X3Zpc2l0czsKJiM0Mzt2b2xhdGlsZSBfX3U2NCBzdHJlc3Nfb3ZlcnJ1bnM7CiYjNDM7dm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7CiYjNDM7CiBzdHJ1Y3QgZWxlbSB7CiAJY2hhciBhcnJbMTI4XTsKIAlpbnQgdmFsOwpAQCAtMjcsNiAmIzQzOzM0LDIwIEBAIHN0cnVjdCB7CiAJX190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7CiB9IHJobWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCBSSEFTSF9TVFJFU1NfTUFYX0VOVFJJRVMpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gc3RyZXNzX3JobWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBfX3U2NCBzdHJlc3NfaXRlcl9jYihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLAomIzQzOwkJCSAgICB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBpbnQgdGVzdF9yaGFzaF9sb29rdXBfdXBkYXRlKHZvaWQgKmN0eCkKIHsKQEAgLTI0NiwzICYjNDM7MjY3LDIzIEBAIGludCB0ZXN0X3JoYXNoX2RlbGV0ZV9ub25leGlzdGVudCh2b2lkICpjdHgpCiAJZXJyID0gMDsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IHRlc3Rfcmhhc2hfaXRlcl9zdHJlc3Modm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQ29uY3VycmVudCByZWhhc2ggbWF5IHByb2R1Y2UgZHVwbGljYXRlIHZpc2l0cy4gQ2hlY2sgdGhhdCB0aGUKJiM0MzsJICogaGVscGVyIHN0aWxsIGdpdmVzIG9uZSB3YWxrIGEgZmluaXRlIGNhbGxiYWNrIGJvdW5kOyBubyBzbmFwc2hvdAomIzQzOwkgKiBvciB1bmlxdWUtdmlzaXQgZ3VhcmFudGVlIGlzIGV4cGVjdGVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsb25nIHZpc2l0czsKJiM0MzsKJiM0MzsJdmlzaXRzID0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtKCZhbXA7c3RyZXNzX3JobWFwLCBzdHJlc3NfaXRlcl9jYiwgTlVMTCwgMCk7CiYjNDM7CWlmICh2aXNpdHMgJmd0OyBzdHJlc3NfbWF4X3Zpc2l0cykKJiM0MzsJCXN0cmVzc19tYXhfdmlzaXRzID0gdmlzaXRzOwomIzQzOwlpZiAodmlzaXRzICZndDsgc3RyZXNzX3dvcmtpbmdfc2V0KQomIzQzOwkJc3RyZXNzX292ZXJydW5zJiM0MzsmIzQzOzsKJiM0MzsJaWYgKHZpc2l0cyA9PSBzdHJlc3Nfd29ya2luZ19zZXQpCiYjNDM7CQlzdHJlc3NfZnVsbF93YWxrcyYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBIYXNodGFibGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIGFuZCB0aGVyZSBhcmUgc29tZSBhc3NvY2lhdGVkIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuCgpGb2N1c2luZyBvbiB0aGUgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBjaGFuZ2UsIGF0IGEgZ2xhbmNlLCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGluIHRoZSBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgZnVuY3Rpb24uICBJdCBsb29rcyBsaWtlIGEgYHZpc2l0X2J1ZGdldGAgdmFyaWFibGUgaGFzIGJlZW4gaW50cm9kdWNlZCwgYW5kIHRoZSBsb29wIGNvbmRpdGlvbiBpcyBiZWluZyBhZGp1c3RlZC4gU3BlY2lmaWNhbGx5LCB0aGUgb2xkIGB3aGlsZWAgbG9vcCBjb25kaXRpb24gaGFzIGJlZW4gZXhwYW5kZWQgdG8gbm93IGluY2x1ZGUgYSBgbnVtX2VsZW1zICZsdDsgdmlzaXRfYnVkZ2V0YCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuCgpNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGlzIGludHJvZHVjZXMgc29tZSBraW5kIG9mIGl0ZXJhdGlvbiBsaW1pdCwgcG9zc2libHkgdG8gcHJldmVudCB1bmJvdW5kZWQgbG9vcHMgb3IgdG8gaW50cm9kdWNlIGZhaXJuZXNzLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVG8gY29uZmlybSBteSBpbml0aWFsIHRob3VnaHRzLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMzE5OCBvZiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgcHJvbXB0ZWQgdGhlIGNoYW5nZSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE5MDpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7OiBcJiMzNDspO1xuMzE5MTpcdFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkLCB2YWx1ZSwgbSk7XG4zMTkyOlx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbjMxOTM6XHR9XG4zMTk0Olx0XG4zMTk1Olx0c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbjMxOTY6XHRcdFx0XHRcdHZvaWQgKmNhbGxiYWNrX2N0eCwgdTY0IGZsYWdzKVxuMzE5NzpcdHtcbjMxOTg6XHRcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbjMxOTk6XHRcdHZvaWQgKnByZXZfa2V5ID0gTlVMTDtcbjMyMDA6XHRcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xuMzIwMTpcdFx0dTMyIHZpc2l0X2J1ZGdldDtcbjMyMDI6XHRcdHUzMiBudW1fZWxlbXMgPSAwO1xuMzIwMzpcdFx0dTY0IHJldCA9IDA7XG4zMjA0Olx0XG4zMjA1Olx0XHRjYW50X21pZ3JhdGUoKTtcbjMyMDY6XHRcbjMyMDc6XHRcdGlmIChmbGFncyAhPSAwKVxuMzIwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMyMDk6XHRcbjMyMTA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMyMTE6XHRcdC8qXG4zMjEyOlx0XHQgKiBCZXN0LWVmZm9ydCBpdGVyYXRpb246IGlmIHJoYXNodGFibGUgaXMgY29uY3VycmVudGx5IHJlc2l6ZWQgb3JcbjMyMTM6XHRcdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuMzIxNDpcdFx0ICogZWxlbWVudHMgdmlzaXRlZC5cbjMyMTU6XHRcdCAqL1xuMzIxNjpcdFx0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbjMyMTc6XHRcdHdoaWxlIChudW1fZWxlbXMgXHUwMDNjIHZpc2l0X2J1ZGdldCBcdTAwMjZcdTAwMjZcbjMyMTg6XHRcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbjMyMTk6XHRcdFx0aWYgKElTX0VSUihlbGVtKSlcbjMyMjA6XHRcdFx0XHRicmVhaztcbjMyMjE6XHRcdFx0bnVtX2VsZW1zJiM0MzsmIzQzOztcbjMyMjI6XHRcdFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsXG4zMjIzOlx0XHRcdFx0XHQgICh1NjQpKGxvbmcpZWxlbS1cdTAwM2VkYXRhLFxuMzIyNDpcdFx0XHRcdFx0ICAodTY0KShsb25nKXJodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKSxcbjMyMjU6XHRcdFx0XHRcdCAgKHU2NCkobG9uZyljYWxsYmFja19jdHgsIDApO1xuMzIyNjpcdFx0XHRpZiAocmV0KVxuMzIyNzpcdFx0XHRcdGJyZWFrO1xuMzIyODpcdFxuMzIyOTpcdFx0XHRwcmV2X2tleSA9IGVsZW0tXHUwMDNlZGF0YTtcdC8qIHZhbGlkIHdoaWxlIFJDVSBoZWxkICovXG4zMjMwOlx0XHR9XG4zMjMxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMyMzI6XHRcbjMyMzM6XHRcdHJldHVybiBudW1fZWxlbXM7XG4zMjM0Olx0fVxuMzIzNTpcdFxuMzIzNjpcdHN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuMzIzNzpcdHtcbjMyMzg6XHRcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbjMyMzk6XHRcdHU2NCBudW1fZW50cmllcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGVtcGxveWVkLiBNeSBndXQgdGVsbHMgbWUgaXQmIzM5O3MgY2VudHJhbCB0byBzb21ldGhpbmcsIGxpa2VseSByZWxhdGVkIHRvIGl0ZXJhdGluZyB0aHJvdWdoIGVsZW1lbnRzIHdpdGhpbiBhIHJhZGl4IGhhc2ggdGFibGUsIGJ1dCBsZXQmIzM5O3Mgbm90IGFzc3VtZS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb2RlYmFzZSYjMzk7cyB1c2FnZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgYnJvYWQgYXBwcm9hY2guIEkmIzM5O2xsIGV4ZWN1dGUgYSBxdWljayBncmVwIHRvIHNlYXJjaCBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgdGhlIHN0cmluZyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAuIEkmIzM5O2xsIGFsc28gZXhwYW5kIHRoZSBzY29wZSBvZiBteSBzZWFyY2guIEkmIzM5O2xsIHVzZSByZWxhdGVkIHRlcm1zLiBUaGluZ3MgbGlrZSBgcmh0YWJfbWFwX29wc2AsIGJlY2F1c2UgSSBzdXNwZWN0IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGEgbWFwIGltcGxlbWVudGF0aW9uIGFuZCBtYXkgYmUgYWNjZXNzZWQgdmlhIHRoZSBtYXAgb3BlcmF0aW9ucy4gQnJvYWQgc3Ryb2tlcyBmaXJzdCwgdGhlbiBJIGNhbiBkcmlsbCBkb3duIGlmIG5lZWRlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIGNvbnRleHQgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBnZXQgdGhhdCBzZWFyY2ggcnVubmluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZWFjaF9yaGFzaF9lbGVtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxOTU6c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxOTYtXHRcdFx0XHR2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTE2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzAtXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUzMTpcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZWFjaF9yaGFzaF9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUzMi1cdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTUzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGlzIEJQRiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IHNlZXMgYSBmZXcga2V5IGlkZW50aWZpZXJzIGZsYXNoaW5nOiBgQlBGX01BUF9UWVBFX1JIQVNIYCwgdGhlIGByaHRhYl9tYXBfb3BzYCBzdHJ1Y3R1cmUsIGFuZCB0aGUgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgZnVuY3Rpb24uIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGVzZSB0aHJlZSBhcmUgaGlnaGx5IGludGVycmVsYXRlZCwgYWxtb3N0IGNlcnRhaW5seSBmb3JtaW5nIHRoZSBjb3JlIG9mIGhvdyB0aGlzIHNwZWNpZmljIEJQRiBtYXAgdHlwZSBmdW5jdGlvbnMuCgpSaWdodCBub3csIG15IGd1dCBzYXlzIHRoaXMgaXMgbGlrZWx5IGEgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhlICYjMzQ7UkhBU0gmIzM0OyBpbW1lZGlhdGVseSBwb2ludHMgaW4gdGhhdCBkaXJlY3Rpb24uIFRoZSAmIzM0O29wcyYjMzQ7IHN0cnVjdHVyZSB0eXBpY2FsbHkgY29udGFpbnMgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoZSB2YXJpb3VzIG9wZXJhdGlvbnMgb24gdGhlIG1hcDogaW5zZXJ0aW5nLCBkZWxldGluZywgbG9va3VwLCBpdGVyYXRpb24gLSB0aGUgdXN1YWwgc3VzcGVjdHMuIEFuZCBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtYC4uLiB3ZWxsLCB0aGF04oCZcyBjbGVhcmx5IHRoZSBtZWNoYW5pc20gZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBzdG9yZWQgd2l0aGluIHRoZSBtYXAuIFNvLCB3aGF0IEkgbmVlZCB0byBkbyBpcyBkcmlsbCBkb3duIGFuZCBmaW5kIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkLiBJIHNob3VsZCBzZWFyY2ggZm9yIGVhY2ggb2YgdGhlbSwgc3RhcnRpbmcgd2l0aCB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFjcm8uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHNlYXJjaCB0aHJvdWdoIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTUFQX1RZUEVfUkhBU0gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcdEJQRl9NQVBfVFlQRV9SSEFTSCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVx0X19NQVhfQlBGX01BUF9UWVBFXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVx0XHQgKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XHRcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cdFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTI2LVx0XHQgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxMjc6XHRcdCBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIKVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cdFx0Z290byBwdXRfbWFwO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNTU9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyOTktXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMDpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMS1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTQtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNi1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMjYtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMyNzpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyOC1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDIwLVx0ICAgIGF0dHItXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSRU5BIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQyMTpcdCAgICBhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjItXHQgICAgYXR0ci1cdTAwM2VtYXBfZXh0cmEgIT0gMCkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0OTItXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ5MzpcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ5NC1cdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIyMTY9c3RhdGljIGludCBtYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMjc1LVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9QRVJDUFVfSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjI3NjpcdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3Ny1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODYwNT1zdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2NTMtXHRcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg2NTQ6XHRcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NjU1LVx0XHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXHRCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlx0QlBGX01BUF9UWVBFX1JIQVNILFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNTEtXHRfX01BWF9CUEZfTUFQX1RZUEVcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXHRcdCAqXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcdFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVx0XHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xOTgtXHRbQlBGX01BUF9UWVBFX0lOU05fQVJSQVldXHRcdD0gXCYjMzQ7aW5zbl9hcnJheVwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTk5Olx0W0JQRl9NQVBfVFlQRV9SSEFTSF1cdFx0XHQ9IFwmIzM0O3JoYXNoXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMDAtfTtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0yOTI9c3RhdGljIGludCBwcm9iZV9tYXBfY3JlYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cdFx0YnJlYWs7XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMy1cdFx0b3B0cy5tYXBfZmxhZ3NcdD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jPTM3PXN0YXRpYyB2b2lkIGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVx0YnBmX21hcF9fc2V0X3R5cGUoY3R4LnNrZWwtXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCwgbWFwX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01Mi1cdFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhjdHguc2tlbC1cdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz04MD1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgxLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcdGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0xNTE9c3RhdGljIHZvaWQgaGFzaG1hcF9sb29rdXBfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXHRtYXBfZmxhZ3MgPSBhcmdzLm1hcF9mbGFncztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MTY4Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY5LVx0XHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0yMTE9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MjEzOlx0aGFzaG1hcF9sb29rdXBfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM9MTU1PXN0YXRpYyB2b2lkIGh0YWJfbWVtX3NldHVwX2ltcGwoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4NC1cdGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhtYXAsIE1BWCg4MTkyLCA2NCAqIGVudi5ucl9jcHVzKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1Olx0aWYgKG1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMTg2LVx0XHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IH5CUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjIzMTpcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzItfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NTA9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTY6XHRyZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1JIQVNILCBcJiMzNDtyaGFzaF9leHRyYVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMtNTctXHRcdFx0ICAgICAgc2l6ZW9mKF9fdTMyKSwgc2l6ZW9mKF9fdTY0KSwgbWF4X2VudHJpZXMsIFx1MDAyNm9wdHMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmM9OD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jLTEwLVx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jPTI5PXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYzozMDpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMtMzEtXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmM9Mzc9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jOjM4Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYy0zOS1cdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBCUEYgTWFwIEl0ZXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIG1hcCBpdGVyYXRpb24gY2FsbGJhY2ssIGAubWFwX2Zvcl9lYWNoX2NhbGxiYWNrYCwgaXMgaW52b2tlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgbWVjaGFuaXNtIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIGEgQlBGIG1hcC4KCkkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZSBiYXNlIGZvciBpbnN0YW5jZXMgb2YgYG1hcF9mb3JfZWFjaF9jYWxsYmFja2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCB3aXRoaW4gd2hpY2ggYC5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgIGlzIGJlaW5nIHVzZWQuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIHN0cnVjdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9mb3JfZWFjaF9jYWxsYmFjayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xODAtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTgxOlx0bG9uZyAoKm1hcF9mb3JfZWFjaF9jYWxsYmFjaykoc3RydWN0IGJwZl9tYXAgKm1hcCxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTgyLVx0XHRcdFx0ICAgICBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzctXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3ODpcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfYXJyYXlfZWxlbSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzktXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg4NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwMi1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAzOlx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9hcnJheV9lbGVtLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwNC1cdC5tYXBfbWVtX3VzYWdlID0gYXJyYXlfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NzExPUJQRl9DQUxMXzQoYnBmX2Zvcl9lYWNoX21hcF9lbGVtLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHZvaWQgKiwgY2FsbGJhY2tfZm4sXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxMy17XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzE0Olx0cmV0dXJuIG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2Zvcl9lYWNoX2NhbGxiYWNrKG1hcCwgY2FsbGJhY2tfZm4sIGNhbGxiYWNrX2N0eCwgZmxhZ3MpO1xua2VybmVsL2JwZi9icGZfaXRlci5jLTcxNS19XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTA4PWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDItXHRcdFx0XHQgICAgIChsb25nICgqKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW5kZXgsIHU2NCBmbGFncykpTlVMTCkpO1xua2VybmVsL2JwZi9maXh1cHMuYzoyMTAzOlx0XHRcdEJVSUxEX0JVR19PTighX19zYW1lX3R5cGUob3BzLVx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjayxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEwNC1cdFx0XHRcdCAgICAgKGxvbmcgKCopKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTM0LVx0XHRcdGNhc2UgQlBGX0ZVTkNfZm9yX2VhY2hfbWFwX2VsZW06XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxMzU6XHRcdFx0XHRpbnNuLVx1MDAzZWltbSA9IEJQRl9DQUxMX0lNTShvcHMtXHUwMDNlbWFwX2Zvcl9lYWNoX2NhbGxiYWNrKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzNi1cdFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNTc9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzcwLVx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzNzE6XHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzItXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0Zixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzc5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTMtXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NDpcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5NS1cdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjA9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU3My1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTc0Olx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTc1LVx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU4Mj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU5NC1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTk1Olx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk2LVx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUxNj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMwLVx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MzE6XHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzItXHQubWFwX21lbV91c2FnZSA9IHJodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMDA2PXN0YXRpYyBpbnQgc2V0X21hcF9lbGVtX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDE3LVx0aWYgKCFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDE4Olx0ICAgICFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjaykge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDE5LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gbm90IGFsbG93ZWQgZm9yIG1hcFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjc2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIGFuZCBSSEFTSCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgKmVzc2VudGlhbCogZm9yIGVuYWJsaW5nIEJQRiwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhhc2h0YWIuYyBhbmQgdGhlIGBCUEZfTUFQX1RZUEVfUkhBU0hgIHR5cGUuIEl0JiMzOTtzIGEgcXVpY2sgYXVkaXQsIHJlYWxseS4gSSBrbm93IHdoZXJlIHRvIGxvb2suIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIGp1bXBpbmctb2ZmIHBvaW50IGZvciB0cmFjaW5nIGRlcGVuZGVuY2llcyBhbmQgaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50IHN3aXRjaGVzLiBIb3BlZnVsbHksIGl0JiMzOTtzIGFsbCBzdHJhaWdodGZvcndhcmQ7IEkgY2FuIHByb2JhYmx5IHBhcnNlIGl0IGluIG15IGhlYWQgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSwgYnV0IGxldCYjMzk7cyBtYWtlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2h0YWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMy0jaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2J0Zi5oXHUwMDNlXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9ODY9c3RydWN0IGJwZl9odGFiIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05Ni1cdHN0cnVjdCBodGFiX2VsZW0gKl9fcGVyY3B1ICpleHRyYV9lbGVtcztcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjk3Olx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIG5vbi1wcmVhbGxvY2F0ZWQgaGFzaHRhYmxlIGFyZSBrZXB0XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05OC1cdCAqIGluIGVpdGhlciBwY291bnQgb3IgY291bnRcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzM9c3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTgtICpcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTogKiBJbiBoYXNodGFiLmMsIHRvIGF2b2lkIGRlYWRsb2NrLCBsb2NrIGFjcXVpc2l0aW9uIG9mXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDAtICogYnVja2V0X2xvY2sgZm9sbG93ZWQgYnkgbHJ1X2xvY2sgaXMgbm90IGFsbG93ZWQuIEluIHN1Y2ggY2FzZXMsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc1MT1zdHJ1Y3QgYnBmX3JodGFiIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NTItXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzUzOlx0c3RydWN0IHJoYXNodGFibGUgaHQ7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzU0LVx0c3RydWN0IGJwZl9tZW1fYWxsb2MgbWE7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc1OC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NTk6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzYwLVx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3NjQ9c3RhdGljIGlubGluZSB2b2lkICpyaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCByaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc2OS0vKiBTcGVjaWFsaXplIGhhc2ggZnVuY3Rpb24gYW5kIG9iamNtcCBmb3IgbG9uZyBzaXplZCBrZXkgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NzA6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmh0YWJfa2V5X2NtcF9sb25nKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzcxLVx0XHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpwdHIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc3OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiByaHRhYl9oYXNoZm5fbG9uZyhjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzg1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHJodGFiX3BhcmFtc19sb25nID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjc4Ny1cdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBub2RlKSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzk0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5NS17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzk2Olx0c3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcztcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3OTctXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODIzLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgyNDpcdGVyciA9IHJoYXNodGFibGVfaW5pdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2cGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjUtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODI4Olx0LyogU2V0IG1heF9lbGVtcyBhZnRlciByaGFzaHRhYmxlX2luaXQoKSBzaW5jZSBpbml0IHplcm9lcyB0aGUgc3RydWN0ICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODI5LVx0cmh0YWItXHUwMDNlaHQubWF4X2VsZW1zID0gcmh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MzctZGVzdHJveV9yaHRhYjpcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4Mzg6XHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2cmh0YWItXHUwMDNlaHQpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzOS1mcmVlX3JodGFiOlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4OTg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAxLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkwMjpcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcmh0YWJfZnJlZV9lbGVtLCByaHRhYik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAzLVx0YnBmX21lbV9hbGxvY19kZXN0cm95KFx1MDAyNnJodGFiLVx1MDAzZW1hKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTA3PXN0YXRpYyB2b2lkICpyaHRhYl9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxNC1cdGlmIChtYXAtXHUwMDNla2V5X3NpemUgPT0gc2l6ZW9mKGxvbmcpKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkxNTpcdFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcdTAwMjZyaHRhYi1cdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXNfbG9uZyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE2LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkxNzpcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGtleSwgcmh0YWJfcGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTgtfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5Mzk9c3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKmNvcHksXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk0NS1cdCAqIGRpc2FibGVfaW5zdHJ1bWVudGF0aW9uKCkgbWl0aWdhdGVzIHRoZSBkZWFkbG9jayBmb3IgcHJvZ3JhbXMgcnVubmluZyBpbiBOTUkgY29udGV4dC5cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDY6XHQgKiByaGFzaHRhYmxlIGxvY2tzIGJ1Y2tldCB3aXRoIGxvY2FsX2lycV9zYXZlKCkuIE9ubHkgTk1JIHByb2dyYW1zIG1heSByZWVudGVyXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTQ3Olx0ICogcmhhc2h0YWJsZSBjb2RlLCBicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBkaXNhYmxlcyBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSwgZXhjZXB0XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTQ4Olx0ICogcmF3IHRyYWNlcG9pbnRzLCB3aGljaCB3ZSBkb24mIzM5O3QgaGF2ZSBpbiByaGFzaHRhYmxlLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk0OS1cdCAqL1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTItXHRpZiAocmh0YWItXHUwMDNlbWFwLmtleV9zaXplID09IHNpemVvZihsb25nKSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTM6XHRcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1NC1cdGVsc2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTU6XHRcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTYtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAzMj1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc0LVx0aWYgKG1hcC1cdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDc1Olx0XHR0bXAgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA3Ni1cdGVsc2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwNzc6XHRcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA3OC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTE2PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTE4LVx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzExOTpcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjAtXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMyLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzMzpcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTM0Olx0cmhhc2h0YWJsZV93YWxrX3N0YXJ0KFx1MDAyNml0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzNS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMzY6XHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcdTAwMjZpdGVyKSkpIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMzctXHRcdGlmIChJU19FUlIoZWxlbSkpIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ1LVx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHsgLyogQXZvaWQgc3RhbGxzIG9uIGxhcmdlIG1hcHMgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNDY6XHRcdFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ3LVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0ODpcdFx0XHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ5LVx0XHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1MS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTI6XHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTM6XHRyaGFzaHRhYmxlX3dhbGtfZXhpdChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTQtXHRXUklURV9PTkNFKHJodGFiLVx1MDAzZWZyZWVpbmdfaW50ZXJuYWwsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTU3PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjItXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTYzOlx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGtleSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY0LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjYtXHRpZiAoUFRSX0VSUihlbGVtKSA9PSAtRU5PRU5UKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2NzpcdFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIE5VTEwpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2OC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTc4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxODEtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTgyOlx0LyogR3VhcmFudGVlIHRoYXQgaGFzaHRhYiB2YWx1ZSBpcyBub3QgZnJlZWQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxODMtXHRndWFyZChyY3UpKCk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE5NT1zdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTEtXHQvKlxua2VybmVsL2JwZi9oYXNodGFiLmM6MzIxMjpcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxMy1cdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTctXHR3aGlsZSAobnVtX2VsZW1zIFx1MDAzYyB2aXNpdF9idWRnZXQgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjE4Olx0ICAgICAgIChlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcHJldl9rZXkpKSkge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxOS1cdFx0aWYgKElTX0VSUihlbGVtKSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjM2PXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNDAtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjQxOlx0LyogRXhjbHVkZXMgcmhhc2h0YWJsZSBidWNrZXQgb3ZlcmhlYWQgKH4gbmVsZW1zICogc2l6ZW9mKHZvaWQgKikgYXQgNzUlIGxvYWQpLiAqL1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzI0Mi1cdG51bV9lbnRyaWVzID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ2PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzIwLVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzMjE6XHRcdGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBOVUxMKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjItXHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzMzI6XHRcdGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBkc3Rfa2V5KTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMzMtXHRcdGRzdF9rZXkgJiM0Mzs9IGtleV9zaXplO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMzOTQ9c3RydWN0IGJwZl9pdGVyX3NlcV9yaGFzaF9tYXBfaW5mbyB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5Ni1cdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5NzpcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTgtfTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDAwPXN0YXRpYyB2b2lkICpicGZfcmhhc2hfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQwNS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MDY6XHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDctXHQvKlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MTItXHRkbyB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDEzOlx0XHRlbGVtID0gcmhhc2h0YWJsZV93YWxrX3BlZWsoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MTQtXHR9IHdoaWxlIChQVFJfRVJSKGVsZW0pID09IC1FQUdBSU4pO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0MjQ9c3RhdGljIHZvaWQgKmJwZl9yaGFzaF9tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MzItXHRkbyB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDMzOlx0XHRlbGVtID0gcmhhc2h0YWJsZV93YWxrX25leHQoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MzQtXHR9IHdoaWxlIChQVFJfRVJSKGVsZW0pID09IC1FQUdBSU4pO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0NzA9c3RhdGljIHZvaWQgYnBmX3JoYXNoX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDc3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ3ODpcdHJoYXNodGFibGVfd2Fsa19zdG9wKFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDc5LX1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDgxPXN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF9yaGFzaF9tYXAodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDg4LVx0aW5mby1cdTAwM2VyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDg5Olx0cmhhc2h0YWJsZV93YWxrX2VudGVyKFx1MDAyNmluZm8tXHUwMDNlcmh0YWItXHUwMDNlaHQsIFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDkwLVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ5Mz1zdGF0aWMgdm9pZCBicGZfaXRlcl9maW5pX3JoYXNoX21hcCh2b2lkICpwcml2X2RhdGEpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5Ni1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0OTc6XHRyaGFzaHRhYmxlX3dhbGtfZXhpdChcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5OC1cdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihpbmZvLVx1MDAzZW1hcCk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTUtI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2Vcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2h0YWJsZS5oXHUwMDNlXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9qaGFzaC5oXHUwMDNlXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19ucy5oXHUwMDNlXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNTojaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2Vcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9MzM9c3RydWN0IGJwZl9vZmZsb2FkX25ldGRldiB7XG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDEtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo0MjpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIG9mZmRldnNfcGFyYW1zID0ge1xua2VybmVsL2JwZi9vZmZsb2FkLmMtNDMtXHQubmVsZW1faGludFx0XHQ9IDQsXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDktXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo1MDpzdGF0aWMgc3RydWN0IHJoYXNodGFibGUgb2ZmZGV2cztcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxLVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTYyPWJwZl9vZmZsb2FkX2ZpbmRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtNjUtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo2NjpcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm5ldGRldiwgb2ZmZGV2c19wYXJhbXMpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtNjctfVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTY5PXN0YXRpYyBpbnQgX19icGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3JlZ2lzdGVyKHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldixcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04My1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjg0Olx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZvbmRldi1cdTAwM2VsLCBvZmZkZXZzX3BhcmFtcyk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NS1cdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0xMzY9c3RhdGljIHZvaWQgX19icGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3VucmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0NC1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE0NTpcdG9uZGV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZuZXRkZXYsIG9mZmRldnNfcGFyYW1zKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0Ni1cdGlmIChXQVJOX09OKCFvbmRldikpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ4LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTQ5Olx0V0FSTl9PTihyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm9uZGV2LVx1MDAzZWwsIG9mZmRldnNfcGFyYW1zKSk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNTAtXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9MTc5PXN0YXRpYyBpbnQgX19icGZfcHJvZ19kZXZfYm91bmRfaW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjAxLVx0XHQvKiBXaGVuIG9ubHkgYmluZGluZyB0byB0aGUgZGV2aWNlLCBleHBsaWNpdGx5XG5rZXJuZWwvYnBmL29mZmxvYWQuYzoyMDI6XHRcdCAqIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgaGFzaHRhYmxlLlxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjAzLVx0XHQgKi9cbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz04NjE9c3RhdGljIGludCBfX2luaXQgYnBmX29mZmxvYWRfaW5pdCh2b2lkKVxua2VybmVsL2JwZi9vZmZsb2FkLmMtODYyLXtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjg2MzpcdHJldHVybiByaGFzaHRhYmxlX2luaXQoXHUwMDI2b2ZmZGV2cywgXHUwMDI2b2ZmZGV2c19wYXJhbXMpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtODY0LX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzMy1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MzQ6XHQvKiBmaW5kIG1hcCB0eXBlIGFuZCBpbml0IG1hcDogaGFzaHRhYmxlIHZzIHJidHJlZSB2cyBibG9vbSB2cyAuLi4gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzUtXHRtYXBfdHlwZSA9IGF0dHItXHUwMDNlbWFwX3R5cGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBGb3ItRWFjaCBJdGVyYXRpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzIGFyZSBpdGVyYXRlZCB3aXRoaW4gQlBGIHByb2dyYW1zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHBhdGgsIHN0YXJ0aW5nIHdpdGggYGJwZl9lYWNoX3JoYXNoX2VsZW1gLCB3aGljaCBJIGtub3cgaXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSByZWFsaXplIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyByZWFjaGVkIGJ5IGNhbGxpbmcgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgZnJvbSBhIEJQRiBwcm9ncmFtLgoKQnV0IHRoZW4gYSBkZXRhaWwgcG9wcyB1cDogSXMgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGlubGluZWQ/IEkgcXVpY2tseSByZWNhbGwgc29tZXRoaW5nIGZyb20gdGhlIHZlcmlmaWVyIGZpeHVwcyDigJMgc3BlY2lmaWNhbGx5IHRoZSBsaW5lIGBpbnNuLSZndDtpbW0gPSBCUEZfQ0FMTF9JTU0ob3BzLSZndDttYXBfZm9yX2VhY2hfY2FsbGJhY2spO2AuIFRoYXQgYXNzaWdubWVudCYjMzk7cyBrZXkuIEl0IHR1cm5zIG91dCB0aGF0IGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpcyAqc3RhdGljKiB3aXRoaW4gYGhhc2h0YWIuY2AsIGhvd2V2ZXIgaXRzICpwb2ludGVyKiBpcyBhc3NpZ25lZCB0byBgcmh0YWJfbWFwX29wcy5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgLiBTbyB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzbiYjMzk7dCBkaXJlY3RseSBleHBvc2VkIGFzIGFuIGVudHJ5IHBvaW50LiBJdCYjMzk7cyB0aGUgcG9pbnRlciBhc3NpZ25tZW50IHRoYXQmIzM5O3MgY3JpdGljYWwuCgpOb3csIG15IG1pbmQgZ29lcyB0byB0aGUgYnJvYWRlciBzY29wZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLiBMZXQgbWUgdmVyaWZ5IGlmIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gIGl0c2VsZiwgb3IgYW55IHJlbGF0ZWQgZnVuY3Rpb24sIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgYXMgYSBwcmltYXJ5IHN5bWJvbCBvciBlbnRyeSBwb2ludC4gVGhpcyByZXF1aXJlcyBhIHNlYXJjaCBmb3Igbm9uLXN0YXRpYyBzeW1ib2xzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBsb29rIGF0IGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9mb3JfZWFjaF9tYXBfZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfaXRlci5jPTY4MD1pbnQgYnBmX2l0ZXJfcnVuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgpXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxMC1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3MTE6QlBGX0NBTExfNChicGZfZm9yX2VhY2hfbWFwX2VsZW0sIHN0cnVjdCBicGZfbWFwICosIG1hcCwgdm9pZCAqLCBjYWxsYmFja19mbixcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MTItXHQgICB2b2lkICosIGNhbGxiYWNrX2N0eCwgdTY0LCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzE2LVxua2VybmVsL2JwZi9icGZfaXRlci5jOjcxNzpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2Zvcl9lYWNoX21hcF9lbGVtX3Byb3RvID0ge1xua2VybmVsL2JwZi9icGZfaXRlci5jOjcxODpcdC5mdW5jXHRcdD0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxOS1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE0OC1cdGNhc2UgQlBGX0ZVTkNfZm9yX2VhY2hfbWFwX2VsZW06XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMTQ5Olx0XHRyZXR1cm4gXHUwMDI2YnBmX2Zvcl9lYWNoX21hcF9lbGVtX3Byb3RvO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE1MC1cdGNhc2UgQlBGX0ZVTkNfbG9vcDpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTk2NT1pbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk5Njgte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk5Njk6XHQvKiBicGZfZm9yX2VhY2hfbWFwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqY2FsbGJhY2tfZm4sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk3MC1cdCAqICAgICAgdm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDI2Nz1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzE3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzE4Olx0LyogZm9yIGNhbGxiYWNrcyBsaWtlIGJwZl9sb29wIG9yIGJwZl9mb3JfZWFjaF9tYXBfZWxlbSBnbyBiYWNrIHRvIGNhbGxzaXRlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzE5LVx0ICogdGhlcmUgZnVuY3Rpb24gY2FsbCBsb2dpYyB3b3VsZCByZXNjaGVkdWxlIGNhbGxiYWNrIHZpc2l0LiBJZiBpdGVyYXRpb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6CgoqKkNoZWNraW5nIEJQRl9TWVNDQUxMIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBCUEZfU1lTQ0FMTGAuIFNpbmNlIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgQlBGIHN5c3RlbSBjYWxscy4gU28sIEkgbmVlZCB0byB0cmFjZSBpdHMgY29uZmlndXJhdGlvbiBwYXRoLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL0tjb25maWdgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gZm9yIGFueXRoaW5nIEJQRi1yZWxhdGVkLiBUaGVuLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IGBpbml0L0tjb25maWdgLiBgaW5pdC9LY29uZmlnYCBvZnRlbiBoYW5kbGVzIGdsb2JhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2Ugb3RoZXIgZmVhdHVyZXMsIHNvIGl0JiMzOTtzIHNtYXJ0IHRvIGNoZWNrIHRoZXJlIGZvciBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBlbnN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLiBCeSBzeXN0ZW1hdGljYWxseSBjaGVja2luZyB0aGVzZSBmaWxlcywgSSBjYW4gdmVyaWZ5IGlmIHRoZXJlIGlzIGFuIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgbG9vayBpbnRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgd29ya2luZyB3aXRoIGBLY29uZmlnYCBmaWxlcyBiZWZvcmU7IHRoZXkmIzM5O3JlIHRoZSBicmVhZCBhbmQgYnV0dGVyIGZvciBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBJJiMzOTttIHRoaW5raW5nIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyNy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgY29yZSBlbmFibGluZyBvcHRpb25zIGZvciBCUEYsIG9yIHBlcmhhcHMgY29uZmlndXJhdGlvbiBvZiBzb21lIG9mIHRoZSBCUEYgc3Vic3lzdGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIGhlcmUgSSYjMzk7bGwgc2VlIHdoYXQgdGhlIG9wdGlvbnMgYXJlIGFuZCB3aGF0IG15IHVuZGVyc3RhbmRpbmcgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbiAgNjM6XHRcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxuICA2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgzMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBTdWJzeXN0ZW0gQ29tcGlsYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IGZvciBgaGFzaHRhYi5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aWVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBpbmRpY2F0ZWQgYnkgdGhhdCBsaW5lIGluIHRoZSBNYWtlZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9gLiBTbywgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgdGhlc2Ugb2JqZWN0IGZpbGVzIGdldCBidWlsdC4KCk5vdywgSSYjMzk7bSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXQgcGxheSBoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGl0c2VsZiBoYXMgYW55IHByZWNvbmRpdGlvbnMuIE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgLCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHJlbGF0ZWQgc2V0dGluZ3MgdG8gcmVzaWRlLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBMaW5lIDI1IG9mIGBrZXJuZWwvYnBmL0tjb25maWdgIGRlZmluZXMgdGhlICYjMzQ7QlBGIHN1YnN5c3RlbSYjMzQ7IG1lbnUsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBkZWNsYXJlZCByaWdodCBhZnRlci4gR29vZC4gTm8gZGVwZW5kZW5jaWVzIGxpc3RlZCBkaXJlY3RseSBmb3IgYENPTkZJR19CUEZfU1lTQ0FMTGAuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIGRvdWJsZSBjaGVjayBmb3IgYW55IG1lbnUgY29uZGl0aW9ucyBvciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgYm90aCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZm9yIGFueSBpbmRpcmVjdCBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBlbmFibGVtZW50IG9mIGBDT05GSUdfQlBGX1NZU0NBTExgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjYKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdCMgQlBGIGludGVycHJldGVyIHRoYXQsIGZvciBleGFtcGxlLCBjbGFzc2ljIHNvY2tldCBmaWx0ZXJzIGRlcGVuZCBvbi5cbiAgIDQ6XHRjb25maWcgQlBGXG4gICA1Olx0XHRib29sXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgIDc6XHRcbiAgIDg6XHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgc3VwcG9ydCBCUEYgSklUIGNvbXBpbGVyIHBsdXMgd2hpY2hcbiAgIDk6XHQjIGZsYXZvdXIuIE9ubHkgb25lIG9mIHRoZSB0d28gY2FuIGJlIHNlbGVjdGVkIGZvciBhIHNwZWNpZmljIGFyY2ggc2luY2VcbiAgMTA6XHQjIGVCUEYgSklUIHN1cGVyc2VkZXMgdGhlIGNCUEYgSklULlxuICAxMTpcdFxuICAxMjpcdCMgQ2xhc3NpYyBCUEYgSklUIChjQlBGKVxuICAxMzpcdGNvbmZpZyBIQVZFX0NCUEZfSklUXG4gIDE0Olx0XHRib29sXG4gIDE1Olx0XG4gIDE2Olx0IyBFeHRlbmRlZCBCUEYgSklUIChlQlBGKVxuICAxNzpcdGNvbmZpZyBIQVZFX0VCUEZfSklUXG4gIDE4Olx0XHRib29sXG4gIDE5Olx0XG4gIDIwOlx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxuICAyMTpcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG4gIDIyOlx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbiAgMjM6XHRcdGJvb2xcbiAgMjQ6XHRcbiAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGluIEJQRiBIYXNoIFRhYmxlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgZmlsZSBhZ2Fpbi4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgaGlkZGVuIGJlaGluZCBgI2lmZGVmYCBkaXJlY3RpdmVzIG9yIHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucywgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9yIGF2YWlsYWJpbGl0eSBvZiBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgb3IgdGhlIHJlbGF0ZWQgYHJodGFiX21hcF9vcHNgIHN0cnVjdHVyZXMuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCB0byB0aGUgcmVzaXplIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24sIGFuZCBJIHdhbnQgdG8gYmUgKnN1cmUqIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSSYjMzk7bSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCwgbGVhZGluZyB0byBwb3RlbnRpYWwgZGlmZmVyZW5jZXMgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi4KClRvIGdldCBhIGdvb2Qgb3ZlcnZpZXcsIEkgdGhpbmsgSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBzZWN0aW9uIG9mIHRoZSBmaWxlIGJldHdlZW4gYXBwcm94aW1hdGVseSBsaW5lcyAzMTkwIGFuZCAzNTQwLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgcmVsZXZhbnQgcG9ydGlvbnMgZGVhbGluZyB3aXRoIHRoZSByZXNpemUgaGFzaCB0YWJsZSBvcGVyYXRpb25zIGFuZCB0aGUgaXRlcmF0aW9uIGZ1bmN0aW9uLiBIb3BlZnVsbHksIGJ5IHJldmlld2luZyB0aGlzIHJlZ2lvbiBjbG9zZWx5LCBJIGNhbiBzcG90IGFueSBzdWJ0bGUgdmFyaWF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IHRoZXNlIGZ1bmN0aW9ucyBiZWhhdmUgaW4gZGlmZmVyZW50IGtlcm5lbCBidWlsZHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGRpZmZlcmVudCBtYXAgdHlwZXMsIG9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGRpc2FibGUgb3IgYWx0ZXIgdGhlIGJlaGF2aW9yLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbGFyaXR5IGFuZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNTEwOlx0XHQuaW5pdF9zZXFfcHJpdmF0ZSA9IGJwZl9pdGVyX2luaXRfcmhhc2hfbWFwLFxuMzUxMTpcdFx0LmZpbmlfc2VxX3ByaXZhdGUgPSBicGZfaXRlcl9maW5pX3JoYXNoX21hcCxcbjM1MTI6XHRcdC5zZXFfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl9zZXFfcmhhc2hfbWFwX2luZm8pLFxuMzUxMzpcdH07XG4zNTE0Olx0XG4zNTE1Olx0QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcbjM1MTY6XHRjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbjM1MTc6XHRcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbjM1MTg6XHRcdC5tYXBfYWxsb2NfY2hlY2sgPSByaHRhYl9tYXBfYWxsb2NfY2hlY2ssXG4zNTE5Olx0XHQubWFwX2FsbG9jID0gcmh0YWJfbWFwX2FsbG9jLFxuMzUyMDpcdFx0Lm1hcF9mcmVlID0gcmh0YWJfbWFwX2ZyZWUsXG4zNTIxOlx0XHQubWFwX2dldF9uZXh0X2tleSA9IHJodGFiX21hcF9nZXRfbmV4dF9rZXksXG4zNTIyOlx0XHQubWFwX3JlbGVhc2VfdXJlZiA9IHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMsXG4zNTIzOlx0XHQubWFwX2NoZWNrX2J0ZiA9IHJodGFiX21hcF9jaGVja19idGYsXG4zNTI0Olx0XHQubWFwX2xvb2t1cF9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9lbGVtLFxuMzUyNTpcdFx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG4zNTI2Olx0XHQubWFwX3VwZGF0ZV9lbGVtID0gcmh0YWJfbWFwX3VwZGF0ZV9lbGVtLFxuMzUyNzpcdFx0Lm1hcF9kZWxldGVfZWxlbSA9IHJodGFiX21hcF9kZWxldGVfZWxlbSxcbjM1Mjg6XHRcdC5tYXBfZ2VuX2xvb2t1cCA9IHJodGFiX21hcF9nZW5fbG9va3VwLFxuMzUyOTpcdFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG4zNTMwOlx0XHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxuMzUzMTpcdFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9lYWNoX3JoYXNoX2VsZW0sXG4zNTMyOlx0XHQubWFwX21lbV91c2FnZSA9IHJodGFiX21hcF9tZW1fdXNhZ2UsXG4zNTMzOlx0XHRCQVRDSF9PUFMocmh0YWIpLFxuMzUzNDpcdFx0Lm1hcF9idGZfaWQgPSBcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcbjM1MzU6XHRcdC5pdGVyX3NlcV9pbmZvID0gXHUwMDI2cmhhc2hfaXRlcl9zZXFfaW5mbyxcbjM1MzY6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc3NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIFBvdGVudGlhbCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmLiBJbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCB0aGUgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgcHJldmlvdXMgdmVyc2lvbiBlc3NlbnRpYWxseSBpdGVyYXRlZCBpbmRlZmluaXRlbHkgdGhyb3VnaCBhbiByaGFzaCB0YWJsZS4gTm93LCB0aGVyZSYjMzk7cyBhIGxpbWl0IGludHJvZHVjZWQ6IGB2aXNpdF9idWRnZXQgPSBhdG9taWNfcmVhZCgmYW1wO3JodGFiLSZndDtodC5uZWxlbXMpYC4gVGhlIGxvb3Agd2lsbCBub3cgdGVybWluYXRlIGlmIGl0IHJlYWNoZXMgdGhhdCBidWRnZXQuIFRoaXMgaXMgKmNydWNpYWwqIGJlY2F1c2UgaXQgcHJldmVudHMgaW5maW5pdGUgbG9vcHMgZHVyaW5nIGl0ZXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZWxlbWVudHMgYXJlIGJlaW5nIGFkZGVkIGNvbmN1cnJlbnRseS4gVGhhdCYjMzk7cyBhIHNvbGlkIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYywgc29tZXRoaW5nIHRoYXQgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciB2dWxuZXJhYmlsaXRpZXMuCgpUaGlzIGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgYmVpbmcgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHNpbmNlIGl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgQlBGIHN5c2NhbGxzOiBjcmVhdGluZyBhbiByaGFzaCBtYXAsIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB0aGF0IHVzZXMgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgb24gdGhhdCBtYXAsIGFuZCB0aGVuIHJ1bm5pbmcgdGhlIHByb2dyYW0uIFNvLCB5ZWFoLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGltcGFjdCBpcyBoaWdoIOKAkyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBjYW4gbGVhZCB0byBzZXJpb3VzIGRlbmlhbC1vZi1zZXJ2aWNlIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3Mgb2Ygc2V0dGluZyB1cCBhIGZ1enppbmcgY2FtcGFpZ24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZ1enppbmcgdGhlIHJpZ2h0IGNhbGxzLgoKU28sICpmb2N1cyBzeW1ib2xzKi4uLiBjbGVhcmx5IGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gIGlzIGEgcHJpbWFyeSB0YXJnZXQuIFRoYXQmIzM5O3MgdGhlIEJQRiBoZWxwZXIgdGhhdCBpbml0aWF0ZXMgdGhlIGl0ZXJhdGlvbi4gQnV0IHdoYXQgYWJvdXQgYGJwZl9lYWNoX3JoYXNoX2VsZW1gPyBIb2xkIG9uLCBpc24mIzM5O3QgdGhhdCBzdGF0aWM/IFllcywgYnV0IGl0JiMzOTtzIGFkZHJlc3MgaXMgc3RvcmVkIGluIGByaHRhYl9tYXBfb3BzLm1hcF9mb3JfZWFjaF9jYWxsYmFja2AuIFdhaXQsIGluIHZlcmlmaWVyIGZpeHVwcywgaXQmIzM5O3MgdGhlcmUgYGluc24tJmd0O2ltbSA9IEJQRl9DQUxMX0lNTShvcHMtJmd0O21hcF9mb3JfZWFjaF9jYWxsYmFjaylgLiBJZiBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgdGhlbiBpdCBpcyBhIHN5bWJvbCBpbiBrYWxsc3ltcy4gQnV0LCBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsJiMzOTtzIGRvY3VtZW50YXRpb24sIGFzIHNvbWV0aW1lcywgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLgoKVGhlIGRvY3VtZW50YXRpb24gcmVjb21tZW5kcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIE5vdywgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0IHNlZW1zIGlkZWFsLiBIb3dldmVyLCBgQlBGX0NBTExfNGAgY3JlYXRlcyBlaXRoZXIgYF9fX2JwZl9mb3JfZWFjaF9tYXBfZWxlbWAgb3IgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQlBGX0NBTExgIGRlZmluZXMgdGhlc2Ugc3ltYm9scy4gT2theSwgSSBuZWVkIHRvIGdyZXAgZm9yIGBCUEZfQ0FMTGAgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIG9yIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkgdG8gdW5kZXJzdGFuZCB0aGUgc3ltYm9sIG5hbWluZyBjb252ZW50aW9ucy4gVGhpcyB3aWxsIGhlbHAgcmVmaW5lIHRoZSBmdXp6aW5nIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBCUEZfQ0FMTF80JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9NDI0PXN0YXRpYyBpbmxpbmUgaW50IGJwZl9hdG9taWNfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjgyLSNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgzOiNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjg0LSNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEJQRiBDYWxsIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIEJQRiBjYWxscyBhcmUgZGVmaW5lZC4gVGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgaXMgYWx3YXlzIHRoZSBrZXJuZWwmIzM5O3MgaW5jbHVkZSBmaWxlcywgc28gbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgZm9yIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYEJQRl9DQUxMX3hgIG1hY3Jvcywgc2luY2UgdGhvc2UgYXJlIHRoZSBoZWFydCBvZiBob3cgd2UgaW50ZXJmYWNlIHdpdGggdGhlIEJQRiBzdWJzeXN0ZW0gYXQgdGhpcyBsZXZlbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgYXJlIGNvbnN0cnVjdGVkLCB3aGF0IHNvcnQgb2YgcHJlcHJvY2Vzc29yIG1hZ2ljIGlzIHVzZWQsIHdoYXQgY29uc3RyYWludHMgYXJlIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZGVmaW5pdGlvbiBpcyBnb2luZyB0byBjYXVzZSBzb21lIHNpZGUgZWZmZWN0cywgb3IgbWF5YmUgZXhwb3NlIHNvbWUgaW50ZXJlc3RpbmcgYXNwZWN0cyBvZiB0aGUgY2FsbCBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcbiA2NjE6XHRcbiA2NjI6XHQjZGVmaW5lIF9fQlBGX1BBRChuKVx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjYzOlx0XHRfX0JQRl9NQVAobiwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9OLCB1NjQsIF9fdXJfMSwgdTY0LCBfX3VyXzIsICAgICAgIFxcXG4gNjY0Olx0XHRcdCAgdTY0LCBfX3VyXzMsIHU2NCwgX191cl80LCB1NjQsIF9fdXJfNSlcbiA2NjU6XHRcbiA2NjY6XHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbiA2Njc6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2Njg6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcbiA2Njk6XHRcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcbiA2NzA6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcbiA2NzE6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcbiA2NzI6XHRcdHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjczOlx0XHRcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcbiA2NzQ6XHRcdH1cdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjc1Olx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjc2Olx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXG4gNjc3Olx0XG4gNjc4Olx0I2RlZmluZSBfX05PQVRUUlxuIDY3OTpcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2ODA6XHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjgxOlx0I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY4MjpcdCNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2ODM6XHQjZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjg0Olx0I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgTWFwIEl0ZXJhdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgQlBGX0NBTExfNChicGZfZm9yX2VhY2hfbWFwX2VsZW0sIC4uLilgIGRlZmluZXMgdGhlIHB1YmxpYywgbm9uLXN0YXRpYyBmdW5jdGlvbiBgdTY0IGJwZl9mb3JfZWFjaF9tYXBfZWxlbSguLi4pYC4gIFRoZW4gdGhlcmUmIzM5O3MgYGJwZl9lYWNoX3JoYXNoX2VsZW1gLCB3aGljaCBpcyBzdGF0aWMgYnV0IHVzZWQgdmlhIGByaHRhYl9tYXBfb3BzYC4gIEkgbmVlZCB0byBjb25maXJtIGlmIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpcyBjYWxsZWQgZWxzZXdoZXJlIG9yIGlmIGl0IG5lZWRzIHRvIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAuIEkgdGhpbmsgaW5jbHVkaW5nIGJvdGggYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGFuZCBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtYCBpbiBgRm9jdXNTeW1ib2xzYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4KCk5leHQsIEkmIzM5O2xsIG1vdmUgb24gdG8gY29uZmlndXJhdGlvbi4gVG8gZ2V0IEJQRiBzeXNjYWxscyBhbmQgbWFwcyB3b3JraW5nLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwsIHRoYXQmIzM5O3MgYSBnaXZlbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdG8gYmUgc3VyZS4KCkxvb2tpbmcgYXQgYGtlcm5lbC9icGYvTWFrZWZpbGVgLCBpdCBsb29rcyBsaWtlIGBoYXNodGFiLm9gIGlzIGFsd2F5cyBidWlsdCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGFjdGl2ZSwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gTm93LCBJIHNob3VsZCBtYWtlIGNlcnRhaW4gd2hldGhlciBgQlBGX01BUF9UWVBFX1JIQVNIYCBoYXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgZGl2ZSBpbnRvIGBoYXNodGFiLmNgIGFuZCBzZWFyY2ggZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJvdW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gYHJodGFiX2Agb3IgYEJQRl9NQVBfVFlQRV9SSEFTSGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmhhc2h0YWJsZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZi4qUkhBU0h8I2lmLipyaHRhYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqQ2hlY2tpbmcgZm9yIENvbmZpZyBPdmVybGFwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBmaWxlcyBpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgY29kZSBoYXMgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEdpdmVuIHRoZSBzZW5zaXRpdmUgbmF0dXJlIG9mIEJQRiBhbmQgaG93IGRlZXBseSBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIGtlcm5lbCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3Igb3ZlcmxhcHBpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBzY2FuIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSwgb3IgYmUgaW5mbHVlbmNlZCBieSwgdGhlIHNldHRpbmdzIHRoYXQgZ292ZXJuIHRoaXMgcGFydGljdWxhciBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbC1sZXZlbCBjaGFuZ2VzLiBMZXQgbWUgY2FyZWZ1bGx5IGV4YW1pbmUgYWxsIHJlbGV2YW50IGZpbGVzIHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWZ8I2lmIElTX0VOQUJMRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzAyCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSGFzaHRhYmxlIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gV2hhdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgaXMgdGhlIGNvbXBsZXRlIGFic2VuY2Ugb2YgYW55IHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgKGAjaWZkZWZgcykuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoYXQgdGhlIG9ubHkga2VybmVsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgZm9yIHRoaXMgbW9kdWxlIGlzIHRoZSBlbmFibGluZyBvZiB0aGUgQlBGIHN5c3RlbSBjYWxsIChgQlBGX1NZU0NBTExgKS4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVwZW5kZW5jeS4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgYnkgZ29pbmcgdGhyb3VnaCB0aGUgcmVxdWlyZW1lbnRzIG1vcmUgbWV0aG9kaWNhbGx5OgoKMS4gIGBXb3J0aEZ1enppbmdgOiBDb25maXJtZWQsIGl0JiMzOTtzIHNldCB0byAmIzM0O3RydWUmIzM0Oy4gVGhpcyBpbmRpY2F0ZXMgdGhlIGNvZGUgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgd2hpY2ggbWVhbnMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBhcmUgbGlrZWx5IHRvIGJlIHByZXNlbnQuCjIuICBgRm9jdXNTeW1ib2xzYDogSSBhbSBmb2N1c2luZyBvbiB0d28ga2V5IHN5bWJvbHMgaGVyZSwgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgYW5kIGBicGZfZWFjaF9yaGFzaF9lbGVtYC4gVGhlc2UgYXJlIG15IHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QuIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBpdGVyYXRpbmcgdGhyb3VnaCBCUEYgbWFwIGVsZW1lbnRzLgozLiAgYEVuYWJsZUNvbmZpZ3NgOiBJJiMzOTt2ZSBhbHJlYWR5IGNoZWNrZWQgdGhpcy4gYFsmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYCBpcyB0aGUgb25seSByZXF1aXJlbWVudCwgd2hpY2ggaXMgdmVyeSBzaW1wbGUuCjQuICBgUmVhc29uaW5nYDogQWgsIHJpZ2h0LiBUaGUgcGF0Y2ggSSYjMzk7bSBleGFtaW5pbmcgaXMgYWxsIGFib3V0IG1hbmFnaW5nIGl0ZXJhdGlvbiBidWRnZXRzIHdpdGhpbiBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgc3BlY2lmaWNhbGx5IHdoZW4gaXQmIzM5O3MgdXNlZCB3aXRoIGBCUEZfTUFQX1RZUEVfUkhBU0hgIEJQRiByaGFzaCBtYXBzLiBUaGUgcHVycG9zZSBpcyB0byBwcmV2ZW50IHVuYm91bmRlZCBpdGVyYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gZGVuaWFsLW9mLXNlcnZpY2UsIGVzcGVjaWFsbHkgZHVyaW5nIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyB0byB0aGUgaGFzaCB0YWJsZS4gVGhpcyBpcyBpbXBvcnRhbnQ6IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGNvdWxkIGVhc2lseSBsZWFkIHRvIGFuIGV4cGxvaXRhYmxlIHNpdHVhdGlvbiBpZiB0aGUgYnVkZ2V0IGlzIG5vdCBtYW5hZ2VkLCB3aGljaCBpcyB3aHkgSSB3YXMgZm9jdXNpbmcgb24gdGhvc2UgZnVuY3Rpb25zLgoKV2l0aCB0aGF0LCBJIGFtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2Zvcl9lYWNoX21hcF9lbGVtJiMzNDssCiAgICAmIzM0O2JwZl9lYWNoX3JoYXNoX2VsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9lYWNoX3JoYXNoX2VsZW0oKWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBlbmZvcmNlIGFuIGl0ZXJhdGlvbiBidWRnZXQgYmFzZWQgb24gYXRvbWljIGBuZWxlbXNgIHdoZW4gaXRlcmF0aW5nIG92ZXIgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcyB2aWEgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbSgpYC4gVGhpcyBib3VuZHMgdGhlIGl0ZXJhdGlvbiBsb29wIGFuZCBwcmV2ZW50cyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBkdXJpbmcgY29uY3VycmVudCBtYXAgb3BlcmF0aW9ucy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2Zvcl9lYWNoX21hcF9lbGVtJiMzNDssCiAgICAmIzM0O2JwZl9lYWNoX3JoYXNoX2VsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9lYWNoX3JoYXNoX2VsZW0oKWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBlbmZvcmNlIGFuIGl0ZXJhdGlvbiBidWRnZXQgYmFzZWQgb24gYXRvbWljIGBuZWxlbXNgIHdoZW4gaXRlcmF0aW5nIG92ZXIgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcyB2aWEgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbSgpYC4gVGhpcyBib3VuZHMgdGhlIGl0ZXJhdGlvbiBsb29wIGFuZCBwcmV2ZW50cyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBkdXJpbmcgY29uY3VycmVudCBtYXAgb3BlcmF0aW9ucy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGJ5IGJvdW5kaW5nIHRoZSBpdGVyYXRpb24gbG9vcCB3aXRoIGEgYHZpc2l0X2J1ZGdldGAgZGVyaXZlZCBmcm9tIGBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzIGFyZSBleHBvc2VkIG9yIGNoZWNrZWQuXG4zLiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgY29uY2VybnMgaW52b2x2aW5nIFJDVS1wcm90ZWN0ZWQgcmhhc2h0YWJsZSBlbGVtZW50cyBhcmUgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMb2NrZGVwIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzozMzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggZDQwY2I1ZGQ0NDZjYS4uMmNhZDY3YzkwMTU0MyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTMxOTgsNyAmIzQzOzMxOTgsOCBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLAogCXN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTsKIAl2b2lkICpwcmV2X2tleSA9IE5VTEw7CiAJc3RydWN0IHJodGFiX2VsZW0gKmVsZW07Ci0JaW50IG51bV9lbGVtcyA9IDA7CiYjNDM7CXUzMiB2aXNpdF9idWRnZXQ7CiYjNDM7CXUzMiBudW1fZWxlbXMgPSAwOwogCXU2NCByZXQgPSAwOwogCiAJY2FudF9taWdyYXRlKCk7CkBAIC0zMjEyLDcgJiM0MzszMjEzLDkgQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbiwKIAkgKiBlbGVtZW50cyBhcmUgZGVsZXRlZC9pbnNlcnRlZCwgdGhlcmUgbWF5IGJlIG1pc3NlZCBvciBkdXBsaWNhdGUKIAkgKiBlbGVtZW50cyB2aXNpdGVkLgogCSAqLwotCXdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoJmFtcDtyaHRhYi0mZ3Q7aHQsIHByZXZfa2V5KSkpIHsKJiM0MzsJdmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoJmFtcDtyaHRhYi0mZ3Q7aHQubmVsZW1zKTsKJiM0MzsJd2hpbGUgKG51bV9lbGVtcyAmbHQ7IHZpc2l0X2J1ZGdldCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoJmFtcDtyaHRhYi0mZ3Q7aHQsIHByZXZfa2V5KSkpIHsKIAkJaWYgKElTX0VSUihlbGVtKSkKIAkJCWJyZWFrOwogCQludW1fZWxlbXMmIzQzOyYjNDM7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMKaW5kZXggOThiYjY2OTA3YjdmNy4uZjFhMGE4ZTNmYzFhYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jCkBAIC0zLDEyICYjNDM7MywxNiBAQAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGF0b21pYy5oJmd0OwogI2luY2x1ZGUgJiMzNDtyaGFzaC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfaXRlcl9icGZfcmhhc2hfbWFwLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAKJiM0MzsjZGVmaW5lIFJIQVNIX1NUUkVTU19EVVJBVElPTl9OUwkoM1VMTCAqIDEwMDAwMDAwMDBVTEwpCiYjNDM7CiBzdGF0aWMgdm9pZCByaGFzaF9ydW4oY29uc3QgY2hhciAqcHJvZ19uYW1lKQogewogCXN0cnVjdCByaGFzaCAqc2tlbDsKQEAgLTUzLDYgJiM0Mzs1NywxMTIgQEAgc3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpCiAJCQkgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgJmFtcDtvcHRzKTsKIH0KIAomIzQzO3N0cnVjdCByaGFzaF9zdHJlc3NfYXJnIHsKJiM0MzsJaW50IG1hcF9mZDsKJiM0MzsJYXRvbWljX2Jvb2wgKnN0b3A7CiYjNDM7CV9fdTMyIG5yX2tleXM7CiYjNDM7CV9fdTMyIHNlZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcmhhc2hfc3RyZXNzX3VwZGF0ZSh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHJoYXNoX3N0cmVzc19hcmcgKmFyZyA9IGRhdGE7CiYjNDM7CV9fdTY0IHZhbHVlID0gMDsKJiM0MzsJX191MzIga2V5OwomIzQzOwlfX3UzMiBpOwomIzQzOwomIzQzOwl3aGlsZSAoIWF0b21pY19sb2FkKGFyZy0mZ3Q7c3RvcCkpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yX2tleXMgJmFtcDsmYW1wOyAhYXRvbWljX2xvYWQoYXJnLSZndDtzdG9wKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctJmd0O3NlZWQpICUgYXJnLSZndDtucl9rZXlzOwomIzQzOwkJCWJwZl9tYXBfdXBkYXRlX2VsZW0oYXJnLSZndDttYXBfZmQsICZhbXA7a2V5LCAmYW1wO3ZhbHVlLCBCUEZfQU5ZKTsKJiM0MzsJCX0KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBhcmctJmd0O25yX2tleXMgJmFtcDsmYW1wOyAhYXRvbWljX2xvYWQoYXJnLSZndDtzdG9wKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSAmIzQzOyBhcmctJmd0O3NlZWQpICUgYXJnLSZndDtucl9rZXlzOwomIzQzOwkJCWJwZl9tYXBfZGVsZXRlX2VsZW0oYXJnLSZndDttYXBfZmQsICZhbXA7a2V5KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmhhc2hfaXRlcl9zdHJlc3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByaGFzaCAqc2tlbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCByaGFzaF9zdHJlc3NfYXJnIGFyZ3NbMl07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJYXRvbWljX2Jvb2wgc3RvcCA9IGZhbHNlOwomIzQzOwlib29sIHJhbiA9IGZhbHNlOwomIzQzOwlfX3U2NCBzdGFydDsKJiM0MzsJcHRocmVhZF90IHRocmVhZHNbMl07CiYjNDM7CWJvb2wgY3JlYXRlZFsyXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7CiYjNDM7CWludCBucl9jcHVzOwomIzQzOwlfX3UzMiB3b3JraW5nX3NldDsKJiM0MzsJaW50IG1hcF9mZCwgZXJyLCBpOwomIzQzOwomIzQzOwlucl9jcHVzID0gbGliYnBmX251bV9wb3NzaWJsZV9jcHVzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG5yX2NwdXMsIDAsICYjMzQ7bnVtX3Bvc3NpYmxlX2NwdXMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChucl9jcHVzICZsdDsgMikgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSByaGFzaF9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtyaGFzaF9fb3BlbiBzdHJlc3MmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXdvcmtpbmdfc2V0ID0gc2tlbC0mZ3Q7cm9kYXRhLSZndDtzdHJlc3Nfd29ya2luZ19zZXQ7CiYjNDM7CiYjNDM7CXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShza2VsLSZndDtvYmosCiYjNDM7CQkJCQkJJiMzNDt0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIocHJvZywgJiMzNDtmaW5kIHN0cmVzcyBwcm9ncmFtJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHByb2csIHRydWUpOwomIzQzOwomIzQzOwllcnIgPSByaGFzaF9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3N0cmVzcyBza2VsX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuc3RyZXNzX3JobWFwKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlhcmdzW2ldLm1hcF9mZCA9IG1hcF9mZDsKJiM0MzsJCWFyZ3NbaV0uc3RvcCA9ICZhbXA7c3RvcDsKJiM0MzsJCWFyZ3NbaV0ubnJfa2V5cyA9IHdvcmtpbmdfc2V0OwomIzQzOwkJYXJnc1tpXS5zZWVkID0gaSAqIDk3NzsKJiM0MzsJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSwKJiM0MzsJCQkJICAgICAmYW1wO2FyZ3NbaV0pOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3B0aHJlYWRfY3JlYXRlJiMzNDspKQomIzQzOwkJCWdvdG8gc3RvcF90aHJlYWRzOwomIzQzOwkJY3JlYXRlZFtpXSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhcnQgPSBnZXRfdGltZV9ucygpOwomIzQzOwl3aGlsZSAoZ2V0X3RpbWVfbnMoKSAtIHN0YXJ0ICZsdDsgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7CiYjNDM7CQllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgJmFtcDtvcHRzKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzdHJlc3MgcHJvZyBydW4mIzM0OykpCiYjNDM7CQkJZ290byBzdG9wX3RocmVhZHM7CiYjNDM7CQlyYW4gPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7c3RvcF90aHJlYWRzOgomIzQzOwlhdG9taWNfc3RvcmUoJmFtcDtzdG9wLCB0cnVlKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KQomIzQzOwkJaWYgKGNyZWF0ZWRbaV0pCiYjNDM7CQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwomIzQzOwomIzQzOwlpZiAoZXJyIHx8ICFyYW4pCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3N0cmVzc19tYXhfdmlzaXRzLCAwLCAmIzM0O3N0cmVzcyBjYWxsYmFjayB2aXNpdHMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3N0cmVzc19mdWxsX3dhbGtzLCAwLCAmIzM0O3N0cmVzcyBmdWxsIHdhbGtzJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJlc3Nfb3ZlcnJ1bnMsIDAsICYjMzQ7c3RyZXNzIGNhbGxiYWNrIGJvdW5kJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDtzdHJlc3MgbWF4IGNhbGxiYWNrIHZpc2l0czogJWxsdSAobGltaXQgJXUpXG4mIzM0OywKJiM0MzsJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2tlbC0mZ3Q7YnNzLSZndDtzdHJlc3NfbWF4X3Zpc2l0cywKJiM0MzsJICAgICAgIHdvcmtpbmdfc2V0KTsKJiM0MztjbGVhbnVwOgomIzQzOwlyaGFzaF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByaGFzaF9tYXBfZXh0cmFfcHJlc2l6ZSh2b2lkKQogewogCWNvbnN0IF9fdTMyIG1heF9lbnRyaWVzID0gMTAyNDsKQEAgLTE4MCw0ICYjNDM7MjkwLDcgQEAgdm9pZCB0ZXN0X3JoYXNoKHZvaWQpCiAKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3Rlc3Rfcmhhc2hfaXRlciYjMzQ7KSkKIAkJcmhhc2hfaXRlcl90ZXN0KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGVzdF9yaGFzaF9pdGVyX3N0cmVzcyYjMzQ7KSkKJiM0MzsJCXJoYXNoX2l0ZXJfc3RyZXNzKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCmluZGV4IGZjMmRhYzNhNzE5ZTkuLjNkNzIwMTQzMGJhYmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jCkBAIC05LDExICYjNDM7OSwxOCBAQAogCiAjZGVmaW5lIEVOT0VOVCAyCiAjZGVmaW5lIEVFWElTVCAxNwomIzQzOyNkZWZpbmUgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTICgxVSAmbHQ7Jmx0OyAyMCkKIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogCiBpbnQgZXJyOwogCiYjNDM7Y29uc3Qgdm9sYXRpbGUgX191MzIgc3RyZXNzX3dvcmtpbmdfc2V0ID0gNDA5NjsKJiM0MzsKJiM0Mzt2b2xhdGlsZSBfX3U2NCBzdHJlc3NfbWF4X3Zpc2l0czsKJiM0Mzt2b2xhdGlsZSBfX3U2NCBzdHJlc3Nfb3ZlcnJ1bnM7CiYjNDM7dm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7CiYjNDM7CiBzdHJ1Y3QgZWxlbSB7CiAJY2hhciBhcnJbMTI4XTsKIAlpbnQgdmFsOwpAQCAtMjcsNiAmIzQzOzM0LDIwIEBAIHN0cnVjdCB7CiAJX190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7CiB9IHJobWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCBSSEFTSF9TVFJFU1NfTUFYX0VOVFJJRVMpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gc3RyZXNzX3JobWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBfX3U2NCBzdHJlc3NfaXRlcl9jYihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLAomIzQzOwkJCSAgICB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBpbnQgdGVzdF9yaGFzaF9sb29rdXBfdXBkYXRlKHZvaWQgKmN0eCkKIHsKQEAgLTI0NiwzICYjNDM7MjY3LDIzIEBAIGludCB0ZXN0X3JoYXNoX2RlbGV0ZV9ub25leGlzdGVudCh2b2lkICpjdHgpCiAJZXJyID0gMDsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IHRlc3Rfcmhhc2hfaXRlcl9zdHJlc3Modm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQ29uY3VycmVudCByZWhhc2ggbWF5IHByb2R1Y2UgZHVwbGljYXRlIHZpc2l0cy4gQ2hlY2sgdGhhdCB0aGUKJiM0MzsJICogaGVscGVyIHN0aWxsIGdpdmVzIG9uZSB3YWxrIGEgZmluaXRlIGNhbGxiYWNrIGJvdW5kOyBubyBzbmFwc2hvdAomIzQzOwkgKiBvciB1bmlxdWUtdmlzaXQgZ3VhcmFudGVlIGlzIGV4cGVjdGVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsb25nIHZpc2l0czsKJiM0MzsKJiM0MzsJdmlzaXRzID0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtKCZhbXA7c3RyZXNzX3JobWFwLCBzdHJlc3NfaXRlcl9jYiwgTlVMTCwgMCk7CiYjNDM7CWlmICh2aXNpdHMgJmd0OyBzdHJlc3NfbWF4X3Zpc2l0cykKJiM0MzsJCXN0cmVzc19tYXhfdmlzaXRzID0gdmlzaXRzOwomIzQzOwlpZiAodmlzaXRzICZndDsgc3RyZXNzX3dvcmtpbmdfc2V0KQomIzQzOwkJc3RyZXNzX292ZXJydW5zJiM0MzsmIzQzOzsKJiM0MzsJaWYgKHZpc2l0cyA9PSBzdHJlc3Nfd29ya2luZ19zZXQpCiYjNDM7CQlzdHJlc3NfZnVsbF93YWxrcyYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBkaWZmIGFmZmVjdHMgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgd2hpY2ggaXMgYSBjb3JlIEJQRiBjb21wb25lbnQsIGFuZCB0aGUgc2VsZnRlc3RzOiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY2AuIFJpZ2h0LCBzbyB0aGlzIGhhcyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBoYXNoIHRhYmxlIGJlaGF2aW9yIGFuZCB0aGUgYXNzb2NpYXRlZCB0ZXN0cy4KCk15IGZpcnN0IHN0ZXAgaXMgdG8gZm9jdXMgb24gdGhlIGtlcm5lbC1zaWRlIGNoYW5nZSBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBJJiMzOTtsbCB3YW50IHRvIGdldCBhIGxvb2sgYXQgYXJvdW5kIGxpbmUgMzE5OC4gRWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzaG91bGQgZG8gdGhlIHRyaWNrOyBJIGp1c3QgbmVlZCB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBhZmZlY3RlZCBjb2RlIGFuZCBzZWUgd2hhdCBtb2RpZmljYXRpb25zIHdlcmUgaW50cm9kdWNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGFsdGVyZWQgaW4gdGhpcyBjcnVjaWFsIGFyZWEuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSB3aWxsIGxpa2VseSBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2VhY2hfcmhhc2hfZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxOTU6c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxOTYtXHRcdFx0XHR2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTE2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzAtXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUzMTpcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZWFjaF9yaGFzaF9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUzMi1cdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIGxpbmVzIG9mIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgSGFzaHRhYmxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDMxOTAgdG8gMzI0MC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoaXMgc2VjdGlvbi4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gaG93IHRoaXMgc3BlY2lmaWMgcGFydCBvZiB0aGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uIG9wZXJhdGVzLiBJJiMzOTtsbCByZWFkIHRocm91Z2ggdGhlc2UgbGluZXMgY2FyZWZ1bGx5LCBsb29raW5nIGZvciBwYXR0ZXJucywgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVmaW5lcyBpdHMgYmVoYXZpb3IuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGF0dGVudGlvbiB0byBob3cgdGhlIG9wZXJhdGlvbnMgYWZmZWN0IG92ZXJhbGwgcGVyZm9ybWFuY2UgYXMgd2VsbC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gZWl0aGVyIGVsZW1lbnQgaW5zZXJ0aW9uLCByZXRyaWV2YWwsIG9yIGRlbGV0aW9uIHdpdGhpbiB0aGUgdGFibGUsIG9yIHBvc3NpYmx5IG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMgb2YgdGhlIGhhc2h0YWJsZS4gTXkgZ29hbCBpcyB0byBleHRyYWN0IHRoZSBjb3JlIGxvZ2ljIGJlaW5nIHBlcmZvcm1lZCBieSB0aGVzZSBsaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE5MDpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7OiBcJiMzNDspO1xuMzE5MTpcdFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkLCB2YWx1ZSwgbSk7XG4zMTkyOlx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbjMxOTM6XHR9XG4zMTk0Olx0XG4zMTk1Olx0c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbjMxOTY6XHRcdFx0XHRcdHZvaWQgKmNhbGxiYWNrX2N0eCwgdTY0IGZsYWdzKVxuMzE5NzpcdHtcbjMxOTg6XHRcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbjMxOTk6XHRcdHZvaWQgKnByZXZfa2V5ID0gTlVMTDtcbjMyMDA6XHRcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xuMzIwMTpcdFx0dTMyIHZpc2l0X2J1ZGdldDtcbjMyMDI6XHRcdHUzMiBudW1fZWxlbXMgPSAwO1xuMzIwMzpcdFx0dTY0IHJldCA9IDA7XG4zMjA0Olx0XG4zMjA1Olx0XHRjYW50X21pZ3JhdGUoKTtcbjMyMDY6XHRcbjMyMDc6XHRcdGlmIChmbGFncyAhPSAwKVxuMzIwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMyMDk6XHRcbjMyMTA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMyMTE6XHRcdC8qXG4zMjEyOlx0XHQgKiBCZXN0LWVmZm9ydCBpdGVyYXRpb246IGlmIHJoYXNodGFibGUgaXMgY29uY3VycmVudGx5IHJlc2l6ZWQgb3JcbjMyMTM6XHRcdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuMzIxNDpcdFx0ICogZWxlbWVudHMgdmlzaXRlZC5cbjMyMTU6XHRcdCAqL1xuMzIxNjpcdFx0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbjMyMTc6XHRcdHdoaWxlIChudW1fZWxlbXMgXHUwMDNjIHZpc2l0X2J1ZGdldCBcdTAwMjZcdTAwMjZcbjMyMTg6XHRcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbjMyMTk6XHRcdFx0aWYgKElTX0VSUihlbGVtKSlcbjMyMjA6XHRcdFx0XHRicmVhaztcbjMyMjE6XHRcdFx0bnVtX2VsZW1zJiM0MzsmIzQzOztcbjMyMjI6XHRcdFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsXG4zMjIzOlx0XHRcdFx0XHQgICh1NjQpKGxvbmcpZWxlbS1cdTAwM2VkYXRhLFxuMzIyNDpcdFx0XHRcdFx0ICAodTY0KShsb25nKXJodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKSxcbjMyMjU6XHRcdFx0XHRcdCAgKHU2NCkobG9uZyljYWxsYmFja19jdHgsIDApO1xuMzIyNjpcdFx0XHRpZiAocmV0KVxuMzIyNzpcdFx0XHRcdGJyZWFrO1xuMzIyODpcdFxuMzIyOTpcdFx0XHRwcmV2X2tleSA9IGVsZW0tXHUwMDNlZGF0YTtcdC8qIHZhbGlkIHdoaWxlIFJDVSBoZWxkICovXG4zMjMwOlx0XHR9XG4zMjMxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMyMzI6XHRcbjMyMzM6XHRcdHJldHVybiBudW1fZWxlbXM7XG4zMjM0Olx0fVxuMzIzNTpcdFxuMzIzNjpcdHN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuMzIzNzpcdHtcbjMyMzg6XHRcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbjMyMzk6XHRcdHU2NCBudW1fZW50cmllcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwMQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gc3RhYmlsaXppbmcgdGhlIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfTUFQX1RZUEVfUkhBU0hgIG1hcHMuIFRoZSBjb3JlIGNoYW5nZSBsaW1pdHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB2aXNpdGVkIGR1cmluZyBpdGVyYXRpb24gdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIChgYXRvbWljX3JlYWQoJmFtcDtyaHRhYi0mZ3Q7aHQubmVsZW1zKWApIGluIHRoZSByaGFzaHRhYmxlLiBQcmV2aW91c2x5LCB3ZSByaXNrZWQgaW5maW5pdGUgbG9vcHMgb3IgaW5lZmZpY2llbnQgaXRlcmF0aW9ucyBpZiB0aGVyZSB3ZXJlIGNvbmN1cnJlbnQgdXBkYXRlcyBoYXBwZW5pbmcgdG8gdGhlIG1hcC4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCBzdHJlc3MgdGVzdHMgdG8gdmFsaWRhdGUgdGhpcyBmaXguCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY3JlYXRlcyBhbnkgS01TQU4gY29uY2VybnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGRvZXNuJiMzOTt0ICpzZWVtKiBsaWtlIGl0IHdpbGwuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIEtNU0FOIGNyaXRlcmlhOiBhcmUgd2Ugc2VuZGluZyBvciBtb2RpZnlpbmcga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgZGF0YSBleHBvc2VkIHRvIHVzZXJzcGFjZT8gQXJlIHRoZXJlIGFueSBicmFuY2hlcyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gQXJlIG5ldyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IERvZXMgdGhlIHBhdGNoIG1lc3Mgd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIGdpdmUgcmVhZCBhY2Nlc3MgdG8gdW5pbml0YWxpemVkIGRhdGE/IElzIHRoZXJlIGFueSBraW5kIG9mIGluZm9ybWF0aW9uIGxlYWssIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBwYWRkaW5nIGlzc3Vlcz8KCk5vLiBgdmlzaXRfYnVkZ2V0YCBpcyByZWFkIGZyb20gdGhlIGBhdG9taWNfcmVhZCgpYCBmdW5jdGlvbiwgYW5kIGlzIGluaXRpYWxpemVkLiBgbnVtX2VsZW1zYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCYjMzk7cyBqdXN0IGEgbG9vcCBib3VuZCBjaGVjayB0byBwcmV2ZW50IHVuYm91bmRlZCBpdGVyYXRpb24uIEl0IGlzIGFsbCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgoKTGV0IG1lIGRvdWJsZS1jaGVjay4gSSBzZWUgdGhhdCBgdmlzaXRfYnVkZ2V0YCBpcyBhc3NpZ25lZCB1c2luZyBgYXRvbWljX3JlYWQoKWAsIGBudW1fZWxlbXNgIGlzIHNldCB0byB6ZXJvLCBhbmQgYHByZXZfa2V5YCBpcyBzZXQgdG8gTlVMTC4gVGhlIHJldHVybiB2YWx1ZSwgYG51bV9lbGVtc2AsIGlzIGFsc28gaW5pdGlhbGl6ZWQuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhcHBlYXJzIHRvIGJlIHJlYWQgb3IgZXhwb3NlZC4gQW55IGNvbmN1cnJlbmN5IG9yIFJDVSByZWxhdGVkIGlzc3VlcyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgdG9vbHMuIEkgYW0gbm90IHNlZWluZyBhbnkgaXNzdWVzLgoKT2theSwgbGV0IG1lIHB1dCB0aGlzIGludG8gYSBmb3JtYWwgYXJndW1lbnQ6CgoxLiAgKipQYXRjaCBGdW5jdGlvbjoqKiBUaGUgcGF0Y2ggYWRkcyBhIGB2aXNpdF9idWRnZXRgIGxpbWl0IHVzaW5nIGBhdG9taWNfcmVhZCgmYW1wO3JodGFiLSZndDtodC5uZWxlbXMpYCB0byBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgd2hlbiBpdGVyYXRpbmcgb3ZlciBlbGVtZW50cyBpbiBlQlBGIGBCUEZfTUFQX1RZUEVfUkhBU0hgLiBUaGlzIGlzIHRvIHByZXZlbnQgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG1vZGlmaWNhdGlvbnMsIGFuZCBpdCBpbmNsdWRlcyBhZGRlZCBzZWxmdGVzdHMgZm9yIHZhbGlkYXRpb24uCjIuICAqKktNU0FOIEFwcGxpY2FiaWxpdHk6KiogS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCAqb25seSogaW50cm9kdWNlcyBsb2NhbCB2YXJpYWJsZXMgKGB2aXNpdF9idWRnZXRgLCBgbnVtX2VsZW1zYCksIHRoYXQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBib3VuZHMtY2hlY2tlZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBjb3B5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLgozLiAgKipLQVNBTi9TdGFuZGFyZCBUb29scyBBcHBsaWNhYmlsaXR5OioqIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBjb25jdXJyZW5jeSwgUkNVIG9iamVjdCBsaWZldGltZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1cmluZyByaGFzaHRhYmxlIHRyYXZlcnNhbCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGNvbmZpZ3VyYXRpb25zLgo0LiAgKipDb25jbHVzaW9uOioqIFRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIExldCYjMzk7cyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGJ5IGJvdW5kaW5nIHRoZSBpdGVyYXRpb24gbG9vcCB3aXRoIGEgYHZpc2l0X2J1ZGdldGAgZGVyaXZlZCBmcm9tIGBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzIGFyZSBleHBvc2VkIG9yIGNoZWNrZWQuXG4zLiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgY29uY2VybnMgaW52b2x2aW5nIFJDVS1wcm90ZWN0ZWQgcmhhc2h0YWJsZSBlbGVtZW50cyBhcmUgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMb2NrZGVwIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGJ5IGJvdW5kaW5nIHRoZSBpdGVyYXRpb24gbG9vcCB3aXRoIGEgYHZpc2l0X2J1ZGdldGAgZGVyaXZlZCBmcm9tIGBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzIGFyZSBleHBvc2VkIG9yIGNoZWNrZWQuXG4zLiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgY29uY2VybnMgaW52b2x2aW5nIFJDVS1wcm90ZWN0ZWQgcmhhc2h0YWJsZSBlbGVtZW50cyBhcmUgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMb2NrZGVwIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjMzOjUxLjg1MTExOTA3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODI2MDM2Mzg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9mb3JfZWFjaF9tYXBfZWxlbVwiLFxuICAgIFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBieSBib3VuZGluZyB0aGUgaXRlcmF0aW9uIGxvb3Agd2l0aCBhIGB2aXNpdF9idWRnZXRgIGRlcml2ZWQgZnJvbSBgYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcyBhcmUgZXhwb3NlZCBvciBjaGVja2VkLlxcbjMuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBjb25jZXJucyBpbnZvbHZpbmcgUkNVLXByb3RlY3RlZCByaGFzaHRhYmxlIGVsZW1lbnRzIGFyZSBhZGRyZXNzZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExvY2tkZXAgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfZWFjaF9yaGFzaF9lbGVtKClgIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdG8gZW5mb3JjZSBhbiBpdGVyYXRpb24gYnVkZ2V0IGJhc2VkIG9uIGF0b21pYyBgbmVsZW1zYCB3aGVuIGl0ZXJhdGluZyBvdmVyIGBCUEZfTUFQX1RZUEVfUkhBU0hgIG1hcHMgdmlhIGBicGZfZm9yX2VhY2hfbWFwX2VsZW0oKWAuIFRoaXMgYm91bmRzIHRoZSBpdGVyYXRpb24gbG9vcCBhbmQgcHJldmVudHMgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG9wZXJhdGlvbnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozMzo1MS44NTExMzM1ODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTMzMDkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTc6MzM6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLjJjYWQ2N2M5MDE1NDMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC0zMTk4LDcgKzMxOTgsOCBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbiBcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuIFxcdHZvaWQgKnByZXZfa2V5ID0gTlVMTDtcXG4gXFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW07XFxuLVxcdGludCBudW1fZWxlbXMgPSAwO1xcbitcXHR1MzIgdmlzaXRfYnVkZ2V0O1xcbitcXHR1MzIgbnVtX2VsZW1zID0gMDtcXG4gXFx0dTY0IHJldCA9IDA7XFxuIFxcbiBcXHRjYW50X21pZ3JhdGUoKTtcXG5AQCAtMzIxMiw3ICszMjEzLDkgQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcXG4gXFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuIFxcdCAqIGVsZW1lbnRzIHZpc2l0ZWQuXFxuIFxcdCAqL1xcbi1cXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcXG4rXFx0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpO1xcbitcXHR3aGlsZSAobnVtX2VsZW1zIFxcdTAwM2MgdmlzaXRfYnVkZ2V0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgcHJldl9rZXkpKSkge1xcbiBcXHRcXHRpZiAoSVNfRVJSKGVsZW0pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0bnVtX2VsZW1zKys7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXFxuaW5kZXggOThiYjY2OTA3YjdmNy4uZjFhMGE4ZTNmYzFhYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xcbkBAIC0zLDEyICszLDE2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRhdG9taWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInJoYXNoLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJwZl9pdGVyX2JwZl9yaGFzaF9tYXAuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiBcXG4rI2RlZmluZSBSSEFTSF9TVFJFU1NfRFVSQVRJT05fTlNcXHQoM1VMTCAqIDEwMDAwMDAwMDBVTEwpXFxuK1xcbiBzdGF0aWMgdm9pZCByaGFzaF9ydW4oY29uc3QgY2hhciAqcHJvZ19uYW1lKVxcbiB7XFxuIFxcdHN0cnVjdCByaGFzaCAqc2tlbDtcXG5AQCAtNTMsNiArNTcsMTEyIEBAIHN0YXRpYyBpbnQgcmhhc2hfbWFwX2NyZWF0ZShfX3UzMiBtYXhfZW50cmllcywgX191NjQgbWFwX2V4dHJhKVxcbiBcXHRcXHRcXHQgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgXFx1MDAyNm9wdHMpO1xcbiB9XFxuIFxcbitzdHJ1Y3Qgcmhhc2hfc3RyZXNzX2FyZyB7XFxuK1xcdGludCBtYXBfZmQ7XFxuK1xcdGF0b21pY19ib29sICpzdG9wO1xcbitcXHRfX3UzMiBucl9rZXlzO1xcbitcXHRfX3UzMiBzZWVkO1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgKnJoYXNoX3N0cmVzc191cGRhdGUodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3Qgcmhhc2hfc3RyZXNzX2FyZyAqYXJnID0gZGF0YTtcXG4rXFx0X191NjQgdmFsdWUgPSAwO1xcbitcXHRfX3UzMiBrZXk7XFxuK1xcdF9fdTMyIGk7XFxuK1xcbitcXHR3aGlsZSAoIWF0b21pY19sb2FkKGFyZy1cXHUwMDNlc3RvcCkpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZy1cXHUwMDNlbnJfa2V5cyBcXHUwMDI2XFx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVxcdTAwM2VzdG9wKTsgaSsrKSB7XFxuK1xcdFxcdFxcdGtleSA9ICgoX191MzIpaSAqIDI2NTQ0MzU3NjFVICsgYXJnLVxcdTAwM2VzZWVkKSAlIGFyZy1cXHUwMDNlbnJfa2V5cztcXG4rXFx0XFx0XFx0YnBmX21hcF91cGRhdGVfZWxlbShhcmctXFx1MDAzZW1hcF9mZCwgXFx1MDAyNmtleSwgXFx1MDAyNnZhbHVlLCBCUEZfQU5ZKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXJnLVxcdTAwM2Vucl9rZXlzIFxcdTAwMjZcXHUwMDI2ICFhdG9taWNfbG9hZChhcmctXFx1MDAzZXN0b3ApOyBpKyspIHtcXG4rXFx0XFx0XFx0a2V5ID0gKChfX3UzMilpICogMjY1NDQzNTc2MVUgKyBhcmctXFx1MDAzZXNlZWQpICUgYXJnLVxcdTAwM2Vucl9rZXlzO1xcbitcXHRcXHRcXHRicGZfbWFwX2RlbGV0ZV9lbGVtKGFyZy1cXHUwMDNlbWFwX2ZkLCBcXHUwMDI2a2V5KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmhhc2hfaXRlcl9zdHJlc3Modm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgcmhhc2ggKnNrZWwgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgcmhhc2hfc3RyZXNzX2FyZyBhcmdzWzJdO1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdGF0b21pY19ib29sIHN0b3AgPSBmYWxzZTtcXG4rXFx0Ym9vbCByYW4gPSBmYWxzZTtcXG4rXFx0X191NjQgc3RhcnQ7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWRzWzJdO1xcbitcXHRib29sIGNyZWF0ZWRbMl0gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xcbitcXHRpbnQgbnJfY3B1cztcXG4rXFx0X191MzIgd29ya2luZ19zZXQ7XFxuK1xcdGludCBtYXBfZmQsIGVyciwgaTtcXG4rXFxuK1xcdG5yX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QobnJfY3B1cywgMCwgXFxcIm51bV9wb3NzaWJsZV9jcHVzXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKG5yX2NwdXMgXFx1MDAzYyAyKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gcmhhc2hfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJyaGFzaF9fb3BlbiBzdHJlc3NcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR3b3JraW5nX3NldCA9IHNrZWwtXFx1MDAzZXJvZGF0YS1cXHUwMDNlc3RyZXNzX3dvcmtpbmdfc2V0O1xcbitcXG4rXFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNrZWwtXFx1MDAzZW9iaixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcInRlc3Rfcmhhc2hfaXRlcl9zdHJlc3NcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHByb2csIFxcXCJmaW5kIHN0cmVzcyBwcm9ncmFtXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0YnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChwcm9nLCB0cnVlKTtcXG4rXFxuK1xcdGVyciA9IHJoYXNoX19sb2FkKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzdHJlc3Mgc2tlbF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXFx1MDAzZW1hcHMuc3RyZXNzX3JobWFwKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGhyZWFkcyk7IGkrKykge1xcbitcXHRcXHRhcmdzW2ldLm1hcF9mZCA9IG1hcF9mZDtcXG4rXFx0XFx0YXJnc1tpXS5zdG9wID0gXFx1MDAyNnN0b3A7XFxuK1xcdFxcdGFyZ3NbaV0ubnJfa2V5cyA9IHdvcmtpbmdfc2V0O1xcbitcXHRcXHRhcmdzW2ldLnNlZWQgPSBpICogOTc3O1xcbitcXHRcXHRlcnIgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2YXJnc1tpXSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInB0aHJlYWRfY3JlYXRlXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gc3RvcF90aHJlYWRzO1xcbitcXHRcXHRjcmVhdGVkW2ldID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0c3RhcnQgPSBnZXRfdGltZV9ucygpO1xcbitcXHR3aGlsZSAoZ2V0X3RpbWVfbnMoKSAtIHN0YXJ0IFxcdTAwM2MgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7XFxuK1xcdFxcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcXHUwMDI2b3B0cyk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInN0cmVzcyBwcm9nIHJ1blxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIHN0b3BfdGhyZWFkcztcXG4rXFx0XFx0cmFuID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rc3RvcF90aHJlYWRzOlxcbitcXHRhdG9taWNfc3RvcmUoXFx1MDAyNnN0b3AsIHRydWUpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0aHJlYWRzKTsgaSsrKVxcbitcXHRcXHRpZiAoY3JlYXRlZFtpXSlcXG4rXFx0XFx0XFx0cHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpO1xcbitcXG4rXFx0aWYgKGVyciB8fCAhcmFuKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRBU1NFUlRfR1Qoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJlc3NfbWF4X3Zpc2l0cywgMCwgXFxcInN0cmVzcyBjYWxsYmFjayB2aXNpdHNcXFwiKTtcXG4rXFx0QVNTRVJUX0dUKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc3RyZXNzX2Z1bGxfd2Fsa3MsIDAsIFxcXCJzdHJlc3MgZnVsbCB3YWxrc1xcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJlc3Nfb3ZlcnJ1bnMsIDAsIFxcXCJzdHJlc3MgY2FsbGJhY2sgYm91bmRcXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCJzdHJlc3MgbWF4IGNhbGxiYWNrIHZpc2l0czogJWxsdSAobGltaXQgJXUpXFxcXG5cXFwiLFxcbitcXHQgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cmVzc19tYXhfdmlzaXRzLFxcbitcXHQgICAgICAgd29ya2luZ19zZXQpO1xcbitjbGVhbnVwOlxcbitcXHRyaGFzaF9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcmhhc2hfbWFwX2V4dHJhX3ByZXNpemUodm9pZClcXG4ge1xcbiBcXHRjb25zdCBfX3UzMiBtYXhfZW50cmllcyA9IDEwMjQ7XFxuQEAgLTE4MCw0ICsyOTAsNyBAQCB2b2lkIHRlc3Rfcmhhc2godm9pZClcXG4gXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ0ZXN0X3JoYXNoX2l0ZXJcXFwiKSlcXG4gXFx0XFx0cmhhc2hfaXRlcl90ZXN0KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidGVzdF9yaGFzaF9pdGVyX3N0cmVzc1xcXCIpKVxcbitcXHRcXHRyaGFzaF9pdGVyX3N0cmVzcygpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmNcXG5pbmRleCBmYzJkYWMzYTcxOWU5Li4zZDcyMDE0MzBiYWJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmNcXG5AQCAtOSwxMSArOSwxOCBAQFxcbiBcXG4gI2RlZmluZSBFTk9FTlQgMlxcbiAjZGVmaW5lIEVFWElTVCAxN1xcbisjZGVmaW5lIFJIQVNIX1NUUkVTU19NQVhfRU5UUklFUyAoMVUgXFx1MDAzY1xcdTAwM2MgMjApXFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gXFxuIGludCBlcnI7XFxuIFxcbitjb25zdCB2b2xhdGlsZSBfX3UzMiBzdHJlc3Nfd29ya2luZ19zZXQgPSA0MDk2O1xcbitcXG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX21heF92aXNpdHM7XFxuK3ZvbGF0aWxlIF9fdTY0IHN0cmVzc19vdmVycnVucztcXG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7XFxuK1xcbiBzdHJ1Y3QgZWxlbSB7XFxuIFxcdGNoYXIgYXJyWzEyOF07XFxuIFxcdGludCB2YWw7XFxuQEAgLTI3LDYgKzM0LDIwIEBAIHN0cnVjdCB7XFxuIFxcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGVsZW0pO1xcbiB9IHJobWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTKTtcXG4rXFx0X190eXBlKGtleSwgX191MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG4rfSBzdHJlc3NfcmhtYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rc3RhdGljIF9fdTY0IHN0cmVzc19pdGVyX2NiKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXFxuK1xcdFxcdFxcdCAgICB2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIGludCB0ZXN0X3JoYXNoX2xvb2t1cF91cGRhdGUodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTI0NiwzICsyNjcsMjMgQEAgaW50IHRlc3Rfcmhhc2hfZGVsZXRlX25vbmV4aXN0ZW50KHZvaWQgKmN0eClcXG4gXFx0ZXJyID0gMDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCB0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzKHZvaWQgKmN0eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBDb25jdXJyZW50IHJlaGFzaCBtYXkgcHJvZHVjZSBkdXBsaWNhdGUgdmlzaXRzLiBDaGVjayB0aGF0IHRoZVxcbitcXHQgKiBoZWxwZXIgc3RpbGwgZ2l2ZXMgb25lIHdhbGsgYSBmaW5pdGUgY2FsbGJhY2sgYm91bmQ7IG5vIHNuYXBzaG90XFxuK1xcdCAqIG9yIHVuaXF1ZS12aXNpdCBndWFyYW50ZWUgaXMgZXhwZWN0ZWQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdGxvbmcgdmlzaXRzO1xcbitcXG4rXFx0dmlzaXRzID0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtKFxcdTAwMjZzdHJlc3NfcmhtYXAsIHN0cmVzc19pdGVyX2NiLCBOVUxMLCAwKTtcXG4rXFx0aWYgKHZpc2l0cyBcXHUwMDNlIHN0cmVzc19tYXhfdmlzaXRzKVxcbitcXHRcXHRzdHJlc3NfbWF4X3Zpc2l0cyA9IHZpc2l0cztcXG4rXFx0aWYgKHZpc2l0cyBcXHUwMDNlIHN0cmVzc193b3JraW5nX3NldClcXG4rXFx0XFx0c3RyZXNzX292ZXJydW5zKys7XFxuK1xcdGlmICh2aXNpdHMgPT0gc3RyZXNzX3dvcmtpbmdfc2V0KVxcbitcXHRcXHRzdHJlc3NfZnVsbF93YWxrcysrO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozMzo1Mi4yNzI5NzA4OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjcxODA0NDA4NTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9mb3JfZWFjaF9tYXBfZWxlbVwiLFxuICAgIFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfZWFjaF9yaGFzaF9lbGVtKClgIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdG8gZW5mb3JjZSBhbiBpdGVyYXRpb24gYnVkZ2V0IGJhc2VkIG9uIGF0b21pYyBgbmVsZW1zYCB3aGVuIGl0ZXJhdGluZyBvdmVyIGBCUEZfTUFQX1RZUEVfUkhBU0hgIG1hcHMgdmlhIGBicGZfZm9yX2VhY2hfbWFwX2VsZW0oKWAuIFRoaXMgYm91bmRzIHRoZSBpdGVyYXRpb24gbG9vcCBhbmQgcHJldmVudHMgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG9wZXJhdGlvbnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDQ0MDMwOTkxYzYxNzVmNzNmZDQxODcyMzU0NjIwN2EwMjU5OGU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTc6MzM6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCBkNDBjYjVkZDQ0NmNhLi4yY2FkNjdjOTAxNTQzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbisrKyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMzE5OCw3ICszMTk4LDggQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbiBcdHZvaWQgKnByZXZfa2V5ID0gTlVMTDtcbiBcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xuLVx0aW50IG51bV9lbGVtcyA9IDA7XG4rXHR1MzIgdmlzaXRfYnVkZ2V0O1xuK1x0dTMyIG51bV9lbGVtcyA9IDA7XG4gXHR1NjQgcmV0ID0gMDtcbiBcbiBcdGNhbnRfbWlncmF0ZSgpO1xuQEAgLTMyMTIsNyArMzIxMyw5IEBAIHN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXG4gXHQgKiBlbGVtZW50cyBhcmUgZGVsZXRlZC9pbnNlcnRlZCwgdGhlcmUgbWF5IGJlIG1pc3NlZCBvciBkdXBsaWNhdGVcbiBcdCAqIGVsZW1lbnRzIHZpc2l0ZWQuXG4gXHQgKi9cbi1cdHdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbitcdHZpc2l0X2J1ZGdldCA9IGF0b21pY19yZWFkKFx1MDAyNnJodGFiLVx1MDAzZWh0Lm5lbGVtcyk7XG4rXHR3aGlsZSAobnVtX2VsZW1zIFx1MDAzYyB2aXNpdF9idWRnZXQgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBwcmV2X2tleSkpKSB7XG4gXHRcdGlmIChJU19FUlIoZWxlbSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdG51bV9lbGVtcysrO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXG5pbmRleCA5OGJiNjY5MDdiN2Y3Li5mMWEwYThlM2ZjMWFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guY1xuQEAgLTMsMTIgKzMsMTYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRhdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFwicmhhc2guc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9pdGVyX2JwZl9yaGFzaF9tYXAuc2tlbC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiBcbisjZGVmaW5lIFJIQVNIX1NUUkVTU19EVVJBVElPTl9OU1x0KDNVTEwgKiAxMDAwMDAwMDAwVUxMKVxuK1xuIHN0YXRpYyB2b2lkIHJoYXNoX3J1bihjb25zdCBjaGFyICpwcm9nX25hbWUpXG4ge1xuIFx0c3RydWN0IHJoYXNoICpza2VsO1xuQEAgLTUzLDYgKzU3LDExMiBAQCBzdGF0aWMgaW50IHJoYXNoX21hcF9jcmVhdGUoX191MzIgbWF4X2VudHJpZXMsIF9fdTY0IG1hcF9leHRyYSlcbiBcdFx0XHQgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgXHUwMDI2b3B0cyk7XG4gfVxuIFxuK3N0cnVjdCByaGFzaF9zdHJlc3NfYXJnIHtcbitcdGludCBtYXBfZmQ7XG4rXHRhdG9taWNfYm9vbCAqc3RvcDtcbitcdF9fdTMyIG5yX2tleXM7XG4rXHRfX3UzMiBzZWVkO1xuK307XG4rXG4rc3RhdGljIHZvaWQgKnJoYXNoX3N0cmVzc191cGRhdGUodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3Qgcmhhc2hfc3RyZXNzX2FyZyAqYXJnID0gZGF0YTtcbitcdF9fdTY0IHZhbHVlID0gMDtcbitcdF9fdTMyIGtleTtcbitcdF9fdTMyIGk7XG4rXG4rXHR3aGlsZSAoIWF0b21pY19sb2FkKGFyZy1cdTAwM2VzdG9wKSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmctXHUwMDNlbnJfa2V5cyBcdTAwMjZcdTAwMjYgIWF0b21pY19sb2FkKGFyZy1cdTAwM2VzdG9wKTsgaSsrKSB7XG4rXHRcdFx0a2V5ID0gKChfX3UzMilpICogMjY1NDQzNTc2MVUgKyBhcmctXHUwMDNlc2VlZCkgJSBhcmctXHUwMDNlbnJfa2V5cztcbitcdFx0XHRicGZfbWFwX3VwZGF0ZV9lbGVtKGFyZy1cdTAwM2VtYXBfZmQsIFx1MDAyNmtleSwgXHUwMDI2dmFsdWUsIEJQRl9BTlkpO1xuK1x0XHR9XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZy1cdTAwM2Vucl9rZXlzIFx1MDAyNlx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApOyBpKyspIHtcbitcdFx0XHRrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSArIGFyZy1cdTAwM2VzZWVkKSAlIGFyZy1cdTAwM2Vucl9rZXlzO1xuK1x0XHRcdGJwZl9tYXBfZGVsZXRlX2VsZW0oYXJnLVx1MDAzZW1hcF9mZCwgXHUwMDI2a2V5KTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJoYXNoX2l0ZXJfc3RyZXNzKHZvaWQpXG4re1xuK1x0c3RydWN0IHJoYXNoICpza2VsID0gTlVMTDtcbitcdHN0cnVjdCByaGFzaF9zdHJlc3NfYXJnIGFyZ3NbMl07XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRhdG9taWNfYm9vbCBzdG9wID0gZmFsc2U7XG4rXHRib29sIHJhbiA9IGZhbHNlO1xuK1x0X191NjQgc3RhcnQ7XG4rXHRwdGhyZWFkX3QgdGhyZWFkc1syXTtcbitcdGJvb2wgY3JlYXRlZFsyXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xuK1x0aW50IG5yX2NwdXM7XG4rXHRfX3UzMiB3b3JraW5nX3NldDtcbitcdGludCBtYXBfZmQsIGVyciwgaTtcbitcbitcdG5yX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbitcdGlmICghQVNTRVJUX0dUKG5yX2NwdXMsIDAsIFwibnVtX3Bvc3NpYmxlX2NwdXNcIikpXG4rXHRcdHJldHVybjtcbitcdGlmIChucl9jcHVzIFx1MDAzYyAyKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tlbCA9IHJoYXNoX19vcGVuKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJyaGFzaF9fb3BlbiBzdHJlc3NcIikpXG4rXHRcdHJldHVybjtcbitcdHdvcmtpbmdfc2V0ID0gc2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlc3RyZXNzX3dvcmtpbmdfc2V0O1xuK1xuK1x0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNrZWwtXHUwMDNlb2JqLFxuK1x0XHRcdFx0XHRcdFwidGVzdF9yaGFzaF9pdGVyX3N0cmVzc1wiKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihwcm9nLCBcImZpbmQgc3RyZXNzIHByb2dyYW1cIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQocHJvZywgdHJ1ZSk7XG4rXG4rXHRlcnIgPSByaGFzaF9fbG9hZChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzdHJlc3Mgc2tlbF9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuc3RyZXNzX3JobWFwKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGhyZWFkcyk7IGkrKykge1xuK1x0XHRhcmdzW2ldLm1hcF9mZCA9IG1hcF9mZDtcbitcdFx0YXJnc1tpXS5zdG9wID0gXHUwMDI2c3RvcDtcbitcdFx0YXJnc1tpXS5ucl9rZXlzID0gd29ya2luZ19zZXQ7XG4rXHRcdGFyZ3NbaV0uc2VlZCA9IGkgKiA5Nzc7XG4rXHRcdGVyciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIHJoYXNoX3N0cmVzc191cGRhdGUsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmFyZ3NbaV0pO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicHRocmVhZF9jcmVhdGVcIikpXG4rXHRcdFx0Z290byBzdG9wX3RocmVhZHM7XG4rXHRcdGNyZWF0ZWRbaV0gPSB0cnVlO1xuK1x0fVxuK1xuK1x0c3RhcnQgPSBnZXRfdGltZV9ucygpO1xuK1x0d2hpbGUgKGdldF90aW1lX25zKCkgLSBzdGFydCBcdTAwM2MgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TKSB7XG4rXHRcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcdTAwMjZvcHRzKTtcbitcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcInN0cmVzcyBwcm9nIHJ1blwiKSlcbitcdFx0XHRnb3RvIHN0b3BfdGhyZWFkcztcbitcdFx0cmFuID0gdHJ1ZTtcbitcdH1cbitcbitzdG9wX3RocmVhZHM6XG4rXHRhdG9taWNfc3RvcmUoXHUwMDI2c3RvcCwgdHJ1ZSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRocmVhZHMpOyBpKyspXG4rXHRcdGlmIChjcmVhdGVkW2ldKVxuK1x0XHRcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbitcbitcdGlmIChlcnIgfHwgIXJhbilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cmVzc19tYXhfdmlzaXRzLCAwLCBcInN0cmVzcyBjYWxsYmFjayB2aXNpdHNcIik7XG4rXHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX2Z1bGxfd2Fsa3MsIDAsIFwic3RyZXNzIGZ1bGwgd2Fsa3NcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX292ZXJydW5zLCAwLCBcInN0cmVzcyBjYWxsYmFjayBib3VuZFwiKTtcbitcdHByaW50ZihcInN0cmVzcyBtYXggY2FsbGJhY2sgdmlzaXRzOiAlbGx1IChsaW1pdCAldSlcXG5cIixcbitcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cmVzc19tYXhfdmlzaXRzLFxuK1x0ICAgICAgIHdvcmtpbmdfc2V0KTtcbitjbGVhbnVwOlxuK1x0cmhhc2hfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJoYXNoX21hcF9leHRyYV9wcmVzaXplKHZvaWQpXG4ge1xuIFx0Y29uc3QgX191MzIgbWF4X2VudHJpZXMgPSAxMDI0O1xuQEAgLTE4MCw0ICsyOTAsNyBAQCB2b2lkIHRlc3Rfcmhhc2godm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGVzdF9yaGFzaF9pdGVyXCIpKVxuIFx0XHRyaGFzaF9pdGVyX3Rlc3QoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGVzdF9yaGFzaF9pdGVyX3N0cmVzc1wiKSlcbitcdFx0cmhhc2hfaXRlcl9zdHJlc3MoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY1xuaW5kZXggZmMyZGFjM2E3MTllOS4uM2Q3MjAxNDMwYmFiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guY1xuQEAgLTksMTEgKzksMTggQEBcbiBcbiAjZGVmaW5lIEVOT0VOVCAyXG4gI2RlZmluZSBFRVhJU1QgMTdcbisjZGVmaW5lIFJIQVNIX1NUUkVTU19NQVhfRU5UUklFUyAoMVUgXHUwMDNjXHUwMDNjIDIwKVxuIFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiBcbiBpbnQgZXJyO1xuIFxuK2NvbnN0IHZvbGF0aWxlIF9fdTMyIHN0cmVzc193b3JraW5nX3NldCA9IDQwOTY7XG4rXG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX21heF92aXNpdHM7XG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX292ZXJydW5zO1xuK3ZvbGF0aWxlIF9fdTY0IHN0cmVzc19mdWxsX3dhbGtzO1xuK1xuIHN0cnVjdCBlbGVtIHtcbiBcdGNoYXIgYXJyWzEyOF07XG4gXHRpbnQgdmFsO1xuQEAgLTI3LDYgKzM0LDIwIEBAIHN0cnVjdCB7XG4gXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBlbGVtKTtcbiB9IHJobWFwIFNFQyhcIi5tYXBzXCIpO1xuIFxuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdWludChtYXhfZW50cmllcywgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTKTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuK30gc3RyZXNzX3JobWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBfX3U2NCBzdHJlc3NfaXRlcl9jYihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLFxuK1x0XHRcdCAgICB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcInN5c2NhbGxcIilcbiBpbnQgdGVzdF9yaGFzaF9sb29rdXBfdXBkYXRlKHZvaWQgKmN0eClcbiB7XG5AQCAtMjQ2LDMgKzI2NywyMyBAQCBpbnQgdGVzdF9yaGFzaF9kZWxldGVfbm9uZXhpc3RlbnQodm9pZCAqY3R4KVxuIFx0ZXJyID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IHRlc3Rfcmhhc2hfaXRlcl9zdHJlc3Modm9pZCAqY3R4KVxuK3tcbitcdC8qXG4rXHQgKiBDb25jdXJyZW50IHJlaGFzaCBtYXkgcHJvZHVjZSBkdXBsaWNhdGUgdmlzaXRzLiBDaGVjayB0aGF0IHRoZVxuK1x0ICogaGVscGVyIHN0aWxsIGdpdmVzIG9uZSB3YWxrIGEgZmluaXRlIGNhbGxiYWNrIGJvdW5kOyBubyBzbmFwc2hvdFxuK1x0ICogb3IgdW5pcXVlLXZpc2l0IGd1YXJhbnRlZSBpcyBleHBlY3RlZCBoZXJlLlxuK1x0ICovXG4rXHRsb25nIHZpc2l0cztcbitcbitcdHZpc2l0cyA9IGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZzdHJlc3NfcmhtYXAsIHN0cmVzc19pdGVyX2NiLCBOVUxMLCAwKTtcbitcdGlmICh2aXNpdHMgXHUwMDNlIHN0cmVzc19tYXhfdmlzaXRzKVxuK1x0XHRzdHJlc3NfbWF4X3Zpc2l0cyA9IHZpc2l0cztcbitcdGlmICh2aXNpdHMgXHUwMDNlIHN0cmVzc193b3JraW5nX3NldClcbitcdFx0c3RyZXNzX292ZXJydW5zKys7XG4rXHRpZiAodmlzaXRzID09IHN0cmVzc193b3JraW5nX3NldClcbitcdFx0c3RyZXNzX2Z1bGxfd2Fsa3MrKztcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjMzOjUyLjI3Mjk3MjM3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODIzNDYwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEhhc2h0YWJsZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgYW5kIHRoZXJlIGFyZSBzb21lIGFzc29jaWF0ZWQgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYC5cblxuRm9jdXNpbmcgb24gdGhlIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgY2hhbmdlLCBhdCBhIGdsYW5jZSwgSSBzZWUgdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiB0aGUgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uLiAgSXQgbG9va3MgbGlrZSBhIGB2aXNpdF9idWRnZXRgIHZhcmlhYmxlIGhhcyBiZWVuIGludHJvZHVjZWQsIGFuZCB0aGUgbG9vcCBjb25kaXRpb24gaXMgYmVpbmcgYWRqdXN0ZWQuIFNwZWNpZmljYWxseSwgdGhlIG9sZCBgd2hpbGVgIGxvb3AgY29uZGl0aW9uIGhhcyBiZWVuIGV4cGFuZGVkIHRvIG5vdyBpbmNsdWRlIGEgYG51bV9lbGVtcyBcdTAwM2MgdmlzaXRfYnVkZ2V0YCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoaXMgaW50cm9kdWNlcyBzb21lIGtpbmQgb2YgaXRlcmF0aW9uIGxpbWl0LCBwb3NzaWJseSB0byBwcmV2ZW50IHVuYm91bmRlZCBsb29wcyBvciB0byBpbnRyb2R1Y2UgZmFpcm5lc3MuIExldCdzIGRpZyBkZWVwZXIuIFRvIGNvbmZpcm0gbXkgaW5pdGlhbCB0aG91Z2h0cywgSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMzE5OCBvZiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgcHJvbXB0ZWQgdGhlIGNoYW5nZSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNDoxMy4wOTY0MzUzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTkwOlxcdFxcdHNlcV9wdXRzKG0sIFxcXCI6IFxcXCIpO1xcbjMxOTE6XFx0XFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQsIHZhbHVlLCBtKTtcXG4zMTkyOlxcdFxcdHNlcV9wdXRjKG0sICdcXFxcbicpO1xcbjMxOTM6XFx0fVxcbjMxOTQ6XFx0XFxuMzE5NTpcXHRzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbjMxOTY6XFx0XFx0XFx0XFx0XFx0dm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpXFxuMzE5NzpcXHR7XFxuMzE5ODpcXHRcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuMzE5OTpcXHRcXHR2b2lkICpwcmV2X2tleSA9IE5VTEw7XFxuMzIwMDpcXHRcXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcXG4zMjAxOlxcdFxcdHUzMiB2aXNpdF9idWRnZXQ7XFxuMzIwMjpcXHRcXHR1MzIgbnVtX2VsZW1zID0gMDtcXG4zMjAzOlxcdFxcdHU2NCByZXQgPSAwO1xcbjMyMDQ6XFx0XFxuMzIwNTpcXHRcXHRjYW50X21pZ3JhdGUoKTtcXG4zMjA2OlxcdFxcbjMyMDc6XFx0XFx0aWYgKGZsYWdzICE9IDApXFxuMzIwODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMjA5OlxcdFxcbjMyMTA6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjMyMTE6XFx0XFx0LypcXG4zMjEyOlxcdFxcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxcbjMyMTM6XFx0XFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuMzIxNDpcXHRcXHQgKiBlbGVtZW50cyB2aXNpdGVkLlxcbjMyMTU6XFx0XFx0ICovXFxuMzIxNjpcXHRcXHR2aXNpdF9idWRnZXQgPSBhdG9taWNfcmVhZChcXHUwMDI2cmh0YWItXFx1MDAzZWh0Lm5lbGVtcyk7XFxuMzIxNzpcXHRcXHR3aGlsZSAobnVtX2VsZW1zIFxcdTAwM2MgdmlzaXRfYnVkZ2V0IFxcdTAwMjZcXHUwMDI2XFxuMzIxODpcXHRcXHQgICAgICAgKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcXG4zMjE5OlxcdFxcdFxcdGlmIChJU19FUlIoZWxlbSkpXFxuMzIyMDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMjIxOlxcdFxcdFxcdG51bV9lbGVtcysrO1xcbjMyMjI6XFx0XFx0XFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsXFxuMzIyMzpcXHRcXHRcXHRcXHRcXHQgICh1NjQpKGxvbmcpZWxlbS1cXHUwMDNlZGF0YSxcXG4zMjI0OlxcdFxcdFxcdFxcdFxcdCAgKHU2NCkobG9uZylyaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpLFxcbjMyMjU6XFx0XFx0XFx0XFx0XFx0ICAodTY0KShsb25nKWNhbGxiYWNrX2N0eCwgMCk7XFxuMzIyNjpcXHRcXHRcXHRpZiAocmV0KVxcbjMyMjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzIyODpcXHRcXG4zMjI5OlxcdFxcdFxcdHByZXZfa2V5ID0gZWxlbS1cXHUwMDNlZGF0YTtcXHQvKiB2YWxpZCB3aGlsZSBSQ1UgaGVsZCAqL1xcbjMyMzA6XFx0XFx0fVxcbjMyMzE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzIzMjpcXHRcXG4zMjMzOlxcdFxcdHJldHVybiBudW1fZWxlbXM7XFxuMzIzNDpcXHR9XFxuMzIzNTpcXHRcXG4zMjM2OlxcdHN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbjMyMzc6XFx0e1xcbjMyMzg6XFx0XFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbjMyMzk6XFx0XFx0dTY0IG51bV9lbnRyaWVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNDoxMy4wOTY1NzIzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NjUzMDE4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGVtcGxveWVkLiBNeSBndXQgdGVsbHMgbWUgaXQncyBjZW50cmFsIHRvIHNvbWV0aGluZywgbGlrZWx5IHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRocm91Z2ggZWxlbWVudHMgd2l0aGluIGEgcmFkaXggaGFzaCB0YWJsZSwgYnV0IGxldCdzIG5vdCBhc3N1bWUuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29kZWJhc2UncyB1c2FnZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBicm9hZCBhcHByb2FjaC4gSSdsbCBleGVjdXRlIGEgcXVpY2sgZ3JlcCB0byBzZWFyY2ggZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIHRoZSBzdHJpbmcgYGJwZl9lYWNoX3JoYXNoX2VsZW1gLiBJJ2xsIGFsc28gZXhwYW5kIHRoZSBzY29wZSBvZiBteSBzZWFyY2guIEknbGwgdXNlIHJlbGF0ZWQgdGVybXMuIFRoaW5ncyBsaWtlIGByaHRhYl9tYXBfb3BzYCwgYmVjYXVzZSBJIHN1c3BlY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgYSBtYXAgaW1wbGVtZW50YXRpb24gYW5kIG1heSBiZSBhY2Nlc3NlZCB2aWEgdGhlIG1hcCBvcGVyYXRpb25zLiBCcm9hZCBzdHJva2VzIGZpcnN0LCB0aGVuIEkgY2FuIGRyaWxsIGRvd24gaWYgbmVlZGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZnVuY3Rpb24ncyBjb250ZXh0IGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBnZXQgdGhhdCBzZWFyY2ggcnVubmluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MzQ6MTcuNTYxODc3NDQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTk0MjgyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTc4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTk1OnN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5Ni1cXHRcXHRcXHRcXHR2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MTY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMwLVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUzMTpcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMyLVxcdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MzQ6MTkuMTgxMzExNjY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc2Mjg0NTczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgQlBGIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUgYW5kIG15IGJyYWluIGltbWVkaWF0ZWx5IHNlZXMgYSBmZXcga2V5IGlkZW50aWZpZXJzIGZsYXNoaW5nOiBgQlBGX01BUF9UWVBFX1JIQVNIYCwgdGhlIGByaHRhYl9tYXBfb3BzYCBzdHJ1Y3R1cmUsIGFuZCB0aGUgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgZnVuY3Rpb24uIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGVzZSB0aHJlZSBhcmUgaGlnaGx5IGludGVycmVsYXRlZCwgYWxtb3N0IGNlcnRhaW5seSBmb3JtaW5nIHRoZSBjb3JlIG9mIGhvdyB0aGlzIHNwZWNpZmljIEJQRiBtYXAgdHlwZSBmdW5jdGlvbnMuXG5cblJpZ2h0IG5vdywgbXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgYSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLiBUaGUgXCJSSEFTSFwiIGltbWVkaWF0ZWx5IHBvaW50cyBpbiB0aGF0IGRpcmVjdGlvbi4gVGhlIFwib3BzXCIgc3RydWN0dXJlIHR5cGljYWxseSBjb250YWlucyBmdW5jdGlvbiBwb2ludGVycyBmb3IgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyBvbiB0aGUgbWFwOiBpbnNlcnRpbmcsIGRlbGV0aW5nLCBsb29rdXAsIGl0ZXJhdGlvbiAtIHRoZSB1c3VhbCBzdXNwZWN0cy4gQW5kIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gLi4uIHdlbGwsIHRoYXTigJlzIGNsZWFybHkgdGhlIG1lY2hhbmlzbSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIHN0b3JlZCB3aXRoaW4gdGhlIG1hcC4gU28sIHdoYXQgSSBuZWVkIHRvIGRvIGlzIGRyaWxsIGRvd24gYW5kIGZpbmQgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQuIEkgc2hvdWxkIHNlYXJjaCBmb3IgZWFjaCBvZiB0aGVtLCBzdGFydGluZyB3aXRoIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYWNyby4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZWJhc2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjM0OjI1Ljk0NDE1OTAxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4OTEzMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9SSEFTSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXFx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwNTA6XFx0QlBGX01BUF9UWVBFX1JIQVNILFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVxcdF9fTUFYX0JQRl9NQVBfVFlQRVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXFx0XFx0ICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcXHRcXHQgKiBCUEZfTUFQX1RZUEVfUkhBU0ggLSBpbml0aWFsIHRhYmxlIHNpemUgaGludFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVxcdFxcdCAqIChuZWxlbV9oaW50KS4gMCA9IHVzZSByaGFzaHRhYmxlIGRlZmF1bHQuIE11c3QgYmVcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjYtXFx0XFx0IG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjEyNzpcXHRcXHQgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cXHRcXHRnb3RvIHB1dF9tYXA7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjU1PXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyOTktXFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMzAwOlxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDEtXFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE0LVxcdFxcdFxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE2LVxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyNi1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMjc6XFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyOC1cXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjAtXFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MjE6XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjItXFx0ICAgIGF0dHItXFx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDkyLVxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ5MzpcXHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDk0LVxcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjIxNj1zdGF0aWMgaW50IG1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3NS1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMjc2OlxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JIQVNIIHx8XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3Ny1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NjA1PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NjUzLVxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NjU0OlxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODY1NS1cXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVxcdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlxcdEJQRl9NQVBfVFlQRV9SSEFTSCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cXHRfX01BWF9CUEZfTUFQX1RZUEVcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVxcdFxcdCAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XFx0XFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cXHRcXHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTk4LVxcdFtCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWV1cXHRcXHQ9IFxcXCJpbnNuX2FycmF5XFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE5OTpcXHRbQlBGX01BUF9UWVBFX1JIQVNIXVxcdFxcdFxcdD0gXFxcInJoYXNoXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMC19O1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MjkyPXN0YXRpYyBpbnQgcHJvYmVfbWFwX2NyZWF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cXHRcXHRicmVhaztcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzEzLVxcdFxcdG9wdHMubWFwX2ZsYWdzXFx0PSBCUEZfRl9OT19QUkVBTExPQztcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz0zNz1zdGF0aWMgdm9pZCBoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVxcdGJwZl9tYXBfX3NldF90eXBlKGN0eC5za2VsLVxcdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLCBtYXBfdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUyLVxcdFxcdGJwZl9tYXBfX3NldF9tYXBfZmxhZ3MoY3R4LnNrZWwtXFx1MDAzZW1hcHMuaGFzaF9tYXBfYmVuY2gsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9ODA9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtODEte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcXHRoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MTUxPXN0YXRpYyB2b2lkIGhhc2htYXBfbG9va3VwX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXFx0bWFwX2ZsYWdzID0gYXJncy5tYXBfZmxhZ3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYzoxNjg6XFx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTE2OS1cXHRcXHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jPTIxMT1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjIxMzpcXHRoYXNobWFwX2xvb2t1cF9zZXR1cChCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0xNTU9c3RhdGljIHZvaWQgaHRhYl9tZW1fc2V0dXBfaW1wbChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODQtXFx0YnBmX21hcF9fc2V0X21heF9lbnRyaWVzKG1hcCwgTUFYKDgxOTIsIDY0ICogZW52Lm5yX2NwdXMpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1OlxcdGlmIChtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4Ni1cXHRcXHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXFx1MDAyNiB+QlBGX0ZfTk9fUFJFQUxMT0MpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MjMxOlxcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMyLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NTA9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTU1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTY6XFx0cmV0dXJuIGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9SSEFTSCwgXFxcInJoYXNoX2V4dHJhXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTU3LVxcdFxcdFxcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcXHUwMDI2b3B0cyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jOjk6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYy0xMC1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYz0yOT1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jOjMwOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jLTMxLVxcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jPTM3PXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmM6Mzg6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMtMzktXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNDoyNy41ODMwNzcyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0OTYxMDc5MzU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgQlBGIE1hcCBJdGVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyB0aGUgbWFwIGl0ZXJhdGlvbiBjYWxsYmFjaywgYC5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgLCBpcyBpbnZva2VkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBtZWNoYW5pc20gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgYSBCUEYgbWFwLlxuXG5JJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZSBiYXNlIGZvciBpbnN0YW5jZXMgb2YgYG1hcF9mb3JfZWFjaF9jYWxsYmFja2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCB3aXRoaW4gd2hpY2ggYC5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgIGlzIGJlaW5nIHVzZWQuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MzY6NTcuMTkzODc0NTI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI3Mzk3OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9mb3JfZWFjaF9jYWxsYmFja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTg3PXN0cnVjdCBicGZfbWFwX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoxODE6XFx0bG9uZyAoKm1hcF9mb3JfZWFjaF9jYWxsYmFjaykoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4Mi1cXHRcXHRcXHRcXHQgICAgIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzctXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODc4OlxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfYXJyYXlfZWxlbSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc5LVxcdC5tYXBfbWVtX3VzYWdlID0gYXJyYXlfbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwMi1cXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo5MDM6XFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9hcnJheV9lbGVtLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MDQtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBhcnJheV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTcxMT1CUEZfQ0FMTF80KGJwZl9mb3JfZWFjaF9tYXBfZWxlbSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGNhbGxiYWNrX2ZuLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxMy17XFxua2VybmVsL2JwZi9icGZfaXRlci5jOjcxNDpcXHRyZXR1cm4gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjayhtYXAsIGNhbGxiYWNrX2ZuLCBjYWxsYmFja19jdHgsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzE1LX1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwOD1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDItXFx0XFx0XFx0XFx0ICAgICAobG9uZyAoKikoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGluZGV4LCB1NjQgZmxhZ3MpKU5VTEwpKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxMDM6XFx0XFx0XFx0QlVJTERfQlVHX09OKCFfX3NhbWVfdHlwZShvcHMtXFx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjayxcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDQtXFx0XFx0XFx0XFx0ICAgICAobG9uZyAoKikoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzNC1cXHRcXHRcXHRjYXNlIEJQRl9GVU5DX2Zvcl9lYWNoX21hcF9lbGVtOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjEzNTpcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VpbW0gPSBCUEZfQ0FMTF9JTU0ob3BzLVxcdTAwM2VtYXBfZm9yX2VhY2hfY2FsbGJhY2spO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzNi1cXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNTc9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzAtXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzcxOlxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzItXFx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzc5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5My1cXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzOTQ6XFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5NS1cXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI1NjA9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTczLVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU3NDpcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTc1LVxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU4Mj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk0LVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU5NTpcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk2LVxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUxNj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzAtXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTMxOlxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZWFjaF9yaGFzaF9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzItXFx0Lm1hcF9tZW1fdXNhZ2UgPSByaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMDA2PXN0YXRpYyBpbnQgc2V0X21hcF9lbGVtX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwMTctXFx0aWYgKCFtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDE4OlxcdCAgICAhbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjaykge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAxOS1cXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBhbGxvd2VkIGZvciBtYXBcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNjo1OC43MjEyODAwODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc5ODY4MzEzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIGFuZCBSSEFTSCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIENoZWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSAqZXNzZW50aWFsKiBmb3IgZW5hYmxpbmcgQlBGLCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gaGFzaHRhYi5jIGFuZCB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgdHlwZS4gSXQncyBhIHF1aWNrIGF1ZGl0LCByZWFsbHkuIEkga25vdyB3aGVyZSB0byBsb29rLiBMZXQncyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdGhlIGxvZ2ljYWwganVtcGluZy1vZmYgcG9pbnQgZm9yIHRyYWNpbmcgZGVwZW5kZW5jaWVzIGFuZCBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgc3dpdGNoZXMuIEhvcGVmdWxseSwgaXQncyBhbGwgc3RyYWlnaHRmb3J3YXJkOyBJIGNhbiBwcm9iYWJseSBwYXJzZSBpdCBpbiBteSBoZWFkIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIGJ1dCBsZXQncyBtYWtlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjc2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6Mzc6MTYuNzA4MTEzOTUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ1NTkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNodGFiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMy0jaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9idGYuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTg2PXN0cnVjdCBicGZfaHRhYiB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05Ni1cXHRzdHJ1Y3QgaHRhYl9lbGVtICpfX3BlcmNwdSAqZXh0cmFfZWxlbXM7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6OTc6XFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIG5vbi1wcmVhbGxvY2F0ZWQgaGFzaHRhYmxlIGFyZSBrZXB0XFxua2VybmVsL2JwZi9oYXNodGFiLmMtOTgtXFx0ICogaW4gZWl0aGVyIHBjb3VudCBvciBjb3VudFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTgtICpcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk6ICogSW4gaGFzaHRhYi5jLCB0byBhdm9pZCBkZWFkbG9jaywgbG9jayBhY3F1aXNpdGlvbiBvZlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMC0gKiBidWNrZXRfbG9jayBmb2xsb3dlZCBieSBscnVfbG9jayBpcyBub3QgYWxsb3dlZC4gSW4gc3VjaCBjYXNlcyxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3NTE9c3RydWN0IGJwZl9yaHRhYiB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc1Mi1cXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc1MzpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZSBodDtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzU0LVxcdHN0cnVjdCBicGZfbWVtX2FsbG9jIG1hO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc1OC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzU5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcmh0YWJfcGFyYW1zID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NjAtXFx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc2ND1zdGF0aWMgaW5saW5lIHZvaWQgKnJodGFiX2VsZW1fdmFsdWUoc3RydWN0IHJodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NjktLyogU3BlY2lhbGl6ZSBoYXNoIGZ1bmN0aW9uIGFuZCBvYmpjbXAgZm9yIGxvbmcgc2l6ZWQga2V5ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc3MDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByaHRhYl9rZXlfY21wX2xvbmcoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzcxLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3Nzk9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgcmh0YWJfaGFzaGZuX2xvbmcoY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzg1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3ODY6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXNfbG9uZyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzg3LVxcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBub2RlKSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3OTQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5NS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc5NjpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3OTctXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWI7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODIzLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4MjQ6XFx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZwYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjUtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgyODpcXHQvKiBTZXQgbWF4X2VsZW1zIGFmdGVyIHJoYXNodGFibGVfaW5pdCgpIHNpbmNlIGluaXQgemVyb2VzIHRoZSBzdHJ1Y3QgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODI5LVxcdHJodGFiLVxcdTAwM2VodC5tYXhfZWxlbXMgPSByaHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzNy1kZXN0cm95X3JodGFiOlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4Mzg6XFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MzktZnJlZV9yaHRhYjpcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4OTg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDEtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkwMjpcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgcmh0YWJfZnJlZV9lbGVtLCByaHRhYik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkwMy1cXHRicGZfbWVtX2FsbG9jX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VtYSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTA3PXN0YXRpYyB2b2lkICpyaHRhYl9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE0LVxcdGlmIChtYXAtXFx1MDAzZWtleV9zaXplID09IHNpemVvZihsb25nKSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTE1OlxcdFxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXNfbG9uZyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxNi1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTE3OlxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTgtfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjkzOT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NDUtXFx0ICogZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBtaXRpZ2F0ZXMgdGhlIGRlYWRsb2NrIGZvciBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSBjb250ZXh0Llxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDY6XFx0ICogcmhhc2h0YWJsZSBsb2NrcyBidWNrZXQgd2l0aCBsb2NhbF9pcnFfc2F2ZSgpLiBPbmx5IE5NSSBwcm9ncmFtcyBtYXkgcmVlbnRlclxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDc6XFx0ICogcmhhc2h0YWJsZSBjb2RlLCBicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBkaXNhYmxlcyBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSwgZXhjZXB0XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0ODpcXHQgKiByYXcgdHJhY2Vwb2ludHMsIHdoaWNoIHdlIGRvbid0IGhhdmUgaW4gcmhhc2h0YWJsZS5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTQ5LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Mi1cXHRpZiAocmh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1MzpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXNfbG9uZyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1NC1cXHRlbHNlXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1NTpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTYtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDMyPXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA3NC1cXHRpZiAobWFwLVxcdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA3NTpcXHRcXHR0bXAgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmVsZW0tXFx1MDAzZW5vZGUsIHJodGFiX3BhcmFtc19sb25nKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc2LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDc3OlxcdFxcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc4LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzExNj1zdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTE4LVxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTE5OlxcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTIwLVxcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzMi1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTMzOlxcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzNDpcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMzUtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzNjpcXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcXHUwMDI2aXRlcikpKSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzNy1cXHRcXHRpZiAoSVNfRVJSKGVsZW0pKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ1LVxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkgeyAvKiBBdm9pZCBzdGFsbHMgb24gbGFyZ2UgbWFwcyAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNDY6XFx0XFx0XFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDctXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0ODpcXHRcXHRcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDktXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1MS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTUyOlxcdHJoYXNodGFibGVfd2Fsa19zdG9wKFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTUzOlxcdHJoYXNodGFibGVfd2Fsa19leGl0KFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTU0LVxcdFdSSVRFX09OQ0Uocmh0YWItXFx1MDAzZWZyZWVpbmdfaW50ZXJuYWwsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNTc9c3RhdGljIGludCByaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTYyLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjM6XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5KTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY0LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2Ni1cXHRpZiAoUFRSX0VSUihlbGVtKSA9PSAtRU5PRU5UKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjc6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgTlVMTCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2OC1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTgxLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxODI6XFx0LyogR3VhcmFudGVlIHRoYXQgaGFzaHRhYiB2YWx1ZSBpcyBub3QgZnJlZWQgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTgzLVxcdGd1YXJkKHJjdSkoKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxOTU9c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTEtXFx0LypcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjEyOlxcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTMtXFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjE3LVxcdHdoaWxlIChudW1fZWxlbXMgXFx1MDAzYyB2aXNpdF9idWRnZXQgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjE4OlxcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgcHJldl9rZXkpKSkge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTktXFx0XFx0aWYgKElTX0VSUihlbGVtKSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyMzY9c3RhdGljIHU2NCByaHRhYl9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQwLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNDE6XFx0LyogRXhjbHVkZXMgcmhhc2h0YWJsZSBidWNrZXQgb3ZlcmhlYWQgKH4gbmVsZW1zICogc2l6ZW9mKHZvaWQgKikgYXQgNzUlIGxvYWQpLiAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNDItXFx0bnVtX2VudHJpZXMgPSBhdG9taWNfcmVhZChcXHUwMDI2cmh0YWItXFx1MDAzZWh0Lm5lbGVtcyk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ2PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjAtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzIxOlxcdFxcdGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIE5VTEwpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjItXFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzMyOlxcdFxcdGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIGRzdF9rZXkpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMzMtXFx0XFx0ZHN0X2tleSArPSBrZXlfc2l6ZTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMzOTQ9c3RydWN0IGJwZl9pdGVyX3NlcV9yaGFzaF9tYXBfaW5mbyB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk2LVxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzOTc6XFx0c3RydWN0IHJoYXNodGFibGVfaXRlciBpdGVyO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTgtfTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0MDA9c3RhdGljIHZvaWQgKmJwZl9yaGFzaF9tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDUtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQwNjpcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDctXFx0LypcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MTItXFx0ZG8ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MTM6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfd2Fsa19wZWVrKFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDE0LVxcdH0gd2hpbGUgKFBUUl9FUlIoZWxlbSkgPT0gLUVBR0FJTik7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDI0PXN0YXRpYyB2b2lkICpicGZfcmhhc2hfbWFwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MzItXFx0ZG8ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MzM6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfd2Fsa19uZXh0KFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDM0LVxcdH0gd2hpbGUgKFBUUl9FUlIoZWxlbSkgPT0gLUVBR0FJTik7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDcwPXN0YXRpYyB2b2lkIGJwZl9yaGFzaF9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDc3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0Nzg6XFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0NzktfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ4MT1zdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfcmhhc2hfbWFwKHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDg4LVxcdGluZm8tXFx1MDAzZXJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDg5OlxcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcXHUwMDI2aW5mby1cXHUwMDNlcmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5MC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0OTM9c3RhdGljIHZvaWQgYnBmX2l0ZXJfZmluaV9yaGFzaF9tYXAodm9pZCAqcHJpdl9kYXRhKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5Ni1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDk3OlxcdHJoYXNodGFibGVfd2Fsa19leGl0KFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDk4LVxcdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihpbmZvLVxcdTAwM2VtYXApO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zi5oXFx1MDAzZVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9oYXNodGFibGUuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvamhhc2guaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX25zLmhcXHUwMDNlXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0zMz1zdHJ1Y3QgYnBmX29mZmxvYWRfbmV0ZGV2IHtcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQxLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjQyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgb2ZmZGV2c19wYXJhbXMgPSB7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDMtXFx0Lm5lbGVtX2hpbnRcXHRcXHQ9IDQsXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00OS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo1MDpzdGF0aWMgc3RydWN0IHJoYXNodGFibGUgb2ZmZGV2cztcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MS1cXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTYyPWJwZl9vZmZsb2FkX2ZpbmRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy02NS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo2NjpcXHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm5ldGRldiwgb2ZmZGV2c19wYXJhbXMpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTY3LX1cXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTY5PXN0YXRpYyBpbnQgX19icGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3JlZ2lzdGVyKHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldixcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTgzLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjg0OlxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZvbmRldi1cXHUwMDNlbCwgb2ZmZGV2c19wYXJhbXMpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg1LVxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTEzNj1zdGF0aWMgdm9pZCBfX2JwZl9vZmZsb2FkX2Rldl9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDQtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTQ1OlxcdG9uZGV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm5ldGRldiwgb2ZmZGV2c19wYXJhbXMpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0Ni1cXHRpZiAoV0FSTl9PTighb25kZXYpKVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ4LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE0OTpcXHRXQVJOX09OKHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZvbmRldi1cXHUwMDNlbCwgb2ZmZGV2c19wYXJhbXMpKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNTAtXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0xNzk9c3RhdGljIGludCBfX2JwZl9wcm9nX2Rldl9ib3VuZF9pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIwMS1cXHRcXHQvKiBXaGVuIG9ubHkgYmluZGluZyB0byB0aGUgZGV2aWNlLCBleHBsaWNpdGx5XFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MjAyOlxcdFxcdCAqIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgaGFzaHRhYmxlLlxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIwMy1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTg2MT1zdGF0aWMgaW50IF9faW5pdCBicGZfb2ZmbG9hZF9pbml0KHZvaWQpXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtODYyLXtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo4NjM6XFx0cmV0dXJuIHJoYXNodGFibGVfaW5pdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm9mZmRldnNfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NjQtfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzMy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNDM0OlxcdC8qIGZpbmQgbWFwIHR5cGUgYW5kIGluaXQgbWFwOiBoYXNodGFibGUgdnMgcmJ0cmVlIHZzIGJsb29tIHZzIC4uLiAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzUtXFx0bWFwX3R5cGUgPSBhdHRyLVxcdTAwM2VtYXBfdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6Mzc6MTYuNzU2NTc1NDg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjU2OTQ1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBGb3ItRWFjaCBJdGVyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcyBhcmUgaXRlcmF0ZWQgd2l0aGluIEJQRiBwcm9ncmFtcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBwYXRoLCBzdGFydGluZyB3aXRoIGBicGZfZWFjaF9yaGFzaF9lbGVtYCwgd2hpY2ggSSBrbm93IGlzIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgcmVhbGl6ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hlZCBieSBjYWxsaW5nIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gIGZyb20gYSBCUEYgcHJvZ3JhbS5cblxuQnV0IHRoZW4gYSBkZXRhaWwgcG9wcyB1cDogSXMgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGlubGluZWQ/IEkgcXVpY2tseSByZWNhbGwgc29tZXRoaW5nIGZyb20gdGhlIHZlcmlmaWVyIGZpeHVwcyDigJMgc3BlY2lmaWNhbGx5IHRoZSBsaW5lIGBpbnNuLVx1MDAzZWltbSA9IEJQRl9DQUxMX0lNTShvcHMtXHUwMDNlbWFwX2Zvcl9lYWNoX2NhbGxiYWNrKTtgLiBUaGF0IGFzc2lnbm1lbnQncyBrZXkuIEl0IHR1cm5zIG91dCB0aGF0IGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpcyAqc3RhdGljKiB3aXRoaW4gYGhhc2h0YWIuY2AsIGhvd2V2ZXIgaXRzICpwb2ludGVyKiBpcyBhc3NpZ25lZCB0byBgcmh0YWJfbWFwX29wcy5tYXBfZm9yX2VhY2hfY2FsbGJhY2tgLiBTbyB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzbid0IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQuIEl0J3MgdGhlIHBvaW50ZXIgYXNzaWdubWVudCB0aGF0J3MgY3JpdGljYWwuXG5cbk5vdywgbXkgbWluZCBnb2VzIHRvIHRoZSBicm9hZGVyIHNjb3BlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gTGV0IG1lIHZlcmlmeSBpZiBgYnBmX2Zvcl9lYWNoX21hcF9lbGVtYCBpdHNlbGYsIG9yIGFueSByZWxhdGVkIGZ1bmN0aW9uLCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGFzIGEgcHJpbWFyeSBzeW1ib2wgb3IgZW50cnkgcG9pbnQuIFRoaXMgcmVxdWlyZXMgYSBzZWFyY2ggZm9yIG5vbi1zdGF0aWMgc3ltYm9scy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBsb29rIGF0IGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6Mzc6MjguMDEzNTI0MzA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAxOTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZm9yX2VhY2hfbWFwX2VsZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9pdGVyLmM9NjgwPWludCBicGZfaXRlcl9ydW5fcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHZvaWQgKmN0eClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MTAtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjcxMTpCUEZfQ0FMTF80KGJwZl9mb3JfZWFjaF9tYXBfZWxlbSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGNhbGxiYWNrX2ZuLFxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MTItXFx0ICAgdm9pZCAqLCBjYWxsYmFja19jdHgsIHU2NCwgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzE2LVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3MTc6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9mb3JfZWFjaF9tYXBfZWxlbV9wcm90byA9IHtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzE4OlxcdC5mdW5jXFx0XFx0PSBicGZfZm9yX2VhY2hfbWFwX2VsZW0sXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTcxOS1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE0OC1cXHRjYXNlIEJQRl9GVU5DX2Zvcl9lYWNoX21hcF9lbGVtOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIxNDk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZm9yX2VhY2hfbWFwX2VsZW1fcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE1MC1cXHRjYXNlIEJQRl9GVU5DX2xvb3A6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTk2NT1pbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk2OC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk5Njk6XFx0LyogYnBmX2Zvcl9lYWNoX21hcF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmNhbGxiYWNrX2ZuLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05OTcwLVxcdCAqICAgICAgdm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMjY3PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMxNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzMTg6XFx0LyogZm9yIGNhbGxiYWNrcyBsaWtlIGJwZl9sb29wIG9yIGJwZl9mb3JfZWFjaF9tYXBfZWxlbSBnbyBiYWNrIHRvIGNhbGxzaXRlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMxOS1cXHQgKiB0aGVyZSBmdW5jdGlvbiBjYWxsIGxvZ2ljIHdvdWxkIHJlc2NoZWR1bGUgY2FsbGJhY2sgdmlzaXQuIElmIGl0ZXJhdGlvblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNzoyOC4wNTk1NTE3MTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4MDQ0MDg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6XG5cbioqQ2hlY2tpbmcgQlBGX1NZU0NBTEwgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQlBGX1NZU0NBTExgLiBTaW5jZSBJJ20gd29ya2luZyB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgQlBGIHN5c3RlbSBjYWxscy4gU28sIEkgbmVlZCB0byB0cmFjZSBpdHMgY29uZmlndXJhdGlvbiBwYXRoLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIHN0YXJ0IHdpdGggYGtlcm5lbC9icGYvS2NvbmZpZ2Ag4oCTIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gZm9yIGFueXRoaW5nIEJQRi1yZWxhdGVkLiBUaGVuLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0J3MgZ29vZCBwcmFjdGljZSwgSSdsbCBhbHNvIGdsYW5jZSBhdCBgaW5pdC9LY29uZmlnYC4gYGluaXQvS2NvbmZpZ2Agb2Z0ZW4gaGFuZGxlcyBnbG9iYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIG90aGVyIGZlYXR1cmVzLCBzbyBpdCdzIHNtYXJ0IHRvIGNoZWNrIHRoZXJlIGZvciBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBlbnN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLiBCeSBzeXN0ZW1hdGljYWxseSBjaGVja2luZyB0aGVzZSBmaWxlcywgSSBjYW4gdmVyaWZ5IGlmIHRoZXJlIGlzIGFuIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY1NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjM3OjM3LjAzOTk5NTE3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTc0MDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzozNzozOC41ODk3NDI1NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAzNTY2MDUyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGxvb2sgaW50byB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb25maWd1cmF0aW9uLiBJIHJlbWVtYmVyIHdvcmtpbmcgd2l0aCBgS2NvbmZpZ2AgZmlsZXMgYmVmb3JlOyB0aGV5J3JlIHRoZSBicmVhZCBhbmQgYnV0dGVyIGZvciBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMuIExldCdzIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUsIEknbSB0aGlua2luZyBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMjcuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBkZWFsIHdpdGggdGhlIGNvcmUgZW5hYmxpbmcgb3B0aW9ucyBmb3IgQlBGLCBvciBwZXJoYXBzIGNvbmZpZ3VyYXRpb24gb2Ygc29tZSBvZiB0aGUgQlBGIHN1YnN5c3RlbXMuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgdGhlcmUuIEZyb20gaGVyZSBJJ2xsIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZSBhbmQgd2hhdCBteSB1bmRlcnN0YW5kaW5nIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjM4OjA4Ljk0NjM1MDI5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcXG4gIDYzOlxcdFxcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxcbiAgNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjM4OjA4Ljk0NjQzODEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODUzNjQ2MzQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRiBTdWJzeXN0ZW0gQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudCBmb3IgYGhhc2h0YWIuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyB0aWVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBpbmRpY2F0ZWQgYnkgdGhhdCBsaW5lIGluIHRoZSBNYWtlZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub2AuIFNvLCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCB0aGVzZSBvYmplY3QgZmlsZXMgZ2V0IGJ1aWx0LlxuXG5Ob3csIEknbSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXQgcGxheSBoZXJlLiBMZXQncyBzZWUgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXRzZWxmIGhhcyBhbnkgcHJlY29uZGl0aW9ucy4gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIGFzIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHJlbGF0ZWQgc2V0dGluZ3MgdG8gcmVzaWRlLiBBbHJpZ2h0LCBsZXQncyBzZWUuIExpbmUgMjUgb2YgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZGVmaW5lcyB0aGUgXCJCUEYgc3Vic3lzdGVtXCIgbWVudSwgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGRlY2xhcmVkIHJpZ2h0IGFmdGVyLiBHb29kLiBObyBkZXBlbmRlbmNpZXMgbGlzdGVkIGRpcmVjdGx5IGZvciBgQ09ORklHX0JQRl9TWVNDQUxMYC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBkb3VibGUgY2hlY2sgZm9yIGFueSBtZW51IGNvbmRpdGlvbnMgb3IgaGlkZGVuIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYm90aCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZm9yIGFueSBpbmRpcmVjdCBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBlbmFibGVtZW50IG9mIGBDT05GSUdfQlBGX1NZU0NBTExgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQxOjA3LjQ4MjkwNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHQjIEJQRiBpbnRlcnByZXRlciB0aGF0LCBmb3IgZXhhbXBsZSwgY2xhc3NpYyBzb2NrZXQgZmlsdGVycyBkZXBlbmQgb24uXFxuICAgNDpcXHRjb25maWcgQlBGXFxuICAgNTpcXHRcXHRib29sXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gICA3OlxcdFxcbiAgIDg6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHN1cHBvcnQgQlBGIEpJVCBjb21waWxlciBwbHVzIHdoaWNoXFxuICAgOTpcXHQjIGZsYXZvdXIuIE9ubHkgb25lIG9mIHRoZSB0d28gY2FuIGJlIHNlbGVjdGVkIGZvciBhIHNwZWNpZmljIGFyY2ggc2luY2VcXG4gIDEwOlxcdCMgZUJQRiBKSVQgc3VwZXJzZWRlcyB0aGUgY0JQRiBKSVQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdCMgQ2xhc3NpYyBCUEYgSklUIChjQlBGKVxcbiAgMTM6XFx0Y29uZmlnIEhBVkVfQ0JQRl9KSVRcXG4gIDE0OlxcdFxcdGJvb2xcXG4gIDE1OlxcdFxcbiAgMTY6XFx0IyBFeHRlbmRlZCBCUEYgSklUIChlQlBGKVxcbiAgMTc6XFx0Y29uZmlnIEhBVkVfRUJQRl9KSVRcXG4gIDE4OlxcdFxcdGJvb2xcXG4gIDE5OlxcdFxcbiAgMjA6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbiAgMjE6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDIyOlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyMzpcXHRcXHRib29sXFxuICAyNDpcXHRcXG4gIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDE6MDcuNDgzMDUzOTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2OTc2NTk4MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGluIEJQRiBIYXNoIFRhYmxlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBmaWxlIGFnYWluLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBoaWRkZW4gYmVoaW5kIGAjaWZkZWZgIGRpcmVjdGl2ZXMgb3Igc3BlY2lmaWMga2VybmVsIGNvbmZpZyBvcHRpb25zLCB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb3IgYXZhaWxhYmlsaXR5IG9mIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBvciB0aGUgcmVsYXRlZCBgcmh0YWJfbWFwX29wc2Agc3RydWN0dXJlcy4gSSBrbm93IHRoZXNlIGFyZSByZWxhdGVkIHRvIHRoZSByZXNpemUgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgd2FudCB0byBiZSAqc3VyZSogSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwuIEknbSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCwgbGVhZGluZyB0byBwb3RlbnRpYWwgZGlmZmVyZW5jZXMgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuVG8gZ2V0IGEgZ29vZCBvdmVydmlldywgSSB0aGluayBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgc2VjdGlvbiBvZiB0aGUgZmlsZSBiZXR3ZWVuIGFwcHJveGltYXRlbHkgbGluZXMgMzE5MCBhbmQgMzU0MC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIHJlbGV2YW50IHBvcnRpb25zIGRlYWxpbmcgd2l0aCB0aGUgcmVzaXplIGhhc2ggdGFibGUgb3BlcmF0aW9ucyBhbmQgdGhlIGl0ZXJhdGlvbiBmdW5jdGlvbi4gSG9wZWZ1bGx5LCBieSByZXZpZXdpbmcgdGhpcyByZWdpb24gY2xvc2VseSwgSSBjYW4gc3BvdCBhbnkgc3VidGxlIHZhcmlhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYmVoYXZlIGluIGRpZmZlcmVudCBrZXJuZWwgYnVpbGRzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGRpZmZlcmVudCBtYXAgdHlwZXMsIG9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGRpc2FibGUgb3IgYWx0ZXIgdGhlIGJlaGF2aW9yLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsYXJpdHkgYW5kIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0MzoyNC40NTk2NTQ1NDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1MTA6XFx0XFx0LmluaXRfc2VxX3ByaXZhdGUgPSBicGZfaXRlcl9pbml0X3JoYXNoX21hcCxcXG4zNTExOlxcdFxcdC5maW5pX3NlcV9wcml2YXRlID0gYnBmX2l0ZXJfZmluaV9yaGFzaF9tYXAsXFxuMzUxMjpcXHRcXHQuc2VxX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3JoYXNoX21hcF9pbmZvKSxcXG4zNTEzOlxcdH07XFxuMzUxNDpcXHRcXG4zNTE1OlxcdEJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXFxuMzUxNjpcXHRjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG4zNTE3OlxcdFxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG4zNTE4OlxcdFxcdC5tYXBfYWxsb2NfY2hlY2sgPSByaHRhYl9tYXBfYWxsb2NfY2hlY2ssXFxuMzUxOTpcXHRcXHQubWFwX2FsbG9jID0gcmh0YWJfbWFwX2FsbG9jLFxcbjM1MjA6XFx0XFx0Lm1hcF9mcmVlID0gcmh0YWJfbWFwX2ZyZWUsXFxuMzUyMTpcXHRcXHQubWFwX2dldF9uZXh0X2tleSA9IHJodGFiX21hcF9nZXRfbmV4dF9rZXksXFxuMzUyMjpcXHRcXHQubWFwX3JlbGVhc2VfdXJlZiA9IHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMsXFxuMzUyMzpcXHRcXHQubWFwX2NoZWNrX2J0ZiA9IHJodGFiX21hcF9jaGVja19idGYsXFxuMzUyNDpcXHRcXHQubWFwX2xvb2t1cF9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9lbGVtLFxcbjM1MjU6XFx0XFx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXFxuMzUyNjpcXHRcXHQubWFwX3VwZGF0ZV9lbGVtID0gcmh0YWJfbWFwX3VwZGF0ZV9lbGVtLFxcbjM1Mjc6XFx0XFx0Lm1hcF9kZWxldGVfZWxlbSA9IHJodGFiX21hcF9kZWxldGVfZWxlbSxcXG4zNTI4OlxcdFxcdC5tYXBfZ2VuX2xvb2t1cCA9IHJodGFiX21hcF9nZW5fbG9va3VwLFxcbjM1Mjk6XFx0XFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXFxuMzUzMDpcXHRcXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbjM1MzE6XFx0XFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9lYWNoX3JoYXNoX2VsZW0sXFxuMzUzMjpcXHRcXHQubWFwX21lbV91c2FnZSA9IHJodGFiX21hcF9tZW1fdXNhZ2UsXFxuMzUzMzpcXHRcXHRCQVRDSF9PUFMocmh0YWIpLFxcbjM1MzQ6XFx0XFx0Lm1hcF9idGZfaWQgPSBcXHUwMDI2cmh0YWJfbWFwX2J0Zl9pZHNbMF0sXFxuMzUzNTpcXHRcXHQuaXRlcl9zZXFfaW5mbyA9IFxcdTAwMjZyaGFzaF9pdGVyX3NlcV9pbmZvLFxcbjM1MzY6XFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDM6MjQuNDU5ODI5NDA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDk3MDk1MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmLiBJbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCB0aGUgYGJwZl9lYWNoX3JoYXNoX2VsZW1gIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgcHJldmlvdXMgdmVyc2lvbiBlc3NlbnRpYWxseSBpdGVyYXRlZCBpbmRlZmluaXRlbHkgdGhyb3VnaCBhbiByaGFzaCB0YWJsZS4gTm93LCB0aGVyZSdzIGEgbGltaXQgaW50cm9kdWNlZDogYHZpc2l0X2J1ZGdldCA9IGF0b21pY19yZWFkKFx1MDAyNnJodGFiLVx1MDAzZWh0Lm5lbGVtcylgLiBUaGUgbG9vcCB3aWxsIG5vdyB0ZXJtaW5hdGUgaWYgaXQgcmVhY2hlcyB0aGF0IGJ1ZGdldC4gVGhpcyBpcyAqY3J1Y2lhbCogYmVjYXVzZSBpdCBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBkdXJpbmcgaXRlcmF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBlbGVtZW50cyBhcmUgYmVpbmcgYWRkZWQgY29uY3VycmVudGx5LiBUaGF0J3MgYSBzb2xpZCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMsIHNvbWV0aGluZyB0aGF0IGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vayBmb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGlzIGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgYmVpbmcgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHNpbmNlIGl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgQlBGIHN5c2NhbGxzOiBjcmVhdGluZyBhbiByaGFzaCBtYXAsIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB0aGF0IHVzZXMgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgb24gdGhhdCBtYXAsIGFuZCB0aGVuIHJ1bm5pbmcgdGhlIHByb2dyYW0uIFNvLCB5ZWFoLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGltcGFjdCBpcyBoaWdoIOKAkyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBjYW4gbGVhZCB0byBzZXJpb3VzIGRlbmlhbC1vZi1zZXJ2aWNlIGlzc3Vlcy5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzIG9mIHNldHRpbmcgdXAgYSBmdXp6aW5nIGNhbXBhaWduLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdXp6aW5nIHRoZSByaWdodCBjYWxscy5cblxuU28sICpmb2N1cyBzeW1ib2xzKi4uLiBjbGVhcmx5IGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gIGlzIGEgcHJpbWFyeSB0YXJnZXQuIFRoYXQncyB0aGUgQlBGIGhlbHBlciB0aGF0IGluaXRpYXRlcyB0aGUgaXRlcmF0aW9uLiBCdXQgd2hhdCBhYm91dCBgYnBmX2VhY2hfcmhhc2hfZWxlbWA/IEhvbGQgb24sIGlzbid0IHRoYXQgc3RhdGljPyBZZXMsIGJ1dCBpdCdzIGFkZHJlc3MgaXMgc3RvcmVkIGluIGByaHRhYl9tYXBfb3BzLm1hcF9mb3JfZWFjaF9jYWxsYmFja2AuIFdhaXQsIGluIHZlcmlmaWVyIGZpeHVwcywgaXQncyB0aGVyZSBgaW5zbi1cdTAwM2VpbW0gPSBCUEZfQ0FMTF9JTU0ob3BzLVx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjaylgLiBJZiBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgdGhlbiBpdCBpcyBhIHN5bWJvbCBpbiBrYWxsc3ltcy4gQnV0LCBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsJ3MgZG9jdW1lbnRhdGlvbiwgYXMgc29tZXRpbWVzLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuVGhlIGRvY3VtZW50YXRpb24gcmVjb21tZW5kcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIE5vdywgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0IHNlZW1zIGlkZWFsLiBIb3dldmVyLCBgQlBGX0NBTExfNGAgY3JlYXRlcyBlaXRoZXIgYF9fX2JwZl9mb3JfZWFjaF9tYXBfZWxlbWAgb3IgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQlBGX0NBTExgIGRlZmluZXMgdGhlc2Ugc3ltYm9scy4gT2theSwgSSBuZWVkIHRvIGdyZXAgZm9yIGBCUEZfQ0FMTGAgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIG9yIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkgdG8gdW5kZXJzdGFuZCB0aGUgc3ltYm9sIG5hbWluZyBjb252ZW50aW9ucy4gVGhpcyB3aWxsIGhlbHAgcmVmaW5lIHRoZSBmdXp6aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NzQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0Mzo0Ni41NTY5Mjg0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MDAyMTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMXzRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY4Mi0jZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgzOiNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODQtI2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDM6NDguMjk2OTU2NjExWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NDI1NzY3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQlBGIENhbGwgRGVmaW5pdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBCUEYgY2FsbHMgYXJlIGRlZmluZWQuIFRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IGlzIGFsd2F5cyB0aGUga2VybmVsJ3MgaW5jbHVkZSBmaWxlcywgc28gbGV0J3MgaGVhZCBzdHJhaWdodCBmb3IgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgQlBGX0NBTExfeGAgbWFjcm9zLCBzaW5jZSB0aG9zZSBhcmUgdGhlIGhlYXJ0IG9mIGhvdyB3ZSBpbnRlcmZhY2Ugd2l0aCB0aGUgQlBGIHN1YnN5c3RlbSBhdCB0aGlzIGxldmVsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBhcmUgY29uc3RydWN0ZWQsIHdoYXQgc29ydCBvZiBwcmVwcm9jZXNzb3IgbWFnaWMgaXMgdXNlZCwgd2hhdCBjb25zdHJhaW50cyBhcmUgdGhlcmUuIExldCdzIHNlZSBpZiB0aGlzIGRlZmluaXRpb24gaXMgZ29pbmcgdG8gY2F1c2Ugc29tZSBzaWRlIGVmZmVjdHMsIG9yIG1heWJlIGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGFzcGVjdHMgb2YgdGhlIGNhbGwgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI3MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQzOjU1LjczOTUzNTQ4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcXG4gNjYxOlxcdFxcbiA2NjI6XFx0I2RlZmluZSBfX0JQRl9QQUQobilcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2NjM6XFx0XFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxcXFxuIDY2NDpcXHRcXHRcXHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXFxuIDY2NTpcXHRcXG4gNjY2OlxcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjY3OlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2Njg6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxcXFxuIDY2OTpcXHRcXHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXFxcXG4gNjcwOlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcXFxcbiA2NzE6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxcXFxuIDY3MjpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjczOlxcdFxcdFxcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcXFxcbiA2NzQ6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDY3NTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjc2OlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0I2RlZmluZSBfX05PQVRUUlxcbiA2Nzk6XFx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjgwOlxcdCNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY4MTpcXHQjZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2ODI6XFx0I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjgzOlxcdCNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY4NDpcXHQjZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0Mzo1NS43Mzk2Mzg1MDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMwODUwOTUwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQlBGIE1hcCBJdGVyYXRpb24gYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBCUEZfQ0FMTF80KGJwZl9mb3JfZWFjaF9tYXBfZWxlbSwgLi4uKWAgZGVmaW5lcyB0aGUgcHVibGljLCBub24tc3RhdGljIGZ1bmN0aW9uIGB1NjQgYnBmX2Zvcl9lYWNoX21hcF9lbGVtKC4uLilgLiAgVGhlbiB0aGVyZSdzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCwgd2hpY2ggaXMgc3RhdGljIGJ1dCB1c2VkIHZpYSBgcmh0YWJfbWFwX29wc2AuICBJIG5lZWQgdG8gY29uZmlybSBpZiBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaXMgY2FsbGVkIGVsc2V3aGVyZSBvciBpZiBpdCBuZWVkcyB0byBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGBicGZfZm9yX2VhY2hfbWFwX2VsZW1gLiBJIHRoaW5rIGluY2x1ZGluZyBib3RoIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBhbmQgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgaW4gYEZvY3VzU3ltYm9sc2AgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guXG5cbk5leHQsIEknbGwgbW92ZSBvbiB0byBjb25maWd1cmF0aW9uLiBUbyBnZXQgQlBGIHN5c2NhbGxzIGFuZCBtYXBzIHdvcmtpbmcsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCwgdGhhdCdzIGEgZ2l2ZW4uIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBiZSBzdXJlLlxuXG5Mb29raW5nIGF0IGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgaXQgbG9va3MgbGlrZSBgaGFzaHRhYi5vYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhY3RpdmUsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QuIE5vdywgSSBzaG91bGQgbWFrZSBjZXJ0YWluIHdoZXRoZXIgYEJQRl9NQVBfVFlQRV9SSEFTSGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEknbGwgZGl2ZSBpbnRvIGBoYXNodGFiLmNgIGFuZCBzZWFyY2ggZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJvdW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gYHJodGFiX2Agb3IgYEJQRl9NQVBfVFlQRV9SSEFTSGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmhhc2h0YWJsZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ0OjU4LjgyNDczNjc1N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNTkxNDE4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWYuKlJIQVNIfCNpZi4qcmh0YWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDQ6NTkuMjU1MzM2ODQ1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDcxMDcwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOlxuXG4qKkNoZWNraW5nIGZvciBDb25maWcgT3ZlcmxhcCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIHBvdGVudGlhbGx5IG90aGVyIGZpbGVzIGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjb2RlIGhhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gR2l2ZW4gdGhlIHNlbnNpdGl2ZSBuYXR1cmUgb2YgQlBGIGFuZCBob3cgZGVlcGx5IGl0IGludGVncmF0ZXMgd2l0aCB0aGUga2VybmVsLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIG9yIG92ZXJsYXBwaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBzY2FuIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSwgb3IgYmUgaW5mbHVlbmNlZCBieSwgdGhlIHNldHRpbmdzIHRoYXQgZ292ZXJuIHRoaXMgcGFydGljdWxhciBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbC1sZXZlbCBjaGFuZ2VzLiBMZXQgbWUgY2FyZWZ1bGx5IGV4YW1pbmUgYWxsIHJlbGV2YW50IGZpbGVzIHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwNTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0NToxOC43MjY0MTEwNDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDQxNzY3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZ8I2lmIElTX0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ1OjE4Ljc3Mzg1OTQ2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQ2ODM3NDI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSGFzaHRhYmxlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIFdoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lIGlzIHRoZSBjb21wbGV0ZSBhYnNlbmNlIG9mIGFueSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzIChgI2lmZGVmYHMpLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoYXQgdGhlIG9ubHkga2VybmVsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgZm9yIHRoaXMgbW9kdWxlIGlzIHRoZSBlbmFibGluZyBvZiB0aGUgQlBGIHN5c3RlbSBjYWxsIChgQlBGX1NZU0NBTExgKS4gVGhhdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5LlxuXG5Ob3csIGxldCBtZSBqdXN0IGNvbmZpcm0gbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGJ5IGdvaW5nIHRocm91Z2ggdGhlIHJlcXVpcmVtZW50cyBtb3JlIG1ldGhvZGljYWxseTpcblxuMS4gIGBXb3J0aEZ1enppbmdgOiBDb25maXJtZWQsIGl0J3Mgc2V0IHRvIFwidHJ1ZVwiLiBUaGlzIGluZGljYXRlcyB0aGUgY29kZSBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCB3aGljaCBtZWFucyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBsaWtlbHkgdG8gYmUgcHJlc2VudC5cbjIuICBgRm9jdXNTeW1ib2xzYDogSSBhbSBmb2N1c2luZyBvbiB0d28ga2V5IHN5bWJvbHMgaGVyZSwgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbWAgYW5kIGBicGZfZWFjaF9yaGFzaF9lbGVtYC4gVGhlc2UgYXJlIG15IHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QuIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhleSdyZSByZWxhdGVkIHRvIGl0ZXJhdGluZyB0aHJvdWdoIEJQRiBtYXAgZWxlbWVudHMuXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBJJ3ZlIGFscmVhZHkgY2hlY2tlZCB0aGlzLiBgW1wiQlBGX1NZU0NBTExcIl1gIGlzIHRoZSBvbmx5IHJlcXVpcmVtZW50LCB3aGljaCBpcyB2ZXJ5IHNpbXBsZS5cbjQuICBgUmVhc29uaW5nYDogQWgsIHJpZ2h0LiBUaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBpcyBhbGwgYWJvdXQgbWFuYWdpbmcgaXRlcmF0aW9uIGJ1ZGdldHMgd2l0aGluIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBzcGVjaWZpY2FsbHkgd2hlbiBpdCdzIHVzZWQgd2l0aCBgQlBGX01BUF9UWVBFX1JIQVNIYCBCUEYgcmhhc2ggbWFwcy4gVGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCB1bmJvdW5kZWQgaXRlcmF0aW9uLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRlbmlhbC1vZi1zZXJ2aWNlLCBlc3BlY2lhbGx5IGR1cmluZyBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gdGhlIGhhc2ggdGFibGUuIFRoaXMgaXMgaW1wb3J0YW50OiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBjb3VsZCBlYXNpbHkgbGVhZCB0byBhbiBleHBsb2l0YWJsZSBzaXR1YXRpb24gaWYgdGhlIGJ1ZGdldCBpcyBub3QgbWFuYWdlZCwgd2hpY2ggaXMgd2h5IEkgd2FzIGZvY3VzaW5nIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuV2l0aCB0aGF0LCBJIGFtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMDIsIk91dHB1dFRva2VucyI6MTU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ1OjUwLjI0MjIzNjQ4NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODE2NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9mb3JfZWFjaF9tYXBfZWxlbVwiLFxuICAgIFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfZWFjaF9yaGFzaF9lbGVtKClgIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdG8gZW5mb3JjZSBhbiBpdGVyYXRpb24gYnVkZ2V0IGJhc2VkIG9uIGF0b21pYyBgbmVsZW1zYCB3aGVuIGl0ZXJhdGluZyBvdmVyIGBCUEZfTUFQX1RZUEVfUkhBU0hgIG1hcHMgdmlhIGBicGZfZm9yX2VhY2hfbWFwX2VsZW0oKWAuIFRoaXMgYm91bmRzIHRoZSBpdGVyYXRpb24gbG9vcCBhbmQgcHJldmVudHMgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG9wZXJhdGlvbnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2Zvcl9lYWNoX21hcF9lbGVtXCIsXG4gICAgXCJicGZfZWFjaF9yaGFzaF9lbGVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9lYWNoX3JoYXNoX2VsZW0oKWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byBlbmZvcmNlIGFuIGl0ZXJhdGlvbiBidWRnZXQgYmFzZWQgb24gYXRvbWljIGBuZWxlbXNgIHdoZW4gaXRlcmF0aW5nIG92ZXIgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcyB2aWEgYGJwZl9mb3JfZWFjaF9tYXBfZWxlbSgpYC4gVGhpcyBib3VuZHMgdGhlIGl0ZXJhdGlvbiBsb29wIGFuZCBwcmV2ZW50cyB1bmJvdW5kZWQgaXRlcmF0aW9ucyBkdXJpbmcgY29uY3VycmVudCBtYXAgb3BlcmF0aW9ucy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ1OjUwLjMxNzA1OTg4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3OTQ0MTM0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0NTo1MC4zMTc1NTgxMDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2OTc5MzkxMDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBieSBib3VuZGluZyB0aGUgaXRlcmF0aW9uIGxvb3Agd2l0aCBhIGB2aXNpdF9idWRnZXRgIGRlcml2ZWQgZnJvbSBgYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcyBhcmUgZXhwb3NlZCBvciBjaGVja2VkLlxcbjMuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBjb25jZXJucyBpbnZvbHZpbmcgUkNVLXByb3RlY3RlZCByaGFzaHRhYmxlIGVsZW1lbnRzIGFyZSBhZGRyZXNzZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExvY2tkZXAgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNkNDQwMzA5OTFjNjE3NWY3M2ZkNDE4NzIzNTQ2MjA3YTAyNTk4ZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzozMzo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLjJjYWQ2N2M5MDE1NDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0zMTk4LDcgKzMxOTgsOCBAQCBzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxuIFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xuIFx0dm9pZCAqcHJldl9rZXkgPSBOVUxMO1xuIFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW07XG4tXHRpbnQgbnVtX2VsZW1zID0gMDtcbitcdHUzMiB2aXNpdF9idWRnZXQ7XG4rXHR1MzIgbnVtX2VsZW1zID0gMDtcbiBcdHU2NCByZXQgPSAwO1xuIFxuIFx0Y2FudF9taWdyYXRlKCk7XG5AQCAtMzIxMiw3ICszMjEzLDkgQEAgc3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbiBcdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuIFx0ICogZWxlbWVudHMgdmlzaXRlZC5cbiBcdCAqL1xuLVx0d2hpbGUgKChlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcHJldl9rZXkpKSkge1xuK1x0dmlzaXRfYnVkZ2V0ID0gYXRvbWljX3JlYWQoXHUwMDI2cmh0YWItXHUwMDNlaHQubmVsZW1zKTtcbitcdHdoaWxlIChudW1fZWxlbXMgXHUwMDNjIHZpc2l0X2J1ZGdldCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbiBcdFx0aWYgKElTX0VSUihlbGVtKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0bnVtX2VsZW1zKys7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmNcbmluZGV4IDk4YmI2NjkwN2I3ZjcuLmYxYTBhOGUzZmMxYWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jXG5AQCAtMywxMiArMywxNiBAQFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGF0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJyaGFzaC5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5za2VsLmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuIFxuKyNkZWZpbmUgUkhBU0hfU1RSRVNTX0RVUkFUSU9OX05TXHQoM1VMTCAqIDEwMDAwMDAwMDBVTEwpXG4rXG4gc3RhdGljIHZvaWQgcmhhc2hfcnVuKGNvbnN0IGNoYXIgKnByb2dfbmFtZSlcbiB7XG4gXHRzdHJ1Y3Qgcmhhc2ggKnNrZWw7XG5AQCAtNTMsNiArNTcsMTEyIEBAIHN0YXRpYyBpbnQgcmhhc2hfbWFwX2NyZWF0ZShfX3UzMiBtYXhfZW50cmllcywgX191NjQgbWFwX2V4dHJhKVxuIFx0XHRcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcdTAwMjZvcHRzKTtcbiB9XG4gXG4rc3RydWN0IHJoYXNoX3N0cmVzc19hcmcge1xuK1x0aW50IG1hcF9mZDtcbitcdGF0b21pY19ib29sICpzdG9wO1xuK1x0X191MzIgbnJfa2V5cztcbitcdF9fdTMyIHNlZWQ7XG4rfTtcbitcbitzdGF0aWMgdm9pZCAqcmhhc2hfc3RyZXNzX3VwZGF0ZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCByaGFzaF9zdHJlc3NfYXJnICphcmcgPSBkYXRhO1xuK1x0X191NjQgdmFsdWUgPSAwO1xuK1x0X191MzIga2V5O1xuK1x0X191MzIgaTtcbitcbitcdHdoaWxlICghYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZy1cdTAwM2Vucl9rZXlzIFx1MDAyNlx1MDAyNiAhYXRvbWljX2xvYWQoYXJnLVx1MDAzZXN0b3ApOyBpKyspIHtcbitcdFx0XHRrZXkgPSAoKF9fdTMyKWkgKiAyNjU0NDM1NzYxVSArIGFyZy1cdTAwM2VzZWVkKSAlIGFyZy1cdTAwM2Vucl9rZXlzO1xuK1x0XHRcdGJwZl9tYXBfdXBkYXRlX2VsZW0oYXJnLVx1MDAzZW1hcF9mZCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWx1ZSwgQlBGX0FOWSk7XG4rXHRcdH1cbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXJnLVx1MDAzZW5yX2tleXMgXHUwMDI2XHUwMDI2ICFhdG9taWNfbG9hZChhcmctXHUwMDNlc3RvcCk7IGkrKykge1xuK1x0XHRcdGtleSA9ICgoX191MzIpaSAqIDI2NTQ0MzU3NjFVICsgYXJnLVx1MDAzZXNlZWQpICUgYXJnLVx1MDAzZW5yX2tleXM7XG4rXHRcdFx0YnBmX21hcF9kZWxldGVfZWxlbShhcmctXHUwMDNlbWFwX2ZkLCBcdTAwMjZrZXkpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmhhc2hfaXRlcl9zdHJlc3Modm9pZClcbit7XG4rXHRzdHJ1Y3Qgcmhhc2ggKnNrZWwgPSBOVUxMO1xuK1x0c3RydWN0IHJoYXNoX3N0cmVzc19hcmcgYXJnc1syXTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdGF0b21pY19ib29sIHN0b3AgPSBmYWxzZTtcbitcdGJvb2wgcmFuID0gZmFsc2U7XG4rXHRfX3U2NCBzdGFydDtcbitcdHB0aHJlYWRfdCB0aHJlYWRzWzJdO1xuK1x0Ym9vbCBjcmVhdGVkWzJdID0ge307XG4rXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4rXHRpbnQgbnJfY3B1cztcbitcdF9fdTMyIHdvcmtpbmdfc2V0O1xuK1x0aW50IG1hcF9mZCwgZXJyLCBpO1xuK1xuK1x0bnJfY3B1cyA9IGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpO1xuK1x0aWYgKCFBU1NFUlRfR1QobnJfY3B1cywgMCwgXCJudW1fcG9zc2libGVfY3B1c1wiKSlcbitcdFx0cmV0dXJuO1xuK1x0aWYgKG5yX2NwdXMgXHUwMDNjIDIpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRza2VsID0gcmhhc2hfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInJoYXNoX19vcGVuIHN0cmVzc1wiKSlcbitcdFx0cmV0dXJuO1xuK1x0d29ya2luZ19zZXQgPSBza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VzdHJlc3Nfd29ya2luZ19zZXQ7XG4rXG4rXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2tlbC1cdTAwM2VvYmosXG4rXHRcdFx0XHRcdFx0XCJ0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHByb2csIFwiZmluZCBzdHJlc3MgcHJvZ3JhbVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0YnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChwcm9nLCB0cnVlKTtcbitcbitcdGVyciA9IHJoYXNoX19sb2FkKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInN0cmVzcyBza2VsX2xvYWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5zdHJlc3NfcmhtYXApO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0aHJlYWRzKTsgaSsrKSB7XG4rXHRcdGFyZ3NbaV0ubWFwX2ZkID0gbWFwX2ZkO1xuK1x0XHRhcmdzW2ldLnN0b3AgPSBcdTAwMjZzdG9wO1xuK1x0XHRhcmdzW2ldLm5yX2tleXMgPSB3b3JraW5nX3NldDtcbitcdFx0YXJnc1tpXS5zZWVkID0gaSAqIDk3NztcbitcdFx0ZXJyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcmhhc2hfc3RyZXNzX3VwZGF0ZSxcbitcdFx0XHRcdCAgICAgXHUwMDI2YXJnc1tpXSk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJwdGhyZWFkX2NyZWF0ZVwiKSlcbitcdFx0XHRnb3RvIHN0b3BfdGhyZWFkcztcbitcdFx0Y3JlYXRlZFtpXSA9IHRydWU7XG4rXHR9XG4rXG4rXHRzdGFydCA9IGdldF90aW1lX25zKCk7XG4rXHR3aGlsZSAoZ2V0X3RpbWVfbnMoKSAtIHN0YXJ0IFx1MDAzYyBSSEFTSF9TVFJFU1NfRFVSQVRJT05fTlMpIHtcbitcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQocHJvZyksIFx1MDAyNm9wdHMpO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic3RyZXNzIHByb2cgcnVuXCIpKVxuK1x0XHRcdGdvdG8gc3RvcF90aHJlYWRzO1xuK1x0XHRyYW4gPSB0cnVlO1xuK1x0fVxuK1xuK3N0b3BfdGhyZWFkczpcbitcdGF0b21pY19zdG9yZShcdTAwMjZzdG9wLCB0cnVlKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGhyZWFkcyk7IGkrKylcbitcdFx0aWYgKGNyZWF0ZWRbaV0pXG4rXHRcdFx0cHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpO1xuK1xuK1x0aWYgKGVyciB8fCAhcmFuKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX21heF92aXNpdHMsIDAsIFwic3RyZXNzIGNhbGxiYWNrIHZpc2l0c1wiKTtcbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJlc3NfZnVsbF93YWxrcywgMCwgXCJzdHJlc3MgZnVsbCB3YWxrc1wiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJlc3Nfb3ZlcnJ1bnMsIDAsIFwic3RyZXNzIGNhbGxiYWNrIGJvdW5kXCIpO1xuK1x0cHJpbnRmKFwic3RyZXNzIG1heCBjYWxsYmFjayB2aXNpdHM6ICVsbHUgKGxpbWl0ICV1KVxcblwiLFxuK1x0ICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyZXNzX21heF92aXNpdHMsXG4rXHQgICAgICAgd29ya2luZ19zZXQpO1xuK2NsZWFudXA6XG4rXHRyaGFzaF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcmhhc2hfbWFwX2V4dHJhX3ByZXNpemUodm9pZClcbiB7XG4gXHRjb25zdCBfX3UzMiBtYXhfZW50cmllcyA9IDEwMjQ7XG5AQCAtMTgwLDQgKzI5MCw3IEBAIHZvaWQgdGVzdF9yaGFzaCh2b2lkKVxuIFxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0ZXN0X3JoYXNoX2l0ZXJcIikpXG4gXHRcdHJoYXNoX2l0ZXJfdGVzdCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0ZXN0X3JoYXNoX2l0ZXJfc3RyZXNzXCIpKVxuK1x0XHRyaGFzaF9pdGVyX3N0cmVzcygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXG5pbmRleCBmYzJkYWMzYTcxOWU5Li4zZDcyMDE0MzBiYWJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jXG5AQCAtOSwxMSArOSwxOCBAQFxuIFxuICNkZWZpbmUgRU5PRU5UIDJcbiAjZGVmaW5lIEVFWElTVCAxN1xuKyNkZWZpbmUgUkhBU0hfU1RSRVNTX01BWF9FTlRSSUVTICgxVSBcdTAwM2NcdTAwM2MgMjApXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIFxuIGludCBlcnI7XG4gXG4rY29uc3Qgdm9sYXRpbGUgX191MzIgc3RyZXNzX3dvcmtpbmdfc2V0ID0gNDA5Njtcbitcbit2b2xhdGlsZSBfX3U2NCBzdHJlc3NfbWF4X3Zpc2l0cztcbit2b2xhdGlsZSBfX3U2NCBzdHJlc3Nfb3ZlcnJ1bnM7XG4rdm9sYXRpbGUgX191NjQgc3RyZXNzX2Z1bGxfd2Fsa3M7XG4rXG4gc3RydWN0IGVsZW0ge1xuIFx0Y2hhciBhcnJbMTI4XTtcbiBcdGludCB2YWw7XG5AQCAtMjcsNiArMzQsMjAgQEAgc3RydWN0IHtcbiBcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGVsZW0pO1xuIH0gcmhtYXAgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCBSSEFTSF9TVFJFU1NfTUFYX0VOVFJJRVMpO1xuK1x0X190eXBlKGtleSwgX191MzIpO1xuK1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4rfSBzdHJlc3NfcmhtYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4rc3RhdGljIF9fdTY0IHN0cmVzc19pdGVyX2NiKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXG4rXHRcdFx0ICAgIHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwic3lzY2FsbFwiKVxuIGludCB0ZXN0X3JoYXNoX2xvb2t1cF91cGRhdGUodm9pZCAqY3R4KVxuIHtcbkBAIC0yNDYsMyArMjY3LDIzIEBAIGludCB0ZXN0X3JoYXNoX2RlbGV0ZV9ub25leGlzdGVudCh2b2lkICpjdHgpXG4gXHRlcnIgPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgdGVzdF9yaGFzaF9pdGVyX3N0cmVzcyh2b2lkICpjdHgpXG4re1xuK1x0LypcbitcdCAqIENvbmN1cnJlbnQgcmVoYXNoIG1heSBwcm9kdWNlIGR1cGxpY2F0ZSB2aXNpdHMuIENoZWNrIHRoYXQgdGhlXG4rXHQgKiBoZWxwZXIgc3RpbGwgZ2l2ZXMgb25lIHdhbGsgYSBmaW5pdGUgY2FsbGJhY2sgYm91bmQ7IG5vIHNuYXBzaG90XG4rXHQgKiBvciB1bmlxdWUtdmlzaXQgZ3VhcmFudGVlIGlzIGV4cGVjdGVkIGhlcmUuXG4rXHQgKi9cbitcdGxvbmcgdmlzaXRzO1xuK1xuK1x0dmlzaXRzID0gYnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNnN0cmVzc19yaG1hcCwgc3RyZXNzX2l0ZXJfY2IsIE5VTEwsIDApO1xuK1x0aWYgKHZpc2l0cyBcdTAwM2Ugc3RyZXNzX21heF92aXNpdHMpXG4rXHRcdHN0cmVzc19tYXhfdmlzaXRzID0gdmlzaXRzO1xuK1x0aWYgKHZpc2l0cyBcdTAwM2Ugc3RyZXNzX3dvcmtpbmdfc2V0KVxuK1x0XHRzdHJlc3Nfb3ZlcnJ1bnMrKztcbitcdGlmICh2aXNpdHMgPT0gc3RyZXNzX3dvcmtpbmdfc2V0KVxuK1x0XHRzdHJlc3NfZnVsbF93YWxrcysrO1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDU6NTAuMzE3NTU4OTQ5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMTg2NjQxNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlIGRpZmYgYWZmZWN0cyBga2VybmVsL2JwZi9oYXNodGFiLmNgLCB3aGljaCBpcyBhIGNvcmUgQlBGIGNvbXBvbmVudCwgYW5kIHRoZSBzZWxmdGVzdHM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jYC4gUmlnaHQsIHNvIHRoaXMgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGhhc2ggdGFibGUgYmVoYXZpb3IgYW5kIHRoZSBhc3NvY2lhdGVkIHRlc3RzLlxuXG5NeSBmaXJzdCBzdGVwIGlzIHRvIGZvY3VzIG9uIHRoZSBrZXJuZWwtc2lkZSBjaGFuZ2UgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSdsbCB3YW50IHRvIGdldCBhIGxvb2sgYXQgYXJvdW5kIGxpbmUgMzE5OC4gRWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzaG91bGQgZG8gdGhlIHRyaWNrOyBJIGp1c3QgbmVlZCB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBhZmZlY3RlZCBjb2RlIGFuZCBzZWUgd2hhdCBtb2RpZmljYXRpb25zIHdlcmUgaW50cm9kdWNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgYWx0ZXJlZCBpbiB0aGlzIGNydWNpYWwgYXJlYS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHdpbGwgbGlrZWx5IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDY6NDMuNTA0MjA0MDM3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ0NTUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2VhY2hfcmhhc2hfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTc4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTk1OnN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE5Ni1cXHRcXHRcXHRcXHR2b2lkICpjYWxsYmFja19jdHgsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MTY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMwLVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUzMTpcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTMyLVxcdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDY6NDMuODk4NjY1MDk3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDY3NjY4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIGxpbmVzIG9mIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBIYXNodGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDMxOTAgdG8gMzI0MC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBzZWN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiBob3cgdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBoYXNodGFibGUgaW1wbGVtZW50YXRpb24gb3BlcmF0ZXMuIEknbGwgcmVhZCB0aHJvdWdoIHRoZXNlIGxpbmVzIGNhcmVmdWxseSwgbG9va2luZyBmb3IgcGF0dGVybnMsIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlZmluZXMgaXRzIGJlaGF2aW9yLiBJJ20gZ29pbmcgdG8gcGF5IGF0dGVudGlvbiB0byBob3cgdGhlIG9wZXJhdGlvbnMgYWZmZWN0IG92ZXJhbGwgcGVyZm9ybWFuY2UgYXMgd2VsbC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBlaXRoZXIgZWxlbWVudCBpbnNlcnRpb24sIHJldHJpZXZhbCwgb3IgZGVsZXRpb24gd2l0aGluIHRoZSB0YWJsZSwgb3IgcG9zc2libHkgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyBvZiB0aGUgaGFzaHRhYmxlLiBNeSBnb2FsIGlzIHRvIGV4dHJhY3QgdGhlIGNvcmUgbG9naWMgYmVpbmcgcGVyZm9ybWVkIGJ5IHRoZXNlIGxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6NDY6NDguOTQ1NDM0MjQxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTkwOlxcdFxcdHNlcV9wdXRzKG0sIFxcXCI6IFxcXCIpO1xcbjMxOTE6XFx0XFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQsIHZhbHVlLCBtKTtcXG4zMTkyOlxcdFxcdHNlcV9wdXRjKG0sICdcXFxcbicpO1xcbjMxOTM6XFx0fVxcbjMxOTQ6XFx0XFxuMzE5NTpcXHRzdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbjMxOTY6XFx0XFx0XFx0XFx0XFx0dm9pZCAqY2FsbGJhY2tfY3R4LCB1NjQgZmxhZ3MpXFxuMzE5NzpcXHR7XFxuMzE5ODpcXHRcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuMzE5OTpcXHRcXHR2b2lkICpwcmV2X2tleSA9IE5VTEw7XFxuMzIwMDpcXHRcXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcXG4zMjAxOlxcdFxcdHUzMiB2aXNpdF9idWRnZXQ7XFxuMzIwMjpcXHRcXHR1MzIgbnVtX2VsZW1zID0gMDtcXG4zMjAzOlxcdFxcdHU2NCByZXQgPSAwO1xcbjMyMDQ6XFx0XFxuMzIwNTpcXHRcXHRjYW50X21pZ3JhdGUoKTtcXG4zMjA2OlxcdFxcbjMyMDc6XFx0XFx0aWYgKGZsYWdzICE9IDApXFxuMzIwODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMjA5OlxcdFxcbjMyMTA6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjMyMTE6XFx0XFx0LypcXG4zMjEyOlxcdFxcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxcbjMyMTM6XFx0XFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuMzIxNDpcXHRcXHQgKiBlbGVtZW50cyB2aXNpdGVkLlxcbjMyMTU6XFx0XFx0ICovXFxuMzIxNjpcXHRcXHR2aXNpdF9idWRnZXQgPSBhdG9taWNfcmVhZChcXHUwMDI2cmh0YWItXFx1MDAzZWh0Lm5lbGVtcyk7XFxuMzIxNzpcXHRcXHR3aGlsZSAobnVtX2VsZW1zIFxcdTAwM2MgdmlzaXRfYnVkZ2V0IFxcdTAwMjZcXHUwMDI2XFxuMzIxODpcXHRcXHQgICAgICAgKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcXG4zMjE5OlxcdFxcdFxcdGlmIChJU19FUlIoZWxlbSkpXFxuMzIyMDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMjIxOlxcdFxcdFxcdG51bV9lbGVtcysrO1xcbjMyMjI6XFx0XFx0XFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsXFxuMzIyMzpcXHRcXHRcXHRcXHRcXHQgICh1NjQpKGxvbmcpZWxlbS1cXHUwMDNlZGF0YSxcXG4zMjI0OlxcdFxcdFxcdFxcdFxcdCAgKHU2NCkobG9uZylyaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpLFxcbjMyMjU6XFx0XFx0XFx0XFx0XFx0ICAodTY0KShsb25nKWNhbGxiYWNrX2N0eCwgMCk7XFxuMzIyNjpcXHRcXHRcXHRpZiAocmV0KVxcbjMyMjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzIyODpcXHRcXG4zMjI5OlxcdFxcdFxcdHByZXZfa2V5ID0gZWxlbS1cXHUwMDNlZGF0YTtcXHQvKiB2YWxpZCB3aGlsZSBSQ1UgaGVsZCAqL1xcbjMyMzA6XFx0XFx0fVxcbjMyMzE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzIzMjpcXHRcXG4zMjMzOlxcdFxcdHJldHVybiBudW1fZWxlbXM7XFxuMzIzNDpcXHR9XFxuMzIzNTpcXHRcXG4zMjM2OlxcdHN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbjMyMzc6XFx0e1xcbjMyMzg6XFx0XFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbjMyMzk6XFx0XFx0dTY0IG51bV9lbnRyaWVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzo0Njo0OC45NDU1NzkzODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNjU4Njg1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHN0YWJpbGl6aW5nIHRoZSBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzLiBUaGUgY29yZSBjaGFuZ2UgbGltaXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdmlzaXRlZCBkdXJpbmcgaXRlcmF0aW9uIHRvIHRoZSBjdXJyZW50IG51bWJlciBvZiBlbGVtZW50cyAoYGF0b21pY19yZWFkKFx1MDAyNnJodGFiLVx1MDAzZWh0Lm5lbGVtcylgKSBpbiB0aGUgcmhhc2h0YWJsZS4gUHJldmlvdXNseSwgd2Ugcmlza2VkIGluZmluaXRlIGxvb3BzIG9yIGluZWZmaWNpZW50IGl0ZXJhdGlvbnMgaWYgdGhlcmUgd2VyZSBjb25jdXJyZW50IHVwZGF0ZXMgaGFwcGVuaW5nIHRvIHRoZSBtYXAuIFRoZXkndmUgYWxzbyBhZGRlZCBzdHJlc3MgdGVzdHMgdG8gdmFsaWRhdGUgdGhpcyBmaXguXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGxldCdzIHNlZSBpZiB0aGlzIGNyZWF0ZXMgYW55IEtNU0FOIGNvbmNlcm5zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBkb2Vzbid0ICpzZWVtKiBsaWtlIGl0IHdpbGwuIEknbSBmb2N1c2luZyBvbiB0aGUgS01TQU4gY3JpdGVyaWE6IGFyZSB3ZSBzZW5kaW5nIG9yIG1vZGlmeWluZyBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGhhdmUgdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zZWQgdG8gdXNlcnNwYWNlPyBBcmUgdGhlcmUgYW55IGJyYW5jaGVzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBcmUgbmV3IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbml0aWFsaXplZCBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcz8gRG9lcyB0aGUgcGF0Y2ggbWVzcyB3aXRoIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgZ2l2ZSByZWFkIGFjY2VzcyB0byB1bmluaXRhbGl6ZWQgZGF0YT8gSXMgdGhlcmUgYW55IGtpbmQgb2YgaW5mb3JtYXRpb24gbGVhaywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIHBhZGRpbmcgaXNzdWVzP1xuXG5Oby4gYHZpc2l0X2J1ZGdldGAgaXMgcmVhZCBmcm9tIHRoZSBgYXRvbWljX3JlYWQoKWAgZnVuY3Rpb24sIGFuZCBpcyBpbml0aWFsaXplZC4gYG51bV9lbGVtc2AgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSXQncyBqdXN0IGEgbG9vcCBib3VuZCBjaGVjayB0byBwcmV2ZW50IHVuYm91bmRlZCBpdGVyYXRpb24uIEl0IGlzIGFsbCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrLiBJIHNlZSB0aGF0IGB2aXNpdF9idWRnZXRgIGlzIGFzc2lnbmVkIHVzaW5nIGBhdG9taWNfcmVhZCgpYCwgYG51bV9lbGVtc2AgaXMgc2V0IHRvIHplcm8sIGFuZCBgcHJldl9rZXlgIGlzIHNldCB0byBOVUxMLiBUaGUgcmV0dXJuIHZhbHVlLCBgbnVtX2VsZW1zYCwgaXMgYWxzbyBpbml0aWFsaXplZC4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFwcGVhcnMgdG8gYmUgcmVhZCBvciBleHBvc2VkLiBBbnkgY29uY3VycmVuY3kgb3IgUkNVIHJlbGF0ZWQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciB0b29scy4gSSBhbSBub3Qgc2VlaW5nIGFueSBpc3N1ZXMuXG5cbk9rYXksIGxldCBtZSBwdXQgdGhpcyBpbnRvIGEgZm9ybWFsIGFyZ3VtZW50OlxuXG4xLiAgKipQYXRjaCBGdW5jdGlvbjoqKiBUaGUgcGF0Y2ggYWRkcyBhIGB2aXNpdF9idWRnZXRgIGxpbWl0IHVzaW5nIGBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpYCB0byBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgd2hlbiBpdGVyYXRpbmcgb3ZlciBlbGVtZW50cyBpbiBlQlBGIGBCUEZfTUFQX1RZUEVfUkhBU0hgLiBUaGlzIGlzIHRvIHByZXZlbnQgdW5ib3VuZGVkIGl0ZXJhdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgbWFwIG1vZGlmaWNhdGlvbnMsIGFuZCBpdCBpbmNsdWRlcyBhZGRlZCBzZWxmdGVzdHMgZm9yIHZhbGlkYXRpb24uXG4yLiAgKipLTVNBTiBBcHBsaWNhYmlsaXR5OioqIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggKm9ubHkqIGludHJvZHVjZXMgbG9jYWwgdmFyaWFibGVzIChgdmlzaXRfYnVkZ2V0YCwgYG51bV9lbGVtc2ApLCB0aGF0IGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgYm91bmRzLWNoZWNrZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgY29weSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS5cbjMuICAqKktBU0FOL1N0YW5kYXJkIFRvb2xzIEFwcGxpY2FiaWxpdHk6KiogQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIGNvbmN1cnJlbmN5LCBSQ1Ugb2JqZWN0IGxpZmV0aW1lcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVyaW5nIHJoYXNodGFibGUgdHJhdmVyc2FsIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlndXJhdGlvbnMuXG40LiAgKipDb25jbHVzaW9uOioqIFRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBMZXQncyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTAxLCJPdXRwdXRUb2tlbnMiOjIxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjQ3OjAwLjExMTQ1MTA3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBicGZfZWFjaF9yaGFzaF9lbGVtYCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGJ5IGJvdW5kaW5nIHRoZSBpdGVyYXRpb24gbG9vcCB3aXRoIGEgYHZpc2l0X2J1ZGdldGAgZGVyaXZlZCBmcm9tIGBhdG9taWNfcmVhZChcXHUwMDI2cmh0YWItXFx1MDAzZWh0Lm5lbGVtcylgLCBhbmQgYWRkcyBjb3JyZXNwb25kaW5nIHN0cmVzcyBzZWxmdGVzdHMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBleHBvc2VkLiBMb2NhbCB2YXJpYWJsZXMgYHZpc2l0X2J1ZGdldGAgYW5kIGBudW1fZWxlbXNgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFuZCBtYW5pcHVsYXRlZCBhcyBzY2FsYXIgaW50ZWdlciB0eXBlcy5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzIGFyZSBleHBvc2VkIG9yIGNoZWNrZWQuXFxuMy4gQW55IGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGNvbmNlcm5zIGludm9sdmluZyBSQ1UtcHJvdGVjdGVkIHJoYXNodGFibGUgZWxlbWVudHMgYXJlIGFkZHJlc3NlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTG9ja2RlcCBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgYnBmX2VhY2hfcmhhc2hfZWxlbWAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBieSBib3VuZGluZyB0aGUgaXRlcmF0aW9uIGxvb3Agd2l0aCBhIGB2aXNpdF9idWRnZXRgIGRlcml2ZWQgZnJvbSBgYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpYCwgYW5kIGFkZHMgY29ycmVzcG9uZGluZyBzdHJlc3Mgc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZC4gTG9jYWwgdmFyaWFibGVzIGB2aXNpdF9idWRnZXRgIGFuZCBgbnVtX2VsZW1zYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQgYXMgc2NhbGFyIGludGVnZXIgdHlwZXMuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpZWxkcyBhcmUgZXhwb3NlZCBvciBjaGVja2VkLlxcbjMuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBjb25jZXJucyBpbnZvbHZpbmcgUkNVLXByb3RlY3RlZCByaGFzaHRhYmxlIGVsZW1lbnRzIGFyZSBhZGRyZXNzZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExvY2tkZXAgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7lhn7[1] Phase: Succeeded StartedAt: 2026-08-31 17:47:11 +0000 UTC FinishedAt: 2026-08-31 17:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 17:47:11 +0000 UTC FinishedAt: 2026-08-31 17:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2] Phase: Succeeded StartedAt: 2026-08-31 17:47:11 +0000 UTC FinishedAt: 2026-08-31 21:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 17:47:11 +0000 UTC FinishedAt: 2026-08-31 21:25:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 17:47:11 +0000 UTC FinishedAt: 2026-08-31 17:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 17:47:11 +0000 UTC FinishedAt: 2026-08-31 17:47:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-workflow7lhn7/series-workflow7lhn7-convert-artifact-1135521217/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 17:47:22 +0000 UTC FinishedAt: 2026-08-31 18:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 17:47:22 +0000 UTC FinishedAt: 2026-08-31 18:03:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*81a18061-525d-4902-8b87-1d8a534e44fe,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-workflow7lhn7/series-workflow7lhn7-convert-artifact-1135521217/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": "768ba3a4-7961-452e-8bad-4ac053782b25", "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-workflow7lhn7/series-workflow7lhn7-build-action-4256945135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 17:47:22 +0000 UTC FinishedAt: 2026-08-31 18:03:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*81a18061-525d-4902-8b87-1d8a534e44fe,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-workflow7lhn7/series-workflow7lhn7-convert-artifact-1135521217/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": "768ba3a4-7961-452e-8bad-4ac053782b25", "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-workflow7lhn7/series-workflow7lhn7-build-action-4256945135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:03:19 +0000 UTC FinishedAt: 2026-08-31 18:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:03:19 +0000 UTC FinishedAt: 2026-08-31 18:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:03:19 +0000 UTC FinishedAt: 2026-08-31 18:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:03:19 +0000 UTC FinishedAt: 2026-08-31 18:03:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-workflow7lhn7/series-workflow7lhn7-convert-artifact-3586395284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:03:30 +0000 UTC FinishedAt: 2026-08-31 18:05:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:03:30 +0000 UTC FinishedAt: 2026-08-31 18:05:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*768ba3a4-7961-452e-8bad-4ac053782b25,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-workflow7lhn7/series-workflow7lhn7-build-action-4256945135/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-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:05:35 +0000 UTC FinishedAt: 2026-08-31 18:05:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:05:35 +0000 UTC FinishedAt: 2026-08-31 18:05:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:05:35 +0000 UTC FinishedAt: 2026-08-31 18:21:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:05:35 +0000 UTC FinishedAt: 2026-08-31 18:21:41 +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:*81a18061-525d-4902-8b87-1d8a534e44fe,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-workflow7lhn7/series-workflow7lhn7-convert-artifact-3586395284/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": "1fbca976-005f-4dc5-9850-6f3b371dba4c", "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-workflow7lhn7/series-workflow7lhn7-build-action-1259107680/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:05:35 +0000 UTC FinishedAt: 2026-08-31 18:21:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*81a18061-525d-4902-8b87-1d8a534e44fe,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-workflow7lhn7/series-workflow7lhn7-convert-artifact-3586395284/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": "1fbca976-005f-4dc5-9850-6f3b371dba4c", "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-workflow7lhn7/series-workflow7lhn7-build-action-1259107680/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:21:41 +0000 UTC FinishedAt: 2026-08-31 18:21:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:21:41 +0000 UTC FinishedAt: 2026-08-31 18:21:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:21:41 +0000 UTC FinishedAt: 2026-08-31 18:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:21:41 +0000 UTC FinishedAt: 2026-08-31 18:23:19 +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:*1fbca976-005f-4dc5-9850-6f3b371dba4c,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-workflow7lhn7/series-workflow7lhn7-build-action-1259107680/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-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:23:29 +0000 UTC FinishedAt: 2026-08-31 21:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:23:29 +0000 UTC FinishedAt: 2026-08-31 21:25:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"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:*768ba3a4-7961-452e-8bad-4ac053782b25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1fbca976-005f-4dc5-9850-6f3b371dba4c,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-workflow7lhn7/series-workflow7lhn7-build-action-4256945135/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-workflow7lhn7/series-workflow7lhn7-build-action-1259107680/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:23:29 +0000 UTC FinishedAt: 2026-08-31 18:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:23:29 +0000 UTC FinishedAt: 2026-08-31 18:23:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"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-workflow7lhn7/series-workflow7lhn7-convert-artifact-2137295805/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:23:29 +0000 UTC FinishedAt: 2026-08-31 18:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:23:29 +0000 UTC FinishedAt: 2026-08-31 18:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:23:29 +0000 UTC FinishedAt: 2026-08-31 18:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:23:39 +0000 UTC FinishedAt: 2026-08-31 21:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7lhn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_for_each_map_elem","bpf_each_rhash_elem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c20313e98b04ce543936431b6122dd639d3a8346","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e6e0bbda-33a3-4b3d-8e9e-614fa75d93c6","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-08-31 18:23:39 +0000 UTC FinishedAt: 2026-08-31 21:25:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*768ba3a4-7961-452e-8bad-4ac053782b25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1fbca976-005f-4dc5-9850-6f3b371dba4c,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-workflow7lhn7/series-workflow7lhn7-build-action-4256945135/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-workflow7lhn7/series-workflow7lhn7-build-action-1259107680/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-workflow7lhn7/series-workflow7lhn7-convert-artifact-2137295805/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,}