Name: series-workflowq7nrb Phase: Succeeded StartedAt: 2026-08-31 21:38:46 +0000 UTC FinishedAt: 2026-09-01 00:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[0] Phase: Succeeded StartedAt: 2026-08-31 21:38:46 +0000 UTC FinishedAt: 2026-08-31 22:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 21:38:46 +0000 UTC FinishedAt: 2026-08-31 22:45:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SIGNALFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SIGNALFD" ], "series_id": "15596c67-4468-4f2e-a38f-36f12ad706be" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "signalfd_poll", "signalfd_dequeue", "signalfd_release", "do_signalfd4", "signalfd_cleanup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NJR05BTEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2lnbmFsZmRfcG9sbCYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O3NpZ25hbGZkX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZG9fc2lnbmFsZmQ0JiMzNDssCiAgICAmIzM0O3NpZ25hbGZkX2NsZWFudXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHdhaXRxdWV1ZSAoYHdxaGApLCBzcGlubG9jayAoYGxvY2tgKSwgYW5kIFJDVS1iYXNlZCBmcmVlaW5nIChgcmN1X2hlYWRgKSB0byBgc3RydWN0IHNpZ25hbGZkX2N0eGAgaW4gYGZzL3NpZ25hbGZkLmNgIHNvIHRoYXQgbWFzayB1cGRhdGVzIHZpYSBgc2lnbmFsZmQ0YCBwcm9wZXJseSB3YWtlIHVwIHdhaXRlcnMgYWNyb3NzIHByb2Nlc3Nlcy5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxuMS4gQWxsIGZpZWxkcyBvZiBgc3RydWN0IHNpZ25hbGZkX2N0eGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIChgc3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spYCwgYGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2Y3R4LVx1MDAzZXdxaClgLCBgY3R4LVx1MDAzZXNpZ21hc2sgPSAqbWFza2ApLlxuMi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBzdHJ1Y3R1cmUgKGBzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mb2ApIHJlbWFpbnMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldGAgaW4gYHNpZ25hbGZkX2NvcHlpbmZvKClgLlxuMy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBpbnZvbHZlIHN5bmNocm9uaXphdGlvbiwgd2FpdHF1ZXVlIG9yZGVyaW5nLCBvciBsb2NrIGhpZXJhcmNoaWVzIChiZXR3ZWVuIGBjdHgtXHUwMDNlbG9ja2AgYW5kIGBzaWdoYW5kLVx1MDAzZXNpZ2xvY2tgKSwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhhbmRsaW5nIGluIHNpZ25hbGZkIChmcy9zaWduYWxmZC5jKS4gSW4gcGFydGljdWxhciwgaXQgaW50cm9kdWNlcyBjdHgtbGV2ZWwgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoZWFkLCB1cGRhdGluZyBzaWduYWxmZF9wb2xsLCBzaWduYWxmZF9kZXF1ZXVlLCBzaWduYWxmZF9yZWxlYXNlLCBhbmQgZG9fc2lnbmFsZmQ0IHRvIHN1cHBvcnQgd2FraW5nIHdhaXRlcnMgdXBvbiBzaWduYWxmZCBtYXNrIHVwZGF0ZXMgYWNyb3NzIHRocmVhZHMvcHJvY2Vzc2VzLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYTkwNmUxNjVhMGE3MzdkZmZlZmM0OTAyOTA2MDVmNDcwMzAzZTIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6NDM6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc2lnbmFsZmQuYyBiL2ZzL3NpZ25hbGZkLmNcbmluZGV4IGRmZjUzNzQ1ZTM1MjQuLjUyM2MzYTZkYzU2NTkgMTAwNjQ0XG4tLS0gYS9mcy9zaWduYWxmZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zaWduYWxmZC5jXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbm9uX2lub2Rlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbkBAIC0zOSwxMiAmIzQzOzQwLDE5IEBAIHZvaWQgc2lnbmFsZmRfY2xlYW51cChzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2hhbmQpXG4gfVxuIFxuIHN0cnVjdCBzaWduYWxmZF9jdHgge1xuJiM0MztcdC8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovXG4mIzQzO1x0c3BpbmxvY2tfdCBsb2NrO1xuJiM0MztcdHdhaXRfcXVldWVfaGVhZF90IHdxaDtcbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIFx0c2lnc2V0X3Qgc2lnbWFzaztcbiB9O1xuIFxuIHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4mIzQzO1x0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4mIzQzO1x0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01MywxNCAmIzQzOzYxLDE3IEBAIHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxuIFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRfX3BvbGxfdCBldmVudHMgPSAwO1xuIFxuJiM0MztcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdHgtXHUwMDNld3FoLCB3YWl0KTtcbiBcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCB3YWl0KTtcbiBcbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gXHRpZiAobmV4dF9zaWduYWwoXHUwMDI2Y3VycmVudC1cdTAwM2VwZW5kaW5nLCBcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaykgfHxcbiBcdCAgICBuZXh0X3NpZ25hbChcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VzaGFyZWRfcGVuZGluZyxcbiBcdFx0XHRcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaykpXG4gXHRcdGV2ZW50cyB8PSBFUE9MTElOO1xuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiBldmVudHM7XG4gfVxuQEAgLTE1Nyw4ICYjNDM7MTY4LDEwIEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvXG4gXHRlbnVtIHBpZF90eXBlIHR5cGU7XG4gXHRzc2l6ZV90IHJldDtcbiBcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuJiM0MztcdERFQ0xBUkVfV0FJVFFVRVVFKGN0eF93YWl0LCBjdXJyZW50KTtcbiBcbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gXHRyZXQgPSBkZXF1ZXVlX3NpZ25hbChcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaywgaW5mbywgXHUwMDI2dHlwZSk7XG4gXHRzd2l0Y2ggKHJldCkge1xuIFx0Y2FzZSAwOlxuQEAgLTE2NywxMCAmIzQzOzE4MCwxMiBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGRlZmF1bHQ6XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuJiM0MztcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiBcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgsIFx1MDAyNndhaXQpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuQEAgLTE4MSwxMyAmIzQzOzE5NiwxNyBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0XHRcdHJldCA9IC1FUkVTVEFSVFNZUztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdFx0c2NoZWR1bGUoKTtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gXHR9XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFxuIFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaCwgXHUwMDI2d2FpdCk7XG4mIzQzO1x0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2Y3R4LVx1MDAzZXdxaCwgXHUwMDI2Y3R4X3dhaXQpO1xuIFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0yMzIsNyAmIzQzOzI1MSw5IEBAIHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXG4gXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHNpZ3NldF90IHNpZ21hc2s7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRzaWdtYXNrID0gY3R4LVx1MDAzZXNpZ21hc2s7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdHNpZ25vdHNldChcdTAwMjZzaWdtYXNrKTtcbiBcdHJlbmRlcl9zaWdzZXRfdChtLCBcJiMzNDtzaWdtYXNrOlxcdFwmIzM0OywgXHUwMDI2c2lnbWFzayk7XG4gfVxuQEAgLTI2OCw2ICYjNDM7Mjg5LDggQEAgc3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncylcbiBcdFx0aWYgKCFjdHgpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzQzO1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuIFxuIFx0XHRmZCA9IEZEX0FERChmbGFncyBcdTAwMjYgT19DTE9FWEVDLFxuQEAgLTI4NiwxMSAmIzQzOzMwOSwxMSBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKVxuIFx0XHRjdHggPSBmZF9maWxlKGYpLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdFx0aWYgKGZkX2ZpbGUoZiktXHUwMDNlZl9vcCAhPSBcdTAwMjZzaWduYWxmZF9mb3BzKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0d2FrZV91cChcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoKTtcbiYjNDM7XHRcdHdha2VfdXAoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdWZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcbmluZGV4IDNmMzM5ODY1YTNiNmUuLjVjYWM1MzJkNDlhZTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcbkBAIC0xLDMgJiM0MzsxLDQgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiBtYW5nbGVfdWNfc2lnbWFza1xuIHNhc1xuJiM0MztzaWduYWxmZF9tYXNrX3dha2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcbmluZGV4IGUwYmY3MDU4ZDE5YzkuLjAwZjFlOTZjOTJjNGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZVxuQEAgLTIsNiAmIzQzOzIsNiBAQFxuIENGTEFHUyA9IC1XYWxsXG4gVEVTVF9HRU5fUFJPR1MgPSBtYW5nbGVfdWNfc2lnbWFza1xuIFRFU1RfR0VOX1BST0dTICYjNDM7PSBzYXNcbiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHNpZ25hbGZkX21hc2tfd2FrZVxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG4tXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2U2MDQyNGI5ZWM5ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jXG5AQCAtMCwwICYjNDM7MSwyNjYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc2lnbmFsZmQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnB0ciA9IGJ1ZjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxlbikge1xuJiM0MztcdFx0c3NpemVfdCByZXQgPSB3cml0ZShmZCwgcHRyLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cHRyICYjNDM7PSByZXQ7XG4mIzQzO1x0XHRsZW4gLT0gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9hbGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpwdHIgPSBidWY7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4pIHtcbiYjNDM7XHRcdHNzaXplX3QgcmV0ID0gcmVhZChmZCwgcHRyLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0XHRwdHIgJiM0Mzs9IHJldDtcbiYjNDM7XHRcdGxlbiAtPSByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga2lsbF9hbmRfcmVhcChwaWRfdCBwaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRpZiAocGlkIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuJiM0MztcdHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdhaXRfcmVzdWx0KGludCBmZCwgaW50IHRpbWVvdXRfbXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcbiYjNDM7XHRcdC5mZCA9IGZkLFxuJiM0MztcdFx0LmV2ZW50cyA9IFBPTExJTixcbiYjNDM7XHR9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHBvbGwoXHUwMDI2cGZkLCAxLCB0aW1lb3V0X21zKTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGlsZF9pbl9zaWduYWxmZF9yZWFkKHBpZF90IHBpZCwgaW50IHNmZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFs2NF07XG4mIzQzO1x0Y2hhciBidWZbMjU2XTtcbiYjNDM7XHRsb25nIG5yO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYXJnMDtcbiYjNDM7XHRGSUxFICpmcDtcbiYjNDM7XHRpbnQgaW5fcmVhZCA9IDA7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7L3Byb2MvJWQvc3lzY2FsbFwmIzM0OywgcGlkKTtcbiYjNDM7XHRmcCA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZnApIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc3NjYW5mKGJ1ZiwgXCYjMzQ7JWxkICVseFwmIzM0OywgXHUwMDI2bnIsIFx1MDAyNmFyZzApID09IDIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG5yID09IF9fTlJfcmVhZCBcdTAwMjZcdTAwMjYgYXJnMCA9PSAodW5zaWduZWQgbG9uZylzZmQpXG4mIzQzO1x0XHRpbl9yZWFkID0gMTtcbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGZwKTtcbiYjNDM7XHRyZXR1cm4gaW5fcmVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3YWl0X2Zvcl9jaGlsZF9ibG9jayhwaWRfdCBwaWQsIGludCBzZmQsIGludCB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHdhaXRlZF9tcyA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHdhaXRlZF9tcyBcdTAwM2MgdGltZW91dF9tcykge1xuJiM0MztcdFx0cmV0ID0gY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWQsIHNmZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHR1c2xlZXAoMTAwMDApO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0XHR3YWl0ZWRfbXMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gZmRzaTtcbiYjNDM7XHRzaWdzZXRfdCBibG9ja2VkLCBpbml0aWFsX21hc2ssIHVwZGF0ZWRfbWFzaztcbiYjNDM7XHRpbnQgcmVhZHlfcGlwZVsyXSwgc3RhcnRfcGlwZVsyXSwgcmVzdWx0X3BpcGVbMl07XG4mIzQzO1x0aW50IHNmZCwgc2lnbm8sIHN0YXR1cztcbiYjNDM7XHRwaWRfdCBjaGlsZDtcbiYjNDM7XHRjaGFyIHJlYWR5LCBzdGFydDtcbiYjNDM7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRrc2Z0X3NldF9wbGFuKDEpO1xuJiM0MztcbiYjNDM7XHRzaWdlbXB0eXNldChcdTAwMjZibG9ja2VkKTtcbiYjNDM7XHRzaWdhZGRzZXQoXHUwMDI2YmxvY2tlZCwgU0lHVVNSMSk7XG4mIzQzO1x0c2lnYWRkc2V0KFx1MDAyNmJsb2NrZWQsIFNJR1VTUjIpO1xuJiM0MztcdGlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIFx1MDAyNmJsb2NrZWQsIE5VTEwpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3NpZ3Byb2NtYXNrXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c2lnZW1wdHlzZXQoXHUwMDI2aW5pdGlhbF9tYXNrKTtcbiYjNDM7XHRzaWdhZGRzZXQoXHUwMDI2aW5pdGlhbF9tYXNrLCBTSUdVU1IxKTtcbiYjNDM7XHRzZmQgPSBzaWduYWxmZCgtMSwgXHUwMDI2aW5pdGlhbF9tYXNrLCAwKTtcbiYjNDM7XHRpZiAoc2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3NpZ25hbGZkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBpcGUocmVhZHlfcGlwZSkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cGlwZShyZWFkeSlcJiMzNDspO1xuJiM0MztcdGlmIChwaXBlKHN0YXJ0X3BpcGUpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3BpcGUoc3RhcnQpXCYjMzQ7KTtcbiYjNDM7XHRpZiAocGlwZShyZXN1bHRfcGlwZSkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cGlwZShyZXN1bHQpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Y2hpbGQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKGNoaWxkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O2ZvcmtcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hpbGQgPT0gMCkge1xuJiM0MztcdFx0Y2xvc2UocmVhZHlfcGlwZVswXSk7XG4mIzQzO1x0XHRjbG9zZShzdGFydF9waXBlWzFdKTtcbiYjNDM7XHRcdGNsb3NlKHJlc3VsdF9waXBlWzBdKTtcbiYjNDM7XG4mIzQzO1x0XHRyZWFkeSA9ICYjMzk7UiYjMzk7O1xuJiM0MztcdFx0aWYgKHdyaXRlX2FsbChyZWFkeV9waXBlWzFdLCBcdTAwMjZyZWFkeSwgc2l6ZW9mKHJlYWR5KSkpXG4mIzQzO1x0XHRcdF9leGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJlYWRfYWxsKHN0YXJ0X3BpcGVbMF0sIFx1MDAyNnN0YXJ0LCBzaXplb2Yoc3RhcnQpKSlcbiYjNDM7XHRcdFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoXHUwMDI2ZmRzaSwgMCwgc2l6ZW9mKGZkc2kpKTtcbiYjNDM7XHRcdGlmIChyZWFkX2FsbChzZmQsIFx1MDAyNmZkc2ksIHNpemVvZihmZHNpKSkpXG4mIzQzO1x0XHRcdF9leGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1xuJiM0MztcdFx0c2lnbm8gPSBmZHNpLnNzaV9zaWdubztcbiYjNDM7XHRcdGlmICh3cml0ZV9hbGwocmVzdWx0X3BpcGVbMV0sIFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSlcbiYjNDM7XHRcdFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XG4mIzQzO1x0XHRfZXhpdChFWElUX1NVQ0NFU1MpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xvc2UocmVhZHlfcGlwZVsxXSk7XG4mIzQzO1x0Y2xvc2Uoc3RhcnRfcGlwZVswXSk7XG4mIzQzO1x0Y2xvc2UocmVzdWx0X3BpcGVbMV0pO1xuJiM0MztcbiYjNDM7XHRpZiAocmVhZF9hbGwocmVhZHlfcGlwZVswXSwgXHUwMDI2cmVhZHksIHNpemVvZihyZWFkeSkpKSB7XG4mIzQzO1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtjaGlsZCBkaWQgbm90IHJlYWNoIGJsb2NraW5nIHJlYWRcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGtpbGwoY2hpbGQsIFNJR1VTUjIpKSB7XG4mIzQzO1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDtraWxsKFNJR1VTUjIpXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXJ0ID0gJiMzOTtTJiMzOTs7XG4mIzQzO1x0aWYgKHdyaXRlX2FsbChzdGFydF9waXBlWzFdLCBcdTAwMjZzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpIHtcbiYjNDM7XHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2NvdWxkIG5vdCByZWxlYXNlIGNoaWxkIGludG8gc2lnbmFsZmQgcmVhZFxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSB3YWl0X2Zvcl9jaGlsZF9ibG9jayhjaGlsZCwgc2ZkLCAxMDAwKTtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdGlmIChzdGF0dXMgPT0gLTEpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0Oy9wcm9jL1x1MDAzY3BpZFx1MDAzZS9zeXNjYWxsIGlzIHVuYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtjaGlsZCBkaWQgbm90IGJsb2NrIGluIHNpZ25hbGZkIHJlYWRcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2lnZW1wdHlzZXQoXHUwMDI2dXBkYXRlZF9tYXNrKTtcbiYjNDM7XHRzaWdhZGRzZXQoXHUwMDI2dXBkYXRlZF9tYXNrLCBTSUdVU1IyKTtcbiYjNDM7XHRpZiAoc2lnbmFsZmQoc2ZkLCBcdTAwMjZ1cGRhdGVkX21hc2ssIDApIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDtzaWduYWxmZChyZWNvbmZpZ3VyZSlcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHdhaXRfcmVzdWx0KHJlc3VsdF9waXBlWzBdLCAxMDAwKSA9PSAxKSB7XG4mIzQzO1x0XHRpZiAocmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sIFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSkge1xuJiM0MztcdFx0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2NoaWxkIHdha2V1cCBkaWQgbm90IGNhcnJ5IGEgc2lnbmFsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAod2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSAhPSBjaGlsZCkge1xuJiM0MztcdFx0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3dhaXRwaWRcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdChzaWdubyA9PSBTSUdVU1IyIFx1MDAyNlx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtzaGFyZWQgc2lnbmFsZmQgd2FrZXVwIGFmdGVyIG1hc2sgdXBkYXRlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9wYXNzKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJ1Z2d5IGtlcm5lbHMgbGVhdmUgdGhlIGNoaWxkIGFzbGVlcCB1bnRpbCBhbiB1bnJlbGF0ZWQgc2lnbmFsIGhpdHNcbiYjNDM7XHQgKiB0aGUgY2hpbGQmIzM5O3Mgc2lnbmFsZmQgd2FpdHF1ZXVlLiBTSUdVU1IxIGRvZXMgbm90IG1hdGNoIHRoZSB1cGRhdGVkXG4mIzQzO1x0ICogc2lnbmFsZmQgbWFzaywgc28gYSBzdWNjZXNzZnVsIHJlYWQgb2YgU0lHVVNSMiBhZnRlciB0aGlzIG51ZGdlXG4mIzQzO1x0ICogZGVtb25zdHJhdGVzIHRoZSBtaXNzZWQgd2FrZXVwLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChraWxsKGNoaWxkLCBTSUdVU1IxKSkge1xuJiM0MztcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7a2lsbChTSUdVU1IxKVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFyZWFkX2FsbChyZXN1bHRfcGlwZVswXSwgXHUwMDI2c2lnbm8sIHNpemVvZihzaWdubykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB3YWl0cGlkKGNoaWxkLCBcdTAwMjZzdGF0dXMsIDApID09IGNoaWxkIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzaWdubyA9PSBTSUdVU1IyIFx1MDAyNlx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCYjMzQ7bWFzayB1cGRhdGUgbWlzc2VkIGEgc2hhcmVkIHNpZ25hbGZkIHdhaXRlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtjaGlsZCB3b2tlIG9ubHkgYWZ0ZXIgYW4gdW5yZWxhdGVkIFNJR1VTUjFcXG5cJiMzNDspO1xuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuJiM0MztcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtjaGlsZCByZW1haW5lZCBibG9ja2VkIGFmdGVyIHNpZ25hbGZkIHJlY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSUdOQUxGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NpZ25hbGZkX3BvbGwmIzM0OywKICAgICYjMzQ7c2lnbmFsZmRfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2RvX3NpZ25hbGZkNCYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhhbmRsaW5nIGluIHNpZ25hbGZkIChmcy9zaWduYWxmZC5jKS4gSW4gcGFydGljdWxhciwgaXQgaW50cm9kdWNlcyBjdHgtbGV2ZWwgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoZWFkLCB1cGRhdGluZyBzaWduYWxmZF9wb2xsLCBzaWduYWxmZF9kZXF1ZXVlLCBzaWduYWxmZF9yZWxlYXNlLCBhbmQgZG9fc2lnbmFsZmQ0IHRvIHN1cHBvcnQgd2FraW5nIHdhaXRlcnMgdXBvbiBzaWduYWxmZCBtYXNrIHVwZGF0ZXMgYWNyb3NzIHRocmVhZHMvcHJvY2Vzc2VzLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYTkwNmUxNjVhMGE3MzdkZmZlZmM0OTAyOTA2MDVmNDcwMzAzZTIzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjI6NDM6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zaWduYWxmZC5jIGIvZnMvc2lnbmFsZmQuYwppbmRleCBkZmY1Mzc0NWUzNTI0Li41MjNjM2E2ZGM1NjU5IDEwMDY0NAotLS0gYS9mcy9zaWduYWxmZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NpZ25hbGZkLmMKQEAgLTI3LDYgJiM0MzsyNyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Fub25faW5vZGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2lnbmFsZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjYWxscy5oJmd0OwpAQCAtMzksMTIgJiM0Mzs0MCwxOSBAQCB2b2lkIHNpZ25hbGZkX2NsZWFudXAoc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kKQogfQogCiBzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHsKJiM0MzsJLyogU2VyaWFsaXplcyBzaGFyZWQgbWFzayB1cGRhdGVzIHdpdGggZmlsZS1sb2NhbCB3YWl0ZXIgd2FrZXVwcy4gKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwomIzQzOwl3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7CiYjNDM7CXN0cnVjdCByY3VfaGVhZCByY3U7CiAJc2lnc2V0X3Qgc2lnbWFzazsKIH07CiAKIHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlrZnJlZShmaWxlLSZndDtwcml2YXRlX2RhdGEpOwomIzQzOwlzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CXdha2VfdXBfcG9sbGZyZWUoJmFtcDtjdHgtJmd0O3dxaCk7CiYjNDM7CWtmcmVlX3JjdShjdHgsIHJjdSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUzLDE0ICYjNDM7NjEsMTcgQEAgc3RhdGljIF9fcG9sbF90IHNpZ25hbGZkX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiAJc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCV9fcG9sbF90IGV2ZW50cyA9IDA7CiAKJiM0MzsJcG9sbF93YWl0KGZpbGUsICZhbXA7Y3R4LSZndDt3cWgsIHdhaXQpOwogCXBvbGxfd2FpdChmaWxlLCAmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ25hbGZkX3dxaCwgd2FpdCk7CiAKLQlzcGluX2xvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fbG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKIAlpZiAobmV4dF9zaWduYWwoJmFtcDtjdXJyZW50LSZndDtwZW5kaW5nLCAmYW1wO2N0eC0mZ3Q7c2lnbWFzaykgfHwKIAkgICAgbmV4dF9zaWduYWwoJmFtcDtjdXJyZW50LSZndDtzaWduYWwtJmd0O3NoYXJlZF9wZW5kaW5nLAogCQkJJmFtcDtjdHgtJmd0O3NpZ21hc2spKQogCQlldmVudHMgfD0gRVBPTExJTjsKLQlzcGluX3VubG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAogCXJldHVybiBldmVudHM7CiB9CkBAIC0xNTcsOCAmIzQzOzE2OCwxMCBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mbwogCWVudW0gcGlkX3R5cGUgdHlwZTsKIAlzc2l6ZV90IHJldDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKJiM0MzsJREVDTEFSRV9XQUlUUVVFVUUoY3R4X3dhaXQsIGN1cnJlbnQpOwogCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiAJcmV0ID0gZGVxdWV1ZV9zaWduYWwoJmFtcDtjdHgtJmd0O3NpZ21hc2ssIGluZm8sICZhbXA7dHlwZSk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIDA6CkBAIC0xNjcsMTAgJiM0MzsxODAsMTIgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm8KIAkJcmV0ID0gLUVBR0FJTjsKIAkJZmFsbHRocm91Z2g7CiAJZGVmYXVsdDoKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKJiM0MzsJYWRkX3dhaXRfcXVldWUoJmFtcDtjdHgtJmd0O3dxaCwgJmFtcDtjdHhfd2FpdCk7CiAJYWRkX3dhaXRfcXVldWUoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWduYWxmZF93cWgsICZhbXA7d2FpdCk7CiAJZm9yICg7OykgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtMTgxLDEzICYjNDM7MTk2LDE3IEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvCiAJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCQlzY2hlZHVsZSgpOwotCQlzcGluX2xvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX2xvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAogCXJlbW92ZV93YWl0X3F1ZXVlKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbmFsZmRfd3FoLCAmYW1wO3dhaXQpOwomIzQzOwlyZW1vdmVfd2FpdF9xdWV1ZSgmYW1wO2N0eC0mZ3Q7d3FoLCAmYW1wO2N0eF93YWl0KTsKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjMyLDcgJiM0MzsyNTEsOSBAQCBzdGF0aWMgdm9pZCBzaWduYWxmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKQogCXN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGYtJmd0O3ByaXZhdGVfZGF0YTsKIAlzaWdzZXRfdCBzaWdtYXNrOwogCiYjNDM7CXNwaW5fbG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCXNpZ21hc2sgPSBjdHgtJmd0O3NpZ21hc2s7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAJc2lnbm90c2V0KCZhbXA7c2lnbWFzayk7CiAJcmVuZGVyX3NpZ3NldF90KG0sICYjMzQ7c2lnbWFzazpcdCYjMzQ7LCAmYW1wO3NpZ21hc2spOwogfQpAQCAtMjY4LDYgJiM0MzsyODksOCBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKQogCQlpZiAoIWN0eCkKIAkJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CQlzcGluX2xvY2tfaW5pdCgmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7Y3R4LSZndDt3cWgpOwogCQljdHgtJmd0O3NpZ21hc2sgPSAqbWFzazsKIAogCQlmZCA9IEZEX0FERChmbGFncyAmYW1wOyBPX0NMT0VYRUMsCkBAIC0yODYsMTEgJiM0MzszMDksMTEgQEAgc3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncykKIAkJY3R4ID0gZmRfZmlsZShmKS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCQlpZiAoZmRfZmlsZShmKS0mZ3Q7Zl9vcCAhPSAmYW1wO3NpZ25hbGZkX2ZvcHMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3Bpbl9sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAJCWN0eC0mZ3Q7c2lnbWFzayA9ICptYXNrOwotCQlzcGluX3VubG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAKLQkJd2FrZV91cCgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ25hbGZkX3dxaCk7CiYjNDM7CQl3YWtlX3VwKCZhbXA7Y3R4LSZndDt3cWgpOwogCX0KIAogCXJldHVybiB1ZmQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlCmluZGV4IDNmMzM5ODY1YTNiNmUuLjVjYWM1MzJkNDlhZTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlCkBAIC0xLDMgJiM0MzsxLDQgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogbWFuZ2xlX3VjX3NpZ21hc2sKIHNhcwomIzQzO3NpZ25hbGZkX21hc2tfd2FrZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlCmluZGV4IGUwYmY3MDU4ZDE5YzkuLjAwZjFlOTZjOTJjNGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGUKQEAgLTIsNiAmIzQzOzIsNiBAQAogQ0ZMQUdTID0gLVdhbGwKIFRFU1RfR0VOX1BST0dTID0gbWFuZ2xlX3VjX3NpZ21hc2sKIFRFU1RfR0VOX1BST0dTICYjNDM7PSBzYXMKJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gc2lnbmFsZmRfbWFza193YWtlCiAKIGluY2x1ZGUgLi4vbGliLm1rCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zZTYwNDI0YjllYzllCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jCkBAIC0wLDAgJiM0MzsxLDI2NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3NpZ25hbGZkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnB0ciA9IGJ1ZjsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbikgewomIzQzOwkJc3NpemVfdCByZXQgPSB3cml0ZShmZCwgcHRyLCBsZW4pOwomIzQzOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXB0ciAmIzQzOz0gcmV0OwomIzQzOwkJbGVuIC09IHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZWFkX2FsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgKnB0ciA9IGJ1ZjsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbikgewomIzQzOwkJc3NpemVfdCByZXQgPSByZWFkKGZkLCBwdHIsIGxlbik7CiYjNDM7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCWlmIChlcnJubyA9PSBFSU5UUikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJaWYgKHJldCA9PSAwKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJCXB0ciAmIzQzOz0gcmV0OwomIzQzOwkJbGVuIC09IHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga2lsbF9hbmRfcmVhcChwaWRfdCBwaWQpCiYjNDM7ewomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwlpZiAocGlkICZsdDs9IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWtpbGwocGlkLCBTSUdLSUxMKTsKJiM0MzsJd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3YWl0X3Jlc3VsdChpbnQgZmQsIGludCB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvbGxmZCBwZmQgPSB7CiYjNDM7CQkuZmQgPSBmZCwKJiM0MzsJCS5ldmVudHMgPSBQT0xMSU4sCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXJldCA9IHBvbGwoJmFtcDtwZmQsIDEsIHRpbWVvdXRfbXMpOwomIzQzOwl9IHdoaWxlIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoaWxkX2luX3NpZ25hbGZkX3JlYWQocGlkX3QgcGlkLCBpbnQgc2ZkKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XTsKJiM0MzsJY2hhciBidWZbMjU2XTsKJiM0MzsJbG9uZyBucjsKJiM0MzsJdW5zaWduZWQgbG9uZyBhcmcwOwomIzQzOwlGSUxFICpmcDsKJiM0MzsJaW50IGluX3JlYWQgPSAwOwomIzQzOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7L3Byb2MvJWQvc3lzY2FsbCYjMzQ7LCBwaWQpOwomIzQzOwlmcCA9IGZvcGVuKHBhdGgsICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFmcCkgewomIzQzOwkJaWYgKGVycm5vID09IEVOT0VOVCkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICZhbXA7JmFtcDsKJiM0MzsJICAgIHNzY2FuZihidWYsICYjMzQ7JWxkICVseCYjMzQ7LCAmYW1wO25yLCAmYW1wO2FyZzApID09IDIgJmFtcDsmYW1wOwomIzQzOwkgICAgbnIgPT0gX19OUl9yZWFkICZhbXA7JmFtcDsgYXJnMCA9PSAodW5zaWduZWQgbG9uZylzZmQpCiYjNDM7CQlpbl9yZWFkID0gMTsKJiM0MzsKJiM0MzsJZmNsb3NlKGZwKTsKJiM0MzsJcmV0dXJuIGluX3JlYWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd2FpdF9mb3JfY2hpbGRfYmxvY2socGlkX3QgcGlkLCBpbnQgc2ZkLCBpbnQgdGltZW91dF9tcykKJiM0Mzt7CiYjNDM7CWludCB3YWl0ZWRfbXMgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl3aGlsZSAod2FpdGVkX21zICZsdDsgdGltZW91dF9tcykgewomIzQzOwkJcmV0ID0gY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWQsIHNmZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKHJldCAmZ3Q7IDApIHsKJiM0MzsJCQl1c2xlZXAoMTAwMDApOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwkJd2FpdGVkX21zJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyBmZHNpOwomIzQzOwlzaWdzZXRfdCBibG9ja2VkLCBpbml0aWFsX21hc2ssIHVwZGF0ZWRfbWFzazsKJiM0MzsJaW50IHJlYWR5X3BpcGVbMl0sIHN0YXJ0X3BpcGVbMl0sIHJlc3VsdF9waXBlWzJdOwomIzQzOwlpbnQgc2ZkLCBzaWdubywgc3RhdHVzOwomIzQzOwlwaWRfdCBjaGlsZDsKJiM0MzsJY2hhciByZWFkeSwgc3RhcnQ7CiYjNDM7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CWtzZnRfc2V0X3BsYW4oMSk7CiYjNDM7CiYjNDM7CXNpZ2VtcHR5c2V0KCZhbXA7YmxvY2tlZCk7CiYjNDM7CXNpZ2FkZHNldCgmYW1wO2Jsb2NrZWQsIFNJR1VTUjEpOwomIzQzOwlzaWdhZGRzZXQoJmFtcDtibG9ja2VkLCBTSUdVU1IyKTsKJiM0MzsJaWYgKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJmFtcDtibG9ja2VkLCBOVUxMKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3NpZ3Byb2NtYXNrJiMzNDspOwomIzQzOwomIzQzOwlzaWdlbXB0eXNldCgmYW1wO2luaXRpYWxfbWFzayk7CiYjNDM7CXNpZ2FkZHNldCgmYW1wO2luaXRpYWxfbWFzaywgU0lHVVNSMSk7CiYjNDM7CXNmZCA9IHNpZ25hbGZkKC0xLCAmYW1wO2luaXRpYWxfbWFzaywgMCk7CiYjNDM7CWlmIChzZmQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7c2lnbmFsZmQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChwaXBlKHJlYWR5X3BpcGUpKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7cGlwZShyZWFkeSkmIzM0Oyk7CiYjNDM7CWlmIChwaXBlKHN0YXJ0X3BpcGUpKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7cGlwZShzdGFydCkmIzM0Oyk7CiYjNDM7CWlmIChwaXBlKHJlc3VsdF9waXBlKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3BpcGUocmVzdWx0KSYjMzQ7KTsKJiM0MzsKJiM0MzsJY2hpbGQgPSBmb3JrKCk7CiYjNDM7CWlmIChjaGlsZCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtmb3JrJiMzNDspOwomIzQzOwomIzQzOwlpZiAoY2hpbGQgPT0gMCkgewomIzQzOwkJY2xvc2UocmVhZHlfcGlwZVswXSk7CiYjNDM7CQljbG9zZShzdGFydF9waXBlWzFdKTsKJiM0MzsJCWNsb3NlKHJlc3VsdF9waXBlWzBdKTsKJiM0MzsKJiM0MzsJCXJlYWR5ID0gJiMzOTtSJiMzOTs7CiYjNDM7CQlpZiAod3JpdGVfYWxsKHJlYWR5X3BpcGVbMV0sICZhbXA7cmVhZHksIHNpemVvZihyZWFkeSkpKQomIzQzOwkJCV9leGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CiYjNDM7CQlpZiAocmVhZF9hbGwoc3RhcnRfcGlwZVswXSwgJmFtcDtzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpCiYjNDM7CQkJX2V4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsKJiM0MzsJCW1lbXNldCgmYW1wO2Zkc2ksIDAsIHNpemVvZihmZHNpKSk7CiYjNDM7CQlpZiAocmVhZF9hbGwoc2ZkLCAmYW1wO2Zkc2ksIHNpemVvZihmZHNpKSkpCiYjNDM7CQkJX2V4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsKJiM0MzsJCXNpZ25vID0gZmRzaS5zc2lfc2lnbm87CiYjNDM7CQlpZiAod3JpdGVfYWxsKHJlc3VsdF9waXBlWzFdLCAmYW1wO3NpZ25vLCBzaXplb2Yoc2lnbm8pKSkKJiM0MzsJCQlfZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwomIzQzOwkJX2V4aXQoRVhJVF9TVUNDRVNTKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShyZWFkeV9waXBlWzFdKTsKJiM0MzsJY2xvc2Uoc3RhcnRfcGlwZVswXSk7CiYjNDM7CWNsb3NlKHJlc3VsdF9waXBlWzFdKTsKJiM0MzsKJiM0MzsJaWYgKHJlYWRfYWxsKHJlYWR5X3BpcGVbMF0sICZhbXA7cmVhZHksIHNpemVvZihyZWFkeSkpKSB7CiYjNDM7CQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2NoaWxkIGRpZCBub3QgcmVhY2ggYmxvY2tpbmcgcmVhZFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChraWxsKGNoaWxkLCBTSUdVU1IyKSkgewomIzQzOwkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtraWxsKFNJR1VTUjIpJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXJ0ID0gJiMzOTtTJiMzOTs7CiYjNDM7CWlmICh3cml0ZV9hbGwoc3RhcnRfcGlwZVsxXSwgJmFtcDtzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpIHsKJiM0MzsJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Y291bGQgbm90IHJlbGVhc2UgY2hpbGQgaW50byBzaWduYWxmZCByZWFkXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gd2FpdF9mb3JfY2hpbGRfYmxvY2soY2hpbGQsIHNmZCwgMTAwMCk7CiYjNDM7CWlmIChzdGF0dXMgJmx0OyAwKSB7CiYjNDM7CQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCWlmIChzdGF0dXMgPT0gLTEpCiYjNDM7CQkJa3NmdF9leGl0X3NraXAoJiMzNDsvcHJvYy8mbHQ7cGlkJmd0Oy9zeXNjYWxsIGlzIHVuYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtjaGlsZCBkaWQgbm90IGJsb2NrIGluIHNpZ25hbGZkIHJlYWRcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlzaWdlbXB0eXNldCgmYW1wO3VwZGF0ZWRfbWFzayk7CiYjNDM7CXNpZ2FkZHNldCgmYW1wO3VwZGF0ZWRfbWFzaywgU0lHVVNSMik7CiYjNDM7CWlmIChzaWduYWxmZChzZmQsICZhbXA7dXBkYXRlZF9tYXNrLCAwKSAmbHQ7IDApIHsKJiM0MzsJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7c2lnbmFsZmQocmVjb25maWd1cmUpJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh3YWl0X3Jlc3VsdChyZXN1bHRfcGlwZVswXSwgMTAwMCkgPT0gMSkgewomIzQzOwkJaWYgKHJlYWRfYWxsKHJlc3VsdF9waXBlWzBdLCAmYW1wO3NpZ25vLCBzaXplb2Yoc2lnbm8pKSkgewomIzQzOwkJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2NoaWxkIHdha2V1cCBkaWQgbm90IGNhcnJ5IGEgc2lnbmFsXG4mIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAod2FpdHBpZChjaGlsZCwgJmFtcDtzdGF0dXMsIDApICE9IGNoaWxkKSB7CiYjNDM7CQkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7d2FpdHBpZCYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQoc2lnbm8gPT0gU0lHVVNSMiAmYW1wOyZhbXA7IFdJRkVYSVRFRChzdGF0dXMpICZhbXA7JmFtcDsKJiM0MzsJCQkJIFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCwKJiM0MzsJCQkJICYjMzQ7c2hhcmVkIHNpZ25hbGZkIHdha2V1cCBhZnRlciBtYXNrIHVwZGF0ZVxuJiMzNDspOwomIzQzOwkJa3NmdF9leGl0X3Bhc3MoKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCdWdneSBrZXJuZWxzIGxlYXZlIHRoZSBjaGlsZCBhc2xlZXAgdW50aWwgYW4gdW5yZWxhdGVkIHNpZ25hbCBoaXRzCiYjNDM7CSAqIHRoZSBjaGlsZCYjMzk7cyBzaWduYWxmZCB3YWl0cXVldWUuIFNJR1VTUjEgZG9lcyBub3QgbWF0Y2ggdGhlIHVwZGF0ZWQKJiM0MzsJICogc2lnbmFsZmQgbWFzaywgc28gYSBzdWNjZXNzZnVsIHJlYWQgb2YgU0lHVVNSMiBhZnRlciB0aGlzIG51ZGdlCiYjNDM7CSAqIGRlbW9uc3RyYXRlcyB0aGUgbWlzc2VkIHdha2V1cC4KJiM0MzsJICovCiYjNDM7CWlmIChraWxsKGNoaWxkLCBTSUdVU1IxKSkgewomIzQzOwkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtraWxsKFNJR1VTUjEpJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh3YWl0X3Jlc3VsdChyZXN1bHRfcGlwZVswXSwgMTAwMCkgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sICZhbXA7c2lnbm8sIHNpemVvZihzaWdubykpICZhbXA7JmFtcDsKJiM0MzsJICAgIHdhaXRwaWQoY2hpbGQsICZhbXA7c3RhdHVzLCAwKSA9PSBjaGlsZCAmYW1wOyZhbXA7CiYjNDM7CSAgICBzaWdubyA9PSBTSUdVU1IyICZhbXA7JmFtcDsgV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDApIHsKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHRfZmFpbCgmIzM0O21hc2sgdXBkYXRlIG1pc3NlZCBhIHNoYXJlZCBzaWduYWxmZCB3YWl0ZXJcbiYjMzQ7KTsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2hpbGQgd29rZSBvbmx5IGFmdGVyIGFuIHVucmVsYXRlZCBTSUdVU1IxXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtjaGlsZCByZW1haW5lZCBibG9ja2VkIGFmdGVyIHNpZ25hbGZkIHJlY29uZmlndXJhdGlvblxuJiMzNDspOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBzaWduYWxmZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNpZ25hbGZkYCBwYXRjaC4gVGhlIHByaW1hcnkgZm9jdXMgc2VlbXMgdG8gYmUgYXJvdW5kIGltcHJvdmluZyB0aGUgc2lnbmFsZmQgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGl0IGhhbmRsZXMgd2FpdGluZyBhbmQgcmVsZWFzaW5nIHJlc291cmNlcy4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgaXMgcHJldHR5IGZvY3VzZWQgb24gc3luY2hyb25pemF0aW9uIGFuZCB3YWtlLXVwIG1lY2hhbmlzbXMsIHdoaWNoIGFyZSBhbHdheXMgY3J1Y2lhbCBpbiBzaWduYWwgaGFuZGxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4KCkZpcnN0LCBhZGRpbmcgdGhhdCBgc3BpbmxvY2tfdCBsb2NrYCwgYHdhaXRfcXVldWVfaGVhZF90IHdxaGAsIGFuZCBgc3RydWN0IHJjdV9oZWFkIHJjdWAgdG8gdGhlIGBzaWduYWxmZF9jdHhgIHN0cnVjdCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhlc2UgY2xlYXJseSBwb2ludCB0byBlbmhhbmNlZCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIG1hbmFnZW1lbnQuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG5ldyBtZW1iZXJzIGFyZSB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuCgpUaGUgYHNpZ25hbGZkX3JlbGVhc2VgIGZ1bmN0aW9uIG5vdyB1c2VzIGB3YWtlX3VwX3BvbGxmcmVlYCBvbiB0aGUgYGN0eC0mZ3Q7d3FoYCBhbmQgY2FsbHMgYGtmcmVlX3JjdWAuIFRoaXMgc3VnZ2VzdHMgYSBjYXJlZnVsIGFwcHJvYWNoIHRvIGZyZWVpbmcgdGhlIGNvbnRleHQsIGxpa2VseSByZWxhdGVkIHRvIHNhZmVseSByZW1vdmluZyB0aGUgc2lnbmFsZmQgc3RydWN0dXJlIHdoaWxlIG1ha2luZyBzdXJlIG90aGVyIHByb2Nlc3NlcyBoYXZlIGhhZCBhIGNoYW5jZSB0byB3b3JrIG9uIGFueSByZWxldmFudCBldmVudHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3YWtlX3VwX3BvbGxmcmVlYCBpcyB1c2VkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLgoKVGhlIGBzaWduYWxmZF9wb2xsYCBtb2RpZmljYXRpb24gd2l0aCBgcG9sbF93YWl0YCBhbmQgdGhlIGxvY2tpbmcgY2hhbmdlcyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiBUaGUgYHNpZ25hbGZkX2RlcXVldWVgIGlzIGV2ZW4gbW9yZSBzbywgdXNpbmcgYm90aCBgY3R4LSZndDt3cWhgIGFuZCBgc2lnaGFuZC0mZ3Q7c2lnbmFsZmRfd3FoYCBzZWVtcyBsaWtlIGl0IG11c3QgYmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQuIEl0IGFwcGVhcnMgdGhlIGNoYW5nZXMgYXJlIG1vdmluZyB0byB1c2UgYSBwZXItYHNpZ25hbGZkX2N0eGAgd2FpdCBxdWV1ZSwgd2l0aCBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHdpdGggdGhlIHByb2Nlc3MmIzM5O3Mgc2lnbmFsIGhhbmRsZXIgc3RydWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGxvY2tpbmcgdG8gc2VlIGhvdyB0aGlzIHdvcmtzLgoKVGhlIGBzaWduYWxmZF9zaG93X2ZkaW5mb2AgY2hhbmdlLCBwYXJ0aWN1bGFybHkgdGhlIGxvY2tpbmcgaW4gdGhpcyBmdW5jdGlvbiwgaXMgaW1wb3J0YW50IGZvciBlbnN1cmluZyB0aGUgZGF0YSBkaXNwbGF5ZWQgaXMgY29uc2lzdGVudC4gYGRvX3NpZ25hbGZkNGAgaXMgYSBrZXkgcG9pbnQsIHRoZSBjaGFuZ2VzIHRvIGhvdyB0aGUgbWFzayBpcyB1cGRhdGVkIGFuZCB0aGUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBtZW1iZXJzIGFyZSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIGNhcmVmdWxseSBjb21wYXJlIHRoZSBvcmlnaW5hbCBjb2RlIHdpdGggdGhpcyB2ZXJzaW9uLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCB0aGUgcGF0Y2ggaXMgYWltZWQgdG8gcmVzb2x2ZSBhIGtub3duIHJhY2Ugb3Igc3luY2hyb25pemF0aW9uIGlzc3VlLiBUaGUgY2hhbmdlcyBmcm9tIGBjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWduYWxmZF93cWhgIHRvIGBjdHgtJmd0O3dxaGAgaW4gYGRvX3NpZ25hbGZkNGAgaXMgdGhlIGtleSBjaGFuZ2UuCgpGaW5hbGx5LCB0aGUgaW5jbHVzaW9uIG9mIHRoYXQgc2VsZnRlc3QgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuY2AgaXMgZXhjZWxsZW50LiBUaGlzIGlzIHRoZSBwcm9vZiBpbiB0aGUgcHVkZGluZywgaXQgc2hvdWxkIHZhbGlkYXRlIHRoZSBiZWhhdmlvci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNlbGZ0ZXN0IGFjdHVhbGx5IGNvdmVycyB0aGUgc2NlbmFyaW9zIHRoZSBwYXRjaCBpcyBkZXNpZ25lZCBmb3IuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGF0LCBhbmQgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBvcHRpb25zLCB0byBlbnN1cmUgbm8gaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19TSUdOQUxGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTI2PW9iai15XHRcdFx0XHQmIzQzOz0gYW5vbl9pbm9kZXMub1xuZnMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX1NJR05BTEZEKVx0XHQmIzQzOz0gc2lnbmFsZmQub1xuZnMvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX1RJTUVSRkQpXHRcdCYjNDM7PSB0aW1lcmZkLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTUwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIGFuZCBTSUdOQUxGRCAtIExldCYjMzk7cyBEaWcgSW4qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYFNJR05BTEZEYCBpcyBjb25maWd1cmVkLiBUaGlzIGxpa2VseSBtZWFucyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBidWlsZCBvcHRpb25zIGZvciB0aGUga2VybmVsIGFyZSBkZWZpbmVkLCBhbmQgYFNJR05BTEZEYCBpcyBkZWZpbml0ZWx5IHRoZSBraW5kIG9mIGZ1bmN0aW9uYWxpdHkgdGhhdCB3b3VsZCBiZSBjb250cm9sbGVkIGJ5IGEgS2NvbmZpZyBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUocykuIEl0JiMzOTtzIHByb2JhYmx5IGluIGEgbG9jYXRpb24gcmVsYXRlZCB0byB0aGUgc2lnbmFsIGhhbmRsaW5nIG9yIHN5c3RlbSBjYWxsIGFyZWFzLCBidXQgSSBtaWdodCBoYXZlIHRvIGRvIHNvbWUgc2VhcmNoaW5nIGlmIGl0JiMzOTtzIG5lc3RlZCBkZWVwZXIuIE9uY2UgSSBmaW5kIGl0LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgb3RoZXIgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBTSUdOQUxGRGAgYmVjb21lcyBhdmFpbGFibGU/IFdoYXQmIzM5O3MgdGhlIGRlZmF1bHQgc2V0dGluZywgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2hhbmdpbmcgaXQ/IEkmIzM5O2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZSBmb3IgJiMzNDtTSUdOQUxGRCYjMzQ7IGFuZCBzZWUgd2hlcmUgdGhhdCB0YWtlcyBtZS4gRnJvbSB0aGVyZSBJJiMzOTtsbCBoYXZlIGEgZ29vZCBpZGVhIG9mIHdoaWNoIEtjb25maWcgZmlsZSBJIG5lZWQgdG8gbG9vayBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0lHTkFMRkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTA3PWNvbmZpZyBFUE9MTFxuLS1cbmluaXQvS2NvbmZpZy0xOTEzLVxuaW5pdC9LY29uZmlnOjE5MTQ6Y29uZmlnIFNJR05BTEZEXG5pbml0L0tjb25maWctMTkxNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHNpZ25hbGZkKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIEtjb25maWcgZm9yIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIEkgdGhpbmsgdGhlIHJlbGV2YW50IHBhcnQgaXMgYXJvdW5kIGxpbmUgMTkxNCBpbiBgaW5pdC9LY29uZmlnYC4gTGV0JiMzOTtzIHB1bGwgdGhhdCB1cCBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gSXQmIzM5O3MgbGlrZWx5IGEgY29tcGxleCBjb25kaXRpb25hbCwgbWF5YmUgd2l0aCBzb21lIGRlcGVuZGVuY2llcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBpdC4gR290dGEgcXVpY2tseSBnZXQgYSBncmlwIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhhdCBzZWN0aW9uLiBJJiMzOTttIGhvcGluZyBJIGNhbiBnZXQgdGhpcyBmaWd1cmVkIG91dCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTEwOlx0XHRoZWxwXG4xOTExOlx0XHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxuMTkxMjpcdFx0ICBzdXBwb3J0IGZvciBlcG9sbCBmYW1pbHkgb2Ygc3lzdGVtIGNhbGxzLlxuMTkxMzpcdFxuMTkxNDpcdGNvbmZpZyBTSUdOQUxGRFxuMTkxNTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc2lnbmFsZmQoKSBzeXN0ZW0gY2FsbFwmIzM0OyBpZiBFWFBFUlRcbjE5MTY6XHRcdGRlZmF1bHQgeVxuMTkxNzpcdFx0aGVscFxuMTkxODpcdFx0ICBFbmFibGUgdGhlIHNpZ25hbGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gcmVjZWl2ZSBzaWduYWxzXG4xOTE5Olx0XHQgIG9uIGEgZmlsZSBkZXNjcmlwdG9yLlxuMTkyMDpcdFxuMTkyMTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuMTkyMjpcdFxuMTkyMzpcdGNvbmZpZyBUSU1FUkZEXG4xOTI0Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aW1lcmZkKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4xOTI1Olx0XHRkZWZhdWx0IHlcbjE5MjY6XHRcdGhlbHBcbjE5Mjc6XHRcdCAgRW5hYmxlIHRoZSB0aW1lcmZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gcmVjZWl2ZSB0aW1lclxuMTkyODpcdFx0ICBldmVudHMgb24gYSBmaWxlIGRlc2NyaXB0b3IuXG4xOTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM2NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgZnMvc2lnbmFsZmQuY2AgdG8gVW5kZXJzdGFuZCBpdHMgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIG5lZWQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIGBzaWduYWxmZGAgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9zaWduYWxmZC5jYC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZS4gS25vd2luZyB0aGUgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBgc2lnbmFsZmRgIG1lY2hhbmlzbSBpcyBzdHJ1Y3R1cmVkLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBzaWduYWwgaGFuZGxpbmcsIGFuZCBnZW5lcmFsbHkgd2hhdCB0aGUgcmVsZXZhbnQgY29udHJvbCBwb2ludHMgYXJlLiBUaGlzIHF1aWNrIHJldmlldyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGxlbWVudGF0aW9uIHdlbGwgdG8gbWFrZSByZWxldmFudCBjaGFuZ2VzLCBvciBkZWJ1ZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGBzaWduYWxmZGAuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc2lnbmFsZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogIGZzL3NpZ25hbGZkLmNcbiAgIDQ6XHQgKlxuICAgNTpcdCAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIExpbnVzIFRvcnZhbGRzXG4gICA2Olx0ICpcbiAgIDc6XHQgKiAgTW9uIE1hciA1LCAyMDA3OiBEYXZpZGUgTGliZW56aSBcdTAwM2NkYXZpZGVsQHhtYWlsc2VydmVyLm9yZ1x1MDAzZVxuICAgODpcdCAqICAgICAgQ2hhbmdlZCAtXHUwMDNlcmVhZCgpIHRvIHJldHVybiBhIHNpZ2luZm8gc3RyY3R1cmUgaW5zdGVhZCBvZiBzaWduYWwgbnVtYmVyLlxuICAgOTpcdCAqICAgICAgRml4ZWQgbG9ja2luZyBpbiAtXHUwMDNlcG9sbCgpLlxuICAxMDpcdCAqICAgICAgQWRkZWQgc2lnaGFuZC1kZXRhY2ggbm90aWZpY2F0aW9uLlxuICAxMTpcdCAqICAgICAgQWRkZWQgZmQgcmUtdXNlIGluIHN5c19zaWduYWxmZCgpIHN5c2NhbGwuXG4gIDEyOlx0ICogICAgICBOb3cgdXNpbmcgYW5vbnltb3VzIGlub2RlIHNvdXJjZS5cbiAgMTM6XHQgKiAgICAgIFRoYW5rcyB0byBPbGVnIE5lc3Rlcm92IGZvciB1c2VmdWwgY29kZSByZXZpZXcgYW5kIHN1Z2dlc3Rpb25zLlxuICAxNDpcdCAqICAgICAgTW9yZSBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgZnJvbSBBcm5kIEJlcmdtYW5uLlxuICAxNTpcdCAqICBTYXQgTWF5IDE5LCAyMDA3OiBEYXZpIEUuIE0uIEFybmF1dCBcdTAwM2NkYXZpQGhheGVudC5jb20uYnJcdTAwM2VcbiAgMTY6XHQgKiAgICAgIFJldHJpZXZlIG11bHRpcGxlIHNpZ25hbHMgd2l0aCBvbmUgcmVhZCgpIGNhbGxcbiAgMTc6XHQgKiAgU3VuIEp1bCAxNSwgMjAwNzogRGF2aWRlIExpYmVuemkgXHUwMDNjZGF2aWRlbEB4bWFpbHNlcnZlci5vcmdcdTAwM2VcbiAgMTg6XHQgKiAgICAgIEF0dGFjaCB0byB0aGUgc2lnaGFuZCBvbmx5IGR1cmluZyByZWFkKCkgYW5kIHBvbGwoKS5cbiAgMTk6XHQgKi9cbiAgMjA6XHRcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wb2xsLmhcdTAwM2VcbiAgMjM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gIDI1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAgMjk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAgMzA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gIDMxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYW5vbl9pbm9kZXMuaFx1MDAzZVxuICAzMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbGZkLmhcdTAwM2VcbiAgMzM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxscy5oXHUwMDNlXG4gIDM0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19mcy5oXHUwMDNlXG4gIDM1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAgMzY6XHRcbiAgMzc6XHR2b2lkIHNpZ25hbGZkX2NsZWFudXAoc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kKVxuICAzODpcdHtcbiAgMzk6XHRcdHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2c2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgpO1xuICA0MDpcdH1cbiAgNDE6XHRcbiAgNDI6XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHtcbiAgNDM6XHRcdC8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovXG4gIDQ0Olx0XHRzcGlubG9ja190IGxvY2s7XG4gIDQ1Olx0XHR3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7XG4gIDQ2Olx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuICA0NzpcdFx0c2lnc2V0X3Qgc2lnbWFzaztcbiAgNDg6XHR9O1xuICA0OTpcdFxuICA1MDpcdHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiAgNTE6XHR7XG4gIDUyOlx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAgNTM6XHRcbiAgNTQ6XHRcdHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4gIDU1Olx0XHRrZnJlZV9yY3UoY3R4LCByY3UpO1xuICA1NjpcdFx0cmV0dXJuIDA7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxuICA2MDpcdHtcbiAgNjE6XHRcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuICA2MjpcdFx0X19wb2xsX3QgZXZlbnRzID0gMDtcbiAgNjM6XHRcbiAgNjQ6XHRcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdHgtXHUwMDNld3FoLCB3YWl0KTtcbiAgNjU6XHRcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCB3YWl0KTtcbiAgNjY6XHRcbiAgNjc6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuICA2ODpcdFx0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAgNjk6XHRcdGlmIChuZXh0X3NpZ25hbChcdTAwMjZjdXJyZW50LVx1MDAzZXBlbmRpbmcsIFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrKSB8fFxuICA3MDpcdFx0ICAgIG5leHRfc2lnbmFsKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nLFxuICA3MTpcdFx0XHRcdFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrKSlcbiAgNzI6XHRcdFx0ZXZlbnRzIHw9IEVQT0xMSU47XG4gIDczOlx0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gIDc0Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuICA3NTpcdFxuICA3NjpcdFx0cmV0dXJuIGV2ZW50cztcbiAgNzc6XHR9XG4gIDc4Olx0XG4gIDc5Olx0LypcbiAgODA6XHQgKiBDb3BpZWQgZnJvbSBjb3B5X3NpZ2luZm9fdG9fdXNlcigpIGluIGtlcm5lbC9zaWduYWwuY1xuICA4MTpcdCAqL1xuICA4MjpcdHN0YXRpYyBpbnQgc2lnbmFsZmRfY29weWluZm8oc3RydWN0IGlvdl9pdGVyICp0bywga2VybmVsX3NpZ2luZm9fdCBjb25zdCAqa2luZm8pXG4gIDgzOlx0e1xuICA4NDpcdFx0c3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gbmV3O1xuICA4NTpcdFxuICA4NjpcdFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbykgIT0gMTI4KTtcbiAgODc6XHRcbiAgODg6XHRcdC8qXG4gIDg5Olx0XHQgKiBVbnVzZWQgbWVtYmVycyBzaG91bGQgYmUgemVybyAuLi5cbiAgOTA6XHRcdCAqL1xuICA5MTpcdFx0bWVtc2V0KFx1MDAyNm5ldywgMCwgc2l6ZW9mKG5ldykpO1xuICA5MjpcdFxuICA5MzpcdFx0LypcbiAgOTQ6XHRcdCAqIElmIHlvdSBjaGFuZ2Ugc2lnaW5mb190IHN0cnVjdHVyZSwgcGxlYXNlIGJlIHN1cmVcbiAgOTU6XHRcdCAqIHRoaXMgY29kZSBpcyBmaXhlZCBhY2NvcmRpbmdseS5cbiAgOTY6XHRcdCAqL1xuICA5NzpcdFx0bmV3LnNzaV9zaWdubyA9IGtpbmZvLVx1MDAzZXNpX3NpZ25vO1xuICA5ODpcdFx0bmV3LnNzaV9lcnJubyA9IGtpbmZvLVx1MDAzZXNpX2Vycm5vO1xuICA5OTpcdFx0bmV3LnNzaV9jb2RlICA9IGtpbmZvLVx1MDAzZXNpX2NvZGU7XG4gMTAwOlx0XHRzd2l0Y2ggKHNpZ2luZm9fbGF5b3V0KGtpbmZvLVx1MDAzZXNpX3NpZ25vLCBraW5mby1cdTAwM2VzaV9jb2RlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgZnJvbSBgZnMvc2lnbmFsZmQuY2AsIHN1bW1hcml6ZWQgZnJvbSB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhcyBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIFNpZ25hbCBGaWxlIERlc2NyaXB0b3IgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gbGluZXMgMjAwIHRocm91Z2ggMzMwIG9mIGBmcy9zaWduYWxmZC5jYC4gVGhpcyBzZWN0aW9uIGxpa2VseSBob2xkcyB0aGUgY3J1eCBvZiBob3cgdGhlIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3IgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpbmNvbWluZyBzaWduYWxzIGFyZSBoYW5kbGVkIGFuZCBkZWxpdmVyZWQgd2hlbiByZWFkIGZyb20gdGhlIGZpbGUuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIGxvZ2ljIGZvciBzaWduYWwgcXVldWluZywgcGVyaGFwcyBzb21lIG1lY2hhbmlzbXMgZm9yIGZpbHRlcmluZyB3aGljaCBzaWduYWxzIGFyZSByZWxldmFudCwgYW5kIGRlZmluaXRlbHkgdGhlIHJlYWQoKSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB1c2luZyBhIHN0YW5kYXJkIHdhaXQgcXVldWUgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQgZm9yIHNpZ25hbCBkZWxpdmVyeSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciB0aGUgbG9ja2luZyBzdHJhdGVneSBlbXBsb3llZCBoZXJlOyBpdCYjMzk7cyBjcml0aWNhbCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eSBhbmQgdGhhdCBzaWduYWxzIGFyZW4mIzM5O3QgbG9zdCBvciBtaXNkaXJlY3RlZC4gVGhpcyBwYXJ0IGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhlIGZpbmVyIHBvaW50cywgYW5kIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBkb25lIGl0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc2lnbmFsZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDIwMTpcdFx0XHRzY2hlZHVsZSgpO1xuIDIwMjpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAyMDM6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAyMDQ6XHRcdH1cbiAyMDU6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAyMDY6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMjA3Olx0XG4gMjA4Olx0XHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbiAyMDk6XHRcdHJlbW92ZV93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiAyMTA6XHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiAyMTE6XHRcbiAyMTI6XHRcdHJldHVybiByZXQ7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdC8qXG4gMjE2Olx0ICogUmV0dXJucyBhIG11bHRpcGxlIG9mIHRoZSBzaXplIG9mIGEgXCYjMzQ7c3RydWN0IHNpZ25hbGZkX3NpZ2luZm9cJiMzNDssIG9yIGEgbmVnYXRpdmVcbiAyMTc6XHQgKiBlcnJvciBjb2RlLiBUaGUgXCYjMzQ7Y291bnRcJiMzNDsgcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgYVxuIDIxODpcdCAqIFwmIzM0O3N0cnVjdCBzaWduYWxmZF9zaWdpbmZvXCYjMzQ7LlxuIDIxOTpcdCAqL1xuIDIyMDpcdHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4gMjIxOlx0e1xuIDIyMjpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4gMjIzOlx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyMjQ6XHRcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KHRvKTtcbiAyMjU6XHRcdHNzaXplX3QgcmV0LCB0b3RhbCA9IDA7XG4gMjI2Olx0XHRrZXJuZWxfc2lnaW5mb190IGluZm87XG4gMjI3Olx0XHRib29sIG5vbmJsb2NrO1xuIDIyODpcdFxuIDIyOTpcdFx0Y291bnQgLz0gc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKTtcbiAyMzA6XHRcdGlmICghY291bnQpXG4gMjMxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzMjpcdFxuIDIzMzpcdFx0bm9uYmxvY2sgPSBmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0sgfHwgaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQ7XG4gMjM0Olx0XHRkbyB7XG4gMjM1Olx0XHRcdHJldCA9IHNpZ25hbGZkX2RlcXVldWUoY3R4LCBcdTAwMjZpbmZvLCBub25ibG9jayk7XG4gMjM2Olx0XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjPSAwKSlcbiAyMzc6XHRcdFx0XHRicmVhaztcbiAyMzg6XHRcdFx0cmV0ID0gc2lnbmFsZmRfY29weWluZm8odG8sIFx1MDAyNmluZm8pO1xuIDIzOTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDI0MDpcdFx0XHRcdGJyZWFrO1xuIDI0MTpcdFx0XHR0b3RhbCAmIzQzOz0gcmV0O1xuIDI0MjpcdFx0XHRub25ibG9jayA9IDE7XG4gMjQzOlx0XHR9IHdoaWxlICgtLWNvdW50KTtcbiAyNDQ6XHRcbiAyNDU6XHRcdHJldHVybiB0b3RhbCA/IHRvdGFsOiByZXQ7XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIDI0OTpcdHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXG4gMjUwOlx0e1xuIDI1MTpcdFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZi1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMjUyOlx0XHRzaWdzZXRfdCBzaWdtYXNrO1xuIDI1MzpcdFxuIDI1NDpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMjU1Olx0XHRzaWdtYXNrID0gY3R4LVx1MDAzZXNpZ21hc2s7XG4gMjU2Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDI1NzpcdFx0c2lnbm90c2V0KFx1MDAyNnNpZ21hc2spO1xuIDI1ODpcdFx0cmVuZGVyX3NpZ3NldF90KG0sIFwmIzM0O3NpZ21hc2s6XFx0XCYjMzQ7LCBcdTAwMjZzaWdtYXNrKTtcbiAyNTk6XHR9XG4gMjYwOlx0I2VuZGlmXG4gMjYxOlx0XG4gMjYyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2lnbmFsZmRfZm9wcyA9IHtcbiAyNjM6XHQjaWZkZWYgQ09ORklHX1BST0NfRlNcbiAyNjQ6XHRcdC5zaG93X2ZkaW5mb1x0PSBzaWduYWxmZF9zaG93X2ZkaW5mbyxcbiAyNjU6XHQjZW5kaWZcbiAyNjY6XHRcdC5yZWxlYXNlXHQ9IHNpZ25hbGZkX3JlbGVhc2UsXG4gMjY3Olx0XHQucG9sbFx0XHQ9IHNpZ25hbGZkX3BvbGwsXG4gMjY4Olx0XHQucmVhZF9pdGVyXHQ9IHNpZ25hbGZkX3JlYWRfaXRlcixcbiAyNjk6XHRcdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiAyNzA6XHR9O1xuIDI3MTpcdFxuIDI3MjpcdHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXG4gMjczOlx0e1xuIDI3NDpcdFx0LyogQ2hlY2sgdGhlIFNGRF8qIGNvbnN0YW50cyBmb3IgY29uc2lzdGVuY3kuICAqL1xuIDI3NTpcdFx0QlVJTERfQlVHX09OKFNGRF9DTE9FWEVDICE9IE9fQ0xPRVhFQyk7XG4gMjc2Olx0XHRCVUlMRF9CVUdfT04oU0ZEX05PTkJMT0NLICE9IE9fTk9OQkxPQ0spO1xuIDI3NzpcdFxuIDI3ODpcdFx0aWYgKGZsYWdzIFx1MDAyNiB+KFNGRF9DTE9FWEVDIHwgU0ZEX05PTkJMT0NLKSlcbiAyNzk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjgwOlx0XG4gMjgxOlx0XHRzaWdkZWxzZXRtYXNrKG1hc2ssIHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKTtcbiAyODI6XHRcdHNpZ25vdHNldChtYXNrKTtcbiAyODM6XHRcbiAyODQ6XHRcdGlmICh1ZmQgPT0gLTEpIHtcbiAyODU6XHRcdFx0aW50IGZkO1xuIDI4NjpcdFx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gMjg3Olx0XG4gMjg4Olx0XHRcdGN0eCA9IGttYWxsb2Nfb2JqKCpjdHgpO1xuIDI4OTpcdFx0XHRpZiAoIWN0eClcbiAyOTA6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyOTE6XHRcbiAyOTI6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDI5MzpcdFx0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIDI5NDpcdFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuIDI5NTpcdFxuIDI5NjpcdFx0XHRmZCA9IEZEX0FERChmbGFncyBcdTAwMjYgT19DTE9FWEVDLFxuIDI5NzpcdFx0XHRcdCAgICBhbm9uX2lub2RlX2dldGZpbGVfZm1vZGUoXG4gMjk4Olx0XHRcdFx0XHQgICAgXCYjMzQ7W3NpZ25hbGZkXVwmIzM0OywgXHUwMDI2c2lnbmFsZmRfZm9wcywgY3R4LFxuIDI5OTpcdFx0XHRcdFx0ICAgIE9fUkRXUiB8IChmbGFncyBcdTAwMjYgT19OT05CTE9DSyksIEZNT0RFX05PV0FJVCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gc2lnbmFsZmQuYyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBjaGVjayBvdXQgdGhvc2Ugc3lzY2FsbCBlbnRyeSBwb2ludHMgd2l0aGluIGBzaWduYWxmZC5jYC4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucyBoZXJlLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIGtlcm5lbCBpcyBhY3R1YWxseSByZWNlaXZpbmcgYW5kIHByb2Nlc3NpbmcgdGhlc2Ugc2lnbmFsIGZpbGUgZGVzY3JpcHRvciBvcGVyYXRpb25zLiBHb3R0YSBtYXAgdGhlIHVzZXItc3BhY2UgY2FsbHMgdG8gdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgbWVhbnMgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbnMsIHRoZSBhcmd1bWVudHMsIHRoZSBjaGVja3MsIGFsbCBvZiBpdC4gSSB3YW50IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgc2lnbmFsZmRgIGlzIHBsdW1iZWQgaW50byB0aGUgY29yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zaWduYWxmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0aWYgKGZkIFx1MDAzZT0gMClcbiAzMDE6XHRcdFx0XHRyZXRhaW5fYW5kX251bGxfcHRyKGN0eCk7XG4gMzAyOlx0XHRcdHJldHVybiBmZDtcbiAzMDM6XHRcdH0gZWxzZSB7XG4gMzA0Olx0XHRcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eDtcbiAzMDU6XHRcbiAzMDY6XHRcdFx0Q0xBU1MoZmQsIGYpKHVmZCk7XG4gMzA3Olx0XHRcdGlmIChmZF9lbXB0eShmKSlcbiAzMDg6XHRcdFx0XHRyZXR1cm4gLUVCQURGO1xuIDMwOTpcdFx0XHRjdHggPSBmZF9maWxlKGYpLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAzMTA6XHRcdFx0aWYgKGZkX2ZpbGUoZiktXHUwMDNlZl9vcCAhPSBcdTAwMjZzaWduYWxmZF9mb3BzKVxuIDMxMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMxMjpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAzMTM6XHRcdFx0Y3R4LVx1MDAzZXNpZ21hc2sgPSAqbWFzaztcbiAzMTQ6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAzMTU6XHRcbiAzMTY6XHRcdFx0d2FrZV91cChcdTAwMjZjdHgtXHUwMDNld3FoKTtcbiAzMTc6XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdHJldHVybiB1ZmQ7XG4gMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdFNZU0NBTExfREVGSU5FNChzaWduYWxmZDQsIGludCwgdWZkLCBzaWdzZXRfdCBfX3VzZXIgKiwgdXNlcl9tYXNrLFxuIDMyMzpcdFx0XHRzaXplX3QsIHNpemVtYXNrLCBpbnQsIGZsYWdzKVxuIDMyNDpcdHtcbiAzMjU6XHRcdHNpZ3NldF90IG1hc2s7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc2l6ZW1hc2sgIT0gc2l6ZW9mKHNpZ3NldF90KSlcbiAzMjg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzI5Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2bWFzaywgdXNlcl9tYXNrLCBzaXplb2YobWFzaykpKVxuIDMzMDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzMzE6XHRcdHJldHVybiBkb19zaWduYWxmZDQodWZkLCBcdTAwMjZtYXNrLCBmbGFncyk7XG4gMzMyOlx0fVxuIDMzMzpcdFxuIDMzNDpcdFNZU0NBTExfREVGSU5FMyhzaWduYWxmZCwgaW50LCB1ZmQsIHNpZ3NldF90IF9fdXNlciAqLCB1c2VyX21hc2ssXG4gMzM1Olx0XHRcdHNpemVfdCwgc2l6ZW1hc2spXG4gMzM2Olx0e1xuIDMzNzpcdFx0c2lnc2V0X3QgbWFzaztcbiAzMzg6XHRcbiAzMzk6XHRcdGlmIChzaXplbWFzayAhPSBzaXplb2Yoc2lnc2V0X3QpKVxuIDM0MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNDE6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtYXNrLCB1c2VyX21hc2ssIHNpemVvZihtYXNrKSkpXG4gMzQyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDM0MzpcdFx0cmV0dXJuIGRvX3NpZ25hbGZkNCh1ZmQsIFx1MDAyNm1hc2ssIDApO1xuIDM0NDpcdH1cbiAzNDU6XHRcbiAzNDY6XHQjaWZkZWYgQ09ORklHX0NPTVBBVFxuIDM0NzpcdHN0YXRpYyBsb25nIGRvX2NvbXBhdF9zaWduYWxmZDQoaW50IHVmZCxcbiAzNDg6XHRcdFx0XHRjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICp1c2VyX21hc2ssXG4gMzQ5Olx0XHRcdFx0Y29tcGF0X3NpemVfdCBzaWdzZXRzaXplLCBpbnQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNpZ25hbGZkLmMgQ2hhbmdlcyBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYGZzL3NpZ25hbGZkLmNgLiBUaGlzIGlzIGNydWNpYWwga2VybmVsIGNvZGUsIGRlYWxpbmcgZGlyZWN0bHkgd2l0aCBzaWduYWwgaGFuZGxpbmcgYW5kIHRoZSBgc2lnbmFsZmRgIG1lY2hhbmlzbS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBob3cgdGhlIHdhaXQgcXVldWUgYW5kIGxvY2tpbmcgYXJlIGhhbmRsZWQgd2hlbiBhIGBzaWduYWxmZGAgaXMgcmVjb25maWd1cmVkIChzcGVjaWZpY2FsbHksIHdoZW4gdGhlIG1hc2sgaXMgdXBkYXRlZCkgYWNyb3NzIHByb2Nlc3NlcyBvciB0aHJlYWRzLiBJdCBsb29rcyBsaWtlIHRoZSB1cGRhdGUgbm93IHdha2VzIHVwIHdhaXRlcnMgd2FpdGluZyBvbiBgY3R4LSZndDt3cWhgLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUgaXMgYHdha2VfdXBfcG9sbGZyZWUoJmFtcDtjdHgtJmd0O3dxaClgIGluIGBzaWduYWxmZF9yZWxlYXNlYCBhbmQgYGtmcmVlX3JjdShjdHgsIHJjdSlgLgoKVGhlc2UgY2hhbmdlcyBzZWVtIHRvIGFmZmVjdCBsb2NraW5nIHdpdGhpbiBgc2lnbmFsZmRfcG9sbGAsIGBzaWduYWxmZF9kZXF1ZXVlYCwgYHNpZ25hbGZkX3Nob3dfZmRpbmZvYCwgYW5kIGBkb19zaWduYWxmZDRgLiBUaGF04oCZcyBhIHNpZ25pZmljYW50IHNoaWZ0ISBUaGlzIGhhcyBjbGVhciBmdW5jdGlvbmFsIGltcGFjdCwgZGlyZWN0bHkgcmVhY2hhYmxlIHRocm91Z2ggdXNlcnNwYWNlIHN5c2NhbGxzIGxpa2UgYHNpZ25hbGZkNGAsIGByZWFkYCwgYHBvbGxgL2BlcG9sbGAsIHdoaWNoIGFyZSB1c2VkIGluIFFFTVUgYW5kIHN0YW5kYXJkIExpbnV4IHN5c3RlbXMsIHNvIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgoKU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGNvcmUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgYHNpZ25hbGZkYCBzdWJzeXN0ZW0gYXJlIGJlaW5nIG1vZGlmaWVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBBY2NvcmRpbmcgdG8gdGhlIGd1aWRhbmNlLCBJIHNob3VsZCBiZSBsb29raW5nIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gU3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSBsZXNzIHVzZWZ1bCBoZXJlLgoKSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEkmIzM5O3ZlIGdvdCB0byBjaGVjayBgZnMvc2lnbmFsZmQuY2AgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgaXQgbG9va3MgbGlrZToKKiAgIGBzaWduYWxmZF9jbGVhbnVwYAoqICAgYGtzeXNfc2lnbmFsZmQ0YCB3aGljaCBpcyBwcm9iYWJseSBhbHNvIGBfX2RvX3N5c19zaWduYWxmZDRgIC8gYF9fZG9fc3lzX3NpZ25hbGZkYCAvIGBfX2RvX2NvbXBhdF9zeXNfc2lnbmFsZmQ0YCAvIGBfX2RvX2NvbXBhdF9zeXNfc2lnbmFsZmRgICh2aWEgU1lTQ0FMTF9ERUZJTkUpCiogICBBbmQgYWxzbyBgZG9fc2lnbmFsZmQ0YCwgYHNpZ25hbGZkX3BvbGxgLCBgc2lnbmFsZmRfZGVxdWV1ZWAsIGBzaWduYWxmZF9yZWFkX2l0ZXJgLCBhbmQgYHNpZ25hbGZkX3JlbGVhc2VgCgpIYW5nIG9uLCBkaWQgSSBtaXNzIGFueXRoaW5nIGluIHRoZSBwcm9tcHQgYWJvdXQgZm9jdXNpbmc/IFJpZ2h0LCAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LiBIbW0sIGxvb2tpbmcgYXQgdGhvc2UgZnVuY3Rpb25zIGFnYWluLCBpdCBzZWVtcyB0aGUgbGFzdCBncm91cCwgd2hpbGUgdGhleSBhcmUgdGhlcmUsIGlzIHN0YXRpYywgYW5kIHRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4KCk5vdywgbGV0IG1lIGNoZWNrIGhvdyBgU1lTQ0FMTF9ERUZJTkVgIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2ggdG8gc2VlIHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZXhpc3QgcmVsYXRlZCB0byBgc2lnbmFsZmRgIGFjcm9zcyBrZXJuZWwgaGVhZGVycyBhbmQgc291cmNlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NpZ25hbGZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zaWduYWxmZC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yLS8qXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MzogKiAgaW5jbHVkZS9saW51eC9zaWduYWxmZC5oXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtNC0gKlxuLS1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xMC1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoxMTojaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3NpZ25hbGZkLmhcdTAwM2VcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuLS1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xNi0vKlxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjE3OiAqIERlbGl2ZXIgdGhlIHNpZ25hbCB0byBsaXN0ZW5pbmcgc2lnbmFsZmQuXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMTgtICovXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MTk6c3RhdGljIGlubGluZSB2b2lkIHNpZ25hbGZkX25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZylcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yMC17XG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MjE6XHRpZiAodW5saWtlbHkod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZ0c2stXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgpKSlcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyMjpcdFx0d2FrZV91cChcdTAwMjZ0c2stXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgpO1xuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTIzLX1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yNC1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyNTpleHRlcm4gdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCk7XG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMjYtXG4tLVxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTI4LVxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjI5OnN0YXRpYyBpbmxpbmUgdm9pZCBzaWduYWxmZF9ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBzaWcpIHsgfVxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTMwLVxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCkgeyB9XG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyBgZnMvc2lnbmFsZmQuY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBTaWduYWxmZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgZnMvc2lnbmFsZmQuY2Agbm93LiBJJiMzOTt2ZSBnb3QgYSBnb29kIGdyYXNwIG9mIHRoZSBiYXNpYyBjb25jZXB0IG9mIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3JzLCBidXQgSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIGdldHRpbmcgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBhcmNoaXRlY3R1cmUgZ2F2ZSBtZSBzb21lIGhpZ2gtbGV2ZWwgaWRlYXMsIGJ1dCBub3cgSSB3YW50IHRvIGdldCBncmFudWxhci4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gaGFuZGxlcyB0aGUgY29yZSBkZXRhaWxzLCBzbyBJ4oCZbSBnb2luZyB0byBmb2N1cyBvbjogdGhlIGFjdHVhbCBtZWNoYW5pY3Mgb2YgdGhlIGBzaWduYWxmZGAgc3lzdGVtIGNhbGw7IGhvdyBzaWduYWxzIGFyZSBtYXNrZWQsIGRlbGl2ZXJlZCwgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgZmlsZSBkZXNjcmlwdG9yOyB3aGF0IHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgYXJlIChjcnVjaWFsIGZvciBjb25jdXJyZW5jeSwgb2J2aW91c2x5KTsgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBzaWduYWwgcXVldWUgYW5kIHRoZSBwcm9jZXNzJiMzOTtzIHNpZ25hbCBtYXNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGxlbWVudGF0aW9uIHdlbGwgc28gSSBjYW4gYXNzZXNzIGl0cyBlZmZpY2llbmN5IGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBleHBlY3RlZCBsZXZlbCBvZiBzZWN1cml0eSBhbmQgcmVsaWFiaWxpdHkuIEkgd2FudCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyBvZiBjb25jZXJuLiBTbywgbGV04oCZcyBqdW1wIHJpZ2h0IGluIGFuZCBjaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zaWduYWxmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDU6XHRcbiAzNDY6XHQjaWZkZWYgQ09ORklHX0NPTVBBVFxuIDM0NzpcdHN0YXRpYyBsb25nIGRvX2NvbXBhdF9zaWduYWxmZDQoaW50IHVmZCxcbiAzNDg6XHRcdFx0XHRjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICp1c2VyX21hc2ssXG4gMzQ5Olx0XHRcdFx0Y29tcGF0X3NpemVfdCBzaWdzZXRzaXplLCBpbnQgZmxhZ3MpXG4gMzUwOlx0e1xuIDM1MTpcdFx0c2lnc2V0X3QgbWFzaztcbiAzNTI6XHRcbiAzNTM6XHRcdGlmIChzaWdzZXRzaXplICE9IHNpemVvZihjb21wYXRfc2lnc2V0X3QpKVxuIDM1NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNTU6XHRcdGlmIChnZXRfY29tcGF0X3NpZ3NldChcdTAwMjZtYXNrLCB1c2VyX21hc2spKVxuIDM1NjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzNTc6XHRcdHJldHVybiBkb19zaWduYWxmZDQodWZkLCBcdTAwMjZtYXNrLCBmbGFncyk7XG4gMzU4Olx0fVxuIDM1OTpcdFxuIDM2MDpcdENPTVBBVF9TWVNDQUxMX0RFRklORTQoc2lnbmFsZmQ0LCBpbnQsIHVmZCxcbiAzNjE6XHRcdFx0ICAgICBjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICosIHVzZXJfbWFzayxcbiAzNjI6XHRcdFx0ICAgICBjb21wYXRfc2l6ZV90LCBzaWdzZXRzaXplLFxuIDM2MzpcdFx0XHQgICAgIGludCwgZmxhZ3MpXG4gMzY0Olx0e1xuIDM2NTpcdFx0cmV0dXJuIGRvX2NvbXBhdF9zaWduYWxmZDQodWZkLCB1c2VyX21hc2ssIHNpZ3NldHNpemUsIGZsYWdzKTtcbiAzNjY6XHR9XG4gMzY3Olx0XG4gMzY4Olx0Q09NUEFUX1NZU0NBTExfREVGSU5FMyhzaWduYWxmZCwgaW50LCB1ZmQsXG4gMzY5Olx0XHRcdCAgICAgY29uc3QgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqLCB1c2VyX21hc2ssXG4gMzcwOlx0XHRcdCAgICAgY29tcGF0X3NpemVfdCwgc2lnc2V0c2l6ZSlcbiAzNzE6XHR7XG4gMzcyOlx0XHRyZXR1cm4gZG9fY29tcGF0X3NpZ25hbGZkNCh1ZmQsIHVzZXJfbWFzaywgc2lnc2V0c2l6ZSwgMCk7XG4gMzczOlx0fVxuIDM3NDpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMxNQoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiA0ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU2lnbmFsZmQgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGBzaWduYWxmZGAgc3lzdGVtIGNhbGwuIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgY29yZSBmdW5jdGlvbnMgYW5kIHN5bWJvbHMgaW52b2x2ZWQuIEkmIzM5O20gc2VlaW5nIHRoYXQgYFNZU0NBTExfREVGSU5FNChzaWduYWxmZDQsIC4uLilgIGdlbmVyYXRlcyBzZXZlcmFsIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYF9fZG9fc3lzX3NpZ25hbGZkNGAgYW5kIGBrc3lzX3NpZ25hbGZkNGAuIEkmIzM5O20gYWxzbyBvYnNlcnZpbmcga2V5IHN1cHBvcnRpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgYHNpZ25hbGZkX2NsZWFudXBgLCBgc2lnbmFsZmRfcG9sbGAsIGBzaWduYWxmZF9kZXF1ZXVlYCwgYHNpZ25hbGZkX3JlYWRfaXRlcmAsIGBzaWduYWxmZF9yZWxlYXNlYCwgYW5kIGBkb19zaWduYWxmZDRgLiBUaGVzZSBhcmUgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZC4KCk5vdywgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3QuIExvb2tpbmcgYXQgYGZzL01ha2VmaWxlYCwgSSBzZWUgYG9iai0kKENPTkZJR19TSUdOQUxGRCkgJiM0Mzs9IHNpZ25hbGZkLm9gLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBUaGVuIGluIGBpbml0L0tjb25maWdgLCBJIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBjb25maWcgU0lHTkFMRkRgLCBhIGJvb2xlYW4gb3B0aW9uLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCAoYGRlZmF1bHQgeWApLCB3aGljaCBpcyBoZWxwZnVsLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jeSBpc3N1ZXMgb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjb21wbGljYXRlIHRoaW5ncy4gSSYjMzk7dmUgY2hlY2tlZCBgaW5pdC9LY29uZmlnYCBhbmQgZm91bmQgbm8gZGVwZW5kZW5jaWVzIGZvciBgU0lHTkFMRkRgLiBUbyBiZSB0aG9yb3VnaCwgSSBxdWlja2x5IGNoZWNrZWQgYGZzL3NpZ25hbGZkLmNgIGFuZCBmb3VuZCBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCBhbmQgYCNpZmRlZiBDT05GSUdfQ09NUEFUYCwgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gcHJvY2ZzIGFuZCBjb21wYXRpYmlsaXR5IHN1cHBvcnQsIGJ1dCB0aGVzZSBkb24mIzM5O3Qgc2VlbSBsaWtlIHByaW1hcnkgYmxvY2tpbmcgY29uZmlndXJhdGlvbnMuIFRoZXkgbWlnaHQgY29tZSB1cCBpbiBhIGxhdGVyIGZ1enppbmcgcGhhc2UsIGJ1dCB0aGV5IHNob3VsZG4mIzM5O3QgaW1tZWRpYXRlbHkgcHJldmVudCB0aGUgdXNlIG9mIGBzaWduYWxmZGAuCgpTbywgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtIGlzIGBTSUdOQUxGRGAsIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gR2l2ZW4gdGhlIHByb3ZpZGVkICYjMzQ7aW5zdHJ1Y3Rpb25zJiMzNDssIEkgY2FuIHZlcmlmeSB0aGF0OiB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCBgRW5hYmxlQ29uZmlnc2AgaXMgc2V0IHRvIGBbJiMzNDtTSUdOQUxGRCYjMzQ7XWAsIGBGb2N1c1N5bWJvbHNgIGluY2x1ZGVzIHRoZSBleHBlY3RlZCBzeW1ib2xzLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSUdOQUxGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NpZ25hbGZkX3BvbGwmIzM0OywKICAgICYjMzQ7c2lnbmFsZmRfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2RvX3NpZ25hbGZkNCYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhhbmRsaW5nIGluIHNpZ25hbGZkIChmcy9zaWduYWxmZC5jKS4gSW4gcGFydGljdWxhciwgaXQgaW50cm9kdWNlcyBjdHgtbGV2ZWwgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoZWFkLCB1cGRhdGluZyBzaWduYWxmZF9wb2xsLCBzaWduYWxmZF9kZXF1ZXVlLCBzaWduYWxmZF9yZWxlYXNlLCBhbmQgZG9fc2lnbmFsZmQ0IHRvIHN1cHBvcnQgd2FraW5nIHdhaXRlcnMgdXBvbiBzaWduYWxmZCBtYXNrIHVwZGF0ZXMgYWNyb3NzIHRocmVhZHMvcHJvY2Vzc2VzLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NJR05BTEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2lnbmFsZmRfcG9sbCYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O3NpZ25hbGZkX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZG9fc2lnbmFsZmQ0JiMzNDssCiAgICAmIzM0O3NpZ25hbGZkX2NsZWFudXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIHdhaXQgcXVldWUgaGFuZGxpbmcgaW4gc2lnbmFsZmQgKGZzL3NpZ25hbGZkLmMpLiBJbiBwYXJ0aWN1bGFyLCBpdCBpbnRyb2R1Y2VzIGN0eC1sZXZlbCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhlYWQsIHVwZGF0aW5nIHNpZ25hbGZkX3BvbGwsIHNpZ25hbGZkX2RlcXVldWUsIHNpZ25hbGZkX3JlbGVhc2UsIGFuZCBkb19zaWduYWxmZDQgdG8gc3VwcG9ydCB3YWtpbmcgd2FpdGVycyB1cG9uIHNpZ25hbGZkIG1hc2sgdXBkYXRlcyBhY3Jvc3MgdGhyZWFkcy9wcm9jZXNzZXMuIFRoaXMgaXMgY29yZSwgcmVhY2hhYmxlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgd2FpdHF1ZXVlIChgd3FoYCksIHNwaW5sb2NrIChgbG9ja2ApLCBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgKGByY3VfaGVhZGApIHRvIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBpbiBgZnMvc2lnbmFsZmQuY2Agc28gdGhhdCBtYXNrIHVwZGF0ZXMgdmlhIGBzaWduYWxmZDRgIHByb3Blcmx5IHdha2UgdXAgd2FpdGVycyBhY3Jvc3MgcHJvY2Vzc2VzLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4xLiBBbGwgZmllbGRzIG9mIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKGBzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jaylgLCBgaW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZjdHgtXHUwMDNld3FoKWAsIGBjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrYCkuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGUga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvYCkgcmVtYWlucyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0YCBpbiBgc2lnbmFsZmRfY29weWluZm8oKWAuXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cdTAwM2Vsb2NrYCBhbmQgYHNpZ2hhbmQtXHUwMDNlc2lnbG9ja2ApLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2E5MDZlMTY1YTBhNzM3ZGZmZWZjNDkwMjkwNjA1ZjQ3MDMwM2UyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIyOjQzOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvc2lnbmFsZmQuYyBiL2ZzL3NpZ25hbGZkLmMKaW5kZXggZGZmNTM3NDVlMzUyNC4uNTIzYzNhNmRjNTY1OSAxMDA2NDQKLS0tIGEvZnMvc2lnbmFsZmQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zaWduYWxmZC5jCkBAIC0yNyw2ICYjNDM7MjcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hbm9uX2lub2Rlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NpZ25hbGZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY2FsbHMuaCZndDsKQEAgLTM5LDEyICYjNDM7NDAsMTkgQEAgdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCkKIH0KIAogc3RydWN0IHNpZ25hbGZkX2N0eCB7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovCiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKJiM0MzsJd2FpdF9xdWV1ZV9oZWFkX3Qgd3FoOwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCXNpZ3NldF90IHNpZ21hc2s7CiB9OwogCiBzdGF0aWMgaW50IHNpZ25hbGZkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Ja2ZyZWUoZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhKTsKJiM0MzsJc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwl3YWtlX3VwX3BvbGxmcmVlKCZhbXA7Y3R4LSZndDt3cWgpOwomIzQzOwlrZnJlZV9yY3UoY3R4LCByY3UpOwogCXJldHVybiAwOwogfQogCkBAIC01MywxNCAmIzQzOzYxLDE3IEBAIHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogCXN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAlfX3BvbGxfdCBldmVudHMgPSAwOwogCiYjNDM7CXBvbGxfd2FpdChmaWxlLCAmYW1wO2N0eC0mZ3Q7d3FoLCB3YWl0KTsKIAlwb2xsX3dhaXQoZmlsZSwgJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWduYWxmZF93cWgsIHdhaXQpOwogCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiAJaWYgKG5leHRfc2lnbmFsKCZhbXA7Y3VycmVudC0mZ3Q7cGVuZGluZywgJmFtcDtjdHgtJmd0O3NpZ21hc2spIHx8CiAJICAgIG5leHRfc2lnbmFsKCZhbXA7Y3VycmVudC0mZ3Q7c2lnbmFsLSZndDtzaGFyZWRfcGVuZGluZywKIAkJCSZhbXA7Y3R4LSZndDtzaWdtYXNrKSkKIAkJZXZlbnRzIHw9IEVQT0xMSU47Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAKIAlyZXR1cm4gZXZlbnRzOwogfQpAQCAtMTU3LDggJiM0MzsxNjgsMTAgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm8KIAllbnVtIHBpZF90eXBlIHR5cGU7CiAJc3NpemVfdCByZXQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiYjNDM7CURFQ0xBUkVfV0FJVFFVRVVFKGN0eF93YWl0LCBjdXJyZW50KTsKIAotCXNwaW5fbG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwogCXJldCA9IGRlcXVldWVfc2lnbmFsKCZhbXA7Y3R4LSZndDtzaWdtYXNrLCBpbmZvLCAmYW1wO3R5cGUpOwogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSAwOgpAQCAtMTY3LDEwICYjNDM7MTgwLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvCiAJCXJldCA9IC1FQUdBSU47CiAJCWZhbGx0aHJvdWdoOwogCWRlZmF1bHQ6Ci0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAJCXJldHVybiByZXQ7CiAJfQogCiYjNDM7CWFkZF93YWl0X3F1ZXVlKCZhbXA7Y3R4LSZndDt3cWgsICZhbXA7Y3R4X3dhaXQpOwogCWFkZF93YWl0X3F1ZXVlKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbmFsZmRfd3FoLCAmYW1wO3dhaXQpOwogCWZvciAoOzspIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKQEAgLTE4MSwxMyAmIzQzOzE5NiwxNyBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mbwogCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAkJc2NoZWR1bGUoKTsKLQkJc3Bpbl9sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ25hbGZkX3dxaCwgJmFtcDt3YWl0KTsKJiM0MzsJcmVtb3ZlX3dhaXRfcXVldWUoJmFtcDtjdHgtJmd0O3dxaCwgJmFtcDtjdHhfd2FpdCk7CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIzMiw3ICYjNDM7MjUxLDkgQEAgc3RhdGljIHZvaWQgc2lnbmFsZmRfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZikKIAlzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmLSZndDtwcml2YXRlX2RhdGE7CiAJc2lnc2V0X3Qgc2lnbWFzazsKIAomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAlzaWdtYXNrID0gY3R4LSZndDtzaWdtYXNrOwomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCXNpZ25vdHNldCgmYW1wO3NpZ21hc2spOwogCXJlbmRlcl9zaWdzZXRfdChtLCAmIzM0O3NpZ21hc2s6XHQmIzM0OywgJmFtcDtzaWdtYXNrKTsKIH0KQEAgLTI2OCw2ICYjNDM7Mjg5LDggQEAgc3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncykKIAkJaWYgKCFjdHgpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDtjdHgtJmd0O2xvY2spOwomIzQzOwkJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2N0eC0mZ3Q7d3FoKTsKIAkJY3R4LSZndDtzaWdtYXNrID0gKm1hc2s7CiAKIAkJZmQgPSBGRF9BREQoZmxhZ3MgJmFtcDsgT19DTE9FWEVDLApAQCAtMjg2LDExICYjNDM7MzA5LDExIEBAIHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpCiAJCWN0eCA9IGZkX2ZpbGUoZiktJmd0O3ByaXZhdGVfZGF0YTsKIAkJaWYgKGZkX2ZpbGUoZiktJmd0O2Zfb3AgIT0gJmFtcDtzaWduYWxmZF9mb3BzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXNwaW5fbG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJCXNwaW5fbG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCQljdHgtJmd0O3NpZ21hc2sgPSAqbWFzazsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCi0JCXdha2VfdXAoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWduYWxmZF93cWgpOwomIzQzOwkJd2FrZV91cCgmYW1wO2N0eC0mZ3Q7d3FoKTsKIAl9CiAKIAlyZXR1cm4gdWZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZQppbmRleCAzZjMzOTg2NWEzYjZlLi41Y2FjNTMyZDQ5YWU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZQpAQCAtMSwzICYjNDM7MSw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIG1hbmdsZV91Y19zaWdtYXNrCiBzYXMKJiM0MztzaWduYWxmZF9tYXNrX3dha2UKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZQppbmRleCBlMGJmNzA1OGQxOWM5Li4wMGYxZTk2YzkyYzRkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlCkBAIC0yLDYgJiM0MzsyLDYgQEAKIENGTEFHUyA9IC1XYWxsCiBURVNUX0dFTl9QUk9HUyA9IG1hbmdsZV91Y19zaWdtYXNrCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gc2FzCiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHNpZ25hbGZkX21hc2tfd2FrZQogCiBpbmNsdWRlIC4uL2xpYi5tawotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2U2MDQyNGI5ZWM5ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuYwpAQCAtMCwwICYjNDM7MSwyNjYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zaWduYWxmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpwdHIgPSBidWY7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXNzaXplX3QgcmV0ID0gd3JpdGUoZmQsIHB0ciwgbGVuKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwdHIgJiM0Mzs9IHJldDsKJiM0MzsJCWxlbiAtPSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmVhZF9hbGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyICpwdHIgPSBidWY7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXNzaXplX3QgcmV0ID0gcmVhZChmZCwgcHRyLCBsZW4pOwomIzQzOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CQlwdHIgJiM0Mzs9IHJldDsKJiM0MzsJCWxlbiAtPSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtpbGxfYW5kX3JlYXAocGlkX3QgcGlkKQomIzQzO3sKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJaWYgKHBpZCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlraWxsKHBpZCwgU0lHS0lMTCk7CiYjNDM7CXdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd2FpdF9yZXN1bHQoaW50IGZkLCBpbnQgdGltZW91dF9tcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwb2xsZmQgcGZkID0gewomIzQzOwkJLmZkID0gZmQsCiYjNDM7CQkuZXZlbnRzID0gUE9MTElOLAomIzQzOwl9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSBwb2xsKCZhbXA7cGZkLCAxLCB0aW1lb3V0X21zKTsKJiM0MzsJfSB3aGlsZSAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGlsZF9pbl9zaWduYWxmZF9yZWFkKHBpZF90IHBpZCwgaW50IHNmZCkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CWNoYXIgYnVmWzI1Nl07CiYjNDM7CWxvbmcgbnI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYXJnMDsKJiM0MzsJRklMRSAqZnA7CiYjNDM7CWludCBpbl9yZWFkID0gMDsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkL3N5c2NhbGwmIzM0OywgcGlkKTsKJiM0MzsJZnAgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZnApIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFTk9FTlQpCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzc2NhbmYoYnVmLCAmIzM0OyVsZCAlbHgmIzM0OywgJmFtcDtuciwgJmFtcDthcmcwKSA9PSAyICZhbXA7JmFtcDsKJiM0MzsJICAgIG5yID09IF9fTlJfcmVhZCAmYW1wOyZhbXA7IGFyZzAgPT0gKHVuc2lnbmVkIGxvbmcpc2ZkKQomIzQzOwkJaW5fcmVhZCA9IDE7CiYjNDM7CiYjNDM7CWZjbG9zZShmcCk7CiYjNDM7CXJldHVybiBpbl9yZWFkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdhaXRfZm9yX2NoaWxkX2Jsb2NrKHBpZF90IHBpZCwgaW50IHNmZCwgaW50IHRpbWVvdXRfbXMpCiYjNDM7ewomIzQzOwlpbnQgd2FpdGVkX21zID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKHdhaXRlZF9tcyAmbHQ7IHRpbWVvdXRfbXMpIHsKJiM0MzsJCXJldCA9IGNoaWxkX2luX3NpZ25hbGZkX3JlYWQocGlkLCBzZmQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKSB7CiYjNDM7CQkJdXNsZWVwKDEwMDAwKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXVzbGVlcCgxMDAwKTsKJiM0MzsJCXdhaXRlZF9tcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gZmRzaTsKJiM0MzsJc2lnc2V0X3QgYmxvY2tlZCwgaW5pdGlhbF9tYXNrLCB1cGRhdGVkX21hc2s7CiYjNDM7CWludCByZWFkeV9waXBlWzJdLCBzdGFydF9waXBlWzJdLCByZXN1bHRfcGlwZVsyXTsKJiM0MzsJaW50IHNmZCwgc2lnbm8sIHN0YXR1czsKJiM0MzsJcGlkX3QgY2hpbGQ7CiYjNDM7CWNoYXIgcmVhZHksIHN0YXJ0OwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDEpOwomIzQzOwomIzQzOwlzaWdlbXB0eXNldCgmYW1wO2Jsb2NrZWQpOwomIzQzOwlzaWdhZGRzZXQoJmFtcDtibG9ja2VkLCBTSUdVU1IxKTsKJiM0MzsJc2lnYWRkc2V0KCZhbXA7YmxvY2tlZCwgU0lHVVNSMik7CiYjNDM7CWlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZhbXA7YmxvY2tlZCwgTlVMTCkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtzaWdwcm9jbWFzayYjMzQ7KTsKJiM0MzsKJiM0MzsJc2lnZW1wdHlzZXQoJmFtcDtpbml0aWFsX21hc2spOwomIzQzOwlzaWdhZGRzZXQoJmFtcDtpbml0aWFsX21hc2ssIFNJR1VTUjEpOwomIzQzOwlzZmQgPSBzaWduYWxmZCgtMSwgJmFtcDtpbml0aWFsX21hc2ssIDApOwomIzQzOwlpZiAoc2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3NpZ25hbGZkJiMzNDspOwomIzQzOwomIzQzOwlpZiAocGlwZShyZWFkeV9waXBlKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3BpcGUocmVhZHkpJiMzNDspOwomIzQzOwlpZiAocGlwZShzdGFydF9waXBlKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3BpcGUoc3RhcnQpJiMzNDspOwomIzQzOwlpZiAocGlwZShyZXN1bHRfcGlwZSkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtwaXBlKHJlc3VsdCkmIzM0Oyk7CiYjNDM7CiYjNDM7CWNoaWxkID0gZm9yaygpOwomIzQzOwlpZiAoY2hpbGQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7Zm9yayYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGNoaWxkID09IDApIHsKJiM0MzsJCWNsb3NlKHJlYWR5X3BpcGVbMF0pOwomIzQzOwkJY2xvc2Uoc3RhcnRfcGlwZVsxXSk7CiYjNDM7CQljbG9zZShyZXN1bHRfcGlwZVswXSk7CiYjNDM7CiYjNDM7CQlyZWFkeSA9ICYjMzk7UiYjMzk7OwomIzQzOwkJaWYgKHdyaXRlX2FsbChyZWFkeV9waXBlWzFdLCAmYW1wO3JlYWR5LCBzaXplb2YocmVhZHkpKSkKJiM0MzsJCQlfZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwomIzQzOwkJaWYgKHJlYWRfYWxsKHN0YXJ0X3BpcGVbMF0sICZhbXA7c3RhcnQsIHNpemVvZihzdGFydCkpKQomIzQzOwkJCV9leGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CiYjNDM7CQltZW1zZXQoJmFtcDtmZHNpLCAwLCBzaXplb2YoZmRzaSkpOwomIzQzOwkJaWYgKHJlYWRfYWxsKHNmZCwgJmFtcDtmZHNpLCBzaXplb2YoZmRzaSkpKQomIzQzOwkJCV9leGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CiYjNDM7CQlzaWdubyA9IGZkc2kuc3NpX3NpZ25vOwomIzQzOwkJaWYgKHdyaXRlX2FsbChyZXN1bHRfcGlwZVsxXSwgJmFtcDtzaWdubywgc2l6ZW9mKHNpZ25vKSkpCiYjNDM7CQkJX2V4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsKJiM0MzsJCV9leGl0KEVYSVRfU1VDQ0VTUyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2UocmVhZHlfcGlwZVsxXSk7CiYjNDM7CWNsb3NlKHN0YXJ0X3BpcGVbMF0pOwomIzQzOwljbG9zZShyZXN1bHRfcGlwZVsxXSk7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2FsbChyZWFkeV9waXBlWzBdLCAmYW1wO3JlYWR5LCBzaXplb2YocmVhZHkpKSkgewomIzQzOwkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtjaGlsZCBkaWQgbm90IHJlYWNoIGJsb2NraW5nIHJlYWRcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoa2lsbChjaGlsZCwgU0lHVVNSMikpIHsKJiM0MzsJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7a2lsbChTSUdVU1IyKSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlzdGFydCA9ICYjMzk7UyYjMzk7OwomIzQzOwlpZiAod3JpdGVfYWxsKHN0YXJ0X3BpcGVbMV0sICZhbXA7c3RhcnQsIHNpemVvZihzdGFydCkpKSB7CiYjNDM7CQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2NvdWxkIG5vdCByZWxlYXNlIGNoaWxkIGludG8gc2lnbmFsZmQgcmVhZFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXR1cyA9IHdhaXRfZm9yX2NoaWxkX2Jsb2NrKGNoaWxkLCBzZmQsIDEwMDApOwomIzQzOwlpZiAoc3RhdHVzICZsdDsgMCkgewomIzQzOwkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQlpZiAoc3RhdHVzID09IC0xKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7L3Byb2MvJmx0O3BpZCZndDsvc3lzY2FsbCBpcyB1bmF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Y2hpbGQgZGlkIG5vdCBibG9jayBpbiBzaWduYWxmZCByZWFkXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2lnZW1wdHlzZXQoJmFtcDt1cGRhdGVkX21hc2spOwomIzQzOwlzaWdhZGRzZXQoJmFtcDt1cGRhdGVkX21hc2ssIFNJR1VTUjIpOwomIzQzOwlpZiAoc2lnbmFsZmQoc2ZkLCAmYW1wO3VwZGF0ZWRfbWFzaywgMCkgJmx0OyAwKSB7CiYjNDM7CQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3NpZ25hbGZkKHJlY29uZmlndXJlKSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEpIHsKJiM0MzsJCWlmIChyZWFkX2FsbChyZXN1bHRfcGlwZVswXSwgJmFtcDtzaWdubywgc2l6ZW9mKHNpZ25vKSkpIHsKJiM0MzsJCQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtjaGlsZCB3YWtldXAgZGlkIG5vdCBjYXJyeSBhIHNpZ25hbFxuJiMzNDspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHdhaXRwaWQoY2hpbGQsICZhbXA7c3RhdHVzLCAwKSAhPSBjaGlsZCkgewomIzQzOwkJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3dhaXRwaWQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0KHNpZ25vID09IFNJR1VTUjIgJmFtcDsmYW1wOyBXSUZFWElURUQoc3RhdHVzKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsCiYjNDM7CQkJCSAmIzM0O3NoYXJlZCBzaWduYWxmZCB3YWtldXAgYWZ0ZXIgbWFzayB1cGRhdGVcbiYjMzQ7KTsKJiM0MzsJCWtzZnRfZXhpdF9wYXNzKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQnVnZ3kga2VybmVscyBsZWF2ZSB0aGUgY2hpbGQgYXNsZWVwIHVudGlsIGFuIHVucmVsYXRlZCBzaWduYWwgaGl0cwomIzQzOwkgKiB0aGUgY2hpbGQmIzM5O3Mgc2lnbmFsZmQgd2FpdHF1ZXVlLiBTSUdVU1IxIGRvZXMgbm90IG1hdGNoIHRoZSB1cGRhdGVkCiYjNDM7CSAqIHNpZ25hbGZkIG1hc2ssIHNvIGEgc3VjY2Vzc2Z1bCByZWFkIG9mIFNJR1VTUjIgYWZ0ZXIgdGhpcyBudWRnZQomIzQzOwkgKiBkZW1vbnN0cmF0ZXMgdGhlIG1pc3NlZCB3YWtldXAuCiYjNDM7CSAqLwomIzQzOwlpZiAoa2lsbChjaGlsZCwgU0lHVVNSMSkpIHsKJiM0MzsJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7a2lsbChTSUdVU1IxKSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEgJmFtcDsmYW1wOwomIzQzOwkgICAgIXJlYWRfYWxsKHJlc3VsdF9waXBlWzBdLCAmYW1wO3NpZ25vLCBzaXplb2Yoc2lnbm8pKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB3YWl0cGlkKGNoaWxkLCAmYW1wO3N0YXR1cywgMCkgPT0gY2hpbGQgJmFtcDsmYW1wOwomIzQzOwkgICAgc2lnbm8gPT0gU0lHVVNSMiAmYW1wOyZhbXA7IFdJRkVYSVRFRChzdGF0dXMpICZhbXA7JmFtcDsgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwKSB7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDttYXNrIHVwZGF0ZSBtaXNzZWQgYSBzaGFyZWQgc2lnbmFsZmQgd2FpdGVyXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2NoaWxkIHdva2Ugb25seSBhZnRlciBhbiB1bnJlbGF0ZWQgU0lHVVNSMVxuJiMzNDspOwomIzQzOwkJa3NmdF9leGl0X2ZhaWwoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Y2hpbGQgcmVtYWluZWQgYmxvY2tlZCBhZnRlciBzaWduYWxmZCByZWNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2lnbmFsRkQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgZnMvc2lnbmFsZmQuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIHNpZ25hbGZkIGltcGxlbWVudGF0aW9uLCBwcmltYXJpbHkgYXJvdW5kIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LgoKVGhlIGludHJvZHVjdGlvbiBvZiBgc3BpbmxvY2tfdCBsb2NrYCwgYHdhaXRfcXVldWVfaGVhZF90IHdxaGAsIGFuZCBgc3RydWN0IHJjdV9oZWFkIHJjdWAgd2l0aGluIHRoZSBgc2lnbmFsZmRfY3R4YCBzdHJ1Y3QgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHN5bmNocm9uaXphdGlvbiBhbmQgcG90ZW50aWFsbHkgYW4gUkNVIChSZWFkLUNvcHktVXBkYXRlKSBvcHRpbWl6YXRpb24gZWZmb3J0LiBUaGlzIGlzIHNtYXJ0OyBzaWduYWxmZCBpcyBhIGNvbW1vbiBwb2ludCBvZiBjb250ZW50aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBhZGRyZXNzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgpgc2lnbmFsZmRfcmVsZWFzZWAgbm93IGluY29ycG9yYXRlcyBgd2FrZV91cF9wb2xsZnJlZWAgYW5kIGBrZnJlZV9yY3VgIGluc3RlYWQgb2YganVzdCBhIHN0cmFpZ2h0IGBrZnJlZWAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdGlvbiB0aGF0IHdlJiMzOTtyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgcm9idXN0IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgY2xlYW51cCwgZXNwZWNpYWxseSBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQsIGxpa2VseSBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gcHJvYmxlbXMuIFJDVSBpcyBhIGdvb2QgZml0IGhlcmUsIHByZXZlbnRpbmcgc3RhbGxzIHdoaWxlIGNsZWFuaW5nIHVwIHRoZSB1bmRlcmx5aW5nIGNvbnRleHQuCgpUaGUgY2hhbmdlcyBpbiBgc2lnbmFsZmRfcG9sbGAsIGBzaWduYWxmZF9kZXF1ZXVlYCwgYW5kIGBzaWduYWxmZF9zaG93X2ZkaW5mb2AgcmVpbmZvcmNlIHRoaXMgY29uY3VycmVuY3kgdGhlbWUuIFRoZSBhZGRpdGlvbiBvZiBzcGlubG9ja3MgYXJvdW5kIGNyaXRpY2FsIHNlY3Rpb25zLCBzdWNoIGFzIGNoZWNraW5nIGBzaWdsb2NrYCBhbmQgYG5leHRfc2lnbmFsYCwgb3IgcmVhZGluZyBgY3R4LSZndDtzaWdtYXNrYCwgaXMgdGV4dGJvb2sgcHJvdGVjdGlvbiBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucy4gVXNpbmcgYSB3YWl0IHF1ZXVlIGluIHBvbGwsIGFuZCB0aGUgY2FyZWZ1bCBgYWRkX3dhaXRfcXVldWVgL2ByZW1vdmVfd2FpdF9xdWV1ZWAgaW4gYHNpZ25hbGZkX2RlcXVldWVgLCBtYWtlcyBpdCBhbGwgbG9vayB3ZWxsLWNvbnNpZGVyZWQuCgpUaGUgYGRvX3NpZ25hbGZkNGAgZnVuY3Rpb24gaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNwaW5sb2NrIGFuZCB3YWl0IHF1ZXVlIGhlYWQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGxvY2tpbmcgYXJvdW5kIGBjdHgtJmd0O3NpZ21hc2tgIGFuZCB0aGUgYHdha2VfdXBgIGNhbGwgaW4gdGhlIHJlY29uZmlndXJhdGlvbiBzY2VuYXJpbyBzaG93IGEgY2FyZWZ1bCBhdHRlbnRpb24gdG8gdGhlIGF0b21pY2l0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlIHJlY29uZmlndXJhdGlvbiBwcm9jZXNzLiBXZSBhcmUgdmVyeSBsaWtlbHkgbG9va2luZyBhdCBoYW5kbGluZyBvZiBzaWduYWwgbWFza3MgdGhhdCBhcmUgdXBkYXRlZCBvbiB0aGUgZmx5LgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSBob3cgYHNpZ25hbGZkX2N0eGAgaXMgYWxsb2NhdGVkLCBob3cgYHNpZ25hbGZkX3JlYWRgIGludGVyYWN0cyB3aXRoIGl0LCBhbmQgd2hhdCBoYXBwZW5zIGluIG90aGVyIGNyaXRpY2FsIHBhdGhzLCBpbiB0aGUgbWFpbiBjb2RlIGJhc2UuIExldCBtZSBxdWlja2x5IHVzZSByZWFkLWZpbGUgb3IgZ3JlcHBlciB0byBwdWxsIHVwIHRoZSBleGlzdGluZyBgZnMvc2lnbmFsZmQuY2AgY29kZSB0byBzZWUgaG93IHRoZSBjb250ZXh0IGlzIHVzZWQgb3ZlcmFsbC4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbXBvcnRhbnQgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGFsbG9jYXRpb24gdG8gZnVsbHkgZ3Jhc3AgdGhlIG1lbW9yeSBtb2RlbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3NpZ25hbGZkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKlxuICAgMzpcdCAqICBmcy9zaWduYWxmZC5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBMaW51cyBUb3J2YWxkc1xuICAgNjpcdCAqXG4gICA3Olx0ICogIE1vbiBNYXIgNSwgMjAwNzogRGF2aWRlIExpYmVuemkgXHUwMDNjZGF2aWRlbEB4bWFpbHNlcnZlci5vcmdcdTAwM2VcbiAgIDg6XHQgKiAgICAgIENoYW5nZWQgLVx1MDAzZXJlYWQoKSB0byByZXR1cm4gYSBzaWdpbmZvIHN0cmN0dXJlIGluc3RlYWQgb2Ygc2lnbmFsIG51bWJlci5cbiAgIDk6XHQgKiAgICAgIEZpeGVkIGxvY2tpbmcgaW4gLVx1MDAzZXBvbGwoKS5cbiAgMTA6XHQgKiAgICAgIEFkZGVkIHNpZ2hhbmQtZGV0YWNoIG5vdGlmaWNhdGlvbi5cbiAgMTE6XHQgKiAgICAgIEFkZGVkIGZkIHJlLXVzZSBpbiBzeXNfc2lnbmFsZmQoKSBzeXNjYWxsLlxuICAxMjpcdCAqICAgICAgTm93IHVzaW5nIGFub255bW91cyBpbm9kZSBzb3VyY2UuXG4gIDEzOlx0ICogICAgICBUaGFua3MgdG8gT2xlZyBOZXN0ZXJvdiBmb3IgdXNlZnVsIGNvZGUgcmV2aWV3IGFuZCBzdWdnZXN0aW9ucy5cbiAgMTQ6XHQgKiAgICAgIE1vcmUgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGZyb20gQXJuZCBCZXJnbWFubi5cbiAgMTU6XHQgKiAgU2F0IE1heSAxOSwgMjAwNzogRGF2aSBFLiBNLiBBcm5hdXQgXHUwMDNjZGF2aUBoYXhlbnQuY29tLmJyXHUwMDNlXG4gIDE2Olx0ICogICAgICBSZXRyaWV2ZSBtdWx0aXBsZSBzaWduYWxzIHdpdGggb25lIHJlYWQoKSBjYWxsXG4gIDE3Olx0ICogIFN1biBKdWwgMTUsIDIwMDc6IERhdmlkZSBMaWJlbnppIFx1MDAzY2RhdmlkZWxAeG1haWxzZXJ2ZXIub3JnXHUwMDNlXG4gIDE4Olx0ICogICAgICBBdHRhY2ggdG8gdGhlIHNpZ2hhbmQgb25seSBkdXJpbmcgcmVhZCgpIGFuZCBwb2xsKCkuXG4gIDE5Olx0ICovXG4gIDIwOlx0XG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgMjc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAyODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gIDMwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICAzMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcdTAwM2VcbiAgMzI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWxmZC5oXHUwMDNlXG4gIDMzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxuICAzNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICAzNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4gIDM2Olx0XG4gIDM3Olx0dm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZClcbiAgMzg6XHR7XG4gIDM5Olx0XHR3YWtlX3VwX3BvbGxmcmVlKFx1MDAyNnNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoKTtcbiAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RydWN0IHNpZ25hbGZkX2N0eCB7XG4gIDQzOlx0XHQvKiBTZXJpYWxpemVzIHNoYXJlZCBtYXNrIHVwZGF0ZXMgd2l0aCBmaWxlLWxvY2FsIHdhaXRlciB3YWtldXBzLiAqL1xuICA0NDpcdFx0c3BpbmxvY2tfdCBsb2NrO1xuICA0NTpcdFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd3FoO1xuICA0NjpcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiAgNDc6XHRcdHNpZ3NldF90IHNpZ21hc2s7XG4gIDQ4Olx0fTtcbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWMgaW50IHNpZ25hbGZkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gIDUxOlx0e1xuICA1MjpcdFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gIDUzOlx0XG4gIDU0Olx0XHR3YWtlX3VwX3BvbGxmcmVlKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuICA1NTpcdFx0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcbiAgNTY6XHRcdHJldHVybiAwO1xuICA1NzpcdH1cbiAgNTg6XHRcbiAgNTk6XHRzdGF0aWMgX19wb2xsX3Qgc2lnbmFsZmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbiAgNjA6XHR7XG4gIDYxOlx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAgNjI6XHRcdF9fcG9sbF90IGV2ZW50cyA9IDA7XG4gIDYzOlx0XG4gIDY0Olx0XHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2Y3R4LVx1MDAzZXdxaCwgd2FpdCk7XG4gIDY1Olx0XHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaCwgd2FpdCk7XG4gIDY2Olx0XG4gIDY3Olx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAgNjg6XHRcdHNwaW5fbG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gIDY5Olx0XHRpZiAobmV4dF9zaWduYWwoXHUwMDI2Y3VycmVudC1cdTAwM2VwZW5kaW5nLCBcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaykgfHxcbiAgNzA6XHRcdCAgICBuZXh0X3NpZ25hbChcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VzaGFyZWRfcGVuZGluZyxcbiAgNzE6XHRcdFx0XHRcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaykpXG4gIDcyOlx0XHRcdGV2ZW50cyB8PSBFUE9MTElOO1xuICA3MzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuICA3NDpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAgNzU6XHRcbiAgNzY6XHRcdHJldHVybiBldmVudHM7XG4gIDc3Olx0fVxuICA3ODpcdFxuICA3OTpcdC8qXG4gIDgwOlx0ICogQ29waWVkIGZyb20gY29weV9zaWdpbmZvX3RvX3VzZXIoKSBpbiBrZXJuZWwvc2lnbmFsLmNcbiAgODE6XHQgKi9cbiAgODI6XHRzdGF0aWMgaW50IHNpZ25hbGZkX2NvcHlpbmZvKHN0cnVjdCBpb3ZfaXRlciAqdG8sIGtlcm5lbF9zaWdpbmZvX3QgY29uc3QgKmtpbmZvKVxuICA4MzpcdHtcbiAgODQ6XHRcdHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvIG5ldztcbiAgODU6XHRcbiAgODY6XHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pICE9IDEyOCk7XG4gIDg3Olx0XG4gIDg4Olx0XHQvKlxuICA4OTpcdFx0ICogVW51c2VkIG1lbWJlcnMgc2hvdWxkIGJlIHplcm8gLi4uXG4gIDkwOlx0XHQgKi9cbiAgOTE6XHRcdG1lbXNldChcdTAwMjZuZXcsIDAsIHNpemVvZihuZXcpKTtcbiAgOTI6XHRcbiAgOTM6XHRcdC8qXG4gIDk0Olx0XHQgKiBJZiB5b3UgY2hhbmdlIHNpZ2luZm9fdCBzdHJ1Y3R1cmUsIHBsZWFzZSBiZSBzdXJlXG4gIDk1Olx0XHQgKiB0aGlzIGNvZGUgaXMgZml4ZWQgYWNjb3JkaW5nbHkuXG4gIDk2Olx0XHQgKi9cbiAgOTc6XHRcdG5ldy5zc2lfc2lnbm8gPSBraW5mby1cdTAwM2VzaV9zaWdubztcbiAgOTg6XHRcdG5ldy5zc2lfZXJybm8gPSBraW5mby1cdTAwM2VzaV9lcnJubztcbiAgOTk6XHRcdG5ldy5zc2lfY29kZSAgPSBraW5mby1cdTAwM2VzaV9jb2RlO1xuIDEwMDpcdFx0c3dpdGNoIChzaWdpbmZvX2xheW91dChraW5mby1cdTAwM2VzaV9zaWdubywga2luZm8tXHUwMDNlc2lfY29kZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLi4uCgoqKkRpdmluZyBpbnRvIGBmcy9zaWduYWxmZC5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSByZXN0IG9mIGBmcy9zaWduYWxmZC5jYC4gSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7dmUgYWxyZWFkeSBnb3QgYSBoYW5kbGUgb24gdGhlIGdlbmVyYWwgY29uY2VwdCBvZiBzaWduYWxmZCwgYnV0IEkgd2FudCB0byBzZWUgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsJiMzOTtzIHNpZ25hbCBkZWxpdmVyeSBtZWNoYW5pc21zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIGFuZCB0aGUgdmFyaW91cyBsb2NraW5nIHN0cmF0ZWdpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgZWxlZ2FuY2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSB1bnVzdWFsIGRlc2lnbiBjaG9pY2VzIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3Rpbmcgb3IgaW5zdHJ1Y3RpdmUuIEhvcGVmdWxseSwgSSYjMzk7bGwgdW5jb3ZlciBzb21lIGJlc3QgcHJhY3RpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3NpZ25hbGZkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdGNhc2UgU0lMX0tJTEw6XG4gMTAyOlx0XHRcdG5ldy5zc2lfcGlkID0ga2luZm8tXHUwMDNlc2lfcGlkO1xuIDEwMzpcdFx0XHRuZXcuc3NpX3VpZCA9IGtpbmZvLVx1MDAzZXNpX3VpZDtcbiAxMDQ6XHRcdFx0YnJlYWs7XG4gMTA1Olx0XHRjYXNlIFNJTF9USU1FUjpcbiAxMDY6XHRcdFx0bmV3LnNzaV90aWQgPSBraW5mby1cdTAwM2VzaV90aWQ7XG4gMTA3Olx0XHRcdG5ldy5zc2lfb3ZlcnJ1biA9IGtpbmZvLVx1MDAzZXNpX292ZXJydW47XG4gMTA4Olx0XHRcdG5ldy5zc2lfcHRyID0gKGxvbmcpIGtpbmZvLVx1MDAzZXNpX3B0cjtcbiAxMDk6XHRcdFx0bmV3LnNzaV9pbnQgPSBraW5mby1cdTAwM2VzaV9pbnQ7XG4gMTEwOlx0XHRcdGJyZWFrO1xuIDExMTpcdFx0Y2FzZSBTSUxfUE9MTDpcbiAxMTI6XHRcdFx0bmV3LnNzaV9iYW5kID0ga2luZm8tXHUwMDNlc2lfYmFuZDtcbiAxMTM6XHRcdFx0bmV3LnNzaV9mZCAgID0ga2luZm8tXHUwMDNlc2lfZmQ7XG4gMTE0Olx0XHRcdGJyZWFrO1xuIDExNTpcdFx0Y2FzZSBTSUxfRkFVTFRfQk5ERVJSOlxuIDExNjpcdFx0Y2FzZSBTSUxfRkFVTFRfUEtVRVJSOlxuIDExNzpcdFx0Y2FzZSBTSUxfRkFVTFRfUEVSRl9FVkVOVDpcbiAxMTg6XHRcdFx0LypcbiAxMTk6XHRcdFx0ICogRmFsbCB0aHJvdWdoIHRvIHRoZSBTSUxfRkFVTFQgY2FzZS4gIFNJTF9GQVVMVF9CTkRFUlIsXG4gMTIwOlx0XHRcdCAqIFNJTF9GQVVMVF9QS1VFUlIsIGFuZCBTSUxfRkFVTFRfUEVSRl9FVkVOVCBhcmUgb25seVxuIDEyMTpcdFx0XHQgKiBnZW5lcmF0ZWQgYnkgZmF1bHRzIHRoYXQgZGVsaXZlciB0aGVtIHN5bmNocm9ub3VzbHkgdG9cbiAxMjI6XHRcdFx0ICogdXNlcnNwYWNlLiAgSW4gY2FzZSBzb21lb25lIGluamVjdHMgb25lIG9mIHRoZXNlIHNpZ25hbHNcbiAxMjM6XHRcdFx0ICogYW5kIHNpZ25hbGZkIGNhdGNoZXMgaXQgdHJlYXQgaXQgYXMgU0lMX0ZBVUxULlxuIDEyNDpcdFx0XHQgKi9cbiAxMjU6XHRcdGNhc2UgU0lMX0ZBVUxUOlxuIDEyNjpcdFx0XHRuZXcuc3NpX2FkZHIgPSAobG9uZykga2luZm8tXHUwMDNlc2lfYWRkcjtcbiAxMjc6XHRcdFx0YnJlYWs7XG4gMTI4Olx0XHRjYXNlIFNJTF9GQVVMVF9UUkFQTk86XG4gMTI5Olx0XHRcdG5ldy5zc2lfYWRkciA9IChsb25nKSBraW5mby1cdTAwM2VzaV9hZGRyO1xuIDEzMDpcdFx0XHRuZXcuc3NpX3RyYXBubyA9IGtpbmZvLVx1MDAzZXNpX3RyYXBubztcbiAxMzE6XHRcdFx0YnJlYWs7XG4gMTMyOlx0XHRjYXNlIFNJTF9GQVVMVF9NQ0VFUlI6XG4gMTMzOlx0XHRcdG5ldy5zc2lfYWRkciA9IChsb25nKSBraW5mby1cdTAwM2VzaV9hZGRyO1xuIDEzNDpcdFx0XHRuZXcuc3NpX2FkZHJfbHNiID0gKHNob3J0KSBraW5mby1cdTAwM2VzaV9hZGRyX2xzYjtcbiAxMzU6XHRcdFx0YnJlYWs7XG4gMTM2Olx0XHRjYXNlIFNJTF9DSExEOlxuIDEzNzpcdFx0XHRuZXcuc3NpX3BpZCAgICA9IGtpbmZvLVx1MDAzZXNpX3BpZDtcbiAxMzg6XHRcdFx0bmV3LnNzaV91aWQgICAgPSBraW5mby1cdTAwM2VzaV91aWQ7XG4gMTM5Olx0XHRcdG5ldy5zc2lfc3RhdHVzID0ga2luZm8tXHUwMDNlc2lfc3RhdHVzO1xuIDE0MDpcdFx0XHRuZXcuc3NpX3V0aW1lICA9IGtpbmZvLVx1MDAzZXNpX3V0aW1lO1xuIDE0MTpcdFx0XHRuZXcuc3NpX3N0aW1lICA9IGtpbmZvLVx1MDAzZXNpX3N0aW1lO1xuIDE0MjpcdFx0XHRicmVhaztcbiAxNDM6XHRcdGNhc2UgU0lMX1JUOlxuIDE0NDpcdFx0XHQvKlxuIDE0NTpcdFx0XHQgKiBUaGlzIGNhc2UgY2F0Y2hlcyBhbHNvIHRoZSBzaWduYWxzIHF1ZXVlZCBieSBzaWdxdWV1ZSgpLlxuIDE0NjpcdFx0XHQgKi9cbiAxNDc6XHRcdFx0bmV3LnNzaV9waWQgPSBraW5mby1cdTAwM2VzaV9waWQ7XG4gMTQ4Olx0XHRcdG5ldy5zc2lfdWlkID0ga2luZm8tXHUwMDNlc2lfdWlkO1xuIDE0OTpcdFx0XHRuZXcuc3NpX3B0ciA9IChsb25nKSBraW5mby1cdTAwM2VzaV9wdHI7XG4gMTUwOlx0XHRcdG5ldy5zc2lfaW50ID0ga2luZm8tXHUwMDNlc2lfaW50O1xuIDE1MTpcdFx0XHRicmVhaztcbiAxNTI6XHRcdGNhc2UgU0lMX1NZUzpcbiAxNTM6XHRcdFx0bmV3LnNzaV9jYWxsX2FkZHIgPSAobG9uZykga2luZm8tXHUwMDNlc2lfY2FsbF9hZGRyO1xuIDE1NDpcdFx0XHRuZXcuc3NpX3N5c2NhbGwgICA9IGtpbmZvLVx1MDAzZXNpX3N5c2NhbGw7XG4gMTU1Olx0XHRcdG5ldy5zc2lfYXJjaCAgICAgID0ga2luZm8tXHUwMDNlc2lfYXJjaDtcbiAxNTY6XHRcdFx0YnJlYWs7XG4gMTU3Olx0XHR9XG4gMTU4Olx0XG4gMTU5Olx0XHRpZiAoIWNvcHlfdG9faXRlcl9mdWxsKFx1MDAyNm5ldywgc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKSwgdG8pKVxuIDE2MDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxNjE6XHRcbiAxNjI6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pO1xuIDE2MzpcdH1cbiAxNjQ6XHRcbiAxNjU6XHRzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mbyxcbiAxNjY6XHRcdFx0XHRcdGludCBub25ibG9jaylcbiAxNjc6XHR7XG4gMTY4Olx0XHRlbnVtIHBpZF90eXBlIHR5cGU7XG4gMTY5Olx0XHRzc2l6ZV90IHJldDtcbiAxNzA6XHRcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuIDE3MTpcdFx0REVDTEFSRV9XQUlUUVVFVUUoY3R4X3dhaXQsIGN1cnJlbnQpO1xuIDE3MjpcdFxuIDE3MzpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMTc0Olx0XHRzcGluX2xvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuIDE3NTpcdFx0cmV0ID0gZGVxdWV1ZV9zaWduYWwoXHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2ssIGluZm8sIFx1MDAyNnR5cGUpO1xuIDE3NjpcdFx0c3dpdGNoIChyZXQpIHtcbiAxNzc6XHRcdGNhc2UgMDpcbiAxNzg6XHRcdFx0aWYgKCFub25ibG9jaylcbiAxNzk6XHRcdFx0XHRicmVhaztcbiAxODA6XHRcdFx0cmV0ID0gLUVBR0FJTjtcbiAxODE6XHRcdFx0ZmFsbHRocm91Z2g7XG4gMTgyOlx0XHRkZWZhdWx0OlxuIDE4MzpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gMTg0Olx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMTg1Olx0XHRcdHJldHVybiByZXQ7XG4gMTg2Olx0XHR9XG4gMTg3Olx0XG4gMTg4Olx0XHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZjdHgtXHUwMDNld3FoLCBcdTAwMjZjdHhfd2FpdCk7XG4gMTg5Olx0XHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbiAxOTA6XHRcdGZvciAoOzspIHtcbiAxOTE6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiAxOTI6XHRcdFx0cmV0ID0gZGVxdWV1ZV9zaWduYWwoXHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2ssIGluZm8sIFx1MDAyNnR5cGUpO1xuIDE5MzpcdFx0XHRpZiAocmV0ICE9IDApXG4gMTk0Olx0XHRcdFx0YnJlYWs7XG4gMTk1Olx0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuIDE5NjpcdFx0XHRcdHJldCA9IC1FUkVTVEFSVFNZUztcbiAxOTc6XHRcdFx0XHRicmVhaztcbiAxOTg6XHRcdFx0fVxuIDE5OTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gMjAwOlx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHNpZ25hbGZkLmMqKgoKQWxyaWdodCwgdG8gZnVsbHkgZ3Jhc3AgdGhpcyBiZWhhdmlvciwgSSBuZWVkIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBmcy9zaWduYWxmZC5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAyMDEgdGhyb3VnaCAzMTUuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBhcm91bmQgd2hhdGV2ZXIgYXNwZWN0IG9mIHRoaXMgaXMgdGhyb3dpbmcgbWUuIEkgZmlndXJlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZyBhbmQgd2hlcmUgSSYjMzk7bSBtb3N0IGxpa2VseSB0byBmaW5kIHRoZSBhbnN3ZXIuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhvc2UgbGluZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc2lnbmFsZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMTpcdFx0XHRzY2hlZHVsZSgpO1xuIDIwMjpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAyMDM6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAyMDQ6XHRcdH1cbiAyMDU6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAyMDY6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMjA3Olx0XG4gMjA4Olx0XHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbiAyMDk6XHRcdHJlbW92ZV93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiAyMTA6XHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiAyMTE6XHRcbiAyMTI6XHRcdHJldHVybiByZXQ7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdC8qXG4gMjE2Olx0ICogUmV0dXJucyBhIG11bHRpcGxlIG9mIHRoZSBzaXplIG9mIGEgXCYjMzQ7c3RydWN0IHNpZ25hbGZkX3NpZ2luZm9cJiMzNDssIG9yIGEgbmVnYXRpdmVcbiAyMTc6XHQgKiBlcnJvciBjb2RlLiBUaGUgXCYjMzQ7Y291bnRcJiMzNDsgcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgYVxuIDIxODpcdCAqIFwmIzM0O3N0cnVjdCBzaWduYWxmZF9zaWdpbmZvXCYjMzQ7LlxuIDIxOTpcdCAqL1xuIDIyMDpcdHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4gMjIxOlx0e1xuIDIyMjpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4gMjIzOlx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyMjQ6XHRcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KHRvKTtcbiAyMjU6XHRcdHNzaXplX3QgcmV0LCB0b3RhbCA9IDA7XG4gMjI2Olx0XHRrZXJuZWxfc2lnaW5mb190IGluZm87XG4gMjI3Olx0XHRib29sIG5vbmJsb2NrO1xuIDIyODpcdFxuIDIyOTpcdFx0Y291bnQgLz0gc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKTtcbiAyMzA6XHRcdGlmICghY291bnQpXG4gMjMxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzMjpcdFxuIDIzMzpcdFx0bm9uYmxvY2sgPSBmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0sgfHwgaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQ7XG4gMjM0Olx0XHRkbyB7XG4gMjM1Olx0XHRcdHJldCA9IHNpZ25hbGZkX2RlcXVldWUoY3R4LCBcdTAwMjZpbmZvLCBub25ibG9jayk7XG4gMjM2Olx0XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjPSAwKSlcbiAyMzc6XHRcdFx0XHRicmVhaztcbiAyMzg6XHRcdFx0cmV0ID0gc2lnbmFsZmRfY29weWluZm8odG8sIFx1MDAyNmluZm8pO1xuIDIzOTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDI0MDpcdFx0XHRcdGJyZWFrO1xuIDI0MTpcdFx0XHR0b3RhbCAmIzQzOz0gcmV0O1xuIDI0MjpcdFx0XHRub25ibG9jayA9IDE7XG4gMjQzOlx0XHR9IHdoaWxlICgtLWNvdW50KTtcbiAyNDQ6XHRcbiAyNDU6XHRcdHJldHVybiB0b3RhbCA/IHRvdGFsOiByZXQ7XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIDI0OTpcdHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXG4gMjUwOlx0e1xuIDI1MTpcdFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZi1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMjUyOlx0XHRzaWdzZXRfdCBzaWdtYXNrO1xuIDI1MzpcdFxuIDI1NDpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMjU1Olx0XHRzaWdtYXNrID0gY3R4LVx1MDAzZXNpZ21hc2s7XG4gMjU2Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDI1NzpcdFx0c2lnbm90c2V0KFx1MDAyNnNpZ21hc2spO1xuIDI1ODpcdFx0cmVuZGVyX3NpZ3NldF90KG0sIFwmIzM0O3NpZ21hc2s6XFx0XCYjMzQ7LCBcdTAwMjZzaWdtYXNrKTtcbiAyNTk6XHR9XG4gMjYwOlx0I2VuZGlmXG4gMjYxOlx0XG4gMjYyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2lnbmFsZmRfZm9wcyA9IHtcbiAyNjM6XHQjaWZkZWYgQ09ORklHX1BST0NfRlNcbiAyNjQ6XHRcdC5zaG93X2ZkaW5mb1x0PSBzaWduYWxmZF9zaG93X2ZkaW5mbyxcbiAyNjU6XHQjZW5kaWZcbiAyNjY6XHRcdC5yZWxlYXNlXHQ9IHNpZ25hbGZkX3JlbGVhc2UsXG4gMjY3Olx0XHQucG9sbFx0XHQ9IHNpZ25hbGZkX3BvbGwsXG4gMjY4Olx0XHQucmVhZF9pdGVyXHQ9IHNpZ25hbGZkX3JlYWRfaXRlcixcbiAyNjk6XHRcdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiAyNzA6XHR9O1xuIDI3MTpcdFxuIDI3MjpcdHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXG4gMjczOlx0e1xuIDI3NDpcdFx0LyogQ2hlY2sgdGhlIFNGRF8qIGNvbnN0YW50cyBmb3IgY29uc2lzdGVuY3kuICAqL1xuIDI3NTpcdFx0QlVJTERfQlVHX09OKFNGRF9DTE9FWEVDICE9IE9fQ0xPRVhFQyk7XG4gMjc2Olx0XHRCVUlMRF9CVUdfT04oU0ZEX05PTkJMT0NLICE9IE9fTk9OQkxPQ0spO1xuIDI3NzpcdFxuIDI3ODpcdFx0aWYgKGZsYWdzIFx1MDAyNiB+KFNGRF9DTE9FWEVDIHwgU0ZEX05PTkJMT0NLKSlcbiAyNzk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjgwOlx0XG4gMjgxOlx0XHRzaWdkZWxzZXRtYXNrKG1hc2ssIHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKTtcbiAyODI6XHRcdHNpZ25vdHNldChtYXNrKTtcbiAyODM6XHRcbiAyODQ6XHRcdGlmICh1ZmQgPT0gLTEpIHtcbiAyODU6XHRcdFx0aW50IGZkO1xuIDI4NjpcdFx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gMjg3Olx0XG4gMjg4Olx0XHRcdGN0eCA9IGttYWxsb2Nfb2JqKCpjdHgpO1xuIDI4OTpcdFx0XHRpZiAoIWN0eClcbiAyOTA6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyOTE6XHRcbiAyOTI6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDI5MzpcdFx0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIDI5NDpcdFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuIDI5NTpcdFxuIDI5NjpcdFx0XHRmZCA9IEZEX0FERChmbGFncyBcdTAwMjYgT19DTE9FWEVDLFxuIDI5NzpcdFx0XHRcdCAgICBhbm9uX2lub2RlX2dldGZpbGVfZm1vZGUoXG4gMjk4Olx0XHRcdFx0XHQgICAgXCYjMzQ7W3NpZ25hbGZkXVwmIzM0OywgXHUwMDI2c2lnbmFsZmRfZm9wcywgY3R4LFxuIDI5OTpcdFx0XHRcdFx0ICAgIE9fUkRXUiB8IChmbGFncyBcdTAwMjYgT19OT05CTE9DSyksIEZNT0RFX05PV0FJVCkpO1xuIDMwMDpcdFx0XHRpZiAoZmQgXHUwMDNlPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY4OAoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiAxMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFNpZ25hbGZkIENvbnRleHQgV2FpdHF1ZXVlIEVuaGFuY2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMsIHNvIGhlcmUmIzM5O3MgdGhlIHByb2Nlc3M6CgpGaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBwZXItc2lnbmFsZmQgY29udGV4dCB3YWl0IHF1ZXVlIChgd3FoYCksIGEgc3BpbmxvY2sgKGBsb2NrYCksIGFuZCBhbiBSQ1UgaGVhZCB0byB0aGUgYHNpZ25hbGZkX2N0eGAgc3RydWN0dXJlLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gcmVsaWVkIG9uIHRoZSBgY3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbmFsZmRfd3FoYCwgd2hpY2ggY2F1c2VkIHByb2JsZW1zIHdpdGggc2hhcmVkIHNpZ25hbGZkIGZpbGUgZGVzY3JpcHRvcnMgYWNyb3NzIHByb2Nlc3NlcyAoZm9ya2VkIHByb2Nlc3NlcyBvciBwcm9jZXNzZXMgbW9kaWZ5aW5nIHRoZSBkZXNjcmlwdG9yIHdpdGggYHNpZ25hbGZkYCkuIFRoZSBuZXcgYHdxaGAgZW5zdXJlcyB0aGF0IHdha2V1cHMgaGFwcGVuIGNvcnJlY3RseSwgaXJyZXNwZWN0aXZlIG9mIHRoZSBwcm9jZXNzIGNhbGxpbmcgYHNpZ25hbGZkYC4gV2hlbiBhIHNpZ25hbCBtYXNrIGlzIHVwZGF0ZWQgaW4gYGRvX3NpZ25hbGZkNGAsIHRoZSBgY3R4LSZndDtsb2NrYCBpcyB0YWtlbiwgYGN0eC0mZ3Q7c2lnbWFza2AgaXMgdXBkYXRlZCwgYW5kIGBjdHgtJmd0O3dxaGAgaXMgd29rZW4uIFRoZSB3YWl0cXVldWUgaXMgcmVnaXN0ZXJlZCB0byBib3RoIGBjdHgtJmd0O3dxaGAgYW5kIGBzaWdoYW5kLSZndDtzaWduYWxmZF93cWhgIGluIGBzaWduYWxmZF9wb2xsYCBhbmQgYHNpZ25hbGZkX2RlcXVldWVgIHVuZGVyIGFwcHJvcHJpYXRlIGxvY2tzLiBBbmQsIGZpbmFsbHksIHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgcmVsZWFzZWQsIGB3YWtlX3VwX3BvbGxmcmVlKCZhbXA7Y3R4LSZndDt3cWgpYCBhbmQgYGtmcmVlX3JjdShjdHgsIHJjdSlgIGVuc3VyZSBhIGNsZWFuIFJDVSBjbGVhbnVwLgoKTm93LCBmb3IgdGhlIEtNU0FOIGFuYWx5c2lzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgYWRkaXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgZG9lc24mIzM5O3QgbGVhZCB0byBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuCgoxLiAgKipJbml0aWFsaXphdGlvbjoqKiBUaGUgYHNpZ25hbGZkX2N0eGAgZmllbGRzIChgbG9ja2AsIGB3cWhgLCBhbmQgYHNpZ21hc2tgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiB3aXRoIGBrbWFsbG9jX29iamAuIFRoZSBzcGlubG9jayBpcyBpbml0aWFsaXplZCB3aXRoIGBzcGluX2xvY2tfaW5pdGAsIHRoZSB3YWl0cXVldWUgaGVhZCBpcyBpbml0aWFsaXplZCB1c2luZyBgaW5pdF93YWl0cXVldWVfaGVhZGAsIGFuZCBgY3R4LSZndDtzaWdtYXNrYCBpcyBpbml0aWFsaXplZCBieSBhc3NpZ25tZW50LiBUaGUgUkNVIGhlYWQgaXMgaW5pdGlhbGl6ZWQgaW1wbGljaXRseS4gQWxsIGZpZWxkcyB3aXRoaW4gdGhlIGNvbnRleHQgYXJlIHRoZXJlZm9yZSBwcm9wZXJseSBpbml0aWFsaXplZC4KCjIuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb25zOioqIEkmIzM5O3ZlIGNhcmVmdWxseSByZXZpZXdlZCBob3cgdXNlci1zcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgY2hhbmdlcy4gYHNpZ25hbGZkX3Nob3dfZmRpbmZvYCBjb3BpZXMgdGhlIGBzaWdtYXNrYCB1bmRlciB0aGUgbG9jaywgY29udmVydHMgdGhlIG1hc2sgd2l0aCBgc2lnbm90c2V0YCwgYW5kIHRoZW4gZm9ybWF0cyBpdCBhcyB0ZXh0LiBgc2lnbmFsZmRfZGVxdWV1ZWAgdXNlcyBhIHN0YWNrLWFsbG9jYXRlZCB3YWl0cXVldWUgZW50cnksIHNvIHRoZXJlIGFyZSBubyBpc3N1ZXMuIFRoZSBgc2lnbmFsZmRfY29weWluZm9gIGZ1bmN0aW9uIGlzIHVuY2hhbmdlZCwgd2hpY2ggbWVhbnMgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGBuZXdgIHN0cnVjdCByZW1haW5zIGludGFjdC4gYHNpZ25hbGZkX3BvbGxgIGluaXRpYWxpemVzIHRoZSBldmVudHMgYml0bWFzayB0byAwLiBOb25lIG9mIHRoZXNlIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuCgozLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBUaGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgd2hpY2ggd291bGQgYmUgYSBjcml0aWNhbCBLTVNBTiBjb25jZXJuLgoKNC4gICoqS01TQU4gQ29uZGl0aW9uczoqKiBJJiMzOTt2ZSBnb25lIHRocm91Z2ggZWFjaCBvZiB0aGUgZm91ciBwb3RlbnRpYWwgS01TQU4gY29uZGl0aW9uczoKICAgICogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBvciB6ZXJvZWQgZmllbGRzLiBUaGUgc3RydWN0IHRoYXQgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgY29udGludWVzIHRvIGJlIHplcm9lZCBvdXQuCiAgICAqICAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KICAgICogICBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbi4KICAgICogICBUaGVyZSYjMzk7cyBubyBvcHBvcnR1bml0eSBmb3Igc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcywgZWl0aGVyLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuCgpJbnN0ZWFkLCBJJiMzOTtsbCBmbGFnIG90aGVyIHNhbml0aXplcnMuIFRoaXMgd2lsbCBuZWVkIExPQ0tERVAgZm9yIGxvY2tpbmcgb3JkZXIvZGVhZGxvY2sgaXNzdWVzIGJldHdlZW4gYGN0eC0mZ3Q7bG9ja2AgYW5kIGBjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrYCwgYW5kIEtBU0FOIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igd2FpdHF1ZXVlIGxpZmV0aW1lL1JDVSBpc3N1ZXMuCgpTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGdvb2Qgc29sdXRpb24gdG8gZml4IGEgZnVuZGFtZW50YWwgaXNzdWUuIFRoZSBwZXItZmlsZSB3YWl0cXVldWUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhdm9pZGluZyB0aGUgcHJvYmxlbXMgb2Ygc2hhcmluZyBhIGdsb2JhbCBvbmUuIFRoZSBjb2RlIHBhdGhzIGFyZW4mIzM5O3QgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmb2N1cyBub3cgc2hpZnRzIHRvIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcywgd2hpY2ggaXMgd2VsbCBjb3ZlcmVkIGJ5IHRoZSBzdGFuZGFyZCB0b29sY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgd2FpdHF1ZXVlIChgd3FoYCksIHNwaW5sb2NrIChgbG9ja2ApLCBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgKGByY3VfaGVhZGApIHRvIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBpbiBgZnMvc2lnbmFsZmQuY2Agc28gdGhhdCBtYXNrIHVwZGF0ZXMgdmlhIGBzaWduYWxmZDRgIHByb3Blcmx5IHdha2UgdXAgd2FpdGVycyBhY3Jvc3MgcHJvY2Vzc2VzLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4xLiBBbGwgZmllbGRzIG9mIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKGBzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jaylgLCBgaW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZjdHgtXHUwMDNld3FoKWAsIGBjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrYCkuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGUga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvYCkgcmVtYWlucyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0YCBpbiBgc2lnbmFsZmRfY29weWluZm8oKWAuXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cdTAwM2Vsb2NrYCBhbmQgYHNpZ2hhbmQtXHUwMDNlc2lnbG9ja2ApLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgd2FpdHF1ZXVlIChgd3FoYCksIHNwaW5sb2NrIChgbG9ja2ApLCBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgKGByY3VfaGVhZGApIHRvIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBpbiBgZnMvc2lnbmFsZmQuY2Agc28gdGhhdCBtYXNrIHVwZGF0ZXMgdmlhIGBzaWduYWxmZDRgIHByb3Blcmx5IHdha2UgdXAgd2FpdGVycyBhY3Jvc3MgcHJvY2Vzc2VzLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4xLiBBbGwgZmllbGRzIG9mIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKGBzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jaylgLCBgaW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZjdHgtXHUwMDNld3FoKWAsIGBjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrYCkuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGUga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvYCkgcmVtYWlucyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0YCBpbiBgc2lnbmFsZmRfY29weWluZm8oKWAuXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cdTAwM2Vsb2NrYCBhbmQgYHNpZ2hhbmQtXHUwMDNlc2lnbG9ja2ApLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDM6MzkuNTE3OTE5NTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzA0Nzg1MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNJR05BTEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2lnbmFsZmRfcG9sbFwiLFxuICAgIFwic2lnbmFsZmRfZGVxdWV1ZVwiLFxuICAgIFwic2lnbmFsZmRfcmVsZWFzZVwiLFxuICAgIFwiZG9fc2lnbmFsZmQ0XCIsXG4gICAgXCJzaWduYWxmZF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHdhaXRxdWV1ZSAoYHdxaGApLCBzcGlubG9jayAoYGxvY2tgKSwgYW5kIFJDVS1iYXNlZCBmcmVlaW5nIChgcmN1X2hlYWRgKSB0byBgc3RydWN0IHNpZ25hbGZkX2N0eGAgaW4gYGZzL3NpZ25hbGZkLmNgIHNvIHRoYXQgbWFzayB1cGRhdGVzIHZpYSBgc2lnbmFsZmQ0YCBwcm9wZXJseSB3YWtlIHVwIHdhaXRlcnMgYWNyb3NzIHByb2Nlc3Nlcy5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XFxuMS4gQWxsIGZpZWxkcyBvZiBgc3RydWN0IHNpZ25hbGZkX2N0eGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIChgc3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaylgLCBgaW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2Y3R4LVxcdTAwM2V3cWgpYCwgYGN0eC1cXHUwMDNlc2lnbWFzayA9ICptYXNrYCkuXFxuMi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBzdHJ1Y3R1cmUgKGBzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mb2ApIHJlbWFpbnMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldGAgaW4gYHNpZ25hbGZkX2NvcHlpbmZvKClgLlxcbjMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggaW52b2x2ZSBzeW5jaHJvbml6YXRpb24sIHdhaXRxdWV1ZSBvcmRlcmluZywgb3IgbG9jayBoaWVyYXJjaGllcyAoYmV0d2VlbiBgY3R4LVxcdTAwM2Vsb2NrYCBhbmQgYHNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2tgKSwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIHdhaXQgcXVldWUgaGFuZGxpbmcgaW4gc2lnbmFsZmQgKGZzL3NpZ25hbGZkLmMpLiBJbiBwYXJ0aWN1bGFyLCBpdCBpbnRyb2R1Y2VzIGN0eC1sZXZlbCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhlYWQsIHVwZGF0aW5nIHNpZ25hbGZkX3BvbGwsIHNpZ25hbGZkX2RlcXVldWUsIHNpZ25hbGZkX3JlbGVhc2UsIGFuZCBkb19zaWduYWxmZDQgdG8gc3VwcG9ydCB3YWtpbmcgd2FpdGVycyB1cG9uIHNpZ25hbGZkIG1hc2sgdXBkYXRlcyBhY3Jvc3MgdGhyZWFkcy9wcm9jZXNzZXMuIFRoaXMgaXMgY29yZSwgcmVhY2hhYmxlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDM6MzkuNTE3OTI2MjUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYwMDg0MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2E5MDZlMTY1YTBhNzM3ZGZmZWZjNDkwMjkwNjA1ZjQ3MDMwM2UyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjo0MzozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9zaWduYWxmZC5jIGIvZnMvc2lnbmFsZmQuY1xcbmluZGV4IGRmZjUzNzQ1ZTM1MjQuLjUyM2MzYTZkYzU2NTkgMTAwNjQ0XFxuLS0tIGEvZnMvc2lnbmFsZmQuY1xcbisrKyBiL2ZzL3NpZ25hbGZkLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbm9uX2lub2Rlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lnbmFsZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcXHUwMDNlXFxuQEAgLTM5LDEyICs0MCwxOSBAQCB2b2lkIHNpZ25hbGZkX2NsZWFudXAoc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kKVxcbiB9XFxuIFxcbiBzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHtcXG4rXFx0LyogU2VyaWFsaXplcyBzaGFyZWQgbWFzayB1cGRhdGVzIHdpdGggZmlsZS1sb2NhbCB3YWl0ZXIgd2FrZXVwcy4gKi9cXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbitcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7XFxuK1xcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIFxcdHNpZ3NldF90IHNpZ21hc2s7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHNpZ25hbGZkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4tXFx0a2ZyZWUoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhKTtcXG4rXFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXG4rXFx0d2FrZV91cF9wb2xsZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2V3cWgpO1xcbitcXHRrZnJlZV9yY3UoY3R4LCByY3UpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNTMsMTQgKzYxLDE3IEBAIHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbiBcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdF9fcG9sbF90IGV2ZW50cyA9IDA7XFxuIFxcbitcXHRwb2xsX3dhaXQoZmlsZSwgXFx1MDAyNmN0eC1cXHUwMDNld3FoLCB3YWl0KTtcXG4gXFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgsIHdhaXQpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIFxcdGlmIChuZXh0X3NpZ25hbChcXHUwMDI2Y3VycmVudC1cXHUwMDNlcGVuZGluZywgXFx1MDAyNmN0eC1cXHUwMDNlc2lnbWFzaykgfHxcXG4gXFx0ICAgIG5leHRfc2lnbmFsKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZXNoYXJlZF9wZW5kaW5nLFxcbiBcXHRcXHRcXHRcXHUwMDI2Y3R4LVxcdTAwM2VzaWdtYXNrKSlcXG4gXFx0XFx0ZXZlbnRzIHw9IEVQT0xMSU47XFxuLVxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIGV2ZW50cztcXG4gfVxcbkBAIC0xNTcsOCArMTY4LDEwIEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvXFxuIFxcdGVudW0gcGlkX3R5cGUgdHlwZTtcXG4gXFx0c3NpemVfdCByZXQ7XFxuIFxcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xcbitcXHRERUNMQVJFX1dBSVRRVUVVRShjdHhfd2FpdCwgY3VycmVudCk7XFxuIFxcbi1cXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4gXFx0cmV0ID0gZGVxdWV1ZV9zaWduYWwoXFx1MDAyNmN0eC1cXHUwMDNlc2lnbWFzaywgaW5mbywgXFx1MDAyNnR5cGUpO1xcbiBcXHRzd2l0Y2ggKHJldCkge1xcbiBcXHRjYXNlIDA6XFxuQEAgLTE2NywxMCArMTgwLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvXFxuIFxcdFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4rXFx0YWRkX3dhaXRfcXVldWUoXFx1MDAyNmN0eC1cXHUwMDNld3FoLCBcXHUwMDI2Y3R4X3dhaXQpO1xcbiBcXHRhZGRfd2FpdF9xdWV1ZShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbmFsZmRfd3FoLCBcXHUwMDI2d2FpdCk7XFxuIFxcdGZvciAoOzspIHtcXG4gXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcXG5AQCAtMTgxLDEzICsxOTYsMTcgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm9cXG4gXFx0XFx0XFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0c2NoZWR1bGUoKTtcXG4tXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIFxcdH1cXG4tXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbitcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbmFsZmRfd3FoLCBcXHUwMDI2d2FpdCk7XFxuK1xcdHJlbW92ZV93YWl0X3F1ZXVlKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCwgXFx1MDAyNmN0eF93YWl0KTtcXG4gXFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMjMyLDcgKzI1MSw5IEBAIHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXFxuIFxcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGYtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0c2lnc2V0X3Qgc2lnbWFzaztcXG4gXFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcdHNpZ21hc2sgPSBjdHgtXFx1MDAzZXNpZ21hc2s7XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gXFx0c2lnbm90c2V0KFxcdTAwMjZzaWdtYXNrKTtcXG4gXFx0cmVuZGVyX3NpZ3NldF90KG0sIFxcXCJzaWdtYXNrOlxcXFx0XFxcIiwgXFx1MDAyNnNpZ21hc2spO1xcbiB9XFxuQEAgLTI2OCw2ICsyODksOCBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKVxcbiBcXHRcXHRpZiAoIWN0eClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbitcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2Y3R4LVxcdTAwM2V3cWgpO1xcbiBcXHRcXHRjdHgtXFx1MDAzZXNpZ21hc2sgPSAqbWFzaztcXG4gXFxuIFxcdFxcdGZkID0gRkRfQUREKGZsYWdzIFxcdTAwMjYgT19DTE9FWEVDLFxcbkBAIC0yODYsMTEgKzMwOSwxMSBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKVxcbiBcXHRcXHRjdHggPSBmZF9maWxlKGYpLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdFxcdGlmIChmZF9maWxlKGYpLVxcdTAwM2VmX29wICE9IFxcdTAwMjZzaWduYWxmZF9mb3BzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGN0eC1cXHUwMDNlc2lnbWFzayA9ICptYXNrO1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRcXHR3YWtlX3VwKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgpO1xcbitcXHRcXHR3YWtlX3VwKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB1ZmQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcXG5pbmRleCAzZjMzOTg2NWEzYjZlLi41Y2FjNTMyZDQ5YWU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcXG5AQCAtMSwzICsxLDQgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuIG1hbmdsZV91Y19zaWdtYXNrXFxuIHNhc1xcbitzaWduYWxmZF9tYXNrX3dha2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlXFxuaW5kZXggZTBiZjcwNThkMTljOS4uMDBmMWU5NmM5MmM0ZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcXG5AQCAtMiw2ICsyLDYgQEBcXG4gQ0ZMQUdTID0gLVdhbGxcXG4gVEVTVF9HRU5fUFJPR1MgPSBtYW5nbGVfdWNfc2lnbWFza1xcbiBURVNUX0dFTl9QUk9HUyArPSBzYXNcXG4rVEVTVF9HRU5fUFJPR1MgKz0gc2lnbmFsZmRfbWFza193YWtlXFxuIFxcbiBpbmNsdWRlIC4uL2xpYi5ta1xcbi1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zZTYwNDI0YjllYzllXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuY1xcbkBAIC0wLDAgKzEsMjY2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc2lnbmFsZmQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfYWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnB0ciA9IGJ1ZjtcXG4rXFxuK1xcdHdoaWxlIChsZW4pIHtcXG4rXFx0XFx0c3NpemVfdCByZXQgPSB3cml0ZShmZCwgcHRyLCBsZW4pO1xcbitcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0aWYgKGVycm5vID09IEVJTlRSKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwdHIgKz0gcmV0O1xcbitcXHRcXHRsZW4gLT0gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByZWFkX2FsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRjaGFyICpwdHIgPSBidWY7XFxuK1xcbitcXHR3aGlsZSAobGVuKSB7XFxuK1xcdFxcdHNzaXplX3QgcmV0ID0gcmVhZChmZCwgcHRyLCBsZW4pO1xcbitcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0aWYgKGVycm5vID09IEVJTlRSKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0XFx0cHRyICs9IHJldDtcXG4rXFx0XFx0bGVuIC09IHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGtpbGxfYW5kX3JlYXAocGlkX3QgcGlkKVxcbit7XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHRpZiAocGlkIFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGtpbGwocGlkLCBTSUdLSUxMKTtcXG4rXFx0d2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHdhaXRfcmVzdWx0KGludCBmZCwgaW50IHRpbWVvdXRfbXMpXFxuK3tcXG4rXFx0c3RydWN0IHBvbGxmZCBwZmQgPSB7XFxuK1xcdFxcdC5mZCA9IGZkLFxcbitcXHRcXHQuZXZlbnRzID0gUE9MTElOLFxcbitcXHR9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyZXQgPSBwb2xsKFxcdTAwMjZwZmQsIDEsIHRpbWVvdXRfbXMpO1xcbitcXHR9IHdoaWxlIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlRSKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWRfdCBwaWQsIGludCBzZmQpXFxuK3tcXG4rXFx0Y2hhciBwYXRoWzY0XTtcXG4rXFx0Y2hhciBidWZbMjU2XTtcXG4rXFx0bG9uZyBucjtcXG4rXFx0dW5zaWduZWQgbG9uZyBhcmcwO1xcbitcXHRGSUxFICpmcDtcXG4rXFx0aW50IGluX3JlYWQgPSAwO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiL3Byb2MvJWQvc3lzY2FsbFxcXCIsIHBpZCk7XFxuK1xcdGZwID0gZm9wZW4ocGF0aCwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmcCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKVxcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzc2NhbmYoYnVmLCBcXFwiJWxkICVseFxcXCIsIFxcdTAwMjZuciwgXFx1MDAyNmFyZzApID09IDIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5yID09IF9fTlJfcmVhZCBcXHUwMDI2XFx1MDAyNiBhcmcwID09ICh1bnNpZ25lZCBsb25nKXNmZClcXG4rXFx0XFx0aW5fcmVhZCA9IDE7XFxuK1xcbitcXHRmY2xvc2UoZnApO1xcbitcXHRyZXR1cm4gaW5fcmVhZDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3YWl0X2Zvcl9jaGlsZF9ibG9jayhwaWRfdCBwaWQsIGludCBzZmQsIGludCB0aW1lb3V0X21zKVxcbit7XFxuK1xcdGludCB3YWl0ZWRfbXMgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKHdhaXRlZF9tcyBcXHUwMDNjIHRpbWVvdXRfbXMpIHtcXG4rXFx0XFx0cmV0ID0gY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWQsIHNmZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHR1c2xlZXAoMTAwMDApO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0dXNsZWVwKDEwMDApO1xcbitcXHRcXHR3YWl0ZWRfbXMrKztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvIGZkc2k7XFxuK1xcdHNpZ3NldF90IGJsb2NrZWQsIGluaXRpYWxfbWFzaywgdXBkYXRlZF9tYXNrO1xcbitcXHRpbnQgcmVhZHlfcGlwZVsyXSwgc3RhcnRfcGlwZVsyXSwgcmVzdWx0X3BpcGVbMl07XFxuK1xcdGludCBzZmQsIHNpZ25vLCBzdGF0dXM7XFxuK1xcdHBpZF90IGNoaWxkO1xcbitcXHRjaGFyIHJlYWR5LCBzdGFydDtcXG4rXFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oMSk7XFxuK1xcbitcXHRzaWdlbXB0eXNldChcXHUwMDI2YmxvY2tlZCk7XFxuK1xcdHNpZ2FkZHNldChcXHUwMDI2YmxvY2tlZCwgU0lHVVNSMSk7XFxuK1xcdHNpZ2FkZHNldChcXHUwMDI2YmxvY2tlZCwgU0lHVVNSMik7XFxuK1xcdGlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIFxcdTAwMjZibG9ja2VkLCBOVUxMKSlcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJzaWdwcm9jbWFza1xcXCIpO1xcbitcXG4rXFx0c2lnZW1wdHlzZXQoXFx1MDAyNmluaXRpYWxfbWFzayk7XFxuK1xcdHNpZ2FkZHNldChcXHUwMDI2aW5pdGlhbF9tYXNrLCBTSUdVU1IxKTtcXG4rXFx0c2ZkID0gc2lnbmFsZmQoLTEsIFxcdTAwMjZpbml0aWFsX21hc2ssIDApO1xcbitcXHRpZiAoc2ZkIFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJzaWduYWxmZFxcXCIpO1xcbitcXG4rXFx0aWYgKHBpcGUocmVhZHlfcGlwZSkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicGlwZShyZWFkeSlcXFwiKTtcXG4rXFx0aWYgKHBpcGUoc3RhcnRfcGlwZSkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicGlwZShzdGFydClcXFwiKTtcXG4rXFx0aWYgKHBpcGUocmVzdWx0X3BpcGUpKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcInBpcGUocmVzdWx0KVxcXCIpO1xcbitcXG4rXFx0Y2hpbGQgPSBmb3JrKCk7XFxuK1xcdGlmIChjaGlsZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwiZm9ya1xcXCIpO1xcbitcXG4rXFx0aWYgKGNoaWxkID09IDApIHtcXG4rXFx0XFx0Y2xvc2UocmVhZHlfcGlwZVswXSk7XFxuK1xcdFxcdGNsb3NlKHN0YXJ0X3BpcGVbMV0pO1xcbitcXHRcXHRjbG9zZShyZXN1bHRfcGlwZVswXSk7XFxuK1xcbitcXHRcXHRyZWFkeSA9ICdSJztcXG4rXFx0XFx0aWYgKHdyaXRlX2FsbChyZWFkeV9waXBlWzFdLCBcXHUwMDI2cmVhZHksIHNpemVvZihyZWFkeSkpKVxcbitcXHRcXHRcXHRfZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXG4rXFx0XFx0aWYgKHJlYWRfYWxsKHN0YXJ0X3BpcGVbMF0sIFxcdTAwMjZzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpXFxuK1xcdFxcdFxcdF9leGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmZkc2ksIDAsIHNpemVvZihmZHNpKSk7XFxuK1xcdFxcdGlmIChyZWFkX2FsbChzZmQsIFxcdTAwMjZmZHNpLCBzaXplb2YoZmRzaSkpKVxcbitcXHRcXHRcXHRfZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXG4rXFx0XFx0c2lnbm8gPSBmZHNpLnNzaV9zaWdubztcXG4rXFx0XFx0aWYgKHdyaXRlX2FsbChyZXN1bHRfcGlwZVsxXSwgXFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSlcXG4rXFx0XFx0XFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFxuK1xcdFxcdF9leGl0KEVYSVRfU1VDQ0VTUyk7XFxuK1xcdH1cXG4rXFxuK1xcdGNsb3NlKHJlYWR5X3BpcGVbMV0pO1xcbitcXHRjbG9zZShzdGFydF9waXBlWzBdKTtcXG4rXFx0Y2xvc2UocmVzdWx0X3BpcGVbMV0pO1xcbitcXG4rXFx0aWYgKHJlYWRfYWxsKHJlYWR5X3BpcGVbMF0sIFxcdTAwMjZyZWFkeSwgc2l6ZW9mKHJlYWR5KSkpIHtcXG4rXFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiY2hpbGQgZGlkIG5vdCByZWFjaCBibG9ja2luZyByZWFkXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGtpbGwoY2hpbGQsIFNJR1VTUjIpKSB7XFxuK1xcdFxcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcImtpbGwoU0lHVVNSMilcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0c3RhcnQgPSAnUyc7XFxuK1xcdGlmICh3cml0ZV9hbGwoc3RhcnRfcGlwZVsxXSwgXFx1MDAyNnN0YXJ0LCBzaXplb2Yoc3RhcnQpKSkge1xcbitcXHRcXHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJjb3VsZCBub3QgcmVsZWFzZSBjaGlsZCBpbnRvIHNpZ25hbGZkIHJlYWRcXFxcblxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRzdGF0dXMgPSB3YWl0X2Zvcl9jaGlsZF9ibG9jayhjaGlsZCwgc2ZkLCAxMDAwKTtcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdGlmIChzdGF0dXMgPT0gLTEpXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCIvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9zeXNjYWxsIGlzIHVuYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJjaGlsZCBkaWQgbm90IGJsb2NrIGluIHNpZ25hbGZkIHJlYWRcXFxcblxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRzaWdlbXB0eXNldChcXHUwMDI2dXBkYXRlZF9tYXNrKTtcXG4rXFx0c2lnYWRkc2V0KFxcdTAwMjZ1cGRhdGVkX21hc2ssIFNJR1VTUjIpO1xcbitcXHRpZiAoc2lnbmFsZmQoc2ZkLCBcXHUwMDI2dXBkYXRlZF9tYXNrLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwic2lnbmFsZmQocmVjb25maWd1cmUpXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh3YWl0X3Jlc3VsdChyZXN1bHRfcGlwZVswXSwgMTAwMCkgPT0gMSkge1xcbitcXHRcXHRpZiAocmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sIFxcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkpIHtcXG4rXFx0XFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiY2hpbGQgd2FrZXVwIGRpZCBub3QgY2FycnkgYSBzaWduYWxcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAod2FpdHBpZChjaGlsZCwgXFx1MDAyNnN0YXR1cywgMCkgIT0gY2hpbGQpIHtcXG4rXFx0XFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwid2FpdHBpZFxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQoc2lnbm8gPT0gU0lHVVNSMiBcXHUwMDI2XFx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLFxcbitcXHRcXHRcXHRcXHQgXFxcInNoYXJlZCBzaWduYWxmZCB3YWtldXAgYWZ0ZXIgbWFzayB1cGRhdGVcXFxcblxcXCIpO1xcbitcXHRcXHRrc2Z0X2V4aXRfcGFzcygpO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCdWdneSBrZXJuZWxzIGxlYXZlIHRoZSBjaGlsZCBhc2xlZXAgdW50aWwgYW4gdW5yZWxhdGVkIHNpZ25hbCBoaXRzXFxuK1xcdCAqIHRoZSBjaGlsZCdzIHNpZ25hbGZkIHdhaXRxdWV1ZS4gU0lHVVNSMSBkb2VzIG5vdCBtYXRjaCB0aGUgdXBkYXRlZFxcbitcXHQgKiBzaWduYWxmZCBtYXNrLCBzbyBhIHN1Y2Nlc3NmdWwgcmVhZCBvZiBTSUdVU1IyIGFmdGVyIHRoaXMgbnVkZ2VcXG4rXFx0ICogZGVtb25zdHJhdGVzIHRoZSBtaXNzZWQgd2FrZXVwLlxcbitcXHQgKi9cXG4rXFx0aWYgKGtpbGwoY2hpbGQsIFNJR1VTUjEpKSB7XFxuK1xcdFxcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcImtpbGwoU0lHVVNSMSlcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHdhaXRfcmVzdWx0KHJlc3VsdF9waXBlWzBdLCAxMDAwKSA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sIFxcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHdhaXRwaWQoY2hpbGQsIFxcdTAwMjZzdGF0dXMsIDApID09IGNoaWxkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzaWdubyA9PSBTSUdVU1IyIFxcdTAwMjZcXHUwMDI2IFdJRkVYSVRFRChzdGF0dXMpIFxcdTAwMjZcXHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCkge1xcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXFxcIm1hc2sgdXBkYXRlIG1pc3NlZCBhIHNoYXJlZCBzaWduYWxmZCB3YWl0ZXJcXFxcblxcXCIpO1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2hpbGQgd29rZSBvbmx5IGFmdGVyIGFuIHVucmVsYXRlZCBTSUdVU1IxXFxcXG5cXFwiKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4rXFx0fVxcbitcXG4rXFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiY2hpbGQgcmVtYWluZWQgYmxvY2tlZCBhZnRlciBzaWduYWxmZCByZWNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQzOjQxLjA3OTA1ODA5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODI1ODU1OTI4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0lHTkFMRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaWduYWxmZF9wb2xsXCIsXG4gICAgXCJzaWduYWxmZF9kZXF1ZXVlXCIsXG4gICAgXCJzaWduYWxmZF9yZWxlYXNlXCIsXG4gICAgXCJkb19zaWduYWxmZDRcIixcbiAgICBcInNpZ25hbGZkX2NsZWFudXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoYW5kbGluZyBpbiBzaWduYWxmZCAoZnMvc2lnbmFsZmQuYykuIEluIHBhcnRpY3VsYXIsIGl0IGludHJvZHVjZXMgY3R4LWxldmVsIGxvY2tpbmcgYW5kIHdhaXQgcXVldWUgaGVhZCwgdXBkYXRpbmcgc2lnbmFsZmRfcG9sbCwgc2lnbmFsZmRfZGVxdWV1ZSwgc2lnbmFsZmRfcmVsZWFzZSwgYW5kIGRvX3NpZ25hbGZkNCB0byBzdXBwb3J0IHdha2luZyB3YWl0ZXJzIHVwb24gc2lnbmFsZmQgbWFzayB1cGRhdGVzIGFjcm9zcyB0aHJlYWRzL3Byb2Nlc3Nlcy4gVGhpcyBpcyBjb3JlLCByZWFjaGFibGUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYTkwNmUxNjVhMGE3MzdkZmZlZmM0OTAyOTA2MDVmNDcwMzAzZTIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6NDM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zaWduYWxmZC5jIGIvZnMvc2lnbmFsZmQuY1xuaW5kZXggZGZmNTM3NDVlMzUyNC4uNTIzYzNhNmRjNTY1OSAxMDA2NDRcbi0tLSBhL2ZzL3NpZ25hbGZkLmNcbisrKyBiL2ZzL3NpZ25hbGZkLmNcbkBAIC0yNyw2ICsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbm9uX2lub2Rlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbkBAIC0zOSwxMiArNDAsMTkgQEAgdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZClcbiB9XG4gXG4gc3RydWN0IHNpZ25hbGZkX2N0eCB7XG4rXHQvKiBTZXJpYWxpemVzIHNoYXJlZCBtYXNrIHVwZGF0ZXMgd2l0aCBmaWxlLWxvY2FsIHdhaXRlciB3YWtldXBzLiAqL1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3Qgd3FoO1xuK1x0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdHNpZ3NldF90IHNpZ21hc2s7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHNpZ25hbGZkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0a2ZyZWUoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuK1x0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXG4rXHR3YWtlX3VwX3BvbGxmcmVlKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuK1x0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01MywxNCArNjEsMTcgQEAgc3RhdGljIF9fcG9sbF90IHNpZ25hbGZkX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXG4gXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdF9fcG9sbF90IGV2ZW50cyA9IDA7XG4gXG4rXHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2Y3R4LVx1MDAzZXdxaCwgd2FpdCk7XG4gXHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaCwgd2FpdCk7XG4gXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiBcdGlmIChuZXh0X3NpZ25hbChcdTAwMjZjdXJyZW50LVx1MDAzZXBlbmRpbmcsIFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrKSB8fFxuIFx0ICAgIG5leHRfc2lnbmFsKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nLFxuIFx0XHRcdFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrKSlcbiBcdFx0ZXZlbnRzIHw9IEVQT0xMSU47XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiBldmVudHM7XG4gfVxuQEAgLTE1Nyw4ICsxNjgsMTAgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm9cbiBcdGVudW0gcGlkX3R5cGUgdHlwZTtcbiBcdHNzaXplX3QgcmV0O1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4rXHRERUNMQVJFX1dBSVRRVUVVRShjdHhfd2FpdCwgY3VycmVudCk7XG4gXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiBcdHJldCA9IGRlcXVldWVfc2lnbmFsKFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrLCBpbmZvLCBcdTAwMjZ0eXBlKTtcbiBcdHN3aXRjaCAocmV0KSB7XG4gXHRjYXNlIDA6XG5AQCAtMTY3LDEwICsxODAsMTIgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm9cbiBcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRkZWZhdWx0OlxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4rXHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZjdHgtXHUwMDNld3FoLCBcdTAwMjZjdHhfd2FpdCk7XG4gXHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbiBcdGZvciAoOzspIHtcbiBcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbkBAIC0xODEsMTMgKzE5NiwxNyBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0XHRcdHJldCA9IC1FUkVTVEFSVFNZUztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRcdHNjaGVkdWxlKCk7XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiBcdH1cbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFxuIFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaCwgXHUwMDI2d2FpdCk7XG4rXHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZjdHgtXHUwMDNld3FoLCBcdTAwMjZjdHhfd2FpdCk7XG4gXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTIzMiw3ICsyNTEsOSBAQCBzdGF0aWMgdm9pZCBzaWduYWxmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxuIFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZi1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRzaWdzZXRfdCBzaWdtYXNrO1xuIFxuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRzaWdtYXNrID0gY3R4LVx1MDAzZXNpZ21hc2s7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0c2lnbm90c2V0KFx1MDAyNnNpZ21hc2spO1xuIFx0cmVuZGVyX3NpZ3NldF90KG0sIFwic2lnbWFzazpcXHRcIiwgXHUwMDI2c2lnbWFzayk7XG4gfVxuQEAgLTI2OCw2ICsyODksOCBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKVxuIFx0XHRpZiAoIWN0eClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuK1x0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuIFxuIFx0XHRmZCA9IEZEX0FERChmbGFncyBcdTAwMjYgT19DTE9FWEVDLFxuQEAgLTI4NiwxMSArMzA5LDExIEBAIHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXG4gXHRcdGN0eCA9IGZkX2ZpbGUoZiktXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0XHRpZiAoZmRfZmlsZShmKS1cdTAwM2VmX29wICE9IFx1MDAyNnNpZ25hbGZkX2ZvcHMpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdFx0Y3R4LVx1MDAzZXNpZ21hc2sgPSAqbWFzaztcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0d2FrZV91cChcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoKTtcbitcdFx0d2FrZV91cChcdTAwMjZjdHgtXHUwMDNld3FoKTtcbiBcdH1cbiBcbiBcdHJldHVybiB1ZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZVxuaW5kZXggM2YzMzk4NjVhM2I2ZS4uNWNhYzUzMmQ0OWFlNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZVxuQEAgLTEsMyArMSw0IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gbWFuZ2xlX3VjX3NpZ21hc2tcbiBzYXNcbitzaWduYWxmZF9tYXNrX3dha2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcbmluZGV4IGUwYmY3MDU4ZDE5YzkuLjAwZjFlOTZjOTJjNGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZVxuQEAgLTIsNiArMiw2IEBAXG4gQ0ZMQUdTID0gLVdhbGxcbiBURVNUX0dFTl9QUk9HUyA9IG1hbmdsZV91Y19zaWdtYXNrXG4gVEVTVF9HRU5fUFJPR1MgKz0gc2FzXG4rVEVTVF9HRU5fUFJPR1MgKz0gc2lnbmFsZmRfbWFza193YWtlXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbi1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zZTYwNDI0YjllYzllXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmNcbkBAIC0wLDAgKzEsMjY2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbitcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3NpZ25hbGZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbitcbitzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjb25zdCBjaGFyICpwdHIgPSBidWY7XG4rXG4rXHR3aGlsZSAobGVuKSB7XG4rXHRcdHNzaXplX3QgcmV0ID0gd3JpdGUoZmQsIHB0ciwgbGVuKTtcbitcbitcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1xuK1x0XHRwdHIgKz0gcmV0O1xuK1x0XHRsZW4gLT0gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVhZF9hbGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciAqcHRyID0gYnVmO1xuK1xuK1x0d2hpbGUgKGxlbikge1xuK1x0XHRzc2l6ZV90IHJldCA9IHJlYWQoZmQsIHB0ciwgbGVuKTtcbitcbitcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1x0XHRpZiAocmV0ID09IDApXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1xuK1x0XHRwdHIgKz0gcmV0O1xuK1x0XHRsZW4gLT0gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtpbGxfYW5kX3JlYXAocGlkX3QgcGlkKVxuK3tcbitcdGludCBzdGF0dXM7XG4rXG4rXHRpZiAocGlkIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuK1x0d2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd2FpdF9yZXN1bHQoaW50IGZkLCBpbnQgdGltZW91dF9tcylcbit7XG4rXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcbitcdFx0LmZkID0gZmQsXG4rXHRcdC5ldmVudHMgPSBQT0xMSU4sXG4rXHR9O1xuK1x0aW50IHJldDtcbitcbitcdGRvIHtcbitcdFx0cmV0ID0gcG9sbChcdTAwMjZwZmQsIDEsIHRpbWVvdXRfbXMpO1xuK1x0fSB3aGlsZSAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGNoaWxkX2luX3NpZ25hbGZkX3JlYWQocGlkX3QgcGlkLCBpbnQgc2ZkKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRjaGFyIGJ1ZlsyNTZdO1xuK1x0bG9uZyBucjtcbitcdHVuc2lnbmVkIGxvbmcgYXJnMDtcbitcdEZJTEUgKmZwO1xuK1x0aW50IGluX3JlYWQgPSAwO1xuK1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkL3N5c2NhbGxcIiwgcGlkKTtcbitcdGZwID0gZm9wZW4ocGF0aCwgXCJyXCIpO1xuK1x0aWYgKCFmcCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKVxuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNzY2FuZihidWYsIFwiJWxkICVseFwiLCBcdTAwMjZuciwgXHUwMDI2YXJnMCkgPT0gMiBcdTAwMjZcdTAwMjZcbitcdCAgICBuciA9PSBfX05SX3JlYWQgXHUwMDI2XHUwMDI2IGFyZzAgPT0gKHVuc2lnbmVkIGxvbmcpc2ZkKVxuK1x0XHRpbl9yZWFkID0gMTtcbitcbitcdGZjbG9zZShmcCk7XG4rXHRyZXR1cm4gaW5fcmVhZDtcbit9XG4rXG4rc3RhdGljIGludCB3YWl0X2Zvcl9jaGlsZF9ibG9jayhwaWRfdCBwaWQsIGludCBzZmQsIGludCB0aW1lb3V0X21zKVxuK3tcbitcdGludCB3YWl0ZWRfbXMgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHdoaWxlICh3YWl0ZWRfbXMgXHUwMDNjIHRpbWVvdXRfbXMpIHtcbitcdFx0cmV0ID0gY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWQsIHNmZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuK1x0XHRcdHVzbGVlcCgxMDAwMCk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcbitcdFx0dXNsZWVwKDEwMDApO1xuK1x0XHR3YWl0ZWRfbXMrKztcbitcdH1cbitcbitcdHJldHVybiAtMTtcbit9XG4rXG4raW50IG1haW4odm9pZClcbit7XG4rXHRzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyBmZHNpO1xuK1x0c2lnc2V0X3QgYmxvY2tlZCwgaW5pdGlhbF9tYXNrLCB1cGRhdGVkX21hc2s7XG4rXHRpbnQgcmVhZHlfcGlwZVsyXSwgc3RhcnRfcGlwZVsyXSwgcmVzdWx0X3BpcGVbMl07XG4rXHRpbnQgc2ZkLCBzaWdubywgc3RhdHVzO1xuK1x0cGlkX3QgY2hpbGQ7XG4rXHRjaGFyIHJlYWR5LCBzdGFydDtcbitcbitcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRrc2Z0X3NldF9wbGFuKDEpO1xuK1xuK1x0c2lnZW1wdHlzZXQoXHUwMDI2YmxvY2tlZCk7XG4rXHRzaWdhZGRzZXQoXHUwMDI2YmxvY2tlZCwgU0lHVVNSMSk7XG4rXHRzaWdhZGRzZXQoXHUwMDI2YmxvY2tlZCwgU0lHVVNSMik7XG4rXHRpZiAoc2lncHJvY21hc2soU0lHX0JMT0NLLCBcdTAwMjZibG9ja2VkLCBOVUxMKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwic2lncHJvY21hc2tcIik7XG4rXG4rXHRzaWdlbXB0eXNldChcdTAwMjZpbml0aWFsX21hc2spO1xuK1x0c2lnYWRkc2V0KFx1MDAyNmluaXRpYWxfbWFzaywgU0lHVVNSMSk7XG4rXHRzZmQgPSBzaWduYWxmZCgtMSwgXHUwMDI2aW5pdGlhbF9tYXNrLCAwKTtcbitcdGlmIChzZmQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInNpZ25hbGZkXCIpO1xuK1xuK1x0aWYgKHBpcGUocmVhZHlfcGlwZSkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInBpcGUocmVhZHkpXCIpO1xuK1x0aWYgKHBpcGUoc3RhcnRfcGlwZSkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInBpcGUoc3RhcnQpXCIpO1xuK1x0aWYgKHBpcGUocmVzdWx0X3BpcGUpKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJwaXBlKHJlc3VsdClcIik7XG4rXG4rXHRjaGlsZCA9IGZvcmsoKTtcbitcdGlmIChjaGlsZCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwiZm9ya1wiKTtcbitcbitcdGlmIChjaGlsZCA9PSAwKSB7XG4rXHRcdGNsb3NlKHJlYWR5X3BpcGVbMF0pO1xuK1x0XHRjbG9zZShzdGFydF9waXBlWzFdKTtcbitcdFx0Y2xvc2UocmVzdWx0X3BpcGVbMF0pO1xuK1xuK1x0XHRyZWFkeSA9ICdSJztcbitcdFx0aWYgKHdyaXRlX2FsbChyZWFkeV9waXBlWzFdLCBcdTAwMjZyZWFkeSwgc2l6ZW9mKHJlYWR5KSkpXG4rXHRcdFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcbitcbitcdFx0aWYgKHJlYWRfYWxsKHN0YXJ0X3BpcGVbMF0sIFx1MDAyNnN0YXJ0LCBzaXplb2Yoc3RhcnQpKSlcbitcdFx0XHRfZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0XHRtZW1zZXQoXHUwMDI2ZmRzaSwgMCwgc2l6ZW9mKGZkc2kpKTtcbitcdFx0aWYgKHJlYWRfYWxsKHNmZCwgXHUwMDI2ZmRzaSwgc2l6ZW9mKGZkc2kpKSlcbitcdFx0XHRfZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0XHRzaWdubyA9IGZkc2kuc3NpX3NpZ25vO1xuK1x0XHRpZiAod3JpdGVfYWxsKHJlc3VsdF9waXBlWzFdLCBcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkpXG4rXHRcdFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcbitcbitcdFx0X2V4aXQoRVhJVF9TVUNDRVNTKTtcbitcdH1cbitcbitcdGNsb3NlKHJlYWR5X3BpcGVbMV0pO1xuK1x0Y2xvc2Uoc3RhcnRfcGlwZVswXSk7XG4rXHRjbG9zZShyZXN1bHRfcGlwZVsxXSk7XG4rXG4rXHRpZiAocmVhZF9hbGwocmVhZHlfcGlwZVswXSwgXHUwMDI2cmVhZHksIHNpemVvZihyZWFkeSkpKSB7XG4rXHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjaGlsZCBkaWQgbm90IHJlYWNoIGJsb2NraW5nIHJlYWRcXG5cIik7XG4rXHR9XG4rXG4rXHRpZiAoa2lsbChjaGlsZCwgU0lHVVNSMikpIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcImtpbGwoU0lHVVNSMilcIik7XG4rXHR9XG4rXG4rXHRzdGFydCA9ICdTJztcbitcdGlmICh3cml0ZV9hbGwoc3RhcnRfcGlwZVsxXSwgXHUwMDI2c3RhcnQsIHNpemVvZihzdGFydCkpKSB7XG4rXHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjb3VsZCBub3QgcmVsZWFzZSBjaGlsZCBpbnRvIHNpZ25hbGZkIHJlYWRcXG5cIik7XG4rXHR9XG4rXG4rXHRzdGF0dXMgPSB3YWl0X2Zvcl9jaGlsZF9ibG9jayhjaGlsZCwgc2ZkLCAxMDAwKTtcbitcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGlmIChzdGF0dXMgPT0gLTEpXG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCIvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc3lzY2FsbCBpcyB1bmF2YWlsYWJsZVxcblwiKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiY2hpbGQgZGlkIG5vdCBibG9jayBpbiBzaWduYWxmZCByZWFkXFxuXCIpO1xuK1x0fVxuK1xuK1x0c2lnZW1wdHlzZXQoXHUwMDI2dXBkYXRlZF9tYXNrKTtcbitcdHNpZ2FkZHNldChcdTAwMjZ1cGRhdGVkX21hc2ssIFNJR1VTUjIpO1xuK1x0aWYgKHNpZ25hbGZkKHNmZCwgXHUwMDI2dXBkYXRlZF9tYXNrLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwic2lnbmFsZmQocmVjb25maWd1cmUpXCIpO1xuK1x0fVxuK1xuK1x0aWYgKHdhaXRfcmVzdWx0KHJlc3VsdF9waXBlWzBdLCAxMDAwKSA9PSAxKSB7XG4rXHRcdGlmIChyZWFkX2FsbChyZXN1bHRfcGlwZVswXSwgXHUwMDI2c2lnbm8sIHNpemVvZihzaWdubykpKSB7XG4rXHRcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiY2hpbGQgd2FrZXVwIGRpZCBub3QgY2FycnkgYSBzaWduYWxcXG5cIik7XG4rXHRcdH1cbitcbitcdFx0aWYgKHdhaXRwaWQoY2hpbGQsIFx1MDAyNnN0YXR1cywgMCkgIT0gY2hpbGQpIHtcbitcdFx0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJ3YWl0cGlkXCIpO1xuK1x0XHR9XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQoc2lnbm8gPT0gU0lHVVNSMiBcdTAwMjZcdTAwMjYgV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLFxuK1x0XHRcdFx0IFwic2hhcmVkIHNpZ25hbGZkIHdha2V1cCBhZnRlciBtYXNrIHVwZGF0ZVxcblwiKTtcbitcdFx0a3NmdF9leGl0X3Bhc3MoKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBCdWdneSBrZXJuZWxzIGxlYXZlIHRoZSBjaGlsZCBhc2xlZXAgdW50aWwgYW4gdW5yZWxhdGVkIHNpZ25hbCBoaXRzXG4rXHQgKiB0aGUgY2hpbGQncyBzaWduYWxmZCB3YWl0cXVldWUuIFNJR1VTUjEgZG9lcyBub3QgbWF0Y2ggdGhlIHVwZGF0ZWRcbitcdCAqIHNpZ25hbGZkIG1hc2ssIHNvIGEgc3VjY2Vzc2Z1bCByZWFkIG9mIFNJR1VTUjIgYWZ0ZXIgdGhpcyBudWRnZVxuK1x0ICogZGVtb25zdHJhdGVzIHRoZSBtaXNzZWQgd2FrZXVwLlxuK1x0ICovXG4rXHRpZiAoa2lsbChjaGlsZCwgU0lHVVNSMSkpIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcImtpbGwoU0lHVVNSMSlcIik7XG4rXHR9XG4rXG4rXHRpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXJlYWRfYWxsKHJlc3VsdF9waXBlWzBdLCBcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgd2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSA9PSBjaGlsZCBcdTAwMjZcdTAwMjZcbitcdCAgICBzaWdubyA9PSBTSUdVU1IyIFx1MDAyNlx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwKSB7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcIm1hc2sgdXBkYXRlIG1pc3NlZCBhIHNoYXJlZCBzaWduYWxmZCB3YWl0ZXJcXG5cIik7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2hpbGQgd29rZSBvbmx5IGFmdGVyIGFuIHVucmVsYXRlZCBTSUdVU1IxXFxuXCIpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuK1x0fVxuK1xuK1x0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjaGlsZCByZW1haW5lZCBibG9ja2VkIGFmdGVyIHNpZ25hbGZkIHJlY29uZmlndXJhdGlvblxcblwiKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0Mzo0MS4wNzkwNjA3NDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDY0NzI2MTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBzaWduYWxmZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzaWduYWxmZGAgcGF0Y2guIFRoZSBwcmltYXJ5IGZvY3VzIHNlZW1zIHRvIGJlIGFyb3VuZCBpbXByb3ZpbmcgdGhlIHNpZ25hbGZkIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpdCBoYW5kbGVzIHdhaXRpbmcgYW5kIHJlbGVhc2luZyByZXNvdXJjZXMuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIHByZXR0eSBmb2N1c2VkIG9uIHN5bmNocm9uaXphdGlvbiBhbmQgd2FrZS11cCBtZWNoYW5pc21zLCB3aGljaCBhcmUgYWx3YXlzIGNydWNpYWwgaW4gc2lnbmFsIGhhbmRsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cbkZpcnN0LCBhZGRpbmcgdGhhdCBgc3BpbmxvY2tfdCBsb2NrYCwgYHdhaXRfcXVldWVfaGVhZF90IHdxaGAsIGFuZCBgc3RydWN0IHJjdV9oZWFkIHJjdWAgdG8gdGhlIGBzaWduYWxmZF9jdHhgIHN0cnVjdCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhlc2UgY2xlYXJseSBwb2ludCB0byBlbmhhbmNlZCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIG1hbmFnZW1lbnQuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG5ldyBtZW1iZXJzIGFyZSB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuXG5cblRoZSBgc2lnbmFsZmRfcmVsZWFzZWAgZnVuY3Rpb24gbm93IHVzZXMgYHdha2VfdXBfcG9sbGZyZWVgIG9uIHRoZSBgY3R4LVx1MDAzZXdxaGAgYW5kIGNhbGxzIGBrZnJlZV9yY3VgLiBUaGlzIHN1Z2dlc3RzIGEgY2FyZWZ1bCBhcHByb2FjaCB0byBmcmVlaW5nIHRoZSBjb250ZXh0LCBsaWtlbHkgcmVsYXRlZCB0byBzYWZlbHkgcmVtb3ZpbmcgdGhlIHNpZ25hbGZkIHN0cnVjdHVyZSB3aGlsZSBtYWtpbmcgc3VyZSBvdGhlciBwcm9jZXNzZXMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gd29yayBvbiBhbnkgcmVsZXZhbnQgZXZlbnRzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3YWtlX3VwX3BvbGxmcmVlYCBpcyB1c2VkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSdzIG5vIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuXG5cblRoZSBgc2lnbmFsZmRfcG9sbGAgbW9kaWZpY2F0aW9uIHdpdGggYHBvbGxfd2FpdGAgYW5kIHRoZSBsb2NraW5nIGNoYW5nZXMgYXJlIHRoZSBtb3N0IGltcG9ydGFudC4gVGhlIGBzaWduYWxmZF9kZXF1ZXVlYCBpcyBldmVuIG1vcmUgc28sIHVzaW5nIGJvdGggYGN0eC1cdTAwM2V3cWhgIGFuZCBgc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWhgIHNlZW1zIGxpa2UgaXQgbXVzdCBiZSBjYXJlZnVsbHkgY29uc2lkZXJlZC4gSXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgbW92aW5nIHRvIHVzZSBhIHBlci1gc2lnbmFsZmRfY3R4YCB3YWl0IHF1ZXVlLCB3aXRoIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgcHJvY2VzcydzIHNpZ25hbCBoYW5kbGVyIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBsb2NraW5nIHRvIHNlZSBob3cgdGhpcyB3b3Jrcy5cblxuVGhlIGBzaWduYWxmZF9zaG93X2ZkaW5mb2AgY2hhbmdlLCBwYXJ0aWN1bGFybHkgdGhlIGxvY2tpbmcgaW4gdGhpcyBmdW5jdGlvbiwgaXMgaW1wb3J0YW50IGZvciBlbnN1cmluZyB0aGUgZGF0YSBkaXNwbGF5ZWQgaXMgY29uc2lzdGVudC4gYGRvX3NpZ25hbGZkNGAgaXMgYSBrZXkgcG9pbnQsIHRoZSBjaGFuZ2VzIHRvIGhvdyB0aGUgbWFzayBpcyB1cGRhdGVkIGFuZCB0aGUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBtZW1iZXJzIGFyZSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIGNhcmVmdWxseSBjb21wYXJlIHRoZSBvcmlnaW5hbCBjb2RlIHdpdGggdGhpcyB2ZXJzaW9uLiBJdCdzIGxpa2VseSB0aGF0IHRoZSBwYXRjaCBpcyBhaW1lZCB0byByZXNvbHZlIGEga25vd24gcmFjZSBvciBzeW5jaHJvbml6YXRpb24gaXNzdWUuIFRoZSBjaGFuZ2VzIGZyb20gYGN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWhgIHRvIGBjdHgtXHUwMDNld3FoYCBpbiBgZG9fc2lnbmFsZmQ0YCBpcyB0aGUga2V5IGNoYW5nZS5cblxuRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiB0aGF0IHNlbGZ0ZXN0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmNgIGlzIGV4Y2VsbGVudC4gVGhpcyBpcyB0aGUgcHJvb2YgaW4gdGhlIHB1ZGRpbmcsIGl0IHNob3VsZCB2YWxpZGF0ZSB0aGUgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBzZWxmdGVzdCBhY3R1YWxseSBjb3ZlcnMgdGhlIHNjZW5hcmlvcyB0aGUgcGF0Y2ggaXMgZGVzaWduZWQgZm9yLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGF0LCBhbmQgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBvcHRpb25zLCB0byBlbnN1cmUgbm8gaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjAxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MDUuNzI2MzI2Mjk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NDg3MTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0lHTkFMRkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MjY9b2JqLXlcXHRcXHRcXHRcXHQrPSBhbm9uX2lub2Rlcy5vXFxuZnMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX1NJR05BTEZEKVxcdFxcdCs9IHNpZ25hbGZkLm9cXG5mcy9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfVElNRVJGRClcXHRcXHQrPSB0aW1lcmZkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MDYuNjAxMjAyODMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NDYyMzcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIGFuZCBTSUdOQUxGRCAtIExldCdzIERpZyBJbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBTSUdOQUxGRGAgaXMgY29uZmlndXJlZC4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBidWlsZCBvcHRpb25zIGZvciB0aGUga2VybmVsIGFyZSBkZWZpbmVkLCBhbmQgYFNJR05BTEZEYCBpcyBkZWZpbml0ZWx5IHRoZSBraW5kIG9mIGZ1bmN0aW9uYWxpdHkgdGhhdCB3b3VsZCBiZSBjb250cm9sbGVkIGJ5IGEgS2NvbmZpZyBvcHRpb24uIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZShzKS4gSXQncyBwcm9iYWJseSBpbiBhIGxvY2F0aW9uIHJlbGF0ZWQgdG8gdGhlIHNpZ25hbCBoYW5kbGluZyBvciBzeXN0ZW0gY2FsbCBhcmVhcywgYnV0IEkgbWlnaHQgaGF2ZSB0byBkbyBzb21lIHNlYXJjaGluZyBpZiBpdCdzIG5lc3RlZCBkZWVwZXIuIE9uY2UgSSBmaW5kIGl0LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBvdGhlciBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYFNJR05BTEZEYCBiZWNvbWVzIGF2YWlsYWJsZT8gV2hhdCdzIHRoZSBkZWZhdWx0IHNldHRpbmcsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIGl0PyBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIFwiU0lHTkFMRkRcIiBhbmQgc2VlIHdoZXJlIHRoYXQgdGFrZXMgbWUuIEZyb20gdGhlcmUgSSdsbCBoYXZlIGEgZ29vZCBpZGVhIG9mIHdoaWNoIEtjb25maWcgZmlsZSBJIG5lZWQgdG8gbG9vayBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjA5LjQ2NTgyODkxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODc5MTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0lHTkFMRkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNz1jb25maWcgRVBPTExcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTEzLVxcbmluaXQvS2NvbmZpZzoxOTE0OmNvbmZpZyBTSUdOQUxGRFxcbmluaXQvS2NvbmZpZy0xOTE1LVxcdGJvb2wgXFxcIkVuYWJsZSBzaWduYWxmZCgpIHN5c3RlbSBjYWxsXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MDkuNTY0NjI5MTQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1NDUyNjg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIEkgdGhpbmsgdGhlIHJlbGV2YW50IHBhcnQgaXMgYXJvdW5kIGxpbmUgMTkxNCBpbiBgaW5pdC9LY29uZmlnYC4gTGV0J3MgcHVsbCB0aGF0IHVwIGFuZCBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIEl0J3MgbGlrZWx5IGEgY29tcGxleCBjb25kaXRpb25hbCwgbWF5YmUgd2l0aCBzb21lIGRlcGVuZGVuY2llcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBpdC4gR290dGEgcXVpY2tseSBnZXQgYSBncmlwIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhhdCBzZWN0aW9uLiBJJ20gaG9waW5nIEkgY2FuIGdldCB0aGlzIGZpZ3VyZWQgb3V0IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDoxMi40MTkxNjA1MDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MTA6XFx0XFx0aGVscFxcbjE5MTE6XFx0XFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJlIGJ1aWx0IHdpdGhvdXRcXG4xOTEyOlxcdFxcdCAgc3VwcG9ydCBmb3IgZXBvbGwgZmFtaWx5IG9mIHN5c3RlbSBjYWxscy5cXG4xOTEzOlxcdFxcbjE5MTQ6XFx0Y29uZmlnIFNJR05BTEZEXFxuMTkxNTpcXHRcXHRib29sIFxcXCJFbmFibGUgc2lnbmFsZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuMTkxNjpcXHRcXHRkZWZhdWx0IHlcXG4xOTE3OlxcdFxcdGhlbHBcXG4xOTE4OlxcdFxcdCAgRW5hYmxlIHRoZSBzaWduYWxmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIHJlY2VpdmUgc2lnbmFsc1xcbjE5MTk6XFx0XFx0ICBvbiBhIGZpbGUgZGVzY3JpcHRvci5cXG4xOTIwOlxcdFxcbjE5MjE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbjE5MjI6XFx0XFxuMTkyMzpcXHRjb25maWcgVElNRVJGRFxcbjE5MjQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRpbWVyZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuMTkyNTpcXHRcXHRkZWZhdWx0IHlcXG4xOTI2OlxcdFxcdGhlbHBcXG4xOTI3OlxcdFxcdCAgRW5hYmxlIHRoZSB0aW1lcmZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gcmVjZWl2ZSB0aW1lclxcbjE5Mjg6XFx0XFx0ICBldmVudHMgb24gYSBmaWxlIGRlc2NyaXB0b3IuXFxuMTkyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MTIuNDE5MzUxODQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMwNjQwNTQwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgZnMvc2lnbmFsZmQuY2AgdG8gVW5kZXJzdGFuZCBpdHMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCBhIHF1aWNrIHJlZnJlc2hlciBvbiB0aGUgYHNpZ25hbGZkYCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL3NpZ25hbGZkLmNgLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBmaWxlLiBLbm93aW5nIHRoZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIGBzaWduYWxmZGAgbWVjaGFuaXNtIGlzIHN0cnVjdHVyZWQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3Mgc2lnbmFsIGhhbmRsaW5nLCBhbmQgZ2VuZXJhbGx5IHdoYXQgdGhlIHJlbGV2YW50IGNvbnRyb2wgcG9pbnRzIGFyZS4gVGhpcyBxdWljayByZXZpZXcgaXMgaW1wb3J0YW50IGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpbXBsZW1lbnRhdGlvbiB3ZWxsIHRvIG1ha2UgcmVsZXZhbnQgY2hhbmdlcywgb3IgZGVidWcgYW4gaXNzdWUgcmVsYXRlZCB0byBgc2lnbmFsZmRgLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjI1LjQ4MzQwODQ1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc2lnbmFsZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqICBmcy9zaWduYWxmZC5jXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogIENvcHlyaWdodCAoQykgMjAwMyAgTGludXMgVG9ydmFsZHNcXG4gICA2OlxcdCAqXFxuICAgNzpcXHQgKiAgTW9uIE1hciA1LCAyMDA3OiBEYXZpZGUgTGliZW56aSBcXHUwMDNjZGF2aWRlbEB4bWFpbHNlcnZlci5vcmdcXHUwMDNlXFxuICAgODpcXHQgKiAgICAgIENoYW5nZWQgLVxcdTAwM2VyZWFkKCkgdG8gcmV0dXJuIGEgc2lnaW5mbyBzdHJjdHVyZSBpbnN0ZWFkIG9mIHNpZ25hbCBudW1iZXIuXFxuICAgOTpcXHQgKiAgICAgIEZpeGVkIGxvY2tpbmcgaW4gLVxcdTAwM2Vwb2xsKCkuXFxuICAxMDpcXHQgKiAgICAgIEFkZGVkIHNpZ2hhbmQtZGV0YWNoIG5vdGlmaWNhdGlvbi5cXG4gIDExOlxcdCAqICAgICAgQWRkZWQgZmQgcmUtdXNlIGluIHN5c19zaWduYWxmZCgpIHN5c2NhbGwuXFxuICAxMjpcXHQgKiAgICAgIE5vdyB1c2luZyBhbm9ueW1vdXMgaW5vZGUgc291cmNlLlxcbiAgMTM6XFx0ICogICAgICBUaGFua3MgdG8gT2xlZyBOZXN0ZXJvdiBmb3IgdXNlZnVsIGNvZGUgcmV2aWV3IGFuZCBzdWdnZXN0aW9ucy5cXG4gIDE0OlxcdCAqICAgICAgTW9yZSBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgZnJvbSBBcm5kIEJlcmdtYW5uLlxcbiAgMTU6XFx0ICogIFNhdCBNYXkgMTksIDIwMDc6IERhdmkgRS4gTS4gQXJuYXV0IFxcdTAwM2NkYXZpQGhheGVudC5jb20uYnJcXHUwMDNlXFxuICAxNjpcXHQgKiAgICAgIFJldHJpZXZlIG11bHRpcGxlIHNpZ25hbHMgd2l0aCBvbmUgcmVhZCgpIGNhbGxcXG4gIDE3OlxcdCAqICBTdW4gSnVsIDE1LCAyMDA3OiBEYXZpZGUgTGliZW56aSBcXHUwMDNjZGF2aWRlbEB4bWFpbHNlcnZlci5vcmdcXHUwMDNlXFxuICAxODpcXHQgKiAgICAgIEF0dGFjaCB0byB0aGUgc2lnaGFuZCBvbmx5IGR1cmluZyByZWFkKCkgYW5kIHBvbGwoKS5cXG4gIDE5OlxcdCAqL1xcbiAgMjA6XFx0XFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BvbGwuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAgMjY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDI4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaWduYWwuaFxcdTAwM2VcXG4gIDI5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAzMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGUuaFxcdTAwM2VcXG4gIDMxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbm9uX2lub2Rlcy5oXFx1MDAzZVxcbiAgMzI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbGZkLmhcXHUwMDNlXFxuICAzMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4gIDM0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX2ZzLmhcXHUwMDNlXFxuICAzNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGF0LmhcXHUwMDNlXFxuICAzNjpcXHRcXG4gIDM3OlxcdHZvaWQgc2lnbmFsZmRfY2xlYW51cChzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2hhbmQpXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHR3YWtlX3VwX3BvbGxmcmVlKFxcdTAwMjZzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgpO1xcbiAgNDA6XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHtcXG4gIDQzOlxcdFxcdC8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovXFxuICA0NDpcXHRcXHRzcGlubG9ja190IGxvY2s7XFxuICA0NTpcXHRcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xcbiAgNDc6XFx0XFx0c2lnc2V0X3Qgc2lnbWFzaztcXG4gIDQ4OlxcdH07XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gIDUxOlxcdHtcXG4gIDUyOlxcdFxcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0d2FrZV91cF9wb2xsZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2V3cWgpO1xcbiAgNTU6XFx0XFx0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcXG4gIDU2OlxcdFxcdHJldHVybiAwO1xcbiAgNTc6XFx0fVxcbiAgNTg6XFx0XFxuICA1OTpcXHRzdGF0aWMgX19wb2xsX3Qgc2lnbmFsZmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcXG4gIDYwOlxcdHtcXG4gIDYxOlxcdFxcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gIDYyOlxcdFxcdF9fcG9sbF90IGV2ZW50cyA9IDA7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdHBvbGxfd2FpdChmaWxlLCBcXHUwMDI2Y3R4LVxcdTAwM2V3cWgsIHdhaXQpO1xcbiAgNjU6XFx0XFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgsIHdhaXQpO1xcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAgNjg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4gIDY5OlxcdFxcdGlmIChuZXh0X3NpZ25hbChcXHUwMDI2Y3VycmVudC1cXHUwMDNlcGVuZGluZywgXFx1MDAyNmN0eC1cXHUwMDNlc2lnbWFzaykgfHxcXG4gIDcwOlxcdFxcdCAgICBuZXh0X3NpZ25hbChcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZyxcXG4gIDcxOlxcdFxcdFxcdFxcdFxcdTAwMjZjdHgtXFx1MDAzZXNpZ21hc2spKVxcbiAgNzI6XFx0XFx0XFx0ZXZlbnRzIHw9IEVQT0xMSU47XFxuICA3MzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuICA3NDpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdHJldHVybiBldmVudHM7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdC8qXFxuICA4MDpcXHQgKiBDb3BpZWQgZnJvbSBjb3B5X3NpZ2luZm9fdG9fdXNlcigpIGluIGtlcm5lbC9zaWduYWwuY1xcbiAgODE6XFx0ICovXFxuICA4MjpcXHRzdGF0aWMgaW50IHNpZ25hbGZkX2NvcHlpbmZvKHN0cnVjdCBpb3ZfaXRlciAqdG8sIGtlcm5lbF9zaWdpbmZvX3QgY29uc3QgKmtpbmZvKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0c3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gbmV3O1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKSAhPSAxMjgpO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHQvKlxcbiAgODk6XFx0XFx0ICogVW51c2VkIG1lbWJlcnMgc2hvdWxkIGJlIHplcm8gLi4uXFxuICA5MDpcXHRcXHQgKi9cXG4gIDkxOlxcdFxcdG1lbXNldChcXHUwMDI2bmV3LCAwLCBzaXplb2YobmV3KSk7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdC8qXFxuICA5NDpcXHRcXHQgKiBJZiB5b3UgY2hhbmdlIHNpZ2luZm9fdCBzdHJ1Y3R1cmUsIHBsZWFzZSBiZSBzdXJlXFxuICA5NTpcXHRcXHQgKiB0aGlzIGNvZGUgaXMgZml4ZWQgYWNjb3JkaW5nbHkuXFxuICA5NjpcXHRcXHQgKi9cXG4gIDk3OlxcdFxcdG5ldy5zc2lfc2lnbm8gPSBraW5mby1cXHUwMDNlc2lfc2lnbm87XFxuICA5ODpcXHRcXHRuZXcuc3NpX2Vycm5vID0ga2luZm8tXFx1MDAzZXNpX2Vycm5vO1xcbiAgOTk6XFx0XFx0bmV3LnNzaV9jb2RlICA9IGtpbmZvLVxcdTAwM2VzaV9jb2RlO1xcbiAxMDA6XFx0XFx0c3dpdGNoIChzaWdpbmZvX2xheW91dChraW5mby1cXHUwMDNlc2lfc2lnbm8sIGtpbmZvLVxcdTAwM2VzaV9jb2RlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDoyNS40ODM1MzEwMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MjE4NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgZnJvbSBgZnMvc2lnbmFsZmQuY2AsIHN1bW1hcml6ZWQgZnJvbSB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhcyBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gU2lnbmFsIEZpbGUgRGVzY3JpcHRvciBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gbGluZXMgMjAwIHRocm91Z2ggMzMwIG9mIGBmcy9zaWduYWxmZC5jYC4gVGhpcyBzZWN0aW9uIGxpa2VseSBob2xkcyB0aGUgY3J1eCBvZiBob3cgdGhlIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3IgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpbmNvbWluZyBzaWduYWxzIGFyZSBoYW5kbGVkIGFuZCBkZWxpdmVyZWQgd2hlbiByZWFkIGZyb20gdGhlIGZpbGUuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIGxvZ2ljIGZvciBzaWduYWwgcXVldWluZywgcGVyaGFwcyBzb21lIG1lY2hhbmlzbXMgZm9yIGZpbHRlcmluZyB3aGljaCBzaWduYWxzIGFyZSByZWxldmFudCwgYW5kIGRlZmluaXRlbHkgdGhlIHJlYWQoKSBpbXBsZW1lbnRhdGlvbi4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoZXkncmUgdXNpbmcgYSBzdGFuZGFyZCB3YWl0IHF1ZXVlIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGZvciBzaWduYWwgZGVsaXZlcnksIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJ20gYWxzbyBsb29raW5nIGZvciB0aGUgbG9ja2luZyBzdHJhdGVneSBlbXBsb3llZCBoZXJlOyBpdCdzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IGFuZCB0aGF0IHNpZ25hbHMgYXJlbid0IGxvc3Qgb3IgbWlzZGlyZWN0ZWQuIFRoaXMgcGFydCBpcyBnb2luZyB0byBnaXZlIG1lIHRoZSBmaW5lciBwb2ludHMsIGFuZCBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgZG9uZSBpdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MjcuOTc1NzIwMTUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zaWduYWxmZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAyMDE6XFx0XFx0XFx0c2NoZWR1bGUoKTtcXG4gMjAyOlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIDIwMzpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbiAyMDQ6XFx0XFx0fVxcbiAyMDU6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbiAyMDY6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbmFsZmRfd3FoLCBcXHUwMDI2d2FpdCk7XFxuIDIwOTpcXHRcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2Y3R4LVxcdTAwM2V3cWgsIFxcdTAwMjZjdHhfd2FpdCk7XFxuIDIxMDpcXHRcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHJldHVybiByZXQ7XFxuIDIxMzpcXHR9XFxuIDIxNDpcXHRcXG4gMjE1OlxcdC8qXFxuIDIxNjpcXHQgKiBSZXR1cm5zIGEgbXVsdGlwbGUgb2YgdGhlIHNpemUgb2YgYSBcXFwic3RydWN0IHNpZ25hbGZkX3NpZ2luZm9cXFwiLCBvciBhIG5lZ2F0aXZlXFxuIDIxNzpcXHQgKiBlcnJvciBjb2RlLiBUaGUgXFxcImNvdW50XFxcIiBwYXJhbWV0ZXIgbXVzdCBiZSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBhXFxuIDIxODpcXHQgKiBcXFwic3RydWN0IHNpZ25hbGZkX3NpZ2luZm9cXFwiLlxcbiAyMTk6XFx0ICovXFxuIDIyMDpcXHRzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbiAyMjE6XFx0e1xcbiAyMjI6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbiAyMjM6XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAyMjQ6XFx0XFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQodG8pO1xcbiAyMjU6XFx0XFx0c3NpemVfdCByZXQsIHRvdGFsID0gMDtcXG4gMjI2OlxcdFxcdGtlcm5lbF9zaWdpbmZvX3QgaW5mbztcXG4gMjI3OlxcdFxcdGJvb2wgbm9uYmxvY2s7XFxuIDIyODpcXHRcXG4gMjI5OlxcdFxcdGNvdW50IC89IHNpemVvZihzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyk7XFxuIDIzMDpcXHRcXHRpZiAoIWNvdW50KVxcbiAyMzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdG5vbmJsb2NrID0gZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0sgfHwgaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX05PV0FJVDtcXG4gMjM0OlxcdFxcdGRvIHtcXG4gMjM1OlxcdFxcdFxcdHJldCA9IHNpZ25hbGZkX2RlcXVldWUoY3R4LCBcXHUwMDI2aW5mbywgbm9uYmxvY2spO1xcbiAyMzY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjPSAwKSlcXG4gMjM3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMzg6XFx0XFx0XFx0cmV0ID0gc2lnbmFsZmRfY29weWluZm8odG8sIFxcdTAwMjZpbmZvKTtcXG4gMjM5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyNDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI0MTpcXHRcXHRcXHR0b3RhbCArPSByZXQ7XFxuIDI0MjpcXHRcXHRcXHRub25ibG9jayA9IDE7XFxuIDI0MzpcXHRcXHR9IHdoaWxlICgtLWNvdW50KTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cmV0dXJuIHRvdGFsID8gdG90YWw6IHJldDtcXG4gMjQ2OlxcdH1cXG4gMjQ3OlxcdFxcbiAyNDg6XFx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuIDI0OTpcXHRzdGF0aWMgdm9pZCBzaWduYWxmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxcbiAyNTA6XFx0e1xcbiAyNTE6XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZi1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAyNTI6XFx0XFx0c2lnc2V0X3Qgc2lnbWFzaztcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMjU1OlxcdFxcdHNpZ21hc2sgPSBjdHgtXFx1MDAzZXNpZ21hc2s7XFxuIDI1NjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIDI1NzpcXHRcXHRzaWdub3RzZXQoXFx1MDAyNnNpZ21hc2spO1xcbiAyNTg6XFx0XFx0cmVuZGVyX3NpZ3NldF90KG0sIFxcXCJzaWdtYXNrOlxcXFx0XFxcIiwgXFx1MDAyNnNpZ21hc2spO1xcbiAyNTk6XFx0fVxcbiAyNjA6XFx0I2VuZGlmXFxuIDI2MTpcXHRcXG4gMjYyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNpZ25hbGZkX2ZvcHMgPSB7XFxuIDI2MzpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG4gMjY0OlxcdFxcdC5zaG93X2ZkaW5mb1xcdD0gc2lnbmFsZmRfc2hvd19mZGluZm8sXFxuIDI2NTpcXHQjZW5kaWZcXG4gMjY2OlxcdFxcdC5yZWxlYXNlXFx0PSBzaWduYWxmZF9yZWxlYXNlLFxcbiAyNjc6XFx0XFx0LnBvbGxcXHRcXHQ9IHNpZ25hbGZkX3BvbGwsXFxuIDI2ODpcXHRcXHQucmVhZF9pdGVyXFx0PSBzaWduYWxmZF9yZWFkX2l0ZXIsXFxuIDI2OTpcXHRcXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG4gMjcwOlxcdH07XFxuIDI3MTpcXHRcXG4gMjcyOlxcdHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXFxuIDI3MzpcXHR7XFxuIDI3NDpcXHRcXHQvKiBDaGVjayB0aGUgU0ZEXyogY29uc3RhbnRzIGZvciBjb25zaXN0ZW5jeS4gICovXFxuIDI3NTpcXHRcXHRCVUlMRF9CVUdfT04oU0ZEX0NMT0VYRUMgIT0gT19DTE9FWEVDKTtcXG4gMjc2OlxcdFxcdEJVSUxEX0JVR19PTihTRkRfTk9OQkxPQ0sgIT0gT19OT05CTE9DSyk7XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IH4oU0ZEX0NMT0VYRUMgfCBTRkRfTk9OQkxPQ0spKVxcbiAyNzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdHNpZ2RlbHNldG1hc2sobWFzaywgc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpO1xcbiAyODI6XFx0XFx0c2lnbm90c2V0KG1hc2spO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRpZiAodWZkID09IC0xKSB7XFxuIDI4NTpcXHRcXHRcXHRpbnQgZmQ7XFxuIDI4NjpcXHRcXHRcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdFxcdGN0eCA9IGttYWxsb2Nfb2JqKCpjdHgpO1xcbiAyODk6XFx0XFx0XFx0aWYgKCFjdHgpXFxuIDI5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIDI5MzpcXHRcXHRcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCk7XFxuIDI5NDpcXHRcXHRcXHRjdHgtXFx1MDAzZXNpZ21hc2sgPSAqbWFzaztcXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0XFx0ZmQgPSBGRF9BREQoZmxhZ3MgXFx1MDAyNiBPX0NMT0VYRUMsXFxuIDI5NzpcXHRcXHRcXHRcXHQgICAgYW5vbl9pbm9kZV9nZXRmaWxlX2Ztb2RlKFxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJbc2lnbmFsZmRdXFxcIiwgXFx1MDAyNnNpZ25hbGZkX2ZvcHMsIGN0eCxcXG4gMjk5OlxcdFxcdFxcdFxcdFxcdCAgICBPX1JEV1IgfCAoZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKSwgRk1PREVfTk9XQUlUKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjI3Ljk3NTg0ODMxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzExNDg4NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHNpZ25hbGZkLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGNoZWNrIG91dCB0aG9zZSBzeXNjYWxsIGVudHJ5IHBvaW50cyB3aXRoaW4gYHNpZ25hbGZkLmNgLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIGhlcmUsIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHN5c3RlbSBjYWxsIGhhbmRsaW5nLiBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBrZXJuZWwgaXMgYWN0dWFsbHkgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIHRoZXNlIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3Igb3BlcmF0aW9ucy4gR290dGEgbWFwIHRoZSB1c2VyLXNwYWNlIGNhbGxzIHRvIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIEknbSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbnMsIHRoZSBhcmd1bWVudHMsIHRoZSBjaGVja3MsIGFsbCBvZiBpdC4gSSB3YW50IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgc2lnbmFsZmRgIGlzIHBsdW1iZWQgaW50byB0aGUgY29yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjMzLjI4NzMzOTYwNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc2lnbmFsZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0XFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuIDMwMTpcXHRcXHRcXHRcXHRyZXRhaW5fYW5kX251bGxfcHRyKGN0eCk7XFxuIDMwMjpcXHRcXHRcXHRyZXR1cm4gZmQ7XFxuIDMwMzpcXHRcXHR9IGVsc2Uge1xcbiAzMDQ6XFx0XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4O1xcbiAzMDU6XFx0XFxuIDMwNjpcXHRcXHRcXHRDTEFTUyhmZCwgZikodWZkKTtcXG4gMzA3OlxcdFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gMzA4OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBREY7XFxuIDMwOTpcXHRcXHRcXHRjdHggPSBmZF9maWxlKGYpLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDMxMDpcXHRcXHRcXHRpZiAoZmRfZmlsZShmKS1cXHUwMDNlZl9vcCAhPSBcXHUwMDI2c2lnbmFsZmRfZm9wcylcXG4gMzExOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTI6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMzEzOlxcdFxcdFxcdGN0eC1cXHUwMDNlc2lnbWFzayA9ICptYXNrO1xcbiAzMTQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRcXHR3YWtlX3VwKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCk7XFxuIDMxNzpcXHRcXHR9XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdHJldHVybiB1ZmQ7XFxuIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFNZU0NBTExfREVGSU5FNChzaWduYWxmZDQsIGludCwgdWZkLCBzaWdzZXRfdCBfX3VzZXIgKiwgdXNlcl9tYXNrLFxcbiAzMjM6XFx0XFx0XFx0c2l6ZV90LCBzaXplbWFzaywgaW50LCBmbGFncylcXG4gMzI0OlxcdHtcXG4gMzI1OlxcdFxcdHNpZ3NldF90IG1hc2s7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdGlmIChzaXplbWFzayAhPSBzaXplb2Yoc2lnc2V0X3QpKVxcbiAzMjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMyOTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNm1hc2ssIHVzZXJfbWFzaywgc2l6ZW9mKG1hc2spKSlcXG4gMzMwOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzMzE6XFx0XFx0cmV0dXJuIGRvX3NpZ25hbGZkNCh1ZmQsIFxcdTAwMjZtYXNrLCBmbGFncyk7XFxuIDMzMjpcXHR9XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFNZU0NBTExfREVGSU5FMyhzaWduYWxmZCwgaW50LCB1ZmQsIHNpZ3NldF90IF9fdXNlciAqLCB1c2VyX21hc2ssXFxuIDMzNTpcXHRcXHRcXHRzaXplX3QsIHNpemVtYXNrKVxcbiAzMzY6XFx0e1xcbiAzMzc6XFx0XFx0c2lnc2V0X3QgbWFzaztcXG4gMzM4OlxcdFxcbiAzMzk6XFx0XFx0aWYgKHNpemVtYXNrICE9IHNpemVvZihzaWdzZXRfdCkpXFxuIDM0MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQxOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2bWFzaywgdXNlcl9tYXNrLCBzaXplb2YobWFzaykpKVxcbiAzNDI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM0MzpcXHRcXHRyZXR1cm4gZG9fc2lnbmFsZmQ0KHVmZCwgXFx1MDAyNm1hc2ssIDApO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHQjaWZkZWYgQ09ORklHX0NPTVBBVFxcbiAzNDc6XFx0c3RhdGljIGxvbmcgZG9fY29tcGF0X3NpZ25hbGZkNChpbnQgdWZkLFxcbiAzNDg6XFx0XFx0XFx0XFx0Y29uc3QgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqdXNlcl9tYXNrLFxcbiAzNDk6XFx0XFx0XFx0XFx0Y29tcGF0X3NpemVfdCBzaWdzZXRzaXplLCBpbnQgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjMzLjI4NzQ2MTY3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTY1MTY5NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNpZ25hbGZkLmMgQ2hhbmdlcyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBmcy9zaWduYWxmZC5jYC4gVGhpcyBpcyBjcnVjaWFsIGtlcm5lbCBjb2RlLCBkZWFsaW5nIGRpcmVjdGx5IHdpdGggc2lnbmFsIGhhbmRsaW5nIGFuZCB0aGUgYHNpZ25hbGZkYCBtZWNoYW5pc20uIFRoZSBjaGFuZ2VzIGludm9sdmUgaG93IHRoZSB3YWl0IHF1ZXVlIGFuZCBsb2NraW5nIGFyZSBoYW5kbGVkIHdoZW4gYSBgc2lnbmFsZmRgIGlzIHJlY29uZmlndXJlZCAoc3BlY2lmaWNhbGx5LCB3aGVuIHRoZSBtYXNrIGlzIHVwZGF0ZWQpIGFjcm9zcyBwcm9jZXNzZXMgb3IgdGhyZWFkcy4gSXQgbG9va3MgbGlrZSB0aGUgdXBkYXRlIG5vdyB3YWtlcyB1cCB3YWl0ZXJzIHdhaXRpbmcgb24gYGN0eC1cdTAwM2V3cWhgLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUgaXMgYHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaClgIGluIGBzaWduYWxmZF9yZWxlYXNlYCBhbmQgYGtmcmVlX3JjdShjdHgsIHJjdSlgLlxuXG5UaGVzZSBjaGFuZ2VzIHNlZW0gdG8gYWZmZWN0IGxvY2tpbmcgd2l0aGluIGBzaWduYWxmZF9wb2xsYCwgYHNpZ25hbGZkX2RlcXVldWVgLCBgc2lnbmFsZmRfc2hvd19mZGluZm9gLCBhbmQgYGRvX3NpZ25hbGZkNGAuIFRoYXTigJlzIGEgc2lnbmlmaWNhbnQgc2hpZnQhIFRoaXMgaGFzIGNsZWFyIGZ1bmN0aW9uYWwgaW1wYWN0LCBkaXJlY3RseSByZWFjaGFibGUgdGhyb3VnaCB1c2Vyc3BhY2Ugc3lzY2FsbHMgbGlrZSBgc2lnbmFsZmQ0YCwgYHJlYWRgLCBgcG9sbGAvYGVwb2xsYCwgd2hpY2ggYXJlIHVzZWQgaW4gUUVNVSBhbmQgc3RhbmRhcmQgTGludXggc3lzdGVtcywgc28gZGVmaW5pdGVseSBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uXG5cblNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBjb3JlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIGBzaWduYWxmZGAgc3Vic3lzdGVtIGFyZSBiZWluZyBtb2RpZmllZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEFjY29yZGluZyB0byB0aGUgZ3VpZGFuY2UsIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBTdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBhcmUgZ2VuZXJhbGx5IGxlc3MgdXNlZnVsIGhlcmUuXG5cbkkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLiBJJ3ZlIGdvdCB0byBjaGVjayBgZnMvc2lnbmFsZmQuY2AgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgaXQgbG9va3MgbGlrZTpcbiogICBgc2lnbmFsZmRfY2xlYW51cGBcbiogICBga3N5c19zaWduYWxmZDRgIHdoaWNoIGlzIHByb2JhYmx5IGFsc28gYF9fZG9fc3lzX3NpZ25hbGZkNGAgLyBgX19kb19zeXNfc2lnbmFsZmRgIC8gYF9fZG9fY29tcGF0X3N5c19zaWduYWxmZDRgIC8gYF9fZG9fY29tcGF0X3N5c19zaWduYWxmZGAgKHZpYSBTWVNDQUxMX0RFRklORSlcbiogICBBbmQgYWxzbyBgZG9fc2lnbmFsZmQ0YCwgYHNpZ25hbGZkX3BvbGxgLCBgc2lnbmFsZmRfZGVxdWV1ZWAsIGBzaWduYWxmZF9yZWFkX2l0ZXJgLCBhbmQgYHNpZ25hbGZkX3JlbGVhc2VgXG5cbkhhbmcgb24sIGRpZCBJIG1pc3MgYW55dGhpbmcgaW4gdGhlIHByb21wdCBhYm91dCBmb2N1c2luZz8gUmlnaHQsIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXCIuIEhtbSwgbG9va2luZyBhdCB0aG9zZSBmdW5jdGlvbnMgYWdhaW4sIGl0IHNlZW1zIHRoZSBsYXN0IGdyb3VwLCB3aGlsZSB0aGV5IGFyZSB0aGVyZSwgaXMgc3RhdGljLCBhbmQgdGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLlxuXG5Ob3csIGxldCBtZSBjaGVjayBob3cgYFNZU0NBTExfREVGSU5FYCBpcyB1c2VkLiBJJ2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2ggdG8gc2VlIHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZXhpc3QgcmVsYXRlZCB0byBgc2lnbmFsZmRgIGFjcm9zcyBrZXJuZWwgaGVhZGVycyBhbmQgc291cmNlLiBUaGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDozOC40NTI2MzQyMDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjE4NzU4MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2lnbmFsZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zaWduYWxmZC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yLS8qXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjM6ICogIGluY2x1ZGUvbGludXgvc2lnbmFsZmQuaFxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC00LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMTAtXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjExOiNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L3NpZ25hbGZkLmhcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xNi0vKlxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoxNzogKiBEZWxpdmVyIHRoZSBzaWduYWwgdG8gbGlzdGVuaW5nIHNpZ25hbGZkLlxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xOC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MTk6c3RhdGljIGlubGluZSB2b2lkIHNpZ25hbGZkX25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZylcXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMjAte1xcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyMTpcXHRpZiAodW5saWtlbHkod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2dHNrLVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgpKSlcXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MjI6XFx0XFx0d2FrZV91cChcXHUwMDI2dHNrLVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgpO1xcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yMy19XFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTI0LVxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyNTpleHRlcm4gdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCk7XFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTI2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTI4LVxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyOTpzdGF0aWMgaW5saW5lIHZvaWQgc2lnbmFsZmRfbm90aWZ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc2lnKSB7IH1cXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMzAtXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCkgeyB9XFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDozOS40NzQ1MTQ2NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg5NDU1Mzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgYGZzL3NpZ25hbGZkLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTaWduYWxmZCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGZzL3NpZ25hbGZkLmNgIG5vdy4gSSd2ZSBnb3QgYSBnb29kIGdyYXNwIG9mIHRoZSBiYXNpYyBjb25jZXB0IG9mIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3JzLCBidXQgSSBuZWVkIHRvIGVuc3VyZSBJJ20gZ2V0dGluZyB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGFyY2hpdGVjdHVyZSBnYXZlIG1lIHNvbWUgaGlnaC1sZXZlbCBpZGVhcywgYnV0IG5vdyBJIHdhbnQgdG8gZ2V0IGdyYW51bGFyLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdGhlIGNvcmUgZGV0YWlscywgc28gSeKAmW0gZ29pbmcgdG8gZm9jdXMgb246IHRoZSBhY3R1YWwgbWVjaGFuaWNzIG9mIHRoZSBgc2lnbmFsZmRgIHN5c3RlbSBjYWxsOyBob3cgc2lnbmFscyBhcmUgbWFza2VkLCBkZWxpdmVyZWQsIGFuZCBoYW5kbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIGZpbGUgZGVzY3JpcHRvcjsgd2hhdCB0aGUgbG9ja2luZyBzdHJhdGVnaWVzIGFyZSAoY3J1Y2lhbCBmb3IgY29uY3VycmVuY3ksIG9idmlvdXNseSk7IGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGV4aXN0LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBzaWduYWwgcXVldWUgYW5kIHRoZSBwcm9jZXNzJ3Mgc2lnbmFsIG1hc2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW1wbGVtZW50YXRpb24gd2VsbCBzbyBJIGNhbiBhc3Nlc3MgaXRzIGVmZmljaWVuY3kgYW5kIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIGV4cGVjdGVkIGxldmVsIG9mIHNlY3VyaXR5IGFuZCByZWxpYWJpbGl0eS4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGFyZWFzIG9mIGNvbmNlcm4uIFNvLCBsZXTigJlzIGp1bXAgcmlnaHQgaW4gYW5kIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjQ2LjM2OTA3MTM3NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc2lnbmFsZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDU6XFx0XFxuIDM0NjpcXHQjaWZkZWYgQ09ORklHX0NPTVBBVFxcbiAzNDc6XFx0c3RhdGljIGxvbmcgZG9fY29tcGF0X3NpZ25hbGZkNChpbnQgdWZkLFxcbiAzNDg6XFx0XFx0XFx0XFx0Y29uc3QgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqdXNlcl9tYXNrLFxcbiAzNDk6XFx0XFx0XFx0XFx0Y29tcGF0X3NpemVfdCBzaWdzZXRzaXplLCBpbnQgZmxhZ3MpXFxuIDM1MDpcXHR7XFxuIDM1MTpcXHRcXHRzaWdzZXRfdCBtYXNrO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2YoY29tcGF0X3NpZ3NldF90KSlcXG4gMzU0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNTU6XFx0XFx0aWYgKGdldF9jb21wYXRfc2lnc2V0KFxcdTAwMjZtYXNrLCB1c2VyX21hc2spKVxcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM1NzpcXHRcXHRyZXR1cm4gZG9fc2lnbmFsZmQ0KHVmZCwgXFx1MDAyNm1hc2ssIGZsYWdzKTtcXG4gMzU4OlxcdH1cXG4gMzU5OlxcdFxcbiAzNjA6XFx0Q09NUEFUX1NZU0NBTExfREVGSU5FNChzaWduYWxmZDQsIGludCwgdWZkLFxcbiAzNjE6XFx0XFx0XFx0ICAgICBjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICosIHVzZXJfbWFzayxcXG4gMzYyOlxcdFxcdFxcdCAgICAgY29tcGF0X3NpemVfdCwgc2lnc2V0c2l6ZSxcXG4gMzYzOlxcdFxcdFxcdCAgICAgaW50LCBmbGFncylcXG4gMzY0OlxcdHtcXG4gMzY1OlxcdFxcdHJldHVybiBkb19jb21wYXRfc2lnbmFsZmQ0KHVmZCwgdXNlcl9tYXNrLCBzaWdzZXRzaXplLCBmbGFncyk7XFxuIDM2NjpcXHR9XFxuIDM2NzpcXHRcXG4gMzY4OlxcdENPTVBBVF9TWVNDQUxMX0RFRklORTMoc2lnbmFsZmQsIGludCwgdWZkLFxcbiAzNjk6XFx0XFx0XFx0ICAgICBjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICosIHVzZXJfbWFzayxcXG4gMzcwOlxcdFxcdFxcdCAgICAgY29tcGF0X3NpemVfdCwgc2lnc2V0c2l6ZSlcXG4gMzcxOlxcdHtcXG4gMzcyOlxcdFxcdHJldHVybiBkb19jb21wYXRfc2lnbmFsZmQ0KHVmZCwgdXNlcl9tYXNrLCBzaWdzZXRzaXplLCAwKTtcXG4gMzczOlxcdH1cXG4gMzc0OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDo0Ni4zNjkyNDU4NzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwODc3MDIwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU2lnbmFsZmQgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZSBgc2lnbmFsZmRgIHN5c3RlbSBjYWxsLiBGaXJzdCwgSSdtIG5vdGluZyB0aGUgY29yZSBmdW5jdGlvbnMgYW5kIHN5bWJvbHMgaW52b2x2ZWQuIEknbSBzZWVpbmcgdGhhdCBgU1lTQ0FMTF9ERUZJTkU0KHNpZ25hbGZkNCwgLi4uKWAgZ2VuZXJhdGVzIHNldmVyYWwgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgX19kb19zeXNfc2lnbmFsZmQ0YCBhbmQgYGtzeXNfc2lnbmFsZmQ0YC4gSSdtIGFsc28gb2JzZXJ2aW5nIGtleSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBzaWduYWxmZF9jbGVhbnVwYCwgYHNpZ25hbGZkX3BvbGxgLCBgc2lnbmFsZmRfZGVxdWV1ZWAsIGBzaWduYWxmZF9yZWFkX2l0ZXJgLCBgc2lnbmFsZmRfcmVsZWFzZWAsIGFuZCBgZG9fc2lnbmFsZmQ0YC4gVGhlc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdC4gTG9va2luZyBhdCBgZnMvTWFrZWZpbGVgLCBJIHNlZSBgb2JqLSQoQ09ORklHX1NJR05BTEZEKSArPSBzaWduYWxmZC5vYCwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gVGhlbiBpbiBgaW5pdC9LY29uZmlnYCwgSSBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBgY29uZmlnIFNJR05BTEZEYCwgYSBib29sZWFuIG9wdGlvbiwgYW5kIGltcG9ydGFudGx5LCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCAoYGRlZmF1bHQgeWApLCB3aGljaCBpcyBoZWxwZnVsLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkZXBlbmRlbmN5IGlzc3VlcyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzLiBJJ3ZlIGNoZWNrZWQgYGluaXQvS2NvbmZpZ2AgYW5kIGZvdW5kIG5vIGRlcGVuZGVuY2llcyBmb3IgYFNJR05BTEZEYC4gVG8gYmUgdGhvcm91Z2gsIEkgcXVpY2tseSBjaGVja2VkIGBmcy9zaWduYWxmZC5jYCBhbmQgZm91bmQgYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AgYW5kIGAjaWZkZWYgQ09ORklHX0NPTVBBVGAsIHdoaWNoIGFyZSByZWxhdGVkIHRvIHByb2NmcyBhbmQgY29tcGF0aWJpbGl0eSBzdXBwb3J0LCBidXQgdGhlc2UgZG9uJ3Qgc2VlbSBsaWtlIHByaW1hcnkgYmxvY2tpbmcgY29uZmlndXJhdGlvbnMuIFRoZXkgbWlnaHQgY29tZSB1cCBpbiBhIGxhdGVyIGZ1enppbmcgcGhhc2UsIGJ1dCB0aGV5IHNob3VsZG4ndCBpbW1lZGlhdGVseSBwcmV2ZW50IHRoZSB1c2Ugb2YgYHNpZ25hbGZkYC5cblxuU28sIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaXRlbSBpcyBgU0lHTkFMRkRgLCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gR2l2ZW4gdGhlIHByb3ZpZGVkIFwiaW5zdHJ1Y3Rpb25zXCIsIEkgY2FuIHZlcmlmeSB0aGF0OiB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCBgRW5hYmxlQ29uZmlnc2AgaXMgc2V0IHRvIGBbXCJTSUdOQUxGRFwiXWAsIGBGb2N1c1N5bWJvbHNgIGluY2x1ZGVzIHRoZSBleHBlY3RlZCBzeW1ib2xzLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSByZWFkeSB0byBwcm9jZWVkLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxNSwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NTowMy40NTY5NTE0NTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc2OTUyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNJR05BTEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2lnbmFsZmRfcG9sbFwiLFxuICAgIFwic2lnbmFsZmRfZGVxdWV1ZVwiLFxuICAgIFwic2lnbmFsZmRfcmVsZWFzZVwiLFxuICAgIFwiZG9fc2lnbmFsZmQ0XCIsXG4gICAgXCJzaWduYWxmZF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIHdhaXQgcXVldWUgaGFuZGxpbmcgaW4gc2lnbmFsZmQgKGZzL3NpZ25hbGZkLmMpLiBJbiBwYXJ0aWN1bGFyLCBpdCBpbnRyb2R1Y2VzIGN0eC1sZXZlbCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhlYWQsIHVwZGF0aW5nIHNpZ25hbGZkX3BvbGwsIHNpZ25hbGZkX2RlcXVldWUsIHNpZ25hbGZkX3JlbGVhc2UsIGFuZCBkb19zaWduYWxmZDQgdG8gc3VwcG9ydCB3YWtpbmcgd2FpdGVycyB1cG9uIHNpZ25hbGZkIG1hc2sgdXBkYXRlcyBhY3Jvc3MgdGhyZWFkcy9wcm9jZXNzZXMuIFRoaXMgaXMgY29yZSwgcmVhY2hhYmxlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTSUdOQUxGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNpZ25hbGZkX3BvbGxcIixcbiAgICBcInNpZ25hbGZkX2RlcXVldWVcIixcbiAgICBcInNpZ25hbGZkX3JlbGVhc2VcIixcbiAgICBcImRvX3NpZ25hbGZkNFwiLFxuICAgIFwic2lnbmFsZmRfY2xlYW51cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhhbmRsaW5nIGluIHNpZ25hbGZkIChmcy9zaWduYWxmZC5jKS4gSW4gcGFydGljdWxhciwgaXQgaW50cm9kdWNlcyBjdHgtbGV2ZWwgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoZWFkLCB1cGRhdGluZyBzaWduYWxmZF9wb2xsLCBzaWduYWxmZF9kZXF1ZXVlLCBzaWduYWxmZF9yZWxlYXNlLCBhbmQgZG9fc2lnbmFsZmQ0IHRvIHN1cHBvcnQgd2FraW5nIHdhaXRlcnMgdXBvbiBzaWduYWxmZCBtYXNrIHVwZGF0ZXMgYWNyb3NzIHRocmVhZHMvcHJvY2Vzc2VzLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjAzLjY2NDY1NjMxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNTgwMzI3ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NTowMy42NjY0ODk3NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODE1NjE5MzU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlZGljYXRlZCB3YWl0cXVldWUgKGB3cWhgKSwgc3BpbmxvY2sgKGBsb2NrYCksIGFuZCBSQ1UtYmFzZWQgZnJlZWluZyAoYHJjdV9oZWFkYCkgdG8gYHN0cnVjdCBzaWduYWxmZF9jdHhgIGluIGBmcy9zaWduYWxmZC5jYCBzbyB0aGF0IG1hc2sgdXBkYXRlcyB2aWEgYHNpZ25hbGZkNGAgcHJvcGVybHkgd2FrZSB1cCB3YWl0ZXJzIGFjcm9zcyBwcm9jZXNzZXMuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxcbjEuIEFsbCBmaWVsZHMgb2YgYHN0cnVjdCBzaWduYWxmZF9jdHhgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYHNwaW5fbG9ja19pbml0KFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spYCwgYGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmN0eC1cXHUwMDNld3FoKWAsIGBjdHgtXFx1MDAzZXNpZ21hc2sgPSAqbWFza2ApLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZSBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IHNpZ25hbGZkX3NpZ2luZm9gKSByZW1haW5zIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXRgIGluIGBzaWduYWxmZF9jb3B5aW5mbygpYC5cXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cXHUwMDNlbG9ja2AgYW5kIGBzaWdoYW5kLVxcdTAwM2VzaWdsb2NrYCksIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTiwgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNhOTA2ZTE2NWEwYTczN2RmZmVmYzQ5MDI5MDYwNWY0NzAzMDNlMjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjo0MzozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3NpZ25hbGZkLmMgYi9mcy9zaWduYWxmZC5jXG5pbmRleCBkZmY1Mzc0NWUzNTI0Li41MjNjM2E2ZGM1NjU5IDEwMDY0NFxuLS0tIGEvZnMvc2lnbmFsZmQuY1xuKysrIGIvZnMvc2lnbmFsZmQuY1xuQEAgLTI3LDYgKzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWxmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxuQEAgLTM5LDEyICs0MCwxOSBAQCB2b2lkIHNpZ25hbGZkX2NsZWFudXAoc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kKVxuIH1cbiBcbiBzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHtcbitcdC8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4rXHR3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7XG4rXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIFx0c2lnc2V0X3Qgc2lnbWFzaztcbiB9O1xuIFxuIHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4rXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4rXHRrZnJlZV9yY3UoY3R4LCByY3UpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTUzLDE0ICs2MSwxNyBAQCBzdGF0aWMgX19wb2xsX3Qgc2lnbmFsZmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbiBcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0X19wb2xsX3QgZXZlbnRzID0gMDtcbiBcbitcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdHgtXHUwMDNld3FoLCB3YWl0KTtcbiBcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCB3YWl0KTtcbiBcbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuIFx0aWYgKG5leHRfc2lnbmFsKFx1MDAyNmN1cnJlbnQtXHUwMDNlcGVuZGluZywgXHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2spIHx8XG4gXHQgICAgbmV4dF9zaWduYWwoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlc2hhcmVkX3BlbmRpbmcsXG4gXHRcdFx0XHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2spKVxuIFx0XHRldmVudHMgfD0gRVBPTExJTjtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFxuIFx0cmV0dXJuIGV2ZW50cztcbiB9XG5AQCAtMTU3LDggKzE2OCwxMCBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0ZW51bSBwaWRfdHlwZSB0eXBlO1xuIFx0c3NpemVfdCByZXQ7XG4gXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcbitcdERFQ0xBUkVfV0FJVFFVRVVFKGN0eF93YWl0LCBjdXJyZW50KTtcbiBcbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuIFx0cmV0ID0gZGVxdWV1ZV9zaWduYWwoXHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2ssIGluZm8sIFx1MDAyNnR5cGUpO1xuIFx0c3dpdGNoIChyZXQpIHtcbiBcdGNhc2UgMDpcbkBAIC0xNjcsMTAgKzE4MCwxMiBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGRlZmF1bHQ6XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbitcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiBcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgsIFx1MDAyNndhaXQpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuQEAgLTE4MSwxMyArMTk2LDE3IEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvXG4gXHRcdFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdFx0c2NoZWR1bGUoKTtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuK1x0XHRzcGluX2xvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuIFx0fVxuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXG4gXHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbitcdHJlbW92ZV93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiBcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjMyLDcgKzI1MSw5IEBAIHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXG4gXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHNpZ3NldF90IHNpZ21hc2s7XG4gXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdHNpZ21hc2sgPSBjdHgtXHUwMDNlc2lnbWFzaztcbitcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRzaWdub3RzZXQoXHUwMDI2c2lnbWFzayk7XG4gXHRyZW5kZXJfc2lnc2V0X3QobSwgXCJzaWdtYXNrOlxcdFwiLCBcdTAwMjZzaWdtYXNrKTtcbiB9XG5AQCAtMjY4LDYgKzI4OSw4IEBAIHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXG4gXHRcdGlmICghY3R4KVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuK1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4gXHRcdGN0eC1cdTAwM2VzaWdtYXNrID0gKm1hc2s7XG4gXG4gXHRcdGZkID0gRkRfQUREKGZsYWdzIFx1MDAyNiBPX0NMT0VYRUMsXG5AQCAtMjg2LDExICszMDksMTEgQEAgc3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncylcbiBcdFx0Y3R4ID0gZmRfZmlsZShmKS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRcdGlmIChmZF9maWxlKGYpLVx1MDAzZWZfb3AgIT0gXHUwMDI2c2lnbmFsZmRfZm9wcylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFxuLVx0XHR3YWtlX3VwKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgpO1xuK1x0XHR3YWtlX3VwKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHVmZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlXG5pbmRleCAzZjMzOTg2NWEzYjZlLi41Y2FjNTMyZDQ5YWU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlXG5AQCAtMSwzICsxLDQgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiBtYW5nbGVfdWNfc2lnbWFza1xuIHNhc1xuK3NpZ25hbGZkX21hc2tfd2FrZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZVxuaW5kZXggZTBiZjcwNThkMTljOS4uMDBmMWU5NmM5MmM0ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlXG5AQCAtMiw2ICsyLDYgQEBcbiBDRkxBR1MgPSAtV2FsbFxuIFRFU1RfR0VOX1BST0dTID0gbWFuZ2xlX3VjX3NpZ21hc2tcbiBURVNUX0dFTl9QUk9HUyArPSBzYXNcbitURVNUX0dFTl9QUk9HUyArPSBzaWduYWxmZF9tYXNrX3dha2VcbiBcbiBpbmNsdWRlIC4uL2xpYi5ta1xuLVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNlNjA0MjRiOWVjOWVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuY1xuQEAgLTAsMCArMSwyNjYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI2RlZmluZSBfR05VX1NPVVJDRVxuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc2lnbmFsZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfYWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNvbnN0IGNoYXIgKnB0ciA9IGJ1ZjtcbitcbitcdHdoaWxlIChsZW4pIHtcbitcdFx0c3NpemVfdCByZXQgPSB3cml0ZShmZCwgcHRyLCBsZW4pO1xuK1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXG4rXHRcdHB0ciArPSByZXQ7XG4rXHRcdGxlbiAtPSByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByZWFkX2FsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjaGFyICpwdHIgPSBidWY7XG4rXG4rXHR3aGlsZSAobGVuKSB7XG4rXHRcdHNzaXplX3QgcmV0ID0gcmVhZChmZCwgcHRyLCBsZW4pO1xuK1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRyZXR1cm4gLTE7XG4rXG4rXHRcdHB0ciArPSByZXQ7XG4rXHRcdGxlbiAtPSByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQga2lsbF9hbmRfcmVhcChwaWRfdCBwaWQpXG4re1xuK1x0aW50IHN0YXR1cztcbitcbitcdGlmIChwaWQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHR3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCB3YWl0X3Jlc3VsdChpbnQgZmQsIGludCB0aW1lb3V0X21zKVxuK3tcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0ge1xuK1x0XHQuZmQgPSBmZCxcbitcdFx0LmV2ZW50cyA9IFBPTExJTixcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSBwb2xsKFx1MDAyNnBmZCwgMSwgdGltZW91dF9tcyk7XG4rXHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWRfdCBwaWQsIGludCBzZmQpXG4re1xuK1x0Y2hhciBwYXRoWzY0XTtcbitcdGNoYXIgYnVmWzI1Nl07XG4rXHRsb25nIG5yO1xuK1x0dW5zaWduZWQgbG9uZyBhcmcwO1xuK1x0RklMRSAqZnA7XG4rXHRpbnQgaW5fcmVhZCA9IDA7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvJWQvc3lzY2FsbFwiLCBwaWQpO1xuK1x0ZnAgPSBmb3BlbihwYXRoLCBcInJcIik7XG4rXHRpZiAoIWZwKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgc3NjYW5mKGJ1ZiwgXCIlbGQgJWx4XCIsIFx1MDAyNm5yLCBcdTAwMjZhcmcwKSA9PSAyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5yID09IF9fTlJfcmVhZCBcdTAwMjZcdTAwMjYgYXJnMCA9PSAodW5zaWduZWQgbG9uZylzZmQpXG4rXHRcdGluX3JlYWQgPSAxO1xuK1xuK1x0ZmNsb3NlKGZwKTtcbitcdHJldHVybiBpbl9yZWFkO1xuK31cbitcbitzdGF0aWMgaW50IHdhaXRfZm9yX2NoaWxkX2Jsb2NrKHBpZF90IHBpZCwgaW50IHNmZCwgaW50IHRpbWVvdXRfbXMpXG4re1xuK1x0aW50IHdhaXRlZF9tcyA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKHdhaXRlZF9tcyBcdTAwM2MgdGltZW91dF9tcykge1xuK1x0XHRyZXQgPSBjaGlsZF9pbl9zaWduYWxmZF9yZWFkKHBpZCwgc2ZkKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdFx0dXNsZWVwKDEwMDAwKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXHRcdHdhaXRlZF9tcysrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC0xO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvIGZkc2k7XG4rXHRzaWdzZXRfdCBibG9ja2VkLCBpbml0aWFsX21hc2ssIHVwZGF0ZWRfbWFzaztcbitcdGludCByZWFkeV9waXBlWzJdLCBzdGFydF9waXBlWzJdLCByZXN1bHRfcGlwZVsyXTtcbitcdGludCBzZmQsIHNpZ25vLCBzdGF0dXM7XG4rXHRwaWRfdCBjaGlsZDtcbitcdGNoYXIgcmVhZHksIHN0YXJ0O1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGtzZnRfc2V0X3BsYW4oMSk7XG4rXG4rXHRzaWdlbXB0eXNldChcdTAwMjZibG9ja2VkKTtcbitcdHNpZ2FkZHNldChcdTAwMjZibG9ja2VkLCBTSUdVU1IxKTtcbitcdHNpZ2FkZHNldChcdTAwMjZibG9ja2VkLCBTSUdVU1IyKTtcbitcdGlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIFx1MDAyNmJsb2NrZWQsIE5VTEwpKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJzaWdwcm9jbWFza1wiKTtcbitcbitcdHNpZ2VtcHR5c2V0KFx1MDAyNmluaXRpYWxfbWFzayk7XG4rXHRzaWdhZGRzZXQoXHUwMDI2aW5pdGlhbF9tYXNrLCBTSUdVU1IxKTtcbitcdHNmZCA9IHNpZ25hbGZkKC0xLCBcdTAwMjZpbml0aWFsX21hc2ssIDApO1xuK1x0aWYgKHNmZCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwic2lnbmFsZmRcIik7XG4rXG4rXHRpZiAocGlwZShyZWFkeV9waXBlKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicGlwZShyZWFkeSlcIik7XG4rXHRpZiAocGlwZShzdGFydF9waXBlKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicGlwZShzdGFydClcIik7XG4rXHRpZiAocGlwZShyZXN1bHRfcGlwZSkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInBpcGUocmVzdWx0KVwiKTtcbitcbitcdGNoaWxkID0gZm9yaygpO1xuK1x0aWYgKGNoaWxkIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJmb3JrXCIpO1xuK1xuK1x0aWYgKGNoaWxkID09IDApIHtcbitcdFx0Y2xvc2UocmVhZHlfcGlwZVswXSk7XG4rXHRcdGNsb3NlKHN0YXJ0X3BpcGVbMV0pO1xuK1x0XHRjbG9zZShyZXN1bHRfcGlwZVswXSk7XG4rXG4rXHRcdHJlYWR5ID0gJ1InO1xuK1x0XHRpZiAod3JpdGVfYWxsKHJlYWR5X3BpcGVbMV0sIFx1MDAyNnJlYWR5LCBzaXplb2YocmVhZHkpKSlcbitcdFx0XHRfZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0XHRpZiAocmVhZF9hbGwoc3RhcnRfcGlwZVswXSwgXHUwMDI2c3RhcnQsIHNpemVvZihzdGFydCkpKVxuK1x0XHRcdF9leGl0KEVYSVRfRkFJTFVSRSk7XG4rXG4rXHRcdG1lbXNldChcdTAwMjZmZHNpLCAwLCBzaXplb2YoZmRzaSkpO1xuK1x0XHRpZiAocmVhZF9hbGwoc2ZkLCBcdTAwMjZmZHNpLCBzaXplb2YoZmRzaSkpKVxuK1x0XHRcdF9leGl0KEVYSVRfRkFJTFVSRSk7XG4rXG4rXHRcdHNpZ25vID0gZmRzaS5zc2lfc2lnbm87XG4rXHRcdGlmICh3cml0ZV9hbGwocmVzdWx0X3BpcGVbMV0sIFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSlcbitcdFx0XHRfZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0XHRfZXhpdChFWElUX1NVQ0NFU1MpO1xuK1x0fVxuK1xuK1x0Y2xvc2UocmVhZHlfcGlwZVsxXSk7XG4rXHRjbG9zZShzdGFydF9waXBlWzBdKTtcbitcdGNsb3NlKHJlc3VsdF9waXBlWzFdKTtcbitcbitcdGlmIChyZWFkX2FsbChyZWFkeV9waXBlWzBdLCBcdTAwMjZyZWFkeSwgc2l6ZW9mKHJlYWR5KSkpIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImNoaWxkIGRpZCBub3QgcmVhY2ggYmxvY2tpbmcgcmVhZFxcblwiKTtcbitcdH1cbitcbitcdGlmIChraWxsKGNoaWxkLCBTSUdVU1IyKSkge1xuK1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwia2lsbChTSUdVU1IyKVwiKTtcbitcdH1cbitcbitcdHN0YXJ0ID0gJ1MnO1xuK1x0aWYgKHdyaXRlX2FsbChzdGFydF9waXBlWzFdLCBcdTAwMjZzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImNvdWxkIG5vdCByZWxlYXNlIGNoaWxkIGludG8gc2lnbmFsZmQgcmVhZFxcblwiKTtcbitcdH1cbitcbitcdHN0YXR1cyA9IHdhaXRfZm9yX2NoaWxkX2Jsb2NrKGNoaWxkLCBzZmQsIDEwMDApO1xuK1x0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuK1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0aWYgKHN0YXR1cyA9PSAtMSlcbitcdFx0XHRrc2Z0X2V4aXRfc2tpcChcIi9wcm9jL1x1MDAzY3BpZFx1MDAzZS9zeXNjYWxsIGlzIHVuYXZhaWxhYmxlXFxuXCIpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjaGlsZCBkaWQgbm90IGJsb2NrIGluIHNpZ25hbGZkIHJlYWRcXG5cIik7XG4rXHR9XG4rXG4rXHRzaWdlbXB0eXNldChcdTAwMjZ1cGRhdGVkX21hc2spO1xuK1x0c2lnYWRkc2V0KFx1MDAyNnVwZGF0ZWRfbWFzaywgU0lHVVNSMik7XG4rXHRpZiAoc2lnbmFsZmQoc2ZkLCBcdTAwMjZ1cGRhdGVkX21hc2ssIDApIFx1MDAzYyAwKSB7XG4rXHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJzaWduYWxmZChyZWNvbmZpZ3VyZSlcIik7XG4rXHR9XG4rXG4rXHRpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEpIHtcbitcdFx0aWYgKHJlYWRfYWxsKHJlc3VsdF9waXBlWzBdLCBcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkpIHtcbitcdFx0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjaGlsZCB3YWtldXAgZGlkIG5vdCBjYXJyeSBhIHNpZ25hbFxcblwiKTtcbitcdFx0fVxuK1xuK1x0XHRpZiAod2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSAhPSBjaGlsZCkge1xuK1x0XHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIndhaXRwaWRcIik7XG4rXHRcdH1cbitcdFx0a3NmdF90ZXN0X3Jlc3VsdChzaWdubyA9PSBTSUdVU1IyIFx1MDAyNlx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXG4rXHRcdFx0XHQgXCJzaGFyZWQgc2lnbmFsZmQgd2FrZXVwIGFmdGVyIG1hc2sgdXBkYXRlXFxuXCIpO1xuK1x0XHRrc2Z0X2V4aXRfcGFzcygpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEJ1Z2d5IGtlcm5lbHMgbGVhdmUgdGhlIGNoaWxkIGFzbGVlcCB1bnRpbCBhbiB1bnJlbGF0ZWQgc2lnbmFsIGhpdHNcbitcdCAqIHRoZSBjaGlsZCdzIHNpZ25hbGZkIHdhaXRxdWV1ZS4gU0lHVVNSMSBkb2VzIG5vdCBtYXRjaCB0aGUgdXBkYXRlZFxuK1x0ICogc2lnbmFsZmQgbWFzaywgc28gYSBzdWNjZXNzZnVsIHJlYWQgb2YgU0lHVVNSMiBhZnRlciB0aGlzIG51ZGdlXG4rXHQgKiBkZW1vbnN0cmF0ZXMgdGhlIG1pc3NlZCB3YWtldXAuXG4rXHQgKi9cbitcdGlmIChraWxsKGNoaWxkLCBTSUdVU1IxKSkge1xuK1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwia2lsbChTSUdVU1IxKVwiKTtcbitcdH1cbitcbitcdGlmICh3YWl0X3Jlc3VsdChyZXN1bHRfcGlwZVswXSwgMTAwMCkgPT0gMSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sIFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSBcdTAwMjZcdTAwMjZcbitcdCAgICB3YWl0cGlkKGNoaWxkLCBcdTAwMjZzdGF0dXMsIDApID09IGNoaWxkIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNpZ25vID09IFNJR1VTUjIgXHUwMDI2XHUwMDI2IFdJRkVYSVRFRChzdGF0dXMpIFx1MDAyNlx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDApIHtcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwibWFzayB1cGRhdGUgbWlzc2VkIGEgc2hhcmVkIHNpZ25hbGZkIHdhaXRlclxcblwiKTtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjaGlsZCB3b2tlIG9ubHkgYWZ0ZXIgYW4gdW5yZWxhdGVkIFNJR1VTUjFcXG5cIik7XG4rXHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4rXHR9XG4rXG4rXHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdGtzZnRfZXhpdF9mYWlsX21zZyhcImNoaWxkIHJlbWFpbmVkIGJsb2NrZWQgYWZ0ZXIgc2lnbmFsZmQgcmVjb25maWd1cmF0aW9uXFxuXCIpO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjAzLjY2NjQ5MTcyMloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTg1MjI3ODIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNpZ25hbEZEIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBmcy9zaWduYWxmZC5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgbG9va2luZyBhdCBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBzaWduYWxmZCBpbXBsZW1lbnRhdGlvbiwgcHJpbWFyaWx5IGFyb3VuZCBjb25jdXJyZW5jeSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuVGhlIGludHJvZHVjdGlvbiBvZiBgc3BpbmxvY2tfdCBsb2NrYCwgYHdhaXRfcXVldWVfaGVhZF90IHdxaGAsIGFuZCBgc3RydWN0IHJjdV9oZWFkIHJjdWAgd2l0aGluIHRoZSBgc2lnbmFsZmRfY3R4YCBzdHJ1Y3QgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHN5bmNocm9uaXphdGlvbiBhbmQgcG90ZW50aWFsbHkgYW4gUkNVIChSZWFkLUNvcHktVXBkYXRlKSBvcHRpbWl6YXRpb24gZWZmb3J0LiBUaGlzIGlzIHNtYXJ0OyBzaWduYWxmZCBpcyBhIGNvbW1vbiBwb2ludCBvZiBjb250ZW50aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBhZGRyZXNzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cbmBzaWduYWxmZF9yZWxlYXNlYCBub3cgaW5jb3Jwb3JhdGVzIGB3YWtlX3VwX3BvbGxmcmVlYCBhbmQgYGtmcmVlX3JjdWAgaW5zdGVhZCBvZiBqdXN0IGEgc3RyYWlnaHQgYGtmcmVlYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRpb24gdGhhdCB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgcm9idXN0IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgY2xlYW51cCwgZXNwZWNpYWxseSBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQsIGxpa2VseSBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gcHJvYmxlbXMuIFJDVSBpcyBhIGdvb2QgZml0IGhlcmUsIHByZXZlbnRpbmcgc3RhbGxzIHdoaWxlIGNsZWFuaW5nIHVwIHRoZSB1bmRlcmx5aW5nIGNvbnRleHQuXG5cblRoZSBjaGFuZ2VzIGluIGBzaWduYWxmZF9wb2xsYCwgYHNpZ25hbGZkX2RlcXVldWVgLCBhbmQgYHNpZ25hbGZkX3Nob3dfZmRpbmZvYCByZWluZm9yY2UgdGhpcyBjb25jdXJyZW5jeSB0aGVtZS4gVGhlIGFkZGl0aW9uIG9mIHNwaW5sb2NrcyBhcm91bmQgY3JpdGljYWwgc2VjdGlvbnMsIHN1Y2ggYXMgY2hlY2tpbmcgYHNpZ2xvY2tgIGFuZCBgbmV4dF9zaWduYWxgLCBvciByZWFkaW5nIGBjdHgtXHUwMDNlc2lnbWFza2AsIGlzIHRleHRib29rIHByb3RlY3Rpb24gYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMuIFVzaW5nIGEgd2FpdCBxdWV1ZSBpbiBwb2xsLCBhbmQgdGhlIGNhcmVmdWwgYGFkZF93YWl0X3F1ZXVlYC9gcmVtb3ZlX3dhaXRfcXVldWVgIGluIGBzaWduYWxmZF9kZXF1ZXVlYCwgbWFrZXMgaXQgYWxsIGxvb2sgd2VsbC1jb25zaWRlcmVkLlxuXG5UaGUgYGRvX3NpZ25hbGZkNGAgZnVuY3Rpb24gaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNwaW5sb2NrIGFuZCB3YWl0IHF1ZXVlIGhlYWQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGxvY2tpbmcgYXJvdW5kIGBjdHgtXHUwMDNlc2lnbWFza2AgYW5kIHRoZSBgd2FrZV91cGAgY2FsbCBpbiB0aGUgcmVjb25maWd1cmF0aW9uIHNjZW5hcmlvIHNob3cgYSBjYXJlZnVsIGF0dGVudGlvbiB0byB0aGUgYXRvbWljaXR5IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGUgcmVjb25maWd1cmF0aW9uIHByb2Nlc3MuIFdlIGFyZSB2ZXJ5IGxpa2VseSBsb29raW5nIGF0IGhhbmRsaW5nIG9mIHNpZ25hbCBtYXNrcyB0aGF0IGFyZSB1cGRhdGVkIG9uIHRoZSBmbHkuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgaG93IGBzaWduYWxmZF9jdHhgIGlzIGFsbG9jYXRlZCwgaG93IGBzaWduYWxmZF9yZWFkYCBpbnRlcmFjdHMgd2l0aCBpdCwgYW5kIHdoYXQgaGFwcGVucyBpbiBvdGhlciBjcml0aWNhbCBwYXRocywgaW4gdGhlIG1haW4gY29kZSBiYXNlLiBMZXQgbWUgcXVpY2tseSB1c2UgcmVhZC1maWxlIG9yIGdyZXBwZXIgdG8gcHVsbCB1cCB0aGUgZXhpc3RpbmcgYGZzL3NpZ25hbGZkLmNgIGNvZGUgdG8gc2VlIGhvdyB0aGUgY29udGV4dCBpcyB1c2VkIG92ZXJhbGwuIFRoaXMgd2lsbCBwcm92aWRlIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIEknbGwgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGFsbG9jYXRpb24gdG8gZnVsbHkgZ3Jhc3AgdGhlIG1lbW9yeSBtb2RlbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDU6MTUuNTE4Nzc0MTc5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zaWduYWxmZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogIGZzL3NpZ25hbGZkLmNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBMaW51cyBUb3J2YWxkc1xcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqICBNb24gTWFyIDUsIDIwMDc6IERhdmlkZSBMaWJlbnppIFxcdTAwM2NkYXZpZGVsQHhtYWlsc2VydmVyLm9yZ1xcdTAwM2VcXG4gICA4OlxcdCAqICAgICAgQ2hhbmdlZCAtXFx1MDAzZXJlYWQoKSB0byByZXR1cm4gYSBzaWdpbmZvIHN0cmN0dXJlIGluc3RlYWQgb2Ygc2lnbmFsIG51bWJlci5cXG4gICA5OlxcdCAqICAgICAgRml4ZWQgbG9ja2luZyBpbiAtXFx1MDAzZXBvbGwoKS5cXG4gIDEwOlxcdCAqICAgICAgQWRkZWQgc2lnaGFuZC1kZXRhY2ggbm90aWZpY2F0aW9uLlxcbiAgMTE6XFx0ICogICAgICBBZGRlZCBmZCByZS11c2UgaW4gc3lzX3NpZ25hbGZkKCkgc3lzY2FsbC5cXG4gIDEyOlxcdCAqICAgICAgTm93IHVzaW5nIGFub255bW91cyBpbm9kZSBzb3VyY2UuXFxuICAxMzpcXHQgKiAgICAgIFRoYW5rcyB0byBPbGVnIE5lc3Rlcm92IGZvciB1c2VmdWwgY29kZSByZXZpZXcgYW5kIHN1Z2dlc3Rpb25zLlxcbiAgMTQ6XFx0ICogICAgICBNb3JlIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyBmcm9tIEFybmQgQmVyZ21hbm4uXFxuICAxNTpcXHQgKiAgU2F0IE1heSAxOSwgMjAwNzogRGF2aSBFLiBNLiBBcm5hdXQgXFx1MDAzY2RhdmlAaGF4ZW50LmNvbS5iclxcdTAwM2VcXG4gIDE2OlxcdCAqICAgICAgUmV0cmlldmUgbXVsdGlwbGUgc2lnbmFscyB3aXRoIG9uZSByZWFkKCkgY2FsbFxcbiAgMTc6XFx0ICogIFN1biBKdWwgMTUsIDIwMDc6IERhdmlkZSBMaWJlbnppIFxcdTAwM2NkYXZpZGVsQHhtYWlsc2VydmVyLm9yZ1xcdTAwM2VcXG4gIDE4OlxcdCAqICAgICAgQXR0YWNoIHRvIHRoZSBzaWdoYW5kIG9ubHkgZHVyaW5nIHJlYWQoKSBhbmQgcG9sbCgpLlxcbiAgMTk6XFx0ICovXFxuICAyMDpcXHRcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcG9sbC5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gIDI0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMjc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gIDMwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAgMzE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcXHUwMDNlXFxuICAzMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lnbmFsZmQuaFxcdTAwM2VcXG4gIDMzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjYWxscy5oXFx1MDAzZVxcbiAgMzQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4gIDM1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wYXQuaFxcdTAwM2VcXG4gIDM2OlxcdFxcbiAgMzc6XFx0dm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZClcXG4gIDM4OlxcdHtcXG4gIDM5OlxcdFxcdHdha2VfdXBfcG9sbGZyZWUoXFx1MDAyNnNpZ2hhbmQtXFx1MDAzZXNpZ25hbGZkX3dxaCk7XFxuICA0MDpcXHR9XFxuICA0MTpcXHRcXG4gIDQyOlxcdHN0cnVjdCBzaWduYWxmZF9jdHgge1xcbiAgNDM6XFx0XFx0LyogU2VyaWFsaXplcyBzaGFyZWQgbWFzayB1cGRhdGVzIHdpdGggZmlsZS1sb2NhbCB3YWl0ZXIgd2FrZXVwcy4gKi9cXG4gIDQ0OlxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gIDQ1OlxcdFxcdHdhaXRfcXVldWVfaGVhZF90IHdxaDtcXG4gIDQ2OlxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuICA0NzpcXHRcXHRzaWdzZXRfdCBzaWdtYXNrO1xcbiAgNDg6XFx0fTtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0c3RhdGljIGludCBzaWduYWxmZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiAgNTE6XFx0e1xcbiAgNTI6XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHR3YWtlX3VwX3BvbGxmcmVlKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCk7XFxuICA1NTpcXHRcXHRrZnJlZV9yY3UoY3R4LCByY3UpO1xcbiAgNTY6XFx0XFx0cmV0dXJuIDA7XFxuICA1NzpcXHR9XFxuICA1ODpcXHRcXG4gIDU5OlxcdHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbiAgNjA6XFx0e1xcbiAgNjE6XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAgNjI6XFx0XFx0X19wb2xsX3QgZXZlbnRzID0gMDtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZjdHgtXFx1MDAzZXdxaCwgd2FpdCk7XFxuICA2NTpcXHRcXHRwb2xsX3dhaXQoZmlsZSwgXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ25hbGZkX3dxaCwgd2FpdCk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuICA2ODpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbiAgNjk6XFx0XFx0aWYgKG5leHRfc2lnbmFsKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VwZW5kaW5nLCBcXHUwMDI2Y3R4LVxcdTAwM2VzaWdtYXNrKSB8fFxcbiAgNzA6XFx0XFx0ICAgIG5leHRfc2lnbmFsKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZXNoYXJlZF9wZW5kaW5nLFxcbiAgNzE6XFx0XFx0XFx0XFx0XFx1MDAyNmN0eC1cXHUwMDNlc2lnbWFzaykpXFxuICA3MjpcXHRcXHRcXHRldmVudHMgfD0gRVBPTExJTjtcXG4gIDczOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4gIDc0OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0cmV0dXJuIGV2ZW50cztcXG4gIDc3OlxcdH1cXG4gIDc4OlxcdFxcbiAgNzk6XFx0LypcXG4gIDgwOlxcdCAqIENvcGllZCBmcm9tIGNvcHlfc2lnaW5mb190b191c2VyKCkgaW4ga2VybmVsL3NpZ25hbC5jXFxuICA4MTpcXHQgKi9cXG4gIDgyOlxcdHN0YXRpYyBpbnQgc2lnbmFsZmRfY29weWluZm8oc3RydWN0IGlvdl9pdGVyICp0bywga2VybmVsX3NpZ2luZm9fdCBjb25zdCAqa2luZm8pXFxuICA4MzpcXHR7XFxuICA4NDpcXHRcXHRzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyBuZXc7XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pICE9IDEyOCk7XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdC8qXFxuICA4OTpcXHRcXHQgKiBVbnVzZWQgbWVtYmVycyBzaG91bGQgYmUgemVybyAuLi5cXG4gIDkwOlxcdFxcdCAqL1xcbiAgOTE6XFx0XFx0bWVtc2V0KFxcdTAwMjZuZXcsIDAsIHNpemVvZihuZXcpKTtcXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0LypcXG4gIDk0OlxcdFxcdCAqIElmIHlvdSBjaGFuZ2Ugc2lnaW5mb190IHN0cnVjdHVyZSwgcGxlYXNlIGJlIHN1cmVcXG4gIDk1OlxcdFxcdCAqIHRoaXMgY29kZSBpcyBmaXhlZCBhY2NvcmRpbmdseS5cXG4gIDk2OlxcdFxcdCAqL1xcbiAgOTc6XFx0XFx0bmV3LnNzaV9zaWdubyA9IGtpbmZvLVxcdTAwM2VzaV9zaWdubztcXG4gIDk4OlxcdFxcdG5ldy5zc2lfZXJybm8gPSBraW5mby1cXHUwMDNlc2lfZXJybm87XFxuICA5OTpcXHRcXHRuZXcuc3NpX2NvZGUgID0ga2luZm8tXFx1MDAzZXNpX2NvZGU7XFxuIDEwMDpcXHRcXHRzd2l0Y2ggKHNpZ2luZm9fbGF5b3V0KGtpbmZvLVxcdTAwM2VzaV9zaWdubywga2luZm8tXFx1MDAzZXNpX2NvZGUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjE1LjUxODkwOTYyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTg5ODM4NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLi4uXG5cbioqRGl2aW5nIGludG8gYGZzL3NpZ25hbGZkLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgcmVzdCBvZiBgZnMvc2lnbmFsZmQuY2AuIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgaW1wbGVtZW50YXRpb24uIEkndmUgYWxyZWFkeSBnb3QgYSBoYW5kbGUgb24gdGhlIGdlbmVyYWwgY29uY2VwdCBvZiBzaWduYWxmZCwgYnV0IEkgd2FudCB0byBzZWUgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCdzIHNpZ25hbCBkZWxpdmVyeSBtZWNoYW5pc21zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIGFuZCB0aGUgdmFyaW91cyBsb2NraW5nIHN0cmF0ZWdpZXMuIEknbSBsb29raW5nIGZvciBlbGVnYW5jZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IHVudXN1YWwgZGVzaWduIGNob2ljZXMgdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZyBvciBpbnN0cnVjdGl2ZS4gSG9wZWZ1bGx5LCBJJ2xsIHVuY292ZXIgc29tZSBiZXN0IHByYWN0aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDU6MTcuNzA4NzUxNzEzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zaWduYWxmZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0XFx0Y2FzZSBTSUxfS0lMTDpcXG4gMTAyOlxcdFxcdFxcdG5ldy5zc2lfcGlkID0ga2luZm8tXFx1MDAzZXNpX3BpZDtcXG4gMTAzOlxcdFxcdFxcdG5ldy5zc2lfdWlkID0ga2luZm8tXFx1MDAzZXNpX3VpZDtcXG4gMTA0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMDU6XFx0XFx0Y2FzZSBTSUxfVElNRVI6XFxuIDEwNjpcXHRcXHRcXHRuZXcuc3NpX3RpZCA9IGtpbmZvLVxcdTAwM2VzaV90aWQ7XFxuIDEwNzpcXHRcXHRcXHRuZXcuc3NpX292ZXJydW4gPSBraW5mby1cXHUwMDNlc2lfb3ZlcnJ1bjtcXG4gMTA4OlxcdFxcdFxcdG5ldy5zc2lfcHRyID0gKGxvbmcpIGtpbmZvLVxcdTAwM2VzaV9wdHI7XFxuIDEwOTpcXHRcXHRcXHRuZXcuc3NpX2ludCA9IGtpbmZvLVxcdTAwM2VzaV9pbnQ7XFxuIDExMDpcXHRcXHRcXHRicmVhaztcXG4gMTExOlxcdFxcdGNhc2UgU0lMX1BPTEw6XFxuIDExMjpcXHRcXHRcXHRuZXcuc3NpX2JhbmQgPSBraW5mby1cXHUwMDNlc2lfYmFuZDtcXG4gMTEzOlxcdFxcdFxcdG5ldy5zc2lfZmQgICA9IGtpbmZvLVxcdTAwM2VzaV9mZDtcXG4gMTE0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMTU6XFx0XFx0Y2FzZSBTSUxfRkFVTFRfQk5ERVJSOlxcbiAxMTY6XFx0XFx0Y2FzZSBTSUxfRkFVTFRfUEtVRVJSOlxcbiAxMTc6XFx0XFx0Y2FzZSBTSUxfRkFVTFRfUEVSRl9FVkVOVDpcXG4gMTE4OlxcdFxcdFxcdC8qXFxuIDExOTpcXHRcXHRcXHQgKiBGYWxsIHRocm91Z2ggdG8gdGhlIFNJTF9GQVVMVCBjYXNlLiAgU0lMX0ZBVUxUX0JOREVSUixcXG4gMTIwOlxcdFxcdFxcdCAqIFNJTF9GQVVMVF9QS1VFUlIsIGFuZCBTSUxfRkFVTFRfUEVSRl9FVkVOVCBhcmUgb25seVxcbiAxMjE6XFx0XFx0XFx0ICogZ2VuZXJhdGVkIGJ5IGZhdWx0cyB0aGF0IGRlbGl2ZXIgdGhlbSBzeW5jaHJvbm91c2x5IHRvXFxuIDEyMjpcXHRcXHRcXHQgKiB1c2Vyc3BhY2UuICBJbiBjYXNlIHNvbWVvbmUgaW5qZWN0cyBvbmUgb2YgdGhlc2Ugc2lnbmFsc1xcbiAxMjM6XFx0XFx0XFx0ICogYW5kIHNpZ25hbGZkIGNhdGNoZXMgaXQgdHJlYXQgaXQgYXMgU0lMX0ZBVUxULlxcbiAxMjQ6XFx0XFx0XFx0ICovXFxuIDEyNTpcXHRcXHRjYXNlIFNJTF9GQVVMVDpcXG4gMTI2OlxcdFxcdFxcdG5ldy5zc2lfYWRkciA9IChsb25nKSBraW5mby1cXHUwMDNlc2lfYWRkcjtcXG4gMTI3OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjg6XFx0XFx0Y2FzZSBTSUxfRkFVTFRfVFJBUE5POlxcbiAxMjk6XFx0XFx0XFx0bmV3LnNzaV9hZGRyID0gKGxvbmcpIGtpbmZvLVxcdTAwM2VzaV9hZGRyO1xcbiAxMzA6XFx0XFx0XFx0bmV3LnNzaV90cmFwbm8gPSBraW5mby1cXHUwMDNlc2lfdHJhcG5vO1xcbiAxMzE6XFx0XFx0XFx0YnJlYWs7XFxuIDEzMjpcXHRcXHRjYXNlIFNJTF9GQVVMVF9NQ0VFUlI6XFxuIDEzMzpcXHRcXHRcXHRuZXcuc3NpX2FkZHIgPSAobG9uZykga2luZm8tXFx1MDAzZXNpX2FkZHI7XFxuIDEzNDpcXHRcXHRcXHRuZXcuc3NpX2FkZHJfbHNiID0gKHNob3J0KSBraW5mby1cXHUwMDNlc2lfYWRkcl9sc2I7XFxuIDEzNTpcXHRcXHRcXHRicmVhaztcXG4gMTM2OlxcdFxcdGNhc2UgU0lMX0NITEQ6XFxuIDEzNzpcXHRcXHRcXHRuZXcuc3NpX3BpZCAgICA9IGtpbmZvLVxcdTAwM2VzaV9waWQ7XFxuIDEzODpcXHRcXHRcXHRuZXcuc3NpX3VpZCAgICA9IGtpbmZvLVxcdTAwM2VzaV91aWQ7XFxuIDEzOTpcXHRcXHRcXHRuZXcuc3NpX3N0YXR1cyA9IGtpbmZvLVxcdTAwM2VzaV9zdGF0dXM7XFxuIDE0MDpcXHRcXHRcXHRuZXcuc3NpX3V0aW1lICA9IGtpbmZvLVxcdTAwM2VzaV91dGltZTtcXG4gMTQxOlxcdFxcdFxcdG5ldy5zc2lfc3RpbWUgID0ga2luZm8tXFx1MDAzZXNpX3N0aW1lO1xcbiAxNDI6XFx0XFx0XFx0YnJlYWs7XFxuIDE0MzpcXHRcXHRjYXNlIFNJTF9SVDpcXG4gMTQ0OlxcdFxcdFxcdC8qXFxuIDE0NTpcXHRcXHRcXHQgKiBUaGlzIGNhc2UgY2F0Y2hlcyBhbHNvIHRoZSBzaWduYWxzIHF1ZXVlZCBieSBzaWdxdWV1ZSgpLlxcbiAxNDY6XFx0XFx0XFx0ICovXFxuIDE0NzpcXHRcXHRcXHRuZXcuc3NpX3BpZCA9IGtpbmZvLVxcdTAwM2VzaV9waWQ7XFxuIDE0ODpcXHRcXHRcXHRuZXcuc3NpX3VpZCA9IGtpbmZvLVxcdTAwM2VzaV91aWQ7XFxuIDE0OTpcXHRcXHRcXHRuZXcuc3NpX3B0ciA9IChsb25nKSBraW5mby1cXHUwMDNlc2lfcHRyO1xcbiAxNTA6XFx0XFx0XFx0bmV3LnNzaV9pbnQgPSBraW5mby1cXHUwMDNlc2lfaW50O1xcbiAxNTE6XFx0XFx0XFx0YnJlYWs7XFxuIDE1MjpcXHRcXHRjYXNlIFNJTF9TWVM6XFxuIDE1MzpcXHRcXHRcXHRuZXcuc3NpX2NhbGxfYWRkciA9IChsb25nKSBraW5mby1cXHUwMDNlc2lfY2FsbF9hZGRyO1xcbiAxNTQ6XFx0XFx0XFx0bmV3LnNzaV9zeXNjYWxsICAgPSBraW5mby1cXHUwMDNlc2lfc3lzY2FsbDtcXG4gMTU1OlxcdFxcdFxcdG5ldy5zc2lfYXJjaCAgICAgID0ga2luZm8tXFx1MDAzZXNpX2FyY2g7XFxuIDE1NjpcXHRcXHRcXHRicmVhaztcXG4gMTU3OlxcdFxcdH1cXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0aWYgKCFjb3B5X3RvX2l0ZXJfZnVsbChcXHUwMDI2bmV3LCBzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pLCB0bykpXFxuIDE2MDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMTYxOlxcdFxcbiAxNjI6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyk7XFxuIDE2MzpcXHR9XFxuIDE2NDpcXHRcXG4gMTY1OlxcdHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvLFxcbiAxNjY6XFx0XFx0XFx0XFx0XFx0aW50IG5vbmJsb2NrKVxcbiAxNjc6XFx0e1xcbiAxNjg6XFx0XFx0ZW51bSBwaWRfdHlwZSB0eXBlO1xcbiAxNjk6XFx0XFx0c3NpemVfdCByZXQ7XFxuIDE3MDpcXHRcXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcXG4gMTcxOlxcdFxcdERFQ0xBUkVfV0FJVFFVRVVFKGN0eF93YWl0LCBjdXJyZW50KTtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMTc0OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIDE3NTpcXHRcXHRyZXQgPSBkZXF1ZXVlX3NpZ25hbChcXHUwMDI2Y3R4LVxcdTAwM2VzaWdtYXNrLCBpbmZvLCBcXHUwMDI2dHlwZSk7XFxuIDE3NjpcXHRcXHRzd2l0Y2ggKHJldCkge1xcbiAxNzc6XFx0XFx0Y2FzZSAwOlxcbiAxNzg6XFx0XFx0XFx0aWYgKCFub25ibG9jaylcXG4gMTc5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxODA6XFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4gMTgxOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAxODI6XFx0XFx0ZGVmYXVsdDpcXG4gMTgzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4gMTg0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMTg1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4NjpcXHRcXHR9XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCwgXFx1MDAyNmN0eF93YWl0KTtcXG4gMTg5OlxcdFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgsIFxcdTAwMjZ3YWl0KTtcXG4gMTkwOlxcdFxcdGZvciAoOzspIHtcXG4gMTkxOlxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIDE5MjpcXHRcXHRcXHRyZXQgPSBkZXF1ZXVlX3NpZ25hbChcXHUwMDI2Y3R4LVxcdTAwM2VzaWdtYXNrLCBpbmZvLCBcXHUwMDI2dHlwZSk7XFxuIDE5MzpcXHRcXHRcXHRpZiAocmV0ICE9IDApXFxuIDE5NDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTk1OlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbiAxOTY6XFx0XFx0XFx0XFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xcbiAxOTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE5ODpcXHRcXHRcXHR9XFxuIDE5OTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIDIwMDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjE3LjcwODg3OTE2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjYzMzEyODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gc2lnbmFsZmQuYyoqXG5cbkFscmlnaHQsIHRvIGZ1bGx5IGdyYXNwIHRoaXMgYmVoYXZpb3IsIEkgbmVlZCB0byBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBmcy9zaWduYWxmZC5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAyMDEgdGhyb3VnaCAzMTUuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBhcm91bmQgd2hhdGV2ZXIgYXNwZWN0IG9mIHRoaXMgaXMgdGhyb3dpbmcgbWUuIEkgZmlndXJlIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMgaGFwcGVuaW5nIGFuZCB3aGVyZSBJJ20gbW9zdCBsaWtlbHkgdG8gZmluZCB0aGUgYW5zd2VyLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhvc2UgbGluZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NToyMS45NzIxOTU0NDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3NpZ25hbGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMTpcXHRcXHRcXHRzY2hlZHVsZSgpO1xcbiAyMDI6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMjAzOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIDIwNDpcXHRcXHR9XFxuIDIwNTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIDIwNjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdHJlbW92ZV93YWl0X3F1ZXVlKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgsIFxcdTAwMjZ3YWl0KTtcXG4gMjA5OlxcdFxcdHJlbW92ZV93YWl0X3F1ZXVlKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCwgXFx1MDAyNmN0eF93YWl0KTtcXG4gMjEwOlxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjEzOlxcdH1cXG4gMjE0OlxcdFxcbiAyMTU6XFx0LypcXG4gMjE2OlxcdCAqIFJldHVybnMgYSBtdWx0aXBsZSBvZiB0aGUgc2l6ZSBvZiBhIFxcXCJzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mb1xcXCIsIG9yIGEgbmVnYXRpdmVcXG4gMjE3OlxcdCAqIGVycm9yIGNvZGUuIFRoZSBcXFwiY291bnRcXFwiIHBhcmFtZXRlciBtdXN0IGJlIGF0IGxlYXN0IHRoZSBzaXplIG9mIGFcXG4gMjE4OlxcdCAqIFxcXCJzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mb1xcXCIuXFxuIDIxOTpcXHQgKi9cXG4gMjIwOlxcdHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuIDIyMTpcXHR7XFxuIDIyMjpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDIyNDpcXHRcXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudCh0byk7XFxuIDIyNTpcXHRcXHRzc2l6ZV90IHJldCwgdG90YWwgPSAwO1xcbiAyMjY6XFx0XFx0a2VybmVsX3NpZ2luZm9fdCBpbmZvO1xcbiAyMjc6XFx0XFx0Ym9vbCBub25ibG9jaztcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0Y291bnQgLz0gc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKTtcXG4gMjMwOlxcdFxcdGlmICghY291bnQpXFxuIDIzMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0bm9uYmxvY2sgPSBmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19OT05CTE9DSyB8fCBpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUO1xcbiAyMzQ6XFx0XFx0ZG8ge1xcbiAyMzU6XFx0XFx0XFx0cmV0ID0gc2lnbmFsZmRfZGVxdWV1ZShjdHgsIFxcdTAwMjZpbmZvLCBub25ibG9jayk7XFxuIDIzNjpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2M9IDApKVxcbiAyMzc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDIzODpcXHRcXHRcXHRyZXQgPSBzaWduYWxmZF9jb3B5aW5mbyh0bywgXFx1MDAyNmluZm8pO1xcbiAyMzk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDI0MDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjQxOlxcdFxcdFxcdHRvdGFsICs9IHJldDtcXG4gMjQyOlxcdFxcdFxcdG5vbmJsb2NrID0gMTtcXG4gMjQzOlxcdFxcdH0gd2hpbGUgKC0tY291bnQpO1xcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHRyZXR1cm4gdG90YWwgPyB0b3RhbDogcmV0O1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG4gMjQ5OlxcdHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXFxuIDI1MDpcXHR7XFxuIDI1MTpcXHRcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDI1MjpcXHRcXHRzaWdzZXRfdCBzaWdtYXNrO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAyNTU6XFx0XFx0c2lnbWFzayA9IGN0eC1cXHUwMDNlc2lnbWFzaztcXG4gMjU2OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMjU3OlxcdFxcdHNpZ25vdHNldChcXHUwMDI2c2lnbWFzayk7XFxuIDI1ODpcXHRcXHRyZW5kZXJfc2lnc2V0X3QobSwgXFxcInNpZ21hc2s6XFxcXHRcXFwiLCBcXHUwMDI2c2lnbWFzayk7XFxuIDI1OTpcXHR9XFxuIDI2MDpcXHQjZW5kaWZcXG4gMjYxOlxcdFxcbiAyNjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2lnbmFsZmRfZm9wcyA9IHtcXG4gMjYzOlxcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbiAyNjQ6XFx0XFx0LnNob3dfZmRpbmZvXFx0PSBzaWduYWxmZF9zaG93X2ZkaW5mbyxcXG4gMjY1OlxcdCNlbmRpZlxcbiAyNjY6XFx0XFx0LnJlbGVhc2VcXHQ9IHNpZ25hbGZkX3JlbGVhc2UsXFxuIDI2NzpcXHRcXHQucG9sbFxcdFxcdD0gc2lnbmFsZmRfcG9sbCxcXG4gMjY4OlxcdFxcdC5yZWFkX2l0ZXJcXHQ9IHNpZ25hbGZkX3JlYWRfaXRlcixcXG4gMjY5OlxcdFxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcbiAyNzA6XFx0fTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0c3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncylcXG4gMjczOlxcdHtcXG4gMjc0OlxcdFxcdC8qIENoZWNrIHRoZSBTRkRfKiBjb25zdGFudHMgZm9yIGNvbnNpc3RlbmN5LiAgKi9cXG4gMjc1OlxcdFxcdEJVSUxEX0JVR19PTihTRkRfQ0xPRVhFQyAhPSBPX0NMT0VYRUMpO1xcbiAyNzY6XFx0XFx0QlVJTERfQlVHX09OKFNGRF9OT05CTE9DSyAhPSBPX05PTkJMT0NLKTtcXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgfihTRkRfQ0xPRVhFQyB8IFNGRF9OT05CTE9DSykpXFxuIDI3OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0c2lnZGVsc2V0bWFzayhtYXNrLCBzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSk7XFxuIDI4MjpcXHRcXHRzaWdub3RzZXQobWFzayk7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdGlmICh1ZmQgPT0gLTEpIHtcXG4gMjg1OlxcdFxcdFxcdGludCBmZDtcXG4gMjg2OlxcdFxcdFxcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0XFx0Y3R4ID0ga21hbGxvY19vYmooKmN0eCk7XFxuIDI4OTpcXHRcXHRcXHRpZiAoIWN0eClcXG4gMjkwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMjkzOlxcdFxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmN0eC1cXHUwMDNld3FoKTtcXG4gMjk0OlxcdFxcdFxcdGN0eC1cXHUwMDNlc2lnbWFzayA9ICptYXNrO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHRmZCA9IEZEX0FERChmbGFncyBcXHUwMDI2IE9fQ0xPRVhFQyxcXG4gMjk3OlxcdFxcdFxcdFxcdCAgICBhbm9uX2lub2RlX2dldGZpbGVfZm1vZGUoXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHQgICAgXFxcIltzaWduYWxmZF1cXFwiLCBcXHUwMDI2c2lnbmFsZmRfZm9wcywgY3R4LFxcbiAyOTk6XFx0XFx0XFx0XFx0XFx0ICAgIE9fUkRXUiB8IChmbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0spLCBGTU9ERV9OT1dBSVQpKTtcXG4gMzAwOlxcdFxcdFxcdGlmIChmZCBcXHUwMDNlPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NToyMS45NzIzNjU2MjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg1MDI3OTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBTaWduYWxmZCBDb250ZXh0IFdhaXRxdWV1ZSBFbmhhbmNlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gdGhlIEtNU0FOIGltcGxpY2F0aW9ucywgc28gaGVyZSdzIHRoZSBwcm9jZXNzOlxuXG5GaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBwZXItc2lnbmFsZmQgY29udGV4dCB3YWl0IHF1ZXVlIChgd3FoYCksIGEgc3BpbmxvY2sgKGBsb2NrYCksIGFuZCBhbiBSQ1UgaGVhZCB0byB0aGUgYHNpZ25hbGZkX2N0eGAgc3RydWN0dXJlLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gcmVsaWVkIG9uIHRoZSBgY3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaGAsIHdoaWNoIGNhdXNlZCBwcm9ibGVtcyB3aXRoIHNoYXJlZCBzaWduYWxmZCBmaWxlIGRlc2NyaXB0b3JzIGFjcm9zcyBwcm9jZXNzZXMgKGZvcmtlZCBwcm9jZXNzZXMgb3IgcHJvY2Vzc2VzIG1vZGlmeWluZyB0aGUgZGVzY3JpcHRvciB3aXRoIGBzaWduYWxmZGApLiBUaGUgbmV3IGB3cWhgIGVuc3VyZXMgdGhhdCB3YWtldXBzIGhhcHBlbiBjb3JyZWN0bHksIGlycmVzcGVjdGl2ZSBvZiB0aGUgcHJvY2VzcyBjYWxsaW5nIGBzaWduYWxmZGAuIFdoZW4gYSBzaWduYWwgbWFzayBpcyB1cGRhdGVkIGluIGBkb19zaWduYWxmZDRgLCB0aGUgYGN0eC1cdTAwM2Vsb2NrYCBpcyB0YWtlbiwgYGN0eC1cdTAwM2VzaWdtYXNrYCBpcyB1cGRhdGVkLCBhbmQgYGN0eC1cdTAwM2V3cWhgIGlzIHdva2VuLiBUaGUgd2FpdHF1ZXVlIGlzIHJlZ2lzdGVyZWQgdG8gYm90aCBgY3R4LVx1MDAzZXdxaGAgYW5kIGBzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaGAgaW4gYHNpZ25hbGZkX3BvbGxgIGFuZCBgc2lnbmFsZmRfZGVxdWV1ZWAgdW5kZXIgYXBwcm9wcmlhdGUgbG9ja3MuIEFuZCwgZmluYWxseSwgd2hlbiB0aGUgZGVzY3JpcHRvciBpcyByZWxlYXNlZCwgYHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaClgIGFuZCBga2ZyZWVfcmN1KGN0eCwgcmN1KWAgZW5zdXJlIGEgY2xlYW4gUkNVIGNsZWFudXAuXG5cbk5vdywgZm9yIHRoZSBLTVNBTiBhbmFseXNpcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGFkZGl0aW9uIG9mIHRoaXMgc3RydWN0dXJlIGRvZXNuJ3QgbGVhZCB0byBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbjEuICAqKkluaXRpYWxpemF0aW9uOioqIFRoZSBgc2lnbmFsZmRfY3R4YCBmaWVsZHMgKGBsb2NrYCwgYHdxaGAsIGFuZCBgc2lnbWFza2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIHdpdGggYGttYWxsb2Nfb2JqYC4gVGhlIHNwaW5sb2NrIGlzIGluaXRpYWxpemVkIHdpdGggYHNwaW5fbG9ja19pbml0YCwgdGhlIHdhaXRxdWV1ZSBoZWFkIGlzIGluaXRpYWxpemVkIHVzaW5nIGBpbml0X3dhaXRxdWV1ZV9oZWFkYCwgYW5kIGBjdHgtXHUwMDNlc2lnbWFza2AgaXMgaW5pdGlhbGl6ZWQgYnkgYXNzaWdubWVudC4gVGhlIFJDVSBoZWFkIGlzIGluaXRpYWxpemVkIGltcGxpY2l0bHkuIEFsbCBmaWVsZHMgd2l0aGluIHRoZSBjb250ZXh0IGFyZSB0aGVyZWZvcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG5cbjIuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb25zOioqIEkndmUgY2FyZWZ1bGx5IHJldmlld2VkIGhvdyB1c2VyLXNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBjaGFuZ2VzLiBgc2lnbmFsZmRfc2hvd19mZGluZm9gIGNvcGllcyB0aGUgYHNpZ21hc2tgIHVuZGVyIHRoZSBsb2NrLCBjb252ZXJ0cyB0aGUgbWFzayB3aXRoIGBzaWdub3RzZXRgLCBhbmQgdGhlbiBmb3JtYXRzIGl0IGFzIHRleHQuIGBzaWduYWxmZF9kZXF1ZXVlYCB1c2VzIGEgc3RhY2stYWxsb2NhdGVkIHdhaXRxdWV1ZSBlbnRyeSwgc28gdGhlcmUgYXJlIG5vIGlzc3Vlcy4gVGhlIGBzaWduYWxmZF9jb3B5aW5mb2AgZnVuY3Rpb24gaXMgdW5jaGFuZ2VkLCB3aGljaCBtZWFucyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYG5ld2Agc3RydWN0IHJlbWFpbnMgaW50YWN0LiBgc2lnbmFsZmRfcG9sbGAgaW5pdGlhbGl6ZXMgdGhlIGV2ZW50cyBiaXRtYXNrIHRvIDAuIE5vbmUgb2YgdGhlc2UgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuMy4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIHdoaWNoIHdvdWxkIGJlIGEgY3JpdGljYWwgS01TQU4gY29uY2Vybi5cblxuNC4gICoqS01TQU4gQ29uZGl0aW9uczoqKiBJJ3ZlIGdvbmUgdGhyb3VnaCBlYWNoIG9mIHRoZSBmb3VyIHBvdGVudGlhbCBLTVNBTiBjb25kaXRpb25zOlxuICAgICogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBvciB6ZXJvZWQgZmllbGRzLiBUaGUgc3RydWN0IHRoYXQgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgY29udGludWVzIHRvIGJlIHplcm9lZCBvdXQuXG4gICAgKiAgIE5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4gICAgKiAgIEFsbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uLlxuICAgICogICBUaGVyZSdzIG5vIG9wcG9ydHVuaXR5IGZvciBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLCBlaXRoZXIuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIE5lZWRzS01TQU4gaXMgZGVmaW5pdGVseSBgZmFsc2VgLiBUaGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuXG5cbkluc3RlYWQsIEknbGwgZmxhZyBvdGhlciBzYW5pdGl6ZXJzLiBUaGlzIHdpbGwgbmVlZCBMT0NLREVQIGZvciBsb2NraW5nIG9yZGVyL2RlYWRsb2NrIGlzc3VlcyBiZXR3ZWVuIGBjdHgtXHUwMDNlbG9ja2AgYW5kIGBjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9ja2AsIGFuZCBLQVNBTiBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHdhaXRxdWV1ZSBsaWZldGltZS9SQ1UgaXNzdWVzLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGdvb2Qgc29sdXRpb24gdG8gZml4IGEgZnVuZGFtZW50YWwgaXNzdWUuIFRoZSBwZXItZmlsZSB3YWl0cXVldWUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhdm9pZGluZyB0aGUgcHJvYmxlbXMgb2Ygc2hhcmluZyBhIGdsb2JhbCBvbmUuIFRoZSBjb2RlIHBhdGhzIGFyZW4ndCBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGZvY3VzIG5vdyBzaGlmdHMgdG8gc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLCB3aGljaCBpcyB3ZWxsIGNvdmVyZWQgYnkgdGhlIHN0YW5kYXJkIHRvb2xjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2ODgsIk91dHB1dFRva2VucyI6MjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjMxLjgyMjY0NzQ1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlZGljYXRlZCB3YWl0cXVldWUgKGB3cWhgKSwgc3BpbmxvY2sgKGBsb2NrYCksIGFuZCBSQ1UtYmFzZWQgZnJlZWluZyAoYHJjdV9oZWFkYCkgdG8gYHN0cnVjdCBzaWduYWxmZF9jdHhgIGluIGBmcy9zaWduYWxmZC5jYCBzbyB0aGF0IG1hc2sgdXBkYXRlcyB2aWEgYHNpZ25hbGZkNGAgcHJvcGVybHkgd2FrZSB1cCB3YWl0ZXJzIGFjcm9zcyBwcm9jZXNzZXMuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxcbjEuIEFsbCBmaWVsZHMgb2YgYHN0cnVjdCBzaWduYWxmZF9jdHhgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYHNwaW5fbG9ja19pbml0KFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spYCwgYGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmN0eC1cXHUwMDNld3FoKWAsIGBjdHgtXFx1MDAzZXNpZ21hc2sgPSAqbWFza2ApLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZSBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IHNpZ25hbGZkX3NpZ2luZm9gKSByZW1haW5zIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXRgIGluIGBzaWduYWxmZF9jb3B5aW5mbygpYC5cXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cXHUwMDNlbG9ja2AgYW5kIGBzaWdoYW5kLVxcdTAwM2VzaWdsb2NrYCksIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTiwgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgd2FpdHF1ZXVlIChgd3FoYCksIHNwaW5sb2NrIChgbG9ja2ApLCBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgKGByY3VfaGVhZGApIHRvIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBpbiBgZnMvc2lnbmFsZmQuY2Agc28gdGhhdCBtYXNrIHVwZGF0ZXMgdmlhIGBzaWduYWxmZDRgIHByb3Blcmx5IHdha2UgdXAgd2FpdGVycyBhY3Jvc3MgcHJvY2Vzc2VzLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcXG4xLiBBbGwgZmllbGRzIG9mIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKGBzcGluX2xvY2tfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKWAsIGBpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZjdHgtXFx1MDAzZXdxaClgLCBgY3R4LVxcdTAwM2VzaWdtYXNrID0gKm1hc2tgKS5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGUga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvYCkgcmVtYWlucyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0YCBpbiBgc2lnbmFsZmRfY29weWluZm8oKWAuXFxuMy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBpbnZvbHZlIHN5bmNocm9uaXphdGlvbiwgd2FpdHF1ZXVlIG9yZGVyaW5nLCBvciBsb2NrIGhpZXJhcmNoaWVzIChiZXR3ZWVuIGBjdHgtXFx1MDAzZWxvY2tgIGFuZCBgc2lnaGFuZC1cXHUwMDNlc2lnbG9ja2ApLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG5vdCBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7nrb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 21:38:46 +0000 UTC FinishedAt: 2026-08-31 22:45:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SIGNALFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SIGNALFD" ], "series_id": "15596c67-4468-4f2e-a38f-36f12ad706be" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "signalfd_poll", "signalfd_dequeue", "signalfd_release", "do_signalfd4", "signalfd_cleanup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NJR05BTEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2lnbmFsZmRfcG9sbCYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O3NpZ25hbGZkX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZG9fc2lnbmFsZmQ0JiMzNDssCiAgICAmIzM0O3NpZ25hbGZkX2NsZWFudXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHdhaXRxdWV1ZSAoYHdxaGApLCBzcGlubG9jayAoYGxvY2tgKSwgYW5kIFJDVS1iYXNlZCBmcmVlaW5nIChgcmN1X2hlYWRgKSB0byBgc3RydWN0IHNpZ25hbGZkX2N0eGAgaW4gYGZzL3NpZ25hbGZkLmNgIHNvIHRoYXQgbWFzayB1cGRhdGVzIHZpYSBgc2lnbmFsZmQ0YCBwcm9wZXJseSB3YWtlIHVwIHdhaXRlcnMgYWNyb3NzIHByb2Nlc3Nlcy5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxuMS4gQWxsIGZpZWxkcyBvZiBgc3RydWN0IHNpZ25hbGZkX2N0eGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIChgc3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spYCwgYGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2Y3R4LVx1MDAzZXdxaClgLCBgY3R4LVx1MDAzZXNpZ21hc2sgPSAqbWFza2ApLlxuMi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBzdHJ1Y3R1cmUgKGBzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mb2ApIHJlbWFpbnMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldGAgaW4gYHNpZ25hbGZkX2NvcHlpbmZvKClgLlxuMy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBpbnZvbHZlIHN5bmNocm9uaXphdGlvbiwgd2FpdHF1ZXVlIG9yZGVyaW5nLCBvciBsb2NrIGhpZXJhcmNoaWVzIChiZXR3ZWVuIGBjdHgtXHUwMDNlbG9ja2AgYW5kIGBzaWdoYW5kLVx1MDAzZXNpZ2xvY2tgKSwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhhbmRsaW5nIGluIHNpZ25hbGZkIChmcy9zaWduYWxmZC5jKS4gSW4gcGFydGljdWxhciwgaXQgaW50cm9kdWNlcyBjdHgtbGV2ZWwgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoZWFkLCB1cGRhdGluZyBzaWduYWxmZF9wb2xsLCBzaWduYWxmZF9kZXF1ZXVlLCBzaWduYWxmZF9yZWxlYXNlLCBhbmQgZG9fc2lnbmFsZmQ0IHRvIHN1cHBvcnQgd2FraW5nIHdhaXRlcnMgdXBvbiBzaWduYWxmZCBtYXNrIHVwZGF0ZXMgYWNyb3NzIHRocmVhZHMvcHJvY2Vzc2VzLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYTkwNmUxNjVhMGE3MzdkZmZlZmM0OTAyOTA2MDVmNDcwMzAzZTIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6NDM6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc2lnbmFsZmQuYyBiL2ZzL3NpZ25hbGZkLmNcbmluZGV4IGRmZjUzNzQ1ZTM1MjQuLjUyM2MzYTZkYzU2NTkgMTAwNjQ0XG4tLS0gYS9mcy9zaWduYWxmZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zaWduYWxmZC5jXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbm9uX2lub2Rlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbkBAIC0zOSwxMiAmIzQzOzQwLDE5IEBAIHZvaWQgc2lnbmFsZmRfY2xlYW51cChzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2hhbmQpXG4gfVxuIFxuIHN0cnVjdCBzaWduYWxmZF9jdHgge1xuJiM0MztcdC8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovXG4mIzQzO1x0c3BpbmxvY2tfdCBsb2NrO1xuJiM0MztcdHdhaXRfcXVldWVfaGVhZF90IHdxaDtcbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIFx0c2lnc2V0X3Qgc2lnbWFzaztcbiB9O1xuIFxuIHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4mIzQzO1x0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4mIzQzO1x0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01MywxNCAmIzQzOzYxLDE3IEBAIHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxuIFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRfX3BvbGxfdCBldmVudHMgPSAwO1xuIFxuJiM0MztcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdHgtXHUwMDNld3FoLCB3YWl0KTtcbiBcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCB3YWl0KTtcbiBcbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gXHRpZiAobmV4dF9zaWduYWwoXHUwMDI2Y3VycmVudC1cdTAwM2VwZW5kaW5nLCBcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaykgfHxcbiBcdCAgICBuZXh0X3NpZ25hbChcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VzaGFyZWRfcGVuZGluZyxcbiBcdFx0XHRcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaykpXG4gXHRcdGV2ZW50cyB8PSBFUE9MTElOO1xuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiBldmVudHM7XG4gfVxuQEAgLTE1Nyw4ICYjNDM7MTY4LDEwIEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvXG4gXHRlbnVtIHBpZF90eXBlIHR5cGU7XG4gXHRzc2l6ZV90IHJldDtcbiBcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuJiM0MztcdERFQ0xBUkVfV0FJVFFVRVVFKGN0eF93YWl0LCBjdXJyZW50KTtcbiBcbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gXHRyZXQgPSBkZXF1ZXVlX3NpZ25hbChcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaywgaW5mbywgXHUwMDI2dHlwZSk7XG4gXHRzd2l0Y2ggKHJldCkge1xuIFx0Y2FzZSAwOlxuQEAgLTE2NywxMCAmIzQzOzE4MCwxMiBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGRlZmF1bHQ6XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuJiM0MztcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiBcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgsIFx1MDAyNndhaXQpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuQEAgLTE4MSwxMyAmIzQzOzE5NiwxNyBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0XHRcdHJldCA9IC1FUkVTVEFSVFNZUztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdFx0c2NoZWR1bGUoKTtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gXHR9XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFxuIFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaCwgXHUwMDI2d2FpdCk7XG4mIzQzO1x0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2Y3R4LVx1MDAzZXdxaCwgXHUwMDI2Y3R4X3dhaXQpO1xuIFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0yMzIsNyAmIzQzOzI1MSw5IEBAIHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXG4gXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHNpZ3NldF90IHNpZ21hc2s7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRzaWdtYXNrID0gY3R4LVx1MDAzZXNpZ21hc2s7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdHNpZ25vdHNldChcdTAwMjZzaWdtYXNrKTtcbiBcdHJlbmRlcl9zaWdzZXRfdChtLCBcJiMzNDtzaWdtYXNrOlxcdFwmIzM0OywgXHUwMDI2c2lnbWFzayk7XG4gfVxuQEAgLTI2OCw2ICYjNDM7Mjg5LDggQEAgc3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncylcbiBcdFx0aWYgKCFjdHgpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzQzO1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuIFxuIFx0XHRmZCA9IEZEX0FERChmbGFncyBcdTAwMjYgT19DTE9FWEVDLFxuQEAgLTI4NiwxMSAmIzQzOzMwOSwxMSBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKVxuIFx0XHRjdHggPSBmZF9maWxlKGYpLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdFx0aWYgKGZkX2ZpbGUoZiktXHUwMDNlZl9vcCAhPSBcdTAwMjZzaWduYWxmZF9mb3BzKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0d2FrZV91cChcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoKTtcbiYjNDM7XHRcdHdha2VfdXAoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdWZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcbmluZGV4IDNmMzM5ODY1YTNiNmUuLjVjYWM1MzJkNDlhZTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcbkBAIC0xLDMgJiM0MzsxLDQgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiBtYW5nbGVfdWNfc2lnbWFza1xuIHNhc1xuJiM0MztzaWduYWxmZF9tYXNrX3dha2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcbmluZGV4IGUwYmY3MDU4ZDE5YzkuLjAwZjFlOTZjOTJjNGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZVxuQEAgLTIsNiAmIzQzOzIsNiBAQFxuIENGTEFHUyA9IC1XYWxsXG4gVEVTVF9HRU5fUFJPR1MgPSBtYW5nbGVfdWNfc2lnbWFza1xuIFRFU1RfR0VOX1BST0dTICYjNDM7PSBzYXNcbiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHNpZ25hbGZkX21hc2tfd2FrZVxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG4tXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2U2MDQyNGI5ZWM5ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jXG5AQCAtMCwwICYjNDM7MSwyNjYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc2lnbmFsZmQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnB0ciA9IGJ1ZjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxlbikge1xuJiM0MztcdFx0c3NpemVfdCByZXQgPSB3cml0ZShmZCwgcHRyLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cHRyICYjNDM7PSByZXQ7XG4mIzQzO1x0XHRsZW4gLT0gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9hbGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpwdHIgPSBidWY7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4pIHtcbiYjNDM7XHRcdHNzaXplX3QgcmV0ID0gcmVhZChmZCwgcHRyLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0XHRwdHIgJiM0Mzs9IHJldDtcbiYjNDM7XHRcdGxlbiAtPSByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga2lsbF9hbmRfcmVhcChwaWRfdCBwaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRpZiAocGlkIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuJiM0MztcdHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdhaXRfcmVzdWx0KGludCBmZCwgaW50IHRpbWVvdXRfbXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcbiYjNDM7XHRcdC5mZCA9IGZkLFxuJiM0MztcdFx0LmV2ZW50cyA9IFBPTExJTixcbiYjNDM7XHR9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHBvbGwoXHUwMDI2cGZkLCAxLCB0aW1lb3V0X21zKTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGlsZF9pbl9zaWduYWxmZF9yZWFkKHBpZF90IHBpZCwgaW50IHNmZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFs2NF07XG4mIzQzO1x0Y2hhciBidWZbMjU2XTtcbiYjNDM7XHRsb25nIG5yO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYXJnMDtcbiYjNDM7XHRGSUxFICpmcDtcbiYjNDM7XHRpbnQgaW5fcmVhZCA9IDA7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7L3Byb2MvJWQvc3lzY2FsbFwmIzM0OywgcGlkKTtcbiYjNDM7XHRmcCA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZnApIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc3NjYW5mKGJ1ZiwgXCYjMzQ7JWxkICVseFwmIzM0OywgXHUwMDI2bnIsIFx1MDAyNmFyZzApID09IDIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG5yID09IF9fTlJfcmVhZCBcdTAwMjZcdTAwMjYgYXJnMCA9PSAodW5zaWduZWQgbG9uZylzZmQpXG4mIzQzO1x0XHRpbl9yZWFkID0gMTtcbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGZwKTtcbiYjNDM7XHRyZXR1cm4gaW5fcmVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3YWl0X2Zvcl9jaGlsZF9ibG9jayhwaWRfdCBwaWQsIGludCBzZmQsIGludCB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHdhaXRlZF9tcyA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHdhaXRlZF9tcyBcdTAwM2MgdGltZW91dF9tcykge1xuJiM0MztcdFx0cmV0ID0gY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWQsIHNmZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHR1c2xlZXAoMTAwMDApO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0XHR3YWl0ZWRfbXMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gZmRzaTtcbiYjNDM7XHRzaWdzZXRfdCBibG9ja2VkLCBpbml0aWFsX21hc2ssIHVwZGF0ZWRfbWFzaztcbiYjNDM7XHRpbnQgcmVhZHlfcGlwZVsyXSwgc3RhcnRfcGlwZVsyXSwgcmVzdWx0X3BpcGVbMl07XG4mIzQzO1x0aW50IHNmZCwgc2lnbm8sIHN0YXR1cztcbiYjNDM7XHRwaWRfdCBjaGlsZDtcbiYjNDM7XHRjaGFyIHJlYWR5LCBzdGFydDtcbiYjNDM7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRrc2Z0X3NldF9wbGFuKDEpO1xuJiM0MztcbiYjNDM7XHRzaWdlbXB0eXNldChcdTAwMjZibG9ja2VkKTtcbiYjNDM7XHRzaWdhZGRzZXQoXHUwMDI2YmxvY2tlZCwgU0lHVVNSMSk7XG4mIzQzO1x0c2lnYWRkc2V0KFx1MDAyNmJsb2NrZWQsIFNJR1VTUjIpO1xuJiM0MztcdGlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIFx1MDAyNmJsb2NrZWQsIE5VTEwpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3NpZ3Byb2NtYXNrXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c2lnZW1wdHlzZXQoXHUwMDI2aW5pdGlhbF9tYXNrKTtcbiYjNDM7XHRzaWdhZGRzZXQoXHUwMDI2aW5pdGlhbF9tYXNrLCBTSUdVU1IxKTtcbiYjNDM7XHRzZmQgPSBzaWduYWxmZCgtMSwgXHUwMDI2aW5pdGlhbF9tYXNrLCAwKTtcbiYjNDM7XHRpZiAoc2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3NpZ25hbGZkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBpcGUocmVhZHlfcGlwZSkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cGlwZShyZWFkeSlcJiMzNDspO1xuJiM0MztcdGlmIChwaXBlKHN0YXJ0X3BpcGUpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3BpcGUoc3RhcnQpXCYjMzQ7KTtcbiYjNDM7XHRpZiAocGlwZShyZXN1bHRfcGlwZSkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cGlwZShyZXN1bHQpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Y2hpbGQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKGNoaWxkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O2ZvcmtcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hpbGQgPT0gMCkge1xuJiM0MztcdFx0Y2xvc2UocmVhZHlfcGlwZVswXSk7XG4mIzQzO1x0XHRjbG9zZShzdGFydF9waXBlWzFdKTtcbiYjNDM7XHRcdGNsb3NlKHJlc3VsdF9waXBlWzBdKTtcbiYjNDM7XG4mIzQzO1x0XHRyZWFkeSA9ICYjMzk7UiYjMzk7O1xuJiM0MztcdFx0aWYgKHdyaXRlX2FsbChyZWFkeV9waXBlWzFdLCBcdTAwMjZyZWFkeSwgc2l6ZW9mKHJlYWR5KSkpXG4mIzQzO1x0XHRcdF9leGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJlYWRfYWxsKHN0YXJ0X3BpcGVbMF0sIFx1MDAyNnN0YXJ0LCBzaXplb2Yoc3RhcnQpKSlcbiYjNDM7XHRcdFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoXHUwMDI2ZmRzaSwgMCwgc2l6ZW9mKGZkc2kpKTtcbiYjNDM7XHRcdGlmIChyZWFkX2FsbChzZmQsIFx1MDAyNmZkc2ksIHNpemVvZihmZHNpKSkpXG4mIzQzO1x0XHRcdF9leGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1xuJiM0MztcdFx0c2lnbm8gPSBmZHNpLnNzaV9zaWdubztcbiYjNDM7XHRcdGlmICh3cml0ZV9hbGwocmVzdWx0X3BpcGVbMV0sIFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSlcbiYjNDM7XHRcdFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XG4mIzQzO1x0XHRfZXhpdChFWElUX1NVQ0NFU1MpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xvc2UocmVhZHlfcGlwZVsxXSk7XG4mIzQzO1x0Y2xvc2Uoc3RhcnRfcGlwZVswXSk7XG4mIzQzO1x0Y2xvc2UocmVzdWx0X3BpcGVbMV0pO1xuJiM0MztcbiYjNDM7XHRpZiAocmVhZF9hbGwocmVhZHlfcGlwZVswXSwgXHUwMDI2cmVhZHksIHNpemVvZihyZWFkeSkpKSB7XG4mIzQzO1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtjaGlsZCBkaWQgbm90IHJlYWNoIGJsb2NraW5nIHJlYWRcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGtpbGwoY2hpbGQsIFNJR1VTUjIpKSB7XG4mIzQzO1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDtraWxsKFNJR1VTUjIpXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXJ0ID0gJiMzOTtTJiMzOTs7XG4mIzQzO1x0aWYgKHdyaXRlX2FsbChzdGFydF9waXBlWzFdLCBcdTAwMjZzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpIHtcbiYjNDM7XHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2NvdWxkIG5vdCByZWxlYXNlIGNoaWxkIGludG8gc2lnbmFsZmQgcmVhZFxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSB3YWl0X2Zvcl9jaGlsZF9ibG9jayhjaGlsZCwgc2ZkLCAxMDAwKTtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdGlmIChzdGF0dXMgPT0gLTEpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0Oy9wcm9jL1x1MDAzY3BpZFx1MDAzZS9zeXNjYWxsIGlzIHVuYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtjaGlsZCBkaWQgbm90IGJsb2NrIGluIHNpZ25hbGZkIHJlYWRcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2lnZW1wdHlzZXQoXHUwMDI2dXBkYXRlZF9tYXNrKTtcbiYjNDM7XHRzaWdhZGRzZXQoXHUwMDI2dXBkYXRlZF9tYXNrLCBTSUdVU1IyKTtcbiYjNDM7XHRpZiAoc2lnbmFsZmQoc2ZkLCBcdTAwMjZ1cGRhdGVkX21hc2ssIDApIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDtzaWduYWxmZChyZWNvbmZpZ3VyZSlcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHdhaXRfcmVzdWx0KHJlc3VsdF9waXBlWzBdLCAxMDAwKSA9PSAxKSB7XG4mIzQzO1x0XHRpZiAocmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sIFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSkge1xuJiM0MztcdFx0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2NoaWxkIHdha2V1cCBkaWQgbm90IGNhcnJ5IGEgc2lnbmFsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAod2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSAhPSBjaGlsZCkge1xuJiM0MztcdFx0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3dhaXRwaWRcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdChzaWdubyA9PSBTSUdVU1IyIFx1MDAyNlx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtzaGFyZWQgc2lnbmFsZmQgd2FrZXVwIGFmdGVyIG1hc2sgdXBkYXRlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9wYXNzKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJ1Z2d5IGtlcm5lbHMgbGVhdmUgdGhlIGNoaWxkIGFzbGVlcCB1bnRpbCBhbiB1bnJlbGF0ZWQgc2lnbmFsIGhpdHNcbiYjNDM7XHQgKiB0aGUgY2hpbGQmIzM5O3Mgc2lnbmFsZmQgd2FpdHF1ZXVlLiBTSUdVU1IxIGRvZXMgbm90IG1hdGNoIHRoZSB1cGRhdGVkXG4mIzQzO1x0ICogc2lnbmFsZmQgbWFzaywgc28gYSBzdWNjZXNzZnVsIHJlYWQgb2YgU0lHVVNSMiBhZnRlciB0aGlzIG51ZGdlXG4mIzQzO1x0ICogZGVtb25zdHJhdGVzIHRoZSBtaXNzZWQgd2FrZXVwLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChraWxsKGNoaWxkLCBTSUdVU1IxKSkge1xuJiM0MztcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7a2lsbChTSUdVU1IxKVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFyZWFkX2FsbChyZXN1bHRfcGlwZVswXSwgXHUwMDI2c2lnbm8sIHNpemVvZihzaWdubykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB3YWl0cGlkKGNoaWxkLCBcdTAwMjZzdGF0dXMsIDApID09IGNoaWxkIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzaWdubyA9PSBTSUdVU1IyIFx1MDAyNlx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCYjMzQ7bWFzayB1cGRhdGUgbWlzc2VkIGEgc2hhcmVkIHNpZ25hbGZkIHdhaXRlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtjaGlsZCB3b2tlIG9ubHkgYWZ0ZXIgYW4gdW5yZWxhdGVkIFNJR1VTUjFcXG5cJiMzNDspO1xuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuJiM0MztcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtjaGlsZCByZW1haW5lZCBibG9ja2VkIGFmdGVyIHNpZ25hbGZkIHJlY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSUdOQUxGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NpZ25hbGZkX3BvbGwmIzM0OywKICAgICYjMzQ7c2lnbmFsZmRfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2RvX3NpZ25hbGZkNCYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhhbmRsaW5nIGluIHNpZ25hbGZkIChmcy9zaWduYWxmZC5jKS4gSW4gcGFydGljdWxhciwgaXQgaW50cm9kdWNlcyBjdHgtbGV2ZWwgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoZWFkLCB1cGRhdGluZyBzaWduYWxmZF9wb2xsLCBzaWduYWxmZF9kZXF1ZXVlLCBzaWduYWxmZF9yZWxlYXNlLCBhbmQgZG9fc2lnbmFsZmQ0IHRvIHN1cHBvcnQgd2FraW5nIHdhaXRlcnMgdXBvbiBzaWduYWxmZCBtYXNrIHVwZGF0ZXMgYWNyb3NzIHRocmVhZHMvcHJvY2Vzc2VzLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYTkwNmUxNjVhMGE3MzdkZmZlZmM0OTAyOTA2MDVmNDcwMzAzZTIzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjI6NDM6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zaWduYWxmZC5jIGIvZnMvc2lnbmFsZmQuYwppbmRleCBkZmY1Mzc0NWUzNTI0Li41MjNjM2E2ZGM1NjU5IDEwMDY0NAotLS0gYS9mcy9zaWduYWxmZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NpZ25hbGZkLmMKQEAgLTI3LDYgJiM0MzsyNyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Fub25faW5vZGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2lnbmFsZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjYWxscy5oJmd0OwpAQCAtMzksMTIgJiM0Mzs0MCwxOSBAQCB2b2lkIHNpZ25hbGZkX2NsZWFudXAoc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kKQogfQogCiBzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHsKJiM0MzsJLyogU2VyaWFsaXplcyBzaGFyZWQgbWFzayB1cGRhdGVzIHdpdGggZmlsZS1sb2NhbCB3YWl0ZXIgd2FrZXVwcy4gKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwomIzQzOwl3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7CiYjNDM7CXN0cnVjdCByY3VfaGVhZCByY3U7CiAJc2lnc2V0X3Qgc2lnbWFzazsKIH07CiAKIHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlrZnJlZShmaWxlLSZndDtwcml2YXRlX2RhdGEpOwomIzQzOwlzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CXdha2VfdXBfcG9sbGZyZWUoJmFtcDtjdHgtJmd0O3dxaCk7CiYjNDM7CWtmcmVlX3JjdShjdHgsIHJjdSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUzLDE0ICYjNDM7NjEsMTcgQEAgc3RhdGljIF9fcG9sbF90IHNpZ25hbGZkX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiAJc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCV9fcG9sbF90IGV2ZW50cyA9IDA7CiAKJiM0MzsJcG9sbF93YWl0KGZpbGUsICZhbXA7Y3R4LSZndDt3cWgsIHdhaXQpOwogCXBvbGxfd2FpdChmaWxlLCAmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ25hbGZkX3dxaCwgd2FpdCk7CiAKLQlzcGluX2xvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fbG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKIAlpZiAobmV4dF9zaWduYWwoJmFtcDtjdXJyZW50LSZndDtwZW5kaW5nLCAmYW1wO2N0eC0mZ3Q7c2lnbWFzaykgfHwKIAkgICAgbmV4dF9zaWduYWwoJmFtcDtjdXJyZW50LSZndDtzaWduYWwtJmd0O3NoYXJlZF9wZW5kaW5nLAogCQkJJmFtcDtjdHgtJmd0O3NpZ21hc2spKQogCQlldmVudHMgfD0gRVBPTExJTjsKLQlzcGluX3VubG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAogCXJldHVybiBldmVudHM7CiB9CkBAIC0xNTcsOCAmIzQzOzE2OCwxMCBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mbwogCWVudW0gcGlkX3R5cGUgdHlwZTsKIAlzc2l6ZV90IHJldDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKJiM0MzsJREVDTEFSRV9XQUlUUVVFVUUoY3R4X3dhaXQsIGN1cnJlbnQpOwogCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiAJcmV0ID0gZGVxdWV1ZV9zaWduYWwoJmFtcDtjdHgtJmd0O3NpZ21hc2ssIGluZm8sICZhbXA7dHlwZSk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIDA6CkBAIC0xNjcsMTAgJiM0MzsxODAsMTIgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm8KIAkJcmV0ID0gLUVBR0FJTjsKIAkJZmFsbHRocm91Z2g7CiAJZGVmYXVsdDoKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKJiM0MzsJYWRkX3dhaXRfcXVldWUoJmFtcDtjdHgtJmd0O3dxaCwgJmFtcDtjdHhfd2FpdCk7CiAJYWRkX3dhaXRfcXVldWUoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWduYWxmZF93cWgsICZhbXA7d2FpdCk7CiAJZm9yICg7OykgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtMTgxLDEzICYjNDM7MTk2LDE3IEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvCiAJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCQlzY2hlZHVsZSgpOwotCQlzcGluX2xvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX2xvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAogCXJlbW92ZV93YWl0X3F1ZXVlKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbmFsZmRfd3FoLCAmYW1wO3dhaXQpOwomIzQzOwlyZW1vdmVfd2FpdF9xdWV1ZSgmYW1wO2N0eC0mZ3Q7d3FoLCAmYW1wO2N0eF93YWl0KTsKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjMyLDcgJiM0MzsyNTEsOSBAQCBzdGF0aWMgdm9pZCBzaWduYWxmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKQogCXN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGYtJmd0O3ByaXZhdGVfZGF0YTsKIAlzaWdzZXRfdCBzaWdtYXNrOwogCiYjNDM7CXNwaW5fbG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCXNpZ21hc2sgPSBjdHgtJmd0O3NpZ21hc2s7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAJc2lnbm90c2V0KCZhbXA7c2lnbWFzayk7CiAJcmVuZGVyX3NpZ3NldF90KG0sICYjMzQ7c2lnbWFzazpcdCYjMzQ7LCAmYW1wO3NpZ21hc2spOwogfQpAQCAtMjY4LDYgJiM0MzsyODksOCBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKQogCQlpZiAoIWN0eCkKIAkJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CQlzcGluX2xvY2tfaW5pdCgmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7Y3R4LSZndDt3cWgpOwogCQljdHgtJmd0O3NpZ21hc2sgPSAqbWFzazsKIAogCQlmZCA9IEZEX0FERChmbGFncyAmYW1wOyBPX0NMT0VYRUMsCkBAIC0yODYsMTEgJiM0MzszMDksMTEgQEAgc3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncykKIAkJY3R4ID0gZmRfZmlsZShmKS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCQlpZiAoZmRfZmlsZShmKS0mZ3Q7Zl9vcCAhPSAmYW1wO3NpZ25hbGZkX2ZvcHMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3Bpbl9sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAJCWN0eC0mZ3Q7c2lnbWFzayA9ICptYXNrOwotCQlzcGluX3VubG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAKLQkJd2FrZV91cCgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ25hbGZkX3dxaCk7CiYjNDM7CQl3YWtlX3VwKCZhbXA7Y3R4LSZndDt3cWgpOwogCX0KIAogCXJldHVybiB1ZmQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlCmluZGV4IDNmMzM5ODY1YTNiNmUuLjVjYWM1MzJkNDlhZTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlCkBAIC0xLDMgJiM0MzsxLDQgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogbWFuZ2xlX3VjX3NpZ21hc2sKIHNhcwomIzQzO3NpZ25hbGZkX21hc2tfd2FrZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlCmluZGV4IGUwYmY3MDU4ZDE5YzkuLjAwZjFlOTZjOTJjNGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGUKQEAgLTIsNiAmIzQzOzIsNiBAQAogQ0ZMQUdTID0gLVdhbGwKIFRFU1RfR0VOX1BST0dTID0gbWFuZ2xlX3VjX3NpZ21hc2sKIFRFU1RfR0VOX1BST0dTICYjNDM7PSBzYXMKJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gc2lnbmFsZmRfbWFza193YWtlCiAKIGluY2x1ZGUgLi4vbGliLm1rCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zZTYwNDI0YjllYzllCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jCkBAIC0wLDAgJiM0MzsxLDI2NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3NpZ25hbGZkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnB0ciA9IGJ1ZjsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbikgewomIzQzOwkJc3NpemVfdCByZXQgPSB3cml0ZShmZCwgcHRyLCBsZW4pOwomIzQzOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXB0ciAmIzQzOz0gcmV0OwomIzQzOwkJbGVuIC09IHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZWFkX2FsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgKnB0ciA9IGJ1ZjsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbikgewomIzQzOwkJc3NpemVfdCByZXQgPSByZWFkKGZkLCBwdHIsIGxlbik7CiYjNDM7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCWlmIChlcnJubyA9PSBFSU5UUikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJaWYgKHJldCA9PSAwKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJCXB0ciAmIzQzOz0gcmV0OwomIzQzOwkJbGVuIC09IHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga2lsbF9hbmRfcmVhcChwaWRfdCBwaWQpCiYjNDM7ewomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwlpZiAocGlkICZsdDs9IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWtpbGwocGlkLCBTSUdLSUxMKTsKJiM0MzsJd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3YWl0X3Jlc3VsdChpbnQgZmQsIGludCB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvbGxmZCBwZmQgPSB7CiYjNDM7CQkuZmQgPSBmZCwKJiM0MzsJCS5ldmVudHMgPSBQT0xMSU4sCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXJldCA9IHBvbGwoJmFtcDtwZmQsIDEsIHRpbWVvdXRfbXMpOwomIzQzOwl9IHdoaWxlIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoaWxkX2luX3NpZ25hbGZkX3JlYWQocGlkX3QgcGlkLCBpbnQgc2ZkKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XTsKJiM0MzsJY2hhciBidWZbMjU2XTsKJiM0MzsJbG9uZyBucjsKJiM0MzsJdW5zaWduZWQgbG9uZyBhcmcwOwomIzQzOwlGSUxFICpmcDsKJiM0MzsJaW50IGluX3JlYWQgPSAwOwomIzQzOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7L3Byb2MvJWQvc3lzY2FsbCYjMzQ7LCBwaWQpOwomIzQzOwlmcCA9IGZvcGVuKHBhdGgsICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFmcCkgewomIzQzOwkJaWYgKGVycm5vID09IEVOT0VOVCkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICZhbXA7JmFtcDsKJiM0MzsJICAgIHNzY2FuZihidWYsICYjMzQ7JWxkICVseCYjMzQ7LCAmYW1wO25yLCAmYW1wO2FyZzApID09IDIgJmFtcDsmYW1wOwomIzQzOwkgICAgbnIgPT0gX19OUl9yZWFkICZhbXA7JmFtcDsgYXJnMCA9PSAodW5zaWduZWQgbG9uZylzZmQpCiYjNDM7CQlpbl9yZWFkID0gMTsKJiM0MzsKJiM0MzsJZmNsb3NlKGZwKTsKJiM0MzsJcmV0dXJuIGluX3JlYWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd2FpdF9mb3JfY2hpbGRfYmxvY2socGlkX3QgcGlkLCBpbnQgc2ZkLCBpbnQgdGltZW91dF9tcykKJiM0Mzt7CiYjNDM7CWludCB3YWl0ZWRfbXMgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl3aGlsZSAod2FpdGVkX21zICZsdDsgdGltZW91dF9tcykgewomIzQzOwkJcmV0ID0gY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWQsIHNmZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKHJldCAmZ3Q7IDApIHsKJiM0MzsJCQl1c2xlZXAoMTAwMDApOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwkJd2FpdGVkX21zJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyBmZHNpOwomIzQzOwlzaWdzZXRfdCBibG9ja2VkLCBpbml0aWFsX21hc2ssIHVwZGF0ZWRfbWFzazsKJiM0MzsJaW50IHJlYWR5X3BpcGVbMl0sIHN0YXJ0X3BpcGVbMl0sIHJlc3VsdF9waXBlWzJdOwomIzQzOwlpbnQgc2ZkLCBzaWdubywgc3RhdHVzOwomIzQzOwlwaWRfdCBjaGlsZDsKJiM0MzsJY2hhciByZWFkeSwgc3RhcnQ7CiYjNDM7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CWtzZnRfc2V0X3BsYW4oMSk7CiYjNDM7CiYjNDM7CXNpZ2VtcHR5c2V0KCZhbXA7YmxvY2tlZCk7CiYjNDM7CXNpZ2FkZHNldCgmYW1wO2Jsb2NrZWQsIFNJR1VTUjEpOwomIzQzOwlzaWdhZGRzZXQoJmFtcDtibG9ja2VkLCBTSUdVU1IyKTsKJiM0MzsJaWYgKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJmFtcDtibG9ja2VkLCBOVUxMKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3NpZ3Byb2NtYXNrJiMzNDspOwomIzQzOwomIzQzOwlzaWdlbXB0eXNldCgmYW1wO2luaXRpYWxfbWFzayk7CiYjNDM7CXNpZ2FkZHNldCgmYW1wO2luaXRpYWxfbWFzaywgU0lHVVNSMSk7CiYjNDM7CXNmZCA9IHNpZ25hbGZkKC0xLCAmYW1wO2luaXRpYWxfbWFzaywgMCk7CiYjNDM7CWlmIChzZmQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7c2lnbmFsZmQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChwaXBlKHJlYWR5X3BpcGUpKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7cGlwZShyZWFkeSkmIzM0Oyk7CiYjNDM7CWlmIChwaXBlKHN0YXJ0X3BpcGUpKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7cGlwZShzdGFydCkmIzM0Oyk7CiYjNDM7CWlmIChwaXBlKHJlc3VsdF9waXBlKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3BpcGUocmVzdWx0KSYjMzQ7KTsKJiM0MzsKJiM0MzsJY2hpbGQgPSBmb3JrKCk7CiYjNDM7CWlmIChjaGlsZCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtmb3JrJiMzNDspOwomIzQzOwomIzQzOwlpZiAoY2hpbGQgPT0gMCkgewomIzQzOwkJY2xvc2UocmVhZHlfcGlwZVswXSk7CiYjNDM7CQljbG9zZShzdGFydF9waXBlWzFdKTsKJiM0MzsJCWNsb3NlKHJlc3VsdF9waXBlWzBdKTsKJiM0MzsKJiM0MzsJCXJlYWR5ID0gJiMzOTtSJiMzOTs7CiYjNDM7CQlpZiAod3JpdGVfYWxsKHJlYWR5X3BpcGVbMV0sICZhbXA7cmVhZHksIHNpemVvZihyZWFkeSkpKQomIzQzOwkJCV9leGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CiYjNDM7CQlpZiAocmVhZF9hbGwoc3RhcnRfcGlwZVswXSwgJmFtcDtzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpCiYjNDM7CQkJX2V4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsKJiM0MzsJCW1lbXNldCgmYW1wO2Zkc2ksIDAsIHNpemVvZihmZHNpKSk7CiYjNDM7CQlpZiAocmVhZF9hbGwoc2ZkLCAmYW1wO2Zkc2ksIHNpemVvZihmZHNpKSkpCiYjNDM7CQkJX2V4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsKJiM0MzsJCXNpZ25vID0gZmRzaS5zc2lfc2lnbm87CiYjNDM7CQlpZiAod3JpdGVfYWxsKHJlc3VsdF9waXBlWzFdLCAmYW1wO3NpZ25vLCBzaXplb2Yoc2lnbm8pKSkKJiM0MzsJCQlfZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwomIzQzOwkJX2V4aXQoRVhJVF9TVUNDRVNTKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShyZWFkeV9waXBlWzFdKTsKJiM0MzsJY2xvc2Uoc3RhcnRfcGlwZVswXSk7CiYjNDM7CWNsb3NlKHJlc3VsdF9waXBlWzFdKTsKJiM0MzsKJiM0MzsJaWYgKHJlYWRfYWxsKHJlYWR5X3BpcGVbMF0sICZhbXA7cmVhZHksIHNpemVvZihyZWFkeSkpKSB7CiYjNDM7CQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2NoaWxkIGRpZCBub3QgcmVhY2ggYmxvY2tpbmcgcmVhZFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChraWxsKGNoaWxkLCBTSUdVU1IyKSkgewomIzQzOwkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtraWxsKFNJR1VTUjIpJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXJ0ID0gJiMzOTtTJiMzOTs7CiYjNDM7CWlmICh3cml0ZV9hbGwoc3RhcnRfcGlwZVsxXSwgJmFtcDtzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpIHsKJiM0MzsJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Y291bGQgbm90IHJlbGVhc2UgY2hpbGQgaW50byBzaWduYWxmZCByZWFkXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhdHVzID0gd2FpdF9mb3JfY2hpbGRfYmxvY2soY2hpbGQsIHNmZCwgMTAwMCk7CiYjNDM7CWlmIChzdGF0dXMgJmx0OyAwKSB7CiYjNDM7CQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCWlmIChzdGF0dXMgPT0gLTEpCiYjNDM7CQkJa3NmdF9leGl0X3NraXAoJiMzNDsvcHJvYy8mbHQ7cGlkJmd0Oy9zeXNjYWxsIGlzIHVuYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtjaGlsZCBkaWQgbm90IGJsb2NrIGluIHNpZ25hbGZkIHJlYWRcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlzaWdlbXB0eXNldCgmYW1wO3VwZGF0ZWRfbWFzayk7CiYjNDM7CXNpZ2FkZHNldCgmYW1wO3VwZGF0ZWRfbWFzaywgU0lHVVNSMik7CiYjNDM7CWlmIChzaWduYWxmZChzZmQsICZhbXA7dXBkYXRlZF9tYXNrLCAwKSAmbHQ7IDApIHsKJiM0MzsJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7c2lnbmFsZmQocmVjb25maWd1cmUpJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh3YWl0X3Jlc3VsdChyZXN1bHRfcGlwZVswXSwgMTAwMCkgPT0gMSkgewomIzQzOwkJaWYgKHJlYWRfYWxsKHJlc3VsdF9waXBlWzBdLCAmYW1wO3NpZ25vLCBzaXplb2Yoc2lnbm8pKSkgewomIzQzOwkJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2NoaWxkIHdha2V1cCBkaWQgbm90IGNhcnJ5IGEgc2lnbmFsXG4mIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAod2FpdHBpZChjaGlsZCwgJmFtcDtzdGF0dXMsIDApICE9IGNoaWxkKSB7CiYjNDM7CQkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7d2FpdHBpZCYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQoc2lnbm8gPT0gU0lHVVNSMiAmYW1wOyZhbXA7IFdJRkVYSVRFRChzdGF0dXMpICZhbXA7JmFtcDsKJiM0MzsJCQkJIFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCwKJiM0MzsJCQkJICYjMzQ7c2hhcmVkIHNpZ25hbGZkIHdha2V1cCBhZnRlciBtYXNrIHVwZGF0ZVxuJiMzNDspOwomIzQzOwkJa3NmdF9leGl0X3Bhc3MoKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCdWdneSBrZXJuZWxzIGxlYXZlIHRoZSBjaGlsZCBhc2xlZXAgdW50aWwgYW4gdW5yZWxhdGVkIHNpZ25hbCBoaXRzCiYjNDM7CSAqIHRoZSBjaGlsZCYjMzk7cyBzaWduYWxmZCB3YWl0cXVldWUuIFNJR1VTUjEgZG9lcyBub3QgbWF0Y2ggdGhlIHVwZGF0ZWQKJiM0MzsJICogc2lnbmFsZmQgbWFzaywgc28gYSBzdWNjZXNzZnVsIHJlYWQgb2YgU0lHVVNSMiBhZnRlciB0aGlzIG51ZGdlCiYjNDM7CSAqIGRlbW9uc3RyYXRlcyB0aGUgbWlzc2VkIHdha2V1cC4KJiM0MzsJICovCiYjNDM7CWlmIChraWxsKGNoaWxkLCBTSUdVU1IxKSkgewomIzQzOwkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtraWxsKFNJR1VTUjEpJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh3YWl0X3Jlc3VsdChyZXN1bHRfcGlwZVswXSwgMTAwMCkgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sICZhbXA7c2lnbm8sIHNpemVvZihzaWdubykpICZhbXA7JmFtcDsKJiM0MzsJICAgIHdhaXRwaWQoY2hpbGQsICZhbXA7c3RhdHVzLCAwKSA9PSBjaGlsZCAmYW1wOyZhbXA7CiYjNDM7CSAgICBzaWdubyA9PSBTSUdVU1IyICZhbXA7JmFtcDsgV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDApIHsKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHRfZmFpbCgmIzM0O21hc2sgdXBkYXRlIG1pc3NlZCBhIHNoYXJlZCBzaWduYWxmZCB3YWl0ZXJcbiYjMzQ7KTsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2hpbGQgd29rZSBvbmx5IGFmdGVyIGFuIHVucmVsYXRlZCBTSUdVU1IxXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtjaGlsZCByZW1haW5lZCBibG9ja2VkIGFmdGVyIHNpZ25hbGZkIHJlY29uZmlndXJhdGlvblxuJiMzNDspOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBzaWduYWxmZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNpZ25hbGZkYCBwYXRjaC4gVGhlIHByaW1hcnkgZm9jdXMgc2VlbXMgdG8gYmUgYXJvdW5kIGltcHJvdmluZyB0aGUgc2lnbmFsZmQgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGl0IGhhbmRsZXMgd2FpdGluZyBhbmQgcmVsZWFzaW5nIHJlc291cmNlcy4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgaXMgcHJldHR5IGZvY3VzZWQgb24gc3luY2hyb25pemF0aW9uIGFuZCB3YWtlLXVwIG1lY2hhbmlzbXMsIHdoaWNoIGFyZSBhbHdheXMgY3J1Y2lhbCBpbiBzaWduYWwgaGFuZGxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4KCkZpcnN0LCBhZGRpbmcgdGhhdCBgc3BpbmxvY2tfdCBsb2NrYCwgYHdhaXRfcXVldWVfaGVhZF90IHdxaGAsIGFuZCBgc3RydWN0IHJjdV9oZWFkIHJjdWAgdG8gdGhlIGBzaWduYWxmZF9jdHhgIHN0cnVjdCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhlc2UgY2xlYXJseSBwb2ludCB0byBlbmhhbmNlZCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIG1hbmFnZW1lbnQuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG5ldyBtZW1iZXJzIGFyZSB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuCgpUaGUgYHNpZ25hbGZkX3JlbGVhc2VgIGZ1bmN0aW9uIG5vdyB1c2VzIGB3YWtlX3VwX3BvbGxmcmVlYCBvbiB0aGUgYGN0eC0mZ3Q7d3FoYCBhbmQgY2FsbHMgYGtmcmVlX3JjdWAuIFRoaXMgc3VnZ2VzdHMgYSBjYXJlZnVsIGFwcHJvYWNoIHRvIGZyZWVpbmcgdGhlIGNvbnRleHQsIGxpa2VseSByZWxhdGVkIHRvIHNhZmVseSByZW1vdmluZyB0aGUgc2lnbmFsZmQgc3RydWN0dXJlIHdoaWxlIG1ha2luZyBzdXJlIG90aGVyIHByb2Nlc3NlcyBoYXZlIGhhZCBhIGNoYW5jZSB0byB3b3JrIG9uIGFueSByZWxldmFudCBldmVudHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3YWtlX3VwX3BvbGxmcmVlYCBpcyB1c2VkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLgoKVGhlIGBzaWduYWxmZF9wb2xsYCBtb2RpZmljYXRpb24gd2l0aCBgcG9sbF93YWl0YCBhbmQgdGhlIGxvY2tpbmcgY2hhbmdlcyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiBUaGUgYHNpZ25hbGZkX2RlcXVldWVgIGlzIGV2ZW4gbW9yZSBzbywgdXNpbmcgYm90aCBgY3R4LSZndDt3cWhgIGFuZCBgc2lnaGFuZC0mZ3Q7c2lnbmFsZmRfd3FoYCBzZWVtcyBsaWtlIGl0IG11c3QgYmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQuIEl0IGFwcGVhcnMgdGhlIGNoYW5nZXMgYXJlIG1vdmluZyB0byB1c2UgYSBwZXItYHNpZ25hbGZkX2N0eGAgd2FpdCBxdWV1ZSwgd2l0aCBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHdpdGggdGhlIHByb2Nlc3MmIzM5O3Mgc2lnbmFsIGhhbmRsZXIgc3RydWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGxvY2tpbmcgdG8gc2VlIGhvdyB0aGlzIHdvcmtzLgoKVGhlIGBzaWduYWxmZF9zaG93X2ZkaW5mb2AgY2hhbmdlLCBwYXJ0aWN1bGFybHkgdGhlIGxvY2tpbmcgaW4gdGhpcyBmdW5jdGlvbiwgaXMgaW1wb3J0YW50IGZvciBlbnN1cmluZyB0aGUgZGF0YSBkaXNwbGF5ZWQgaXMgY29uc2lzdGVudC4gYGRvX3NpZ25hbGZkNGAgaXMgYSBrZXkgcG9pbnQsIHRoZSBjaGFuZ2VzIHRvIGhvdyB0aGUgbWFzayBpcyB1cGRhdGVkIGFuZCB0aGUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBtZW1iZXJzIGFyZSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIGNhcmVmdWxseSBjb21wYXJlIHRoZSBvcmlnaW5hbCBjb2RlIHdpdGggdGhpcyB2ZXJzaW9uLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCB0aGUgcGF0Y2ggaXMgYWltZWQgdG8gcmVzb2x2ZSBhIGtub3duIHJhY2Ugb3Igc3luY2hyb25pemF0aW9uIGlzc3VlLiBUaGUgY2hhbmdlcyBmcm9tIGBjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWduYWxmZF93cWhgIHRvIGBjdHgtJmd0O3dxaGAgaW4gYGRvX3NpZ25hbGZkNGAgaXMgdGhlIGtleSBjaGFuZ2UuCgpGaW5hbGx5LCB0aGUgaW5jbHVzaW9uIG9mIHRoYXQgc2VsZnRlc3QgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuY2AgaXMgZXhjZWxsZW50LiBUaGlzIGlzIHRoZSBwcm9vZiBpbiB0aGUgcHVkZGluZywgaXQgc2hvdWxkIHZhbGlkYXRlIHRoZSBiZWhhdmlvci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNlbGZ0ZXN0IGFjdHVhbGx5IGNvdmVycyB0aGUgc2NlbmFyaW9zIHRoZSBwYXRjaCBpcyBkZXNpZ25lZCBmb3IuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGF0LCBhbmQgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBvcHRpb25zLCB0byBlbnN1cmUgbm8gaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19TSUdOQUxGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTI2PW9iai15XHRcdFx0XHQmIzQzOz0gYW5vbl9pbm9kZXMub1xuZnMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX1NJR05BTEZEKVx0XHQmIzQzOz0gc2lnbmFsZmQub1xuZnMvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX1RJTUVSRkQpXHRcdCYjNDM7PSB0aW1lcmZkLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTUwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIGFuZCBTSUdOQUxGRCAtIExldCYjMzk7cyBEaWcgSW4qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYFNJR05BTEZEYCBpcyBjb25maWd1cmVkLiBUaGlzIGxpa2VseSBtZWFucyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBidWlsZCBvcHRpb25zIGZvciB0aGUga2VybmVsIGFyZSBkZWZpbmVkLCBhbmQgYFNJR05BTEZEYCBpcyBkZWZpbml0ZWx5IHRoZSBraW5kIG9mIGZ1bmN0aW9uYWxpdHkgdGhhdCB3b3VsZCBiZSBjb250cm9sbGVkIGJ5IGEgS2NvbmZpZyBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUocykuIEl0JiMzOTtzIHByb2JhYmx5IGluIGEgbG9jYXRpb24gcmVsYXRlZCB0byB0aGUgc2lnbmFsIGhhbmRsaW5nIG9yIHN5c3RlbSBjYWxsIGFyZWFzLCBidXQgSSBtaWdodCBoYXZlIHRvIGRvIHNvbWUgc2VhcmNoaW5nIGlmIGl0JiMzOTtzIG5lc3RlZCBkZWVwZXIuIE9uY2UgSSBmaW5kIGl0LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgb3RoZXIgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBTSUdOQUxGRGAgYmVjb21lcyBhdmFpbGFibGU/IFdoYXQmIzM5O3MgdGhlIGRlZmF1bHQgc2V0dGluZywgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2hhbmdpbmcgaXQ/IEkmIzM5O2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZSBmb3IgJiMzNDtTSUdOQUxGRCYjMzQ7IGFuZCBzZWUgd2hlcmUgdGhhdCB0YWtlcyBtZS4gRnJvbSB0aGVyZSBJJiMzOTtsbCBoYXZlIGEgZ29vZCBpZGVhIG9mIHdoaWNoIEtjb25maWcgZmlsZSBJIG5lZWQgdG8gbG9vayBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0lHTkFMRkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTA3PWNvbmZpZyBFUE9MTFxuLS1cbmluaXQvS2NvbmZpZy0xOTEzLVxuaW5pdC9LY29uZmlnOjE5MTQ6Y29uZmlnIFNJR05BTEZEXG5pbml0L0tjb25maWctMTkxNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHNpZ25hbGZkKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIEtjb25maWcgZm9yIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIEkgdGhpbmsgdGhlIHJlbGV2YW50IHBhcnQgaXMgYXJvdW5kIGxpbmUgMTkxNCBpbiBgaW5pdC9LY29uZmlnYC4gTGV0JiMzOTtzIHB1bGwgdGhhdCB1cCBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gSXQmIzM5O3MgbGlrZWx5IGEgY29tcGxleCBjb25kaXRpb25hbCwgbWF5YmUgd2l0aCBzb21lIGRlcGVuZGVuY2llcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBpdC4gR290dGEgcXVpY2tseSBnZXQgYSBncmlwIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhhdCBzZWN0aW9uLiBJJiMzOTttIGhvcGluZyBJIGNhbiBnZXQgdGhpcyBmaWd1cmVkIG91dCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTEwOlx0XHRoZWxwXG4xOTExOlx0XHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxuMTkxMjpcdFx0ICBzdXBwb3J0IGZvciBlcG9sbCBmYW1pbHkgb2Ygc3lzdGVtIGNhbGxzLlxuMTkxMzpcdFxuMTkxNDpcdGNvbmZpZyBTSUdOQUxGRFxuMTkxNTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc2lnbmFsZmQoKSBzeXN0ZW0gY2FsbFwmIzM0OyBpZiBFWFBFUlRcbjE5MTY6XHRcdGRlZmF1bHQgeVxuMTkxNzpcdFx0aGVscFxuMTkxODpcdFx0ICBFbmFibGUgdGhlIHNpZ25hbGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gcmVjZWl2ZSBzaWduYWxzXG4xOTE5Olx0XHQgIG9uIGEgZmlsZSBkZXNjcmlwdG9yLlxuMTkyMDpcdFxuMTkyMTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuMTkyMjpcdFxuMTkyMzpcdGNvbmZpZyBUSU1FUkZEXG4xOTI0Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aW1lcmZkKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4xOTI1Olx0XHRkZWZhdWx0IHlcbjE5MjY6XHRcdGhlbHBcbjE5Mjc6XHRcdCAgRW5hYmxlIHRoZSB0aW1lcmZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gcmVjZWl2ZSB0aW1lclxuMTkyODpcdFx0ICBldmVudHMgb24gYSBmaWxlIGRlc2NyaXB0b3IuXG4xOTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM2NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgZnMvc2lnbmFsZmQuY2AgdG8gVW5kZXJzdGFuZCBpdHMgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIG5lZWQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIGBzaWduYWxmZGAgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9zaWduYWxmZC5jYC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZS4gS25vd2luZyB0aGUgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBgc2lnbmFsZmRgIG1lY2hhbmlzbSBpcyBzdHJ1Y3R1cmVkLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBzaWduYWwgaGFuZGxpbmcsIGFuZCBnZW5lcmFsbHkgd2hhdCB0aGUgcmVsZXZhbnQgY29udHJvbCBwb2ludHMgYXJlLiBUaGlzIHF1aWNrIHJldmlldyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGxlbWVudGF0aW9uIHdlbGwgdG8gbWFrZSByZWxldmFudCBjaGFuZ2VzLCBvciBkZWJ1ZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGBzaWduYWxmZGAuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc2lnbmFsZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogIGZzL3NpZ25hbGZkLmNcbiAgIDQ6XHQgKlxuICAgNTpcdCAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIExpbnVzIFRvcnZhbGRzXG4gICA2Olx0ICpcbiAgIDc6XHQgKiAgTW9uIE1hciA1LCAyMDA3OiBEYXZpZGUgTGliZW56aSBcdTAwM2NkYXZpZGVsQHhtYWlsc2VydmVyLm9yZ1x1MDAzZVxuICAgODpcdCAqICAgICAgQ2hhbmdlZCAtXHUwMDNlcmVhZCgpIHRvIHJldHVybiBhIHNpZ2luZm8gc3RyY3R1cmUgaW5zdGVhZCBvZiBzaWduYWwgbnVtYmVyLlxuICAgOTpcdCAqICAgICAgRml4ZWQgbG9ja2luZyBpbiAtXHUwMDNlcG9sbCgpLlxuICAxMDpcdCAqICAgICAgQWRkZWQgc2lnaGFuZC1kZXRhY2ggbm90aWZpY2F0aW9uLlxuICAxMTpcdCAqICAgICAgQWRkZWQgZmQgcmUtdXNlIGluIHN5c19zaWduYWxmZCgpIHN5c2NhbGwuXG4gIDEyOlx0ICogICAgICBOb3cgdXNpbmcgYW5vbnltb3VzIGlub2RlIHNvdXJjZS5cbiAgMTM6XHQgKiAgICAgIFRoYW5rcyB0byBPbGVnIE5lc3Rlcm92IGZvciB1c2VmdWwgY29kZSByZXZpZXcgYW5kIHN1Z2dlc3Rpb25zLlxuICAxNDpcdCAqICAgICAgTW9yZSBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgZnJvbSBBcm5kIEJlcmdtYW5uLlxuICAxNTpcdCAqICBTYXQgTWF5IDE5LCAyMDA3OiBEYXZpIEUuIE0uIEFybmF1dCBcdTAwM2NkYXZpQGhheGVudC5jb20uYnJcdTAwM2VcbiAgMTY6XHQgKiAgICAgIFJldHJpZXZlIG11bHRpcGxlIHNpZ25hbHMgd2l0aCBvbmUgcmVhZCgpIGNhbGxcbiAgMTc6XHQgKiAgU3VuIEp1bCAxNSwgMjAwNzogRGF2aWRlIExpYmVuemkgXHUwMDNjZGF2aWRlbEB4bWFpbHNlcnZlci5vcmdcdTAwM2VcbiAgMTg6XHQgKiAgICAgIEF0dGFjaCB0byB0aGUgc2lnaGFuZCBvbmx5IGR1cmluZyByZWFkKCkgYW5kIHBvbGwoKS5cbiAgMTk6XHQgKi9cbiAgMjA6XHRcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wb2xsLmhcdTAwM2VcbiAgMjM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gIDI1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAgMjk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAgMzA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gIDMxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYW5vbl9pbm9kZXMuaFx1MDAzZVxuICAzMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbGZkLmhcdTAwM2VcbiAgMzM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxscy5oXHUwMDNlXG4gIDM0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19mcy5oXHUwMDNlXG4gIDM1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAgMzY6XHRcbiAgMzc6XHR2b2lkIHNpZ25hbGZkX2NsZWFudXAoc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kKVxuICAzODpcdHtcbiAgMzk6XHRcdHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2c2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgpO1xuICA0MDpcdH1cbiAgNDE6XHRcbiAgNDI6XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHtcbiAgNDM6XHRcdC8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovXG4gIDQ0Olx0XHRzcGlubG9ja190IGxvY2s7XG4gIDQ1Olx0XHR3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7XG4gIDQ2Olx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuICA0NzpcdFx0c2lnc2V0X3Qgc2lnbWFzaztcbiAgNDg6XHR9O1xuICA0OTpcdFxuICA1MDpcdHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiAgNTE6XHR7XG4gIDUyOlx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAgNTM6XHRcbiAgNTQ6XHRcdHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4gIDU1Olx0XHRrZnJlZV9yY3UoY3R4LCByY3UpO1xuICA1NjpcdFx0cmV0dXJuIDA7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxuICA2MDpcdHtcbiAgNjE6XHRcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuICA2MjpcdFx0X19wb2xsX3QgZXZlbnRzID0gMDtcbiAgNjM6XHRcbiAgNjQ6XHRcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdHgtXHUwMDNld3FoLCB3YWl0KTtcbiAgNjU6XHRcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCB3YWl0KTtcbiAgNjY6XHRcbiAgNjc6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuICA2ODpcdFx0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAgNjk6XHRcdGlmIChuZXh0X3NpZ25hbChcdTAwMjZjdXJyZW50LVx1MDAzZXBlbmRpbmcsIFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrKSB8fFxuICA3MDpcdFx0ICAgIG5leHRfc2lnbmFsKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nLFxuICA3MTpcdFx0XHRcdFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrKSlcbiAgNzI6XHRcdFx0ZXZlbnRzIHw9IEVQT0xMSU47XG4gIDczOlx0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gIDc0Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuICA3NTpcdFxuICA3NjpcdFx0cmV0dXJuIGV2ZW50cztcbiAgNzc6XHR9XG4gIDc4Olx0XG4gIDc5Olx0LypcbiAgODA6XHQgKiBDb3BpZWQgZnJvbSBjb3B5X3NpZ2luZm9fdG9fdXNlcigpIGluIGtlcm5lbC9zaWduYWwuY1xuICA4MTpcdCAqL1xuICA4MjpcdHN0YXRpYyBpbnQgc2lnbmFsZmRfY29weWluZm8oc3RydWN0IGlvdl9pdGVyICp0bywga2VybmVsX3NpZ2luZm9fdCBjb25zdCAqa2luZm8pXG4gIDgzOlx0e1xuICA4NDpcdFx0c3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gbmV3O1xuICA4NTpcdFxuICA4NjpcdFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbykgIT0gMTI4KTtcbiAgODc6XHRcbiAgODg6XHRcdC8qXG4gIDg5Olx0XHQgKiBVbnVzZWQgbWVtYmVycyBzaG91bGQgYmUgemVybyAuLi5cbiAgOTA6XHRcdCAqL1xuICA5MTpcdFx0bWVtc2V0KFx1MDAyNm5ldywgMCwgc2l6ZW9mKG5ldykpO1xuICA5MjpcdFxuICA5MzpcdFx0LypcbiAgOTQ6XHRcdCAqIElmIHlvdSBjaGFuZ2Ugc2lnaW5mb190IHN0cnVjdHVyZSwgcGxlYXNlIGJlIHN1cmVcbiAgOTU6XHRcdCAqIHRoaXMgY29kZSBpcyBmaXhlZCBhY2NvcmRpbmdseS5cbiAgOTY6XHRcdCAqL1xuICA5NzpcdFx0bmV3LnNzaV9zaWdubyA9IGtpbmZvLVx1MDAzZXNpX3NpZ25vO1xuICA5ODpcdFx0bmV3LnNzaV9lcnJubyA9IGtpbmZvLVx1MDAzZXNpX2Vycm5vO1xuICA5OTpcdFx0bmV3LnNzaV9jb2RlICA9IGtpbmZvLVx1MDAzZXNpX2NvZGU7XG4gMTAwOlx0XHRzd2l0Y2ggKHNpZ2luZm9fbGF5b3V0KGtpbmZvLVx1MDAzZXNpX3NpZ25vLCBraW5mby1cdTAwM2VzaV9jb2RlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgZnJvbSBgZnMvc2lnbmFsZmQuY2AsIHN1bW1hcml6ZWQgZnJvbSB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhcyBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIFNpZ25hbCBGaWxlIERlc2NyaXB0b3IgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gbGluZXMgMjAwIHRocm91Z2ggMzMwIG9mIGBmcy9zaWduYWxmZC5jYC4gVGhpcyBzZWN0aW9uIGxpa2VseSBob2xkcyB0aGUgY3J1eCBvZiBob3cgdGhlIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3IgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpbmNvbWluZyBzaWduYWxzIGFyZSBoYW5kbGVkIGFuZCBkZWxpdmVyZWQgd2hlbiByZWFkIGZyb20gdGhlIGZpbGUuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIGxvZ2ljIGZvciBzaWduYWwgcXVldWluZywgcGVyaGFwcyBzb21lIG1lY2hhbmlzbXMgZm9yIGZpbHRlcmluZyB3aGljaCBzaWduYWxzIGFyZSByZWxldmFudCwgYW5kIGRlZmluaXRlbHkgdGhlIHJlYWQoKSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB1c2luZyBhIHN0YW5kYXJkIHdhaXQgcXVldWUgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQgZm9yIHNpZ25hbCBkZWxpdmVyeSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciB0aGUgbG9ja2luZyBzdHJhdGVneSBlbXBsb3llZCBoZXJlOyBpdCYjMzk7cyBjcml0aWNhbCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eSBhbmQgdGhhdCBzaWduYWxzIGFyZW4mIzM5O3QgbG9zdCBvciBtaXNkaXJlY3RlZC4gVGhpcyBwYXJ0IGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhlIGZpbmVyIHBvaW50cywgYW5kIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBkb25lIGl0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc2lnbmFsZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDIwMTpcdFx0XHRzY2hlZHVsZSgpO1xuIDIwMjpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAyMDM6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAyMDQ6XHRcdH1cbiAyMDU6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAyMDY6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMjA3Olx0XG4gMjA4Olx0XHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbiAyMDk6XHRcdHJlbW92ZV93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiAyMTA6XHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiAyMTE6XHRcbiAyMTI6XHRcdHJldHVybiByZXQ7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdC8qXG4gMjE2Olx0ICogUmV0dXJucyBhIG11bHRpcGxlIG9mIHRoZSBzaXplIG9mIGEgXCYjMzQ7c3RydWN0IHNpZ25hbGZkX3NpZ2luZm9cJiMzNDssIG9yIGEgbmVnYXRpdmVcbiAyMTc6XHQgKiBlcnJvciBjb2RlLiBUaGUgXCYjMzQ7Y291bnRcJiMzNDsgcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgYVxuIDIxODpcdCAqIFwmIzM0O3N0cnVjdCBzaWduYWxmZF9zaWdpbmZvXCYjMzQ7LlxuIDIxOTpcdCAqL1xuIDIyMDpcdHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4gMjIxOlx0e1xuIDIyMjpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4gMjIzOlx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyMjQ6XHRcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KHRvKTtcbiAyMjU6XHRcdHNzaXplX3QgcmV0LCB0b3RhbCA9IDA7XG4gMjI2Olx0XHRrZXJuZWxfc2lnaW5mb190IGluZm87XG4gMjI3Olx0XHRib29sIG5vbmJsb2NrO1xuIDIyODpcdFxuIDIyOTpcdFx0Y291bnQgLz0gc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKTtcbiAyMzA6XHRcdGlmICghY291bnQpXG4gMjMxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzMjpcdFxuIDIzMzpcdFx0bm9uYmxvY2sgPSBmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0sgfHwgaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQ7XG4gMjM0Olx0XHRkbyB7XG4gMjM1Olx0XHRcdHJldCA9IHNpZ25hbGZkX2RlcXVldWUoY3R4LCBcdTAwMjZpbmZvLCBub25ibG9jayk7XG4gMjM2Olx0XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjPSAwKSlcbiAyMzc6XHRcdFx0XHRicmVhaztcbiAyMzg6XHRcdFx0cmV0ID0gc2lnbmFsZmRfY29weWluZm8odG8sIFx1MDAyNmluZm8pO1xuIDIzOTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDI0MDpcdFx0XHRcdGJyZWFrO1xuIDI0MTpcdFx0XHR0b3RhbCAmIzQzOz0gcmV0O1xuIDI0MjpcdFx0XHRub25ibG9jayA9IDE7XG4gMjQzOlx0XHR9IHdoaWxlICgtLWNvdW50KTtcbiAyNDQ6XHRcbiAyNDU6XHRcdHJldHVybiB0b3RhbCA/IHRvdGFsOiByZXQ7XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIDI0OTpcdHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXG4gMjUwOlx0e1xuIDI1MTpcdFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZi1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMjUyOlx0XHRzaWdzZXRfdCBzaWdtYXNrO1xuIDI1MzpcdFxuIDI1NDpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMjU1Olx0XHRzaWdtYXNrID0gY3R4LVx1MDAzZXNpZ21hc2s7XG4gMjU2Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDI1NzpcdFx0c2lnbm90c2V0KFx1MDAyNnNpZ21hc2spO1xuIDI1ODpcdFx0cmVuZGVyX3NpZ3NldF90KG0sIFwmIzM0O3NpZ21hc2s6XFx0XCYjMzQ7LCBcdTAwMjZzaWdtYXNrKTtcbiAyNTk6XHR9XG4gMjYwOlx0I2VuZGlmXG4gMjYxOlx0XG4gMjYyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2lnbmFsZmRfZm9wcyA9IHtcbiAyNjM6XHQjaWZkZWYgQ09ORklHX1BST0NfRlNcbiAyNjQ6XHRcdC5zaG93X2ZkaW5mb1x0PSBzaWduYWxmZF9zaG93X2ZkaW5mbyxcbiAyNjU6XHQjZW5kaWZcbiAyNjY6XHRcdC5yZWxlYXNlXHQ9IHNpZ25hbGZkX3JlbGVhc2UsXG4gMjY3Olx0XHQucG9sbFx0XHQ9IHNpZ25hbGZkX3BvbGwsXG4gMjY4Olx0XHQucmVhZF9pdGVyXHQ9IHNpZ25hbGZkX3JlYWRfaXRlcixcbiAyNjk6XHRcdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiAyNzA6XHR9O1xuIDI3MTpcdFxuIDI3MjpcdHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXG4gMjczOlx0e1xuIDI3NDpcdFx0LyogQ2hlY2sgdGhlIFNGRF8qIGNvbnN0YW50cyBmb3IgY29uc2lzdGVuY3kuICAqL1xuIDI3NTpcdFx0QlVJTERfQlVHX09OKFNGRF9DTE9FWEVDICE9IE9fQ0xPRVhFQyk7XG4gMjc2Olx0XHRCVUlMRF9CVUdfT04oU0ZEX05PTkJMT0NLICE9IE9fTk9OQkxPQ0spO1xuIDI3NzpcdFxuIDI3ODpcdFx0aWYgKGZsYWdzIFx1MDAyNiB+KFNGRF9DTE9FWEVDIHwgU0ZEX05PTkJMT0NLKSlcbiAyNzk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjgwOlx0XG4gMjgxOlx0XHRzaWdkZWxzZXRtYXNrKG1hc2ssIHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKTtcbiAyODI6XHRcdHNpZ25vdHNldChtYXNrKTtcbiAyODM6XHRcbiAyODQ6XHRcdGlmICh1ZmQgPT0gLTEpIHtcbiAyODU6XHRcdFx0aW50IGZkO1xuIDI4NjpcdFx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gMjg3Olx0XG4gMjg4Olx0XHRcdGN0eCA9IGttYWxsb2Nfb2JqKCpjdHgpO1xuIDI4OTpcdFx0XHRpZiAoIWN0eClcbiAyOTA6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyOTE6XHRcbiAyOTI6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDI5MzpcdFx0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIDI5NDpcdFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuIDI5NTpcdFxuIDI5NjpcdFx0XHRmZCA9IEZEX0FERChmbGFncyBcdTAwMjYgT19DTE9FWEVDLFxuIDI5NzpcdFx0XHRcdCAgICBhbm9uX2lub2RlX2dldGZpbGVfZm1vZGUoXG4gMjk4Olx0XHRcdFx0XHQgICAgXCYjMzQ7W3NpZ25hbGZkXVwmIzM0OywgXHUwMDI2c2lnbmFsZmRfZm9wcywgY3R4LFxuIDI5OTpcdFx0XHRcdFx0ICAgIE9fUkRXUiB8IChmbGFncyBcdTAwMjYgT19OT05CTE9DSyksIEZNT0RFX05PV0FJVCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gc2lnbmFsZmQuYyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBjaGVjayBvdXQgdGhvc2Ugc3lzY2FsbCBlbnRyeSBwb2ludHMgd2l0aGluIGBzaWduYWxmZC5jYC4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucyBoZXJlLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIGtlcm5lbCBpcyBhY3R1YWxseSByZWNlaXZpbmcgYW5kIHByb2Nlc3NpbmcgdGhlc2Ugc2lnbmFsIGZpbGUgZGVzY3JpcHRvciBvcGVyYXRpb25zLiBHb3R0YSBtYXAgdGhlIHVzZXItc3BhY2UgY2FsbHMgdG8gdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgbWVhbnMgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbnMsIHRoZSBhcmd1bWVudHMsIHRoZSBjaGVja3MsIGFsbCBvZiBpdC4gSSB3YW50IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgc2lnbmFsZmRgIGlzIHBsdW1iZWQgaW50byB0aGUgY29yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zaWduYWxmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0aWYgKGZkIFx1MDAzZT0gMClcbiAzMDE6XHRcdFx0XHRyZXRhaW5fYW5kX251bGxfcHRyKGN0eCk7XG4gMzAyOlx0XHRcdHJldHVybiBmZDtcbiAzMDM6XHRcdH0gZWxzZSB7XG4gMzA0Olx0XHRcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eDtcbiAzMDU6XHRcbiAzMDY6XHRcdFx0Q0xBU1MoZmQsIGYpKHVmZCk7XG4gMzA3Olx0XHRcdGlmIChmZF9lbXB0eShmKSlcbiAzMDg6XHRcdFx0XHRyZXR1cm4gLUVCQURGO1xuIDMwOTpcdFx0XHRjdHggPSBmZF9maWxlKGYpLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAzMTA6XHRcdFx0aWYgKGZkX2ZpbGUoZiktXHUwMDNlZl9vcCAhPSBcdTAwMjZzaWduYWxmZF9mb3BzKVxuIDMxMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMxMjpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAzMTM6XHRcdFx0Y3R4LVx1MDAzZXNpZ21hc2sgPSAqbWFzaztcbiAzMTQ6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAzMTU6XHRcbiAzMTY6XHRcdFx0d2FrZV91cChcdTAwMjZjdHgtXHUwMDNld3FoKTtcbiAzMTc6XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdHJldHVybiB1ZmQ7XG4gMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdFNZU0NBTExfREVGSU5FNChzaWduYWxmZDQsIGludCwgdWZkLCBzaWdzZXRfdCBfX3VzZXIgKiwgdXNlcl9tYXNrLFxuIDMyMzpcdFx0XHRzaXplX3QsIHNpemVtYXNrLCBpbnQsIGZsYWdzKVxuIDMyNDpcdHtcbiAzMjU6XHRcdHNpZ3NldF90IG1hc2s7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc2l6ZW1hc2sgIT0gc2l6ZW9mKHNpZ3NldF90KSlcbiAzMjg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzI5Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2bWFzaywgdXNlcl9tYXNrLCBzaXplb2YobWFzaykpKVxuIDMzMDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzMzE6XHRcdHJldHVybiBkb19zaWduYWxmZDQodWZkLCBcdTAwMjZtYXNrLCBmbGFncyk7XG4gMzMyOlx0fVxuIDMzMzpcdFxuIDMzNDpcdFNZU0NBTExfREVGSU5FMyhzaWduYWxmZCwgaW50LCB1ZmQsIHNpZ3NldF90IF9fdXNlciAqLCB1c2VyX21hc2ssXG4gMzM1Olx0XHRcdHNpemVfdCwgc2l6ZW1hc2spXG4gMzM2Olx0e1xuIDMzNzpcdFx0c2lnc2V0X3QgbWFzaztcbiAzMzg6XHRcbiAzMzk6XHRcdGlmIChzaXplbWFzayAhPSBzaXplb2Yoc2lnc2V0X3QpKVxuIDM0MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNDE6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtYXNrLCB1c2VyX21hc2ssIHNpemVvZihtYXNrKSkpXG4gMzQyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDM0MzpcdFx0cmV0dXJuIGRvX3NpZ25hbGZkNCh1ZmQsIFx1MDAyNm1hc2ssIDApO1xuIDM0NDpcdH1cbiAzNDU6XHRcbiAzNDY6XHQjaWZkZWYgQ09ORklHX0NPTVBBVFxuIDM0NzpcdHN0YXRpYyBsb25nIGRvX2NvbXBhdF9zaWduYWxmZDQoaW50IHVmZCxcbiAzNDg6XHRcdFx0XHRjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICp1c2VyX21hc2ssXG4gMzQ5Olx0XHRcdFx0Y29tcGF0X3NpemVfdCBzaWdzZXRzaXplLCBpbnQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNpZ25hbGZkLmMgQ2hhbmdlcyBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYGZzL3NpZ25hbGZkLmNgLiBUaGlzIGlzIGNydWNpYWwga2VybmVsIGNvZGUsIGRlYWxpbmcgZGlyZWN0bHkgd2l0aCBzaWduYWwgaGFuZGxpbmcgYW5kIHRoZSBgc2lnbmFsZmRgIG1lY2hhbmlzbS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBob3cgdGhlIHdhaXQgcXVldWUgYW5kIGxvY2tpbmcgYXJlIGhhbmRsZWQgd2hlbiBhIGBzaWduYWxmZGAgaXMgcmVjb25maWd1cmVkIChzcGVjaWZpY2FsbHksIHdoZW4gdGhlIG1hc2sgaXMgdXBkYXRlZCkgYWNyb3NzIHByb2Nlc3NlcyBvciB0aHJlYWRzLiBJdCBsb29rcyBsaWtlIHRoZSB1cGRhdGUgbm93IHdha2VzIHVwIHdhaXRlcnMgd2FpdGluZyBvbiBgY3R4LSZndDt3cWhgLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUgaXMgYHdha2VfdXBfcG9sbGZyZWUoJmFtcDtjdHgtJmd0O3dxaClgIGluIGBzaWduYWxmZF9yZWxlYXNlYCBhbmQgYGtmcmVlX3JjdShjdHgsIHJjdSlgLgoKVGhlc2UgY2hhbmdlcyBzZWVtIHRvIGFmZmVjdCBsb2NraW5nIHdpdGhpbiBgc2lnbmFsZmRfcG9sbGAsIGBzaWduYWxmZF9kZXF1ZXVlYCwgYHNpZ25hbGZkX3Nob3dfZmRpbmZvYCwgYW5kIGBkb19zaWduYWxmZDRgLiBUaGF04oCZcyBhIHNpZ25pZmljYW50IHNoaWZ0ISBUaGlzIGhhcyBjbGVhciBmdW5jdGlvbmFsIGltcGFjdCwgZGlyZWN0bHkgcmVhY2hhYmxlIHRocm91Z2ggdXNlcnNwYWNlIHN5c2NhbGxzIGxpa2UgYHNpZ25hbGZkNGAsIGByZWFkYCwgYHBvbGxgL2BlcG9sbGAsIHdoaWNoIGFyZSB1c2VkIGluIFFFTVUgYW5kIHN0YW5kYXJkIExpbnV4IHN5c3RlbXMsIHNvIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgoKU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGNvcmUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgYHNpZ25hbGZkYCBzdWJzeXN0ZW0gYXJlIGJlaW5nIG1vZGlmaWVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBBY2NvcmRpbmcgdG8gdGhlIGd1aWRhbmNlLCBJIHNob3VsZCBiZSBsb29raW5nIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gU3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSBsZXNzIHVzZWZ1bCBoZXJlLgoKSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEkmIzM5O3ZlIGdvdCB0byBjaGVjayBgZnMvc2lnbmFsZmQuY2AgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgaXQgbG9va3MgbGlrZToKKiAgIGBzaWduYWxmZF9jbGVhbnVwYAoqICAgYGtzeXNfc2lnbmFsZmQ0YCB3aGljaCBpcyBwcm9iYWJseSBhbHNvIGBfX2RvX3N5c19zaWduYWxmZDRgIC8gYF9fZG9fc3lzX3NpZ25hbGZkYCAvIGBfX2RvX2NvbXBhdF9zeXNfc2lnbmFsZmQ0YCAvIGBfX2RvX2NvbXBhdF9zeXNfc2lnbmFsZmRgICh2aWEgU1lTQ0FMTF9ERUZJTkUpCiogICBBbmQgYWxzbyBgZG9fc2lnbmFsZmQ0YCwgYHNpZ25hbGZkX3BvbGxgLCBgc2lnbmFsZmRfZGVxdWV1ZWAsIGBzaWduYWxmZF9yZWFkX2l0ZXJgLCBhbmQgYHNpZ25hbGZkX3JlbGVhc2VgCgpIYW5nIG9uLCBkaWQgSSBtaXNzIGFueXRoaW5nIGluIHRoZSBwcm9tcHQgYWJvdXQgZm9jdXNpbmc/IFJpZ2h0LCAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LiBIbW0sIGxvb2tpbmcgYXQgdGhvc2UgZnVuY3Rpb25zIGFnYWluLCBpdCBzZWVtcyB0aGUgbGFzdCBncm91cCwgd2hpbGUgdGhleSBhcmUgdGhlcmUsIGlzIHN0YXRpYywgYW5kIHRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4KCk5vdywgbGV0IG1lIGNoZWNrIGhvdyBgU1lTQ0FMTF9ERUZJTkVgIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2ggdG8gc2VlIHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZXhpc3QgcmVsYXRlZCB0byBgc2lnbmFsZmRgIGFjcm9zcyBrZXJuZWwgaGVhZGVycyBhbmQgc291cmNlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NpZ25hbGZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zaWduYWxmZC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yLS8qXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MzogKiAgaW5jbHVkZS9saW51eC9zaWduYWxmZC5oXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtNC0gKlxuLS1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xMC1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoxMTojaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3NpZ25hbGZkLmhcdTAwM2VcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuLS1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xNi0vKlxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjE3OiAqIERlbGl2ZXIgdGhlIHNpZ25hbCB0byBsaXN0ZW5pbmcgc2lnbmFsZmQuXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMTgtICovXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MTk6c3RhdGljIGlubGluZSB2b2lkIHNpZ25hbGZkX25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZylcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yMC17XG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MjE6XHRpZiAodW5saWtlbHkod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZ0c2stXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgpKSlcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyMjpcdFx0d2FrZV91cChcdTAwMjZ0c2stXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgpO1xuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTIzLX1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yNC1cbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyNTpleHRlcm4gdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCk7XG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMjYtXG4tLVxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTI4LVxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjI5OnN0YXRpYyBpbmxpbmUgdm9pZCBzaWduYWxmZF9ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBzaWcpIHsgfVxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTMwLVxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCkgeyB9XG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyBgZnMvc2lnbmFsZmQuY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBTaWduYWxmZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgZnMvc2lnbmFsZmQuY2Agbm93LiBJJiMzOTt2ZSBnb3QgYSBnb29kIGdyYXNwIG9mIHRoZSBiYXNpYyBjb25jZXB0IG9mIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3JzLCBidXQgSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIGdldHRpbmcgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBhcmNoaXRlY3R1cmUgZ2F2ZSBtZSBzb21lIGhpZ2gtbGV2ZWwgaWRlYXMsIGJ1dCBub3cgSSB3YW50IHRvIGdldCBncmFudWxhci4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gaGFuZGxlcyB0aGUgY29yZSBkZXRhaWxzLCBzbyBJ4oCZbSBnb2luZyB0byBmb2N1cyBvbjogdGhlIGFjdHVhbCBtZWNoYW5pY3Mgb2YgdGhlIGBzaWduYWxmZGAgc3lzdGVtIGNhbGw7IGhvdyBzaWduYWxzIGFyZSBtYXNrZWQsIGRlbGl2ZXJlZCwgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgZmlsZSBkZXNjcmlwdG9yOyB3aGF0IHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgYXJlIChjcnVjaWFsIGZvciBjb25jdXJyZW5jeSwgb2J2aW91c2x5KTsgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBzaWduYWwgcXVldWUgYW5kIHRoZSBwcm9jZXNzJiMzOTtzIHNpZ25hbCBtYXNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGxlbWVudGF0aW9uIHdlbGwgc28gSSBjYW4gYXNzZXNzIGl0cyBlZmZpY2llbmN5IGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBleHBlY3RlZCBsZXZlbCBvZiBzZWN1cml0eSBhbmQgcmVsaWFiaWxpdHkuIEkgd2FudCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyBvZiBjb25jZXJuLiBTbywgbGV04oCZcyBqdW1wIHJpZ2h0IGluIGFuZCBjaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zaWduYWxmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDU6XHRcbiAzNDY6XHQjaWZkZWYgQ09ORklHX0NPTVBBVFxuIDM0NzpcdHN0YXRpYyBsb25nIGRvX2NvbXBhdF9zaWduYWxmZDQoaW50IHVmZCxcbiAzNDg6XHRcdFx0XHRjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICp1c2VyX21hc2ssXG4gMzQ5Olx0XHRcdFx0Y29tcGF0X3NpemVfdCBzaWdzZXRzaXplLCBpbnQgZmxhZ3MpXG4gMzUwOlx0e1xuIDM1MTpcdFx0c2lnc2V0X3QgbWFzaztcbiAzNTI6XHRcbiAzNTM6XHRcdGlmIChzaWdzZXRzaXplICE9IHNpemVvZihjb21wYXRfc2lnc2V0X3QpKVxuIDM1NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNTU6XHRcdGlmIChnZXRfY29tcGF0X3NpZ3NldChcdTAwMjZtYXNrLCB1c2VyX21hc2spKVxuIDM1NjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzNTc6XHRcdHJldHVybiBkb19zaWduYWxmZDQodWZkLCBcdTAwMjZtYXNrLCBmbGFncyk7XG4gMzU4Olx0fVxuIDM1OTpcdFxuIDM2MDpcdENPTVBBVF9TWVNDQUxMX0RFRklORTQoc2lnbmFsZmQ0LCBpbnQsIHVmZCxcbiAzNjE6XHRcdFx0ICAgICBjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICosIHVzZXJfbWFzayxcbiAzNjI6XHRcdFx0ICAgICBjb21wYXRfc2l6ZV90LCBzaWdzZXRzaXplLFxuIDM2MzpcdFx0XHQgICAgIGludCwgZmxhZ3MpXG4gMzY0Olx0e1xuIDM2NTpcdFx0cmV0dXJuIGRvX2NvbXBhdF9zaWduYWxmZDQodWZkLCB1c2VyX21hc2ssIHNpZ3NldHNpemUsIGZsYWdzKTtcbiAzNjY6XHR9XG4gMzY3Olx0XG4gMzY4Olx0Q09NUEFUX1NZU0NBTExfREVGSU5FMyhzaWduYWxmZCwgaW50LCB1ZmQsXG4gMzY5Olx0XHRcdCAgICAgY29uc3QgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqLCB1c2VyX21hc2ssXG4gMzcwOlx0XHRcdCAgICAgY29tcGF0X3NpemVfdCwgc2lnc2V0c2l6ZSlcbiAzNzE6XHR7XG4gMzcyOlx0XHRyZXR1cm4gZG9fY29tcGF0X3NpZ25hbGZkNCh1ZmQsIHVzZXJfbWFzaywgc2lnc2V0c2l6ZSwgMCk7XG4gMzczOlx0fVxuIDM3NDpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMxNQoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiA0ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU2lnbmFsZmQgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGBzaWduYWxmZGAgc3lzdGVtIGNhbGwuIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgY29yZSBmdW5jdGlvbnMgYW5kIHN5bWJvbHMgaW52b2x2ZWQuIEkmIzM5O20gc2VlaW5nIHRoYXQgYFNZU0NBTExfREVGSU5FNChzaWduYWxmZDQsIC4uLilgIGdlbmVyYXRlcyBzZXZlcmFsIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYF9fZG9fc3lzX3NpZ25hbGZkNGAgYW5kIGBrc3lzX3NpZ25hbGZkNGAuIEkmIzM5O20gYWxzbyBvYnNlcnZpbmcga2V5IHN1cHBvcnRpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgYHNpZ25hbGZkX2NsZWFudXBgLCBgc2lnbmFsZmRfcG9sbGAsIGBzaWduYWxmZF9kZXF1ZXVlYCwgYHNpZ25hbGZkX3JlYWRfaXRlcmAsIGBzaWduYWxmZF9yZWxlYXNlYCwgYW5kIGBkb19zaWduYWxmZDRgLiBUaGVzZSBhcmUgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZC4KCk5vdywgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3QuIExvb2tpbmcgYXQgYGZzL01ha2VmaWxlYCwgSSBzZWUgYG9iai0kKENPTkZJR19TSUdOQUxGRCkgJiM0Mzs9IHNpZ25hbGZkLm9gLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBUaGVuIGluIGBpbml0L0tjb25maWdgLCBJIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBjb25maWcgU0lHTkFMRkRgLCBhIGJvb2xlYW4gb3B0aW9uLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCAoYGRlZmF1bHQgeWApLCB3aGljaCBpcyBoZWxwZnVsLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jeSBpc3N1ZXMgb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjb21wbGljYXRlIHRoaW5ncy4gSSYjMzk7dmUgY2hlY2tlZCBgaW5pdC9LY29uZmlnYCBhbmQgZm91bmQgbm8gZGVwZW5kZW5jaWVzIGZvciBgU0lHTkFMRkRgLiBUbyBiZSB0aG9yb3VnaCwgSSBxdWlja2x5IGNoZWNrZWQgYGZzL3NpZ25hbGZkLmNgIGFuZCBmb3VuZCBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCBhbmQgYCNpZmRlZiBDT05GSUdfQ09NUEFUYCwgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gcHJvY2ZzIGFuZCBjb21wYXRpYmlsaXR5IHN1cHBvcnQsIGJ1dCB0aGVzZSBkb24mIzM5O3Qgc2VlbSBsaWtlIHByaW1hcnkgYmxvY2tpbmcgY29uZmlndXJhdGlvbnMuIFRoZXkgbWlnaHQgY29tZSB1cCBpbiBhIGxhdGVyIGZ1enppbmcgcGhhc2UsIGJ1dCB0aGV5IHNob3VsZG4mIzM5O3QgaW1tZWRpYXRlbHkgcHJldmVudCB0aGUgdXNlIG9mIGBzaWduYWxmZGAuCgpTbywgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtIGlzIGBTSUdOQUxGRGAsIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gR2l2ZW4gdGhlIHByb3ZpZGVkICYjMzQ7aW5zdHJ1Y3Rpb25zJiMzNDssIEkgY2FuIHZlcmlmeSB0aGF0OiB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCBgRW5hYmxlQ29uZmlnc2AgaXMgc2V0IHRvIGBbJiMzNDtTSUdOQUxGRCYjMzQ7XWAsIGBGb2N1c1N5bWJvbHNgIGluY2x1ZGVzIHRoZSBleHBlY3RlZCBzeW1ib2xzLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSUdOQUxGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NpZ25hbGZkX3BvbGwmIzM0OywKICAgICYjMzQ7c2lnbmFsZmRfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2RvX3NpZ25hbGZkNCYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhhbmRsaW5nIGluIHNpZ25hbGZkIChmcy9zaWduYWxmZC5jKS4gSW4gcGFydGljdWxhciwgaXQgaW50cm9kdWNlcyBjdHgtbGV2ZWwgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoZWFkLCB1cGRhdGluZyBzaWduYWxmZF9wb2xsLCBzaWduYWxmZF9kZXF1ZXVlLCBzaWduYWxmZF9yZWxlYXNlLCBhbmQgZG9fc2lnbmFsZmQ0IHRvIHN1cHBvcnQgd2FraW5nIHdhaXRlcnMgdXBvbiBzaWduYWxmZCBtYXNrIHVwZGF0ZXMgYWNyb3NzIHRocmVhZHMvcHJvY2Vzc2VzLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NJR05BTEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2lnbmFsZmRfcG9sbCYjMzQ7LAogICAgJiMzNDtzaWduYWxmZF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O3NpZ25hbGZkX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZG9fc2lnbmFsZmQ0JiMzNDssCiAgICAmIzM0O3NpZ25hbGZkX2NsZWFudXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIHdhaXQgcXVldWUgaGFuZGxpbmcgaW4gc2lnbmFsZmQgKGZzL3NpZ25hbGZkLmMpLiBJbiBwYXJ0aWN1bGFyLCBpdCBpbnRyb2R1Y2VzIGN0eC1sZXZlbCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhlYWQsIHVwZGF0aW5nIHNpZ25hbGZkX3BvbGwsIHNpZ25hbGZkX2RlcXVldWUsIHNpZ25hbGZkX3JlbGVhc2UsIGFuZCBkb19zaWduYWxmZDQgdG8gc3VwcG9ydCB3YWtpbmcgd2FpdGVycyB1cG9uIHNpZ25hbGZkIG1hc2sgdXBkYXRlcyBhY3Jvc3MgdGhyZWFkcy9wcm9jZXNzZXMuIFRoaXMgaXMgY29yZSwgcmVhY2hhYmxlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgd2FpdHF1ZXVlIChgd3FoYCksIHNwaW5sb2NrIChgbG9ja2ApLCBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgKGByY3VfaGVhZGApIHRvIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBpbiBgZnMvc2lnbmFsZmQuY2Agc28gdGhhdCBtYXNrIHVwZGF0ZXMgdmlhIGBzaWduYWxmZDRgIHByb3Blcmx5IHdha2UgdXAgd2FpdGVycyBhY3Jvc3MgcHJvY2Vzc2VzLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4xLiBBbGwgZmllbGRzIG9mIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKGBzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jaylgLCBgaW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZjdHgtXHUwMDNld3FoKWAsIGBjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrYCkuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGUga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvYCkgcmVtYWlucyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0YCBpbiBgc2lnbmFsZmRfY29weWluZm8oKWAuXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cdTAwM2Vsb2NrYCBhbmQgYHNpZ2hhbmQtXHUwMDNlc2lnbG9ja2ApLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2E5MDZlMTY1YTBhNzM3ZGZmZWZjNDkwMjkwNjA1ZjQ3MDMwM2UyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIyOjQzOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvc2lnbmFsZmQuYyBiL2ZzL3NpZ25hbGZkLmMKaW5kZXggZGZmNTM3NDVlMzUyNC4uNTIzYzNhNmRjNTY1OSAxMDA2NDQKLS0tIGEvZnMvc2lnbmFsZmQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zaWduYWxmZC5jCkBAIC0yNyw2ICYjNDM7MjcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hbm9uX2lub2Rlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NpZ25hbGZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY2FsbHMuaCZndDsKQEAgLTM5LDEyICYjNDM7NDAsMTkgQEAgdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCkKIH0KIAogc3RydWN0IHNpZ25hbGZkX2N0eCB7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovCiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKJiM0MzsJd2FpdF9xdWV1ZV9oZWFkX3Qgd3FoOwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCXNpZ3NldF90IHNpZ21hc2s7CiB9OwogCiBzdGF0aWMgaW50IHNpZ25hbGZkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Ja2ZyZWUoZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhKTsKJiM0MzsJc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwl3YWtlX3VwX3BvbGxmcmVlKCZhbXA7Y3R4LSZndDt3cWgpOwomIzQzOwlrZnJlZV9yY3UoY3R4LCByY3UpOwogCXJldHVybiAwOwogfQogCkBAIC01MywxNCAmIzQzOzYxLDE3IEBAIHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogCXN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAlfX3BvbGxfdCBldmVudHMgPSAwOwogCiYjNDM7CXBvbGxfd2FpdChmaWxlLCAmYW1wO2N0eC0mZ3Q7d3FoLCB3YWl0KTsKIAlwb2xsX3dhaXQoZmlsZSwgJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWduYWxmZF93cWgsIHdhaXQpOwogCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiAJaWYgKG5leHRfc2lnbmFsKCZhbXA7Y3VycmVudC0mZ3Q7cGVuZGluZywgJmFtcDtjdHgtJmd0O3NpZ21hc2spIHx8CiAJICAgIG5leHRfc2lnbmFsKCZhbXA7Y3VycmVudC0mZ3Q7c2lnbmFsLSZndDtzaGFyZWRfcGVuZGluZywKIAkJCSZhbXA7Y3R4LSZndDtzaWdtYXNrKSkKIAkJZXZlbnRzIHw9IEVQT0xMSU47Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAKIAlyZXR1cm4gZXZlbnRzOwogfQpAQCAtMTU3LDggJiM0MzsxNjgsMTAgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm8KIAllbnVtIHBpZF90eXBlIHR5cGU7CiAJc3NpemVfdCByZXQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiYjNDM7CURFQ0xBUkVfV0FJVFFVRVVFKGN0eF93YWl0LCBjdXJyZW50KTsKIAotCXNwaW5fbG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwogCXJldCA9IGRlcXVldWVfc2lnbmFsKCZhbXA7Y3R4LSZndDtzaWdtYXNrLCBpbmZvLCAmYW1wO3R5cGUpOwogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSAwOgpAQCAtMTY3LDEwICYjNDM7MTgwLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvCiAJCXJldCA9IC1FQUdBSU47CiAJCWZhbGx0aHJvdWdoOwogCWRlZmF1bHQ6Ci0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAJCXJldHVybiByZXQ7CiAJfQogCiYjNDM7CWFkZF93YWl0X3F1ZXVlKCZhbXA7Y3R4LSZndDt3cWgsICZhbXA7Y3R4X3dhaXQpOwogCWFkZF93YWl0X3F1ZXVlKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbmFsZmRfd3FoLCAmYW1wO3dhaXQpOwogCWZvciAoOzspIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKQEAgLTE4MSwxMyAmIzQzOzE5NiwxNyBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mbwogCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAkJc2NoZWR1bGUoKTsKLQkJc3Bpbl9sb2NrX2lycSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmYW1wO2N1cnJlbnQtJmd0O3NpZ2hhbmQtJmd0O3NpZ25hbGZkX3dxaCwgJmFtcDt3YWl0KTsKJiM0MzsJcmVtb3ZlX3dhaXRfcXVldWUoJmFtcDtjdHgtJmd0O3dxaCwgJmFtcDtjdHhfd2FpdCk7CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIzMiw3ICYjNDM7MjUxLDkgQEAgc3RhdGljIHZvaWQgc2lnbmFsZmRfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZikKIAlzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmLSZndDtwcml2YXRlX2RhdGE7CiAJc2lnc2V0X3Qgc2lnbWFzazsKIAomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAlzaWdtYXNrID0gY3R4LSZndDtzaWdtYXNrOwomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCXNpZ25vdHNldCgmYW1wO3NpZ21hc2spOwogCXJlbmRlcl9zaWdzZXRfdChtLCAmIzM0O3NpZ21hc2s6XHQmIzM0OywgJmFtcDtzaWdtYXNrKTsKIH0KQEAgLTI2OCw2ICYjNDM7Mjg5LDggQEAgc3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncykKIAkJaWYgKCFjdHgpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDtjdHgtJmd0O2xvY2spOwomIzQzOwkJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2N0eC0mZ3Q7d3FoKTsKIAkJY3R4LSZndDtzaWdtYXNrID0gKm1hc2s7CiAKIAkJZmQgPSBGRF9BREQoZmxhZ3MgJmFtcDsgT19DTE9FWEVDLApAQCAtMjg2LDExICYjNDM7MzA5LDExIEBAIHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpCiAJCWN0eCA9IGZkX2ZpbGUoZiktJmd0O3ByaXZhdGVfZGF0YTsKIAkJaWYgKGZkX2ZpbGUoZiktJmd0O2Zfb3AgIT0gJmFtcDtzaWduYWxmZF9mb3BzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXNwaW5fbG9ja19pcnEoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrKTsKJiM0MzsJCXNwaW5fbG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCQljdHgtJmd0O3NpZ21hc2sgPSAqbWFzazsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbG9jayk7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtjdHgtJmd0O2xvY2spOwogCi0JCXdha2VfdXAoJmFtcDtjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWduYWxmZF93cWgpOwomIzQzOwkJd2FrZV91cCgmYW1wO2N0eC0mZ3Q7d3FoKTsKIAl9CiAKIAlyZXR1cm4gdWZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZQppbmRleCAzZjMzOTg2NWEzYjZlLi41Y2FjNTMyZDQ5YWU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZQpAQCAtMSwzICYjNDM7MSw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIG1hbmdsZV91Y19zaWdtYXNrCiBzYXMKJiM0MztzaWduYWxmZF9tYXNrX3dha2UKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZQppbmRleCBlMGJmNzA1OGQxOWM5Li4wMGYxZTk2YzkyYzRkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlCkBAIC0yLDYgJiM0MzsyLDYgQEAKIENGTEFHUyA9IC1XYWxsCiBURVNUX0dFTl9QUk9HUyA9IG1hbmdsZV91Y19zaWdtYXNrCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gc2FzCiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHNpZ25hbGZkX21hc2tfd2FrZQogCiBpbmNsdWRlIC4uL2xpYi5tawotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2U2MDQyNGI5ZWM5ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuYwpAQCAtMCwwICYjNDM7MSwyNjYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zaWduYWxmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpwdHIgPSBidWY7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXNzaXplX3QgcmV0ID0gd3JpdGUoZmQsIHB0ciwgbGVuKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwdHIgJiM0Mzs9IHJldDsKJiM0MzsJCWxlbiAtPSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmVhZF9hbGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyICpwdHIgPSBidWY7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXNzaXplX3QgcmV0ID0gcmVhZChmZCwgcHRyLCBsZW4pOwomIzQzOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CQlwdHIgJiM0Mzs9IHJldDsKJiM0MzsJCWxlbiAtPSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtpbGxfYW5kX3JlYXAocGlkX3QgcGlkKQomIzQzO3sKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJaWYgKHBpZCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlraWxsKHBpZCwgU0lHS0lMTCk7CiYjNDM7CXdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd2FpdF9yZXN1bHQoaW50IGZkLCBpbnQgdGltZW91dF9tcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwb2xsZmQgcGZkID0gewomIzQzOwkJLmZkID0gZmQsCiYjNDM7CQkuZXZlbnRzID0gUE9MTElOLAomIzQzOwl9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSBwb2xsKCZhbXA7cGZkLCAxLCB0aW1lb3V0X21zKTsKJiM0MzsJfSB3aGlsZSAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGlsZF9pbl9zaWduYWxmZF9yZWFkKHBpZF90IHBpZCwgaW50IHNmZCkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CWNoYXIgYnVmWzI1Nl07CiYjNDM7CWxvbmcgbnI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYXJnMDsKJiM0MzsJRklMRSAqZnA7CiYjNDM7CWludCBpbl9yZWFkID0gMDsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkL3N5c2NhbGwmIzM0OywgcGlkKTsKJiM0MzsJZnAgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZnApIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFTk9FTlQpCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzc2NhbmYoYnVmLCAmIzM0OyVsZCAlbHgmIzM0OywgJmFtcDtuciwgJmFtcDthcmcwKSA9PSAyICZhbXA7JmFtcDsKJiM0MzsJICAgIG5yID09IF9fTlJfcmVhZCAmYW1wOyZhbXA7IGFyZzAgPT0gKHVuc2lnbmVkIGxvbmcpc2ZkKQomIzQzOwkJaW5fcmVhZCA9IDE7CiYjNDM7CiYjNDM7CWZjbG9zZShmcCk7CiYjNDM7CXJldHVybiBpbl9yZWFkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdhaXRfZm9yX2NoaWxkX2Jsb2NrKHBpZF90IHBpZCwgaW50IHNmZCwgaW50IHRpbWVvdXRfbXMpCiYjNDM7ewomIzQzOwlpbnQgd2FpdGVkX21zID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKHdhaXRlZF9tcyAmbHQ7IHRpbWVvdXRfbXMpIHsKJiM0MzsJCXJldCA9IGNoaWxkX2luX3NpZ25hbGZkX3JlYWQocGlkLCBzZmQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKSB7CiYjNDM7CQkJdXNsZWVwKDEwMDAwKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXVzbGVlcCgxMDAwKTsKJiM0MzsJCXdhaXRlZF9tcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gZmRzaTsKJiM0MzsJc2lnc2V0X3QgYmxvY2tlZCwgaW5pdGlhbF9tYXNrLCB1cGRhdGVkX21hc2s7CiYjNDM7CWludCByZWFkeV9waXBlWzJdLCBzdGFydF9waXBlWzJdLCByZXN1bHRfcGlwZVsyXTsKJiM0MzsJaW50IHNmZCwgc2lnbm8sIHN0YXR1czsKJiM0MzsJcGlkX3QgY2hpbGQ7CiYjNDM7CWNoYXIgcmVhZHksIHN0YXJ0OwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDEpOwomIzQzOwomIzQzOwlzaWdlbXB0eXNldCgmYW1wO2Jsb2NrZWQpOwomIzQzOwlzaWdhZGRzZXQoJmFtcDtibG9ja2VkLCBTSUdVU1IxKTsKJiM0MzsJc2lnYWRkc2V0KCZhbXA7YmxvY2tlZCwgU0lHVVNSMik7CiYjNDM7CWlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZhbXA7YmxvY2tlZCwgTlVMTCkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtzaWdwcm9jbWFzayYjMzQ7KTsKJiM0MzsKJiM0MzsJc2lnZW1wdHlzZXQoJmFtcDtpbml0aWFsX21hc2spOwomIzQzOwlzaWdhZGRzZXQoJmFtcDtpbml0aWFsX21hc2ssIFNJR1VTUjEpOwomIzQzOwlzZmQgPSBzaWduYWxmZCgtMSwgJmFtcDtpbml0aWFsX21hc2ssIDApOwomIzQzOwlpZiAoc2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3NpZ25hbGZkJiMzNDspOwomIzQzOwomIzQzOwlpZiAocGlwZShyZWFkeV9waXBlKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3BpcGUocmVhZHkpJiMzNDspOwomIzQzOwlpZiAocGlwZShzdGFydF9waXBlKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3BpcGUoc3RhcnQpJiMzNDspOwomIzQzOwlpZiAocGlwZShyZXN1bHRfcGlwZSkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtwaXBlKHJlc3VsdCkmIzM0Oyk7CiYjNDM7CiYjNDM7CWNoaWxkID0gZm9yaygpOwomIzQzOwlpZiAoY2hpbGQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7Zm9yayYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGNoaWxkID09IDApIHsKJiM0MzsJCWNsb3NlKHJlYWR5X3BpcGVbMF0pOwomIzQzOwkJY2xvc2Uoc3RhcnRfcGlwZVsxXSk7CiYjNDM7CQljbG9zZShyZXN1bHRfcGlwZVswXSk7CiYjNDM7CiYjNDM7CQlyZWFkeSA9ICYjMzk7UiYjMzk7OwomIzQzOwkJaWYgKHdyaXRlX2FsbChyZWFkeV9waXBlWzFdLCAmYW1wO3JlYWR5LCBzaXplb2YocmVhZHkpKSkKJiM0MzsJCQlfZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwomIzQzOwkJaWYgKHJlYWRfYWxsKHN0YXJ0X3BpcGVbMF0sICZhbXA7c3RhcnQsIHNpemVvZihzdGFydCkpKQomIzQzOwkJCV9leGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CiYjNDM7CQltZW1zZXQoJmFtcDtmZHNpLCAwLCBzaXplb2YoZmRzaSkpOwomIzQzOwkJaWYgKHJlYWRfYWxsKHNmZCwgJmFtcDtmZHNpLCBzaXplb2YoZmRzaSkpKQomIzQzOwkJCV9leGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CiYjNDM7CQlzaWdubyA9IGZkc2kuc3NpX3NpZ25vOwomIzQzOwkJaWYgKHdyaXRlX2FsbChyZXN1bHRfcGlwZVsxXSwgJmFtcDtzaWdubywgc2l6ZW9mKHNpZ25vKSkpCiYjNDM7CQkJX2V4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsKJiM0MzsJCV9leGl0KEVYSVRfU1VDQ0VTUyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2UocmVhZHlfcGlwZVsxXSk7CiYjNDM7CWNsb3NlKHN0YXJ0X3BpcGVbMF0pOwomIzQzOwljbG9zZShyZXN1bHRfcGlwZVsxXSk7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2FsbChyZWFkeV9waXBlWzBdLCAmYW1wO3JlYWR5LCBzaXplb2YocmVhZHkpKSkgewomIzQzOwkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtjaGlsZCBkaWQgbm90IHJlYWNoIGJsb2NraW5nIHJlYWRcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoa2lsbChjaGlsZCwgU0lHVVNSMikpIHsKJiM0MzsJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7a2lsbChTSUdVU1IyKSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlzdGFydCA9ICYjMzk7UyYjMzk7OwomIzQzOwlpZiAod3JpdGVfYWxsKHN0YXJ0X3BpcGVbMV0sICZhbXA7c3RhcnQsIHNpemVvZihzdGFydCkpKSB7CiYjNDM7CQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2NvdWxkIG5vdCByZWxlYXNlIGNoaWxkIGludG8gc2lnbmFsZmQgcmVhZFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXR1cyA9IHdhaXRfZm9yX2NoaWxkX2Jsb2NrKGNoaWxkLCBzZmQsIDEwMDApOwomIzQzOwlpZiAoc3RhdHVzICZsdDsgMCkgewomIzQzOwkJa2lsbF9hbmRfcmVhcChjaGlsZCk7CiYjNDM7CQlpZiAoc3RhdHVzID09IC0xKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7L3Byb2MvJmx0O3BpZCZndDsvc3lzY2FsbCBpcyB1bmF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Y2hpbGQgZGlkIG5vdCBibG9jayBpbiBzaWduYWxmZCByZWFkXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2lnZW1wdHlzZXQoJmFtcDt1cGRhdGVkX21hc2spOwomIzQzOwlzaWdhZGRzZXQoJmFtcDt1cGRhdGVkX21hc2ssIFNJR1VTUjIpOwomIzQzOwlpZiAoc2lnbmFsZmQoc2ZkLCAmYW1wO3VwZGF0ZWRfbWFzaywgMCkgJmx0OyAwKSB7CiYjNDM7CQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3NpZ25hbGZkKHJlY29uZmlndXJlKSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEpIHsKJiM0MzsJCWlmIChyZWFkX2FsbChyZXN1bHRfcGlwZVswXSwgJmFtcDtzaWdubywgc2l6ZW9mKHNpZ25vKSkpIHsKJiM0MzsJCQlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtjaGlsZCB3YWtldXAgZGlkIG5vdCBjYXJyeSBhIHNpZ25hbFxuJiMzNDspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHdhaXRwaWQoY2hpbGQsICZhbXA7c3RhdHVzLCAwKSAhPSBjaGlsZCkgewomIzQzOwkJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3dhaXRwaWQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0KHNpZ25vID09IFNJR1VTUjIgJmFtcDsmYW1wOyBXSUZFWElURUQoc3RhdHVzKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsCiYjNDM7CQkJCSAmIzM0O3NoYXJlZCBzaWduYWxmZCB3YWtldXAgYWZ0ZXIgbWFzayB1cGRhdGVcbiYjMzQ7KTsKJiM0MzsJCWtzZnRfZXhpdF9wYXNzKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQnVnZ3kga2VybmVscyBsZWF2ZSB0aGUgY2hpbGQgYXNsZWVwIHVudGlsIGFuIHVucmVsYXRlZCBzaWduYWwgaGl0cwomIzQzOwkgKiB0aGUgY2hpbGQmIzM5O3Mgc2lnbmFsZmQgd2FpdHF1ZXVlLiBTSUdVU1IxIGRvZXMgbm90IG1hdGNoIHRoZSB1cGRhdGVkCiYjNDM7CSAqIHNpZ25hbGZkIG1hc2ssIHNvIGEgc3VjY2Vzc2Z1bCByZWFkIG9mIFNJR1VTUjIgYWZ0ZXIgdGhpcyBudWRnZQomIzQzOwkgKiBkZW1vbnN0cmF0ZXMgdGhlIG1pc3NlZCB3YWtldXAuCiYjNDM7CSAqLwomIzQzOwlpZiAoa2lsbChjaGlsZCwgU0lHVVNSMSkpIHsKJiM0MzsJCWtpbGxfYW5kX3JlYXAoY2hpbGQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7a2lsbChTSUdVU1IxKSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEgJmFtcDsmYW1wOwomIzQzOwkgICAgIXJlYWRfYWxsKHJlc3VsdF9waXBlWzBdLCAmYW1wO3NpZ25vLCBzaXplb2Yoc2lnbm8pKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB3YWl0cGlkKGNoaWxkLCAmYW1wO3N0YXR1cywgMCkgPT0gY2hpbGQgJmFtcDsmYW1wOwomIzQzOwkgICAgc2lnbm8gPT0gU0lHVVNSMiAmYW1wOyZhbXA7IFdJRkVYSVRFRChzdGF0dXMpICZhbXA7JmFtcDsgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwKSB7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDttYXNrIHVwZGF0ZSBtaXNzZWQgYSBzaGFyZWQgc2lnbmFsZmQgd2FpdGVyXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2NoaWxkIHdva2Ugb25seSBhZnRlciBhbiB1bnJlbGF0ZWQgU0lHVVNSMVxuJiMzNDspOwomIzQzOwkJa3NmdF9leGl0X2ZhaWwoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlraWxsX2FuZF9yZWFwKGNoaWxkKTsKJiM0MzsJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Y2hpbGQgcmVtYWluZWQgYmxvY2tlZCBhZnRlciBzaWduYWxmZCByZWNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2lnbmFsRkQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgZnMvc2lnbmFsZmQuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIHNpZ25hbGZkIGltcGxlbWVudGF0aW9uLCBwcmltYXJpbHkgYXJvdW5kIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LgoKVGhlIGludHJvZHVjdGlvbiBvZiBgc3BpbmxvY2tfdCBsb2NrYCwgYHdhaXRfcXVldWVfaGVhZF90IHdxaGAsIGFuZCBgc3RydWN0IHJjdV9oZWFkIHJjdWAgd2l0aGluIHRoZSBgc2lnbmFsZmRfY3R4YCBzdHJ1Y3QgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHN5bmNocm9uaXphdGlvbiBhbmQgcG90ZW50aWFsbHkgYW4gUkNVIChSZWFkLUNvcHktVXBkYXRlKSBvcHRpbWl6YXRpb24gZWZmb3J0LiBUaGlzIGlzIHNtYXJ0OyBzaWduYWxmZCBpcyBhIGNvbW1vbiBwb2ludCBvZiBjb250ZW50aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBhZGRyZXNzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgpgc2lnbmFsZmRfcmVsZWFzZWAgbm93IGluY29ycG9yYXRlcyBgd2FrZV91cF9wb2xsZnJlZWAgYW5kIGBrZnJlZV9yY3VgIGluc3RlYWQgb2YganVzdCBhIHN0cmFpZ2h0IGBrZnJlZWAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdGlvbiB0aGF0IHdlJiMzOTtyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgcm9idXN0IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgY2xlYW51cCwgZXNwZWNpYWxseSBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQsIGxpa2VseSBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gcHJvYmxlbXMuIFJDVSBpcyBhIGdvb2QgZml0IGhlcmUsIHByZXZlbnRpbmcgc3RhbGxzIHdoaWxlIGNsZWFuaW5nIHVwIHRoZSB1bmRlcmx5aW5nIGNvbnRleHQuCgpUaGUgY2hhbmdlcyBpbiBgc2lnbmFsZmRfcG9sbGAsIGBzaWduYWxmZF9kZXF1ZXVlYCwgYW5kIGBzaWduYWxmZF9zaG93X2ZkaW5mb2AgcmVpbmZvcmNlIHRoaXMgY29uY3VycmVuY3kgdGhlbWUuIFRoZSBhZGRpdGlvbiBvZiBzcGlubG9ja3MgYXJvdW5kIGNyaXRpY2FsIHNlY3Rpb25zLCBzdWNoIGFzIGNoZWNraW5nIGBzaWdsb2NrYCBhbmQgYG5leHRfc2lnbmFsYCwgb3IgcmVhZGluZyBgY3R4LSZndDtzaWdtYXNrYCwgaXMgdGV4dGJvb2sgcHJvdGVjdGlvbiBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucy4gVXNpbmcgYSB3YWl0IHF1ZXVlIGluIHBvbGwsIGFuZCB0aGUgY2FyZWZ1bCBgYWRkX3dhaXRfcXVldWVgL2ByZW1vdmVfd2FpdF9xdWV1ZWAgaW4gYHNpZ25hbGZkX2RlcXVldWVgLCBtYWtlcyBpdCBhbGwgbG9vayB3ZWxsLWNvbnNpZGVyZWQuCgpUaGUgYGRvX3NpZ25hbGZkNGAgZnVuY3Rpb24gaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNwaW5sb2NrIGFuZCB3YWl0IHF1ZXVlIGhlYWQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGxvY2tpbmcgYXJvdW5kIGBjdHgtJmd0O3NpZ21hc2tgIGFuZCB0aGUgYHdha2VfdXBgIGNhbGwgaW4gdGhlIHJlY29uZmlndXJhdGlvbiBzY2VuYXJpbyBzaG93IGEgY2FyZWZ1bCBhdHRlbnRpb24gdG8gdGhlIGF0b21pY2l0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlIHJlY29uZmlndXJhdGlvbiBwcm9jZXNzLiBXZSBhcmUgdmVyeSBsaWtlbHkgbG9va2luZyBhdCBoYW5kbGluZyBvZiBzaWduYWwgbWFza3MgdGhhdCBhcmUgdXBkYXRlZCBvbiB0aGUgZmx5LgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSBob3cgYHNpZ25hbGZkX2N0eGAgaXMgYWxsb2NhdGVkLCBob3cgYHNpZ25hbGZkX3JlYWRgIGludGVyYWN0cyB3aXRoIGl0LCBhbmQgd2hhdCBoYXBwZW5zIGluIG90aGVyIGNyaXRpY2FsIHBhdGhzLCBpbiB0aGUgbWFpbiBjb2RlIGJhc2UuIExldCBtZSBxdWlja2x5IHVzZSByZWFkLWZpbGUgb3IgZ3JlcHBlciB0byBwdWxsIHVwIHRoZSBleGlzdGluZyBgZnMvc2lnbmFsZmQuY2AgY29kZSB0byBzZWUgaG93IHRoZSBjb250ZXh0IGlzIHVzZWQgb3ZlcmFsbC4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbXBvcnRhbnQgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGFsbG9jYXRpb24gdG8gZnVsbHkgZ3Jhc3AgdGhlIG1lbW9yeSBtb2RlbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3NpZ25hbGZkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKlxuICAgMzpcdCAqICBmcy9zaWduYWxmZC5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBMaW51cyBUb3J2YWxkc1xuICAgNjpcdCAqXG4gICA3Olx0ICogIE1vbiBNYXIgNSwgMjAwNzogRGF2aWRlIExpYmVuemkgXHUwMDNjZGF2aWRlbEB4bWFpbHNlcnZlci5vcmdcdTAwM2VcbiAgIDg6XHQgKiAgICAgIENoYW5nZWQgLVx1MDAzZXJlYWQoKSB0byByZXR1cm4gYSBzaWdpbmZvIHN0cmN0dXJlIGluc3RlYWQgb2Ygc2lnbmFsIG51bWJlci5cbiAgIDk6XHQgKiAgICAgIEZpeGVkIGxvY2tpbmcgaW4gLVx1MDAzZXBvbGwoKS5cbiAgMTA6XHQgKiAgICAgIEFkZGVkIHNpZ2hhbmQtZGV0YWNoIG5vdGlmaWNhdGlvbi5cbiAgMTE6XHQgKiAgICAgIEFkZGVkIGZkIHJlLXVzZSBpbiBzeXNfc2lnbmFsZmQoKSBzeXNjYWxsLlxuICAxMjpcdCAqICAgICAgTm93IHVzaW5nIGFub255bW91cyBpbm9kZSBzb3VyY2UuXG4gIDEzOlx0ICogICAgICBUaGFua3MgdG8gT2xlZyBOZXN0ZXJvdiBmb3IgdXNlZnVsIGNvZGUgcmV2aWV3IGFuZCBzdWdnZXN0aW9ucy5cbiAgMTQ6XHQgKiAgICAgIE1vcmUgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGZyb20gQXJuZCBCZXJnbWFubi5cbiAgMTU6XHQgKiAgU2F0IE1heSAxOSwgMjAwNzogRGF2aSBFLiBNLiBBcm5hdXQgXHUwMDNjZGF2aUBoYXhlbnQuY29tLmJyXHUwMDNlXG4gIDE2Olx0ICogICAgICBSZXRyaWV2ZSBtdWx0aXBsZSBzaWduYWxzIHdpdGggb25lIHJlYWQoKSBjYWxsXG4gIDE3Olx0ICogIFN1biBKdWwgMTUsIDIwMDc6IERhdmlkZSBMaWJlbnppIFx1MDAzY2RhdmlkZWxAeG1haWxzZXJ2ZXIub3JnXHUwMDNlXG4gIDE4Olx0ICogICAgICBBdHRhY2ggdG8gdGhlIHNpZ2hhbmQgb25seSBkdXJpbmcgcmVhZCgpIGFuZCBwb2xsKCkuXG4gIDE5Olx0ICovXG4gIDIwOlx0XG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgMjc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAyODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gIDMwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICAzMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcdTAwM2VcbiAgMzI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWxmZC5oXHUwMDNlXG4gIDMzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxuICAzNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuICAzNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4gIDM2Olx0XG4gIDM3Olx0dm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZClcbiAgMzg6XHR7XG4gIDM5Olx0XHR3YWtlX3VwX3BvbGxmcmVlKFx1MDAyNnNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoKTtcbiAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RydWN0IHNpZ25hbGZkX2N0eCB7XG4gIDQzOlx0XHQvKiBTZXJpYWxpemVzIHNoYXJlZCBtYXNrIHVwZGF0ZXMgd2l0aCBmaWxlLWxvY2FsIHdhaXRlciB3YWtldXBzLiAqL1xuICA0NDpcdFx0c3BpbmxvY2tfdCBsb2NrO1xuICA0NTpcdFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd3FoO1xuICA0NjpcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiAgNDc6XHRcdHNpZ3NldF90IHNpZ21hc2s7XG4gIDQ4Olx0fTtcbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWMgaW50IHNpZ25hbGZkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gIDUxOlx0e1xuICA1MjpcdFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gIDUzOlx0XG4gIDU0Olx0XHR3YWtlX3VwX3BvbGxmcmVlKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuICA1NTpcdFx0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcbiAgNTY6XHRcdHJldHVybiAwO1xuICA1NzpcdH1cbiAgNTg6XHRcbiAgNTk6XHRzdGF0aWMgX19wb2xsX3Qgc2lnbmFsZmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbiAgNjA6XHR7XG4gIDYxOlx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAgNjI6XHRcdF9fcG9sbF90IGV2ZW50cyA9IDA7XG4gIDYzOlx0XG4gIDY0Olx0XHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2Y3R4LVx1MDAzZXdxaCwgd2FpdCk7XG4gIDY1Olx0XHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaCwgd2FpdCk7XG4gIDY2Olx0XG4gIDY3Olx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAgNjg6XHRcdHNwaW5fbG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gIDY5Olx0XHRpZiAobmV4dF9zaWduYWwoXHUwMDI2Y3VycmVudC1cdTAwM2VwZW5kaW5nLCBcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaykgfHxcbiAgNzA6XHRcdCAgICBuZXh0X3NpZ25hbChcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VzaGFyZWRfcGVuZGluZyxcbiAgNzE6XHRcdFx0XHRcdTAwMjZjdHgtXHUwMDNlc2lnbWFzaykpXG4gIDcyOlx0XHRcdGV2ZW50cyB8PSBFUE9MTElOO1xuICA3MzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuICA3NDpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAgNzU6XHRcbiAgNzY6XHRcdHJldHVybiBldmVudHM7XG4gIDc3Olx0fVxuICA3ODpcdFxuICA3OTpcdC8qXG4gIDgwOlx0ICogQ29waWVkIGZyb20gY29weV9zaWdpbmZvX3RvX3VzZXIoKSBpbiBrZXJuZWwvc2lnbmFsLmNcbiAgODE6XHQgKi9cbiAgODI6XHRzdGF0aWMgaW50IHNpZ25hbGZkX2NvcHlpbmZvKHN0cnVjdCBpb3ZfaXRlciAqdG8sIGtlcm5lbF9zaWdpbmZvX3QgY29uc3QgKmtpbmZvKVxuICA4MzpcdHtcbiAgODQ6XHRcdHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvIG5ldztcbiAgODU6XHRcbiAgODY6XHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pICE9IDEyOCk7XG4gIDg3Olx0XG4gIDg4Olx0XHQvKlxuICA4OTpcdFx0ICogVW51c2VkIG1lbWJlcnMgc2hvdWxkIGJlIHplcm8gLi4uXG4gIDkwOlx0XHQgKi9cbiAgOTE6XHRcdG1lbXNldChcdTAwMjZuZXcsIDAsIHNpemVvZihuZXcpKTtcbiAgOTI6XHRcbiAgOTM6XHRcdC8qXG4gIDk0Olx0XHQgKiBJZiB5b3UgY2hhbmdlIHNpZ2luZm9fdCBzdHJ1Y3R1cmUsIHBsZWFzZSBiZSBzdXJlXG4gIDk1Olx0XHQgKiB0aGlzIGNvZGUgaXMgZml4ZWQgYWNjb3JkaW5nbHkuXG4gIDk2Olx0XHQgKi9cbiAgOTc6XHRcdG5ldy5zc2lfc2lnbm8gPSBraW5mby1cdTAwM2VzaV9zaWdubztcbiAgOTg6XHRcdG5ldy5zc2lfZXJybm8gPSBraW5mby1cdTAwM2VzaV9lcnJubztcbiAgOTk6XHRcdG5ldy5zc2lfY29kZSAgPSBraW5mby1cdTAwM2VzaV9jb2RlO1xuIDEwMDpcdFx0c3dpdGNoIChzaWdpbmZvX2xheW91dChraW5mby1cdTAwM2VzaV9zaWdubywga2luZm8tXHUwMDNlc2lfY29kZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLi4uCgoqKkRpdmluZyBpbnRvIGBmcy9zaWduYWxmZC5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSByZXN0IG9mIGBmcy9zaWduYWxmZC5jYC4gSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7dmUgYWxyZWFkeSBnb3QgYSBoYW5kbGUgb24gdGhlIGdlbmVyYWwgY29uY2VwdCBvZiBzaWduYWxmZCwgYnV0IEkgd2FudCB0byBzZWUgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsJiMzOTtzIHNpZ25hbCBkZWxpdmVyeSBtZWNoYW5pc21zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIGFuZCB0aGUgdmFyaW91cyBsb2NraW5nIHN0cmF0ZWdpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgZWxlZ2FuY2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSB1bnVzdWFsIGRlc2lnbiBjaG9pY2VzIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3Rpbmcgb3IgaW5zdHJ1Y3RpdmUuIEhvcGVmdWxseSwgSSYjMzk7bGwgdW5jb3ZlciBzb21lIGJlc3QgcHJhY3RpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3NpZ25hbGZkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdGNhc2UgU0lMX0tJTEw6XG4gMTAyOlx0XHRcdG5ldy5zc2lfcGlkID0ga2luZm8tXHUwMDNlc2lfcGlkO1xuIDEwMzpcdFx0XHRuZXcuc3NpX3VpZCA9IGtpbmZvLVx1MDAzZXNpX3VpZDtcbiAxMDQ6XHRcdFx0YnJlYWs7XG4gMTA1Olx0XHRjYXNlIFNJTF9USU1FUjpcbiAxMDY6XHRcdFx0bmV3LnNzaV90aWQgPSBraW5mby1cdTAwM2VzaV90aWQ7XG4gMTA3Olx0XHRcdG5ldy5zc2lfb3ZlcnJ1biA9IGtpbmZvLVx1MDAzZXNpX292ZXJydW47XG4gMTA4Olx0XHRcdG5ldy5zc2lfcHRyID0gKGxvbmcpIGtpbmZvLVx1MDAzZXNpX3B0cjtcbiAxMDk6XHRcdFx0bmV3LnNzaV9pbnQgPSBraW5mby1cdTAwM2VzaV9pbnQ7XG4gMTEwOlx0XHRcdGJyZWFrO1xuIDExMTpcdFx0Y2FzZSBTSUxfUE9MTDpcbiAxMTI6XHRcdFx0bmV3LnNzaV9iYW5kID0ga2luZm8tXHUwMDNlc2lfYmFuZDtcbiAxMTM6XHRcdFx0bmV3LnNzaV9mZCAgID0ga2luZm8tXHUwMDNlc2lfZmQ7XG4gMTE0Olx0XHRcdGJyZWFrO1xuIDExNTpcdFx0Y2FzZSBTSUxfRkFVTFRfQk5ERVJSOlxuIDExNjpcdFx0Y2FzZSBTSUxfRkFVTFRfUEtVRVJSOlxuIDExNzpcdFx0Y2FzZSBTSUxfRkFVTFRfUEVSRl9FVkVOVDpcbiAxMTg6XHRcdFx0LypcbiAxMTk6XHRcdFx0ICogRmFsbCB0aHJvdWdoIHRvIHRoZSBTSUxfRkFVTFQgY2FzZS4gIFNJTF9GQVVMVF9CTkRFUlIsXG4gMTIwOlx0XHRcdCAqIFNJTF9GQVVMVF9QS1VFUlIsIGFuZCBTSUxfRkFVTFRfUEVSRl9FVkVOVCBhcmUgb25seVxuIDEyMTpcdFx0XHQgKiBnZW5lcmF0ZWQgYnkgZmF1bHRzIHRoYXQgZGVsaXZlciB0aGVtIHN5bmNocm9ub3VzbHkgdG9cbiAxMjI6XHRcdFx0ICogdXNlcnNwYWNlLiAgSW4gY2FzZSBzb21lb25lIGluamVjdHMgb25lIG9mIHRoZXNlIHNpZ25hbHNcbiAxMjM6XHRcdFx0ICogYW5kIHNpZ25hbGZkIGNhdGNoZXMgaXQgdHJlYXQgaXQgYXMgU0lMX0ZBVUxULlxuIDEyNDpcdFx0XHQgKi9cbiAxMjU6XHRcdGNhc2UgU0lMX0ZBVUxUOlxuIDEyNjpcdFx0XHRuZXcuc3NpX2FkZHIgPSAobG9uZykga2luZm8tXHUwMDNlc2lfYWRkcjtcbiAxMjc6XHRcdFx0YnJlYWs7XG4gMTI4Olx0XHRjYXNlIFNJTF9GQVVMVF9UUkFQTk86XG4gMTI5Olx0XHRcdG5ldy5zc2lfYWRkciA9IChsb25nKSBraW5mby1cdTAwM2VzaV9hZGRyO1xuIDEzMDpcdFx0XHRuZXcuc3NpX3RyYXBubyA9IGtpbmZvLVx1MDAzZXNpX3RyYXBubztcbiAxMzE6XHRcdFx0YnJlYWs7XG4gMTMyOlx0XHRjYXNlIFNJTF9GQVVMVF9NQ0VFUlI6XG4gMTMzOlx0XHRcdG5ldy5zc2lfYWRkciA9IChsb25nKSBraW5mby1cdTAwM2VzaV9hZGRyO1xuIDEzNDpcdFx0XHRuZXcuc3NpX2FkZHJfbHNiID0gKHNob3J0KSBraW5mby1cdTAwM2VzaV9hZGRyX2xzYjtcbiAxMzU6XHRcdFx0YnJlYWs7XG4gMTM2Olx0XHRjYXNlIFNJTF9DSExEOlxuIDEzNzpcdFx0XHRuZXcuc3NpX3BpZCAgICA9IGtpbmZvLVx1MDAzZXNpX3BpZDtcbiAxMzg6XHRcdFx0bmV3LnNzaV91aWQgICAgPSBraW5mby1cdTAwM2VzaV91aWQ7XG4gMTM5Olx0XHRcdG5ldy5zc2lfc3RhdHVzID0ga2luZm8tXHUwMDNlc2lfc3RhdHVzO1xuIDE0MDpcdFx0XHRuZXcuc3NpX3V0aW1lICA9IGtpbmZvLVx1MDAzZXNpX3V0aW1lO1xuIDE0MTpcdFx0XHRuZXcuc3NpX3N0aW1lICA9IGtpbmZvLVx1MDAzZXNpX3N0aW1lO1xuIDE0MjpcdFx0XHRicmVhaztcbiAxNDM6XHRcdGNhc2UgU0lMX1JUOlxuIDE0NDpcdFx0XHQvKlxuIDE0NTpcdFx0XHQgKiBUaGlzIGNhc2UgY2F0Y2hlcyBhbHNvIHRoZSBzaWduYWxzIHF1ZXVlZCBieSBzaWdxdWV1ZSgpLlxuIDE0NjpcdFx0XHQgKi9cbiAxNDc6XHRcdFx0bmV3LnNzaV9waWQgPSBraW5mby1cdTAwM2VzaV9waWQ7XG4gMTQ4Olx0XHRcdG5ldy5zc2lfdWlkID0ga2luZm8tXHUwMDNlc2lfdWlkO1xuIDE0OTpcdFx0XHRuZXcuc3NpX3B0ciA9IChsb25nKSBraW5mby1cdTAwM2VzaV9wdHI7XG4gMTUwOlx0XHRcdG5ldy5zc2lfaW50ID0ga2luZm8tXHUwMDNlc2lfaW50O1xuIDE1MTpcdFx0XHRicmVhaztcbiAxNTI6XHRcdGNhc2UgU0lMX1NZUzpcbiAxNTM6XHRcdFx0bmV3LnNzaV9jYWxsX2FkZHIgPSAobG9uZykga2luZm8tXHUwMDNlc2lfY2FsbF9hZGRyO1xuIDE1NDpcdFx0XHRuZXcuc3NpX3N5c2NhbGwgICA9IGtpbmZvLVx1MDAzZXNpX3N5c2NhbGw7XG4gMTU1Olx0XHRcdG5ldy5zc2lfYXJjaCAgICAgID0ga2luZm8tXHUwMDNlc2lfYXJjaDtcbiAxNTY6XHRcdFx0YnJlYWs7XG4gMTU3Olx0XHR9XG4gMTU4Olx0XG4gMTU5Olx0XHRpZiAoIWNvcHlfdG9faXRlcl9mdWxsKFx1MDAyNm5ldywgc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKSwgdG8pKVxuIDE2MDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxNjE6XHRcbiAxNjI6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pO1xuIDE2MzpcdH1cbiAxNjQ6XHRcbiAxNjU6XHRzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mbyxcbiAxNjY6XHRcdFx0XHRcdGludCBub25ibG9jaylcbiAxNjc6XHR7XG4gMTY4Olx0XHRlbnVtIHBpZF90eXBlIHR5cGU7XG4gMTY5Olx0XHRzc2l6ZV90IHJldDtcbiAxNzA6XHRcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuIDE3MTpcdFx0REVDTEFSRV9XQUlUUVVFVUUoY3R4X3dhaXQsIGN1cnJlbnQpO1xuIDE3MjpcdFxuIDE3MzpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMTc0Olx0XHRzcGluX2xvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuIDE3NTpcdFx0cmV0ID0gZGVxdWV1ZV9zaWduYWwoXHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2ssIGluZm8sIFx1MDAyNnR5cGUpO1xuIDE3NjpcdFx0c3dpdGNoIChyZXQpIHtcbiAxNzc6XHRcdGNhc2UgMDpcbiAxNzg6XHRcdFx0aWYgKCFub25ibG9jaylcbiAxNzk6XHRcdFx0XHRicmVhaztcbiAxODA6XHRcdFx0cmV0ID0gLUVBR0FJTjtcbiAxODE6XHRcdFx0ZmFsbHRocm91Z2g7XG4gMTgyOlx0XHRkZWZhdWx0OlxuIDE4MzpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gMTg0Olx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMTg1Olx0XHRcdHJldHVybiByZXQ7XG4gMTg2Olx0XHR9XG4gMTg3Olx0XG4gMTg4Olx0XHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZjdHgtXHUwMDNld3FoLCBcdTAwMjZjdHhfd2FpdCk7XG4gMTg5Olx0XHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbiAxOTA6XHRcdGZvciAoOzspIHtcbiAxOTE6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiAxOTI6XHRcdFx0cmV0ID0gZGVxdWV1ZV9zaWduYWwoXHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2ssIGluZm8sIFx1MDAyNnR5cGUpO1xuIDE5MzpcdFx0XHRpZiAocmV0ICE9IDApXG4gMTk0Olx0XHRcdFx0YnJlYWs7XG4gMTk1Olx0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuIDE5NjpcdFx0XHRcdHJldCA9IC1FUkVTVEFSVFNZUztcbiAxOTc6XHRcdFx0XHRicmVhaztcbiAxOTg6XHRcdFx0fVxuIDE5OTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4gMjAwOlx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHNpZ25hbGZkLmMqKgoKQWxyaWdodCwgdG8gZnVsbHkgZ3Jhc3AgdGhpcyBiZWhhdmlvciwgSSBuZWVkIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBmcy9zaWduYWxmZC5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAyMDEgdGhyb3VnaCAzMTUuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBhcm91bmQgd2hhdGV2ZXIgYXNwZWN0IG9mIHRoaXMgaXMgdGhyb3dpbmcgbWUuIEkgZmlndXJlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZyBhbmQgd2hlcmUgSSYjMzk7bSBtb3N0IGxpa2VseSB0byBmaW5kIHRoZSBhbnN3ZXIuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhvc2UgbGluZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc2lnbmFsZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMTpcdFx0XHRzY2hlZHVsZSgpO1xuIDIwMjpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiAyMDM6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAyMDQ6XHRcdH1cbiAyMDU6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiAyMDY6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMjA3Olx0XG4gMjA4Olx0XHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbiAyMDk6XHRcdHJlbW92ZV93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiAyMTA6XHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiAyMTE6XHRcbiAyMTI6XHRcdHJldHVybiByZXQ7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdC8qXG4gMjE2Olx0ICogUmV0dXJucyBhIG11bHRpcGxlIG9mIHRoZSBzaXplIG9mIGEgXCYjMzQ7c3RydWN0IHNpZ25hbGZkX3NpZ2luZm9cJiMzNDssIG9yIGEgbmVnYXRpdmVcbiAyMTc6XHQgKiBlcnJvciBjb2RlLiBUaGUgXCYjMzQ7Y291bnRcJiMzNDsgcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgYVxuIDIxODpcdCAqIFwmIzM0O3N0cnVjdCBzaWduYWxmZF9zaWdpbmZvXCYjMzQ7LlxuIDIxOTpcdCAqL1xuIDIyMDpcdHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4gMjIxOlx0e1xuIDIyMjpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4gMjIzOlx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyMjQ6XHRcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KHRvKTtcbiAyMjU6XHRcdHNzaXplX3QgcmV0LCB0b3RhbCA9IDA7XG4gMjI2Olx0XHRrZXJuZWxfc2lnaW5mb190IGluZm87XG4gMjI3Olx0XHRib29sIG5vbmJsb2NrO1xuIDIyODpcdFxuIDIyOTpcdFx0Y291bnQgLz0gc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKTtcbiAyMzA6XHRcdGlmICghY291bnQpXG4gMjMxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzMjpcdFxuIDIzMzpcdFx0bm9uYmxvY2sgPSBmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0sgfHwgaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQ7XG4gMjM0Olx0XHRkbyB7XG4gMjM1Olx0XHRcdHJldCA9IHNpZ25hbGZkX2RlcXVldWUoY3R4LCBcdTAwMjZpbmZvLCBub25ibG9jayk7XG4gMjM2Olx0XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjPSAwKSlcbiAyMzc6XHRcdFx0XHRicmVhaztcbiAyMzg6XHRcdFx0cmV0ID0gc2lnbmFsZmRfY29weWluZm8odG8sIFx1MDAyNmluZm8pO1xuIDIzOTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDI0MDpcdFx0XHRcdGJyZWFrO1xuIDI0MTpcdFx0XHR0b3RhbCAmIzQzOz0gcmV0O1xuIDI0MjpcdFx0XHRub25ibG9jayA9IDE7XG4gMjQzOlx0XHR9IHdoaWxlICgtLWNvdW50KTtcbiAyNDQ6XHRcbiAyNDU6XHRcdHJldHVybiB0b3RhbCA/IHRvdGFsOiByZXQ7XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIDI0OTpcdHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXG4gMjUwOlx0e1xuIDI1MTpcdFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZi1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMjUyOlx0XHRzaWdzZXRfdCBzaWdtYXNrO1xuIDI1MzpcdFxuIDI1NDpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gMjU1Olx0XHRzaWdtYXNrID0gY3R4LVx1MDAzZXNpZ21hc2s7XG4gMjU2Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDI1NzpcdFx0c2lnbm90c2V0KFx1MDAyNnNpZ21hc2spO1xuIDI1ODpcdFx0cmVuZGVyX3NpZ3NldF90KG0sIFwmIzM0O3NpZ21hc2s6XFx0XCYjMzQ7LCBcdTAwMjZzaWdtYXNrKTtcbiAyNTk6XHR9XG4gMjYwOlx0I2VuZGlmXG4gMjYxOlx0XG4gMjYyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2lnbmFsZmRfZm9wcyA9IHtcbiAyNjM6XHQjaWZkZWYgQ09ORklHX1BST0NfRlNcbiAyNjQ6XHRcdC5zaG93X2ZkaW5mb1x0PSBzaWduYWxmZF9zaG93X2ZkaW5mbyxcbiAyNjU6XHQjZW5kaWZcbiAyNjY6XHRcdC5yZWxlYXNlXHQ9IHNpZ25hbGZkX3JlbGVhc2UsXG4gMjY3Olx0XHQucG9sbFx0XHQ9IHNpZ25hbGZkX3BvbGwsXG4gMjY4Olx0XHQucmVhZF9pdGVyXHQ9IHNpZ25hbGZkX3JlYWRfaXRlcixcbiAyNjk6XHRcdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiAyNzA6XHR9O1xuIDI3MTpcdFxuIDI3MjpcdHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXG4gMjczOlx0e1xuIDI3NDpcdFx0LyogQ2hlY2sgdGhlIFNGRF8qIGNvbnN0YW50cyBmb3IgY29uc2lzdGVuY3kuICAqL1xuIDI3NTpcdFx0QlVJTERfQlVHX09OKFNGRF9DTE9FWEVDICE9IE9fQ0xPRVhFQyk7XG4gMjc2Olx0XHRCVUlMRF9CVUdfT04oU0ZEX05PTkJMT0NLICE9IE9fTk9OQkxPQ0spO1xuIDI3NzpcdFxuIDI3ODpcdFx0aWYgKGZsYWdzIFx1MDAyNiB+KFNGRF9DTE9FWEVDIHwgU0ZEX05PTkJMT0NLKSlcbiAyNzk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjgwOlx0XG4gMjgxOlx0XHRzaWdkZWxzZXRtYXNrKG1hc2ssIHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKTtcbiAyODI6XHRcdHNpZ25vdHNldChtYXNrKTtcbiAyODM6XHRcbiAyODQ6XHRcdGlmICh1ZmQgPT0gLTEpIHtcbiAyODU6XHRcdFx0aW50IGZkO1xuIDI4NjpcdFx0XHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gMjg3Olx0XG4gMjg4Olx0XHRcdGN0eCA9IGttYWxsb2Nfb2JqKCpjdHgpO1xuIDI4OTpcdFx0XHRpZiAoIWN0eClcbiAyOTA6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyOTE6XHRcbiAyOTI6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIDI5MzpcdFx0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIDI5NDpcdFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuIDI5NTpcdFxuIDI5NjpcdFx0XHRmZCA9IEZEX0FERChmbGFncyBcdTAwMjYgT19DTE9FWEVDLFxuIDI5NzpcdFx0XHRcdCAgICBhbm9uX2lub2RlX2dldGZpbGVfZm1vZGUoXG4gMjk4Olx0XHRcdFx0XHQgICAgXCYjMzQ7W3NpZ25hbGZkXVwmIzM0OywgXHUwMDI2c2lnbmFsZmRfZm9wcywgY3R4LFxuIDI5OTpcdFx0XHRcdFx0ICAgIE9fUkRXUiB8IChmbGFncyBcdTAwMjYgT19OT05CTE9DSyksIEZNT0RFX05PV0FJVCkpO1xuIDMwMDpcdFx0XHRpZiAoZmQgXHUwMDNlPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY4OAoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiAxMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFNpZ25hbGZkIENvbnRleHQgV2FpdHF1ZXVlIEVuaGFuY2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMsIHNvIGhlcmUmIzM5O3MgdGhlIHByb2Nlc3M6CgpGaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBwZXItc2lnbmFsZmQgY29udGV4dCB3YWl0IHF1ZXVlIChgd3FoYCksIGEgc3BpbmxvY2sgKGBsb2NrYCksIGFuZCBhbiBSQ1UgaGVhZCB0byB0aGUgYHNpZ25hbGZkX2N0eGAgc3RydWN0dXJlLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gcmVsaWVkIG9uIHRoZSBgY3VycmVudC0mZ3Q7c2lnaGFuZC0mZ3Q7c2lnbmFsZmRfd3FoYCwgd2hpY2ggY2F1c2VkIHByb2JsZW1zIHdpdGggc2hhcmVkIHNpZ25hbGZkIGZpbGUgZGVzY3JpcHRvcnMgYWNyb3NzIHByb2Nlc3NlcyAoZm9ya2VkIHByb2Nlc3NlcyBvciBwcm9jZXNzZXMgbW9kaWZ5aW5nIHRoZSBkZXNjcmlwdG9yIHdpdGggYHNpZ25hbGZkYCkuIFRoZSBuZXcgYHdxaGAgZW5zdXJlcyB0aGF0IHdha2V1cHMgaGFwcGVuIGNvcnJlY3RseSwgaXJyZXNwZWN0aXZlIG9mIHRoZSBwcm9jZXNzIGNhbGxpbmcgYHNpZ25hbGZkYC4gV2hlbiBhIHNpZ25hbCBtYXNrIGlzIHVwZGF0ZWQgaW4gYGRvX3NpZ25hbGZkNGAsIHRoZSBgY3R4LSZndDtsb2NrYCBpcyB0YWtlbiwgYGN0eC0mZ3Q7c2lnbWFza2AgaXMgdXBkYXRlZCwgYW5kIGBjdHgtJmd0O3dxaGAgaXMgd29rZW4uIFRoZSB3YWl0cXVldWUgaXMgcmVnaXN0ZXJlZCB0byBib3RoIGBjdHgtJmd0O3dxaGAgYW5kIGBzaWdoYW5kLSZndDtzaWduYWxmZF93cWhgIGluIGBzaWduYWxmZF9wb2xsYCBhbmQgYHNpZ25hbGZkX2RlcXVldWVgIHVuZGVyIGFwcHJvcHJpYXRlIGxvY2tzLiBBbmQsIGZpbmFsbHksIHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgcmVsZWFzZWQsIGB3YWtlX3VwX3BvbGxmcmVlKCZhbXA7Y3R4LSZndDt3cWgpYCBhbmQgYGtmcmVlX3JjdShjdHgsIHJjdSlgIGVuc3VyZSBhIGNsZWFuIFJDVSBjbGVhbnVwLgoKTm93LCBmb3IgdGhlIEtNU0FOIGFuYWx5c2lzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgYWRkaXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgZG9lc24mIzM5O3QgbGVhZCB0byBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuCgoxLiAgKipJbml0aWFsaXphdGlvbjoqKiBUaGUgYHNpZ25hbGZkX2N0eGAgZmllbGRzIChgbG9ja2AsIGB3cWhgLCBhbmQgYHNpZ21hc2tgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiB3aXRoIGBrbWFsbG9jX29iamAuIFRoZSBzcGlubG9jayBpcyBpbml0aWFsaXplZCB3aXRoIGBzcGluX2xvY2tfaW5pdGAsIHRoZSB3YWl0cXVldWUgaGVhZCBpcyBpbml0aWFsaXplZCB1c2luZyBgaW5pdF93YWl0cXVldWVfaGVhZGAsIGFuZCBgY3R4LSZndDtzaWdtYXNrYCBpcyBpbml0aWFsaXplZCBieSBhc3NpZ25tZW50LiBUaGUgUkNVIGhlYWQgaXMgaW5pdGlhbGl6ZWQgaW1wbGljaXRseS4gQWxsIGZpZWxkcyB3aXRoaW4gdGhlIGNvbnRleHQgYXJlIHRoZXJlZm9yZSBwcm9wZXJseSBpbml0aWFsaXplZC4KCjIuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb25zOioqIEkmIzM5O3ZlIGNhcmVmdWxseSByZXZpZXdlZCBob3cgdXNlci1zcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgY2hhbmdlcy4gYHNpZ25hbGZkX3Nob3dfZmRpbmZvYCBjb3BpZXMgdGhlIGBzaWdtYXNrYCB1bmRlciB0aGUgbG9jaywgY29udmVydHMgdGhlIG1hc2sgd2l0aCBgc2lnbm90c2V0YCwgYW5kIHRoZW4gZm9ybWF0cyBpdCBhcyB0ZXh0LiBgc2lnbmFsZmRfZGVxdWV1ZWAgdXNlcyBhIHN0YWNrLWFsbG9jYXRlZCB3YWl0cXVldWUgZW50cnksIHNvIHRoZXJlIGFyZSBubyBpc3N1ZXMuIFRoZSBgc2lnbmFsZmRfY29weWluZm9gIGZ1bmN0aW9uIGlzIHVuY2hhbmdlZCwgd2hpY2ggbWVhbnMgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGBuZXdgIHN0cnVjdCByZW1haW5zIGludGFjdC4gYHNpZ25hbGZkX3BvbGxgIGluaXRpYWxpemVzIHRoZSBldmVudHMgYml0bWFzayB0byAwLiBOb25lIG9mIHRoZXNlIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuCgozLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBUaGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgd2hpY2ggd291bGQgYmUgYSBjcml0aWNhbCBLTVNBTiBjb25jZXJuLgoKNC4gICoqS01TQU4gQ29uZGl0aW9uczoqKiBJJiMzOTt2ZSBnb25lIHRocm91Z2ggZWFjaCBvZiB0aGUgZm91ciBwb3RlbnRpYWwgS01TQU4gY29uZGl0aW9uczoKICAgICogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBvciB6ZXJvZWQgZmllbGRzLiBUaGUgc3RydWN0IHRoYXQgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgY29udGludWVzIHRvIGJlIHplcm9lZCBvdXQuCiAgICAqICAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KICAgICogICBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbi4KICAgICogICBUaGVyZSYjMzk7cyBubyBvcHBvcnR1bml0eSBmb3Igc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcywgZWl0aGVyLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuCgpJbnN0ZWFkLCBJJiMzOTtsbCBmbGFnIG90aGVyIHNhbml0aXplcnMuIFRoaXMgd2lsbCBuZWVkIExPQ0tERVAgZm9yIGxvY2tpbmcgb3JkZXIvZGVhZGxvY2sgaXNzdWVzIGJldHdlZW4gYGN0eC0mZ3Q7bG9ja2AgYW5kIGBjdXJyZW50LSZndDtzaWdoYW5kLSZndDtzaWdsb2NrYCwgYW5kIEtBU0FOIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igd2FpdHF1ZXVlIGxpZmV0aW1lL1JDVSBpc3N1ZXMuCgpTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGdvb2Qgc29sdXRpb24gdG8gZml4IGEgZnVuZGFtZW50YWwgaXNzdWUuIFRoZSBwZXItZmlsZSB3YWl0cXVldWUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhdm9pZGluZyB0aGUgcHJvYmxlbXMgb2Ygc2hhcmluZyBhIGdsb2JhbCBvbmUuIFRoZSBjb2RlIHBhdGhzIGFyZW4mIzM5O3QgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmb2N1cyBub3cgc2hpZnRzIHRvIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcywgd2hpY2ggaXMgd2VsbCBjb3ZlcmVkIGJ5IHRoZSBzdGFuZGFyZCB0b29sY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgd2FpdHF1ZXVlIChgd3FoYCksIHNwaW5sb2NrIChgbG9ja2ApLCBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgKGByY3VfaGVhZGApIHRvIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBpbiBgZnMvc2lnbmFsZmQuY2Agc28gdGhhdCBtYXNrIHVwZGF0ZXMgdmlhIGBzaWduYWxmZDRgIHByb3Blcmx5IHdha2UgdXAgd2FpdGVycyBhY3Jvc3MgcHJvY2Vzc2VzLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4xLiBBbGwgZmllbGRzIG9mIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKGBzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jaylgLCBgaW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZjdHgtXHUwMDNld3FoKWAsIGBjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrYCkuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGUga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvYCkgcmVtYWlucyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0YCBpbiBgc2lnbmFsZmRfY29weWluZm8oKWAuXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cdTAwM2Vsb2NrYCBhbmQgYHNpZ2hhbmQtXHUwMDNlc2lnbG9ja2ApLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgd2FpdHF1ZXVlIChgd3FoYCksIHNwaW5sb2NrIChgbG9ja2ApLCBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgKGByY3VfaGVhZGApIHRvIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBpbiBgZnMvc2lnbmFsZmQuY2Agc28gdGhhdCBtYXNrIHVwZGF0ZXMgdmlhIGBzaWduYWxmZDRgIHByb3Blcmx5IHdha2UgdXAgd2FpdGVycyBhY3Jvc3MgcHJvY2Vzc2VzLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4xLiBBbGwgZmllbGRzIG9mIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKGBzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jaylgLCBgaW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZjdHgtXHUwMDNld3FoKWAsIGBjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrYCkuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGUga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvYCkgcmVtYWlucyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0YCBpbiBgc2lnbmFsZmRfY29weWluZm8oKWAuXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cdTAwM2Vsb2NrYCBhbmQgYHNpZ2hhbmQtXHUwMDNlc2lnbG9ja2ApLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDM6MzkuNTE3OTE5NTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzA0Nzg1MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNJR05BTEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2lnbmFsZmRfcG9sbFwiLFxuICAgIFwic2lnbmFsZmRfZGVxdWV1ZVwiLFxuICAgIFwic2lnbmFsZmRfcmVsZWFzZVwiLFxuICAgIFwiZG9fc2lnbmFsZmQ0XCIsXG4gICAgXCJzaWduYWxmZF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZGVkaWNhdGVkIHdhaXRxdWV1ZSAoYHdxaGApLCBzcGlubG9jayAoYGxvY2tgKSwgYW5kIFJDVS1iYXNlZCBmcmVlaW5nIChgcmN1X2hlYWRgKSB0byBgc3RydWN0IHNpZ25hbGZkX2N0eGAgaW4gYGZzL3NpZ25hbGZkLmNgIHNvIHRoYXQgbWFzayB1cGRhdGVzIHZpYSBgc2lnbmFsZmQ0YCBwcm9wZXJseSB3YWtlIHVwIHdhaXRlcnMgYWNyb3NzIHByb2Nlc3Nlcy5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XFxuMS4gQWxsIGZpZWxkcyBvZiBgc3RydWN0IHNpZ25hbGZkX2N0eGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIChgc3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaylgLCBgaW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2Y3R4LVxcdTAwM2V3cWgpYCwgYGN0eC1cXHUwMDNlc2lnbWFzayA9ICptYXNrYCkuXFxuMi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBzdHJ1Y3R1cmUgKGBzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mb2ApIHJlbWFpbnMgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldGAgaW4gYHNpZ25hbGZkX2NvcHlpbmZvKClgLlxcbjMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggaW52b2x2ZSBzeW5jaHJvbml6YXRpb24sIHdhaXRxdWV1ZSBvcmRlcmluZywgb3IgbG9jayBoaWVyYXJjaGllcyAoYmV0d2VlbiBgY3R4LVxcdTAwM2Vsb2NrYCBhbmQgYHNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2tgKSwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIHdhaXQgcXVldWUgaGFuZGxpbmcgaW4gc2lnbmFsZmQgKGZzL3NpZ25hbGZkLmMpLiBJbiBwYXJ0aWN1bGFyLCBpdCBpbnRyb2R1Y2VzIGN0eC1sZXZlbCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhlYWQsIHVwZGF0aW5nIHNpZ25hbGZkX3BvbGwsIHNpZ25hbGZkX2RlcXVldWUsIHNpZ25hbGZkX3JlbGVhc2UsIGFuZCBkb19zaWduYWxmZDQgdG8gc3VwcG9ydCB3YWtpbmcgd2FpdGVycyB1cG9uIHNpZ25hbGZkIG1hc2sgdXBkYXRlcyBhY3Jvc3MgdGhyZWFkcy9wcm9jZXNzZXMuIFRoaXMgaXMgY29yZSwgcmVhY2hhYmxlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDM6MzkuNTE3OTI2MjUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYwMDg0MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2E5MDZlMTY1YTBhNzM3ZGZmZWZjNDkwMjkwNjA1ZjQ3MDMwM2UyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjo0MzozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9zaWduYWxmZC5jIGIvZnMvc2lnbmFsZmQuY1xcbmluZGV4IGRmZjUzNzQ1ZTM1MjQuLjUyM2MzYTZkYzU2NTkgMTAwNjQ0XFxuLS0tIGEvZnMvc2lnbmFsZmQuY1xcbisrKyBiL2ZzL3NpZ25hbGZkLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbm9uX2lub2Rlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lnbmFsZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcXHUwMDNlXFxuQEAgLTM5LDEyICs0MCwxOSBAQCB2b2lkIHNpZ25hbGZkX2NsZWFudXAoc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kKVxcbiB9XFxuIFxcbiBzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHtcXG4rXFx0LyogU2VyaWFsaXplcyBzaGFyZWQgbWFzayB1cGRhdGVzIHdpdGggZmlsZS1sb2NhbCB3YWl0ZXIgd2FrZXVwcy4gKi9cXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbitcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7XFxuK1xcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIFxcdHNpZ3NldF90IHNpZ21hc2s7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHNpZ25hbGZkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4tXFx0a2ZyZWUoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhKTtcXG4rXFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXG4rXFx0d2FrZV91cF9wb2xsZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2V3cWgpO1xcbitcXHRrZnJlZV9yY3UoY3R4LCByY3UpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNTMsMTQgKzYxLDE3IEBAIHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbiBcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdF9fcG9sbF90IGV2ZW50cyA9IDA7XFxuIFxcbitcXHRwb2xsX3dhaXQoZmlsZSwgXFx1MDAyNmN0eC1cXHUwMDNld3FoLCB3YWl0KTtcXG4gXFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgsIHdhaXQpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIFxcdGlmIChuZXh0X3NpZ25hbChcXHUwMDI2Y3VycmVudC1cXHUwMDNlcGVuZGluZywgXFx1MDAyNmN0eC1cXHUwMDNlc2lnbWFzaykgfHxcXG4gXFx0ICAgIG5leHRfc2lnbmFsKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZXNoYXJlZF9wZW5kaW5nLFxcbiBcXHRcXHRcXHRcXHUwMDI2Y3R4LVxcdTAwM2VzaWdtYXNrKSlcXG4gXFx0XFx0ZXZlbnRzIHw9IEVQT0xMSU47XFxuLVxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIGV2ZW50cztcXG4gfVxcbkBAIC0xNTcsOCArMTY4LDEwIEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvXFxuIFxcdGVudW0gcGlkX3R5cGUgdHlwZTtcXG4gXFx0c3NpemVfdCByZXQ7XFxuIFxcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xcbitcXHRERUNMQVJFX1dBSVRRVUVVRShjdHhfd2FpdCwgY3VycmVudCk7XFxuIFxcbi1cXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4gXFx0cmV0ID0gZGVxdWV1ZV9zaWduYWwoXFx1MDAyNmN0eC1cXHUwMDNlc2lnbWFzaywgaW5mbywgXFx1MDAyNnR5cGUpO1xcbiBcXHRzd2l0Y2ggKHJldCkge1xcbiBcXHRjYXNlIDA6XFxuQEAgLTE2NywxMCArMTgwLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvXFxuIFxcdFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4rXFx0YWRkX3dhaXRfcXVldWUoXFx1MDAyNmN0eC1cXHUwMDNld3FoLCBcXHUwMDI2Y3R4X3dhaXQpO1xcbiBcXHRhZGRfd2FpdF9xdWV1ZShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbmFsZmRfd3FoLCBcXHUwMDI2d2FpdCk7XFxuIFxcdGZvciAoOzspIHtcXG4gXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcXG5AQCAtMTgxLDEzICsxOTYsMTcgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm9cXG4gXFx0XFx0XFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0c2NoZWR1bGUoKTtcXG4tXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIFxcdH1cXG4tXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbitcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbmFsZmRfd3FoLCBcXHUwMDI2d2FpdCk7XFxuK1xcdHJlbW92ZV93YWl0X3F1ZXVlKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCwgXFx1MDAyNmN0eF93YWl0KTtcXG4gXFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMjMyLDcgKzI1MSw5IEBAIHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXFxuIFxcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGYtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0c2lnc2V0X3Qgc2lnbWFzaztcXG4gXFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcdHNpZ21hc2sgPSBjdHgtXFx1MDAzZXNpZ21hc2s7XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gXFx0c2lnbm90c2V0KFxcdTAwMjZzaWdtYXNrKTtcXG4gXFx0cmVuZGVyX3NpZ3NldF90KG0sIFxcXCJzaWdtYXNrOlxcXFx0XFxcIiwgXFx1MDAyNnNpZ21hc2spO1xcbiB9XFxuQEAgLTI2OCw2ICsyODksOCBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKVxcbiBcXHRcXHRpZiAoIWN0eClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbitcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2Y3R4LVxcdTAwM2V3cWgpO1xcbiBcXHRcXHRjdHgtXFx1MDAzZXNpZ21hc2sgPSAqbWFzaztcXG4gXFxuIFxcdFxcdGZkID0gRkRfQUREKGZsYWdzIFxcdTAwMjYgT19DTE9FWEVDLFxcbkBAIC0yODYsMTEgKzMwOSwxMSBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKVxcbiBcXHRcXHRjdHggPSBmZF9maWxlKGYpLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdFxcdGlmIChmZF9maWxlKGYpLVxcdTAwM2VmX29wICE9IFxcdTAwMjZzaWduYWxmZF9mb3BzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGN0eC1cXHUwMDNlc2lnbWFzayA9ICptYXNrO1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRcXHR3YWtlX3VwKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgpO1xcbitcXHRcXHR3YWtlX3VwKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB1ZmQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcXG5pbmRleCAzZjMzOTg2NWEzYjZlLi41Y2FjNTMyZDQ5YWU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcXG5AQCAtMSwzICsxLDQgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuIG1hbmdsZV91Y19zaWdtYXNrXFxuIHNhc1xcbitzaWduYWxmZF9tYXNrX3dha2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlXFxuaW5kZXggZTBiZjcwNThkMTljOS4uMDBmMWU5NmM5MmM0ZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcXG5AQCAtMiw2ICsyLDYgQEBcXG4gQ0ZMQUdTID0gLVdhbGxcXG4gVEVTVF9HRU5fUFJPR1MgPSBtYW5nbGVfdWNfc2lnbWFza1xcbiBURVNUX0dFTl9QUk9HUyArPSBzYXNcXG4rVEVTVF9HRU5fUFJPR1MgKz0gc2lnbmFsZmRfbWFza193YWtlXFxuIFxcbiBpbmNsdWRlIC4uL2xpYi5ta1xcbi1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL3NpZ25hbGZkX21hc2tfd2FrZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zZTYwNDI0YjllYzllXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuY1xcbkBAIC0wLDAgKzEsMjY2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc2lnbmFsZmQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfYWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnB0ciA9IGJ1ZjtcXG4rXFxuK1xcdHdoaWxlIChsZW4pIHtcXG4rXFx0XFx0c3NpemVfdCByZXQgPSB3cml0ZShmZCwgcHRyLCBsZW4pO1xcbitcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0aWYgKGVycm5vID09IEVJTlRSKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwdHIgKz0gcmV0O1xcbitcXHRcXHRsZW4gLT0gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByZWFkX2FsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRjaGFyICpwdHIgPSBidWY7XFxuK1xcbitcXHR3aGlsZSAobGVuKSB7XFxuK1xcdFxcdHNzaXplX3QgcmV0ID0gcmVhZChmZCwgcHRyLCBsZW4pO1xcbitcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0aWYgKGVycm5vID09IEVJTlRSKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0XFx0cHRyICs9IHJldDtcXG4rXFx0XFx0bGVuIC09IHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGtpbGxfYW5kX3JlYXAocGlkX3QgcGlkKVxcbit7XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHRpZiAocGlkIFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGtpbGwocGlkLCBTSUdLSUxMKTtcXG4rXFx0d2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHdhaXRfcmVzdWx0KGludCBmZCwgaW50IHRpbWVvdXRfbXMpXFxuK3tcXG4rXFx0c3RydWN0IHBvbGxmZCBwZmQgPSB7XFxuK1xcdFxcdC5mZCA9IGZkLFxcbitcXHRcXHQuZXZlbnRzID0gUE9MTElOLFxcbitcXHR9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyZXQgPSBwb2xsKFxcdTAwMjZwZmQsIDEsIHRpbWVvdXRfbXMpO1xcbitcXHR9IHdoaWxlIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlRSKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWRfdCBwaWQsIGludCBzZmQpXFxuK3tcXG4rXFx0Y2hhciBwYXRoWzY0XTtcXG4rXFx0Y2hhciBidWZbMjU2XTtcXG4rXFx0bG9uZyBucjtcXG4rXFx0dW5zaWduZWQgbG9uZyBhcmcwO1xcbitcXHRGSUxFICpmcDtcXG4rXFx0aW50IGluX3JlYWQgPSAwO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiL3Byb2MvJWQvc3lzY2FsbFxcXCIsIHBpZCk7XFxuK1xcdGZwID0gZm9wZW4ocGF0aCwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmcCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKVxcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzc2NhbmYoYnVmLCBcXFwiJWxkICVseFxcXCIsIFxcdTAwMjZuciwgXFx1MDAyNmFyZzApID09IDIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5yID09IF9fTlJfcmVhZCBcXHUwMDI2XFx1MDAyNiBhcmcwID09ICh1bnNpZ25lZCBsb25nKXNmZClcXG4rXFx0XFx0aW5fcmVhZCA9IDE7XFxuK1xcbitcXHRmY2xvc2UoZnApO1xcbitcXHRyZXR1cm4gaW5fcmVhZDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3YWl0X2Zvcl9jaGlsZF9ibG9jayhwaWRfdCBwaWQsIGludCBzZmQsIGludCB0aW1lb3V0X21zKVxcbit7XFxuK1xcdGludCB3YWl0ZWRfbXMgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKHdhaXRlZF9tcyBcXHUwMDNjIHRpbWVvdXRfbXMpIHtcXG4rXFx0XFx0cmV0ID0gY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWQsIHNmZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHR1c2xlZXAoMTAwMDApO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0dXNsZWVwKDEwMDApO1xcbitcXHRcXHR3YWl0ZWRfbXMrKztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvIGZkc2k7XFxuK1xcdHNpZ3NldF90IGJsb2NrZWQsIGluaXRpYWxfbWFzaywgdXBkYXRlZF9tYXNrO1xcbitcXHRpbnQgcmVhZHlfcGlwZVsyXSwgc3RhcnRfcGlwZVsyXSwgcmVzdWx0X3BpcGVbMl07XFxuK1xcdGludCBzZmQsIHNpZ25vLCBzdGF0dXM7XFxuK1xcdHBpZF90IGNoaWxkO1xcbitcXHRjaGFyIHJlYWR5LCBzdGFydDtcXG4rXFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oMSk7XFxuK1xcbitcXHRzaWdlbXB0eXNldChcXHUwMDI2YmxvY2tlZCk7XFxuK1xcdHNpZ2FkZHNldChcXHUwMDI2YmxvY2tlZCwgU0lHVVNSMSk7XFxuK1xcdHNpZ2FkZHNldChcXHUwMDI2YmxvY2tlZCwgU0lHVVNSMik7XFxuK1xcdGlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIFxcdTAwMjZibG9ja2VkLCBOVUxMKSlcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJzaWdwcm9jbWFza1xcXCIpO1xcbitcXG4rXFx0c2lnZW1wdHlzZXQoXFx1MDAyNmluaXRpYWxfbWFzayk7XFxuK1xcdHNpZ2FkZHNldChcXHUwMDI2aW5pdGlhbF9tYXNrLCBTSUdVU1IxKTtcXG4rXFx0c2ZkID0gc2lnbmFsZmQoLTEsIFxcdTAwMjZpbml0aWFsX21hc2ssIDApO1xcbitcXHRpZiAoc2ZkIFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJzaWduYWxmZFxcXCIpO1xcbitcXG4rXFx0aWYgKHBpcGUocmVhZHlfcGlwZSkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicGlwZShyZWFkeSlcXFwiKTtcXG4rXFx0aWYgKHBpcGUoc3RhcnRfcGlwZSkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicGlwZShzdGFydClcXFwiKTtcXG4rXFx0aWYgKHBpcGUocmVzdWx0X3BpcGUpKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcInBpcGUocmVzdWx0KVxcXCIpO1xcbitcXG4rXFx0Y2hpbGQgPSBmb3JrKCk7XFxuK1xcdGlmIChjaGlsZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwiZm9ya1xcXCIpO1xcbitcXG4rXFx0aWYgKGNoaWxkID09IDApIHtcXG4rXFx0XFx0Y2xvc2UocmVhZHlfcGlwZVswXSk7XFxuK1xcdFxcdGNsb3NlKHN0YXJ0X3BpcGVbMV0pO1xcbitcXHRcXHRjbG9zZShyZXN1bHRfcGlwZVswXSk7XFxuK1xcbitcXHRcXHRyZWFkeSA9ICdSJztcXG4rXFx0XFx0aWYgKHdyaXRlX2FsbChyZWFkeV9waXBlWzFdLCBcXHUwMDI2cmVhZHksIHNpemVvZihyZWFkeSkpKVxcbitcXHRcXHRcXHRfZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXG4rXFx0XFx0aWYgKHJlYWRfYWxsKHN0YXJ0X3BpcGVbMF0sIFxcdTAwMjZzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpXFxuK1xcdFxcdFxcdF9leGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmZkc2ksIDAsIHNpemVvZihmZHNpKSk7XFxuK1xcdFxcdGlmIChyZWFkX2FsbChzZmQsIFxcdTAwMjZmZHNpLCBzaXplb2YoZmRzaSkpKVxcbitcXHRcXHRcXHRfZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXG4rXFx0XFx0c2lnbm8gPSBmZHNpLnNzaV9zaWdubztcXG4rXFx0XFx0aWYgKHdyaXRlX2FsbChyZXN1bHRfcGlwZVsxXSwgXFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSlcXG4rXFx0XFx0XFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFxuK1xcdFxcdF9leGl0KEVYSVRfU1VDQ0VTUyk7XFxuK1xcdH1cXG4rXFxuK1xcdGNsb3NlKHJlYWR5X3BpcGVbMV0pO1xcbitcXHRjbG9zZShzdGFydF9waXBlWzBdKTtcXG4rXFx0Y2xvc2UocmVzdWx0X3BpcGVbMV0pO1xcbitcXG4rXFx0aWYgKHJlYWRfYWxsKHJlYWR5X3BpcGVbMF0sIFxcdTAwMjZyZWFkeSwgc2l6ZW9mKHJlYWR5KSkpIHtcXG4rXFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiY2hpbGQgZGlkIG5vdCByZWFjaCBibG9ja2luZyByZWFkXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGtpbGwoY2hpbGQsIFNJR1VTUjIpKSB7XFxuK1xcdFxcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcImtpbGwoU0lHVVNSMilcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0c3RhcnQgPSAnUyc7XFxuK1xcdGlmICh3cml0ZV9hbGwoc3RhcnRfcGlwZVsxXSwgXFx1MDAyNnN0YXJ0LCBzaXplb2Yoc3RhcnQpKSkge1xcbitcXHRcXHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJjb3VsZCBub3QgcmVsZWFzZSBjaGlsZCBpbnRvIHNpZ25hbGZkIHJlYWRcXFxcblxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRzdGF0dXMgPSB3YWl0X2Zvcl9jaGlsZF9ibG9jayhjaGlsZCwgc2ZkLCAxMDAwKTtcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdGlmIChzdGF0dXMgPT0gLTEpXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCIvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9zeXNjYWxsIGlzIHVuYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJjaGlsZCBkaWQgbm90IGJsb2NrIGluIHNpZ25hbGZkIHJlYWRcXFxcblxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRzaWdlbXB0eXNldChcXHUwMDI2dXBkYXRlZF9tYXNrKTtcXG4rXFx0c2lnYWRkc2V0KFxcdTAwMjZ1cGRhdGVkX21hc2ssIFNJR1VTUjIpO1xcbitcXHRpZiAoc2lnbmFsZmQoc2ZkLCBcXHUwMDI2dXBkYXRlZF9tYXNrLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwic2lnbmFsZmQocmVjb25maWd1cmUpXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh3YWl0X3Jlc3VsdChyZXN1bHRfcGlwZVswXSwgMTAwMCkgPT0gMSkge1xcbitcXHRcXHRpZiAocmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sIFxcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkpIHtcXG4rXFx0XFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiY2hpbGQgd2FrZXVwIGRpZCBub3QgY2FycnkgYSBzaWduYWxcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAod2FpdHBpZChjaGlsZCwgXFx1MDAyNnN0YXR1cywgMCkgIT0gY2hpbGQpIHtcXG4rXFx0XFx0XFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwid2FpdHBpZFxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQoc2lnbm8gPT0gU0lHVVNSMiBcXHUwMDI2XFx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLFxcbitcXHRcXHRcXHRcXHQgXFxcInNoYXJlZCBzaWduYWxmZCB3YWtldXAgYWZ0ZXIgbWFzayB1cGRhdGVcXFxcblxcXCIpO1xcbitcXHRcXHRrc2Z0X2V4aXRfcGFzcygpO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCdWdneSBrZXJuZWxzIGxlYXZlIHRoZSBjaGlsZCBhc2xlZXAgdW50aWwgYW4gdW5yZWxhdGVkIHNpZ25hbCBoaXRzXFxuK1xcdCAqIHRoZSBjaGlsZCdzIHNpZ25hbGZkIHdhaXRxdWV1ZS4gU0lHVVNSMSBkb2VzIG5vdCBtYXRjaCB0aGUgdXBkYXRlZFxcbitcXHQgKiBzaWduYWxmZCBtYXNrLCBzbyBhIHN1Y2Nlc3NmdWwgcmVhZCBvZiBTSUdVU1IyIGFmdGVyIHRoaXMgbnVkZ2VcXG4rXFx0ICogZGVtb25zdHJhdGVzIHRoZSBtaXNzZWQgd2FrZXVwLlxcbitcXHQgKi9cXG4rXFx0aWYgKGtpbGwoY2hpbGQsIFNJR1VTUjEpKSB7XFxuK1xcdFxcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcImtpbGwoU0lHVVNSMSlcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHdhaXRfcmVzdWx0KHJlc3VsdF9waXBlWzBdLCAxMDAwKSA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sIFxcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHdhaXRwaWQoY2hpbGQsIFxcdTAwMjZzdGF0dXMsIDApID09IGNoaWxkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzaWdubyA9PSBTSUdVU1IyIFxcdTAwMjZcXHUwMDI2IFdJRkVYSVRFRChzdGF0dXMpIFxcdTAwMjZcXHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCkge1xcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXFxcIm1hc2sgdXBkYXRlIG1pc3NlZCBhIHNoYXJlZCBzaWduYWxmZCB3YWl0ZXJcXFxcblxcXCIpO1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2hpbGQgd29rZSBvbmx5IGFmdGVyIGFuIHVucmVsYXRlZCBTSUdVU1IxXFxcXG5cXFwiKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4rXFx0fVxcbitcXG4rXFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XFxuK1xcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiY2hpbGQgcmVtYWluZWQgYmxvY2tlZCBhZnRlciBzaWduYWxmZCByZWNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQzOjQxLjA3OTA1ODA5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODI1ODU1OTI4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0lHTkFMRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaWduYWxmZF9wb2xsXCIsXG4gICAgXCJzaWduYWxmZF9kZXF1ZXVlXCIsXG4gICAgXCJzaWduYWxmZF9yZWxlYXNlXCIsXG4gICAgXCJkb19zaWduYWxmZDRcIixcbiAgICBcInNpZ25hbGZkX2NsZWFudXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoYW5kbGluZyBpbiBzaWduYWxmZCAoZnMvc2lnbmFsZmQuYykuIEluIHBhcnRpY3VsYXIsIGl0IGludHJvZHVjZXMgY3R4LWxldmVsIGxvY2tpbmcgYW5kIHdhaXQgcXVldWUgaGVhZCwgdXBkYXRpbmcgc2lnbmFsZmRfcG9sbCwgc2lnbmFsZmRfZGVxdWV1ZSwgc2lnbmFsZmRfcmVsZWFzZSwgYW5kIGRvX3NpZ25hbGZkNCB0byBzdXBwb3J0IHdha2luZyB3YWl0ZXJzIHVwb24gc2lnbmFsZmQgbWFzayB1cGRhdGVzIGFjcm9zcyB0aHJlYWRzL3Byb2Nlc3Nlcy4gVGhpcyBpcyBjb3JlLCByZWFjaGFibGUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYTkwNmUxNjVhMGE3MzdkZmZlZmM0OTAyOTA2MDVmNDcwMzAzZTIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6NDM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zaWduYWxmZC5jIGIvZnMvc2lnbmFsZmQuY1xuaW5kZXggZGZmNTM3NDVlMzUyNC4uNTIzYzNhNmRjNTY1OSAxMDA2NDRcbi0tLSBhL2ZzL3NpZ25hbGZkLmNcbisrKyBiL2ZzL3NpZ25hbGZkLmNcbkBAIC0yNyw2ICsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbm9uX2lub2Rlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbkBAIC0zOSwxMiArNDAsMTkgQEAgdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZClcbiB9XG4gXG4gc3RydWN0IHNpZ25hbGZkX2N0eCB7XG4rXHQvKiBTZXJpYWxpemVzIHNoYXJlZCBtYXNrIHVwZGF0ZXMgd2l0aCBmaWxlLWxvY2FsIHdhaXRlciB3YWtldXBzLiAqL1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3Qgd3FoO1xuK1x0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdHNpZ3NldF90IHNpZ21hc2s7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHNpZ25hbGZkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0a2ZyZWUoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuK1x0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXG4rXHR3YWtlX3VwX3BvbGxmcmVlKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuK1x0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01MywxNCArNjEsMTcgQEAgc3RhdGljIF9fcG9sbF90IHNpZ25hbGZkX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXG4gXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdF9fcG9sbF90IGV2ZW50cyA9IDA7XG4gXG4rXHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2Y3R4LVx1MDAzZXdxaCwgd2FpdCk7XG4gXHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaCwgd2FpdCk7XG4gXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiBcdGlmIChuZXh0X3NpZ25hbChcdTAwMjZjdXJyZW50LVx1MDAzZXBlbmRpbmcsIFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrKSB8fFxuIFx0ICAgIG5leHRfc2lnbmFsKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nLFxuIFx0XHRcdFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrKSlcbiBcdFx0ZXZlbnRzIHw9IEVQT0xMSU47XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiBldmVudHM7XG4gfVxuQEAgLTE1Nyw4ICsxNjgsMTAgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm9cbiBcdGVudW0gcGlkX3R5cGUgdHlwZTtcbiBcdHNzaXplX3QgcmV0O1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4rXHRERUNMQVJFX1dBSVRRVUVVRShjdHhfd2FpdCwgY3VycmVudCk7XG4gXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiBcdHJldCA9IGRlcXVldWVfc2lnbmFsKFx1MDAyNmN0eC1cdTAwM2VzaWdtYXNrLCBpbmZvLCBcdTAwMjZ0eXBlKTtcbiBcdHN3aXRjaCAocmV0KSB7XG4gXHRjYXNlIDA6XG5AQCAtMTY3LDEwICsxODAsMTIgQEAgc3RhdGljIHNzaXplX3Qgc2lnbmFsZmRfZGVxdWV1ZShzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgsIGtlcm5lbF9zaWdpbmZvX3QgKmluZm9cbiBcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRkZWZhdWx0OlxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4rXHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZjdHgtXHUwMDNld3FoLCBcdTAwMjZjdHhfd2FpdCk7XG4gXHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbiBcdGZvciAoOzspIHtcbiBcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbkBAIC0xODEsMTMgKzE5NiwxNyBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0XHRcdHJldCA9IC1FUkVTVEFSVFNZUztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRcdHNjaGVkdWxlKCk7XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbiBcdH1cbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFxuIFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaCwgXHUwMDI2d2FpdCk7XG4rXHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZjdHgtXHUwMDNld3FoLCBcdTAwMjZjdHhfd2FpdCk7XG4gXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTIzMiw3ICsyNTEsOSBAQCBzdGF0aWMgdm9pZCBzaWduYWxmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxuIFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZi1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRzaWdzZXRfdCBzaWdtYXNrO1xuIFxuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRzaWdtYXNrID0gY3R4LVx1MDAzZXNpZ21hc2s7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0c2lnbm90c2V0KFx1MDAyNnNpZ21hc2spO1xuIFx0cmVuZGVyX3NpZ3NldF90KG0sIFwic2lnbWFzazpcXHRcIiwgXHUwMDI2c2lnbWFzayk7XG4gfVxuQEAgLTI2OCw2ICsyODksOCBAQCBzdGF0aWMgaW50IGRvX3NpZ25hbGZkNChpbnQgdWZkLCBzaWdzZXRfdCAqbWFzaywgaW50IGZsYWdzKVxuIFx0XHRpZiAoIWN0eClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuK1x0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuIFxuIFx0XHRmZCA9IEZEX0FERChmbGFncyBcdTAwMjYgT19DTE9FWEVDLFxuQEAgLTI4NiwxMSArMzA5LDExIEBAIHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXG4gXHRcdGN0eCA9IGZkX2ZpbGUoZiktXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0XHRpZiAoZmRfZmlsZShmKS1cdTAwM2VmX29wICE9IFx1MDAyNnNpZ25hbGZkX2ZvcHMpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdFx0Y3R4LVx1MDAzZXNpZ21hc2sgPSAqbWFzaztcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0d2FrZV91cChcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoKTtcbitcdFx0d2FrZV91cChcdTAwMjZjdHgtXHUwMDNld3FoKTtcbiBcdH1cbiBcbiBcdHJldHVybiB1ZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZVxuaW5kZXggM2YzMzk4NjVhM2I2ZS4uNWNhYzUzMmQ0OWFlNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZVxuQEAgLTEsMyArMSw0IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gbWFuZ2xlX3VjX3NpZ21hc2tcbiBzYXNcbitzaWduYWxmZF9tYXNrX3dha2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcbmluZGV4IGUwYmY3MDU4ZDE5YzkuLjAwZjFlOTZjOTJjNGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZVxuQEAgLTIsNiArMiw2IEBAXG4gQ0ZMQUdTID0gLVdhbGxcbiBURVNUX0dFTl9QUk9HUyA9IG1hbmdsZV91Y19zaWdtYXNrXG4gVEVTVF9HRU5fUFJPR1MgKz0gc2FzXG4rVEVTVF9HRU5fUFJPR1MgKz0gc2lnbmFsZmRfbWFza193YWtlXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbi1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zZTYwNDI0YjllYzllXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmNcbkBAIC0wLDAgKzEsMjY2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbitcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3NpZ25hbGZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbitcbitzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjb25zdCBjaGFyICpwdHIgPSBidWY7XG4rXG4rXHR3aGlsZSAobGVuKSB7XG4rXHRcdHNzaXplX3QgcmV0ID0gd3JpdGUoZmQsIHB0ciwgbGVuKTtcbitcbitcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1xuK1x0XHRwdHIgKz0gcmV0O1xuK1x0XHRsZW4gLT0gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVhZF9hbGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciAqcHRyID0gYnVmO1xuK1xuK1x0d2hpbGUgKGxlbikge1xuK1x0XHRzc2l6ZV90IHJldCA9IHJlYWQoZmQsIHB0ciwgbGVuKTtcbitcbitcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1x0XHRpZiAocmV0ID09IDApXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1xuK1x0XHRwdHIgKz0gcmV0O1xuK1x0XHRsZW4gLT0gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtpbGxfYW5kX3JlYXAocGlkX3QgcGlkKVxuK3tcbitcdGludCBzdGF0dXM7XG4rXG4rXHRpZiAocGlkIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuK1x0d2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd2FpdF9yZXN1bHQoaW50IGZkLCBpbnQgdGltZW91dF9tcylcbit7XG4rXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcbitcdFx0LmZkID0gZmQsXG4rXHRcdC5ldmVudHMgPSBQT0xMSU4sXG4rXHR9O1xuK1x0aW50IHJldDtcbitcbitcdGRvIHtcbitcdFx0cmV0ID0gcG9sbChcdTAwMjZwZmQsIDEsIHRpbWVvdXRfbXMpO1xuK1x0fSB3aGlsZSAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGNoaWxkX2luX3NpZ25hbGZkX3JlYWQocGlkX3QgcGlkLCBpbnQgc2ZkKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRjaGFyIGJ1ZlsyNTZdO1xuK1x0bG9uZyBucjtcbitcdHVuc2lnbmVkIGxvbmcgYXJnMDtcbitcdEZJTEUgKmZwO1xuK1x0aW50IGluX3JlYWQgPSAwO1xuK1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkL3N5c2NhbGxcIiwgcGlkKTtcbitcdGZwID0gZm9wZW4ocGF0aCwgXCJyXCIpO1xuK1x0aWYgKCFmcCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKVxuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNzY2FuZihidWYsIFwiJWxkICVseFwiLCBcdTAwMjZuciwgXHUwMDI2YXJnMCkgPT0gMiBcdTAwMjZcdTAwMjZcbitcdCAgICBuciA9PSBfX05SX3JlYWQgXHUwMDI2XHUwMDI2IGFyZzAgPT0gKHVuc2lnbmVkIGxvbmcpc2ZkKVxuK1x0XHRpbl9yZWFkID0gMTtcbitcbitcdGZjbG9zZShmcCk7XG4rXHRyZXR1cm4gaW5fcmVhZDtcbit9XG4rXG4rc3RhdGljIGludCB3YWl0X2Zvcl9jaGlsZF9ibG9jayhwaWRfdCBwaWQsIGludCBzZmQsIGludCB0aW1lb3V0X21zKVxuK3tcbitcdGludCB3YWl0ZWRfbXMgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHdoaWxlICh3YWl0ZWRfbXMgXHUwMDNjIHRpbWVvdXRfbXMpIHtcbitcdFx0cmV0ID0gY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWQsIHNmZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuK1x0XHRcdHVzbGVlcCgxMDAwMCk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcbitcdFx0dXNsZWVwKDEwMDApO1xuK1x0XHR3YWl0ZWRfbXMrKztcbitcdH1cbitcbitcdHJldHVybiAtMTtcbit9XG4rXG4raW50IG1haW4odm9pZClcbit7XG4rXHRzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyBmZHNpO1xuK1x0c2lnc2V0X3QgYmxvY2tlZCwgaW5pdGlhbF9tYXNrLCB1cGRhdGVkX21hc2s7XG4rXHRpbnQgcmVhZHlfcGlwZVsyXSwgc3RhcnRfcGlwZVsyXSwgcmVzdWx0X3BpcGVbMl07XG4rXHRpbnQgc2ZkLCBzaWdubywgc3RhdHVzO1xuK1x0cGlkX3QgY2hpbGQ7XG4rXHRjaGFyIHJlYWR5LCBzdGFydDtcbitcbitcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRrc2Z0X3NldF9wbGFuKDEpO1xuK1xuK1x0c2lnZW1wdHlzZXQoXHUwMDI2YmxvY2tlZCk7XG4rXHRzaWdhZGRzZXQoXHUwMDI2YmxvY2tlZCwgU0lHVVNSMSk7XG4rXHRzaWdhZGRzZXQoXHUwMDI2YmxvY2tlZCwgU0lHVVNSMik7XG4rXHRpZiAoc2lncHJvY21hc2soU0lHX0JMT0NLLCBcdTAwMjZibG9ja2VkLCBOVUxMKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwic2lncHJvY21hc2tcIik7XG4rXG4rXHRzaWdlbXB0eXNldChcdTAwMjZpbml0aWFsX21hc2spO1xuK1x0c2lnYWRkc2V0KFx1MDAyNmluaXRpYWxfbWFzaywgU0lHVVNSMSk7XG4rXHRzZmQgPSBzaWduYWxmZCgtMSwgXHUwMDI2aW5pdGlhbF9tYXNrLCAwKTtcbitcdGlmIChzZmQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInNpZ25hbGZkXCIpO1xuK1xuK1x0aWYgKHBpcGUocmVhZHlfcGlwZSkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInBpcGUocmVhZHkpXCIpO1xuK1x0aWYgKHBpcGUoc3RhcnRfcGlwZSkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInBpcGUoc3RhcnQpXCIpO1xuK1x0aWYgKHBpcGUocmVzdWx0X3BpcGUpKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJwaXBlKHJlc3VsdClcIik7XG4rXG4rXHRjaGlsZCA9IGZvcmsoKTtcbitcdGlmIChjaGlsZCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwiZm9ya1wiKTtcbitcbitcdGlmIChjaGlsZCA9PSAwKSB7XG4rXHRcdGNsb3NlKHJlYWR5X3BpcGVbMF0pO1xuK1x0XHRjbG9zZShzdGFydF9waXBlWzFdKTtcbitcdFx0Y2xvc2UocmVzdWx0X3BpcGVbMF0pO1xuK1xuK1x0XHRyZWFkeSA9ICdSJztcbitcdFx0aWYgKHdyaXRlX2FsbChyZWFkeV9waXBlWzFdLCBcdTAwMjZyZWFkeSwgc2l6ZW9mKHJlYWR5KSkpXG4rXHRcdFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcbitcbitcdFx0aWYgKHJlYWRfYWxsKHN0YXJ0X3BpcGVbMF0sIFx1MDAyNnN0YXJ0LCBzaXplb2Yoc3RhcnQpKSlcbitcdFx0XHRfZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0XHRtZW1zZXQoXHUwMDI2ZmRzaSwgMCwgc2l6ZW9mKGZkc2kpKTtcbitcdFx0aWYgKHJlYWRfYWxsKHNmZCwgXHUwMDI2ZmRzaSwgc2l6ZW9mKGZkc2kpKSlcbitcdFx0XHRfZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0XHRzaWdubyA9IGZkc2kuc3NpX3NpZ25vO1xuK1x0XHRpZiAod3JpdGVfYWxsKHJlc3VsdF9waXBlWzFdLCBcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkpXG4rXHRcdFx0X2V4aXQoRVhJVF9GQUlMVVJFKTtcbitcbitcdFx0X2V4aXQoRVhJVF9TVUNDRVNTKTtcbitcdH1cbitcbitcdGNsb3NlKHJlYWR5X3BpcGVbMV0pO1xuK1x0Y2xvc2Uoc3RhcnRfcGlwZVswXSk7XG4rXHRjbG9zZShyZXN1bHRfcGlwZVsxXSk7XG4rXG4rXHRpZiAocmVhZF9hbGwocmVhZHlfcGlwZVswXSwgXHUwMDI2cmVhZHksIHNpemVvZihyZWFkeSkpKSB7XG4rXHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjaGlsZCBkaWQgbm90IHJlYWNoIGJsb2NraW5nIHJlYWRcXG5cIik7XG4rXHR9XG4rXG4rXHRpZiAoa2lsbChjaGlsZCwgU0lHVVNSMikpIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcImtpbGwoU0lHVVNSMilcIik7XG4rXHR9XG4rXG4rXHRzdGFydCA9ICdTJztcbitcdGlmICh3cml0ZV9hbGwoc3RhcnRfcGlwZVsxXSwgXHUwMDI2c3RhcnQsIHNpemVvZihzdGFydCkpKSB7XG4rXHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjb3VsZCBub3QgcmVsZWFzZSBjaGlsZCBpbnRvIHNpZ25hbGZkIHJlYWRcXG5cIik7XG4rXHR9XG4rXG4rXHRzdGF0dXMgPSB3YWl0X2Zvcl9jaGlsZF9ibG9jayhjaGlsZCwgc2ZkLCAxMDAwKTtcbitcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGlmIChzdGF0dXMgPT0gLTEpXG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCIvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc3lzY2FsbCBpcyB1bmF2YWlsYWJsZVxcblwiKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiY2hpbGQgZGlkIG5vdCBibG9jayBpbiBzaWduYWxmZCByZWFkXFxuXCIpO1xuK1x0fVxuK1xuK1x0c2lnZW1wdHlzZXQoXHUwMDI2dXBkYXRlZF9tYXNrKTtcbitcdHNpZ2FkZHNldChcdTAwMjZ1cGRhdGVkX21hc2ssIFNJR1VTUjIpO1xuK1x0aWYgKHNpZ25hbGZkKHNmZCwgXHUwMDI2dXBkYXRlZF9tYXNrLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwic2lnbmFsZmQocmVjb25maWd1cmUpXCIpO1xuK1x0fVxuK1xuK1x0aWYgKHdhaXRfcmVzdWx0KHJlc3VsdF9waXBlWzBdLCAxMDAwKSA9PSAxKSB7XG4rXHRcdGlmIChyZWFkX2FsbChyZXN1bHRfcGlwZVswXSwgXHUwMDI2c2lnbm8sIHNpemVvZihzaWdubykpKSB7XG4rXHRcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiY2hpbGQgd2FrZXVwIGRpZCBub3QgY2FycnkgYSBzaWduYWxcXG5cIik7XG4rXHRcdH1cbitcbitcdFx0aWYgKHdhaXRwaWQoY2hpbGQsIFx1MDAyNnN0YXR1cywgMCkgIT0gY2hpbGQpIHtcbitcdFx0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJ3YWl0cGlkXCIpO1xuK1x0XHR9XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQoc2lnbm8gPT0gU0lHVVNSMiBcdTAwMjZcdTAwMjYgV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLFxuK1x0XHRcdFx0IFwic2hhcmVkIHNpZ25hbGZkIHdha2V1cCBhZnRlciBtYXNrIHVwZGF0ZVxcblwiKTtcbitcdFx0a3NmdF9leGl0X3Bhc3MoKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBCdWdneSBrZXJuZWxzIGxlYXZlIHRoZSBjaGlsZCBhc2xlZXAgdW50aWwgYW4gdW5yZWxhdGVkIHNpZ25hbCBoaXRzXG4rXHQgKiB0aGUgY2hpbGQncyBzaWduYWxmZCB3YWl0cXVldWUuIFNJR1VTUjEgZG9lcyBub3QgbWF0Y2ggdGhlIHVwZGF0ZWRcbitcdCAqIHNpZ25hbGZkIG1hc2ssIHNvIGEgc3VjY2Vzc2Z1bCByZWFkIG9mIFNJR1VTUjIgYWZ0ZXIgdGhpcyBudWRnZVxuK1x0ICogZGVtb25zdHJhdGVzIHRoZSBtaXNzZWQgd2FrZXVwLlxuK1x0ICovXG4rXHRpZiAoa2lsbChjaGlsZCwgU0lHVVNSMSkpIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcImtpbGwoU0lHVVNSMSlcIik7XG4rXHR9XG4rXG4rXHRpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXJlYWRfYWxsKHJlc3VsdF9waXBlWzBdLCBcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgd2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSA9PSBjaGlsZCBcdTAwMjZcdTAwMjZcbitcdCAgICBzaWdubyA9PSBTSUdVU1IyIFx1MDAyNlx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwKSB7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcIm1hc2sgdXBkYXRlIG1pc3NlZCBhIHNoYXJlZCBzaWduYWxmZCB3YWl0ZXJcXG5cIik7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2hpbGQgd29rZSBvbmx5IGFmdGVyIGFuIHVucmVsYXRlZCBTSUdVU1IxXFxuXCIpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuK1x0fVxuK1xuK1x0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjaGlsZCByZW1haW5lZCBibG9ja2VkIGFmdGVyIHNpZ25hbGZkIHJlY29uZmlndXJhdGlvblxcblwiKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0Mzo0MS4wNzkwNjA3NDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDY0NzI2MTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBzaWduYWxmZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzaWduYWxmZGAgcGF0Y2guIFRoZSBwcmltYXJ5IGZvY3VzIHNlZW1zIHRvIGJlIGFyb3VuZCBpbXByb3ZpbmcgdGhlIHNpZ25hbGZkIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpdCBoYW5kbGVzIHdhaXRpbmcgYW5kIHJlbGVhc2luZyByZXNvdXJjZXMuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIHByZXR0eSBmb2N1c2VkIG9uIHN5bmNocm9uaXphdGlvbiBhbmQgd2FrZS11cCBtZWNoYW5pc21zLCB3aGljaCBhcmUgYWx3YXlzIGNydWNpYWwgaW4gc2lnbmFsIGhhbmRsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cbkZpcnN0LCBhZGRpbmcgdGhhdCBgc3BpbmxvY2tfdCBsb2NrYCwgYHdhaXRfcXVldWVfaGVhZF90IHdxaGAsIGFuZCBgc3RydWN0IHJjdV9oZWFkIHJjdWAgdG8gdGhlIGBzaWduYWxmZF9jdHhgIHN0cnVjdCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhlc2UgY2xlYXJseSBwb2ludCB0byBlbmhhbmNlZCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIG1hbmFnZW1lbnQuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG5ldyBtZW1iZXJzIGFyZSB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuXG5cblRoZSBgc2lnbmFsZmRfcmVsZWFzZWAgZnVuY3Rpb24gbm93IHVzZXMgYHdha2VfdXBfcG9sbGZyZWVgIG9uIHRoZSBgY3R4LVx1MDAzZXdxaGAgYW5kIGNhbGxzIGBrZnJlZV9yY3VgLiBUaGlzIHN1Z2dlc3RzIGEgY2FyZWZ1bCBhcHByb2FjaCB0byBmcmVlaW5nIHRoZSBjb250ZXh0LCBsaWtlbHkgcmVsYXRlZCB0byBzYWZlbHkgcmVtb3ZpbmcgdGhlIHNpZ25hbGZkIHN0cnVjdHVyZSB3aGlsZSBtYWtpbmcgc3VyZSBvdGhlciBwcm9jZXNzZXMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gd29yayBvbiBhbnkgcmVsZXZhbnQgZXZlbnRzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3YWtlX3VwX3BvbGxmcmVlYCBpcyB1c2VkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSdzIG5vIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuXG5cblRoZSBgc2lnbmFsZmRfcG9sbGAgbW9kaWZpY2F0aW9uIHdpdGggYHBvbGxfd2FpdGAgYW5kIHRoZSBsb2NraW5nIGNoYW5nZXMgYXJlIHRoZSBtb3N0IGltcG9ydGFudC4gVGhlIGBzaWduYWxmZF9kZXF1ZXVlYCBpcyBldmVuIG1vcmUgc28sIHVzaW5nIGJvdGggYGN0eC1cdTAwM2V3cWhgIGFuZCBgc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWhgIHNlZW1zIGxpa2UgaXQgbXVzdCBiZSBjYXJlZnVsbHkgY29uc2lkZXJlZC4gSXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgbW92aW5nIHRvIHVzZSBhIHBlci1gc2lnbmFsZmRfY3R4YCB3YWl0IHF1ZXVlLCB3aXRoIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgcHJvY2VzcydzIHNpZ25hbCBoYW5kbGVyIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBsb2NraW5nIHRvIHNlZSBob3cgdGhpcyB3b3Jrcy5cblxuVGhlIGBzaWduYWxmZF9zaG93X2ZkaW5mb2AgY2hhbmdlLCBwYXJ0aWN1bGFybHkgdGhlIGxvY2tpbmcgaW4gdGhpcyBmdW5jdGlvbiwgaXMgaW1wb3J0YW50IGZvciBlbnN1cmluZyB0aGUgZGF0YSBkaXNwbGF5ZWQgaXMgY29uc2lzdGVudC4gYGRvX3NpZ25hbGZkNGAgaXMgYSBrZXkgcG9pbnQsIHRoZSBjaGFuZ2VzIHRvIGhvdyB0aGUgbWFzayBpcyB1cGRhdGVkIGFuZCB0aGUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBtZW1iZXJzIGFyZSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIGNhcmVmdWxseSBjb21wYXJlIHRoZSBvcmlnaW5hbCBjb2RlIHdpdGggdGhpcyB2ZXJzaW9uLiBJdCdzIGxpa2VseSB0aGF0IHRoZSBwYXRjaCBpcyBhaW1lZCB0byByZXNvbHZlIGEga25vd24gcmFjZSBvciBzeW5jaHJvbml6YXRpb24gaXNzdWUuIFRoZSBjaGFuZ2VzIGZyb20gYGN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWhgIHRvIGBjdHgtXHUwMDNld3FoYCBpbiBgZG9fc2lnbmFsZmQ0YCBpcyB0aGUga2V5IGNoYW5nZS5cblxuRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiB0aGF0IHNlbGZ0ZXN0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvc2lnbmFsZmRfbWFza193YWtlLmNgIGlzIGV4Y2VsbGVudC4gVGhpcyBpcyB0aGUgcHJvb2YgaW4gdGhlIHB1ZGRpbmcsIGl0IHNob3VsZCB2YWxpZGF0ZSB0aGUgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBzZWxmdGVzdCBhY3R1YWxseSBjb3ZlcnMgdGhlIHNjZW5hcmlvcyB0aGUgcGF0Y2ggaXMgZGVzaWduZWQgZm9yLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGF0LCBhbmQgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBvcHRpb25zLCB0byBlbnN1cmUgbm8gaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjAxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MDUuNzI2MzI2Mjk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NDg3MTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0lHTkFMRkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MjY9b2JqLXlcXHRcXHRcXHRcXHQrPSBhbm9uX2lub2Rlcy5vXFxuZnMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX1NJR05BTEZEKVxcdFxcdCs9IHNpZ25hbGZkLm9cXG5mcy9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfVElNRVJGRClcXHRcXHQrPSB0aW1lcmZkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MDYuNjAxMjAyODMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NDYyMzcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIGFuZCBTSUdOQUxGRCAtIExldCdzIERpZyBJbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBTSUdOQUxGRGAgaXMgY29uZmlndXJlZC4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBidWlsZCBvcHRpb25zIGZvciB0aGUga2VybmVsIGFyZSBkZWZpbmVkLCBhbmQgYFNJR05BTEZEYCBpcyBkZWZpbml0ZWx5IHRoZSBraW5kIG9mIGZ1bmN0aW9uYWxpdHkgdGhhdCB3b3VsZCBiZSBjb250cm9sbGVkIGJ5IGEgS2NvbmZpZyBvcHRpb24uIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZShzKS4gSXQncyBwcm9iYWJseSBpbiBhIGxvY2F0aW9uIHJlbGF0ZWQgdG8gdGhlIHNpZ25hbCBoYW5kbGluZyBvciBzeXN0ZW0gY2FsbCBhcmVhcywgYnV0IEkgbWlnaHQgaGF2ZSB0byBkbyBzb21lIHNlYXJjaGluZyBpZiBpdCdzIG5lc3RlZCBkZWVwZXIuIE9uY2UgSSBmaW5kIGl0LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBvdGhlciBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYFNJR05BTEZEYCBiZWNvbWVzIGF2YWlsYWJsZT8gV2hhdCdzIHRoZSBkZWZhdWx0IHNldHRpbmcsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIGl0PyBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIFwiU0lHTkFMRkRcIiBhbmQgc2VlIHdoZXJlIHRoYXQgdGFrZXMgbWUuIEZyb20gdGhlcmUgSSdsbCBoYXZlIGEgZ29vZCBpZGVhIG9mIHdoaWNoIEtjb25maWcgZmlsZSBJIG5lZWQgdG8gbG9vayBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjA5LjQ2NTgyODkxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODc5MTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0lHTkFMRkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNz1jb25maWcgRVBPTExcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTEzLVxcbmluaXQvS2NvbmZpZzoxOTE0OmNvbmZpZyBTSUdOQUxGRFxcbmluaXQvS2NvbmZpZy0xOTE1LVxcdGJvb2wgXFxcIkVuYWJsZSBzaWduYWxmZCgpIHN5c3RlbSBjYWxsXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MDkuNTY0NjI5MTQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1NDUyNjg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIEkgdGhpbmsgdGhlIHJlbGV2YW50IHBhcnQgaXMgYXJvdW5kIGxpbmUgMTkxNCBpbiBgaW5pdC9LY29uZmlnYC4gTGV0J3MgcHVsbCB0aGF0IHVwIGFuZCBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIEl0J3MgbGlrZWx5IGEgY29tcGxleCBjb25kaXRpb25hbCwgbWF5YmUgd2l0aCBzb21lIGRlcGVuZGVuY2llcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBpdC4gR290dGEgcXVpY2tseSBnZXQgYSBncmlwIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhhdCBzZWN0aW9uLiBJJ20gaG9waW5nIEkgY2FuIGdldCB0aGlzIGZpZ3VyZWQgb3V0IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDoxMi40MTkxNjA1MDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MTA6XFx0XFx0aGVscFxcbjE5MTE6XFx0XFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJlIGJ1aWx0IHdpdGhvdXRcXG4xOTEyOlxcdFxcdCAgc3VwcG9ydCBmb3IgZXBvbGwgZmFtaWx5IG9mIHN5c3RlbSBjYWxscy5cXG4xOTEzOlxcdFxcbjE5MTQ6XFx0Y29uZmlnIFNJR05BTEZEXFxuMTkxNTpcXHRcXHRib29sIFxcXCJFbmFibGUgc2lnbmFsZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuMTkxNjpcXHRcXHRkZWZhdWx0IHlcXG4xOTE3OlxcdFxcdGhlbHBcXG4xOTE4OlxcdFxcdCAgRW5hYmxlIHRoZSBzaWduYWxmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIHJlY2VpdmUgc2lnbmFsc1xcbjE5MTk6XFx0XFx0ICBvbiBhIGZpbGUgZGVzY3JpcHRvci5cXG4xOTIwOlxcdFxcbjE5MjE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbjE5MjI6XFx0XFxuMTkyMzpcXHRjb25maWcgVElNRVJGRFxcbjE5MjQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRpbWVyZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuMTkyNTpcXHRcXHRkZWZhdWx0IHlcXG4xOTI2OlxcdFxcdGhlbHBcXG4xOTI3OlxcdFxcdCAgRW5hYmxlIHRoZSB0aW1lcmZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gcmVjZWl2ZSB0aW1lclxcbjE5Mjg6XFx0XFx0ICBldmVudHMgb24gYSBmaWxlIGRlc2NyaXB0b3IuXFxuMTkyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MTIuNDE5MzUxODQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMwNjQwNTQwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgZnMvc2lnbmFsZmQuY2AgdG8gVW5kZXJzdGFuZCBpdHMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCBhIHF1aWNrIHJlZnJlc2hlciBvbiB0aGUgYHNpZ25hbGZkYCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL3NpZ25hbGZkLmNgLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBmaWxlLiBLbm93aW5nIHRoZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIGBzaWduYWxmZGAgbWVjaGFuaXNtIGlzIHN0cnVjdHVyZWQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3Mgc2lnbmFsIGhhbmRsaW5nLCBhbmQgZ2VuZXJhbGx5IHdoYXQgdGhlIHJlbGV2YW50IGNvbnRyb2wgcG9pbnRzIGFyZS4gVGhpcyBxdWljayByZXZpZXcgaXMgaW1wb3J0YW50IGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpbXBsZW1lbnRhdGlvbiB3ZWxsIHRvIG1ha2UgcmVsZXZhbnQgY2hhbmdlcywgb3IgZGVidWcgYW4gaXNzdWUgcmVsYXRlZCB0byBgc2lnbmFsZmRgLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjI1LjQ4MzQwODQ1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc2lnbmFsZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqICBmcy9zaWduYWxmZC5jXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogIENvcHlyaWdodCAoQykgMjAwMyAgTGludXMgVG9ydmFsZHNcXG4gICA2OlxcdCAqXFxuICAgNzpcXHQgKiAgTW9uIE1hciA1LCAyMDA3OiBEYXZpZGUgTGliZW56aSBcXHUwMDNjZGF2aWRlbEB4bWFpbHNlcnZlci5vcmdcXHUwMDNlXFxuICAgODpcXHQgKiAgICAgIENoYW5nZWQgLVxcdTAwM2VyZWFkKCkgdG8gcmV0dXJuIGEgc2lnaW5mbyBzdHJjdHVyZSBpbnN0ZWFkIG9mIHNpZ25hbCBudW1iZXIuXFxuICAgOTpcXHQgKiAgICAgIEZpeGVkIGxvY2tpbmcgaW4gLVxcdTAwM2Vwb2xsKCkuXFxuICAxMDpcXHQgKiAgICAgIEFkZGVkIHNpZ2hhbmQtZGV0YWNoIG5vdGlmaWNhdGlvbi5cXG4gIDExOlxcdCAqICAgICAgQWRkZWQgZmQgcmUtdXNlIGluIHN5c19zaWduYWxmZCgpIHN5c2NhbGwuXFxuICAxMjpcXHQgKiAgICAgIE5vdyB1c2luZyBhbm9ueW1vdXMgaW5vZGUgc291cmNlLlxcbiAgMTM6XFx0ICogICAgICBUaGFua3MgdG8gT2xlZyBOZXN0ZXJvdiBmb3IgdXNlZnVsIGNvZGUgcmV2aWV3IGFuZCBzdWdnZXN0aW9ucy5cXG4gIDE0OlxcdCAqICAgICAgTW9yZSBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgZnJvbSBBcm5kIEJlcmdtYW5uLlxcbiAgMTU6XFx0ICogIFNhdCBNYXkgMTksIDIwMDc6IERhdmkgRS4gTS4gQXJuYXV0IFxcdTAwM2NkYXZpQGhheGVudC5jb20uYnJcXHUwMDNlXFxuICAxNjpcXHQgKiAgICAgIFJldHJpZXZlIG11bHRpcGxlIHNpZ25hbHMgd2l0aCBvbmUgcmVhZCgpIGNhbGxcXG4gIDE3OlxcdCAqICBTdW4gSnVsIDE1LCAyMDA3OiBEYXZpZGUgTGliZW56aSBcXHUwMDNjZGF2aWRlbEB4bWFpbHNlcnZlci5vcmdcXHUwMDNlXFxuICAxODpcXHQgKiAgICAgIEF0dGFjaCB0byB0aGUgc2lnaGFuZCBvbmx5IGR1cmluZyByZWFkKCkgYW5kIHBvbGwoKS5cXG4gIDE5OlxcdCAqL1xcbiAgMjA6XFx0XFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BvbGwuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAgMjY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDI4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaWduYWwuaFxcdTAwM2VcXG4gIDI5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAzMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGUuaFxcdTAwM2VcXG4gIDMxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbm9uX2lub2Rlcy5oXFx1MDAzZVxcbiAgMzI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbGZkLmhcXHUwMDNlXFxuICAzMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4gIDM0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX2ZzLmhcXHUwMDNlXFxuICAzNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGF0LmhcXHUwMDNlXFxuICAzNjpcXHRcXG4gIDM3OlxcdHZvaWQgc2lnbmFsZmRfY2xlYW51cChzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2hhbmQpXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHR3YWtlX3VwX3BvbGxmcmVlKFxcdTAwMjZzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgpO1xcbiAgNDA6XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHtcXG4gIDQzOlxcdFxcdC8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovXFxuICA0NDpcXHRcXHRzcGlubG9ja190IGxvY2s7XFxuICA0NTpcXHRcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xcbiAgNDc6XFx0XFx0c2lnc2V0X3Qgc2lnbWFzaztcXG4gIDQ4OlxcdH07XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gIDUxOlxcdHtcXG4gIDUyOlxcdFxcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0d2FrZV91cF9wb2xsZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2V3cWgpO1xcbiAgNTU6XFx0XFx0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcXG4gIDU2OlxcdFxcdHJldHVybiAwO1xcbiAgNTc6XFx0fVxcbiAgNTg6XFx0XFxuICA1OTpcXHRzdGF0aWMgX19wb2xsX3Qgc2lnbmFsZmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcXG4gIDYwOlxcdHtcXG4gIDYxOlxcdFxcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gIDYyOlxcdFxcdF9fcG9sbF90IGV2ZW50cyA9IDA7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdHBvbGxfd2FpdChmaWxlLCBcXHUwMDI2Y3R4LVxcdTAwM2V3cWgsIHdhaXQpO1xcbiAgNjU6XFx0XFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgsIHdhaXQpO1xcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAgNjg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4gIDY5OlxcdFxcdGlmIChuZXh0X3NpZ25hbChcXHUwMDI2Y3VycmVudC1cXHUwMDNlcGVuZGluZywgXFx1MDAyNmN0eC1cXHUwMDNlc2lnbWFzaykgfHxcXG4gIDcwOlxcdFxcdCAgICBuZXh0X3NpZ25hbChcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZyxcXG4gIDcxOlxcdFxcdFxcdFxcdFxcdTAwMjZjdHgtXFx1MDAzZXNpZ21hc2spKVxcbiAgNzI6XFx0XFx0XFx0ZXZlbnRzIHw9IEVQT0xMSU47XFxuICA3MzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuICA3NDpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdHJldHVybiBldmVudHM7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdC8qXFxuICA4MDpcXHQgKiBDb3BpZWQgZnJvbSBjb3B5X3NpZ2luZm9fdG9fdXNlcigpIGluIGtlcm5lbC9zaWduYWwuY1xcbiAgODE6XFx0ICovXFxuICA4MjpcXHRzdGF0aWMgaW50IHNpZ25hbGZkX2NvcHlpbmZvKHN0cnVjdCBpb3ZfaXRlciAqdG8sIGtlcm5lbF9zaWdpbmZvX3QgY29uc3QgKmtpbmZvKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0c3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gbmV3O1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKSAhPSAxMjgpO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHQvKlxcbiAgODk6XFx0XFx0ICogVW51c2VkIG1lbWJlcnMgc2hvdWxkIGJlIHplcm8gLi4uXFxuICA5MDpcXHRcXHQgKi9cXG4gIDkxOlxcdFxcdG1lbXNldChcXHUwMDI2bmV3LCAwLCBzaXplb2YobmV3KSk7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdC8qXFxuICA5NDpcXHRcXHQgKiBJZiB5b3UgY2hhbmdlIHNpZ2luZm9fdCBzdHJ1Y3R1cmUsIHBsZWFzZSBiZSBzdXJlXFxuICA5NTpcXHRcXHQgKiB0aGlzIGNvZGUgaXMgZml4ZWQgYWNjb3JkaW5nbHkuXFxuICA5NjpcXHRcXHQgKi9cXG4gIDk3OlxcdFxcdG5ldy5zc2lfc2lnbm8gPSBraW5mby1cXHUwMDNlc2lfc2lnbm87XFxuICA5ODpcXHRcXHRuZXcuc3NpX2Vycm5vID0ga2luZm8tXFx1MDAzZXNpX2Vycm5vO1xcbiAgOTk6XFx0XFx0bmV3LnNzaV9jb2RlICA9IGtpbmZvLVxcdTAwM2VzaV9jb2RlO1xcbiAxMDA6XFx0XFx0c3dpdGNoIChzaWdpbmZvX2xheW91dChraW5mby1cXHUwMDNlc2lfc2lnbm8sIGtpbmZvLVxcdTAwM2VzaV9jb2RlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDoyNS40ODM1MzEwMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MjE4NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgZnJvbSBgZnMvc2lnbmFsZmQuY2AsIHN1bW1hcml6ZWQgZnJvbSB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhcyBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gU2lnbmFsIEZpbGUgRGVzY3JpcHRvciBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gbGluZXMgMjAwIHRocm91Z2ggMzMwIG9mIGBmcy9zaWduYWxmZC5jYC4gVGhpcyBzZWN0aW9uIGxpa2VseSBob2xkcyB0aGUgY3J1eCBvZiBob3cgdGhlIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3IgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpbmNvbWluZyBzaWduYWxzIGFyZSBoYW5kbGVkIGFuZCBkZWxpdmVyZWQgd2hlbiByZWFkIGZyb20gdGhlIGZpbGUuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIGxvZ2ljIGZvciBzaWduYWwgcXVldWluZywgcGVyaGFwcyBzb21lIG1lY2hhbmlzbXMgZm9yIGZpbHRlcmluZyB3aGljaCBzaWduYWxzIGFyZSByZWxldmFudCwgYW5kIGRlZmluaXRlbHkgdGhlIHJlYWQoKSBpbXBsZW1lbnRhdGlvbi4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoZXkncmUgdXNpbmcgYSBzdGFuZGFyZCB3YWl0IHF1ZXVlIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGZvciBzaWduYWwgZGVsaXZlcnksIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJ20gYWxzbyBsb29raW5nIGZvciB0aGUgbG9ja2luZyBzdHJhdGVneSBlbXBsb3llZCBoZXJlOyBpdCdzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IGFuZCB0aGF0IHNpZ25hbHMgYXJlbid0IGxvc3Qgb3IgbWlzZGlyZWN0ZWQuIFRoaXMgcGFydCBpcyBnb2luZyB0byBnaXZlIG1lIHRoZSBmaW5lciBwb2ludHMsIGFuZCBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgZG9uZSBpdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDQ6MjcuOTc1NzIwMTUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zaWduYWxmZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAyMDE6XFx0XFx0XFx0c2NoZWR1bGUoKTtcXG4gMjAyOlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIDIwMzpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbiAyMDQ6XFx0XFx0fVxcbiAyMDU6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbiAyMDY6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbmFsZmRfd3FoLCBcXHUwMDI2d2FpdCk7XFxuIDIwOTpcXHRcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2Y3R4LVxcdTAwM2V3cWgsIFxcdTAwMjZjdHhfd2FpdCk7XFxuIDIxMDpcXHRcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHJldHVybiByZXQ7XFxuIDIxMzpcXHR9XFxuIDIxNDpcXHRcXG4gMjE1OlxcdC8qXFxuIDIxNjpcXHQgKiBSZXR1cm5zIGEgbXVsdGlwbGUgb2YgdGhlIHNpemUgb2YgYSBcXFwic3RydWN0IHNpZ25hbGZkX3NpZ2luZm9cXFwiLCBvciBhIG5lZ2F0aXZlXFxuIDIxNzpcXHQgKiBlcnJvciBjb2RlLiBUaGUgXFxcImNvdW50XFxcIiBwYXJhbWV0ZXIgbXVzdCBiZSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBhXFxuIDIxODpcXHQgKiBcXFwic3RydWN0IHNpZ25hbGZkX3NpZ2luZm9cXFwiLlxcbiAyMTk6XFx0ICovXFxuIDIyMDpcXHRzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbiAyMjE6XFx0e1xcbiAyMjI6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbiAyMjM6XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAyMjQ6XFx0XFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQodG8pO1xcbiAyMjU6XFx0XFx0c3NpemVfdCByZXQsIHRvdGFsID0gMDtcXG4gMjI2OlxcdFxcdGtlcm5lbF9zaWdpbmZvX3QgaW5mbztcXG4gMjI3OlxcdFxcdGJvb2wgbm9uYmxvY2s7XFxuIDIyODpcXHRcXG4gMjI5OlxcdFxcdGNvdW50IC89IHNpemVvZihzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyk7XFxuIDIzMDpcXHRcXHRpZiAoIWNvdW50KVxcbiAyMzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdG5vbmJsb2NrID0gZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0sgfHwgaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX05PV0FJVDtcXG4gMjM0OlxcdFxcdGRvIHtcXG4gMjM1OlxcdFxcdFxcdHJldCA9IHNpZ25hbGZkX2RlcXVldWUoY3R4LCBcXHUwMDI2aW5mbywgbm9uYmxvY2spO1xcbiAyMzY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjPSAwKSlcXG4gMjM3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMzg6XFx0XFx0XFx0cmV0ID0gc2lnbmFsZmRfY29weWluZm8odG8sIFxcdTAwMjZpbmZvKTtcXG4gMjM5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyNDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI0MTpcXHRcXHRcXHR0b3RhbCArPSByZXQ7XFxuIDI0MjpcXHRcXHRcXHRub25ibG9jayA9IDE7XFxuIDI0MzpcXHRcXHR9IHdoaWxlICgtLWNvdW50KTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cmV0dXJuIHRvdGFsID8gdG90YWw6IHJldDtcXG4gMjQ2OlxcdH1cXG4gMjQ3OlxcdFxcbiAyNDg6XFx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuIDI0OTpcXHRzdGF0aWMgdm9pZCBzaWduYWxmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxcbiAyNTA6XFx0e1xcbiAyNTE6XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZi1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAyNTI6XFx0XFx0c2lnc2V0X3Qgc2lnbWFzaztcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMjU1OlxcdFxcdHNpZ21hc2sgPSBjdHgtXFx1MDAzZXNpZ21hc2s7XFxuIDI1NjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIDI1NzpcXHRcXHRzaWdub3RzZXQoXFx1MDAyNnNpZ21hc2spO1xcbiAyNTg6XFx0XFx0cmVuZGVyX3NpZ3NldF90KG0sIFxcXCJzaWdtYXNrOlxcXFx0XFxcIiwgXFx1MDAyNnNpZ21hc2spO1xcbiAyNTk6XFx0fVxcbiAyNjA6XFx0I2VuZGlmXFxuIDI2MTpcXHRcXG4gMjYyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNpZ25hbGZkX2ZvcHMgPSB7XFxuIDI2MzpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG4gMjY0OlxcdFxcdC5zaG93X2ZkaW5mb1xcdD0gc2lnbmFsZmRfc2hvd19mZGluZm8sXFxuIDI2NTpcXHQjZW5kaWZcXG4gMjY2OlxcdFxcdC5yZWxlYXNlXFx0PSBzaWduYWxmZF9yZWxlYXNlLFxcbiAyNjc6XFx0XFx0LnBvbGxcXHRcXHQ9IHNpZ25hbGZkX3BvbGwsXFxuIDI2ODpcXHRcXHQucmVhZF9pdGVyXFx0PSBzaWduYWxmZF9yZWFkX2l0ZXIsXFxuIDI2OTpcXHRcXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG4gMjcwOlxcdH07XFxuIDI3MTpcXHRcXG4gMjcyOlxcdHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXFxuIDI3MzpcXHR7XFxuIDI3NDpcXHRcXHQvKiBDaGVjayB0aGUgU0ZEXyogY29uc3RhbnRzIGZvciBjb25zaXN0ZW5jeS4gICovXFxuIDI3NTpcXHRcXHRCVUlMRF9CVUdfT04oU0ZEX0NMT0VYRUMgIT0gT19DTE9FWEVDKTtcXG4gMjc2OlxcdFxcdEJVSUxEX0JVR19PTihTRkRfTk9OQkxPQ0sgIT0gT19OT05CTE9DSyk7XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IH4oU0ZEX0NMT0VYRUMgfCBTRkRfTk9OQkxPQ0spKVxcbiAyNzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdHNpZ2RlbHNldG1hc2sobWFzaywgc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpO1xcbiAyODI6XFx0XFx0c2lnbm90c2V0KG1hc2spO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRpZiAodWZkID09IC0xKSB7XFxuIDI4NTpcXHRcXHRcXHRpbnQgZmQ7XFxuIDI4NjpcXHRcXHRcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdFxcdGN0eCA9IGttYWxsb2Nfb2JqKCpjdHgpO1xcbiAyODk6XFx0XFx0XFx0aWYgKCFjdHgpXFxuIDI5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIDI5MzpcXHRcXHRcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCk7XFxuIDI5NDpcXHRcXHRcXHRjdHgtXFx1MDAzZXNpZ21hc2sgPSAqbWFzaztcXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0XFx0ZmQgPSBGRF9BREQoZmxhZ3MgXFx1MDAyNiBPX0NMT0VYRUMsXFxuIDI5NzpcXHRcXHRcXHRcXHQgICAgYW5vbl9pbm9kZV9nZXRmaWxlX2Ztb2RlKFxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJbc2lnbmFsZmRdXFxcIiwgXFx1MDAyNnNpZ25hbGZkX2ZvcHMsIGN0eCxcXG4gMjk5OlxcdFxcdFxcdFxcdFxcdCAgICBPX1JEV1IgfCAoZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKSwgRk1PREVfTk9XQUlUKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjI3Ljk3NTg0ODMxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzExNDg4NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHNpZ25hbGZkLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGNoZWNrIG91dCB0aG9zZSBzeXNjYWxsIGVudHJ5IHBvaW50cyB3aXRoaW4gYHNpZ25hbGZkLmNgLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIGhlcmUsIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHN5c3RlbSBjYWxsIGhhbmRsaW5nLiBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBrZXJuZWwgaXMgYWN0dWFsbHkgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIHRoZXNlIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3Igb3BlcmF0aW9ucy4gR290dGEgbWFwIHRoZSB1c2VyLXNwYWNlIGNhbGxzIHRvIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIEknbSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbnMsIHRoZSBhcmd1bWVudHMsIHRoZSBjaGVja3MsIGFsbCBvZiBpdC4gSSB3YW50IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgc2lnbmFsZmRgIGlzIHBsdW1iZWQgaW50byB0aGUgY29yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjMzLjI4NzMzOTYwNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc2lnbmFsZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0XFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuIDMwMTpcXHRcXHRcXHRcXHRyZXRhaW5fYW5kX251bGxfcHRyKGN0eCk7XFxuIDMwMjpcXHRcXHRcXHRyZXR1cm4gZmQ7XFxuIDMwMzpcXHRcXHR9IGVsc2Uge1xcbiAzMDQ6XFx0XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4O1xcbiAzMDU6XFx0XFxuIDMwNjpcXHRcXHRcXHRDTEFTUyhmZCwgZikodWZkKTtcXG4gMzA3OlxcdFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gMzA4OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBREY7XFxuIDMwOTpcXHRcXHRcXHRjdHggPSBmZF9maWxlKGYpLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDMxMDpcXHRcXHRcXHRpZiAoZmRfZmlsZShmKS1cXHUwMDNlZl9vcCAhPSBcXHUwMDI2c2lnbmFsZmRfZm9wcylcXG4gMzExOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTI6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMzEzOlxcdFxcdFxcdGN0eC1cXHUwMDNlc2lnbWFzayA9ICptYXNrO1xcbiAzMTQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRcXHR3YWtlX3VwKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCk7XFxuIDMxNzpcXHRcXHR9XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdHJldHVybiB1ZmQ7XFxuIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFNZU0NBTExfREVGSU5FNChzaWduYWxmZDQsIGludCwgdWZkLCBzaWdzZXRfdCBfX3VzZXIgKiwgdXNlcl9tYXNrLFxcbiAzMjM6XFx0XFx0XFx0c2l6ZV90LCBzaXplbWFzaywgaW50LCBmbGFncylcXG4gMzI0OlxcdHtcXG4gMzI1OlxcdFxcdHNpZ3NldF90IG1hc2s7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdGlmIChzaXplbWFzayAhPSBzaXplb2Yoc2lnc2V0X3QpKVxcbiAzMjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMyOTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNm1hc2ssIHVzZXJfbWFzaywgc2l6ZW9mKG1hc2spKSlcXG4gMzMwOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzMzE6XFx0XFx0cmV0dXJuIGRvX3NpZ25hbGZkNCh1ZmQsIFxcdTAwMjZtYXNrLCBmbGFncyk7XFxuIDMzMjpcXHR9XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFNZU0NBTExfREVGSU5FMyhzaWduYWxmZCwgaW50LCB1ZmQsIHNpZ3NldF90IF9fdXNlciAqLCB1c2VyX21hc2ssXFxuIDMzNTpcXHRcXHRcXHRzaXplX3QsIHNpemVtYXNrKVxcbiAzMzY6XFx0e1xcbiAzMzc6XFx0XFx0c2lnc2V0X3QgbWFzaztcXG4gMzM4OlxcdFxcbiAzMzk6XFx0XFx0aWYgKHNpemVtYXNrICE9IHNpemVvZihzaWdzZXRfdCkpXFxuIDM0MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQxOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2bWFzaywgdXNlcl9tYXNrLCBzaXplb2YobWFzaykpKVxcbiAzNDI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM0MzpcXHRcXHRyZXR1cm4gZG9fc2lnbmFsZmQ0KHVmZCwgXFx1MDAyNm1hc2ssIDApO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHQjaWZkZWYgQ09ORklHX0NPTVBBVFxcbiAzNDc6XFx0c3RhdGljIGxvbmcgZG9fY29tcGF0X3NpZ25hbGZkNChpbnQgdWZkLFxcbiAzNDg6XFx0XFx0XFx0XFx0Y29uc3QgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqdXNlcl9tYXNrLFxcbiAzNDk6XFx0XFx0XFx0XFx0Y29tcGF0X3NpemVfdCBzaWdzZXRzaXplLCBpbnQgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjMzLjI4NzQ2MTY3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTY1MTY5NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNpZ25hbGZkLmMgQ2hhbmdlcyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBmcy9zaWduYWxmZC5jYC4gVGhpcyBpcyBjcnVjaWFsIGtlcm5lbCBjb2RlLCBkZWFsaW5nIGRpcmVjdGx5IHdpdGggc2lnbmFsIGhhbmRsaW5nIGFuZCB0aGUgYHNpZ25hbGZkYCBtZWNoYW5pc20uIFRoZSBjaGFuZ2VzIGludm9sdmUgaG93IHRoZSB3YWl0IHF1ZXVlIGFuZCBsb2NraW5nIGFyZSBoYW5kbGVkIHdoZW4gYSBgc2lnbmFsZmRgIGlzIHJlY29uZmlndXJlZCAoc3BlY2lmaWNhbGx5LCB3aGVuIHRoZSBtYXNrIGlzIHVwZGF0ZWQpIGFjcm9zcyBwcm9jZXNzZXMgb3IgdGhyZWFkcy4gSXQgbG9va3MgbGlrZSB0aGUgdXBkYXRlIG5vdyB3YWtlcyB1cCB3YWl0ZXJzIHdhaXRpbmcgb24gYGN0eC1cdTAwM2V3cWhgLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUgaXMgYHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaClgIGluIGBzaWduYWxmZF9yZWxlYXNlYCBhbmQgYGtmcmVlX3JjdShjdHgsIHJjdSlgLlxuXG5UaGVzZSBjaGFuZ2VzIHNlZW0gdG8gYWZmZWN0IGxvY2tpbmcgd2l0aGluIGBzaWduYWxmZF9wb2xsYCwgYHNpZ25hbGZkX2RlcXVldWVgLCBgc2lnbmFsZmRfc2hvd19mZGluZm9gLCBhbmQgYGRvX3NpZ25hbGZkNGAuIFRoYXTigJlzIGEgc2lnbmlmaWNhbnQgc2hpZnQhIFRoaXMgaGFzIGNsZWFyIGZ1bmN0aW9uYWwgaW1wYWN0LCBkaXJlY3RseSByZWFjaGFibGUgdGhyb3VnaCB1c2Vyc3BhY2Ugc3lzY2FsbHMgbGlrZSBgc2lnbmFsZmQ0YCwgYHJlYWRgLCBgcG9sbGAvYGVwb2xsYCwgd2hpY2ggYXJlIHVzZWQgaW4gUUVNVSBhbmQgc3RhbmRhcmQgTGludXggc3lzdGVtcywgc28gZGVmaW5pdGVseSBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uXG5cblNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBjb3JlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIGBzaWduYWxmZGAgc3Vic3lzdGVtIGFyZSBiZWluZyBtb2RpZmllZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEFjY29yZGluZyB0byB0aGUgZ3VpZGFuY2UsIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBTdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBhcmUgZ2VuZXJhbGx5IGxlc3MgdXNlZnVsIGhlcmUuXG5cbkkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLiBJJ3ZlIGdvdCB0byBjaGVjayBgZnMvc2lnbmFsZmQuY2AgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgaXQgbG9va3MgbGlrZTpcbiogICBgc2lnbmFsZmRfY2xlYW51cGBcbiogICBga3N5c19zaWduYWxmZDRgIHdoaWNoIGlzIHByb2JhYmx5IGFsc28gYF9fZG9fc3lzX3NpZ25hbGZkNGAgLyBgX19kb19zeXNfc2lnbmFsZmRgIC8gYF9fZG9fY29tcGF0X3N5c19zaWduYWxmZDRgIC8gYF9fZG9fY29tcGF0X3N5c19zaWduYWxmZGAgKHZpYSBTWVNDQUxMX0RFRklORSlcbiogICBBbmQgYWxzbyBgZG9fc2lnbmFsZmQ0YCwgYHNpZ25hbGZkX3BvbGxgLCBgc2lnbmFsZmRfZGVxdWV1ZWAsIGBzaWduYWxmZF9yZWFkX2l0ZXJgLCBhbmQgYHNpZ25hbGZkX3JlbGVhc2VgXG5cbkhhbmcgb24sIGRpZCBJIG1pc3MgYW55dGhpbmcgaW4gdGhlIHByb21wdCBhYm91dCBmb2N1c2luZz8gUmlnaHQsIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXCIuIEhtbSwgbG9va2luZyBhdCB0aG9zZSBmdW5jdGlvbnMgYWdhaW4sIGl0IHNlZW1zIHRoZSBsYXN0IGdyb3VwLCB3aGlsZSB0aGV5IGFyZSB0aGVyZSwgaXMgc3RhdGljLCBhbmQgdGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLlxuXG5Ob3csIGxldCBtZSBjaGVjayBob3cgYFNZU0NBTExfREVGSU5FYCBpcyB1c2VkLiBJJ2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2ggdG8gc2VlIHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZXhpc3QgcmVsYXRlZCB0byBgc2lnbmFsZmRgIGFjcm9zcyBrZXJuZWwgaGVhZGVycyBhbmQgc291cmNlLiBUaGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDozOC40NTI2MzQyMDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjE4NzU4MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2lnbmFsZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zaWduYWxmZC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yLS8qXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjM6ICogIGluY2x1ZGUvbGludXgvc2lnbmFsZmQuaFxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC00LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMTAtXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjExOiNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L3NpZ25hbGZkLmhcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xNi0vKlxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoxNzogKiBEZWxpdmVyIHRoZSBzaWduYWwgdG8gbGlzdGVuaW5nIHNpZ25hbGZkLlxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0xOC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MTk6c3RhdGljIGlubGluZSB2b2lkIHNpZ25hbGZkX25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZylcXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMjAte1xcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyMTpcXHRpZiAodW5saWtlbHkod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2dHNrLVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgpKSlcXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmg6MjI6XFx0XFx0d2FrZV91cChcXHUwMDI2dHNrLVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgpO1xcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaC0yMy19XFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTI0LVxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyNTpleHRlcm4gdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCk7XFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTI2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTI4LVxcbmluY2x1ZGUvbGludXgvc2lnbmFsZmQuaDoyOTpzdGF0aWMgaW5saW5lIHZvaWQgc2lnbmFsZmRfbm90aWZ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc2lnKSB7IH1cXG5pbmNsdWRlL2xpbnV4L3NpZ25hbGZkLmgtMzAtXFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZCkgeyB9XFxuaW5jbHVkZS9saW51eC9zaWduYWxmZC5oLTMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDozOS40NzQ1MTQ2NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg5NDU1Mzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgYGZzL3NpZ25hbGZkLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTaWduYWxmZCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGZzL3NpZ25hbGZkLmNgIG5vdy4gSSd2ZSBnb3QgYSBnb29kIGdyYXNwIG9mIHRoZSBiYXNpYyBjb25jZXB0IG9mIHNpZ25hbCBmaWxlIGRlc2NyaXB0b3JzLCBidXQgSSBuZWVkIHRvIGVuc3VyZSBJJ20gZ2V0dGluZyB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGFyY2hpdGVjdHVyZSBnYXZlIG1lIHNvbWUgaGlnaC1sZXZlbCBpZGVhcywgYnV0IG5vdyBJIHdhbnQgdG8gZ2V0IGdyYW51bGFyLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdGhlIGNvcmUgZGV0YWlscywgc28gSeKAmW0gZ29pbmcgdG8gZm9jdXMgb246IHRoZSBhY3R1YWwgbWVjaGFuaWNzIG9mIHRoZSBgc2lnbmFsZmRgIHN5c3RlbSBjYWxsOyBob3cgc2lnbmFscyBhcmUgbWFza2VkLCBkZWxpdmVyZWQsIGFuZCBoYW5kbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIGZpbGUgZGVzY3JpcHRvcjsgd2hhdCB0aGUgbG9ja2luZyBzdHJhdGVnaWVzIGFyZSAoY3J1Y2lhbCBmb3IgY29uY3VycmVuY3ksIG9idmlvdXNseSk7IGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGV4aXN0LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBzaWduYWwgcXVldWUgYW5kIHRoZSBwcm9jZXNzJ3Mgc2lnbmFsIG1hc2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW1wbGVtZW50YXRpb24gd2VsbCBzbyBJIGNhbiBhc3Nlc3MgaXRzIGVmZmljaWVuY3kgYW5kIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIGV4cGVjdGVkIGxldmVsIG9mIHNlY3VyaXR5IGFuZCByZWxpYWJpbGl0eS4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGFyZWFzIG9mIGNvbmNlcm4uIFNvLCBsZXTigJlzIGp1bXAgcmlnaHQgaW4gYW5kIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ0OjQ2LjM2OTA3MTM3NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc2lnbmFsZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDU6XFx0XFxuIDM0NjpcXHQjaWZkZWYgQ09ORklHX0NPTVBBVFxcbiAzNDc6XFx0c3RhdGljIGxvbmcgZG9fY29tcGF0X3NpZ25hbGZkNChpbnQgdWZkLFxcbiAzNDg6XFx0XFx0XFx0XFx0Y29uc3QgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqdXNlcl9tYXNrLFxcbiAzNDk6XFx0XFx0XFx0XFx0Y29tcGF0X3NpemVfdCBzaWdzZXRzaXplLCBpbnQgZmxhZ3MpXFxuIDM1MDpcXHR7XFxuIDM1MTpcXHRcXHRzaWdzZXRfdCBtYXNrO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2YoY29tcGF0X3NpZ3NldF90KSlcXG4gMzU0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNTU6XFx0XFx0aWYgKGdldF9jb21wYXRfc2lnc2V0KFxcdTAwMjZtYXNrLCB1c2VyX21hc2spKVxcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM1NzpcXHRcXHRyZXR1cm4gZG9fc2lnbmFsZmQ0KHVmZCwgXFx1MDAyNm1hc2ssIGZsYWdzKTtcXG4gMzU4OlxcdH1cXG4gMzU5OlxcdFxcbiAzNjA6XFx0Q09NUEFUX1NZU0NBTExfREVGSU5FNChzaWduYWxmZDQsIGludCwgdWZkLFxcbiAzNjE6XFx0XFx0XFx0ICAgICBjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICosIHVzZXJfbWFzayxcXG4gMzYyOlxcdFxcdFxcdCAgICAgY29tcGF0X3NpemVfdCwgc2lnc2V0c2l6ZSxcXG4gMzYzOlxcdFxcdFxcdCAgICAgaW50LCBmbGFncylcXG4gMzY0OlxcdHtcXG4gMzY1OlxcdFxcdHJldHVybiBkb19jb21wYXRfc2lnbmFsZmQ0KHVmZCwgdXNlcl9tYXNrLCBzaWdzZXRzaXplLCBmbGFncyk7XFxuIDM2NjpcXHR9XFxuIDM2NzpcXHRcXG4gMzY4OlxcdENPTVBBVF9TWVNDQUxMX0RFRklORTMoc2lnbmFsZmQsIGludCwgdWZkLFxcbiAzNjk6XFx0XFx0XFx0ICAgICBjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICosIHVzZXJfbWFzayxcXG4gMzcwOlxcdFxcdFxcdCAgICAgY29tcGF0X3NpemVfdCwgc2lnc2V0c2l6ZSlcXG4gMzcxOlxcdHtcXG4gMzcyOlxcdFxcdHJldHVybiBkb19jb21wYXRfc2lnbmFsZmQ0KHVmZCwgdXNlcl9tYXNrLCBzaWdzZXRzaXplLCAwKTtcXG4gMzczOlxcdH1cXG4gMzc0OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NDo0Ni4zNjkyNDU4NzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwODc3MDIwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU2lnbmFsZmQgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZSBgc2lnbmFsZmRgIHN5c3RlbSBjYWxsLiBGaXJzdCwgSSdtIG5vdGluZyB0aGUgY29yZSBmdW5jdGlvbnMgYW5kIHN5bWJvbHMgaW52b2x2ZWQuIEknbSBzZWVpbmcgdGhhdCBgU1lTQ0FMTF9ERUZJTkU0KHNpZ25hbGZkNCwgLi4uKWAgZ2VuZXJhdGVzIHNldmVyYWwgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgX19kb19zeXNfc2lnbmFsZmQ0YCBhbmQgYGtzeXNfc2lnbmFsZmQ0YC4gSSdtIGFsc28gb2JzZXJ2aW5nIGtleSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBzaWduYWxmZF9jbGVhbnVwYCwgYHNpZ25hbGZkX3BvbGxgLCBgc2lnbmFsZmRfZGVxdWV1ZWAsIGBzaWduYWxmZF9yZWFkX2l0ZXJgLCBgc2lnbmFsZmRfcmVsZWFzZWAsIGFuZCBgZG9fc2lnbmFsZmQ0YC4gVGhlc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdC4gTG9va2luZyBhdCBgZnMvTWFrZWZpbGVgLCBJIHNlZSBgb2JqLSQoQ09ORklHX1NJR05BTEZEKSArPSBzaWduYWxmZC5vYCwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gVGhlbiBpbiBgaW5pdC9LY29uZmlnYCwgSSBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBgY29uZmlnIFNJR05BTEZEYCwgYSBib29sZWFuIG9wdGlvbiwgYW5kIGltcG9ydGFudGx5LCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCAoYGRlZmF1bHQgeWApLCB3aGljaCBpcyBoZWxwZnVsLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkZXBlbmRlbmN5IGlzc3VlcyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzLiBJJ3ZlIGNoZWNrZWQgYGluaXQvS2NvbmZpZ2AgYW5kIGZvdW5kIG5vIGRlcGVuZGVuY2llcyBmb3IgYFNJR05BTEZEYC4gVG8gYmUgdGhvcm91Z2gsIEkgcXVpY2tseSBjaGVja2VkIGBmcy9zaWduYWxmZC5jYCBhbmQgZm91bmQgYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AgYW5kIGAjaWZkZWYgQ09ORklHX0NPTVBBVGAsIHdoaWNoIGFyZSByZWxhdGVkIHRvIHByb2NmcyBhbmQgY29tcGF0aWJpbGl0eSBzdXBwb3J0LCBidXQgdGhlc2UgZG9uJ3Qgc2VlbSBsaWtlIHByaW1hcnkgYmxvY2tpbmcgY29uZmlndXJhdGlvbnMuIFRoZXkgbWlnaHQgY29tZSB1cCBpbiBhIGxhdGVyIGZ1enppbmcgcGhhc2UsIGJ1dCB0aGV5IHNob3VsZG4ndCBpbW1lZGlhdGVseSBwcmV2ZW50IHRoZSB1c2Ugb2YgYHNpZ25hbGZkYC5cblxuU28sIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaXRlbSBpcyBgU0lHTkFMRkRgLCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gR2l2ZW4gdGhlIHByb3ZpZGVkIFwiaW5zdHJ1Y3Rpb25zXCIsIEkgY2FuIHZlcmlmeSB0aGF0OiB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCBgRW5hYmxlQ29uZmlnc2AgaXMgc2V0IHRvIGBbXCJTSUdOQUxGRFwiXWAsIGBGb2N1c1N5bWJvbHNgIGluY2x1ZGVzIHRoZSBleHBlY3RlZCBzeW1ib2xzLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSByZWFkeSB0byBwcm9jZWVkLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxNSwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NTowMy40NTY5NTE0NTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc2OTUyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNJR05BTEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2lnbmFsZmRfcG9sbFwiLFxuICAgIFwic2lnbmFsZmRfZGVxdWV1ZVwiLFxuICAgIFwic2lnbmFsZmRfcmVsZWFzZVwiLFxuICAgIFwiZG9fc2lnbmFsZmQ0XCIsXG4gICAgXCJzaWduYWxmZF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIHdhaXQgcXVldWUgaGFuZGxpbmcgaW4gc2lnbmFsZmQgKGZzL3NpZ25hbGZkLmMpLiBJbiBwYXJ0aWN1bGFyLCBpdCBpbnRyb2R1Y2VzIGN0eC1sZXZlbCBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhlYWQsIHVwZGF0aW5nIHNpZ25hbGZkX3BvbGwsIHNpZ25hbGZkX2RlcXVldWUsIHNpZ25hbGZkX3JlbGVhc2UsIGFuZCBkb19zaWduYWxmZDQgdG8gc3VwcG9ydCB3YWtpbmcgd2FpdGVycyB1cG9uIHNpZ25hbGZkIG1hc2sgdXBkYXRlcyBhY3Jvc3MgdGhyZWFkcy9wcm9jZXNzZXMuIFRoaXMgaXMgY29yZSwgcmVhY2hhYmxlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTSUdOQUxGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNpZ25hbGZkX3BvbGxcIixcbiAgICBcInNpZ25hbGZkX2RlcXVldWVcIixcbiAgICBcInNpZ25hbGZkX3JlbGVhc2VcIixcbiAgICBcImRvX3NpZ25hbGZkNFwiLFxuICAgIFwic2lnbmFsZmRfY2xlYW51cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCB3YWl0IHF1ZXVlIGhhbmRsaW5nIGluIHNpZ25hbGZkIChmcy9zaWduYWxmZC5jKS4gSW4gcGFydGljdWxhciwgaXQgaW50cm9kdWNlcyBjdHgtbGV2ZWwgbG9ja2luZyBhbmQgd2FpdCBxdWV1ZSBoZWFkLCB1cGRhdGluZyBzaWduYWxmZF9wb2xsLCBzaWduYWxmZF9kZXF1ZXVlLCBzaWduYWxmZF9yZWxlYXNlLCBhbmQgZG9fc2lnbmFsZmQ0IHRvIHN1cHBvcnQgd2FraW5nIHdhaXRlcnMgdXBvbiBzaWduYWxmZCBtYXNrIHVwZGF0ZXMgYWNyb3NzIHRocmVhZHMvcHJvY2Vzc2VzLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjAzLjY2NDY1NjMxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNTgwMzI3ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NTowMy42NjY0ODk3NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODE1NjE5MzU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlZGljYXRlZCB3YWl0cXVldWUgKGB3cWhgKSwgc3BpbmxvY2sgKGBsb2NrYCksIGFuZCBSQ1UtYmFzZWQgZnJlZWluZyAoYHJjdV9oZWFkYCkgdG8gYHN0cnVjdCBzaWduYWxmZF9jdHhgIGluIGBmcy9zaWduYWxmZC5jYCBzbyB0aGF0IG1hc2sgdXBkYXRlcyB2aWEgYHNpZ25hbGZkNGAgcHJvcGVybHkgd2FrZSB1cCB3YWl0ZXJzIGFjcm9zcyBwcm9jZXNzZXMuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxcbjEuIEFsbCBmaWVsZHMgb2YgYHN0cnVjdCBzaWduYWxmZF9jdHhgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYHNwaW5fbG9ja19pbml0KFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spYCwgYGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmN0eC1cXHUwMDNld3FoKWAsIGBjdHgtXFx1MDAzZXNpZ21hc2sgPSAqbWFza2ApLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZSBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IHNpZ25hbGZkX3NpZ2luZm9gKSByZW1haW5zIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXRgIGluIGBzaWduYWxmZF9jb3B5aW5mbygpYC5cXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cXHUwMDNlbG9ja2AgYW5kIGBzaWdoYW5kLVxcdTAwM2VzaWdsb2NrYCksIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTiwgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNhOTA2ZTE2NWEwYTczN2RmZmVmYzQ5MDI5MDYwNWY0NzAzMDNlMjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjo0MzozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3NpZ25hbGZkLmMgYi9mcy9zaWduYWxmZC5jXG5pbmRleCBkZmY1Mzc0NWUzNTI0Li41MjNjM2E2ZGM1NjU5IDEwMDY0NFxuLS0tIGEvZnMvc2lnbmFsZmQuY1xuKysrIGIvZnMvc2lnbmFsZmQuY1xuQEAgLTI3LDYgKzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWxmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxuQEAgLTM5LDEyICs0MCwxOSBAQCB2b2lkIHNpZ25hbGZkX2NsZWFudXAoc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kKVxuIH1cbiBcbiBzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHtcbitcdC8qIFNlcmlhbGl6ZXMgc2hhcmVkIG1hc2sgdXBkYXRlcyB3aXRoIGZpbGUtbG9jYWwgd2FpdGVyIHdha2V1cHMuICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4rXHR3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7XG4rXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIFx0c2lnc2V0X3Qgc2lnbWFzaztcbiB9O1xuIFxuIHN0YXRpYyBpbnQgc2lnbmFsZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4rXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4rXHRrZnJlZV9yY3UoY3R4LCByY3UpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTUzLDE0ICs2MSwxNyBAQCBzdGF0aWMgX19wb2xsX3Qgc2lnbmFsZmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbiBcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0X19wb2xsX3QgZXZlbnRzID0gMDtcbiBcbitcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdHgtXHUwMDNld3FoLCB3YWl0KTtcbiBcdHBvbGxfd2FpdChmaWxlLCBcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCB3YWl0KTtcbiBcbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuIFx0aWYgKG5leHRfc2lnbmFsKFx1MDAyNmN1cnJlbnQtXHUwMDNlcGVuZGluZywgXHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2spIHx8XG4gXHQgICAgbmV4dF9zaWduYWwoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlc2hhcmVkX3BlbmRpbmcsXG4gXHRcdFx0XHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2spKVxuIFx0XHRldmVudHMgfD0gRVBPTExJTjtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFxuIFx0cmV0dXJuIGV2ZW50cztcbiB9XG5AQCAtMTU3LDggKzE2OCwxMCBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0ZW51bSBwaWRfdHlwZSB0eXBlO1xuIFx0c3NpemVfdCByZXQ7XG4gXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcbitcdERFQ0xBUkVfV0FJVFFVRVVFKGN0eF93YWl0LCBjdXJyZW50KTtcbiBcbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuIFx0cmV0ID0gZGVxdWV1ZV9zaWduYWwoXHUwMDI2Y3R4LVx1MDAzZXNpZ21hc2ssIGluZm8sIFx1MDAyNnR5cGUpO1xuIFx0c3dpdGNoIChyZXQpIHtcbiBcdGNhc2UgMDpcbkBAIC0xNjcsMTAgKzE4MCwxMiBAQCBzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9kZXF1ZXVlKHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwga2VybmVsX3NpZ2luZm9fdCAqaW5mb1xuIFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGRlZmF1bHQ6XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbitcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiBcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgsIFx1MDAyNndhaXQpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuQEAgLTE4MSwxMyArMTk2LDE3IEBAIHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvXG4gXHRcdFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdFx0c2NoZWR1bGUoKTtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuK1x0XHRzcGluX2xvY2soXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuIFx0fVxuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXG4gXHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbmFsZmRfd3FoLCBcdTAwMjZ3YWl0KTtcbitcdHJlbW92ZV93YWl0X3F1ZXVlKFx1MDAyNmN0eC1cdTAwM2V3cWgsIFx1MDAyNmN0eF93YWl0KTtcbiBcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjMyLDcgKzI1MSw5IEBAIHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXG4gXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHNpZ3NldF90IHNpZ21hc2s7XG4gXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcdHNpZ21hc2sgPSBjdHgtXHUwMDNlc2lnbWFzaztcbitcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHRzaWdub3RzZXQoXHUwMDI2c2lnbWFzayk7XG4gXHRyZW5kZXJfc2lnc2V0X3QobSwgXCJzaWdtYXNrOlxcdFwiLCBcdTAwMjZzaWdtYXNrKTtcbiB9XG5AQCAtMjY4LDYgKzI4OSw4IEBAIHN0YXRpYyBpbnQgZG9fc2lnbmFsZmQ0KGludCB1ZmQsIHNpZ3NldF90ICptYXNrLCBpbnQgZmxhZ3MpXG4gXHRcdGlmICghY3R4KVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuK1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2Y3R4LVx1MDAzZXdxaCk7XG4gXHRcdGN0eC1cdTAwM2VzaWdtYXNrID0gKm1hc2s7XG4gXG4gXHRcdGZkID0gRkRfQUREKGZsYWdzIFx1MDAyNiBPX0NMT0VYRUMsXG5AQCAtMjg2LDExICszMDksMTEgQEAgc3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncylcbiBcdFx0Y3R4ID0gZmRfZmlsZShmKS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRcdGlmIChmZF9maWxlKGYpLVx1MDAzZWZfb3AgIT0gXHUwMDI2c2lnbmFsZmRfZm9wcylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4rXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0XHRjdHgtXHUwMDNlc2lnbWFzayA9ICptYXNrO1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ2xvY2spO1xuK1x0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFxuLVx0XHR3YWtlX3VwKFx1MDAyNmN1cnJlbnQtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWduYWxmZF93cWgpO1xuK1x0XHR3YWtlX3VwKFx1MDAyNmN0eC1cdTAwM2V3cWgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHVmZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zaWduYWwvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlXG5pbmRleCAzZjMzOTg2NWEzYjZlLi41Y2FjNTMyZDQ5YWU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC8uZ2l0aWdub3JlXG5AQCAtMSwzICsxLDQgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiBtYW5nbGVfdWNfc2lnbWFza1xuIHNhc1xuK3NpZ25hbGZkX21hc2tfd2FrZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZVxuaW5kZXggZTBiZjcwNThkMTljOS4uMDBmMWU5NmM5MmM0ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2lnbmFsL01ha2VmaWxlXG5AQCAtMiw2ICsyLDYgQEBcbiBDRkxBR1MgPSAtV2FsbFxuIFRFU1RfR0VOX1BST0dTID0gbWFuZ2xlX3VjX3NpZ21hc2tcbiBURVNUX0dFTl9QUk9HUyArPSBzYXNcbitURVNUX0dFTl9QUk9HUyArPSBzaWduYWxmZF9tYXNrX3dha2VcbiBcbiBpbmNsdWRlIC4uL2xpYi5ta1xuLVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNlNjA0MjRiOWVjOWVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NpZ25hbC9zaWduYWxmZF9tYXNrX3dha2UuY1xuQEAgLTAsMCArMSwyNjYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI2RlZmluZSBfR05VX1NPVVJDRVxuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc2lnbmFsZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfYWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNvbnN0IGNoYXIgKnB0ciA9IGJ1ZjtcbitcbitcdHdoaWxlIChsZW4pIHtcbitcdFx0c3NpemVfdCByZXQgPSB3cml0ZShmZCwgcHRyLCBsZW4pO1xuK1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXG4rXHRcdHB0ciArPSByZXQ7XG4rXHRcdGxlbiAtPSByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByZWFkX2FsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjaGFyICpwdHIgPSBidWY7XG4rXG4rXHR3aGlsZSAobGVuKSB7XG4rXHRcdHNzaXplX3QgcmV0ID0gcmVhZChmZCwgcHRyLCBsZW4pO1xuK1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRyZXR1cm4gLTE7XG4rXG4rXHRcdHB0ciArPSByZXQ7XG4rXHRcdGxlbiAtPSByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQga2lsbF9hbmRfcmVhcChwaWRfdCBwaWQpXG4re1xuK1x0aW50IHN0YXR1cztcbitcbitcdGlmIChwaWQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHR3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCB3YWl0X3Jlc3VsdChpbnQgZmQsIGludCB0aW1lb3V0X21zKVxuK3tcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0ge1xuK1x0XHQuZmQgPSBmZCxcbitcdFx0LmV2ZW50cyA9IFBPTExJTixcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSBwb2xsKFx1MDAyNnBmZCwgMSwgdGltZW91dF9tcyk7XG4rXHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY2hpbGRfaW5fc2lnbmFsZmRfcmVhZChwaWRfdCBwaWQsIGludCBzZmQpXG4re1xuK1x0Y2hhciBwYXRoWzY0XTtcbitcdGNoYXIgYnVmWzI1Nl07XG4rXHRsb25nIG5yO1xuK1x0dW5zaWduZWQgbG9uZyBhcmcwO1xuK1x0RklMRSAqZnA7XG4rXHRpbnQgaW5fcmVhZCA9IDA7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvJWQvc3lzY2FsbFwiLCBwaWQpO1xuK1x0ZnAgPSBmb3BlbihwYXRoLCBcInJcIik7XG4rXHRpZiAoIWZwKSB7XG4rXHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgc3NjYW5mKGJ1ZiwgXCIlbGQgJWx4XCIsIFx1MDAyNm5yLCBcdTAwMjZhcmcwKSA9PSAyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5yID09IF9fTlJfcmVhZCBcdTAwMjZcdTAwMjYgYXJnMCA9PSAodW5zaWduZWQgbG9uZylzZmQpXG4rXHRcdGluX3JlYWQgPSAxO1xuK1xuK1x0ZmNsb3NlKGZwKTtcbitcdHJldHVybiBpbl9yZWFkO1xuK31cbitcbitzdGF0aWMgaW50IHdhaXRfZm9yX2NoaWxkX2Jsb2NrKHBpZF90IHBpZCwgaW50IHNmZCwgaW50IHRpbWVvdXRfbXMpXG4re1xuK1x0aW50IHdhaXRlZF9tcyA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKHdhaXRlZF9tcyBcdTAwM2MgdGltZW91dF9tcykge1xuK1x0XHRyZXQgPSBjaGlsZF9pbl9zaWduYWxmZF9yZWFkKHBpZCwgc2ZkKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdFx0dXNsZWVwKDEwMDAwKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXHRcdHdhaXRlZF9tcysrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC0xO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvIGZkc2k7XG4rXHRzaWdzZXRfdCBibG9ja2VkLCBpbml0aWFsX21hc2ssIHVwZGF0ZWRfbWFzaztcbitcdGludCByZWFkeV9waXBlWzJdLCBzdGFydF9waXBlWzJdLCByZXN1bHRfcGlwZVsyXTtcbitcdGludCBzZmQsIHNpZ25vLCBzdGF0dXM7XG4rXHRwaWRfdCBjaGlsZDtcbitcdGNoYXIgcmVhZHksIHN0YXJ0O1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGtzZnRfc2V0X3BsYW4oMSk7XG4rXG4rXHRzaWdlbXB0eXNldChcdTAwMjZibG9ja2VkKTtcbitcdHNpZ2FkZHNldChcdTAwMjZibG9ja2VkLCBTSUdVU1IxKTtcbitcdHNpZ2FkZHNldChcdTAwMjZibG9ja2VkLCBTSUdVU1IyKTtcbitcdGlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIFx1MDAyNmJsb2NrZWQsIE5VTEwpKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJzaWdwcm9jbWFza1wiKTtcbitcbitcdHNpZ2VtcHR5c2V0KFx1MDAyNmluaXRpYWxfbWFzayk7XG4rXHRzaWdhZGRzZXQoXHUwMDI2aW5pdGlhbF9tYXNrLCBTSUdVU1IxKTtcbitcdHNmZCA9IHNpZ25hbGZkKC0xLCBcdTAwMjZpbml0aWFsX21hc2ssIDApO1xuK1x0aWYgKHNmZCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwic2lnbmFsZmRcIik7XG4rXG4rXHRpZiAocGlwZShyZWFkeV9waXBlKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicGlwZShyZWFkeSlcIik7XG4rXHRpZiAocGlwZShzdGFydF9waXBlKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicGlwZShzdGFydClcIik7XG4rXHRpZiAocGlwZShyZXN1bHRfcGlwZSkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInBpcGUocmVzdWx0KVwiKTtcbitcbitcdGNoaWxkID0gZm9yaygpO1xuK1x0aWYgKGNoaWxkIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJmb3JrXCIpO1xuK1xuK1x0aWYgKGNoaWxkID09IDApIHtcbitcdFx0Y2xvc2UocmVhZHlfcGlwZVswXSk7XG4rXHRcdGNsb3NlKHN0YXJ0X3BpcGVbMV0pO1xuK1x0XHRjbG9zZShyZXN1bHRfcGlwZVswXSk7XG4rXG4rXHRcdHJlYWR5ID0gJ1InO1xuK1x0XHRpZiAod3JpdGVfYWxsKHJlYWR5X3BpcGVbMV0sIFx1MDAyNnJlYWR5LCBzaXplb2YocmVhZHkpKSlcbitcdFx0XHRfZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0XHRpZiAocmVhZF9hbGwoc3RhcnRfcGlwZVswXSwgXHUwMDI2c3RhcnQsIHNpemVvZihzdGFydCkpKVxuK1x0XHRcdF9leGl0KEVYSVRfRkFJTFVSRSk7XG4rXG4rXHRcdG1lbXNldChcdTAwMjZmZHNpLCAwLCBzaXplb2YoZmRzaSkpO1xuK1x0XHRpZiAocmVhZF9hbGwoc2ZkLCBcdTAwMjZmZHNpLCBzaXplb2YoZmRzaSkpKVxuK1x0XHRcdF9leGl0KEVYSVRfRkFJTFVSRSk7XG4rXG4rXHRcdHNpZ25vID0gZmRzaS5zc2lfc2lnbm87XG4rXHRcdGlmICh3cml0ZV9hbGwocmVzdWx0X3BpcGVbMV0sIFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSlcbitcdFx0XHRfZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0XHRfZXhpdChFWElUX1NVQ0NFU1MpO1xuK1x0fVxuK1xuK1x0Y2xvc2UocmVhZHlfcGlwZVsxXSk7XG4rXHRjbG9zZShzdGFydF9waXBlWzBdKTtcbitcdGNsb3NlKHJlc3VsdF9waXBlWzFdKTtcbitcbitcdGlmIChyZWFkX2FsbChyZWFkeV9waXBlWzBdLCBcdTAwMjZyZWFkeSwgc2l6ZW9mKHJlYWR5KSkpIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImNoaWxkIGRpZCBub3QgcmVhY2ggYmxvY2tpbmcgcmVhZFxcblwiKTtcbitcdH1cbitcbitcdGlmIChraWxsKGNoaWxkLCBTSUdVU1IyKSkge1xuK1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwia2lsbChTSUdVU1IyKVwiKTtcbitcdH1cbitcbitcdHN0YXJ0ID0gJ1MnO1xuK1x0aWYgKHdyaXRlX2FsbChzdGFydF9waXBlWzFdLCBcdTAwMjZzdGFydCwgc2l6ZW9mKHN0YXJ0KSkpIHtcbitcdFx0a2lsbF9hbmRfcmVhcChjaGlsZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImNvdWxkIG5vdCByZWxlYXNlIGNoaWxkIGludG8gc2lnbmFsZmQgcmVhZFxcblwiKTtcbitcdH1cbitcbitcdHN0YXR1cyA9IHdhaXRfZm9yX2NoaWxkX2Jsb2NrKGNoaWxkLCBzZmQsIDEwMDApO1xuK1x0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuK1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0aWYgKHN0YXR1cyA9PSAtMSlcbitcdFx0XHRrc2Z0X2V4aXRfc2tpcChcIi9wcm9jL1x1MDAzY3BpZFx1MDAzZS9zeXNjYWxsIGlzIHVuYXZhaWxhYmxlXFxuXCIpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjaGlsZCBkaWQgbm90IGJsb2NrIGluIHNpZ25hbGZkIHJlYWRcXG5cIik7XG4rXHR9XG4rXG4rXHRzaWdlbXB0eXNldChcdTAwMjZ1cGRhdGVkX21hc2spO1xuK1x0c2lnYWRkc2V0KFx1MDAyNnVwZGF0ZWRfbWFzaywgU0lHVVNSMik7XG4rXHRpZiAoc2lnbmFsZmQoc2ZkLCBcdTAwMjZ1cGRhdGVkX21hc2ssIDApIFx1MDAzYyAwKSB7XG4rXHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJzaWduYWxmZChyZWNvbmZpZ3VyZSlcIik7XG4rXHR9XG4rXG4rXHRpZiAod2FpdF9yZXN1bHQocmVzdWx0X3BpcGVbMF0sIDEwMDApID09IDEpIHtcbitcdFx0aWYgKHJlYWRfYWxsKHJlc3VsdF9waXBlWzBdLCBcdTAwMjZzaWdubywgc2l6ZW9mKHNpZ25vKSkpIHtcbitcdFx0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjaGlsZCB3YWtldXAgZGlkIG5vdCBjYXJyeSBhIHNpZ25hbFxcblwiKTtcbitcdFx0fVxuK1xuK1x0XHRpZiAod2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSAhPSBjaGlsZCkge1xuK1x0XHRcdGtpbGxfYW5kX3JlYXAoY2hpbGQpO1xuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIndhaXRwaWRcIik7XG4rXHRcdH1cbitcdFx0a3NmdF90ZXN0X3Jlc3VsdChzaWdubyA9PSBTSUdVU1IyIFx1MDAyNlx1MDAyNiBXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXG4rXHRcdFx0XHQgXCJzaGFyZWQgc2lnbmFsZmQgd2FrZXVwIGFmdGVyIG1hc2sgdXBkYXRlXFxuXCIpO1xuK1x0XHRrc2Z0X2V4aXRfcGFzcygpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEJ1Z2d5IGtlcm5lbHMgbGVhdmUgdGhlIGNoaWxkIGFzbGVlcCB1bnRpbCBhbiB1bnJlbGF0ZWQgc2lnbmFsIGhpdHNcbitcdCAqIHRoZSBjaGlsZCdzIHNpZ25hbGZkIHdhaXRxdWV1ZS4gU0lHVVNSMSBkb2VzIG5vdCBtYXRjaCB0aGUgdXBkYXRlZFxuK1x0ICogc2lnbmFsZmQgbWFzaywgc28gYSBzdWNjZXNzZnVsIHJlYWQgb2YgU0lHVVNSMiBhZnRlciB0aGlzIG51ZGdlXG4rXHQgKiBkZW1vbnN0cmF0ZXMgdGhlIG1pc3NlZCB3YWtldXAuXG4rXHQgKi9cbitcdGlmIChraWxsKGNoaWxkLCBTSUdVU1IxKSkge1xuK1x0XHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwia2lsbChTSUdVU1IxKVwiKTtcbitcdH1cbitcbitcdGlmICh3YWl0X3Jlc3VsdChyZXN1bHRfcGlwZVswXSwgMTAwMCkgPT0gMSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcmVhZF9hbGwocmVzdWx0X3BpcGVbMF0sIFx1MDAyNnNpZ25vLCBzaXplb2Yoc2lnbm8pKSBcdTAwMjZcdTAwMjZcbitcdCAgICB3YWl0cGlkKGNoaWxkLCBcdTAwMjZzdGF0dXMsIDApID09IGNoaWxkIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNpZ25vID09IFNJR1VTUjIgXHUwMDI2XHUwMDI2IFdJRkVYSVRFRChzdGF0dXMpIFx1MDAyNlx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDApIHtcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwibWFzayB1cGRhdGUgbWlzc2VkIGEgc2hhcmVkIHNpZ25hbGZkIHdhaXRlclxcblwiKTtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjaGlsZCB3b2tlIG9ubHkgYWZ0ZXIgYW4gdW5yZWxhdGVkIFNJR1VTUjFcXG5cIik7XG4rXHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4rXHR9XG4rXG4rXHRraWxsX2FuZF9yZWFwKGNoaWxkKTtcbitcdGtzZnRfZXhpdF9mYWlsX21zZyhcImNoaWxkIHJlbWFpbmVkIGJsb2NrZWQgYWZ0ZXIgc2lnbmFsZmQgcmVjb25maWd1cmF0aW9uXFxuXCIpO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjAzLjY2NjQ5MTcyMloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTg1MjI3ODIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNpZ25hbEZEIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBmcy9zaWduYWxmZC5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgbG9va2luZyBhdCBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBzaWduYWxmZCBpbXBsZW1lbnRhdGlvbiwgcHJpbWFyaWx5IGFyb3VuZCBjb25jdXJyZW5jeSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuVGhlIGludHJvZHVjdGlvbiBvZiBgc3BpbmxvY2tfdCBsb2NrYCwgYHdhaXRfcXVldWVfaGVhZF90IHdxaGAsIGFuZCBgc3RydWN0IHJjdV9oZWFkIHJjdWAgd2l0aGluIHRoZSBgc2lnbmFsZmRfY3R4YCBzdHJ1Y3QgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHN5bmNocm9uaXphdGlvbiBhbmQgcG90ZW50aWFsbHkgYW4gUkNVIChSZWFkLUNvcHktVXBkYXRlKSBvcHRpbWl6YXRpb24gZWZmb3J0LiBUaGlzIGlzIHNtYXJ0OyBzaWduYWxmZCBpcyBhIGNvbW1vbiBwb2ludCBvZiBjb250ZW50aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBhZGRyZXNzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cbmBzaWduYWxmZF9yZWxlYXNlYCBub3cgaW5jb3Jwb3JhdGVzIGB3YWtlX3VwX3BvbGxmcmVlYCBhbmQgYGtmcmVlX3JjdWAgaW5zdGVhZCBvZiBqdXN0IGEgc3RyYWlnaHQgYGtmcmVlYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRpb24gdGhhdCB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgcm9idXN0IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgY2xlYW51cCwgZXNwZWNpYWxseSBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQsIGxpa2VseSBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gcHJvYmxlbXMuIFJDVSBpcyBhIGdvb2QgZml0IGhlcmUsIHByZXZlbnRpbmcgc3RhbGxzIHdoaWxlIGNsZWFuaW5nIHVwIHRoZSB1bmRlcmx5aW5nIGNvbnRleHQuXG5cblRoZSBjaGFuZ2VzIGluIGBzaWduYWxmZF9wb2xsYCwgYHNpZ25hbGZkX2RlcXVldWVgLCBhbmQgYHNpZ25hbGZkX3Nob3dfZmRpbmZvYCByZWluZm9yY2UgdGhpcyBjb25jdXJyZW5jeSB0aGVtZS4gVGhlIGFkZGl0aW9uIG9mIHNwaW5sb2NrcyBhcm91bmQgY3JpdGljYWwgc2VjdGlvbnMsIHN1Y2ggYXMgY2hlY2tpbmcgYHNpZ2xvY2tgIGFuZCBgbmV4dF9zaWduYWxgLCBvciByZWFkaW5nIGBjdHgtXHUwMDNlc2lnbWFza2AsIGlzIHRleHRib29rIHByb3RlY3Rpb24gYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMuIFVzaW5nIGEgd2FpdCBxdWV1ZSBpbiBwb2xsLCBhbmQgdGhlIGNhcmVmdWwgYGFkZF93YWl0X3F1ZXVlYC9gcmVtb3ZlX3dhaXRfcXVldWVgIGluIGBzaWduYWxmZF9kZXF1ZXVlYCwgbWFrZXMgaXQgYWxsIGxvb2sgd2VsbC1jb25zaWRlcmVkLlxuXG5UaGUgYGRvX3NpZ25hbGZkNGAgZnVuY3Rpb24gaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNwaW5sb2NrIGFuZCB3YWl0IHF1ZXVlIGhlYWQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGxvY2tpbmcgYXJvdW5kIGBjdHgtXHUwMDNlc2lnbWFza2AgYW5kIHRoZSBgd2FrZV91cGAgY2FsbCBpbiB0aGUgcmVjb25maWd1cmF0aW9uIHNjZW5hcmlvIHNob3cgYSBjYXJlZnVsIGF0dGVudGlvbiB0byB0aGUgYXRvbWljaXR5IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGUgcmVjb25maWd1cmF0aW9uIHByb2Nlc3MuIFdlIGFyZSB2ZXJ5IGxpa2VseSBsb29raW5nIGF0IGhhbmRsaW5nIG9mIHNpZ25hbCBtYXNrcyB0aGF0IGFyZSB1cGRhdGVkIG9uIHRoZSBmbHkuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgaG93IGBzaWduYWxmZF9jdHhgIGlzIGFsbG9jYXRlZCwgaG93IGBzaWduYWxmZF9yZWFkYCBpbnRlcmFjdHMgd2l0aCBpdCwgYW5kIHdoYXQgaGFwcGVucyBpbiBvdGhlciBjcml0aWNhbCBwYXRocywgaW4gdGhlIG1haW4gY29kZSBiYXNlLiBMZXQgbWUgcXVpY2tseSB1c2UgcmVhZC1maWxlIG9yIGdyZXBwZXIgdG8gcHVsbCB1cCB0aGUgZXhpc3RpbmcgYGZzL3NpZ25hbGZkLmNgIGNvZGUgdG8gc2VlIGhvdyB0aGUgY29udGV4dCBpcyB1c2VkIG92ZXJhbGwuIFRoaXMgd2lsbCBwcm92aWRlIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIEknbGwgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGFsbG9jYXRpb24gdG8gZnVsbHkgZ3Jhc3AgdGhlIG1lbW9yeSBtb2RlbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDU6MTUuNTE4Nzc0MTc5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zaWduYWxmZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogIGZzL3NpZ25hbGZkLmNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBMaW51cyBUb3J2YWxkc1xcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqICBNb24gTWFyIDUsIDIwMDc6IERhdmlkZSBMaWJlbnppIFxcdTAwM2NkYXZpZGVsQHhtYWlsc2VydmVyLm9yZ1xcdTAwM2VcXG4gICA4OlxcdCAqICAgICAgQ2hhbmdlZCAtXFx1MDAzZXJlYWQoKSB0byByZXR1cm4gYSBzaWdpbmZvIHN0cmN0dXJlIGluc3RlYWQgb2Ygc2lnbmFsIG51bWJlci5cXG4gICA5OlxcdCAqICAgICAgRml4ZWQgbG9ja2luZyBpbiAtXFx1MDAzZXBvbGwoKS5cXG4gIDEwOlxcdCAqICAgICAgQWRkZWQgc2lnaGFuZC1kZXRhY2ggbm90aWZpY2F0aW9uLlxcbiAgMTE6XFx0ICogICAgICBBZGRlZCBmZCByZS11c2UgaW4gc3lzX3NpZ25hbGZkKCkgc3lzY2FsbC5cXG4gIDEyOlxcdCAqICAgICAgTm93IHVzaW5nIGFub255bW91cyBpbm9kZSBzb3VyY2UuXFxuICAxMzpcXHQgKiAgICAgIFRoYW5rcyB0byBPbGVnIE5lc3Rlcm92IGZvciB1c2VmdWwgY29kZSByZXZpZXcgYW5kIHN1Z2dlc3Rpb25zLlxcbiAgMTQ6XFx0ICogICAgICBNb3JlIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyBmcm9tIEFybmQgQmVyZ21hbm4uXFxuICAxNTpcXHQgKiAgU2F0IE1heSAxOSwgMjAwNzogRGF2aSBFLiBNLiBBcm5hdXQgXFx1MDAzY2RhdmlAaGF4ZW50LmNvbS5iclxcdTAwM2VcXG4gIDE2OlxcdCAqICAgICAgUmV0cmlldmUgbXVsdGlwbGUgc2lnbmFscyB3aXRoIG9uZSByZWFkKCkgY2FsbFxcbiAgMTc6XFx0ICogIFN1biBKdWwgMTUsIDIwMDc6IERhdmlkZSBMaWJlbnppIFxcdTAwM2NkYXZpZGVsQHhtYWlsc2VydmVyLm9yZ1xcdTAwM2VcXG4gIDE4OlxcdCAqICAgICAgQXR0YWNoIHRvIHRoZSBzaWdoYW5kIG9ubHkgZHVyaW5nIHJlYWQoKSBhbmQgcG9sbCgpLlxcbiAgMTk6XFx0ICovXFxuICAyMDpcXHRcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcG9sbC5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gIDI0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMjc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gIDMwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAgMzE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcXHUwMDNlXFxuICAzMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lnbmFsZmQuaFxcdTAwM2VcXG4gIDMzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjYWxscy5oXFx1MDAzZVxcbiAgMzQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4gIDM1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wYXQuaFxcdTAwM2VcXG4gIDM2OlxcdFxcbiAgMzc6XFx0dm9pZCBzaWduYWxmZF9jbGVhbnVwKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZClcXG4gIDM4OlxcdHtcXG4gIDM5OlxcdFxcdHdha2VfdXBfcG9sbGZyZWUoXFx1MDAyNnNpZ2hhbmQtXFx1MDAzZXNpZ25hbGZkX3dxaCk7XFxuICA0MDpcXHR9XFxuICA0MTpcXHRcXG4gIDQyOlxcdHN0cnVjdCBzaWduYWxmZF9jdHgge1xcbiAgNDM6XFx0XFx0LyogU2VyaWFsaXplcyBzaGFyZWQgbWFzayB1cGRhdGVzIHdpdGggZmlsZS1sb2NhbCB3YWl0ZXIgd2FrZXVwcy4gKi9cXG4gIDQ0OlxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gIDQ1OlxcdFxcdHdhaXRfcXVldWVfaGVhZF90IHdxaDtcXG4gIDQ2OlxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuICA0NzpcXHRcXHRzaWdzZXRfdCBzaWdtYXNrO1xcbiAgNDg6XFx0fTtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0c3RhdGljIGludCBzaWduYWxmZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiAgNTE6XFx0e1xcbiAgNTI6XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHR3YWtlX3VwX3BvbGxmcmVlKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCk7XFxuICA1NTpcXHRcXHRrZnJlZV9yY3UoY3R4LCByY3UpO1xcbiAgNTY6XFx0XFx0cmV0dXJuIDA7XFxuICA1NzpcXHR9XFxuICA1ODpcXHRcXG4gIDU5OlxcdHN0YXRpYyBfX3BvbGxfdCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbiAgNjA6XFx0e1xcbiAgNjE6XFx0XFx0c3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAgNjI6XFx0XFx0X19wb2xsX3QgZXZlbnRzID0gMDtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZjdHgtXFx1MDAzZXdxaCwgd2FpdCk7XFxuICA2NTpcXHRcXHRwb2xsX3dhaXQoZmlsZSwgXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ25hbGZkX3dxaCwgd2FpdCk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuICA2ODpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbiAgNjk6XFx0XFx0aWYgKG5leHRfc2lnbmFsKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VwZW5kaW5nLCBcXHUwMDI2Y3R4LVxcdTAwM2VzaWdtYXNrKSB8fFxcbiAgNzA6XFx0XFx0ICAgIG5leHRfc2lnbmFsKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZXNoYXJlZF9wZW5kaW5nLFxcbiAgNzE6XFx0XFx0XFx0XFx0XFx1MDAyNmN0eC1cXHUwMDNlc2lnbWFzaykpXFxuICA3MjpcXHRcXHRcXHRldmVudHMgfD0gRVBPTExJTjtcXG4gIDczOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4gIDc0OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0cmV0dXJuIGV2ZW50cztcXG4gIDc3OlxcdH1cXG4gIDc4OlxcdFxcbiAgNzk6XFx0LypcXG4gIDgwOlxcdCAqIENvcGllZCBmcm9tIGNvcHlfc2lnaW5mb190b191c2VyKCkgaW4ga2VybmVsL3NpZ25hbC5jXFxuICA4MTpcXHQgKi9cXG4gIDgyOlxcdHN0YXRpYyBpbnQgc2lnbmFsZmRfY29weWluZm8oc3RydWN0IGlvdl9pdGVyICp0bywga2VybmVsX3NpZ2luZm9fdCBjb25zdCAqa2luZm8pXFxuICA4MzpcXHR7XFxuICA4NDpcXHRcXHRzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyBuZXc7XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pICE9IDEyOCk7XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdC8qXFxuICA4OTpcXHRcXHQgKiBVbnVzZWQgbWVtYmVycyBzaG91bGQgYmUgemVybyAuLi5cXG4gIDkwOlxcdFxcdCAqL1xcbiAgOTE6XFx0XFx0bWVtc2V0KFxcdTAwMjZuZXcsIDAsIHNpemVvZihuZXcpKTtcXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0LypcXG4gIDk0OlxcdFxcdCAqIElmIHlvdSBjaGFuZ2Ugc2lnaW5mb190IHN0cnVjdHVyZSwgcGxlYXNlIGJlIHN1cmVcXG4gIDk1OlxcdFxcdCAqIHRoaXMgY29kZSBpcyBmaXhlZCBhY2NvcmRpbmdseS5cXG4gIDk2OlxcdFxcdCAqL1xcbiAgOTc6XFx0XFx0bmV3LnNzaV9zaWdubyA9IGtpbmZvLVxcdTAwM2VzaV9zaWdubztcXG4gIDk4OlxcdFxcdG5ldy5zc2lfZXJybm8gPSBraW5mby1cXHUwMDNlc2lfZXJybm87XFxuICA5OTpcXHRcXHRuZXcuc3NpX2NvZGUgID0ga2luZm8tXFx1MDAzZXNpX2NvZGU7XFxuIDEwMDpcXHRcXHRzd2l0Y2ggKHNpZ2luZm9fbGF5b3V0KGtpbmZvLVxcdTAwM2VzaV9zaWdubywga2luZm8tXFx1MDAzZXNpX2NvZGUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjE1LjUxODkwOTYyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTg5ODM4NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLi4uXG5cbioqRGl2aW5nIGludG8gYGZzL3NpZ25hbGZkLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgcmVzdCBvZiBgZnMvc2lnbmFsZmQuY2AuIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgaW1wbGVtZW50YXRpb24uIEkndmUgYWxyZWFkeSBnb3QgYSBoYW5kbGUgb24gdGhlIGdlbmVyYWwgY29uY2VwdCBvZiBzaWduYWxmZCwgYnV0IEkgd2FudCB0byBzZWUgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCdzIHNpZ25hbCBkZWxpdmVyeSBtZWNoYW5pc21zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIGFuZCB0aGUgdmFyaW91cyBsb2NraW5nIHN0cmF0ZWdpZXMuIEknbSBsb29raW5nIGZvciBlbGVnYW5jZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IHVudXN1YWwgZGVzaWduIGNob2ljZXMgdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZyBvciBpbnN0cnVjdGl2ZS4gSG9wZWZ1bGx5LCBJJ2xsIHVuY292ZXIgc29tZSBiZXN0IHByYWN0aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6NDU6MTcuNzA4NzUxNzEzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zaWduYWxmZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0XFx0Y2FzZSBTSUxfS0lMTDpcXG4gMTAyOlxcdFxcdFxcdG5ldy5zc2lfcGlkID0ga2luZm8tXFx1MDAzZXNpX3BpZDtcXG4gMTAzOlxcdFxcdFxcdG5ldy5zc2lfdWlkID0ga2luZm8tXFx1MDAzZXNpX3VpZDtcXG4gMTA0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMDU6XFx0XFx0Y2FzZSBTSUxfVElNRVI6XFxuIDEwNjpcXHRcXHRcXHRuZXcuc3NpX3RpZCA9IGtpbmZvLVxcdTAwM2VzaV90aWQ7XFxuIDEwNzpcXHRcXHRcXHRuZXcuc3NpX292ZXJydW4gPSBraW5mby1cXHUwMDNlc2lfb3ZlcnJ1bjtcXG4gMTA4OlxcdFxcdFxcdG5ldy5zc2lfcHRyID0gKGxvbmcpIGtpbmZvLVxcdTAwM2VzaV9wdHI7XFxuIDEwOTpcXHRcXHRcXHRuZXcuc3NpX2ludCA9IGtpbmZvLVxcdTAwM2VzaV9pbnQ7XFxuIDExMDpcXHRcXHRcXHRicmVhaztcXG4gMTExOlxcdFxcdGNhc2UgU0lMX1BPTEw6XFxuIDExMjpcXHRcXHRcXHRuZXcuc3NpX2JhbmQgPSBraW5mby1cXHUwMDNlc2lfYmFuZDtcXG4gMTEzOlxcdFxcdFxcdG5ldy5zc2lfZmQgICA9IGtpbmZvLVxcdTAwM2VzaV9mZDtcXG4gMTE0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMTU6XFx0XFx0Y2FzZSBTSUxfRkFVTFRfQk5ERVJSOlxcbiAxMTY6XFx0XFx0Y2FzZSBTSUxfRkFVTFRfUEtVRVJSOlxcbiAxMTc6XFx0XFx0Y2FzZSBTSUxfRkFVTFRfUEVSRl9FVkVOVDpcXG4gMTE4OlxcdFxcdFxcdC8qXFxuIDExOTpcXHRcXHRcXHQgKiBGYWxsIHRocm91Z2ggdG8gdGhlIFNJTF9GQVVMVCBjYXNlLiAgU0lMX0ZBVUxUX0JOREVSUixcXG4gMTIwOlxcdFxcdFxcdCAqIFNJTF9GQVVMVF9QS1VFUlIsIGFuZCBTSUxfRkFVTFRfUEVSRl9FVkVOVCBhcmUgb25seVxcbiAxMjE6XFx0XFx0XFx0ICogZ2VuZXJhdGVkIGJ5IGZhdWx0cyB0aGF0IGRlbGl2ZXIgdGhlbSBzeW5jaHJvbm91c2x5IHRvXFxuIDEyMjpcXHRcXHRcXHQgKiB1c2Vyc3BhY2UuICBJbiBjYXNlIHNvbWVvbmUgaW5qZWN0cyBvbmUgb2YgdGhlc2Ugc2lnbmFsc1xcbiAxMjM6XFx0XFx0XFx0ICogYW5kIHNpZ25hbGZkIGNhdGNoZXMgaXQgdHJlYXQgaXQgYXMgU0lMX0ZBVUxULlxcbiAxMjQ6XFx0XFx0XFx0ICovXFxuIDEyNTpcXHRcXHRjYXNlIFNJTF9GQVVMVDpcXG4gMTI2OlxcdFxcdFxcdG5ldy5zc2lfYWRkciA9IChsb25nKSBraW5mby1cXHUwMDNlc2lfYWRkcjtcXG4gMTI3OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjg6XFx0XFx0Y2FzZSBTSUxfRkFVTFRfVFJBUE5POlxcbiAxMjk6XFx0XFx0XFx0bmV3LnNzaV9hZGRyID0gKGxvbmcpIGtpbmZvLVxcdTAwM2VzaV9hZGRyO1xcbiAxMzA6XFx0XFx0XFx0bmV3LnNzaV90cmFwbm8gPSBraW5mby1cXHUwMDNlc2lfdHJhcG5vO1xcbiAxMzE6XFx0XFx0XFx0YnJlYWs7XFxuIDEzMjpcXHRcXHRjYXNlIFNJTF9GQVVMVF9NQ0VFUlI6XFxuIDEzMzpcXHRcXHRcXHRuZXcuc3NpX2FkZHIgPSAobG9uZykga2luZm8tXFx1MDAzZXNpX2FkZHI7XFxuIDEzNDpcXHRcXHRcXHRuZXcuc3NpX2FkZHJfbHNiID0gKHNob3J0KSBraW5mby1cXHUwMDNlc2lfYWRkcl9sc2I7XFxuIDEzNTpcXHRcXHRcXHRicmVhaztcXG4gMTM2OlxcdFxcdGNhc2UgU0lMX0NITEQ6XFxuIDEzNzpcXHRcXHRcXHRuZXcuc3NpX3BpZCAgICA9IGtpbmZvLVxcdTAwM2VzaV9waWQ7XFxuIDEzODpcXHRcXHRcXHRuZXcuc3NpX3VpZCAgICA9IGtpbmZvLVxcdTAwM2VzaV91aWQ7XFxuIDEzOTpcXHRcXHRcXHRuZXcuc3NpX3N0YXR1cyA9IGtpbmZvLVxcdTAwM2VzaV9zdGF0dXM7XFxuIDE0MDpcXHRcXHRcXHRuZXcuc3NpX3V0aW1lICA9IGtpbmZvLVxcdTAwM2VzaV91dGltZTtcXG4gMTQxOlxcdFxcdFxcdG5ldy5zc2lfc3RpbWUgID0ga2luZm8tXFx1MDAzZXNpX3N0aW1lO1xcbiAxNDI6XFx0XFx0XFx0YnJlYWs7XFxuIDE0MzpcXHRcXHRjYXNlIFNJTF9SVDpcXG4gMTQ0OlxcdFxcdFxcdC8qXFxuIDE0NTpcXHRcXHRcXHQgKiBUaGlzIGNhc2UgY2F0Y2hlcyBhbHNvIHRoZSBzaWduYWxzIHF1ZXVlZCBieSBzaWdxdWV1ZSgpLlxcbiAxNDY6XFx0XFx0XFx0ICovXFxuIDE0NzpcXHRcXHRcXHRuZXcuc3NpX3BpZCA9IGtpbmZvLVxcdTAwM2VzaV9waWQ7XFxuIDE0ODpcXHRcXHRcXHRuZXcuc3NpX3VpZCA9IGtpbmZvLVxcdTAwM2VzaV91aWQ7XFxuIDE0OTpcXHRcXHRcXHRuZXcuc3NpX3B0ciA9IChsb25nKSBraW5mby1cXHUwMDNlc2lfcHRyO1xcbiAxNTA6XFx0XFx0XFx0bmV3LnNzaV9pbnQgPSBraW5mby1cXHUwMDNlc2lfaW50O1xcbiAxNTE6XFx0XFx0XFx0YnJlYWs7XFxuIDE1MjpcXHRcXHRjYXNlIFNJTF9TWVM6XFxuIDE1MzpcXHRcXHRcXHRuZXcuc3NpX2NhbGxfYWRkciA9IChsb25nKSBraW5mby1cXHUwMDNlc2lfY2FsbF9hZGRyO1xcbiAxNTQ6XFx0XFx0XFx0bmV3LnNzaV9zeXNjYWxsICAgPSBraW5mby1cXHUwMDNlc2lfc3lzY2FsbDtcXG4gMTU1OlxcdFxcdFxcdG5ldy5zc2lfYXJjaCAgICAgID0ga2luZm8tXFx1MDAzZXNpX2FyY2g7XFxuIDE1NjpcXHRcXHRcXHRicmVhaztcXG4gMTU3OlxcdFxcdH1cXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0aWYgKCFjb3B5X3RvX2l0ZXJfZnVsbChcXHUwMDI2bmV3LCBzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pLCB0bykpXFxuIDE2MDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMTYxOlxcdFxcbiAxNjI6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyk7XFxuIDE2MzpcXHR9XFxuIDE2NDpcXHRcXG4gMTY1OlxcdHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBrZXJuZWxfc2lnaW5mb190ICppbmZvLFxcbiAxNjY6XFx0XFx0XFx0XFx0XFx0aW50IG5vbmJsb2NrKVxcbiAxNjc6XFx0e1xcbiAxNjg6XFx0XFx0ZW51bSBwaWRfdHlwZSB0eXBlO1xcbiAxNjk6XFx0XFx0c3NpemVfdCByZXQ7XFxuIDE3MDpcXHRcXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcXG4gMTcxOlxcdFxcdERFQ0xBUkVfV0FJVFFVRVVFKGN0eF93YWl0LCBjdXJyZW50KTtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMTc0OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIDE3NTpcXHRcXHRyZXQgPSBkZXF1ZXVlX3NpZ25hbChcXHUwMDI2Y3R4LVxcdTAwM2VzaWdtYXNrLCBpbmZvLCBcXHUwMDI2dHlwZSk7XFxuIDE3NjpcXHRcXHRzd2l0Y2ggKHJldCkge1xcbiAxNzc6XFx0XFx0Y2FzZSAwOlxcbiAxNzg6XFx0XFx0XFx0aWYgKCFub25ibG9jaylcXG4gMTc5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxODA6XFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4gMTgxOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAxODI6XFx0XFx0ZGVmYXVsdDpcXG4gMTgzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWdsb2NrKTtcXG4gMTg0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMTg1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4NjpcXHRcXHR9XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCwgXFx1MDAyNmN0eF93YWl0KTtcXG4gMTg5OlxcdFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgsIFxcdTAwMjZ3YWl0KTtcXG4gMTkwOlxcdFxcdGZvciAoOzspIHtcXG4gMTkxOlxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIDE5MjpcXHRcXHRcXHRyZXQgPSBkZXF1ZXVlX3NpZ25hbChcXHUwMDI2Y3R4LVxcdTAwM2VzaWdtYXNrLCBpbmZvLCBcXHUwMDI2dHlwZSk7XFxuIDE5MzpcXHRcXHRcXHRpZiAocmV0ICE9IDApXFxuIDE5NDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTk1OlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbiAxOTY6XFx0XFx0XFx0XFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xcbiAxOTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE5ODpcXHRcXHRcXHR9XFxuIDE5OTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIDIwMDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjE3LjcwODg3OTE2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjYzMzEyODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gc2lnbmFsZmQuYyoqXG5cbkFscmlnaHQsIHRvIGZ1bGx5IGdyYXNwIHRoaXMgYmVoYXZpb3IsIEkgbmVlZCB0byBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBmcy9zaWduYWxmZC5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAyMDEgdGhyb3VnaCAzMTUuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBhcm91bmQgd2hhdGV2ZXIgYXNwZWN0IG9mIHRoaXMgaXMgdGhyb3dpbmcgbWUuIEkgZmlndXJlIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMgaGFwcGVuaW5nIGFuZCB3aGVyZSBJJ20gbW9zdCBsaWtlbHkgdG8gZmluZCB0aGUgYW5zd2VyLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhvc2UgbGluZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NToyMS45NzIxOTU0NDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3NpZ25hbGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMTpcXHRcXHRcXHRzY2hlZHVsZSgpO1xcbiAyMDI6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMjAzOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIDIwNDpcXHRcXHR9XFxuIDIwNTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3VycmVudC1cXHUwMDNlc2lnaGFuZC1cXHUwMDNlc2lnbG9jayk7XFxuIDIwNjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdHJlbW92ZV93YWl0X3F1ZXVlKFxcdTAwMjZjdXJyZW50LVxcdTAwM2VzaWdoYW5kLVxcdTAwM2VzaWduYWxmZF93cWgsIFxcdTAwMjZ3YWl0KTtcXG4gMjA5OlxcdFxcdHJlbW92ZV93YWl0X3F1ZXVlKFxcdTAwMjZjdHgtXFx1MDAzZXdxaCwgXFx1MDAyNmN0eF93YWl0KTtcXG4gMjEwOlxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjEzOlxcdH1cXG4gMjE0OlxcdFxcbiAyMTU6XFx0LypcXG4gMjE2OlxcdCAqIFJldHVybnMgYSBtdWx0aXBsZSBvZiB0aGUgc2l6ZSBvZiBhIFxcXCJzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mb1xcXCIsIG9yIGEgbmVnYXRpdmVcXG4gMjE3OlxcdCAqIGVycm9yIGNvZGUuIFRoZSBcXFwiY291bnRcXFwiIHBhcmFtZXRlciBtdXN0IGJlIGF0IGxlYXN0IHRoZSBzaXplIG9mIGFcXG4gMjE4OlxcdCAqIFxcXCJzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mb1xcXCIuXFxuIDIxOTpcXHQgKi9cXG4gMjIwOlxcdHN0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuIDIyMTpcXHR7XFxuIDIyMjpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDIyNDpcXHRcXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudCh0byk7XFxuIDIyNTpcXHRcXHRzc2l6ZV90IHJldCwgdG90YWwgPSAwO1xcbiAyMjY6XFx0XFx0a2VybmVsX3NpZ2luZm9fdCBpbmZvO1xcbiAyMjc6XFx0XFx0Ym9vbCBub25ibG9jaztcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0Y291bnQgLz0gc2l6ZW9mKHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvKTtcXG4gMjMwOlxcdFxcdGlmICghY291bnQpXFxuIDIzMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0bm9uYmxvY2sgPSBmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19OT05CTE9DSyB8fCBpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUO1xcbiAyMzQ6XFx0XFx0ZG8ge1xcbiAyMzU6XFx0XFx0XFx0cmV0ID0gc2lnbmFsZmRfZGVxdWV1ZShjdHgsIFxcdTAwMjZpbmZvLCBub25ibG9jayk7XFxuIDIzNjpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2M9IDApKVxcbiAyMzc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDIzODpcXHRcXHRcXHRyZXQgPSBzaWduYWxmZF9jb3B5aW5mbyh0bywgXFx1MDAyNmluZm8pO1xcbiAyMzk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDI0MDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjQxOlxcdFxcdFxcdHRvdGFsICs9IHJldDtcXG4gMjQyOlxcdFxcdFxcdG5vbmJsb2NrID0gMTtcXG4gMjQzOlxcdFxcdH0gd2hpbGUgKC0tY291bnQpO1xcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHRyZXR1cm4gdG90YWwgPyB0b3RhbDogcmV0O1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG4gMjQ5OlxcdHN0YXRpYyB2b2lkIHNpZ25hbGZkX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpXFxuIDI1MDpcXHR7XFxuIDI1MTpcXHRcXHRzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDI1MjpcXHRcXHRzaWdzZXRfdCBzaWdtYXNrO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbiAyNTU6XFx0XFx0c2lnbWFzayA9IGN0eC1cXHUwMDNlc2lnbWFzaztcXG4gMjU2OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMjU3OlxcdFxcdHNpZ25vdHNldChcXHUwMDI2c2lnbWFzayk7XFxuIDI1ODpcXHRcXHRyZW5kZXJfc2lnc2V0X3QobSwgXFxcInNpZ21hc2s6XFxcXHRcXFwiLCBcXHUwMDI2c2lnbWFzayk7XFxuIDI1OTpcXHR9XFxuIDI2MDpcXHQjZW5kaWZcXG4gMjYxOlxcdFxcbiAyNjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2lnbmFsZmRfZm9wcyA9IHtcXG4gMjYzOlxcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbiAyNjQ6XFx0XFx0LnNob3dfZmRpbmZvXFx0PSBzaWduYWxmZF9zaG93X2ZkaW5mbyxcXG4gMjY1OlxcdCNlbmRpZlxcbiAyNjY6XFx0XFx0LnJlbGVhc2VcXHQ9IHNpZ25hbGZkX3JlbGVhc2UsXFxuIDI2NzpcXHRcXHQucG9sbFxcdFxcdD0gc2lnbmFsZmRfcG9sbCxcXG4gMjY4OlxcdFxcdC5yZWFkX2l0ZXJcXHQ9IHNpZ25hbGZkX3JlYWRfaXRlcixcXG4gMjY5OlxcdFxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcbiAyNzA6XFx0fTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0c3RhdGljIGludCBkb19zaWduYWxmZDQoaW50IHVmZCwgc2lnc2V0X3QgKm1hc2ssIGludCBmbGFncylcXG4gMjczOlxcdHtcXG4gMjc0OlxcdFxcdC8qIENoZWNrIHRoZSBTRkRfKiBjb25zdGFudHMgZm9yIGNvbnNpc3RlbmN5LiAgKi9cXG4gMjc1OlxcdFxcdEJVSUxEX0JVR19PTihTRkRfQ0xPRVhFQyAhPSBPX0NMT0VYRUMpO1xcbiAyNzY6XFx0XFx0QlVJTERfQlVHX09OKFNGRF9OT05CTE9DSyAhPSBPX05PTkJMT0NLKTtcXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgfihTRkRfQ0xPRVhFQyB8IFNGRF9OT05CTE9DSykpXFxuIDI3OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0c2lnZGVsc2V0bWFzayhtYXNrLCBzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSk7XFxuIDI4MjpcXHRcXHRzaWdub3RzZXQobWFzayk7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdGlmICh1ZmQgPT0gLTEpIHtcXG4gMjg1OlxcdFxcdFxcdGludCBmZDtcXG4gMjg2OlxcdFxcdFxcdHN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0XFx0Y3R4ID0ga21hbGxvY19vYmooKmN0eCk7XFxuIDI4OTpcXHRcXHRcXHRpZiAoIWN0eClcXG4gMjkwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gMjkzOlxcdFxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmN0eC1cXHUwMDNld3FoKTtcXG4gMjk0OlxcdFxcdFxcdGN0eC1cXHUwMDNlc2lnbWFzayA9ICptYXNrO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHRmZCA9IEZEX0FERChmbGFncyBcXHUwMDI2IE9fQ0xPRVhFQyxcXG4gMjk3OlxcdFxcdFxcdFxcdCAgICBhbm9uX2lub2RlX2dldGZpbGVfZm1vZGUoXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHQgICAgXFxcIltzaWduYWxmZF1cXFwiLCBcXHUwMDI2c2lnbmFsZmRfZm9wcywgY3R4LFxcbiAyOTk6XFx0XFx0XFx0XFx0XFx0ICAgIE9fUkRXUiB8IChmbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0spLCBGTU9ERV9OT1dBSVQpKTtcXG4gMzAwOlxcdFxcdFxcdGlmIChmZCBcXHUwMDNlPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjo0NToyMS45NzIzNjU2MjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg1MDI3OTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBTaWduYWxmZCBDb250ZXh0IFdhaXRxdWV1ZSBFbmhhbmNlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gdGhlIEtNU0FOIGltcGxpY2F0aW9ucywgc28gaGVyZSdzIHRoZSBwcm9jZXNzOlxuXG5GaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBwZXItc2lnbmFsZmQgY29udGV4dCB3YWl0IHF1ZXVlIChgd3FoYCksIGEgc3BpbmxvY2sgKGBsb2NrYCksIGFuZCBhbiBSQ1UgaGVhZCB0byB0aGUgYHNpZ25hbGZkX2N0eGAgc3RydWN0dXJlLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gcmVsaWVkIG9uIHRoZSBgY3VycmVudC1cdTAwM2VzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaGAsIHdoaWNoIGNhdXNlZCBwcm9ibGVtcyB3aXRoIHNoYXJlZCBzaWduYWxmZCBmaWxlIGRlc2NyaXB0b3JzIGFjcm9zcyBwcm9jZXNzZXMgKGZvcmtlZCBwcm9jZXNzZXMgb3IgcHJvY2Vzc2VzIG1vZGlmeWluZyB0aGUgZGVzY3JpcHRvciB3aXRoIGBzaWduYWxmZGApLiBUaGUgbmV3IGB3cWhgIGVuc3VyZXMgdGhhdCB3YWtldXBzIGhhcHBlbiBjb3JyZWN0bHksIGlycmVzcGVjdGl2ZSBvZiB0aGUgcHJvY2VzcyBjYWxsaW5nIGBzaWduYWxmZGAuIFdoZW4gYSBzaWduYWwgbWFzayBpcyB1cGRhdGVkIGluIGBkb19zaWduYWxmZDRgLCB0aGUgYGN0eC1cdTAwM2Vsb2NrYCBpcyB0YWtlbiwgYGN0eC1cdTAwM2VzaWdtYXNrYCBpcyB1cGRhdGVkLCBhbmQgYGN0eC1cdTAwM2V3cWhgIGlzIHdva2VuLiBUaGUgd2FpdHF1ZXVlIGlzIHJlZ2lzdGVyZWQgdG8gYm90aCBgY3R4LVx1MDAzZXdxaGAgYW5kIGBzaWdoYW5kLVx1MDAzZXNpZ25hbGZkX3dxaGAgaW4gYHNpZ25hbGZkX3BvbGxgIGFuZCBgc2lnbmFsZmRfZGVxdWV1ZWAgdW5kZXIgYXBwcm9wcmlhdGUgbG9ja3MuIEFuZCwgZmluYWxseSwgd2hlbiB0aGUgZGVzY3JpcHRvciBpcyByZWxlYXNlZCwgYHdha2VfdXBfcG9sbGZyZWUoXHUwMDI2Y3R4LVx1MDAzZXdxaClgIGFuZCBga2ZyZWVfcmN1KGN0eCwgcmN1KWAgZW5zdXJlIGEgY2xlYW4gUkNVIGNsZWFudXAuXG5cbk5vdywgZm9yIHRoZSBLTVNBTiBhbmFseXNpcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGFkZGl0aW9uIG9mIHRoaXMgc3RydWN0dXJlIGRvZXNuJ3QgbGVhZCB0byBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbjEuICAqKkluaXRpYWxpemF0aW9uOioqIFRoZSBgc2lnbmFsZmRfY3R4YCBmaWVsZHMgKGBsb2NrYCwgYHdxaGAsIGFuZCBgc2lnbWFza2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIHdpdGggYGttYWxsb2Nfb2JqYC4gVGhlIHNwaW5sb2NrIGlzIGluaXRpYWxpemVkIHdpdGggYHNwaW5fbG9ja19pbml0YCwgdGhlIHdhaXRxdWV1ZSBoZWFkIGlzIGluaXRpYWxpemVkIHVzaW5nIGBpbml0X3dhaXRxdWV1ZV9oZWFkYCwgYW5kIGBjdHgtXHUwMDNlc2lnbWFza2AgaXMgaW5pdGlhbGl6ZWQgYnkgYXNzaWdubWVudC4gVGhlIFJDVSBoZWFkIGlzIGluaXRpYWxpemVkIGltcGxpY2l0bHkuIEFsbCBmaWVsZHMgd2l0aGluIHRoZSBjb250ZXh0IGFyZSB0aGVyZWZvcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG5cbjIuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb25zOioqIEkndmUgY2FyZWZ1bGx5IHJldmlld2VkIGhvdyB1c2VyLXNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBjaGFuZ2VzLiBgc2lnbmFsZmRfc2hvd19mZGluZm9gIGNvcGllcyB0aGUgYHNpZ21hc2tgIHVuZGVyIHRoZSBsb2NrLCBjb252ZXJ0cyB0aGUgbWFzayB3aXRoIGBzaWdub3RzZXRgLCBhbmQgdGhlbiBmb3JtYXRzIGl0IGFzIHRleHQuIGBzaWduYWxmZF9kZXF1ZXVlYCB1c2VzIGEgc3RhY2stYWxsb2NhdGVkIHdhaXRxdWV1ZSBlbnRyeSwgc28gdGhlcmUgYXJlIG5vIGlzc3Vlcy4gVGhlIGBzaWduYWxmZF9jb3B5aW5mb2AgZnVuY3Rpb24gaXMgdW5jaGFuZ2VkLCB3aGljaCBtZWFucyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYG5ld2Agc3RydWN0IHJlbWFpbnMgaW50YWN0LiBgc2lnbmFsZmRfcG9sbGAgaW5pdGlhbGl6ZXMgdGhlIGV2ZW50cyBiaXRtYXNrIHRvIDAuIE5vbmUgb2YgdGhlc2UgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuMy4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIHdoaWNoIHdvdWxkIGJlIGEgY3JpdGljYWwgS01TQU4gY29uY2Vybi5cblxuNC4gICoqS01TQU4gQ29uZGl0aW9uczoqKiBJJ3ZlIGdvbmUgdGhyb3VnaCBlYWNoIG9mIHRoZSBmb3VyIHBvdGVudGlhbCBLTVNBTiBjb25kaXRpb25zOlxuICAgICogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBvciB6ZXJvZWQgZmllbGRzLiBUaGUgc3RydWN0IHRoYXQgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgY29udGludWVzIHRvIGJlIHplcm9lZCBvdXQuXG4gICAgKiAgIE5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4gICAgKiAgIEFsbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uLlxuICAgICogICBUaGVyZSdzIG5vIG9wcG9ydHVuaXR5IGZvciBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLCBlaXRoZXIuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIE5lZWRzS01TQU4gaXMgZGVmaW5pdGVseSBgZmFsc2VgLiBUaGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuXG5cbkluc3RlYWQsIEknbGwgZmxhZyBvdGhlciBzYW5pdGl6ZXJzLiBUaGlzIHdpbGwgbmVlZCBMT0NLREVQIGZvciBsb2NraW5nIG9yZGVyL2RlYWRsb2NrIGlzc3VlcyBiZXR3ZWVuIGBjdHgtXHUwMDNlbG9ja2AgYW5kIGBjdXJyZW50LVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9ja2AsIGFuZCBLQVNBTiBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHdhaXRxdWV1ZSBsaWZldGltZS9SQ1UgaXNzdWVzLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGdvb2Qgc29sdXRpb24gdG8gZml4IGEgZnVuZGFtZW50YWwgaXNzdWUuIFRoZSBwZXItZmlsZSB3YWl0cXVldWUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhdm9pZGluZyB0aGUgcHJvYmxlbXMgb2Ygc2hhcmluZyBhIGdsb2JhbCBvbmUuIFRoZSBjb2RlIHBhdGhzIGFyZW4ndCBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGZvY3VzIG5vdyBzaGlmdHMgdG8gc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLCB3aGljaCBpcyB3ZWxsIGNvdmVyZWQgYnkgdGhlIHN0YW5kYXJkIHRvb2xjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2ODgsIk91dHB1dFRva2VucyI6MjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjQ1OjMxLjgyMjY0NzQ1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlZGljYXRlZCB3YWl0cXVldWUgKGB3cWhgKSwgc3BpbmxvY2sgKGBsb2NrYCksIGFuZCBSQ1UtYmFzZWQgZnJlZWluZyAoYHJjdV9oZWFkYCkgdG8gYHN0cnVjdCBzaWduYWxmZF9jdHhgIGluIGBmcy9zaWduYWxmZC5jYCBzbyB0aGF0IG1hc2sgdXBkYXRlcyB2aWEgYHNpZ25hbGZkNGAgcHJvcGVybHkgd2FrZSB1cCB3YWl0ZXJzIGFjcm9zcyBwcm9jZXNzZXMuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxcbjEuIEFsbCBmaWVsZHMgb2YgYHN0cnVjdCBzaWduYWxmZF9jdHhgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYHNwaW5fbG9ja19pbml0KFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spYCwgYGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmN0eC1cXHUwMDNld3FoKWAsIGBjdHgtXFx1MDAzZXNpZ21hc2sgPSAqbWFza2ApLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZSBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgc3RydWN0dXJlIChgc3RydWN0IHNpZ25hbGZkX3NpZ2luZm9gKSByZW1haW5zIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXRgIGluIGBzaWduYWxmZF9jb3B5aW5mbygpYC5cXG4zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgc3luY2hyb25pemF0aW9uLCB3YWl0cXVldWUgb3JkZXJpbmcsIG9yIGxvY2sgaGllcmFyY2hpZXMgKGJldHdlZW4gYGN0eC1cXHUwMDNlbG9ja2AgYW5kIGBzaWdoYW5kLVxcdTAwM2VzaWdsb2NrYCksIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTiwgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBkZWRpY2F0ZWQgd2FpdHF1ZXVlIChgd3FoYCksIHNwaW5sb2NrIChgbG9ja2ApLCBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgKGByY3VfaGVhZGApIHRvIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBpbiBgZnMvc2lnbmFsZmQuY2Agc28gdGhhdCBtYXNrIHVwZGF0ZXMgdmlhIGBzaWduYWxmZDRgIHByb3Blcmx5IHdha2UgdXAgd2FpdGVycyBhY3Jvc3MgcHJvY2Vzc2VzLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZTpcXG4xLiBBbGwgZmllbGRzIG9mIGBzdHJ1Y3Qgc2lnbmFsZmRfY3R4YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKGBzcGluX2xvY2tfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKWAsIGBpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZjdHgtXFx1MDAzZXdxaClgLCBgY3R4LVxcdTAwM2VzaWdtYXNrID0gKm1hc2tgKS5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGUga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHN0cnVjdHVyZSAoYHN0cnVjdCBzaWduYWxmZF9zaWdpbmZvYCkgcmVtYWlucyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0YCBpbiBgc2lnbmFsZmRfY29weWluZm8oKWAuXFxuMy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBpbnZvbHZlIHN5bmNocm9uaXphdGlvbiwgd2FpdHF1ZXVlIG9yZGVyaW5nLCBvciBsb2NrIGhpZXJhcmNoaWVzIChiZXR3ZWVuIGBjdHgtXFx1MDAzZWxvY2tgIGFuZCBgc2lnaGFuZC1cXHUwMDNlc2lnbG9ja2ApLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG5vdCBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7nrb[1] Phase: Succeeded StartedAt: 2026-08-31 22:45:43 +0000 UTC FinishedAt: 2026-08-31 22:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 22:45:43 +0000 UTC FinishedAt: 2026-08-31 22:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2] Phase: Succeeded StartedAt: 2026-08-31 22:45:43 +0000 UTC FinishedAt: 2026-09-01 00:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 22:45:43 +0000 UTC FinishedAt: 2026-09-01 00:22:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 22:45:43 +0000 UTC FinishedAt: 2026-08-31 22:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 22:45:43 +0000 UTC FinishedAt: 2026-08-31 22:46:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowq7nrb/series-workflowq7nrb-convert-artifact-590431430/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 22:46:15 +0000 UTC FinishedAt: 2026-08-31 23:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 22:46:15 +0000 UTC FinishedAt: 2026-08-31 23:07:36 +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:*b47018d7-7814-4007-88fd-d39fa5b8d7d3,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-workflowq7nrb/series-workflowq7nrb-convert-artifact-590431430/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": "24059923-4ebc-4e9d-aeea-b4125f203511", "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-workflowq7nrb/series-workflowq7nrb-build-action-1864241756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 22:46:15 +0000 UTC FinishedAt: 2026-08-31 23:07:26 +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:*b47018d7-7814-4007-88fd-d39fa5b8d7d3,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-workflowq7nrb/series-workflowq7nrb-convert-artifact-590431430/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": "24059923-4ebc-4e9d-aeea-b4125f203511", "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-workflowq7nrb/series-workflowq7nrb-build-action-1864241756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 23:07:36 +0000 UTC FinishedAt: 2026-08-31 23:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 23:07:36 +0000 UTC FinishedAt: 2026-08-31 23:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 23:07:36 +0000 UTC FinishedAt: 2026-08-31 23:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 23:07:36 +0000 UTC FinishedAt: 2026-08-31 23:07:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowq7nrb/series-workflowq7nrb-convert-artifact-2590817561/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 23:07:46 +0000 UTC FinishedAt: 2026-08-31 23:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 23:07:46 +0000 UTC FinishedAt: 2026-08-31 23:09:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*24059923-4ebc-4e9d-aeea-b4125f203511,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-workflowq7nrb/series-workflowq7nrb-build-action-1864241756/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-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 23:09:57 +0000 UTC FinishedAt: 2026-08-31 23:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 23:09:57 +0000 UTC FinishedAt: 2026-08-31 23:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 23:09:57 +0000 UTC FinishedAt: 2026-08-31 23:29:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 23:09:57 +0000 UTC FinishedAt: 2026-08-31 23:29:44 +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:*b47018d7-7814-4007-88fd-d39fa5b8d7d3,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-workflowq7nrb/series-workflowq7nrb-convert-artifact-2590817561/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": "74d8a922-ebc6-44e2-a5aa-90e38f6006bb", "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-workflowq7nrb/series-workflowq7nrb-build-action-240569461/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 23:09:57 +0000 UTC FinishedAt: 2026-08-31 23:29:34 +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:*b47018d7-7814-4007-88fd-d39fa5b8d7d3,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-workflowq7nrb/series-workflowq7nrb-convert-artifact-2590817561/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": "74d8a922-ebc6-44e2-a5aa-90e38f6006bb", "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-workflowq7nrb/series-workflowq7nrb-build-action-240569461/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 23:29:44 +0000 UTC FinishedAt: 2026-08-31 23:29:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 23:29:44 +0000 UTC FinishedAt: 2026-08-31 23:29:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 23:29:44 +0000 UTC FinishedAt: 2026-08-31 23:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 23:29:44 +0000 UTC FinishedAt: 2026-08-31 23:31:47 +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:*74d8a922-ebc6-44e2-a5aa-90e38f6006bb,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-workflowq7nrb/series-workflowq7nrb-build-action-240569461/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-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 23:31:56 +0000 UTC FinishedAt: 2026-09-01 00:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 23:31:56 +0000 UTC FinishedAt: 2026-09-01 00:22:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"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:*24059923-4ebc-4e9d-aeea-b4125f203511,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*74d8a922-ebc6-44e2-a5aa-90e38f6006bb,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-workflowq7nrb/series-workflowq7nrb-build-action-1864241756/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-workflowq7nrb/series-workflowq7nrb-build-action-240569461/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 23:31:56 +0000 UTC FinishedAt: 2026-08-31 23:32:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 23:31:56 +0000 UTC FinishedAt: 2026-08-31 23:32:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"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-workflowq7nrb/series-workflowq7nrb-convert-artifact-1125688846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 23:31:56 +0000 UTC FinishedAt: 2026-08-31 23:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 23:31:56 +0000 UTC FinishedAt: 2026-08-31 23:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 23:31:56 +0000 UTC FinishedAt: 2026-08-31 23:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 23:32:06 +0000 UTC FinishedAt: 2026-09-01 00:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7nrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["signalfd_poll","signalfd_dequeue","signalfd_release","do_signalfd4","signalfd_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SIGNALFD"],"series_id":"15596c67-4468-4f2e-a38f-36f12ad706be","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 23:32:06 +0000 UTC FinishedAt: 2026-09-01 00:22:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*24059923-4ebc-4e9d-aeea-b4125f203511,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*74d8a922-ebc6-44e2-a5aa-90e38f6006bb,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-workflowq7nrb/series-workflowq7nrb-build-action-1864241756/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-workflowq7nrb/series-workflowq7nrb-build-action-240569461/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-workflowq7nrb/series-workflowq7nrb-convert-artifact-1125688846/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,}