Name: series-workflowgmj9r Phase: Succeeded StartedAt: 2026-09-03 01:12:47 +0000 UTC FinishedAt: 2026-09-03 05:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[0] Phase: Succeeded StartedAt: 2026-09-03 01:12:47 +0000 UTC FinishedAt: 2026-09-03 02:06:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 01:12:47 +0000 UTC FinishedAt: 2026-09-03 02:06:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctrl_dumppolicy_start", "ctrl_dumppolicy_done", "ctrl_dumppolicy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeV9zdGFydCYjMzQ7LAogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3lfZG9uZSYjMzQ7LAogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3kmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgKGB0cnlfbW9kdWxlX2dldCgpYCAvIGBtb2R1bGVfcHV0KClgKSBkdXJpbmcgR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1wIG9wZXJhdGlvbnMgKGBjdHJsX2R1bXBwb2xpY3lfc3RhcnRgIGFuZCBgY3RybF9kdW1wcG9saWN5X2RvbmVgKS4gVGhpcyBwcmV2ZW50cyB0aGUgbW9kdWxlIGltcGxlbWVudGluZyB0aGUgZmFtaWx5IGZyb20gYmVpbmcgdW5sb2FkZWQgd2hpbGUgYSBwb2xpY3kgZHVtcCBpcyBpbiBwcm9ncmVzcy5cblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIG1vZHVsZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAvIGludmFsaWQgY29kZSBvciBkYXRhIGFjY2VzcyBvbiBtb2R1bGUgdW5sb2FkKSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgZGF0YSBleHBvc3VyZSwgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBtb2R1bGUgcmVmZXJlbmNlIGhvbGRpbmcgKHRyeV9tb2R1bGVfZ2V0L21vZHVsZV9wdXQpIGZvciBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHBvbGljeSBkdW1wcyBpbiBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKSBhbmQgY3RybF9kdW1wcG9saWN5X2RvbmUoKSwgYWx0ZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBlcnJvciBjbGVhbnVwIHBhdGhzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEdlbmVyaWMgTmV0bGluayBDVFJMX0NNRF9HRVRQT0xJQ1kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMzdmOTI3ODVmNjk3OGQzYWUxMWU3MzMyZTM0Y2IyMDNkNjlhYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMjowNTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jXG5pbmRleCAwZGEzOWVhZWQyNTVmLi40MWQzNzQ0MmYxODY4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jXG5AQCAtMTUxMyw2ICYjNDM7MTUxMyw3IEBAIHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7XG4gXHRzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGU7XG4gXHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xuIFx0c3RydWN0IGdlbmxfb3BfaXRlciAqb3BfaXRlcjtcbiYjNDM7XHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiBcdHUzMiBvcDtcbiBcdHUxNiBmYW1faWQ7XG4gXHR1OCBkdW1wX21hcDoxLFxuQEAgLTE1NTUsNiAmIzQzOzE1NTYsOSBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0Y3R4LVx1MDAzZXJ0ID0gcnQ7XG4mIzQzO1x0Y3R4LVx1MDAzZW93bmVyID0gcnQtXHUwMDNlbW9kdWxlO1xuJiM0MztcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0aWYgKHRiW0NUUkxfQVRUUl9PUF0pIHtcbiBcdFx0c3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7XG5AQCAtMTU2NSw3ICYjNDM7MTU2OSw3IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0ZXJyID0gZ2VubF9nZXRfY21kX2JvdGgoY3R4LVx1MDAzZW9wLCBydCwgXHUwMDI2ZG9pdCwgXHUwMDI2ZHVtcCk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHROTF9TRVRfQkFEX0FUVFIoY2ItXHUwMDNlZXh0YWNrLCB0YltDVFJMX0FUVFJfT1BdKTtcbi1cdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGRvaXQucG9saWN5KSB7XG5AQCAtMTU4MywxNiAmIzQzOzE1ODcsMjAgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSlcbi1cdFx0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1x0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSkge1xuJiM0MztcdFx0XHRlcnIgPSAtRU5PREFUQTtcbiYjNDM7XHRcdFx0Z290byBlcnJfcHV0X293bmVyO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRjdHgtXHUwMDNlZHVtcF9tYXAgPSAxO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGN0eC1cdTAwM2VvcF9pdGVyID0ga21hbGxvY19vYmooKmN0eC1cdTAwM2VvcF9pdGVyKTtcbi1cdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4mIzQzO1x0fVxuIFxuIFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbkBAIC0xNjI0LDYgJiM0MzsxNjMyLDggQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cdTAwM2VzdGF0ZSk7XG4gZXJyX2ZyZWVfb3BfaXRlcjpcbiBcdGtmcmVlKGN0eC1cdTAwM2VvcF9pdGVyKTtcbiYjNDM7ZXJyX3B1dF9vd25lcjpcbiYjNDM7XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzYwLDYgJiM0MzsxNzcwLDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXG4gXHRrZnJlZShjdHgtXHUwMDNlb3BfaXRlcik7XG4gXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5X3N0YXJ0JiMzNDssCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeV9kb25lJiMzNDssCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG1vZHVsZSByZWZlcmVuY2UgaG9sZGluZyAodHJ5X21vZHVsZV9nZXQvbW9kdWxlX3B1dCkgZm9yIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgcG9saWN5IGR1bXBzIGluIGN0cmxfZHVtcHBvbGljeV9zdGFydCgpIGFuZCBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpLCBhbHRlcmluZyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGVycm9yIGNsZWFudXAgcGF0aHMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgR2VuZXJpYyBOZXRsaW5rIENUUkxfQ01EX0dFVFBPTElDWS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUzN2Y5Mjc4NWY2OTc4ZDNhZTExZTczMzJlMzRjYjIwM2Q2OWFiZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAyOjA1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCAwZGEzOWVhZWQyNTVmLi40MWQzNzQ0MmYxODY4IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtMTUxMyw2ICYjNDM7MTUxMyw3IEBAIHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7CiAJc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlOwogCWNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqcnQ7CiAJc3RydWN0IGdlbmxfb3BfaXRlciAqb3BfaXRlcjsKJiM0MzsJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdTMyIG9wOwogCXUxNiBmYW1faWQ7CiAJdTggZHVtcF9tYXA6MSwKQEAgLTE1NTUsNiAmIzQzOzE1NTYsOSBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJY3R4LSZndDtydCA9IHJ0OwomIzQzOwljdHgtJmd0O293bmVyID0gcnQtJmd0O21vZHVsZTsKJiM0MzsJaWYgKCF0cnlfbW9kdWxlX2dldChjdHgtJmd0O293bmVyKSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwogCiAJaWYgKHRiW0NUUkxfQVRUUl9PUF0pIHsKIAkJc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7CkBAIC0xNTY1LDcgJiM0MzsxNTY5LDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQllcnIgPSBnZW5sX2dldF9jbWRfYm90aChjdHgtJmd0O29wLCBydCwgJmFtcDtkb2l0LCAmYW1wO2R1bXApOwogCQlpZiAoZXJyKSB7CiAJCQlOTF9TRVRfQkFEX0FUVFIoY2ItJmd0O2V4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7Ci0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gZXJyX3B1dF9vd25lcjsKIAkJfQogCiAJCWlmIChkb2l0LnBvbGljeSkgewpAQCAtMTU4MywxNiAmIzQzOzE1ODcsMjAgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJCWdvdG8gZXJyX2ZyZWVfc3RhdGU7CiAJCX0KIAotCQlpZiAoIWN0eC0mZ3Q7c3RhdGUpCi0JCQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CQlpZiAoIWN0eC0mZ3Q7c3RhdGUpIHsKJiM0MzsJCQllcnIgPSAtRU5PREFUQTsKJiM0MzsJCQlnb3RvIGVycl9wdXRfb3duZXI7CiYjNDM7CQl9CiAKIAkJY3R4LSZndDtkdW1wX21hcCA9IDE7CiAJCXJldHVybiAwOwogCX0KIAogCWN0eC0mZ3Q7b3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtJmd0O29wX2l0ZXIpOwotCWlmICghY3R4LSZndDtvcF9pdGVyKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCFjdHgtJmd0O29wX2l0ZXIpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9wdXRfb3duZXI7CiYjNDM7CX0KIAogCWdlbmxfb3BfaXRlcl9pbml0KHJ0LCBjdHgtJmd0O29wX2l0ZXIpOwogCWN0eC0mZ3Q7ZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtJmd0O29wX2l0ZXIpOwpAQCAtMTYyNCw2ICYjNDM7MTYzMiw4IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAluZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LSZndDtzdGF0ZSk7CiBlcnJfZnJlZV9vcF9pdGVyOgogCWtmcmVlKGN0eC0mZ3Q7b3BfaXRlcik7CiYjNDM7ZXJyX3B1dF9vd25lcjoKJiM0MzsJbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzYwLDYgJiM0MzsxNzcwLDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAKIAlrZnJlZShjdHgtJmd0O29wX2l0ZXIpOwogCW5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtJmd0O3N0YXRlKTsKJiM0MzsJbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKTsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2VubCBQb2xpY3kgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBMb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYC4gUmlnaHQsIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGNoYW5nZSBpcyBhY3R1YWxseSAqZG9pbmcqLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYC4gQWgsIEkgc2VlLCBpdCYjMzk7cyBhYm91dCBtb2R1bGUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgZHVyaW5nIHBvbGljeSBkdW1wcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBDVFJMX0NNRF9HRVRQT0xJQ1lgLiBJdCBhcHBlYXJzIHRoZXkmIzM5O3JlIGFkZGluZyBgY3R4LSZndDtvd25lciA9IHJ0LSZndDttb2R1bGU7YCBhbmQgaW1wbGVtZW50aW5nIGB0cnlfbW9kdWxlX2dldCgpYCBhbmQgYG1vZHVsZV9wdXQoKWAgY2FsbHMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgdHJhY2tpbmcgbW9kdWxlIHVzYWdlIHRvIHByZXZlbnQgdW5sb2FkIGlzc3VlcywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIHJlc291cmNlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgb3V0bGl2ZSB0aGUgcmVxdWVzdCBpdHNlbGYgZHVyaW5nIHBvbGljeSBkdW1wcyBpbiBHZW5lcmljIE5ldGxpbmsuCgpJbnRlcmVzdGluZywgdGhpcyBpcyBwcm9iYWJseSB0byBhZGRyZXNzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVmZXJlbmNlIGNvdW50IGVycm9ycy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgY29udGV4dCBpcyBpbiBvcmRlciwgSSYjMzk7bGwgcnVuIHRoZSBhcHByb3ByaWF0ZSB0b29scyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIGluIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdHJsX2R1bXBwb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNTIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdHJsX3BvbGljeV9wb2xpY3lbXSA9IHtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNTI5LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTUzMDpzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNTMxLXtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjM5LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY0MDpzdGF0aWMgdm9pZCAqY3RybF9kdW1wcG9saWN5X3ByZXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NDEtXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjU3LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY1ODpzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NTktXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjcxLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY3MjpcdGhkciA9IGN0cmxfZHVtcHBvbGljeV9wcmVwKHNrYiwgY2IpO1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY3My1cdGlmICghaGRyKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MTAtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzExOnN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MTIte1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MjMtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzI0Olx0XHRcdGlmIChjdHJsX2R1bXBwb2xpY3lfcHV0X29wKHNrYiwgY2IsIFx1MDAyNmRvaXQsIFx1MDAyNmR1bXBpdCkpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzI1LVx0XHRcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTczMS1cdFx0d2hpbGUgKGN0eC1cdTAwM2VkdW1wX21hcCkge1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTczMjpcdFx0XHRpZiAoY3RybF9kdW1wcG9saWN5X3B1dF9vcChza2IsIGNiLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTczMy1cdFx0XHRcdFx0XHQgICBcdTAwMjZjdHgtXHUwMDNlb3BfaXRlci1cdTAwM2Vkb2l0LFxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NDMtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzQ0Olx0XHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NDUtXHRcdGlmICghaGRyKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NjYtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzY3OnN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc2OC17XG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTc3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGdlbmxfY3RybF9vcHNbXSA9IHtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzk3LVx0XHQubWF4YXR0clx0PSBBUlJBWV9TSVpFKGN0cmxfcG9saWN5X3BvbGljeSkgLSAxLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTc5ODpcdFx0LnN0YXJ0XHRcdD0gY3RybF9kdW1wcG9saWN5X3N0YXJ0LFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTc5OTpcdFx0LmR1bXBpdFx0XHQ9IGN0cmxfZHVtcHBvbGljeSxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE4MDA6XHRcdC5kb25lXHRcdD0gY3RybF9kdW1wcG9saWN5X2RvbmUsXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xODAxLVx0XHQuZmxhZ3NcdFx0PSBHRU5MX0NNRF9DQVBfRFVNUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIGdlbmV0bGluay5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlnIGludG8gdGhlIGBuZXQvbmV0bGluay9nZW5ldGxpbmsuY2AgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZXN0YWJsaXNoIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZWNvc3lzdGVtIG9mIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcywgdG8gZ3Jhc3AgaG93IHRoaXMgc3BlY2lmaWMgZmlsZSBmaXRzIGludG8gdGhlIGxhcmdlciBnZW5ldGxpbmsgZnJhbWV3b3JrLiBJIHdhbnQgdG8gc2VlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGZsb3cuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24sIG1lc3NhZ2Ugcm91dGluZywgYW5kIHRoZSBjb3JlIGludGVyYWN0aW9uIGxvZ2ljLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBjbGFyaWZ5IHRoZSBwdXJwb3NlIG9mICp0aGlzKiBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MzA6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4xNTMxOlx0e1xuMTUzMjpcdFx0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcbjE1MzM6XHRcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4xNTM0Olx0XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4xNTM1Olx0XHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xuMTUzNjpcdFx0c3RydWN0IGdlbmxfb3BfaXRlciBpO1xuMTUzNzpcdFx0aW50IGVycjtcbjE1Mzg6XHRcbjE1Mzk6XHRcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXHUwMDNlIHNpemVvZihjYi1cdTAwM2VjdHgpKTtcbjE1NDA6XHRcbjE1NDE6XHRcdGlmICghdGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0gXHUwMDI2XHUwMDI2ICF0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKVxuMTU0MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1NDM6XHRcbjE1NDQ6XHRcdGlmICh0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSkge1xuMTU0NTpcdFx0XHRjdHgtXHUwMDNlZmFtX2lkID0gbmxhX2dldF91MTYodGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pO1xuMTU0NjpcdFx0fSBlbHNlIHtcbjE1NDc6XHRcdFx0cnQgPSBnZW5sX2ZhbWlseV9maW5kX2J5bmFtZShcbjE1NDg6XHRcdFx0XHRubGFfZGF0YSh0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKSk7XG4xNTQ5Olx0XHRcdGlmICghcnQpXG4xNTUwOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTUxOlx0XHRcdGN0eC1cdTAwM2VmYW1faWQgPSBydC1cdTAwM2VpZDtcbjE1NTI6XHRcdH1cbjE1NTM6XHRcbjE1NTQ6XHRcdHJ0ID0gZ2VubF9mYW1pbHlfZmluZF9ieWlkKGN0eC1cdTAwM2VmYW1faWQpO1xuMTU1NTpcdFx0aWYgKCFydClcbjE1NTY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTU3Olx0XG4xNTU4Olx0XHRjdHgtXHUwMDNlcnQgPSBydDtcbjE1NTk6XHRcdGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtcbjE1NjA6XHRcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbjE1NjE6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTYyOlx0XG4xNTYzOlx0XHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xuMTU2NDpcdFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcDtcbjE1NjU6XHRcbjE1NjY6XHRcdFx0Y3R4LVx1MDAzZXNpbmdsZV9vcCA9IHRydWU7XG4xNTY3Olx0XHRcdGN0eC1cdTAwM2VvcCA9IG5sYV9nZXRfdTMyKHRiW0NUUkxfQVRUUl9PUF0pO1xuMTU2ODpcdFxuMTU2OTpcdFx0XHRlcnIgPSBnZW5sX2dldF9jbWRfYm90aChjdHgtXHUwMDNlb3AsIHJ0LCBcdTAwMjZkb2l0LCBcdTAwMjZkdW1wKTtcbjE1NzA6XHRcdFx0aWYgKGVycikge1xuMTU3MTpcdFx0XHRcdE5MX1NFVF9CQURfQVRUUihjYi1cdTAwM2VleHRhY2ssIHRiW0NUUkxfQVRUUl9PUF0pO1xuMTU3MjpcdFx0XHRcdGdvdG8gZXJyX3B1dF9vd25lcjtcbjE1NzM6XHRcdFx0fVxuMTU3NDpcdFxuMTU3NTpcdFx0XHRpZiAoZG9pdC5wb2xpY3kpIHtcbjE1NzY6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTU3NzpcdFx0XHRcdFx0XHRcdFx0ICAgICBkb2l0LnBvbGljeSxcbjE1Nzg6XHRcdFx0XHRcdFx0XHRcdCAgICAgZG9pdC5tYXhhdHRyKTtcbjE1Nzk6XHRcdFx0XHRpZiAoZXJyKVxuMTU4MDpcdFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbjE1ODE6XHRcdFx0fVxuMTU4MjpcdFx0XHRpZiAoZHVtcC5wb2xpY3kpIHtcbjE1ODM6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTU4NDpcdFx0XHRcdFx0XHRcdFx0ICAgICBkdW1wLnBvbGljeSxcbjE1ODU6XHRcdFx0XHRcdFx0XHRcdCAgICAgZHVtcC5tYXhhdHRyKTtcbjE1ODY6XHRcdFx0XHRpZiAoZXJyKVxuMTU4NzpcdFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbjE1ODg6XHRcdFx0fVxuMTU4OTpcdFxuMTU5MDpcdFx0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSkge1xuMTU5MTpcdFx0XHRcdGVyciA9IC1FTk9EQVRBO1xuMTU5MjpcdFx0XHRcdGdvdG8gZXJyX3B1dF9vd25lcjtcbjE1OTM6XHRcdFx0fVxuMTU5NDpcdFxuMTU5NTpcdFx0XHRjdHgtXHUwMDNlZHVtcF9tYXAgPSAxO1xuMTU5NjpcdFx0XHRyZXR1cm4gMDtcbjE1OTc6XHRcdH1cbjE1OTg6XHRcbjE1OTk6XHRcdGN0eC1cdTAwM2VvcF9pdGVyID0ga21hbGxvY19vYmooKmN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDA6XHRcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbjE2MDE6XHRcdFx0ZXJyID0gLUVOT01FTTtcbjE2MDI6XHRcdFx0Z290byBlcnJfcHV0X293bmVyO1xuMTYwMzpcdFx0fVxuMTYwNDpcdFxuMTYwNTpcdFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDY6XHRcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDc6XHRcbjE2MDg6XHRcdGZvciAoZ2VubF9vcF9pdGVyX2luaXQocnQsIFx1MDAyNmkpOyBnZW5sX29wX2l0ZXJfbmV4dChcdTAwMjZpKTsgKSB7XG4xNjA5Olx0XHRcdGlmIChpLmRvaXQucG9saWN5KSB7XG4xNjEwOlx0XHRcdFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFx1MDAyNmN0eC1cdTAwM2VzdGF0ZSxcbjE2MTE6XHRcdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0LnBvbGljeSxcbjE2MTI6XHRcdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0Lm1heGF0dHIpO1xuMTYxMzpcdFx0XHRcdGlmIChlcnIpXG4xNjE0Olx0XHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuMTYxNTpcdFx0XHR9XG4xNjE2Olx0XHRcdGlmIChpLmR1bXBpdC5wb2xpY3kpIHtcbjE2MTc6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTYxODpcdFx0XHRcdFx0XHRcdFx0ICAgICBpLmR1bXBpdC5wb2xpY3ksXG4xNjE5Olx0XHRcdFx0XHRcdFx0XHQgICAgIGkuZHVtcGl0Lm1heGF0dHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgdGFyZ2V0ZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkZvY3VzaW5nIG9uIGEgU3BlY2lmaWMgU2VjdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgMTc2MC0xODEwLiBJJiMzOTttIHRha2luZyBhIHRhcmdldGVkIGFwcHJvYWNoIGhlcmUgYmVjYXVzZSwgYmFzZWQgb24gbXkgcHJpb3IgYW5hbHlzaXMgYW5kIGV4cGVyaWVuY2UsIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgcGFydGljdWxhcmx5IHJlbGV2YW50IG9yIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHdpdGhpbiB0aGlzIHJhbmdlLiBJdCBjb3VsZCBiZSBhIGtleSBhc3N1bXB0aW9uIGJlaW5nIG1hZGUsIGEgY3JpdGljYWwgZGF0YSBwb2ludCBiZWluZyBpbnRyb2R1Y2VkLCBvciBwZXJoYXBzIGEgc2VjdGlvbiB3aGVyZSB0aGUgYXJndW1lbnRhdGlvbiB0YWtlcyBhbiBpbnRlcmVzdGluZyB0dXJuIHRoYXQgd2FycmFudHMgZnVydGhlciBleGFtaW5hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0JiMzOTtzIGNvbnRyaWJ1dGlvbiB0byB0aGUgYmlnZ2VyIHBpY3R1cmUsIHNlZSBpZiBpdCBpcyByZWxldmFudCB0byB0aGUgcHJvYmxlbSBhdCBoYW5kLCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIG15IGh5cG90aGVzaXMuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VnbWVudCB0byBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiBhc3Nlc3NpbmcgdGhlIHBhcGVyIG9yIGRvY3VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NjA6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc2MTpcdFxuMTc2MjpcdG5sYV9wdXRfZmFpbHVyZTpcbjE3NjM6XHRcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcbjE3NjQ6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc2NTpcdH1cbjE3NjY6XHRcbjE3Njc6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjE3Njg6XHR7XG4xNzY5Olx0XHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuMTc3MDpcdFxuMTc3MTpcdFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuMTc3MjpcdFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cdTAwM2VzdGF0ZSk7XG4xNzczOlx0XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4xNzc0Olx0XHRyZXR1cm4gMDtcbjE3NzU6XHR9XG4xNzc2Olx0XG4xNzc3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBnZW5sX2N0cmxfb3BzW10gPSB7XG4xNzc4Olx0XHR7XG4xNzc5Olx0XHRcdC5jbWRcdFx0PSBDVFJMX0NNRF9HRVRGQU1JTFksXG4xNzgwOlx0XHRcdC52YWxpZGF0ZVx0PSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNULFxuMTc4MTpcdFx0XHQucG9saWN5XHRcdD0gY3RybF9wb2xpY3lfZmFtaWx5LFxuMTc4MjpcdFx0XHQubWF4YXR0clx0PSBBUlJBWV9TSVpFKGN0cmxfcG9saWN5X2ZhbWlseSkgLSAxLFxuMTc4MzpcdFx0XHQuZG9pdFx0XHQ9IGN0cmxfZ2V0ZmFtaWx5LFxuMTc4NDpcdFx0XHQuZmxhZ3NcdFx0PSBHRU5MX0NNRF9DQVBfRE8sXG4xNzg1Olx0XHR9LFxuMTc4NjpcdFx0e1xuMTc4NzpcdFx0XHQuY21kXHRcdD0gQ1RSTF9DTURfR0VURkFNSUxZLFxuMTc4ODpcdFx0XHQudmFsaWRhdGVcdD0gR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG4xNzg5Olx0XHRcdC5wb2xpY3lcdFx0PSBjdHJsX3BvbGljeV9mYW1pbHksXG4xNzkwOlx0XHRcdC5tYXhhdHRyXHQ9IEFSUkFZX1NJWkUoY3RybF9wb2xpY3lfZmFtaWx5KSAtIDEsXG4xNzkxOlx0XHRcdC5kdW1waXRcdFx0PSBjdHJsX2R1bXBmYW1pbHksXG4xNzkyOlx0XHRcdC5mbGFnc1x0XHQ9IEdFTkxfQ01EX0NBUF9EVU1QLFxuMTc5MzpcdFx0fSxcbjE3OTQ6XHRcdHtcbjE3OTU6XHRcdFx0LmNtZFx0XHQ9IENUUkxfQ01EX0dFVFBPTElDWSxcbjE3OTY6XHRcdFx0LnBvbGljeVx0XHQ9IGN0cmxfcG9saWN5X3BvbGljeSxcbjE3OTc6XHRcdFx0Lm1heGF0dHJcdD0gQVJSQVlfU0laRShjdHJsX3BvbGljeV9wb2xpY3kpIC0gMSxcbjE3OTg6XHRcdFx0LnN0YXJ0XHRcdD0gY3RybF9kdW1wcG9saWN5X3N0YXJ0LFxuMTc5OTpcdFx0XHQuZHVtcGl0XHRcdD0gY3RybF9kdW1wcG9saWN5LFxuMTgwMDpcdFx0XHQuZG9uZVx0XHQ9IGN0cmxfZHVtcHBvbGljeV9kb25lLFxuMTgwMTpcdFx0XHQuZmxhZ3NcdFx0PSBHRU5MX0NNRF9DQVBfRFVNUCxcbjE4MDI6XHRcdH0sXG4xODAzOlx0fTtcbjE4MDQ6XHRcbjE4MDU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGdlbmxfY3RybF9ncm91cHNbXSA9IHtcbjE4MDY6XHRcdHsgLm5hbWUgPSBcJiMzNDtub3RpZnlcJiMzNDssIH0sXG4xODA3Olx0fTtcbjE4MDg6XHRcbjE4MDk6XHRzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGdlbmxfY3RybCBfX3JvX2FmdGVyX2luaXQgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcwNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCYjMzk7cyB0b3VjaGluZyBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBpbnRlcmVzdC4gR2VuZXJpYyBuZXRsaW5rIGlzICpjb3JlKiBuZXR3b3JraW5nLCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldGxpbmsgc29ja2V0cyAoYEFGX05FVExJTktgLCBgTkVUTElOS19HRU5FUklDYCksIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBJIGtub3cgdGhlIGNvbnRyb2xsZXIgZmFtaWx5IGBHRU5MX0lEX0NUUkxgIGhhbmRsZXMgYENUUkxfQ01EX0dFVFBPTElDWWAgZHVtcCByZXF1ZXN0cy4KCk15IG1haW4gY29uY2VybiBpcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBwb2xpY3kgZHVtcHMuIFJpZ2h0LCB3aGVuIGR1bXBpbmcgcG9saWN5IHVzaW5nIGBDVFJMX0NNRF9HRVRQT0xJQ1lgLCBgY3RybF9kdW1wcG9saWN5X3N0YXJ0KClgIGdyYWJzIGEgcmVmZXJlbmNlIHRvIHRoZSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IG1vZHVsZSB3aXRoIGB0cnlfbW9kdWxlX2dldChjdHgtJmd0O293bmVyKWAgYW5kIHN0b3JlcyBpdC4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIHdpbmRvdyB3aGVyZSB0aGUgbW9kdWxlIGNvdWxkIGJlIHVubG9hZGVkIGlmIG5vdCBwcm9wZXJseSBwcm90ZWN0ZWQgd2hpbGUgcG9saWN5IGR1bXBpbmcgaXMgYWN0aXZlLiBUaGUgY2xlYW51cCBpbiBgY3RybF9kdW1wcG9saWN5X2RvbmUoKWAgZG9lcyBhIGBtb2R1bGVfcHV0KGN0eC0mZ3Q7b3duZXIpYCB0byByZWxlYXNlIGl0LiBJbXBvcnRhbnRseSwgdGhlIGVycm9yIHBhdGhzIGluIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYWxzbyByZWxlYXNlIHRoZSBtb2R1bGUgcmVmIHZpYSBgZ290byBlcnJfcHV0X293bmVyYC4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhpcyB3YXJyYW50cyBmdXp6aW5nOgoKKiAgICoqSXMgaXQgaW4gY29yZSBrZXJuZWwgbG9naWMvcmVhY2hhYmxlIGRyaXZlcnM/KiogWWVwLCBnZW5lcmljIG5ldGxpbmsgY29yZSwgd2hpY2ggbWFrZXMgaXQgaGlnaC12YWx1ZS4KKiAgICoqSXMgaXQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZT8qKiBBYnNvbHV0ZWx5LCB0aHJvdWdoIGBDVFJMX0NNRF9HRVRQT0xJQ1lgIG9uIGBORVRMSU5LX0dFTkVSSUNgLiBUaGlzIGlzIGtleS4KKiAgICoqRG9lcyBpdCBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcz8qKiBZZXMsIGNyaXRpY2FsbHksIGl0JiMzOTtzIGludHJvZHVjaW5nIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIHBvbGljeSBkdW1wcyB0byBwcmV2ZW50IG1vZHVsZSB1bmxvYWRpbmcgb3IgdXNlLWFmdGVyLWZyZWUgd2hpbGUgYSBwb2xpY3kgaXMgYmVpbmcgZHVtcGVkLiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBjaGFuZ2UgYW5kIGNoYW5nZXMgZXJyb3IvY2xlYW51cCBwYXRocy4KClRoZSBhbnN3ZXIgaXMgKip3b3J0aCBmdXp6aW5nKiouIFRoaXMgc291bmRzIGxpa2UgYSBwcmltZSB0YXJnZXQuCgpOb3cgSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGVuYWJsZSBHZW5lcmljIE5ldGxpbmsuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L25ldGxpbmsvTWFrZWZpbGVgIGFuZCB0aGVuIGBuZXQvS2NvbmZpZ2Agb3IgYG5ldC9uZXRsaW5rL0tjb25maWdgIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXRsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2JhdF9hbGdvLmM6MTg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMtNDMtI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYzo0NDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYy00NS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuYy0yOC0jaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuYzoyOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2JhdF92LmMtMzAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxuLS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQwLSNpbmNsdWRlIFx1MDAzY25ldC9hcnAuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmM6NDE6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00Mi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L2FycC5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzozOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTQwLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L2RzZmllbGQuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjM5OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTQwLSNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ0LSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo0NTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ2LSNpbmNsdWRlIFx1MDAzY25ldC9pZl9pbmV0Ni5oXHUwMDNlXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTMyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3V0c25hbWUuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjMzOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTM0LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2Vcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQyOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00My0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTItXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6MzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy00LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYy0yLVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjM6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNC1cbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0yOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MzA6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0zMS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZXZlbnQuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM6ODojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTktXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6MTE6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC0xMi1cbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtNi1cbm5ldC9kZXZsaW5rL2NvcmUuYzo3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvY29yZS5jLTgtI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4tLVxubmV0L2RldmxpbmsvZGV2LmMtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxubmV0L2RldmxpbmsvZGV2LmM6ODojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9kZXZsaW5rL2Rldi5jLTktI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuLS1cbm5ldC9kZXZsaW5rL2hlYWx0aC5jLTYtXG5uZXQvZGV2bGluay9oZWFsdGguYzo3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvaGVhbHRoLmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4tLVxubmV0L2RldmxpbmsvbmV0bGluay5jLTYtXG5uZXQvZGV2bGluay9uZXRsaW5rLmM6NzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9kZXZsaW5rL25ldGxpbmsuYy04LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0tXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5jLTctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy05LVxuLS1cbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaDoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTItXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTI2MD1pbnQgZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMjg3LSAqIGV0aG5sX3JlcGx5X2luaXQoKSAtIENyZWF0ZSBza2IgZm9yIGEgcmVwbHkgYW5kIGZpbGwgZGV2aWNlIGlkZW50aWZpY2F0aW9uXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6Mjg4OiAqIEBwYXlsb2FkOiAgICAgIHBheWxvYWQgbGVuZ3RoICh3aXRob3V0IG5ldGxpbmsgYW5kIGdlbmV0bGluayBoZWFkZXIpXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMjg5LSAqIEBkZXY6ICAgICAgICAgIGRldmljZSB0aGUgcmVwbHkgaXMgYWJvdXQgKG1heSBiZSBudWxsKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy0yOTEtICogQGhkcl9hdHRydHlwZTogYXR0cmlidXRlIHR5cGUgZm9yIGNvbW1vbiBoZWFkZXJcbm5ldC9ldGh0b29sL25ldGxpbmsuYzoyOTI6ICogQGluZm86ICAgICAgICAgZ2VuZXRsaW5rIGluZm8gb2YgdGhlIHJlY2VpdmVkIHBhY2tldCB3ZSByZXNwb25kIHRvXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMjkzLSAqIEBlaGRycDogICAgICAgIHBsYWNlIHRvIHN0b3JlIHBheWxvYWQgcG9pbnRlciByZXR1cm5lZCBieSBnZW5sbXNnX25ldygpXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTExNTU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBldGhubF9uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTExNTgtXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6MTE1OTovKiBnZW5ldGxpbmsgc2V0dXAgKi9cbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xMTYwLVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz0xNTk3PXN0YXRpYyBpbnQgX19pbml0IGV0aG5sX2luaXQodm9pZClcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTYwMS1cdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmV0aHRvb2xfZ2VubF9mYW1pbHkpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjE2MDI6XHRpZiAoV0FSTihyZXQgXHUwMDNjIDAsIFwmIzM0O2V0aHRvb2w6IGdlbmV0bGluayBmYW1pbHkgcmVnaXN0cmF0aW9uIGZhaWxlZFwmIzM0OykpXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTYwMy1cdFx0cmV0dXJuIHJldDtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmgtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxubmV0L2V0aHRvb2wvbmV0bGluay5oOjg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvZXRodG9vbC9uZXRsaW5rLmgtOS0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4tLVxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNy0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2hhbmRzaGFrZS9nZW5sLmMtOS1cbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuaC0xMC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL2dlbmwuaDoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvZ2VubC5oLTEyLVxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMy0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTQ6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTktI2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjIwOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvaGFuZHNoYWtlLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMS0jaW5jbHVkZSBcdTAwM2NuZXQvdGxzX3Byb3QuaFx1MDAzZVxuLS1cbm5ldC9oYW5kc2hha2UvdHJhY2UuYy0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL3RyYWNlLmM6MTY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL3RyYWNlLmMtMTctXG4tLVxubmV0L2hzci9oc3JfbmV0bGluay5jLTEyLSNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxubmV0L2hzci9oc3JfbmV0bGluay5jOjEzOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2hzci9oc3JfbmV0bGluay5jLTE0LSNpbmNsdWRlIFwmIzM0O2hzcl9tYWluLmhcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg9NTE9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjE1NF9mYW1pbHk7XG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtNTItXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg6NTM6LyogZ2VuZXRsaW5rIG9wcy9ncm91cHMgKi9cbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC01NC1pbnQgaWVlZTgwMjE1NF9saXN0X3BoeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2Vcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxNTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ubDgwMjE1NC5oXHUwMDNlXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTgtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtcGh5LmMtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2llZWU4MDIxNTQvbmwtcGh5LmM6MTc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaWVlZTgwMjE1NC9ubC1waHkuYy0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTU0LmhcdTAwM2Vcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTEyLSNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxNTQuaFx1MDAzZVxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYzoxMzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmMtMTQtI2luY2x1ZGUgXHUwMDNjbmV0L21hYzgwMjE1NC5oXHUwMDNlXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTItI2luY2x1ZGUgXHUwMDNjbmV0L2dyby5oXHUwMDNlXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xOS0jaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2ZvdS5oXHUwMDNlXG5uZXQvaXB2NC9mb3VfY29yZS5jOjIwOiNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMjEtXG4tLVxubmV0L2lwdjQvZm91X25sLmMtNy0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaXB2NC9mb3VfbmwuYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjQvZm91X25sLmMtOS1cbi0tXG5uZXQvaXB2NC9mb3VfbmwuaC0xMC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaXB2NC9mb3VfbmwuaDoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY0L2ZvdV9ubC5oLTEyLVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIyOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMy1cbi0tXG5uZXQvaXB2Ni9pbGEvaWxhLmgtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L2NoZWNrc3VtLmhcdTAwM2Vcbm5ldC9pcHY2L2lsYS9pbGEuaDoxNzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY2L2lsYS9pbGEuaC0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jOjI6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX21haW4uYy0zLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRucy9nZW5lcmljLmhcdTAwM2Vcbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jOjQ6I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjYvaWxhL2lsYV9tYWluLmMtNS0jaW5jbHVkZSBcJiMzNDtpbGEuaFwmIzM0O1xuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzo3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzo5OiNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTEwLSNpbmNsdWRlIFwmIzM0O2lsYS5oXCYjMzQ7XG4tLVxubmV0L2lwdjYvaW9hbTYuYy0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxubmV0L2lwdjYvaW9hbTYuYzoxOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY2L2lvYW02LmMtMjAtI2luY2x1ZGUgXHUwMDNjbmV0L2lvYW02LmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtMjAtI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzYuaFx1MDAzZVxubmV0L2lwdjYvc2VnNi5jOjIxOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjYvc2VnNi5jLTIyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlZzYuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTM5LSNpbmNsdWRlIFx1MDAzY25ldC9zZWc2LmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfaG1hYy5jOjQwOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9obWFjLmMtNDEtI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzZfaG1hYy5oXHUwMDNlXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmg9MTU4PXN0cnVjdCBsMnRwX3R1bm5lbCB7XG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMTg1LVxubmV0L2wydHAvbDJ0cF9jb3JlLmg6MTg2Oi8qIFBzZXVkb3dpcmUgb3BzIGNhbGxiYWNrcyBmb3IgdXNlIHdpdGggdGhlIGwydHAgZ2VuZXRsaW5rIGludGVyZmFjZSAqL1xubmV0L2wydHAvbDJ0cF9jb3JlLmgtMTg3LXN0cnVjdCBsMnRwX25sX2NtZF9vcHMge1xuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTE1LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjE2OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtMTctI2luY2x1ZGUgXHUwMDNjbmV0L3VkcC5oXHUwMDNlXG4tLVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jOjg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtOS1cbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjExOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oLTEyLVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzLSNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbXB0Y3AuaFx1MDAzZVxubmV0L21wdGNwL3Byb3RvY29sLmg6MTQ6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvcnN0cmVhc29uLmhcdTAwM2Vcbi0tXG5uZXQvbmNzaS9uY3NpLWNtZC5jLTE1LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbm5ldC9uY3NpL25jc2ktY21kLmM6MTY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmNzaS9uY3NpLWNtZC5jLTE3LVxuLS1cbm5ldC9uY3NpL25jc2ktbWFuYWdlLmMtMTgtI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxubmV0L25jc2kvbmNzaS1tYW5hZ2UuYzoxOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uY3NpL25jc2ktbWFuYWdlLmMtMjAtXG4tLVxubmV0L25jc2kvbmNzaS1uZXRsaW5rLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxubmV0L25jc2kvbmNzaS1uZXRsaW5rLmM6MTE6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmNzaS9uY3NpLW5ldGxpbmsuYy0xMi0jaW5jbHVkZSBcdTAwM2NuZXQvbmNzaS5oXHUwMDNlXG4tLVxubmV0L25jc2kvbmNzaS1yc3AuYy0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG5uZXQvbmNzaS9uY3NpLXJzcC5jOjE2OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25jc2kvbmNzaS1yc3AuYy0xNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDMtI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ0OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zOTUxPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgaXBfdnNfc29ja29wdHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5NjUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzk2NjovKiBJUFZTIGdlbmV0bGluayBmYW1pbHkgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zOTY3LXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaXBfdnNfZ2VubF9mYW1pbHk7XG4tLVxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYy0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jOjI1OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYy0yNi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGFiZWwuaFx1MDAzZVxuLS1cbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jLTIzLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jOjI0OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxhYmVsLmhcdTAwM2Vcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmM6MjU6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jLTI2LSNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4tLVxubmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jLTMzLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYzozNDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYy0zNS0jaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuLS1cbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuYzoyNjojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMtMjctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxhYmVsLmhcdTAwM2Vcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5oLTIzLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmg6MjQ6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5oLTI1LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsYWJlbC5oXHUwMDNlXG4tLVxubmV0L25ldGxpbmsvTWFrZWZpbGUtNS1cbm5ldC9uZXRsaW5rL01ha2VmaWxlOjY6b2JqLXkgIFx0XHRcdFx0Oj0gYWZfbmV0bGluay5vIGdlbmV0bGluay5vIHBvbGljeS5vXG5uZXQvbmV0bGluay9NYWtlZmlsZS03LVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy03NS0jaW5jbHVkZSBcJiMzNDthZl9uZXRsaW5rLmhcJiMzNDtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzo3NjojaW5jbHVkZSBcJiMzNDtnZW5ldGxpbmsuaFwmIzM0O1xubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTc3LVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz03MTg9c3RhdGljIGludCBuZXRsaW5rX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNzM3LVx0LyogbXVzdCBub3QgYWNxdWlyZSBuZXRsaW5rX3RhYmxlX2xvY2sgaW4gYW55IHdheSBhZ2FpbiBiZWZvcmUgdW5iaW5kXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6NzM4Olx0ICogYW5kIG5vdGlmeWluZyBnZW5ldGxpbmsgaXMgZG9uZSBhcyBvdGhlcndpc2UgaXQgbWlnaHQgZGVhZGxvY2tcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy03MzktXHQgKi9cbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0yMi0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoyMzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTI0LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MjU6I2luY2x1ZGUgXCYjMzQ7Z2VuZXRsaW5rLmhcJiMzNDtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTI2LVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5oLTYtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuaDo3Oi8qIGZvciBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbiBhZl9uZXRsaW5rIGFuZCBnZW5ldGxpbmsgKi9cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5oLTgtZXh0ZXJuIGF0b21pY190IGdlbmxfc2tfZGVzdHJ1Y3RpbmdfY250O1xuLS1cbm5ldC9uZmMvY29yZS5jLTE4LVxubmV0L25mYy9jb3JlLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmZjL2NvcmUuYy0yMC1cbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xNy1cbm5ldC9uZmMvbmV0bGluay5jOjE4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25mYy9uZXRsaW5rLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbmZjLmhcdTAwM2Vcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTMtI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2Vcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2Vcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9kbWkuaFx1MDAzZVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNy0jaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2Vcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZHBfbm90aWZ5LmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxubmV0L29wZW52c3dpdGNoL2RwX25vdGlmeS5jOjc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvb3BlbnZzd2l0Y2gvZHBfbm90aWZ5LmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXHUwMDNlXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xOC1cbi0tXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMTQtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L3BzYW1wbGUvcHNhbXBsZS5jOjE1OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3BzYW1wbGUvcHNhbXBsZS5jLTE2LSNpbmNsdWRlIFx1MDAzY25ldC9wc2FtcGxlLmhcdTAwM2Vcbi0tXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy03LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9wc3AvcHNwLW5sLWdlbi5jOjg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy05LVxuLS1cbm5ldC9wc3AvcHNwLW5sLWdlbi5oLTEwLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9wc3AvcHNwLW5sLWdlbi5oOjExOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMTItXG4tLVxubmV0L3BzcC9wc3BfbmwuYy02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG5uZXQvcHNwL3BzcF9ubC5jOjc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvcHNwL3BzcF9ubC5jLTgtI2luY2x1ZGUgXHUwMDNjbmV0L3BzcC5oXHUwMDNlXG4tLVxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmMtNy0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvc2hhcGVyL3NoYXBlcl9ubF9nZW4uYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmMtOS1cbi0tXG5uZXQvc2hhcGVyL3NoYXBlcl9ubF9nZW4uaC0xMC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvc2hhcGVyL3NoYXBlcl9ubF9nZW4uaDoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9zaGFwZXIvc2hhcGVyX25sX2dlbi5oLTEyLVxuLS1cbm5ldC9zbWMvc21jLmgtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZSAvKiBfX2FsaWduZWQgKi9cbm5ldC9zbWMvc21jLmg6MTc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvc21jL3NtYy5oLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0tXG5uZXQvc21jL3NtY19jb3JlLmgtMTktI2luY2x1ZGUgXHUwMDNjcmRtYS9pYl92ZXJicy5oXHUwMDNlXG5uZXQvc21jL3NtY19jb3JlLmg6MjA6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvc21jL3NtY19jb3JlLmgtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L3NtYy5oXHUwMDNlXG4tLVxubmV0L3NtYy9zbWNfbmV0bGluay5oLTE1LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9zbWMvc21jX25ldGxpbmsuaDoxNjojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9zbWMvc21jX25ldGxpbmsuaC0xNy1cbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L3NtYy9zbWNfcG5ldC5jOjE3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3NtYy9zbWNfcG5ldC5jLTE4LVxuLS1cbm5ldC9zbWMvc21jX3N0YXRzLmMtMTUtI2luY2x1ZGUgXHUwMDNjbGludXgvc21jLmhcdTAwM2Vcbm5ldC9zbWMvc21jX3N0YXRzLmM6MTY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvc21jL3NtY19zdGF0cy5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0tXG5uZXQvc3VucnBjL2NhY2hlLmMtMzUtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3JwY19waXBlX2ZzLmhcdTAwM2Vcbm5ldC9zdW5ycGMvY2FjaGUuYzozNjojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9zdW5ycGMvY2FjaGUuYy0zNy0jaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvc3VucnBjLmhcdTAwM2Vcbi0tXG5uZXQvc3VucnBjL25ldGxpbmsuYy03LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9zdW5ycGMvbmV0bGluay5jOjg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvc3VucnBjL25ldGxpbmsuYy05LVxuLS1cbm5ldC9zdW5ycGMvbmV0bGluay5oLTEwLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9zdW5ycGMvbmV0bGluay5oOjExOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3N1bnJwYy9uZXRsaW5rLmgtMTItXG4tLVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jLTI1LVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jOjI2OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jLTI3LVxuLS1cbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYzoyMDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMtMjEtI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9zdW5ycGNfbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L3RpcGMvYmVhcmVyLmgtNDItI2luY2x1ZGUgXCYjMzQ7bXNnLmhcJiMzNDtcbm5ldC90aXBjL2JlYXJlci5oOjQzOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3RpcGMvYmVhcmVyLmgtNDQtXG4tLVxubmV0L3RpcGMvY29yZS5oLTYyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFx1MDAzZVxubmV0L3RpcGMvY29yZS5oOjYzOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3RpcGMvY29yZS5oLTY0LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRucy9oYXNoLmhcdTAwM2Vcbi0tXG5uZXQvdGlwYy9saW5rLmgtMzktXG5uZXQvdGlwYy9saW5rLmg6NDA6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvdGlwYy9saW5rLmgtNDEtI2luY2x1ZGUgXCYjMzQ7bXNnLmhcJiMzNDtcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmMtMzUtXG5uZXQvdGlwYy9tb25pdG9yLmM6MzY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvdGlwYy9tb25pdG9yLmMtMzctI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4tLVxubmV0L3RpcGMvbmV0LmgtMzktXG5uZXQvdGlwYy9uZXQuaDo0MDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC90aXBjL25ldC5oLTQxLVxuLS1cbm5ldC90aXBjL25ldGxpbmsuYy00NC0jaW5jbHVkZSBcJiMzNDt1ZHBfbWVkaWEuaFwmIzM0O1xubmV0L3RpcGMvbmV0bGluay5jOjQ1OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3RpcGMvbmV0bGluay5jLTQ2LVxuLS1cbm5ldC90aXBjL25ldGxpbmtfY29tcGF0LmMtNDAtI2luY2x1ZGUgXCYjMzQ7bmV0LmhcJiMzNDtcbm5ldC90aXBjL25ldGxpbmtfY29tcGF0LmM6NDE6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvdGlwYy9uZXRsaW5rX2NvbXBhdC5jLTQyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcdTAwM2Vcbi0tXG5uZXQvdGlwYy9zb2NrZXQuaC0zOC0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG5uZXQvdGlwYy9zb2NrZXQuaDozOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC90aXBjL3NvY2tldC5oLTQwLVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjYtI2luY2x1ZGUgXHUwMDNjbmV0L2NmZzgwMjExLmhcdTAwM2Vcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG5uZXQvd2lyZWxlc3MvY29yZS5oOjE3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3dpcmVsZXNzL2NvcmUuaC0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyNjojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjctI2luY2x1ZGUgXHUwMDNjbmV0L2NmZzgwMjExLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgTmV0bGluayBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBOZXRsaW5rIGltcGxlbWVudGF0aW9uLiBGaXJzdCBzdG9wLCBgbmV0L25ldGxpbmsvTWFrZWZpbGVgLiBBbHJpZ2h0LCBoZXJlIHdlIGdvLi4uIGBvYmoteSA6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9gLiBSaWdodCwgc28gdGhpcyBjb25maXJtcyB0aGUgY29yZSBtb2R1bGVzOiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGltcGxlbWVudGF0aW9uLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGl0c2VsZiwgYW5kIHBvbGljeSBjb25maWd1cmF0aW9ucy4gU3RhbmRhcmQgc3R1ZmYuIFRoaXMgd2hvbGUgdGhpbmcgZ2V0cyBidWlsdCwgSSByZWNhbGwsIHdoZW5ldmVyIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgdHlwaWNhbGx5IGdhdGVkIGJlaGluZCBgQ09ORklHX05FVGAuIEdvdCBpdC4gTm93LCBsZXQmIzM5O3MgcGVlayBhdCB0aGUgcGFyZW50IGBuZXQvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgYnVpbGQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxuICAgNDpcdCNcbiAgIDU6XHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXHUwMDNlXG4gICA2Olx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cbiAgIDc6XHQjXG4gICA4Olx0XG4gICA5Olx0b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX0NPTVBBVClcdFx0JiM0Mzs9IGNvbXBhdC5vXG4gIDEyOlx0XG4gIDEzOlx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXG4gIDE0Olx0b2JqLSQoQ09ORklHX0xMQylcdFx0JiM0Mzs9IGxsYy9cbiAgMTU6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXG4gIDE2Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbiAgMTc6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG4gIDE4Olx0b2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiAgMTk6XHRvYmotJChDT05GSUdfWEZSTSlcdFx0JiM0Mzs9IHhmcm0vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VOSVgpXHRcdCYjNDM7PSB1bml4L1xuICAyMTpcdG9iai0kKENPTkZJR19JTkVUX1BTUClcdFx0JiM0Mzs9IHBzcC9cbiAgMjI6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGlwdjYvXG4gIDIzOlx0b2JqLSQoQ09ORklHX1BBQ0tFVClcdFx0JiM0Mzs9IHBhY2tldC9cbiAgMjQ6XHRvYmotJChDT05GSUdfTkVUX0tFWSlcdFx0JiM0Mzs9IGtleS9cbiAgMjU6XHRvYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xuICAyNjpcdG9iai0kKENPTkZJR19ORVRfREVWTElOSylcdCYjNDM7PSBkZXZsaW5rL1xuICAyNzpcdG9iai15XHRcdFx0XHQmIzQzOz0gZHNhL1xuICAyODpcdG9iai0kKENPTkZJR19YMjUpXHRcdCYjNDM7PSB4MjUvXG4gIDI5Olx0b2JqLSQoQ09ORklHX0xBUEIpXHRcdCYjNDM7PSBsYXBiL1xuICAzMDpcdG9iai0kKENPTkZJR19DQU4pXHRcdCYjNDM7PSBjYW4vXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JUKVx0XHQmIzQzOz0gYmx1ZXRvb3RoL1xuICAzMjpcdG9iai0kKENPTkZJR19TVU5SUEMpXHRcdCYjNDM7PSBzdW5ycGMvXG4gIDMzOlx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVx0XHQmIzQzOz0gcnhycGMvXG4gIDM0Olx0b2JqLSQoQ09ORklHX0FGX0tDTSlcdFx0JiM0Mzs9IGtjbS9cbiAgMzU6XHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcdCYjNDM7PSBzdHJwYXJzZXIvXG4gIDM2Olx0b2JqLSQoQ09ORklHX0FUTSlcdFx0JiM0Mzs9IGF0bS9cbiAgMzc6XHRvYmotJChDT05GSUdfTDJUUClcdFx0JiM0Mzs9IGwydHAvXG4gIDM4Olx0b2JqLSQoQ09ORklHX1BIT05FVClcdFx0JiM0Mzs9IHBob25ldC9cbiAgMzk6XHRpZm5lcSAoJChDT05GSUdfVkxBTl84MDIxUSksKVxuICA0MDpcdG9iai15XHRcdFx0XHQmIzQzOz0gODAyMXEvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjIyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0bGluay9nZW5ldGxpbmsgQ29kZSBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBvYmoteSAmIzQzOz0gLi4uIG5ldGxpbmsvIC4uLmAgaW4gdGhlIGBuZXQvTWFrZWZpbGVgIGltcGxpZXMgdGhhdCBgQ09ORklHX05FVD15YCBpcyB0aGUgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgZm9yIHRoaXMgY29kZSB0byBiZSBjb21waWxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBtb3JlIGludGVyZXN0aW5nIGFzcGVjdCwgZmluZGluZyBhcHByb3ByaWF0ZSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBpbnRlbnNpdmUgZnV6emluZywgc3RpY2tpbmcgY2xvc2VseSB0byB0aGUgaW5zdHJ1Y3Rpb25zLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYXMgdGhhdCB3b3VsZCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbi4gSSB3YW50IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgbGF0dGVyIGFyZSB1c3VhbGx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLgoKR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgIGZpbGUuIEkmIzM5O3ZlIGFscmVhZHkgbm90ZWQgYSBmZXc6IGBjdHJsX2R1bXBwb2xpY3lfc3RhcnRgLCBgY3RybF9kdW1wcG9saWN5YCwgYGN0cmxfZHVtcHBvbGljeV9kb25lYCwgYGdlbmxfcmN2X21zZ2AsIGBnZW5sX2ZhbWlseV9yY3ZfbXNnX2R1bXBpdGAsIGFuZCBgZ2VubF9yY3ZgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCwgYGN0cmxfZHVtcHBvbGljeWAsIGFuZCBgY3RybF9kdW1wcG9saWN5X2RvbmVgIGhhdmUgZGlzdGluY3QgYWRkcmVzc2VzLiBCZWNhdXNlIHRoZWlyIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBhc3NpZ25lZCB0byBhIHN0cnVjdCBjYWxsYmFjayAobGlrZSBgLnN0YXJ0ID0gY3RybF9kdW1wcG9saWN5X3N0YXJ0YCksIHRoZSBjb21waWxlciAqbXVzdCogZ2VuZXJhdGUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBmb3IgdGhlbS4gVW5sZXNzIExUTy9XUEEgaXMgbWVyZ2luZyBpZGVudGljYWwgZnVuY3Rpb25zICh3aGljaCB3b3VsZG4mIzM5O3QgaGF2ZSB1bmlxdWUgbG9naWMpLCB0aGVzZSBhcmUgbGlrZWx5IGdvb2QgdGFyZ2V0cy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoaXMsIGJ1dCBpdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBnZW5ldGxpbmsuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgZ2VubF98XnZvaWQgZ2VubF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYz0zMT1ERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChnZW5sX3NrX2Rlc3RydWN0aW5nX3dhaXRxKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTMyLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MzM6dm9pZCBnZW5sX2xvY2sodm9pZClcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTM0LXtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0zNz1FWFBPUlRfU1lNQk9MKGdlbmxfbG9jayk7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0zOC1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjM5OnZvaWQgZ2VubF91bmxvY2sodm9pZClcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTQwLXtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz03Mzc9dm9pZCAqZ2VubF9za19wcml2X2dldChzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTc3NC0gKi9cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjc3NTppbnQgZ2VubF9yZWdpc3Rlcl9mYW1pbHkoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHkpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy03NzYte1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTg0MD1FWFBPUlRfU1lNQk9MKGdlbmxfcmVnaXN0ZXJfZmFtaWx5KTtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy04NDktICovXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzo4NTA6aW50IGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoY29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHkpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy04NTEte1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE5OTQ9RVhQT1JUX1NZTUJPTChnZW5sbXNnX211bHRpY2FzdF9hbGxucyk7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xOTk1LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTk5Njp2b2lkIGdlbmxfbm90aWZ5KGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTk5Ny1cdFx0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBncm91cCwgZ2ZwX3QgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTM5CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0bGluayBQb2xpY3kgRHVtcGluZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGtleSBmb2N1cyBzeW1ib2xzOiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYC4gQXJlIHRoZXkgdmFsaWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQ/IFllcywgdGhleSBhcmUuIEFuZCBgY3RybF9kdW1wcG9saWN5YCBpcyBhbHNvIHJlbGV2YW50IGhlcmUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbnMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYENPTkZJR19ORVRgLCBvciBzaW1wbHkgJiMzNDtORVQsJiMzNDsgd2hpY2ggaXMgYSBnaXZlbiwgYXMgZ2VuZXJpYyBuZXRsaW5rIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGl0LgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIGRldGFpbHMuIFRoaXMgcGF0Y2ggYXBwZWFycyBjcml0aWNhbC4gSXQgYWRkcyBgY3R4LSZndDtvd25lciA9IHJ0LSZndDttb2R1bGU7YCBhbmQgYSBgdHJ5X21vZHVsZV9nZXQoY3R4LSZndDtvd25lcilgIHdpdGhpbiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0KClgLiBUaGlzIGlzIGdvb2Q7IGl0JiMzOTtzIHRoZSBtb2R1bGUgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIHN0ZXAuIFRoZSBwYXRjaCB0aGVuIGNvcnJlY3RseSB1cGRhdGVzIHRoZSBlcnJvciBwYXRocyB3aXRoIGBtb2R1bGVfcHV0KGN0eC0mZ3Q7b3duZXIpYCB0byBoYW5kbGUgZmFpbHVyZSBzY2VuYXJpb3MsIGFuZCBgbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKWAgaXMgYWxzbyBhZGRlZCB0byBgY3RybF9kdW1wcG9saWN5X2RvbmUoKWAuIFRoaXMgaXMgYWxsIHRvIHByZXZlbnQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZHVtcGluZyBuZXRsaW5rIHBvbGljaWVzIG9mIGtlcm5lbCBtb2R1bGVzLiBUaGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgYENUUkxfQ01EX0dFVFBPTElDWWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UuCgpUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGVuYWJsZSBjb25maWcgaXMgYFsmIzM0O05FVCYjMzQ7XWAgYW5kIGZvY3VzIHN5bWJvbHMgYXJlIGBbJiMzNDtjdHJsX2R1bXBwb2xpY3lfc3RhcnQmIzM0OywgJiMzNDtjdHJsX2R1bXBwb2xpY3lfZG9uZSYjMzQ7LCAmIzM0O2N0cmxfZHVtcHBvbGljeSYjMzQ7XWAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIHBhcmFtZXRlcnM6CiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtORVQmIzM0O11gIC0gTWFrZXMgc2Vuc2UuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2N0cmxfZHVtcHBvbGljeV9zdGFydCYjMzQ7LCAmIzM0O2N0cmxfZHVtcHBvbGljeV9kb25lJiMzNDssICYjMzQ7Y3RybF9kdW1wcG9saWN5JiMzNDtdYCAtIEV4YWN0bHkgd2hhdCB3ZSBleHBlY3QuCiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1hbmFnZXMgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBtb2R1bGUgcmVmZXJlbmNlcyBkdXJpbmcgYENUUkxfQ01EX0dFVFBPTElDWWAgZHVtcCBvcGVyYXRpb25zIGluIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYCwgcHJldmVudGluZyBtb2R1bGUgdW5sb2FkaW5nIHdoaWxlIGR1bXBzIGFyZSBpbiBwcm9ncmVzcy4gVGhpcyBtb2RpZmllcyBnZW5lcmljIG5ldGxpbmsgY29udHJvbGxlciBsb2dpYyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiAtIFBlcmZlY3QsIHRoaXMgaXMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbi4KKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlIC0gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIHBhdGNoIGFuZCB0aGUgcG90ZW50aWFsIGZvciBtb2R1bGUtcmVsYXRlZCBpc3N1ZXMsIHRoaXMgaXMgYWJzb2x1dGVseSB0aGUgY29ycmVjdCBhc3Nlc3NtZW50LgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCBpcyBzYWZlIHRvIHVzZSB0aGlzIHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3lfc3RhcnQmIzM0OywKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5X2RvbmUmIzM0OywKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbW9kdWxlIHJlZmVyZW5jZSBob2xkaW5nICh0cnlfbW9kdWxlX2dldC9tb2R1bGVfcHV0KSBmb3IgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBwb2xpY3kgZHVtcHMgaW4gY3RybF9kdW1wcG9saWN5X3N0YXJ0KCkgYW5kIGN0cmxfZHVtcHBvbGljeV9kb25lKCksIGFsdGVyaW5nIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZXJyb3IgY2xlYW51cCBwYXRocyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBHZW5lcmljIE5ldGxpbmsgQ1RSTF9DTURfR0VUUE9MSUNZLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3lfc3RhcnQmIzM0OywKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5X2RvbmUmIzM0OywKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbW9kdWxlIHJlZmVyZW5jZSBob2xkaW5nICh0cnlfbW9kdWxlX2dldC9tb2R1bGVfcHV0KSBmb3IgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBwb2xpY3kgZHVtcHMgaW4gY3RybF9kdW1wcG9saWN5X3N0YXJ0KCkgYW5kIGN0cmxfZHVtcHBvbGljeV9kb25lKCksIGFsdGVyaW5nIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZXJyb3IgY2xlYW51cCBwYXRocyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBHZW5lcmljIE5ldGxpbmsgQ1RSTF9DTURfR0VUUE9MSUNZLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIChgdHJ5X21vZHVsZV9nZXQoKWAgLyBgbW9kdWxlX3B1dCgpYCkgZHVyaW5nIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcCBvcGVyYXRpb25zIChgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYCkuIFRoaXMgcHJldmVudHMgdGhlIG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIGZhbWlseSBmcm9tIGJlaW5nIHVubG9hZGVkIHdoaWxlIGEgcG9saWN5IGR1bXAgaXMgaW4gcHJvZ3Jlc3MuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBtb2R1bGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgLyBpbnZhbGlkIGNvZGUgb3IgZGF0YSBhY2Nlc3Mgb24gbW9kdWxlIHVubG9hZCksIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGRhdGEgZXhwb3N1cmUsIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUzN2Y5Mjc4NWY2OTc4ZDNhZTExZTczMzJlMzRjYjIwM2Q2OWFiZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAyOjA1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCAwZGEzOWVhZWQyNTVmLi40MWQzNzQ0MmYxODY4IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtMTUxMyw2ICYjNDM7MTUxMyw3IEBAIHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7CiAJc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlOwogCWNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqcnQ7CiAJc3RydWN0IGdlbmxfb3BfaXRlciAqb3BfaXRlcjsKJiM0MzsJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdTMyIG9wOwogCXUxNiBmYW1faWQ7CiAJdTggZHVtcF9tYXA6MSwKQEAgLTE1NTUsNiAmIzQzOzE1NTYsOSBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJY3R4LSZndDtydCA9IHJ0OwomIzQzOwljdHgtJmd0O293bmVyID0gcnQtJmd0O21vZHVsZTsKJiM0MzsJaWYgKCF0cnlfbW9kdWxlX2dldChjdHgtJmd0O293bmVyKSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwogCiAJaWYgKHRiW0NUUkxfQVRUUl9PUF0pIHsKIAkJc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7CkBAIC0xNTY1LDcgJiM0MzsxNTY5LDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQllcnIgPSBnZW5sX2dldF9jbWRfYm90aChjdHgtJmd0O29wLCBydCwgJmFtcDtkb2l0LCAmYW1wO2R1bXApOwogCQlpZiAoZXJyKSB7CiAJCQlOTF9TRVRfQkFEX0FUVFIoY2ItJmd0O2V4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7Ci0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gZXJyX3B1dF9vd25lcjsKIAkJfQogCiAJCWlmIChkb2l0LnBvbGljeSkgewpAQCAtMTU4MywxNiAmIzQzOzE1ODcsMjAgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJCWdvdG8gZXJyX2ZyZWVfc3RhdGU7CiAJCX0KIAotCQlpZiAoIWN0eC0mZ3Q7c3RhdGUpCi0JCQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CQlpZiAoIWN0eC0mZ3Q7c3RhdGUpIHsKJiM0MzsJCQllcnIgPSAtRU5PREFUQTsKJiM0MzsJCQlnb3RvIGVycl9wdXRfb3duZXI7CiYjNDM7CQl9CiAKIAkJY3R4LSZndDtkdW1wX21hcCA9IDE7CiAJCXJldHVybiAwOwogCX0KIAogCWN0eC0mZ3Q7b3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtJmd0O29wX2l0ZXIpOwotCWlmICghY3R4LSZndDtvcF9pdGVyKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCFjdHgtJmd0O29wX2l0ZXIpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9wdXRfb3duZXI7CiYjNDM7CX0KIAogCWdlbmxfb3BfaXRlcl9pbml0KHJ0LCBjdHgtJmd0O29wX2l0ZXIpOwogCWN0eC0mZ3Q7ZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtJmd0O29wX2l0ZXIpOwpAQCAtMTYyNCw2ICYjNDM7MTYzMiw4IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAluZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LSZndDtzdGF0ZSk7CiBlcnJfZnJlZV9vcF9pdGVyOgogCWtmcmVlKGN0eC0mZ3Q7b3BfaXRlcik7CiYjNDM7ZXJyX3B1dF9vd25lcjoKJiM0MzsJbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzYwLDYgJiM0MzsxNzcwLDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAKIAlrZnJlZShjdHgtJmd0O29wX2l0ZXIpOwogCW5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtJmd0O3N0YXRlKTsKJiM0MzsJbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKTsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdlbmV0bGluayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCBpbnN0cnVjdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhhdCBzcGVjaWZpYyBtb2RpZmljYXRpb24gaW4gYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYC4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIG5ldyBmaWVsZCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eGA6IGBzdHJ1Y3QgbW9kdWxlICpvd25lcjtgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIG1vZHVsZSBvd25lcnNoaXAgaXMgYmVpbmcgdHJhY2tlZCB3aXRoaW4gdGhlIGR1bXAgcG9saWN5IGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW50byBob3cgdGhhdCYjMzk7cyBiZWluZyBoYW5kbGVkLgoKU3BlY2lmaWNhbGx5LCBpbiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCwgSSBzZWUgYGN0eC0mZ3Q7b3duZXIgPSBydC0mZ3Q7bW9kdWxlO2Agd2hpY2ggYXNzaWducyB0aGUgbW9kdWxlIGZyb20gYHJ0YCB0byB0aGUgY29udGV4dCYjMzk7cyBvd25lci4gVGhlbiwgY3J1Y2lhbGx5LCB0aGVyZSYjMzk7cyBhIGB0cnlfbW9kdWxlX2dldChjdHgtJmd0O293bmVyKWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBtYW5hZ2UgbW9kdWxlIHJlZmVyZW5jZSBjb3VudHMuIFRoZSBlcnJvciBwYXRocyBpbW1lZGlhdGVseSBjYWxsIGBtb2R1bGVfcHV0YCBvbiB0aGUgb3duZXIgd2l0aCBhIGBnb3RvIGVycl9wdXRfb3duZXI7YCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBiZWluZyByZWxlYXNlZCBpbiBjYXNlIG9mIGFuIGVhcmx5IHJldHVybi4gVGhpcyBpcyB0ZXh0Ym9vayByZWZlcmVuY2UgY291bnRpbmcgbG9naWMsIHByb3RlY3RpbmcgdGhlIG1vZHVsZSBpZiB0aGUgZHVtcCBwb2xpY3kgZXJyb3JzLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGN0cmxfZHVtcHBvbGljeV9kb25lYCwgd2hlcmUgYG1vZHVsZV9wdXQoY3R4LSZndDtvd25lcilgIGlzIGNhbGxlZC4gVGhhdCYjMzk7cyBjb25maXJtYXRpb246IHRoZSBgb3duZXJgIGZpZWxkIGlzIHVzZWQgdG8gY29ycmVjdGx5IGRlY3JlbWVudCB0aGUgbW9kdWxlJiMzOTtzIHJlZmVyZW5jZSBjb3VudCB3aGVuIHRoZSBwb2xpY3kgaXMgY29tcGxldGUuIEl0IGFwcGVhcnMgdGhlIHN5c3RlbSBpcyBtYWtpbmcgc3VyZSB0aGF0IGlmIGEgYHRyeV9tb2R1bGVfZ2V0YCBzdWNjZWVkcyBpbiBgc3RhcnRgLCB0aGUgYG1vZHVsZV9wdXRgIG11c3Qgb2NjdXIuIFRoaXMgZW5zdXJlcyB0aGF0IGEgYG1vZHVsZWAgaXNuJiMzOTt0IHVubG9hZGVkIHdoaWxlIHRoZSBkdW1wIHBvbGljeSBpcyBhY3RpdmUuCgpOb3csIEkgbmVlZCB0byBicm9hZGVuIG15IHNjb3BlLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIHJlc3Qgb2YgdGhlIGBjdHJsX2R1bXBwb2xpY3lfKmAgZnVuY3Rpb25zIGFuZCBob3cgYGN0eGAgaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgYW5kIHVzZWQuIEkmIzM5O2xsIGdvIGJhY2sgdG8gYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYCBhbmQgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBmcm9tIGxpbmUgMTUxMyB0byAxNzcwIHRvIHNlZSBob3cgdGhlIGNvbnRleHQgaXMgdXNlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBjb21wbGV0ZSBhbmQgcm9idXN0IGltcGxlbWVudGF0aW9uIGFuZCBub3QgaGF2ZSBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgbGlmZWN5Y2xlIG9mIHRoaXMgY29udGV4dCB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUxMDpcdH1cbjE1MTE6XHRcbjE1MTI6XHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xuMTUxMzpcdFx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xuMTUxNDpcdFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcbjE1MTU6XHRcdHN0cnVjdCBnZW5sX29wX2l0ZXIgKm9wX2l0ZXI7XG4xNTE2Olx0XHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbjE1MTc6XHRcdHUzMiBvcDtcbjE1MTg6XHRcdHUxNiBmYW1faWQ7XG4xNTE5Olx0XHR1OCBkdW1wX21hcDoxLFxuMTUyMDpcdFx0ICAgc2luZ2xlX29wOjE7XG4xNTIxOlx0fTtcbjE1MjI6XHRcbjE1MjM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RybF9wb2xpY3lfcG9saWN5W10gPSB7XG4xNTI0Olx0XHRbQ1RSTF9BVFRSX0ZBTUlMWV9JRF1cdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcbjE1MjU6XHRcdFtDVFJMX0FUVFJfRkFNSUxZX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcbjE1MjY6XHRcdFx0XHRcdCAgICAubGVuID0gR0VOTF9OQU1TSVogLSAxIH0sXG4xNTI3Olx0XHRbQ1RSTF9BVFRSX09QXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xNTI4Olx0fTtcbjE1Mjk6XHRcbjE1MzA6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4xNTMxOlx0e1xuMTUzMjpcdFx0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcbjE1MzM6XHRcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4xNTM0Olx0XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4xNTM1Olx0XHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xuMTUzNjpcdFx0c3RydWN0IGdlbmxfb3BfaXRlciBpO1xuMTUzNzpcdFx0aW50IGVycjtcbjE1Mzg6XHRcbjE1Mzk6XHRcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXHUwMDNlIHNpemVvZihjYi1cdTAwM2VjdHgpKTtcbjE1NDA6XHRcbjE1NDE6XHRcdGlmICghdGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0gXHUwMDI2XHUwMDI2ICF0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKVxuMTU0MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1NDM6XHRcbjE1NDQ6XHRcdGlmICh0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSkge1xuMTU0NTpcdFx0XHRjdHgtXHUwMDNlZmFtX2lkID0gbmxhX2dldF91MTYodGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pO1xuMTU0NjpcdFx0fSBlbHNlIHtcbjE1NDc6XHRcdFx0cnQgPSBnZW5sX2ZhbWlseV9maW5kX2J5bmFtZShcbjE1NDg6XHRcdFx0XHRubGFfZGF0YSh0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKSk7XG4xNTQ5Olx0XHRcdGlmICghcnQpXG4xNTUwOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTUxOlx0XHRcdGN0eC1cdTAwM2VmYW1faWQgPSBydC1cdTAwM2VpZDtcbjE1NTI6XHRcdH1cbjE1NTM6XHRcbjE1NTQ6XHRcdHJ0ID0gZ2VubF9mYW1pbHlfZmluZF9ieWlkKGN0eC1cdTAwM2VmYW1faWQpO1xuMTU1NTpcdFx0aWYgKCFydClcbjE1NTY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTU3Olx0XG4xNTU4Olx0XHRjdHgtXHUwMDNlcnQgPSBydDtcbjE1NTk6XHRcdGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtcbjE1NjA6XHRcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbjE1NjE6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTYyOlx0XG4xNTYzOlx0XHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xuMTU2NDpcdFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcDtcbjE1NjU6XHRcbjE1NjY6XHRcdFx0Y3R4LVx1MDAzZXNpbmdsZV9vcCA9IHRydWU7XG4xNTY3Olx0XHRcdGN0eC1cdTAwM2VvcCA9IG5sYV9nZXRfdTMyKHRiW0NUUkxfQVRUUl9PUF0pO1xuMTU2ODpcdFxuMTU2OTpcdFx0XHRlcnIgPSBnZW5sX2dldF9jbWRfYm90aChjdHgtXHUwMDNlb3AsIHJ0LCBcdTAwMjZkb2l0LCBcdTAwMjZkdW1wKTtcbjE1NzA6XHRcdFx0aWYgKGVycikge1xuMTU3MTpcdFx0XHRcdE5MX1NFVF9CQURfQVRUUihjYi1cdTAwM2VleHRhY2ssIHRiW0NUUkxfQVRUUl9PUF0pO1xuMTU3MjpcdFx0XHRcdGdvdG8gZXJyX3B1dF9vd25lcjtcbjE1NzM6XHRcdFx0fVxuMTU3NDpcdFxuMTU3NTpcdFx0XHRpZiAoZG9pdC5wb2xpY3kpIHtcbjE1NzY6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTU3NzpcdFx0XHRcdFx0XHRcdFx0ICAgICBkb2l0LnBvbGljeSxcbjE1Nzg6XHRcdFx0XHRcdFx0XHRcdCAgICAgZG9pdC5tYXhhdHRyKTtcbjE1Nzk6XHRcdFx0XHRpZiAoZXJyKVxuMTU4MDpcdFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbjE1ODE6XHRcdFx0fVxuMTU4MjpcdFx0XHRpZiAoZHVtcC5wb2xpY3kpIHtcbjE1ODM6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTU4NDpcdFx0XHRcdFx0XHRcdFx0ICAgICBkdW1wLnBvbGljeSxcbjE1ODU6XHRcdFx0XHRcdFx0XHRcdCAgICAgZHVtcC5tYXhhdHRyKTtcbjE1ODY6XHRcdFx0XHRpZiAoZXJyKVxuMTU4NzpcdFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbjE1ODg6XHRcdFx0fVxuMTU4OTpcdFxuMTU5MDpcdFx0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSkge1xuMTU5MTpcdFx0XHRcdGVyciA9IC1FTk9EQVRBO1xuMTU5MjpcdFx0XHRcdGdvdG8gZXJyX3B1dF9vd25lcjtcbjE1OTM6XHRcdFx0fVxuMTU5NDpcdFxuMTU5NTpcdFx0XHRjdHgtXHUwMDNlZHVtcF9tYXAgPSAxO1xuMTU5NjpcdFx0XHRyZXR1cm4gMDtcbjE1OTc6XHRcdH1cbjE1OTg6XHRcbjE1OTk6XHRcdGN0eC1cdTAwM2VvcF9pdGVyID0ga21hbGxvY19vYmooKmN0eC1cdTAwM2VvcF9pdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg1NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGBjdHJsX2R1bXBwb2xpY3lfKmAgZnVuY3Rpb25zLiBMZXQgbWUgcmV2aWV3IGxpbmVzIDE2MDAtMTc3NSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBlbnRpcmUgY29udGV4dC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGNvbnRyb2wgcGxhbmUgYW5kIGRhdGEgcGxhbmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgaW4gdGhlIGxvZ2ljLiBJIG5lZWQgdG8gb2JzZXJ2ZSBob3cgdGhlIGNvZGUgbWFuYWdlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgY29udHJvbCBwb2xpY3kgcHJpbWl0aXZlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyZmFjZSB3aXRoIHRoZSBwb2xpY3kgbWFuYWdlbWVudCBjb3JlIGFuZCB3aGF0IGtpbmQgb2YgZGF0YSB0aGV5JiMzOTtyZSBkdW1waW5nIG9yIHVzaW5nIHRvIGFkanVzdCB0aGUgY29udHJvbCBwcm9jZXNzLiBBbnkgZGVzaWduIGNob2ljZXMgcmVsYXRlZCB0byB0aGUgZWZmaWNpZW5jeSBvciBzZWN1cml0eSBvZiB0aGUgY29udHJvbCBwcm9jZXNzIG5lZWQgc3BlY2lhbCBhdHRlbnRpb24uIEFmdGVyIHRoaXMgcmV2aWV3LCBteSB3b3JraW5nIGh5cG90aGVzaXMgaXMgdG8gaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgb3B0aW1pemF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MDA6XHRcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbjE2MDE6XHRcdFx0ZXJyID0gLUVOT01FTTtcbjE2MDI6XHRcdFx0Z290byBlcnJfcHV0X293bmVyO1xuMTYwMzpcdFx0fVxuMTYwNDpcdFxuMTYwNTpcdFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDY6XHRcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDc6XHRcbjE2MDg6XHRcdGZvciAoZ2VubF9vcF9pdGVyX2luaXQocnQsIFx1MDAyNmkpOyBnZW5sX29wX2l0ZXJfbmV4dChcdTAwMjZpKTsgKSB7XG4xNjA5Olx0XHRcdGlmIChpLmRvaXQucG9saWN5KSB7XG4xNjEwOlx0XHRcdFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFx1MDAyNmN0eC1cdTAwM2VzdGF0ZSxcbjE2MTE6XHRcdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0LnBvbGljeSxcbjE2MTI6XHRcdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0Lm1heGF0dHIpO1xuMTYxMzpcdFx0XHRcdGlmIChlcnIpXG4xNjE0Olx0XHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuMTYxNTpcdFx0XHR9XG4xNjE2Olx0XHRcdGlmIChpLmR1bXBpdC5wb2xpY3kpIHtcbjE2MTc6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTYxODpcdFx0XHRcdFx0XHRcdFx0ICAgICBpLmR1bXBpdC5wb2xpY3ksXG4xNjE5Olx0XHRcdFx0XHRcdFx0XHQgICAgIGkuZHVtcGl0Lm1heGF0dHIpO1xuMTYyMDpcdFx0XHRcdGlmIChlcnIpXG4xNjIxOlx0XHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuMTYyMjpcdFx0XHR9XG4xNjIzOlx0XHR9XG4xNjI0Olx0XG4xNjI1Olx0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSkge1xuMTYyNjpcdFx0XHRlcnIgPSAtRU5PREFUQTtcbjE2Mjc6XHRcdFx0Z290byBlcnJfZnJlZV9vcF9pdGVyO1xuMTYyODpcdFx0fVxuMTYyOTpcdFx0cmV0dXJuIDA7XG4xNjMwOlx0XG4xNjMxOlx0ZXJyX2ZyZWVfc3RhdGU6XG4xNjMyOlx0XHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbjE2MzM6XHRlcnJfZnJlZV9vcF9pdGVyOlxuMTYzNDpcdFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuMTYzNTpcdGVycl9wdXRfb3duZXI6XG4xNjM2Olx0XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4xNjM3Olx0XHRyZXR1cm4gZXJyO1xuMTYzODpcdH1cbjE2Mzk6XHRcbjE2NDA6XHRzdGF0aWMgdm9pZCAqY3RybF9kdW1wcG9saWN5X3ByZXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE2NDE6XHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuMTY0MjpcdHtcbjE2NDM6XHRcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4xNjQ0Olx0XHR2b2lkICpoZHI7XG4xNjQ1Olx0XG4xNjQ2Olx0XHRoZHIgPSBnZW5sbXNnX3B1dChza2IsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4xNjQ3Olx0XHRcdFx0ICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBcdTAwMjZnZW5sX2N0cmwsXG4xNjQ4Olx0XHRcdFx0ICBOTE1fRl9NVUxUSSwgQ1RSTF9DTURfR0VUUE9MSUNZKTtcbjE2NDk6XHRcdGlmICghaGRyKVxuMTY1MDpcdFx0XHRyZXR1cm4gTlVMTDtcbjE2NTE6XHRcbjE2NTI6XHRcdGlmIChubGFfcHV0X3UxNihza2IsIENUUkxfQVRUUl9GQU1JTFlfSUQsIGN0eC1cdTAwM2VmYW1faWQpKVxuMTY1MzpcdFx0XHRyZXR1cm4gTlVMTDtcbjE2NTQ6XHRcbjE2NTU6XHRcdHJldHVybiBoZHI7XG4xNjU2Olx0fVxuMTY1NzpcdFxuMTY1ODpcdHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3B1dF9vcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTY1OTpcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4xNjYwOlx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqZG9pdCxcbjE2NjE6XHRcdFx0XHRcdCAgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpkdW1waXQpXG4xNjYyOlx0e1xuMTY2MzpcdFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbjE2NjQ6XHRcdHN0cnVjdCBubGF0dHIgKm5lc3RfcG9sLCAqbmVzdF9vcDtcbjE2NjU6XHRcdHZvaWQgKmhkcjtcbjE2NjY6XHRcdGludCBpZHg7XG4xNjY3Olx0XG4xNjY4Olx0XHQvKiBza2lwIGlmIHdlIGhhdmUgbm90aGluZyB0byBzaG93ICovXG4xNjY5Olx0XHRpZiAoIWRvaXQtXHUwMDNlcG9saWN5IFx1MDAyNlx1MDAyNiAhZHVtcGl0LVx1MDAzZXBvbGljeSlcbjE2NzA6XHRcdFx0cmV0dXJuIDA7XG4xNjcxOlx0XG4xNjcyOlx0XHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcbjE2NzM6XHRcdGlmICghaGRyKVxuMTY3NDpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xNjc1Olx0XG4xNjc2Olx0XHRuZXN0X3BvbCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgQ1RSTF9BVFRSX09QX1BPTElDWSk7XG4xNjc3Olx0XHRpZiAoIW5lc3RfcG9sKVxuMTY3ODpcdFx0XHRnb3RvIGVycjtcbjE2Nzk6XHRcbjE2ODA6XHRcdG5lc3Rfb3AgPSBubGFfbmVzdF9zdGFydChza2IsIGRvaXQtXHUwMDNlY21kKTtcbjE2ODE6XHRcdGlmICghbmVzdF9vcClcbjE2ODI6XHRcdFx0Z290byBlcnI7XG4xNjgzOlx0XG4xNjg0Olx0XHRpZiAoZG9pdC1cdTAwM2Vwb2xpY3kpIHtcbjE2ODU6XHRcdFx0aWR4ID0gbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChjdHgtXHUwMDNlc3RhdGUsXG4xNjg2Olx0XHRcdFx0XHRcdFx0XHQgZG9pdC1cdTAwM2Vwb2xpY3ksXG4xNjg3Olx0XHRcdFx0XHRcdFx0XHQgZG9pdC1cdTAwM2VtYXhhdHRyKTtcbjE2ODg6XHRcbjE2ODk6XHRcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgQ1RSTF9BVFRSX1BPTElDWV9ETywgaWR4KSlcbjE2OTA6XHRcdFx0XHRnb3RvIGVycjtcbjE2OTE6XHRcdH1cbjE2OTI6XHRcdGlmIChkdW1waXQtXHUwMDNlcG9saWN5KSB7XG4xNjkzOlx0XHRcdGlkeCA9IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoY3R4LVx1MDAzZXN0YXRlLFxuMTY5NDpcdFx0XHRcdFx0XHRcdFx0IGR1bXBpdC1cdTAwM2Vwb2xpY3ksXG4xNjk1Olx0XHRcdFx0XHRcdFx0XHQgZHVtcGl0LVx1MDAzZW1heGF0dHIpO1xuMTY5NjpcdFxuMTY5NzpcdFx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBDVFJMX0FUVFJfUE9MSUNZX0RVTVAsIGlkeCkpXG4xNjk4Olx0XHRcdFx0Z290byBlcnI7XG4xNjk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBIaXN0b3JpY2FsIGBjdHJsX2R1bXBwb2xpY3lfKmAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdGhlIGBjdHJsX2R1bXBwb2xpY3lfKmAgZnVuY3Rpb25zLiBNeSB0aGlua2luZyBpcyB0byB6b29tIGluIG9uIHRoZSBwZXJpb2QgYmV0d2VlbiAxNzUwIGFuZCAxNzgwLiBUaGF0IHRpbWVmcmFtZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCYjMzk7cyBsaWtlbHkgdG8gcmV2ZWFsIHRoZSBldm9sdXRpb24gb2YgdGhlc2UgcG9saWNpZXMgZHVyaW5nIHRoZSBwZXJpb2Qgb2YuLi4gd2VsbCwgbGV0JiMzOTtzIGxlYXZlIGl0IGF0IHRoYXQuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IG1ham9yIHNoaWZ0cywgaW5ub3ZhdGl2ZSBpbXBsZW1lbnRhdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBzaWduaWZpY2FudCBsaW1pdGF0aW9ucyBpbiBob3cgdGhleSB3ZXJlIGRlZmluZWQgb3IgZXhlY3V0ZWQuIFRoaXMgd2luZG93IHNob3VsZCBwcm92aWRlIHN1ZmZpY2llbnQgY29udGV4dCB0byBidWlsZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdWJqZWN0LCBhbmQgSSYjMzk7bGwgc2VlIHdoYXQgaXQgdHVybnMgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NDA6XHRcbjE3NDE6XHRcdHdoaWxlIChuZXRsaW5rX3BvbGljeV9kdW1wX2xvb3AoY3R4LVx1MDAzZXN0YXRlKSkge1xuMTc0MjpcdFx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuMTc0MzpcdFxuMTc0NDpcdFx0XHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcbjE3NDU6XHRcdFx0aWYgKCFoZHIpXG4xNzQ2Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzQ3Olx0XG4xNzQ4Olx0XHRcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIENUUkxfQVRUUl9QT0xJQ1kpO1xuMTc0OTpcdFx0XHRpZiAoIW5lc3QpXG4xNzUwOlx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzUxOlx0XG4xNzUyOlx0XHRcdGlmIChuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHNrYiwgY3R4LVx1MDAzZXN0YXRlKSlcbjE3NTM6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE3NTQ6XHRcbjE3NTU6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4xNzU2Olx0XG4xNzU3Olx0XHRcdGdlbmxtc2dfZW5kKHNrYiwgaGRyKTtcbjE3NTg6XHRcdH1cbjE3NTk6XHRcbjE3NjA6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc2MTpcdFxuMTc2MjpcdG5sYV9wdXRfZmFpbHVyZTpcbjE3NjM6XHRcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcbjE3NjQ6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc2NTpcdH1cbjE3NjY6XHRcbjE3Njc6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjE3Njg6XHR7XG4xNzY5Olx0XHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuMTc3MDpcdFxuMTc3MTpcdFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuMTc3MjpcdFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cdTAwM2VzdGF0ZSk7XG4xNzczOlx0XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4xNzc0Olx0XHRyZXR1cm4gMDtcbjE3NzU6XHR9XG4xNzc2Olx0XG4xNzc3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBnZW5sX2N0cmxfb3BzW10gPSB7XG4xNzc4Olx0XHR7XG4xNzc5Olx0XHRcdC5jbWRcdFx0PSBDVFJMX0NNRF9HRVRGQU1JTFksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODgKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogNjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGBydGAgZmFtaWx5IGFuZCBpdHMgcG9saWN5IGR1bXBzLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgYSBtb2R1bGUgYmVpbmcgdW5sb2FkZWQgd2hpbGUgaXRzIHBvbGljaWVzIGFyZSBhY3RpdmVseSBiZWluZyBkdW1wZWQgb3ZlciBtdWx0aXBsZSBuZXRsaW5rIGNhbGxzLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW0uCgpUaGUgcGF0Y2ggaXRzZWxmIGltcGxlbWVudHMgYSBmaXggYnkgbWFuYWdpbmcgdGhlIG1vZHVsZSYjMzk7cyBsaWZldGltZSBtb3JlIGNhcmVmdWxseSBkdXJpbmcgdGhlc2UgZHVtcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBlbnN1cmUgdGhlIG1vZHVsZSBpc24mIzM5O3QgdW5sb2FkZWQgd2hpbGUgdGhlIGR1bXAgaXMgb25nb2luZy4gU3BlY2lmaWNhbGx5LCBgY3RybF9kdW1wcG9saWN5X3N0YXJ0KClgIHVzZXMgYHRyeV9tb2R1bGVfZ2V0KClgIHRvIHRha2UgYSByZWZlcmVuY2Ugb24gYHJ0LSZndDttb2R1bGVgLCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lKClgIG9yIGFuIGVycm9yIGhhbmRsZXIgKGBlcnJfcHV0X293bmVyYCkgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSB1c2luZyBgbW9kdWxlX3B1dCgpYC4KCk5vdywgcmVnYXJkaW5nIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMsIHRoaXMgcmVhbGx5IGJvaWxzIGRvd24gdG8gbWVtb3J5IHNhZmV0eS4gTXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGV4cG9zZWQgb3IgZm9yIG90aGVyIEtNU0FOLWRldGVjdGFibGUgaXNzdWVzLgoKSGVyZSYjMzk7cyBteSByZWFzb25pbmcsIGdvaW5nIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhOgoKKiAgICoqQ3JpdGVyaW9uIDEgKEtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyk6KiogQWJzb2x1dGVseSBub3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGBjdHgtJmd0O293bmVyYCB3aXRoIHRoZSBtb2R1bGUgcG9pbnRlci4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuCiogICAqKkNyaXRlcmlvbiAyIChDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyk6KiogTm8uIFRoZSBsb2dpYyBhcm91bmQgYGN0eC0mZ3Q7b3duZXJgIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgZWl0aGVyIGluaXRpYWxpemVkIGFuZCB1c2VkLCBvciBpdCYjMzk7cyBub3QgaW5pdGlhbGl6ZWQgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkIGJlZm9yZSBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIHVzZWQuCiogICAqKkNyaXRlcmlvbiAzIChDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzKToqKiBOby4gVGhlIGBjdHgtJmd0O293bmVyYCBwb2ludGVyIGlzIGJlaW5nIGluaXRpYWxpemVkLCBpdCBpcyBhIHNpbmdsZSBwb2ludGVyIGFuZCBoYXMgY2xlYXIgaW5pdGlhbGlzYXRpb24gb3IgZWFybHkgcmV0dXJuLgoqICAgKipDcml0ZXJpb24gNCAoVW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzKToqKiBOby4gVGhpcyBwYXRjaCBzdHJpY3RseSBmb2N1c2VzIG9uIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZG9lc24mIzM5O3QgdG91Y2ggYnVmZmVyIG1hbmFnZW1lbnQgb3IgaW50cm9kdWNlIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gdW5pbml0aWFsaXplZCBsZW5ndGggb3Igb2Zmc2V0IHZhcmlhYmxlcy4KCkluIGVzc2VuY2UsIHRoaXMgaXMgYSBwdXJlIHJlZmNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IHBhdGNoIGRlc2lnbmVkIHRvIHByb3RlY3QgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSwgYSBwcm9ibGVtIHRoYXQgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycyBhcmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIGNvcnJlY3QgZGVjaXNpb24gaGVyZS4KClRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgKGB0cnlfbW9kdWxlX2dldCgpYCAvIGBtb2R1bGVfcHV0KClgKSBkdXJpbmcgR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1wIG9wZXJhdGlvbnMgKGBjdHJsX2R1bXBwb2xpY3lfc3RhcnRgIGFuZCBgY3RybF9kdW1wcG9saWN5X2RvbmVgKS4gVGhpcyBwcmV2ZW50cyB0aGUgbW9kdWxlIGltcGxlbWVudGluZyB0aGUgZmFtaWx5IGZyb20gYmVpbmcgdW5sb2FkZWQgd2hpbGUgYSBwb2xpY3kgZHVtcCBpcyBpbiBwcm9ncmVzcy5cblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIG1vZHVsZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAvIGludmFsaWQgY29kZSBvciBkYXRhIGFjY2VzcyBvbiBtb2R1bGUgdW5sb2FkKSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgZGF0YSBleHBvc3VyZSwgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyAoYHRyeV9tb2R1bGVfZ2V0KClgIC8gYG1vZHVsZV9wdXQoKWApIGR1cmluZyBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXAgb3BlcmF0aW9ucyAoYGN0cmxfZHVtcHBvbGljeV9zdGFydGAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZWApLiBUaGlzIHByZXZlbnRzIHRoZSBtb2R1bGUgaW1wbGVtZW50aW5nIHRoZSBmYW1pbHkgZnJvbSBiZWluZyB1bmxvYWRlZCB3aGlsZSBhIHBvbGljeSBkdW1wIGlzIGluIHByb2dyZXNzLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgbW9kdWxlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKHByZXZlbnRpbmcgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIC8gaW52YWxpZCBjb2RlIG9yIGRhdGEgYWNjZXNzIG9uIG1vZHVsZSB1bmxvYWQpLCB3aGljaCBpcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBkYXRhIGV4cG9zdXJlLCBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTowOC42NzM2NTU2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDM3NzU5NjU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lfc3RhcnRcIixcbiAgICBcImN0cmxfZHVtcHBvbGljeV9kb25lXCIsXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyAoYHRyeV9tb2R1bGVfZ2V0KClgIC8gYG1vZHVsZV9wdXQoKWApIGR1cmluZyBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXAgb3BlcmF0aW9ucyAoYGN0cmxfZHVtcHBvbGljeV9zdGFydGAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZWApLiBUaGlzIHByZXZlbnRzIHRoZSBtb2R1bGUgaW1wbGVtZW50aW5nIHRoZSBmYW1pbHkgZnJvbSBiZWluZyB1bmxvYWRlZCB3aGlsZSBhIHBvbGljeSBkdW1wIGlzIGluIHByb2dyZXNzLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBtb2R1bGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgLyBpbnZhbGlkIGNvZGUgb3IgZGF0YSBhY2Nlc3Mgb24gbW9kdWxlIHVubG9hZCksIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGRhdGEgZXhwb3N1cmUsIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBtb2R1bGUgcmVmZXJlbmNlIGhvbGRpbmcgKHRyeV9tb2R1bGVfZ2V0L21vZHVsZV9wdXQpIGZvciBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHBvbGljeSBkdW1wcyBpbiBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKSBhbmQgY3RybF9kdW1wcG9saWN5X2RvbmUoKSwgYWx0ZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBlcnJvciBjbGVhbnVwIHBhdGhzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEdlbmVyaWMgTmV0bGluayBDVFJMX0NNRF9HRVRQT0xJQ1kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjA4LjY3MzY2MjE3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNTc1MTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUzN2Y5Mjc4NWY2OTc4ZDNhZTExZTczMzJlMzRjYjIwM2Q2OWFiZmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwMjowNTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jXFxuaW5kZXggMGRhMzllYWVkMjU1Zi4uNDFkMzc0NDJmMTg2OCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuY1xcbisrKyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jXFxuQEAgLTE1MTMsNiArMTUxMyw3IEBAIHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7XFxuIFxcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZTtcXG4gXFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcXG4gXFx0c3RydWN0IGdlbmxfb3BfaXRlciAqb3BfaXRlcjtcXG4rXFx0c3RydWN0IG1vZHVsZSAqb3duZXI7XFxuIFxcdHUzMiBvcDtcXG4gXFx0dTE2IGZhbV9pZDtcXG4gXFx0dTggZHVtcF9tYXA6MSxcXG5AQCAtMTU1NSw2ICsxNTU2LDkgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGN0eC1cXHUwMDNlcnQgPSBydDtcXG4rXFx0Y3R4LVxcdTAwM2Vvd25lciA9IHJ0LVxcdTAwM2Vtb2R1bGU7XFxuK1xcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVxcdTAwM2Vvd25lcikpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4gXFx0aWYgKHRiW0NUUkxfQVRUUl9PUF0pIHtcXG4gXFx0XFx0c3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7XFxuQEAgLTE1NjUsNyArMTU2OSw3IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0ZXJyID0gZ2VubF9nZXRfY21kX2JvdGgoY3R4LVxcdTAwM2VvcCwgcnQsIFxcdTAwMjZkb2l0LCBcXHUwMDI2ZHVtcCk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0JBRF9BVFRSKGNiLVxcdTAwM2VleHRhY2ssIHRiW0NUUkxfQVRUUl9PUF0pO1xcbi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRnb3RvIGVycl9wdXRfb3duZXI7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChkb2l0LnBvbGljeSkge1xcbkBAIC0xNTgzLDE2ICsxNTg3LDIwIEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKCFjdHgtXFx1MDAzZXN0YXRlKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuK1xcdFxcdGlmICghY3R4LVxcdTAwM2VzdGF0ZSkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PREFUQTtcXG4rXFx0XFx0XFx0Z290byBlcnJfcHV0X293bmVyO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRjdHgtXFx1MDAzZWR1bXBfbWFwID0gMTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdGN0eC1cXHUwMDNlb3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbi1cXHRpZiAoIWN0eC1cXHUwMDNlb3BfaXRlcilcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGlmICghY3R4LVxcdTAwM2VvcF9pdGVyKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX3B1dF9vd25lcjtcXG4rXFx0fVxcbiBcXG4gXFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuIFxcdGN0eC1cXHUwMDNlZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbkBAIC0xNjI0LDYgKzE2MzIsOCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXFx1MDAzZXN0YXRlKTtcXG4gZXJyX2ZyZWVfb3BfaXRlcjpcXG4gXFx0a2ZyZWUoY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG4rZXJyX3B1dF9vd25lcjpcXG4rXFx0bW9kdWxlX3B1dChjdHgtXFx1MDAzZW93bmVyKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTc2MCw2ICsxNzcwLDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcbiBcXHRrZnJlZShjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbiBcXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdG1vZHVsZV9wdXQoY3R4LVxcdTAwM2Vvd25lcik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNToxMC40MTA4OTkxNDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxOTExNzkzNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0cmxfZHVtcHBvbGljeV9zdGFydFwiLFxuICAgIFwiY3RybF9kdW1wcG9saWN5X2RvbmVcIixcbiAgICBcImN0cmxfZHVtcHBvbGljeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbW9kdWxlIHJlZmVyZW5jZSBob2xkaW5nICh0cnlfbW9kdWxlX2dldC9tb2R1bGVfcHV0KSBmb3IgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBwb2xpY3kgZHVtcHMgaW4gY3RybF9kdW1wcG9saWN5X3N0YXJ0KCkgYW5kIGN0cmxfZHVtcHBvbGljeV9kb25lKCksIGFsdGVyaW5nIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZXJyb3IgY2xlYW51cCBwYXRocyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBHZW5lcmljIE5ldGxpbmsgQ1RSTF9DTURfR0VUUE9MSUNZLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMzdmOTI3ODVmNjk3OGQzYWUxMWU3MzMyZTM0Y2IyMDNkNjlhYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMjowNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbmluZGV4IDBkYTM5ZWFlZDI1NWYuLjQxZDM3NDQyZjE4NjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuY1xuKysrIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbkBAIC0xNTEzLDYgKzE1MTMsNyBAQCBzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xuIFx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xuIFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcbiBcdHN0cnVjdCBnZW5sX29wX2l0ZXIgKm9wX2l0ZXI7XG4rXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiBcdHUzMiBvcDtcbiBcdHUxNiBmYW1faWQ7XG4gXHR1OCBkdW1wX21hcDoxLFxuQEAgLTE1NTUsNiArMTU1Niw5IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRjdHgtXHUwMDNlcnQgPSBydDtcbitcdGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtcbitcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xuIFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcDtcbkBAIC0xNTY1LDcgKzE1NjksNyBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdGVyciA9IGdlbmxfZ2V0X2NtZF9ib3RoKGN0eC1cdTAwM2VvcCwgcnQsIFx1MDAyNmRvaXQsIFx1MDAyNmR1bXApO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGNiLVx1MDAzZWV4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7XG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGRvaXQucG9saWN5KSB7XG5AQCAtMTU4MywxNiArMTU4NywyMCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuIFx0XHR9XG4gXG4tXHRcdGlmICghY3R4LVx1MDAzZXN0YXRlKVxuLVx0XHRcdHJldHVybiAtRU5PREFUQTtcbitcdFx0aWYgKCFjdHgtXHUwMDNlc3RhdGUpIHtcbitcdFx0XHRlcnIgPSAtRU5PREFUQTtcbitcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4rXHRcdH1cbiBcbiBcdFx0Y3R4LVx1MDAzZWR1bXBfbWFwID0gMTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRjdHgtXHUwMDNlb3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtXHUwMDNlb3BfaXRlcik7XG4tXHRpZiAoIWN0eC1cdTAwM2VvcF9pdGVyKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfcHV0X293bmVyO1xuK1x0fVxuIFxuIFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbkBAIC0xNjI0LDYgKzE2MzIsOCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbiBlcnJfZnJlZV9vcF9pdGVyOlxuIFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuK2Vycl9wdXRfb3duZXI6XG4rXHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzYwLDYgKzE3NzAsNyBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcbiBcdGtmcmVlKGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXHUwMDNlc3RhdGUpO1xuK1x0bW9kdWxlX3B1dChjdHgtXHUwMDNlb3duZXIpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MTAuNDEwOTAxODkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA1OTg3NDk0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5sIFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBMb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgLiBSaWdodCwgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBjaGFuZ2UgaXMgYWN0dWFsbHkgKmRvaW5nKi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYC4gQWgsIEkgc2VlLCBpdCdzIGFib3V0IG1vZHVsZSByZWZlcmVuY2UgbWFuYWdlbWVudCBkdXJpbmcgcG9saWN5IGR1bXBzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gYENUUkxfQ01EX0dFVFBPTElDWWAuIEl0IGFwcGVhcnMgdGhleSdyZSBhZGRpbmcgYGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtgIGFuZCBpbXBsZW1lbnRpbmcgYHRyeV9tb2R1bGVfZ2V0KClgIGFuZCBgbW9kdWxlX3B1dCgpYCBjYWxscy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciB0cmFja2luZyBtb2R1bGUgdXNhZ2UgdG8gcHJldmVudCB1bmxvYWQgaXNzdWVzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggcmVzb3VyY2VzIG9yIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBvdXRsaXZlIHRoZSByZXF1ZXN0IGl0c2VsZiBkdXJpbmcgcG9saWN5IGR1bXBzIGluIEdlbmVyaWMgTmV0bGluay5cblxuSW50ZXJlc3RpbmcsIHRoaXMgaXMgcHJvYmFibHkgdG8gYWRkcmVzcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHJlZmVyZW5jZSBjb3VudCBlcnJvcnMuIExldCdzIG1ha2Ugc3VyZSBvdXIgY29udGV4dCBpcyBpbiBvcmRlciwgSSdsbCBydW4gdGhlIGFwcHJvcHJpYXRlIHRvb2xzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MjEuMDA5NjU0MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE1Mjc0NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0cmxfZHVtcHBvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0bGluay9nZW5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNTIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdHJsX3BvbGljeV9wb2xpY3lbXSA9IHtcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1MjktXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTUzMDpzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTUzMS17XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjM5LVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2NDA6c3RhdGljIHZvaWQgKmN0cmxfZHVtcHBvbGljeV9wcmVwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY0MS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NTctXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY1ODpzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjU5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY3MS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNjcyOlxcdGhkciA9IGN0cmxfZHVtcHBvbGljeV9wcmVwKHNrYiwgY2IpO1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NzMtXFx0aWYgKCFoZHIpXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzEwLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE3MTE6c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MTIte1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTcyMy1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzI0OlxcdFxcdFxcdGlmIChjdHJsX2R1bXBwb2xpY3lfcHV0X29wKHNrYiwgY2IsIFxcdTAwMjZkb2l0LCBcXHUwMDI2ZHVtcGl0KSlcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzI1LVxcdFxcdFxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MzEtXFx0XFx0d2hpbGUgKGN0eC1cXHUwMDNlZHVtcF9tYXApIHtcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzMyOlxcdFxcdFxcdGlmIChjdHJsX2R1bXBwb2xpY3lfcHV0X29wKHNrYiwgY2IsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTczMy1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y3R4LVxcdTAwM2VvcF9pdGVyLVxcdTAwM2Vkb2l0LFxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc0My1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzQ0OlxcdFxcdGhkciA9IGN0cmxfZHVtcHBvbGljeV9wcmVwKHNrYiwgY2IpO1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NDUtXFx0XFx0aWYgKCFoZHIpXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzY2LVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE3Njc6c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc2OC17XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNzc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZ2VubF9jdHJsX29wc1tdID0ge1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc5Ny1cXHRcXHQubWF4YXR0clxcdD0gQVJSQVlfU0laRShjdHJsX3BvbGljeV9wb2xpY3kpIC0gMSxcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzk4OlxcdFxcdC5zdGFydFxcdFxcdD0gY3RybF9kdW1wcG9saWN5X3N0YXJ0LFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE3OTk6XFx0XFx0LmR1bXBpdFxcdFxcdD0gY3RybF9kdW1wcG9saWN5LFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE4MDA6XFx0XFx0LmRvbmVcXHRcXHQ9IGN0cmxfZHVtcHBvbGljeV9kb25lLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE4MDEtXFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX0NNRF9DQVBfRFVNUCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MjEuOTI0OTMzMjY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyNTU2MTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGdlbmV0bGluay5jKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpZyBpbnRvIHRoZSBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGVzdGFibGlzaCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGVjb3N5c3RlbSBvZiB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMsIHRvIGdyYXNwIGhvdyB0aGlzIHNwZWNpZmljIGZpbGUgZml0cyBpbnRvIHRoZSBsYXJnZXIgZ2VuZXRsaW5rIGZyYW1ld29yay4gSSB3YW50IHRvIHNlZSB0aGUga2V5IGVudHJ5IHBvaW50cywgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBmbG93LiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24sIG1lc3NhZ2Ugcm91dGluZywgYW5kIHRoZSBjb3JlIGludGVyYWN0aW9uIGxvZ2ljLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGNsYXJpZnkgdGhlIHB1cnBvc2Ugb2YgKnRoaXMqIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNToyMy43NTA0OTgyODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUzMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUzMDpcXHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMTUzMTpcXHR7XFxuMTUzMjpcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbjE1MzM6XFx0XFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuMTUzNDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVxcdTAwM2VpbmZvLmF0dHJzO1xcbjE1MzU6XFx0XFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcXG4xNTM2OlxcdFxcdHN0cnVjdCBnZW5sX29wX2l0ZXIgaTtcXG4xNTM3OlxcdFxcdGludCBlcnI7XFxuMTUzODpcXHRcXG4xNTM5OlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXFx1MDAzZSBzaXplb2YoY2ItXFx1MDAzZWN0eCkpO1xcbjE1NDA6XFx0XFxuMTU0MTpcXHRcXHRpZiAoIXRiW0NUUkxfQVRUUl9GQU1JTFlfSURdIFxcdTAwMjZcXHUwMDI2ICF0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKVxcbjE1NDI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU0MzpcXHRcXG4xNTQ0OlxcdFxcdGlmICh0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSkge1xcbjE1NDU6XFx0XFx0XFx0Y3R4LVxcdTAwM2VmYW1faWQgPSBubGFfZ2V0X3UxNih0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSk7XFxuMTU0NjpcXHRcXHR9IGVsc2Uge1xcbjE1NDc6XFx0XFx0XFx0cnQgPSBnZW5sX2ZhbWlseV9maW5kX2J5bmFtZShcXG4xNTQ4OlxcdFxcdFxcdFxcdG5sYV9kYXRhKHRiW0NUUkxfQVRUUl9GQU1JTFlfTkFNRV0pKTtcXG4xNTQ5OlxcdFxcdFxcdGlmICghcnQpXFxuMTU1MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xNTUxOlxcdFxcdFxcdGN0eC1cXHUwMDNlZmFtX2lkID0gcnQtXFx1MDAzZWlkO1xcbjE1NTI6XFx0XFx0fVxcbjE1NTM6XFx0XFxuMTU1NDpcXHRcXHRydCA9IGdlbmxfZmFtaWx5X2ZpbmRfYnlpZChjdHgtXFx1MDAzZWZhbV9pZCk7XFxuMTU1NTpcXHRcXHRpZiAoIXJ0KVxcbjE1NTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTU1NzpcXHRcXG4xNTU4OlxcdFxcdGN0eC1cXHUwMDNlcnQgPSBydDtcXG4xNTU5OlxcdFxcdGN0eC1cXHUwMDNlb3duZXIgPSBydC1cXHUwMDNlbW9kdWxlO1xcbjE1NjA6XFx0XFx0aWYgKCF0cnlfbW9kdWxlX2dldChjdHgtXFx1MDAzZW93bmVyKSlcXG4xNTYxOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE1NjI6XFx0XFxuMTU2MzpcXHRcXHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xcbjE1NjQ6XFx0XFx0XFx0c3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7XFxuMTU2NTpcXHRcXG4xNTY2OlxcdFxcdFxcdGN0eC1cXHUwMDNlc2luZ2xlX29wID0gdHJ1ZTtcXG4xNTY3OlxcdFxcdFxcdGN0eC1cXHUwMDNlb3AgPSBubGFfZ2V0X3UzMih0YltDVFJMX0FUVFJfT1BdKTtcXG4xNTY4OlxcdFxcbjE1Njk6XFx0XFx0XFx0ZXJyID0gZ2VubF9nZXRfY21kX2JvdGgoY3R4LVxcdTAwM2VvcCwgcnQsIFxcdTAwMjZkb2l0LCBcXHUwMDI2ZHVtcCk7XFxuMTU3MDpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMTU3MTpcXHRcXHRcXHRcXHROTF9TRVRfQkFEX0FUVFIoY2ItXFx1MDAzZWV4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7XFxuMTU3MjpcXHRcXHRcXHRcXHRnb3RvIGVycl9wdXRfb3duZXI7XFxuMTU3MzpcXHRcXHRcXHR9XFxuMTU3NDpcXHRcXG4xNTc1OlxcdFxcdFxcdGlmIChkb2l0LnBvbGljeSkge1xcbjE1NzY6XFx0XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbjE1Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkb2l0LnBvbGljeSxcXG4xNTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZG9pdC5tYXhhdHRyKTtcXG4xNTc5OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTU4MDpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3N0YXRlO1xcbjE1ODE6XFx0XFx0XFx0fVxcbjE1ODI6XFx0XFx0XFx0aWYgKGR1bXAucG9saWN5KSB7XFxuMTU4MzpcXHRcXHRcXHRcXHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXFx1MDAyNmN0eC1cXHUwMDNlc3RhdGUsXFxuMTU4NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGR1bXAucG9saWN5LFxcbjE1ODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkdW1wLm1heGF0dHIpO1xcbjE1ODY6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4xNTg3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfc3RhdGU7XFxuMTU4ODpcXHRcXHRcXHR9XFxuMTU4OTpcXHRcXG4xNTkwOlxcdFxcdFxcdGlmICghY3R4LVxcdTAwM2VzdGF0ZSkge1xcbjE1OTE6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0RBVEE7XFxuMTU5MjpcXHRcXHRcXHRcXHRnb3RvIGVycl9wdXRfb3duZXI7XFxuMTU5MzpcXHRcXHRcXHR9XFxuMTU5NDpcXHRcXG4xNTk1OlxcdFxcdFxcdGN0eC1cXHUwMDNlZHVtcF9tYXAgPSAxO1xcbjE1OTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTU5NzpcXHRcXHR9XFxuMTU5ODpcXHRcXG4xNTk5OlxcdFxcdGN0eC1cXHUwMDNlb3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbjE2MDA6XFx0XFx0aWYgKCFjdHgtXFx1MDAzZW9wX2l0ZXIpIHtcXG4xNjAxOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMTYwMjpcXHRcXHRcXHRnb3RvIGVycl9wdXRfb3duZXI7XFxuMTYwMzpcXHRcXHR9XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdGdlbmxfb3BfaXRlcl9pbml0KHJ0LCBjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbjE2MDY6XFx0XFx0Y3R4LVxcdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuMTYwNzpcXHRcXG4xNjA4OlxcdFxcdGZvciAoZ2VubF9vcF9pdGVyX2luaXQocnQsIFxcdTAwMjZpKTsgZ2VubF9vcF9pdGVyX25leHQoXFx1MDAyNmkpOyApIHtcXG4xNjA5OlxcdFxcdFxcdGlmIChpLmRvaXQucG9saWN5KSB7XFxuMTYxMDpcXHRcXHRcXHRcXHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXFx1MDAyNmN0eC1cXHUwMDNlc3RhdGUsXFxuMTYxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGkuZG9pdC5wb2xpY3ksXFxuMTYxMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGkuZG9pdC5tYXhhdHRyKTtcXG4xNjEzOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTYxNDpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3N0YXRlO1xcbjE2MTU6XFx0XFx0XFx0fVxcbjE2MTY6XFx0XFx0XFx0aWYgKGkuZHVtcGl0LnBvbGljeSkge1xcbjE2MTc6XFx0XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbjE2MTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmR1bXBpdC5wb2xpY3ksXFxuMTYxOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGkuZHVtcGl0Lm1heGF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNToyMy43NTA4NzgyMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgxOTEwMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIHRhcmdldGVkIHRvd2FyZHMgYW4gZXhwZXJ0OlxuXG4qKkZvY3VzaW5nIG9uIGEgU3BlY2lmaWMgU2VjdGlvbioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDE3NjAtMTgxMC4gSSdtIHRha2luZyBhIHRhcmdldGVkIGFwcHJvYWNoIGhlcmUgYmVjYXVzZSwgYmFzZWQgb24gbXkgcHJpb3IgYW5hbHlzaXMgYW5kIGV4cGVyaWVuY2UsIEkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgd2l0aGluIHRoaXMgcmFuZ2UuIEl0IGNvdWxkIGJlIGEga2V5IGFzc3VtcHRpb24gYmVpbmcgbWFkZSwgYSBjcml0aWNhbCBkYXRhIHBvaW50IGJlaW5nIGludHJvZHVjZWQsIG9yIHBlcmhhcHMgYSBzZWN0aW9uIHdoZXJlIHRoZSBhcmd1bWVudGF0aW9uIHRha2VzIGFuIGludGVyZXN0aW5nIHR1cm4gdGhhdCB3YXJyYW50cyBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQncyBjb250cmlidXRpb24gdG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBzZWUgaWYgaXQgaXMgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW0gYXQgaGFuZCwgYW5kIHdoZXJlIGl0IGZpdHMgaW50byBteSBoeXBvdGhlc2lzLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgc2VnbWVudCB0byBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiBhc3Nlc3NpbmcgdGhlIHBhcGVyIG9yIGRvY3VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjkxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNToyNS42MzI3OTA3NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc2MDpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTc2MTpcXHRcXG4xNzYyOlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4xNzYzOlxcdFxcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcXG4xNzY0OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4xNzY1OlxcdH1cXG4xNzY2OlxcdFxcbjE3Njc6XFx0c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMTc2ODpcXHR7XFxuMTc2OTpcXHRcXHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4xNzcwOlxcdFxcbjE3NzE6XFx0XFx0a2ZyZWUoY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG4xNzcyOlxcdFxcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXFx1MDAzZXN0YXRlKTtcXG4xNzczOlxcdFxcdG1vZHVsZV9wdXQoY3R4LVxcdTAwM2Vvd25lcik7XFxuMTc3NDpcXHRcXHRyZXR1cm4gMDtcXG4xNzc1OlxcdH1cXG4xNzc2OlxcdFxcbjE3Nzc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBnZW5sX2N0cmxfb3BzW10gPSB7XFxuMTc3ODpcXHRcXHR7XFxuMTc3OTpcXHRcXHRcXHQuY21kXFx0XFx0PSBDVFJMX0NNRF9HRVRGQU1JTFksXFxuMTc4MDpcXHRcXHRcXHQudmFsaWRhdGVcXHQ9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QsXFxuMTc4MTpcXHRcXHRcXHQucG9saWN5XFx0XFx0PSBjdHJsX3BvbGljeV9mYW1pbHksXFxuMTc4MjpcXHRcXHRcXHQubWF4YXR0clxcdD0gQVJSQVlfU0laRShjdHJsX3BvbGljeV9mYW1pbHkpIC0gMSxcXG4xNzgzOlxcdFxcdFxcdC5kb2l0XFx0XFx0PSBjdHJsX2dldGZhbWlseSxcXG4xNzg0OlxcdFxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9DTURfQ0FQX0RPLFxcbjE3ODU6XFx0XFx0fSxcXG4xNzg2OlxcdFxcdHtcXG4xNzg3OlxcdFxcdFxcdC5jbWRcXHRcXHQ9IENUUkxfQ01EX0dFVEZBTUlMWSxcXG4xNzg4OlxcdFxcdFxcdC52YWxpZGF0ZVxcdD0gR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuMTc4OTpcXHRcXHRcXHQucG9saWN5XFx0XFx0PSBjdHJsX3BvbGljeV9mYW1pbHksXFxuMTc5MDpcXHRcXHRcXHQubWF4YXR0clxcdD0gQVJSQVlfU0laRShjdHJsX3BvbGljeV9mYW1pbHkpIC0gMSxcXG4xNzkxOlxcdFxcdFxcdC5kdW1waXRcXHRcXHQ9IGN0cmxfZHVtcGZhbWlseSxcXG4xNzkyOlxcdFxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9DTURfQ0FQX0RVTVAsXFxuMTc5MzpcXHRcXHR9LFxcbjE3OTQ6XFx0XFx0e1xcbjE3OTU6XFx0XFx0XFx0LmNtZFxcdFxcdD0gQ1RSTF9DTURfR0VUUE9MSUNZLFxcbjE3OTY6XFx0XFx0XFx0LnBvbGljeVxcdFxcdD0gY3RybF9wb2xpY3lfcG9saWN5LFxcbjE3OTc6XFx0XFx0XFx0Lm1heGF0dHJcXHQ9IEFSUkFZX1NJWkUoY3RybF9wb2xpY3lfcG9saWN5KSAtIDEsXFxuMTc5ODpcXHRcXHRcXHQuc3RhcnRcXHRcXHQ9IGN0cmxfZHVtcHBvbGljeV9zdGFydCxcXG4xNzk5OlxcdFxcdFxcdC5kdW1waXRcXHRcXHQ9IGN0cmxfZHVtcHBvbGljeSxcXG4xODAwOlxcdFxcdFxcdC5kb25lXFx0XFx0PSBjdHJsX2R1bXBwb2xpY3lfZG9uZSxcXG4xODAxOlxcdFxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9DTURfQ0FQX0RVTVAsXFxuMTgwMjpcXHRcXHR9LFxcbjE4MDM6XFx0fTtcXG4xODA0OlxcdFxcbjE4MDU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBnZW5sX2N0cmxfZ3JvdXBzW10gPSB7XFxuMTgwNjpcXHRcXHR7IC5uYW1lID0gXFxcIm5vdGlmeVxcXCIsIH0sXFxuMTgwNzpcXHR9O1xcbjE4MDg6XFx0XFxuMTgwOTpcXHRzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGdlbmxfY3RybCBfX3JvX2FmdGVyX2luaXQgPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjI1LjYzMjkxMDI4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0ODkxMjYwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEl0J3MgdG91Y2hpbmcgYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgaW50ZXJlc3QuIEdlbmVyaWMgbmV0bGluayBpcyAqY29yZSogbmV0d29ya2luZywgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXRsaW5rIHNvY2tldHMgKGBBRl9ORVRMSU5LYCwgYE5FVExJTktfR0VORVJJQ2ApLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0LiBJIGtub3cgdGhlIGNvbnRyb2xsZXIgZmFtaWx5IGBHRU5MX0lEX0NUUkxgIGhhbmRsZXMgYENUUkxfQ01EX0dFVFBPTElDWWAgZHVtcCByZXF1ZXN0cy5cblxuTXkgbWFpbiBjb25jZXJuIGlzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIHBvbGljeSBkdW1wcy4gUmlnaHQsIHdoZW4gZHVtcGluZyBwb2xpY3kgdXNpbmcgYENUUkxfQ01EX0dFVFBPTElDWWAsIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgZ3JhYnMgYSByZWZlcmVuY2UgdG8gdGhlIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgbW9kdWxlIHdpdGggYHRyeV9tb2R1bGVfZ2V0KGN0eC1cdTAwM2Vvd25lcilgIGFuZCBzdG9yZXMgaXQuIFRoaXMgaW1wbGllcyBhIHBvdGVudGlhbCB3aW5kb3cgd2hlcmUgdGhlIG1vZHVsZSBjb3VsZCBiZSB1bmxvYWRlZCBpZiBub3QgcHJvcGVybHkgcHJvdGVjdGVkIHdoaWxlIHBvbGljeSBkdW1waW5nIGlzIGFjdGl2ZS4gVGhlIGNsZWFudXAgaW4gYGN0cmxfZHVtcHBvbGljeV9kb25lKClgIGRvZXMgYSBgbW9kdWxlX3B1dChjdHgtXHUwMDNlb3duZXIpYCB0byByZWxlYXNlIGl0LiBJbXBvcnRhbnRseSwgdGhlIGVycm9yIHBhdGhzIGluIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYWxzbyByZWxlYXNlIHRoZSBtb2R1bGUgcmVmIHZpYSBgZ290byBlcnJfcHV0X293bmVyYC5cblxuQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoaXMgd2FycmFudHMgZnV6emluZzpcblxuKiAgICoqSXMgaXQgaW4gY29yZSBrZXJuZWwgbG9naWMvcmVhY2hhYmxlIGRyaXZlcnM/KiogWWVwLCBnZW5lcmljIG5ldGxpbmsgY29yZSwgd2hpY2ggbWFrZXMgaXQgaGlnaC12YWx1ZS5cbiogICAqKklzIGl0IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2U/KiogQWJzb2x1dGVseSwgdGhyb3VnaCBgQ1RSTF9DTURfR0VUUE9MSUNZYCBvbiBgTkVUTElOS19HRU5FUklDYC4gVGhpcyBpcyBrZXkuXG4qICAgKipEb2VzIGl0IG1ha2UgZnVuY3Rpb25hbCBjaGFuZ2VzPyoqIFllcywgY3JpdGljYWxseSwgaXQncyBpbnRyb2R1Y2luZyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBwb2xpY3kgZHVtcHMgdG8gcHJldmVudCBtb2R1bGUgdW5sb2FkaW5nIG9yIHVzZS1hZnRlci1mcmVlIHdoaWxlIGEgcG9saWN5IGlzIGJlaW5nIGR1bXBlZC4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIGFuZCBjaGFuZ2VzIGVycm9yL2NsZWFudXAgcGF0aHMuXG5cblRoZSBhbnN3ZXIgaXMgKip3b3J0aCBmdXp6aW5nKiouIFRoaXMgc291bmRzIGxpa2UgYSBwcmltZSB0YXJnZXQuXG5cbk5vdyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIEdlbmVyaWMgTmV0bGluay4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYG5ldC9uZXRsaW5rL01ha2VmaWxlYCBhbmQgdGhlbiBgbmV0L0tjb25maWdgIG9yIGBuZXQvbmV0bGluay9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MDYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTozMC4xMjIwMzk1MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjYzNjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldGxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L2JhdF9hbGdvLmM6MTg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jLTQzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmM6NDQ6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMtNDUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5jLTI4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5jOjI5OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2JhdG1hbi1hZHYvYmF0X3YuYy0zMC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQwLSNpbmNsdWRlIFxcdTAwM2NuZXQvYXJwLmhcXHUwMDNlXFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmM6NDE6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00Mi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTM4LSNpbmNsdWRlIFxcdTAwM2NuZXQvYXJwLmhcXHUwMDNlXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6Mzk6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy00MC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy0zOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2RzZmllbGQuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM6Mzk6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtNDAtI2luY2x1ZGUgXFx1MDAzY25ldC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ0LSNpbmNsdWRlIFxcdTAwM2NuZXQvYWRkcmNvbmYuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo0NTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ2LSNpbmNsdWRlIFxcdTAwM2NuZXQvaWZfaW5ldDYuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdXRzbmFtZS5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzozMzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zNC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDI6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQzLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTItXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjM6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYy0yLVxcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYzozOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTQtXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MzA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0zMS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGV2ZW50LmhcXHUwMDNlXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy05LVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6MTE6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC0xMi1cXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy02LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2RldmxpbmsvY29yZS5jLTgtI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG5uZXQvZGV2bGluay9kZXYuYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2RldmxpbmsvZGV2LmMtOS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9kZXZsaW5rL2hlYWx0aC5jLTYtXFxubmV0L2RldmxpbmsvaGVhbHRoLmM6NzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL2hlYWx0aC5jLTgtI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuLS1cXG5uZXQvZGV2bGluay9uZXRsaW5rLmMtNi1cXG5uZXQvZGV2bGluay9uZXRsaW5rLmM6NzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL25ldGxpbmsuYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbi0tXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmM6ODojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmMtOS1cXG4tLVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaDoxMTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTItXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9MjYwPWludCBldGhubF9maWxsX3JlcGx5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTI4Ny0gKiBldGhubF9yZXBseV9pbml0KCkgLSBDcmVhdGUgc2tiIGZvciBhIHJlcGx5IGFuZCBmaWxsIGRldmljZSBpZGVudGlmaWNhdGlvblxcbm5ldC9ldGh0b29sL25ldGxpbmsuYzoyODg6ICogQHBheWxvYWQ6ICAgICAgcGF5bG9hZCBsZW5ndGggKHdpdGhvdXQgbmV0bGluayBhbmQgZ2VuZXRsaW5rIGhlYWRlcilcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMjg5LSAqIEBkZXY6ICAgICAgICAgIGRldmljZSB0aGUgcmVwbHkgaXMgYWJvdXQgKG1heSBiZSBudWxsKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTI5MS0gKiBAaGRyX2F0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZSBmb3IgY29tbW9uIGhlYWRlclxcbm5ldC9ldGh0b29sL25ldGxpbmsuYzoyOTI6ICogQGluZm86ICAgICAgICAgZ2VuZXRsaW5rIGluZm8gb2YgdGhlIHJlY2VpdmVkIHBhY2tldCB3ZSByZXNwb25kIHRvXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTI5My0gKiBAZWhkcnA6ICAgICAgICBwbGFjZSB0byBzdG9yZSBwYXlsb2FkIHBvaW50ZXIgcmV0dXJuZWQgYnkgZ2VubG1zZ19uZXcoKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTExNTU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBldGhubF9uZXRkZXZfbm90aWZpZXIgPSB7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTE1OC1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6MTE1OTovKiBnZW5ldGxpbmsgc2V0dXAgKi9cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTE2MC1cXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz0xNTk3PXN0YXRpYyBpbnQgX19pbml0IGV0aG5sX2luaXQodm9pZClcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xNjAxLVxcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFxcdTAwMjZldGh0b29sX2dlbmxfZmFtaWx5KTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6MTYwMjpcXHRpZiAoV0FSTihyZXQgXFx1MDAzYyAwLCBcXFwiZXRodG9vbDogZ2VuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24gZmFpbGVkXFxcIikpXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTE2MDMtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuaC03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmg6ODojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9ldGh0b29sL25ldGxpbmsuaC05LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtOS1cXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5oLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9oYW5kc2hha2UvZ2VubC5oOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9nZW5sLmgtMTItXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTMtI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE0OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXFx1MDAzZVxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTctI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjIwOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMjEtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRucy9nZW5lcmljLmhcXHUwMDNlXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTktI2luY2x1ZGUgXFx1MDAzY25ldC9oYW5kc2hha2UuaFxcdTAwM2VcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjEtI2luY2x1ZGUgXFx1MDAzY25ldC90bHNfcHJvdC5oXFx1MDAzZVxcbi0tXFxubmV0L2hhbmRzaGFrZS90cmFjZS5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9oYW5kc2hha2UvdHJhY2UuYzoxNjojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9oYW5kc2hha2UvdHJhY2UuYy0xNy1cXG4tLVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbmV0L3J0bmV0bGluay5oXFx1MDAzZVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYzoxMzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0xNC0jaW5jbHVkZSBcXFwiaHNyX21haW4uaFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaD01MT1leHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IG5sODAyMTU0X2ZhbWlseTtcXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtNTItXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjUzOi8qIGdlbmV0bGluayBvcHMvZ3JvdXBzICovXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTU0LWludCBpZWVlODAyMTU0X2xpc3RfcGh5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTU6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25sODAyMTU0LmhcXHUwMDNlXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxOTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtcGh5LmMtMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L2llZWU4MDIxNTQvbmwtcGh5LmM6MTc6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9ubC1waHkuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjE1NC5oXFx1MDAzZVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjE1NC5oXFx1MDAzZVxcbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmM6MTM6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTE0LSNpbmNsdWRlIFxcdTAwM2NuZXQvbWFjODAyMTU0LmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2dyby5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xOS0jaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9mb3UuaFxcdTAwM2VcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjIwOiNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMjEtXFxuLS1cXG5uZXQvaXB2NC9mb3VfbmwuYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY0L2ZvdV9ubC5jOjg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaXB2NC9mb3VfbmwuYy05LVxcbi0tXFxubmV0L2lwdjQvZm91X25sLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjQvZm91X25sLmg6MTE6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaXB2NC9mb3VfbmwuaC0xMi1cXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjEtI2luY2x1ZGUgXFx1MDAzY25ldC90Y3AuaFxcdTAwM2VcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIyOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMy1cXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGEuaC0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NoZWNrc3VtLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYS5oOjE3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYS5oLTE4LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvaXB2Ni9pbGEvaWxhX21haW4uYzoyOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYV9tYWluLmMtMy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFxcdTAwM2VcXG5uZXQvaXB2Ni9pbGEvaWxhX21haW4uYzo0OiNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jLTUtI2luY2x1ZGUgXFxcImlsYS5oXFxcIlxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjc6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXFx1MDAzZVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjk6I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTAtI2luY2x1ZGUgXFxcImlsYS5oXFxcIlxcbi0tXFxubmV0L2lwdjYvaW9hbTYuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2FkZHJjb25mLmhcXHUwMDNlXFxubmV0L2lwdjYvaW9hbTYuYzoxOTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY2L2lvYW02LmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9pb2FtNi5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvc2VnNi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzYuYzoyMTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzYuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2VnNi5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNl9obWFjLmMtMzktI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2LmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9obWFjLmM6NDA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy00MS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmg9MTU4PXN0cnVjdCBsMnRwX3R1bm5lbCB7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0xODUtXFxubmV0L2wydHAvbDJ0cF9jb3JlLmg6MTg2Oi8qIFBzZXVkb3dpcmUgb3BzIGNhbGxiYWNrcyBmb3IgdXNlIHdpdGggdGhlIGwydHAgZ2VuZXRsaW5rIGludGVyZmFjZSAqL1xcbm5ldC9sMnRwL2wydHBfY29yZS5oLTE4Ny1zdHJ1Y3QgbDJ0cF9ubF9jbWRfb3BzIHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjE2OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtMTctI2luY2x1ZGUgXFx1MDAzY25ldC91ZHAuaFxcdTAwM2VcXG4tLVxcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTktXFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oLTEyLVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTMtI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbXB0Y3AuaFxcdTAwM2VcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxNDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvcnN0cmVhc29uLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmNzaS9uY3NpLWNtZC5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9uY3NpL25jc2ktY21kLmM6MTY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmNzaS9uY3NpLWNtZC5jLTE3LVxcbi0tXFxubmV0L25jc2kvbmNzaS1tYW5hZ2UuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG5uZXQvbmNzaS9uY3NpLW1hbmFnZS5jOjE5OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25jc2kvbmNzaS1tYW5hZ2UuYy0yMC1cXG4tLVxcbm5ldC9uY3NpL25jc2ktbmV0bGluay5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbm5ldC9uY3NpL25jc2ktbmV0bGluay5jOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25jc2kvbmNzaS1uZXRsaW5rLmMtMTItI2luY2x1ZGUgXFx1MDAzY25ldC9uY3NpLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmNzaS9uY3NpLXJzcC5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9uY3NpL25jc2ktcnNwLmM6MTY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmNzaS9uY3NpLXJzcC5jLTE3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQzLSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zOTUxPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgaXBfdnNfc29ja29wdHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzk2NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzk2NjovKiBJUFZTIGdlbmV0bGluayBmYW1pbHkgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzk2Ny1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGlwX3ZzX2dlbmxfZmFtaWx5O1xcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYy0yNC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jOjI1OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYy0yNi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxhYmVsLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYzoyNDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGFiZWwuaFxcdTAwM2VcXG4tLVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMtMjQtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYzoyNTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMtMjYtI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jLTMzLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYzozNDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmM6MjY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5jLTI3LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGFiZWwuaFxcdTAwM2VcXG4tLVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmgtMjMtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuaDoyNDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmgtMjUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsYWJlbC5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGxpbmsvTWFrZWZpbGUtNS1cXG5uZXQvbmV0bGluay9NYWtlZmlsZTo2Om9iai15ICBcXHRcXHRcXHRcXHQ6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9cXG5uZXQvbmV0bGluay9NYWtlZmlsZS03LVxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTc1LSNpbmNsdWRlIFxcXCJhZl9uZXRsaW5rLmhcXFwiXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjc2OiNpbmNsdWRlIFxcXCJnZW5ldGxpbmsuaFxcXCJcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNzctXFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9NzE4PXN0YXRpYyBpbnQgbmV0bGlua19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNzM3LVxcdC8qIG11c3Qgbm90IGFjcXVpcmUgbmV0bGlua190YWJsZV9sb2NrIGluIGFueSB3YXkgYWdhaW4gYmVmb3JlIHVuYmluZFxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzo3Mzg6XFx0ICogYW5kIG5vdGlmeWluZyBnZW5ldGxpbmsgaXMgZG9uZSBhcyBvdGhlcndpc2UgaXQgbWlnaHQgZGVhZGxvY2tcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNzM5LVxcdCAqL1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMjItI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MjM6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0yNC1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoyNTojaW5jbHVkZSBcXFwiZ2VuZXRsaW5rLmhcXFwiXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMjYtXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuaC02LVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5oOjc6LyogZm9yIHN5bmNocm9uaXNhdGlvbiBiZXR3ZWVuIGFmX25ldGxpbmsgYW5kIGdlbmV0bGluayAqL1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5oLTgtZXh0ZXJuIGF0b21pY190IGdlbmxfc2tfZGVzdHJ1Y3RpbmdfY250O1xcbi0tXFxubmV0L25mYy9jb3JlLmMtMTgtXFxubmV0L25mYy9jb3JlLmM6MTk6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmZjL2NvcmUuYy0yMC1cXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3LVxcbm5ldC9uZmMvbmV0bGluay5jOjE4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25mYy9uZXRsaW5rLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25mYy5oXFx1MDAzZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEzLSNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTQ6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaFxcdTAwM2VcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWkuaFxcdTAwM2VcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzozNjojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM3LSNpbmNsdWRlIFxcdTAwM2NuZXQvZ3NvLmhcXHUwMDNlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZHBfbm90aWZ5LmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxubmV0L29wZW52c3dpdGNoL2RwX25vdGlmeS5jOjc6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvb3BlbnZzd2l0Y2gvZHBfbm90aWZ5LmMtOC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE2LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjE3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTgtXFxuLS1cXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMTQtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jOjE1OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jLTE2LSNpbmNsdWRlIFxcdTAwM2NuZXQvcHNhbXBsZS5oXFx1MDAzZVxcbi0tXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtNy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvcHNwL3BzcC1ubC1nZW4uYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtOS1cXG4tLVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMTItXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbm5ldC9wc3AvcHNwX25sLmM6NzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9wc3AvcHNwX25sLmMtOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3BzcC5oXFx1MDAzZVxcbi0tXFxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmMtNy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc2hhcGVyL3NoYXBlcl9ubF9nZW4uYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmMtOS1cXG4tLVxcbm5ldC9zaGFwZXIvc2hhcGVyX25sX2dlbi5oLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zaGFwZXIvc2hhcGVyX25sX2dlbi5oOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmgtMTItXFxuLS1cXG5uZXQvc21jL3NtYy5oLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZSAvKiBfX2FsaWduZWQgKi9cXG5uZXQvc21jL3NtYy5oOjE3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NtYy9zbWMuaC0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaC0xOS0jaW5jbHVkZSBcXHUwMDNjcmRtYS9pYl92ZXJicy5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2NvcmUuaDoyMDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2NvcmUuaC0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NtYy5oXFx1MDAzZVxcbi0tXFxubmV0L3NtYy9zbWNfbmV0bGluay5oLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX25ldGxpbmsuaDoxNjojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX25ldGxpbmsuaC0xNy1cXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc21jL3NtY19wbmV0LmM6MTc6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc21jL3NtY19wbmV0LmMtMTgtXFxuLS1cXG5uZXQvc21jL3NtY19zdGF0cy5jLTE1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbWMuaFxcdTAwM2VcXG5uZXQvc21jL3NtY19zdGF0cy5jOjE2OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NtYy9zbWNfc3RhdHMuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9zdW5ycGMvY2FjaGUuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3JwY19waXBlX2ZzLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9jYWNoZS5jOjM2OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9jYWNoZS5jLTM3LSNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvc3VucnBjLmhcXHUwMDNlXFxuLS1cXG5uZXQvc3VucnBjL25ldGxpbmsuYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvbmV0bGluay5jOjg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc3VucnBjL25ldGxpbmsuYy05LVxcbi0tXFxubmV0L3N1bnJwYy9uZXRsaW5rLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9uZXRsaW5rLmg6MTE6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc3VucnBjL25ldGxpbmsuaC0xMi1cXG4tLVxcbm5ldC9zdW5ycGMvc3VucnBjX3N5bXMuYy0yNS1cXG5uZXQvc3VucnBjL3N1bnJwY19zeW1zLmM6MjY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMtMjctXFxuLS1cXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmM6MjA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jLTIxLSNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L3N1bnJwY19uZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5uZXQvdGlwYy9iZWFyZXIuaC00Mi0jaW5jbHVkZSBcXFwibXNnLmhcXFwiXFxubmV0L3RpcGMvYmVhcmVyLmg6NDM6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvdGlwYy9iZWFyZXIuaC00NC1cXG4tLVxcbm5ldC90aXBjL2NvcmUuaC02Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbm5ldC90aXBjL2NvcmUuaDo2MzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC90aXBjL2NvcmUuaC02NC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2hhc2guaFxcdTAwM2VcXG4tLVxcbm5ldC90aXBjL2xpbmsuaC0zOS1cXG5uZXQvdGlwYy9saW5rLmg6NDA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvdGlwYy9saW5rLmgtNDEtI2luY2x1ZGUgXFxcIm1zZy5oXFxcIlxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTM1LVxcbm5ldC90aXBjL21vbml0b3IuYzozNjojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC90aXBjL21vbml0b3IuYy0zNy0jaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbi0tXFxubmV0L3RpcGMvbmV0LmgtMzktXFxubmV0L3RpcGMvbmV0Lmg6NDA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvdGlwYy9uZXQuaC00MS1cXG4tLVxcbm5ldC90aXBjL25ldGxpbmsuYy00NC0jaW5jbHVkZSBcXFwidWRwX21lZGlhLmhcXFwiXFxubmV0L3RpcGMvbmV0bGluay5jOjQ1OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3RpcGMvbmV0bGluay5jLTQ2LVxcbi0tXFxubmV0L3RpcGMvbmV0bGlua19jb21wYXQuYy00MC0jaW5jbHVkZSBcXFwibmV0LmhcXFwiXFxubmV0L3RpcGMvbmV0bGlua19jb21wYXQuYzo0MTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC90aXBjL25ldGxpbmtfY29tcGF0LmMtNDItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcXHUwMDNlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuaC0zOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG5uZXQvdGlwYy9zb2NrZXQuaDozOTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC90aXBjL3NvY2tldC5oLTQwLVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI1OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjExLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjE3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3dpcmVsZXNzL2NvcmUuaC0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjExLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXFx1MDAzZVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI3LSNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MzAuNzg4NjgzOTEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODM4ODkyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIE5ldGxpbmsgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBOZXRsaW5rIGltcGxlbWVudGF0aW9uLiBGaXJzdCBzdG9wLCBgbmV0L25ldGxpbmsvTWFrZWZpbGVgLiBBbHJpZ2h0LCBoZXJlIHdlIGdvLi4uIGBvYmoteSA6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9gLiBSaWdodCwgc28gdGhpcyBjb25maXJtcyB0aGUgY29yZSBtb2R1bGVzOiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGltcGxlbWVudGF0aW9uLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGl0c2VsZiwgYW5kIHBvbGljeSBjb25maWd1cmF0aW9ucy4gU3RhbmRhcmQgc3R1ZmYuIFRoaXMgd2hvbGUgdGhpbmcgZ2V0cyBidWlsdCwgSSByZWNhbGwsIHdoZW5ldmVyIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgdHlwaWNhbGx5IGdhdGVkIGJlaGluZCBgQ09ORklHX05FVGAuIEdvdCBpdC4gTm93LCBsZXQncyBwZWVrIGF0IHRoZSBwYXJlbnQgYG5ldC9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBidWlsZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcwMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjMyLjg3MjU3NTc4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG5ldHdvcmtpbmcuXFxuICAgNDpcXHQjXFxuICAgNTpcXHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFxcdTAwM2NoY2hAaW5mcmFkZWFkLm9yZ1xcdTAwM2VcXG4gICA2OlxcdCMgUmV3cml0dGVuIHRvIHVzZSBsaXN0cyBpbnN0ZWFkIG9mIGlmLXN0YXRlbWVudHMuXFxuICAgNzpcXHQjXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gZGV2cmVzLm8gc29ja2V0Lm8gY29yZS9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0NPTVBBVClcXHRcXHQrPSBjb21wYXQub1xcbiAgMTI6XFx0XFxuICAxMzpcXHQjIExMQyBoYXMgdG8gYmUgbGlua2VkIGJlZm9yZSB0aGUgZmlsZXMgaW4gbmV0LzgwMi9cXG4gIDE0OlxcdG9iai0kKENPTkZJR19MTEMpXFx0XFx0Kz0gbGxjL1xcbiAgMTU6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xcbiAgMTY6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHRcXHQrPSBuZXRmaWx0ZXIvXFxuICAxNzpcXHRvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBpcHY0L1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuICAxOTpcXHRvYmotJChDT05GSUdfWEZSTSlcXHRcXHQrPSB4ZnJtL1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1VOSVgpXFx0XFx0Kz0gdW5peC9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19JTkVUX1BTUClcXHRcXHQrPSBwc3AvXFxuICAyMjpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGlwdjYvXFxuICAyMzpcXHRvYmotJChDT05GSUdfUEFDS0VUKVxcdFxcdCs9IHBhY2tldC9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORVRfS0VZKVxcdFxcdCs9IGtleS9cXG4gIDI1OlxcdG9iai0kKENPTkZJR19CUklER0UpXFx0XFx0Kz0gYnJpZGdlL1xcbiAgMjY6XFx0b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVxcdCs9IGRldmxpbmsvXFxuICAyNzpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGRzYS9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19YMjUpXFx0XFx0Kz0geDI1L1xcbiAgMjk6XFx0b2JqLSQoQ09ORklHX0xBUEIpXFx0XFx0Kz0gbGFwYi9cXG4gIDMwOlxcdG9iai0kKENPTkZJR19DQU4pXFx0XFx0Kz0gY2FuL1xcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0JUKVxcdFxcdCs9IGJsdWV0b290aC9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19TVU5SUEMpXFx0XFx0Kz0gc3VucnBjL1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVxcdFxcdCs9IHJ4cnBjL1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0FGX0tDTSlcXHRcXHQrPSBrY20vXFxuICAzNTpcXHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcXHQrPSBzdHJwYXJzZXIvXFxuICAzNjpcXHRvYmotJChDT05GSUdfQVRNKVxcdFxcdCs9IGF0bS9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19MMlRQKVxcdFxcdCs9IGwydHAvXFxuICAzODpcXHRvYmotJChDT05GSUdfUEhPTkVUKVxcdFxcdCs9IHBob25ldC9cXG4gIDM5OlxcdGlmbmVxICgkKENPTkZJR19WTEFOXzgwMjFRKSwpXFxuICA0MDpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IDgwMjFxL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTozMi44NzI2ODI0MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMwMDY4MTAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG5ldGxpbmsvZ2VuZXRsaW5rIENvZGUgZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBvYmoteSArPSAuLi4gbmV0bGluay8gLi4uYCBpbiB0aGUgYG5ldC9NYWtlZmlsZWAgaW1wbGllcyB0aGF0IGBDT05GSUdfTkVUPXlgIGlzIHRoZSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3IgdGhpcyBjb2RlIHRvIGJlIGNvbXBpbGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBtb3JlIGludGVyZXN0aW5nIGFzcGVjdCwgZmluZGluZyBhcHByb3ByaWF0ZSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGludGVuc2l2ZSBmdXp6aW5nLCBzdGlja2luZyBjbG9zZWx5IHRvIHRoZSBpbnN0cnVjdGlvbnMuIEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhcyB0aGF0IHdvdWxkIHNrZXcgdGhlIHRlc3QgZGlzdHJpYnV0aW9uLiBJIHdhbnQgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZSBsYXR0ZXIgYXJlIHVzdWFsbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgIGZpbGUuIEkndmUgYWxyZWFkeSBub3RlZCBhIGZldzogYGN0cmxfZHVtcHBvbGljeV9zdGFydGAsIGBjdHJsX2R1bXBwb2xpY3lgLCBgY3RybF9kdW1wcG9saWN5X2RvbmVgLCBgZ2VubF9yY3ZfbXNnYCwgYGdlbmxfZmFtaWx5X3Jjdl9tc2dfZHVtcGl0YCwgYW5kIGBnZW5sX3JjdmAuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYGN0cmxfZHVtcHBvbGljeV9zdGFydGAsIGBjdHJsX2R1bXBwb2xpY3lgLCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYCBoYXZlIGRpc3RpbmN0IGFkZHJlc3Nlcy4gQmVjYXVzZSB0aGVpciBmdW5jdGlvbiBwb2ludGVycyBhcmUgYXNzaWduZWQgdG8gYSBzdHJ1Y3QgY2FsbGJhY2sgKGxpa2UgYC5zdGFydCA9IGN0cmxfZHVtcHBvbGljeV9zdGFydGApLCB0aGUgY29tcGlsZXIgKm11c3QqIGdlbmVyYXRlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgZm9yIHRoZW0uIFVubGVzcyBMVE8vV1BBIGlzIG1lcmdpbmcgaWRlbnRpY2FsIGZ1bmN0aW9ucyAod2hpY2ggd291bGRuJ3QgaGF2ZSB1bmlxdWUgbG9naWMpLCB0aGVzZSBhcmUgbGlrZWx5IGdvb2QgdGFyZ2V0cy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcywgYnV0IGl0J3MgYSBzdHJvbmcgaW5kaWNhdGlvbi4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3Qgb3Zlcmxvb2sgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBnZW5ldGxpbmsuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjIyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MzcuMTczMzY2MzE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxMzQ1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBnZW5sX3xedm9pZCBnZW5sX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0bGluay9nZW5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9nZW5ldGxpbmsuYz0zMT1ERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChnZW5sX3NrX2Rlc3RydWN0aW5nX3dhaXRxKTtcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0zMi1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzozMzp2b2lkIGdlbmxfbG9jayh2b2lkKVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTM0LXtcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTM3PUVYUE9SVF9TWU1CT0woZ2VubF9sb2NrKTtcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0zOC1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzozOTp2b2lkIGdlbmxfdW5sb2NrKHZvaWQpXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtNDAte1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9NzM3PXZvaWQgKmdlbmxfc2tfcHJpdl9nZXQoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTc3NC0gKi9cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzo3NzU6aW50IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5KVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTc3Ni17XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz04NDA9RVhQT1JUX1NZTUJPTChnZW5sX3JlZ2lzdGVyX2ZhbWlseSk7XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy04NDktICovXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6ODUwOmludCBnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5KVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTg1MS17XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xOTk0PUVYUE9SVF9TWU1CT0woZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMpO1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE5OTUtXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTk5Njp2b2lkIGdlbmxfbm90aWZ5KGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE5OTctXFx0XFx0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBncm91cCwgZ2ZwX3QgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjM3LjMyMDUwNDY4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODU2MTg1MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRsaW5rIFBvbGljeSBEdW1waW5nIGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGtleSBmb2N1cyBzeW1ib2xzOiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYC4gQXJlIHRoZXkgdmFsaWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHdoYXQgd2UncmUgbG9va2luZyBhdD8gWWVzLCB0aGV5IGFyZS4gQW5kIGBjdHJsX2R1bXBwb2xpY3lgIGlzIGFsc28gcmVsZXZhbnQgaGVyZS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbnMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX05FVGAsIG9yIHNpbXBseSBcIk5FVCxcIiB3aGljaCBpcyBhIGdpdmVuLCBhcyBnZW5lcmljIG5ldGxpbmsgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggaXQuXG5cbk5vdywgbGV0J3Mgc29saWRpZnkgdGhlIGRldGFpbHMuIFRoaXMgcGF0Y2ggYXBwZWFycyBjcml0aWNhbC4gSXQgYWRkcyBgY3R4LVx1MDAzZW93bmVyID0gcnQtXHUwMDNlbW9kdWxlO2AgYW5kIGEgYHRyeV9tb2R1bGVfZ2V0KGN0eC1cdTAwM2Vvd25lcilgIHdpdGhpbiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0KClgLiBUaGlzIGlzIGdvb2Q7IGl0J3MgdGhlIG1vZHVsZSByZWZlcmVuY2UgYWNxdWlzaXRpb24gc3RlcC4gVGhlIHBhdGNoIHRoZW4gY29ycmVjdGx5IHVwZGF0ZXMgdGhlIGVycm9yIHBhdGhzIHdpdGggYG1vZHVsZV9wdXQoY3R4LVx1MDAzZW93bmVyKWAgdG8gaGFuZGxlIGZhaWx1cmUgc2NlbmFyaW9zLCBhbmQgYG1vZHVsZV9wdXQoY3R4LVx1MDAzZW93bmVyKWAgaXMgYWxzbyBhZGRlZCB0byBgY3RybF9kdW1wcG9saWN5X2RvbmUoKWAuIFRoaXMgaXMgYWxsIHRvIHByZXZlbnQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZHVtcGluZyBuZXRsaW5rIHBvbGljaWVzIG9mIGtlcm5lbCBtb2R1bGVzLiBUaGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgYENUUkxfQ01EX0dFVFBPTElDWWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgZW5hYmxlIGNvbmZpZyBpcyBgW1wiTkVUXCJdYCBhbmQgZm9jdXMgc3ltYm9scyBhcmUgYFtcImN0cmxfZHVtcHBvbGljeV9zdGFydFwiLCBcImN0cmxfZHVtcHBvbGljeV9kb25lXCIsIFwiY3RybF9kdW1wcG9saWN5XCJdYC5cblxuTGV0J3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIHBhcmFtZXRlcnM6XG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiTkVUXCJdYCAtIE1ha2VzIHNlbnNlLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiY3RybF9kdW1wcG9saWN5X3N0YXJ0XCIsIFwiY3RybF9kdW1wcG9saWN5X2RvbmVcIiwgXCJjdHJsX2R1bXBwb2xpY3lcIl1gIC0gRXhhY3RseSB3aGF0IHdlIGV4cGVjdC5cbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1hbmFnZXMgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBtb2R1bGUgcmVmZXJlbmNlcyBkdXJpbmcgYENUUkxfQ01EX0dFVFBPTElDWWAgZHVtcCBvcGVyYXRpb25zIGluIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYCwgcHJldmVudGluZyBtb2R1bGUgdW5sb2FkaW5nIHdoaWxlIGR1bXBzIGFyZSBpbiBwcm9ncmVzcy4gVGhpcyBtb2RpZmllcyBnZW5lcmljIG5ldGxpbmsgY29udHJvbGxlciBsb2dpYyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiAtIFBlcmZlY3QsIHRoaXMgaXMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbi5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZSAtIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBwYXRjaCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgbW9kdWxlLXJlbGF0ZWQgaXNzdWVzLCB0aGlzIGlzIGFic29sdXRlbHkgdGhlIGNvcnJlY3QgYXNzZXNzbWVudC5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0IGlzIHNhZmUgdG8gdXNlIHRoaXMgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzksIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjQyLjE3NjY5MjM2OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk5NzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RybF9kdW1wcG9saWN5X3N0YXJ0XCIsXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lfZG9uZVwiLFxuICAgIFwiY3RybF9kdW1wcG9saWN5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBtb2R1bGUgcmVmZXJlbmNlIGhvbGRpbmcgKHRyeV9tb2R1bGVfZ2V0L21vZHVsZV9wdXQpIGZvciBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHBvbGljeSBkdW1wcyBpbiBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKSBhbmQgY3RybF9kdW1wcG9saWN5X2RvbmUoKSwgYWx0ZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBlcnJvciBjbGVhbnVwIHBhdGhzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEdlbmVyaWMgTmV0bGluayBDVFJMX0NNRF9HRVRQT0xJQ1kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RybF9kdW1wcG9saWN5X3N0YXJ0XCIsXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lfZG9uZVwiLFxuICAgIFwiY3RybF9kdW1wcG9saWN5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBtb2R1bGUgcmVmZXJlbmNlIGhvbGRpbmcgKHRyeV9tb2R1bGVfZ2V0L21vZHVsZV9wdXQpIGZvciBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHBvbGljeSBkdW1wcyBpbiBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKSBhbmQgY3RybF9kdW1wcG9saWN5X2RvbmUoKSwgYWx0ZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBlcnJvciBjbGVhbnVwIHBhdGhzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEdlbmVyaWMgTmV0bGluayBDVFJMX0NNRF9HRVRQT0xJQ1kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjQyLjMyMjY5Njg1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3Mjg1NDI0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo0Mi4zMjMxNTAyODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjcyODA4MzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIChgdHJ5X21vZHVsZV9nZXQoKWAgLyBgbW9kdWxlX3B1dCgpYCkgZHVyaW5nIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcCBvcGVyYXRpb25zIChgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYCkuIFRoaXMgcHJldmVudHMgdGhlIG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIGZhbWlseSBmcm9tIGJlaW5nIHVubG9hZGVkIHdoaWxlIGEgcG9saWN5IGR1bXAgaXMgaW4gcHJvZ3Jlc3MuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIG1vZHVsZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAvIGludmFsaWQgY29kZSBvciBkYXRhIGFjY2VzcyBvbiBtb2R1bGUgdW5sb2FkKSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgZGF0YSBleHBvc3VyZSwgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMzdmOTI3ODVmNjk3OGQzYWUxMWU3MzMyZTM0Y2IyMDNkNjlhYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMjowNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbmluZGV4IDBkYTM5ZWFlZDI1NWYuLjQxZDM3NDQyZjE4NjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuY1xuKysrIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbkBAIC0xNTEzLDYgKzE1MTMsNyBAQCBzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xuIFx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xuIFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcbiBcdHN0cnVjdCBnZW5sX29wX2l0ZXIgKm9wX2l0ZXI7XG4rXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiBcdHUzMiBvcDtcbiBcdHUxNiBmYW1faWQ7XG4gXHR1OCBkdW1wX21hcDoxLFxuQEAgLTE1NTUsNiArMTU1Niw5IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRjdHgtXHUwMDNlcnQgPSBydDtcbitcdGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtcbitcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xuIFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcDtcbkBAIC0xNTY1LDcgKzE1NjksNyBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdGVyciA9IGdlbmxfZ2V0X2NtZF9ib3RoKGN0eC1cdTAwM2VvcCwgcnQsIFx1MDAyNmRvaXQsIFx1MDAyNmR1bXApO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGNiLVx1MDAzZWV4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7XG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGRvaXQucG9saWN5KSB7XG5AQCAtMTU4MywxNiArMTU4NywyMCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuIFx0XHR9XG4gXG4tXHRcdGlmICghY3R4LVx1MDAzZXN0YXRlKVxuLVx0XHRcdHJldHVybiAtRU5PREFUQTtcbitcdFx0aWYgKCFjdHgtXHUwMDNlc3RhdGUpIHtcbitcdFx0XHRlcnIgPSAtRU5PREFUQTtcbitcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4rXHRcdH1cbiBcbiBcdFx0Y3R4LVx1MDAzZWR1bXBfbWFwID0gMTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRjdHgtXHUwMDNlb3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtXHUwMDNlb3BfaXRlcik7XG4tXHRpZiAoIWN0eC1cdTAwM2VvcF9pdGVyKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfcHV0X293bmVyO1xuK1x0fVxuIFxuIFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbkBAIC0xNjI0LDYgKzE2MzIsOCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbiBlcnJfZnJlZV9vcF9pdGVyOlxuIFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuK2Vycl9wdXRfb3duZXI6XG4rXHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzYwLDYgKzE3NzAsNyBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcbiBcdGtmcmVlKGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXHUwMDNlc3RhdGUpO1xuK1x0bW9kdWxlX3B1dChjdHgtXHUwMDNlb3duZXIpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6NDIuMzIzMTUxMTY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2OTQ4ODQxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5ldGxpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGluc3RydWN0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGF0IHNwZWNpZmljIG1vZGlmaWNhdGlvbiBpbiBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgLlxuXG5SaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBuZXcgZmllbGQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHhgOiBgc3RydWN0IG1vZHVsZSAqb3duZXI7YC4gVGhhdCdzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIG1vZHVsZSBvd25lcnNoaXAgaXMgYmVpbmcgdHJhY2tlZCB3aXRoaW4gdGhlIGR1bXAgcG9saWN5IGNvbnRleHQuIExldCdzIGRpZyBpbnRvIGhvdyB0aGF0J3MgYmVpbmcgaGFuZGxlZC5cblxuU3BlY2lmaWNhbGx5LCBpbiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCwgSSBzZWUgYGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtgIHdoaWNoIGFzc2lnbnMgdGhlIG1vZHVsZSBmcm9tIGBydGAgdG8gdGhlIGNvbnRleHQncyBvd25lci4gVGhlbiwgY3J1Y2lhbGx5LCB0aGVyZSdzIGEgYHRyeV9tb2R1bGVfZ2V0KGN0eC1cdTAwM2Vvd25lcilgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gbWFuYWdlIG1vZHVsZSByZWZlcmVuY2UgY291bnRzLiBUaGUgZXJyb3IgcGF0aHMgaW1tZWRpYXRlbHkgY2FsbCBgbW9kdWxlX3B1dGAgb24gdGhlIG93bmVyIHdpdGggYSBgZ290byBlcnJfcHV0X293bmVyO2AsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSByZWZlcmVuY2UgY291bnQgaXMgYmVpbmcgcmVsZWFzZWQgaW4gY2FzZSBvZiBhbiBlYXJseSByZXR1cm4uIFRoaXMgaXMgdGV4dGJvb2sgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLCBwcm90ZWN0aW5nIHRoZSBtb2R1bGUgaWYgdGhlIGR1bXAgcG9saWN5IGVycm9ycy5cblxuVGhlbiwgdGhlcmUncyBgY3RybF9kdW1wcG9saWN5X2RvbmVgLCB3aGVyZSBgbW9kdWxlX3B1dChjdHgtXHUwMDNlb3duZXIpYCBpcyBjYWxsZWQuIFRoYXQncyBjb25maXJtYXRpb246IHRoZSBgb3duZXJgIGZpZWxkIGlzIHVzZWQgdG8gY29ycmVjdGx5IGRlY3JlbWVudCB0aGUgbW9kdWxlJ3MgcmVmZXJlbmNlIGNvdW50IHdoZW4gdGhlIHBvbGljeSBpcyBjb21wbGV0ZS4gSXQgYXBwZWFycyB0aGUgc3lzdGVtIGlzIG1ha2luZyBzdXJlIHRoYXQgaWYgYSBgdHJ5X21vZHVsZV9nZXRgIHN1Y2NlZWRzIGluIGBzdGFydGAsIHRoZSBgbW9kdWxlX3B1dGAgbXVzdCBvY2N1ci4gVGhpcyBlbnN1cmVzIHRoYXQgYSBgbW9kdWxlYCBpc24ndCB1bmxvYWRlZCB3aGlsZSB0aGUgZHVtcCBwb2xpY3kgaXMgYWN0aXZlLlxuXG5Ob3csIEkgbmVlZCB0byBicm9hZGVuIG15IHNjb3BlLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgcmVzdCBvZiB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBmdW5jdGlvbnMgYW5kIGhvdyBgY3R4YCBpcyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCBhbmQgdXNlZC4gSSdsbCBnbyBiYWNrIHRvIGBuZXQvbmV0bGluay9nZW5ldGxpbmsuY2AgYW5kIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgZnJvbSBsaW5lIDE1MTMgdG8gMTc3MCB0byBzZWUgaG93IHRoZSBjb250ZXh0IGlzIHVzZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGlzIGEgY29tcGxldGUgYW5kIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiBhbmQgbm90IGhhdmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZW50aXJlIGxpZmVjeWNsZSBvZiB0aGlzIGNvbnRleHQgdG8gZW5zdXJlIHRoaXMgaXMgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo0OS4wMTgwMzcxMzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL2dlbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MTA6XFx0fVxcbjE1MTE6XFx0XFxuMTUxMjpcXHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xcbjE1MTM6XFx0XFx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xcbjE1MTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcXG4xNTE1OlxcdFxcdHN0cnVjdCBnZW5sX29wX2l0ZXIgKm9wX2l0ZXI7XFxuMTUxNjpcXHRcXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcXG4xNTE3OlxcdFxcdHUzMiBvcDtcXG4xNTE4OlxcdFxcdHUxNiBmYW1faWQ7XFxuMTUxOTpcXHRcXHR1OCBkdW1wX21hcDoxLFxcbjE1MjA6XFx0XFx0ICAgc2luZ2xlX29wOjE7XFxuMTUyMTpcXHR9O1xcbjE1MjI6XFx0XFxuMTUyMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RybF9wb2xpY3lfcG9saWN5W10gPSB7XFxuMTUyNDpcXHRcXHRbQ1RSTF9BVFRSX0ZBTUlMWV9JRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxuMTUyNTpcXHRcXHRbQ1RSTF9BVFRSX0ZBTUlMWV9OQU1FXVxcdD0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLFxcbjE1MjY6XFx0XFx0XFx0XFx0XFx0ICAgIC5sZW4gPSBHRU5MX05BTVNJWiAtIDEgfSxcXG4xNTI3OlxcdFxcdFtDVFJMX0FUVFJfT1BdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbjE1Mjg6XFx0fTtcXG4xNTI5OlxcdFxcbjE1MzA6XFx0c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjE1MzE6XFx0e1xcbjE1MzI6XFx0XFx0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcXG4xNTMzOlxcdFxcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbjE1MzQ6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cXHUwMDNlaW5mby5hdHRycztcXG4xNTM1OlxcdFxcdGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqcnQ7XFxuMTUzNjpcXHRcXHRzdHJ1Y3QgZ2VubF9vcF9pdGVyIGk7XFxuMTUzNzpcXHRcXHRpbnQgZXJyO1xcbjE1Mzg6XFx0XFxuMTUzOTpcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFxcdTAwM2Ugc2l6ZW9mKGNiLVxcdTAwM2VjdHgpKTtcXG4xNTQwOlxcdFxcbjE1NDE6XFx0XFx0aWYgKCF0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSBcXHUwMDI2XFx1MDAyNiAhdGJbQ1RSTF9BVFRSX0ZBTUlMWV9OQU1FXSlcXG4xNTQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1NDM6XFx0XFxuMTU0NDpcXHRcXHRpZiAodGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pIHtcXG4xNTQ1OlxcdFxcdFxcdGN0eC1cXHUwMDNlZmFtX2lkID0gbmxhX2dldF91MTYodGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pO1xcbjE1NDY6XFx0XFx0fSBlbHNlIHtcXG4xNTQ3OlxcdFxcdFxcdHJ0ID0gZ2VubF9mYW1pbHlfZmluZF9ieW5hbWUoXFxuMTU0ODpcXHRcXHRcXHRcXHRubGFfZGF0YSh0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKSk7XFxuMTU0OTpcXHRcXHRcXHRpZiAoIXJ0KVxcbjE1NTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTU1MTpcXHRcXHRcXHRjdHgtXFx1MDAzZWZhbV9pZCA9IHJ0LVxcdTAwM2VpZDtcXG4xNTUyOlxcdFxcdH1cXG4xNTUzOlxcdFxcbjE1NTQ6XFx0XFx0cnQgPSBnZW5sX2ZhbWlseV9maW5kX2J5aWQoY3R4LVxcdTAwM2VmYW1faWQpO1xcbjE1NTU6XFx0XFx0aWYgKCFydClcXG4xNTU2OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE1NTc6XFx0XFxuMTU1ODpcXHRcXHRjdHgtXFx1MDAzZXJ0ID0gcnQ7XFxuMTU1OTpcXHRcXHRjdHgtXFx1MDAzZW93bmVyID0gcnQtXFx1MDAzZW1vZHVsZTtcXG4xNTYwOlxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVxcdTAwM2Vvd25lcikpXFxuMTU2MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xNTYyOlxcdFxcbjE1NjM6XFx0XFx0aWYgKHRiW0NUUkxfQVRUUl9PUF0pIHtcXG4xNTY0OlxcdFxcdFxcdHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkb2l0LCBkdW1wO1xcbjE1NjU6XFx0XFxuMTU2NjpcXHRcXHRcXHRjdHgtXFx1MDAzZXNpbmdsZV9vcCA9IHRydWU7XFxuMTU2NzpcXHRcXHRcXHRjdHgtXFx1MDAzZW9wID0gbmxhX2dldF91MzIodGJbQ1RSTF9BVFRSX09QXSk7XFxuMTU2ODpcXHRcXG4xNTY5OlxcdFxcdFxcdGVyciA9IGdlbmxfZ2V0X2NtZF9ib3RoKGN0eC1cXHUwMDNlb3AsIHJ0LCBcXHUwMDI2ZG9pdCwgXFx1MDAyNmR1bXApO1xcbjE1NzA6XFx0XFx0XFx0aWYgKGVycikge1xcbjE1NzE6XFx0XFx0XFx0XFx0TkxfU0VUX0JBRF9BVFRSKGNiLVxcdTAwM2VleHRhY2ssIHRiW0NUUkxfQVRUUl9PUF0pO1xcbjE1NzI6XFx0XFx0XFx0XFx0Z290byBlcnJfcHV0X293bmVyO1xcbjE1NzM6XFx0XFx0XFx0fVxcbjE1NzQ6XFx0XFxuMTU3NTpcXHRcXHRcXHRpZiAoZG9pdC5wb2xpY3kpIHtcXG4xNTc2OlxcdFxcdFxcdFxcdGVyciA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShcXHUwMDI2Y3R4LVxcdTAwM2VzdGF0ZSxcXG4xNTc3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZG9pdC5wb2xpY3ksXFxuMTU3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRvaXQubWF4YXR0cik7XFxuMTU3OTpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjE1ODA6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcXG4xNTgxOlxcdFxcdFxcdH1cXG4xNTgyOlxcdFxcdFxcdGlmIChkdW1wLnBvbGljeSkge1xcbjE1ODM6XFx0XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbjE1ODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkdW1wLnBvbGljeSxcXG4xNTg1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZHVtcC5tYXhhdHRyKTtcXG4xNTg2OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTU4NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3N0YXRlO1xcbjE1ODg6XFx0XFx0XFx0fVxcbjE1ODk6XFx0XFxuMTU5MDpcXHRcXHRcXHRpZiAoIWN0eC1cXHUwMDNlc3RhdGUpIHtcXG4xNTkxOlxcdFxcdFxcdFxcdGVyciA9IC1FTk9EQVRBO1xcbjE1OTI6XFx0XFx0XFx0XFx0Z290byBlcnJfcHV0X293bmVyO1xcbjE1OTM6XFx0XFx0XFx0fVxcbjE1OTQ6XFx0XFxuMTU5NTpcXHRcXHRcXHRjdHgtXFx1MDAzZWR1bXBfbWFwID0gMTtcXG4xNTk2OlxcdFxcdFxcdHJldHVybiAwO1xcbjE1OTc6XFx0XFx0fVxcbjE1OTg6XFx0XFxuMTU5OTpcXHRcXHRjdHgtXFx1MDAzZW9wX2l0ZXIgPSBrbWFsbG9jX29iaigqY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6NDkuMDE4MjY0NTk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTU1MzQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBmdW5jdGlvbnMuIExldCBtZSByZXZpZXcgbGluZXMgMTYwMC0xNzc1IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGVudGlyZSBjb250ZXh0LiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgaW4gdGhlIGxvZ2ljLiBJIG5lZWQgdG8gb2JzZXJ2ZSBob3cgdGhlIGNvZGUgbWFuYWdlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgY29udHJvbCBwb2xpY3kgcHJpbWl0aXZlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyZmFjZSB3aXRoIHRoZSBwb2xpY3kgbWFuYWdlbWVudCBjb3JlIGFuZCB3aGF0IGtpbmQgb2YgZGF0YSB0aGV5J3JlIGR1bXBpbmcgb3IgdXNpbmcgdG8gYWRqdXN0IHRoZSBjb250cm9sIHByb2Nlc3MuIEFueSBkZXNpZ24gY2hvaWNlcyByZWxhdGVkIHRvIHRoZSBlZmZpY2llbmN5IG9yIHNlY3VyaXR5IG9mIHRoZSBjb250cm9sIHByb2Nlc3MgbmVlZCBzcGVjaWFsIGF0dGVudGlvbi4gQWZ0ZXIgdGhpcyByZXZpZXcsIG15IHdvcmtpbmcgaHlwb3RoZXNpcyBpcyB0byBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGFuZCBvcHRpbWl6YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1MS4xMzM4MDEzMzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL2dlbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjAwOlxcdFxcdGlmICghY3R4LVxcdTAwM2VvcF9pdGVyKSB7XFxuMTYwMTpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjE2MDI6XFx0XFx0XFx0Z290byBlcnJfcHV0X293bmVyO1xcbjE2MDM6XFx0XFx0fVxcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRnZW5sX29wX2l0ZXJfaW5pdChydCwgY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG4xNjA2OlxcdFxcdGN0eC1cXHUwMDNlZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbjE2MDc6XFx0XFxuMTYwODpcXHRcXHRmb3IgKGdlbmxfb3BfaXRlcl9pbml0KHJ0LCBcXHUwMDI2aSk7IGdlbmxfb3BfaXRlcl9uZXh0KFxcdTAwMjZpKTsgKSB7XFxuMTYwOTpcXHRcXHRcXHRpZiAoaS5kb2l0LnBvbGljeSkge1xcbjE2MTA6XFx0XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbjE2MTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmRvaXQucG9saWN5LFxcbjE2MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmRvaXQubWF4YXR0cik7XFxuMTYxMzpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjE2MTQ6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcXG4xNjE1OlxcdFxcdFxcdH1cXG4xNjE2OlxcdFxcdFxcdGlmIChpLmR1bXBpdC5wb2xpY3kpIHtcXG4xNjE3OlxcdFxcdFxcdFxcdGVyciA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShcXHUwMDI2Y3R4LVxcdTAwM2VzdGF0ZSxcXG4xNjE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaS5kdW1waXQucG9saWN5LFxcbjE2MTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmR1bXBpdC5tYXhhdHRyKTtcXG4xNjIwOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTYyMTpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3N0YXRlO1xcbjE2MjI6XFx0XFx0XFx0fVxcbjE2MjM6XFx0XFx0fVxcbjE2MjQ6XFx0XFxuMTYyNTpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlc3RhdGUpIHtcXG4xNjI2OlxcdFxcdFxcdGVyciA9IC1FTk9EQVRBO1xcbjE2Mjc6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9vcF9pdGVyO1xcbjE2Mjg6XFx0XFx0fVxcbjE2Mjk6XFx0XFx0cmV0dXJuIDA7XFxuMTYzMDpcXHRcXG4xNjMxOlxcdGVycl9mcmVlX3N0YXRlOlxcbjE2MzI6XFx0XFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cXHUwMDNlc3RhdGUpO1xcbjE2MzM6XFx0ZXJyX2ZyZWVfb3BfaXRlcjpcXG4xNjM0OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuMTYzNTpcXHRlcnJfcHV0X293bmVyOlxcbjE2MzY6XFx0XFx0bW9kdWxlX3B1dChjdHgtXFx1MDAzZW93bmVyKTtcXG4xNjM3OlxcdFxcdHJldHVybiBlcnI7XFxuMTYzODpcXHR9XFxuMTYzOTpcXHRcXG4xNjQwOlxcdHN0YXRpYyB2b2lkICpjdHJsX2R1bXBwb2xpY3lfcHJlcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE2NDE6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMTY0MjpcXHR7XFxuMTY0MzpcXHRcXHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4xNjQ0OlxcdFxcdHZvaWQgKmhkcjtcXG4xNjQ1OlxcdFxcbjE2NDY6XFx0XFx0aGRyID0gZ2VubG1zZ19wdXQoc2tiLCBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4xNjQ3OlxcdFxcdFxcdFxcdCAgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBcXHUwMDI2Z2VubF9jdHJsLFxcbjE2NDg6XFx0XFx0XFx0XFx0ICBOTE1fRl9NVUxUSSwgQ1RSTF9DTURfR0VUUE9MSUNZKTtcXG4xNjQ5OlxcdFxcdGlmICghaGRyKVxcbjE2NTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTY1MTpcXHRcXG4xNjUyOlxcdFxcdGlmIChubGFfcHV0X3UxNihza2IsIENUUkxfQVRUUl9GQU1JTFlfSUQsIGN0eC1cXHUwMDNlZmFtX2lkKSlcXG4xNjUzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE2NTQ6XFx0XFxuMTY1NTpcXHRcXHRyZXR1cm4gaGRyO1xcbjE2NTY6XFx0fVxcbjE2NTc6XFx0XFxuMTY1ODpcXHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNjU5OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbjE2NjA6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKmRvaXQsXFxuMTY2MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqZHVtcGl0KVxcbjE2NjI6XFx0e1xcbjE2NjM6XFx0XFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuMTY2NDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpuZXN0X3BvbCwgKm5lc3Rfb3A7XFxuMTY2NTpcXHRcXHR2b2lkICpoZHI7XFxuMTY2NjpcXHRcXHRpbnQgaWR4O1xcbjE2Njc6XFx0XFxuMTY2ODpcXHRcXHQvKiBza2lwIGlmIHdlIGhhdmUgbm90aGluZyB0byBzaG93ICovXFxuMTY2OTpcXHRcXHRpZiAoIWRvaXQtXFx1MDAzZXBvbGljeSBcXHUwMDI2XFx1MDAyNiAhZHVtcGl0LVxcdTAwM2Vwb2xpY3kpXFxuMTY3MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNjcxOlxcdFxcbjE2NzI6XFx0XFx0aGRyID0gY3RybF9kdW1wcG9saWN5X3ByZXAoc2tiLCBjYik7XFxuMTY3MzpcXHRcXHRpZiAoIWhkcilcXG4xNjc0OlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4xNjc1OlxcdFxcbjE2NzY6XFx0XFx0bmVzdF9wb2wgPSBubGFfbmVzdF9zdGFydChza2IsIENUUkxfQVRUUl9PUF9QT0xJQ1kpO1xcbjE2Nzc6XFx0XFx0aWYgKCFuZXN0X3BvbClcXG4xNjc4OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjE2Nzk6XFx0XFxuMTY4MDpcXHRcXHRuZXN0X29wID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBkb2l0LVxcdTAwM2VjbWQpO1xcbjE2ODE6XFx0XFx0aWYgKCFuZXN0X29wKVxcbjE2ODI6XFx0XFx0XFx0Z290byBlcnI7XFxuMTY4MzpcXHRcXG4xNjg0OlxcdFxcdGlmIChkb2l0LVxcdTAwM2Vwb2xpY3kpIHtcXG4xNjg1OlxcdFxcdFxcdGlkeCA9IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoY3R4LVxcdTAwM2VzdGF0ZSxcXG4xNjg2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBkb2l0LVxcdTAwM2Vwb2xpY3ksXFxuMTY4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZG9pdC1cXHUwMDNlbWF4YXR0cik7XFxuMTY4ODpcXHRcXG4xNjg5OlxcdFxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIENUUkxfQVRUUl9QT0xJQ1lfRE8sIGlkeCkpXFxuMTY5MDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xNjkxOlxcdFxcdH1cXG4xNjkyOlxcdFxcdGlmIChkdW1waXQtXFx1MDAzZXBvbGljeSkge1xcbjE2OTM6XFx0XFx0XFx0aWR4ID0gbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChjdHgtXFx1MDAzZXN0YXRlLFxcbjE2OTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGR1bXBpdC1cXHUwMDNlcG9saWN5LFxcbjE2OTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGR1bXBpdC1cXHUwMDNlbWF4YXR0cik7XFxuMTY5NjpcXHRcXG4xNjk3OlxcdFxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIENUUkxfQVRUUl9QT0xJQ1lfRFVNUCwgaWR4KSlcXG4xNjk4OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjE2OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1MS4xMzM5NDE4NTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0NzEwNzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgSGlzdG9yaWNhbCBgY3RybF9kdW1wcG9saWN5XypgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBmdW5jdGlvbnMuIE15IHRoaW5raW5nIGlzIHRvIHpvb20gaW4gb24gdGhlIHBlcmlvZCBiZXR3ZWVuIDE3NTAgYW5kIDE3ODAuIFRoYXQgdGltZWZyYW1lIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0J3MgbGlrZWx5IHRvIHJldmVhbCB0aGUgZXZvbHV0aW9uIG9mIHRoZXNlIHBvbGljaWVzIGR1cmluZyB0aGUgcGVyaW9kIG9mLi4uIHdlbGwsIGxldCdzIGxlYXZlIGl0IGF0IHRoYXQuIEknbSBsb29raW5nIGZvciBhbnkgbWFqb3Igc2hpZnRzLCBpbm5vdmF0aXZlIGltcGxlbWVudGF0aW9ucywgb3IgcGVyaGFwcyBldmVuIHNpZ25pZmljYW50IGxpbWl0YXRpb25zIGluIGhvdyB0aGV5IHdlcmUgZGVmaW5lZCBvciBleGVjdXRlZC4gVGhpcyB3aW5kb3cgc2hvdWxkIHByb3ZpZGUgc3VmZmljaWVudCBjb250ZXh0IHRvIGJ1aWxkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1YmplY3QsIGFuZCBJJ2xsIHNlZSB3aGF0IGl0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjEwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1My4wODEwNTM1OTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL2dlbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NDA6XFx0XFxuMTc0MTpcXHRcXHR3aGlsZSAobmV0bGlua19wb2xpY3lfZHVtcF9sb29wKGN0eC1cXHUwMDNlc3RhdGUpKSB7XFxuMTc0MjpcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbjE3NDM6XFx0XFxuMTc0NDpcXHRcXHRcXHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcXG4xNzQ1OlxcdFxcdFxcdGlmICghaGRyKVxcbjE3NDY6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTc0NzpcXHRcXG4xNzQ4OlxcdFxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIENUUkxfQVRUUl9QT0xJQ1kpO1xcbjE3NDk6XFx0XFx0XFx0aWYgKCFuZXN0KVxcbjE3NTA6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTc1MTpcXHRcXG4xNzUyOlxcdFxcdFxcdGlmIChuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHNrYiwgY3R4LVxcdTAwM2VzdGF0ZSkpXFxuMTc1MzpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzU0OlxcdFxcbjE3NTU6XFx0XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XFxuMTc1NjpcXHRcXG4xNzU3OlxcdFxcdFxcdGdlbmxtc2dfZW5kKHNrYiwgaGRyKTtcXG4xNzU4OlxcdFxcdH1cXG4xNzU5OlxcdFxcbjE3NjA6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbjE3NjE6XFx0XFxuMTc2MjpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuMTc2MzpcXHRcXHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XFxuMTc2NDpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTc2NTpcXHR9XFxuMTc2NjpcXHRcXG4xNzY3OlxcdHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjE3Njg6XFx0e1xcbjE3Njk6XFx0XFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuMTc3MDpcXHRcXG4xNzcxOlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuMTc3MjpcXHRcXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVxcdTAwM2VzdGF0ZSk7XFxuMTc3MzpcXHRcXHRtb2R1bGVfcHV0KGN0eC1cXHUwMDNlb3duZXIpO1xcbjE3NzQ6XFx0XFx0cmV0dXJuIDA7XFxuMTc3NTpcXHR9XFxuMTc3NjpcXHRcXG4xNzc3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZ2VubF9jdHJsX29wc1tdID0ge1xcbjE3Nzg6XFx0XFx0e1xcbjE3Nzk6XFx0XFx0XFx0LmNtZFxcdFxcdD0gQ1RSTF9DTURfR0VURkFNSUxZLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1My4wODEyNDE2NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk2OTk2Mjg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBnZW5lcmljIG5ldGxpbmsgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHJ0YCBmYW1pbHkgYW5kIGl0cyBwb2xpY3kgZHVtcHMuIFRoZSBjb3JlIGlzc3VlIGlzIHRoZSBwb3NzaWJpbGl0eSBvZiBhIG1vZHVsZSBiZWluZyB1bmxvYWRlZCB3aGlsZSBpdHMgcG9saWNpZXMgYXJlIGFjdGl2ZWx5IGJlaW5nIGR1bXBlZCBvdmVyIG11bHRpcGxlIG5ldGxpbmsgY2FsbHMuIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGFuZCByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbS5cblxuVGhlIHBhdGNoIGl0c2VsZiBpbXBsZW1lbnRzIGEgZml4IGJ5IG1hbmFnaW5nIHRoZSBtb2R1bGUncyBsaWZldGltZSBtb3JlIGNhcmVmdWxseSBkdXJpbmcgdGhlc2UgZHVtcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBlbnN1cmUgdGhlIG1vZHVsZSBpc24ndCB1bmxvYWRlZCB3aGlsZSB0aGUgZHVtcCBpcyBvbmdvaW5nLiBTcGVjaWZpY2FsbHksIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgdXNlcyBgdHJ5X21vZHVsZV9nZXQoKWAgdG8gdGFrZSBhIHJlZmVyZW5jZSBvbiBgcnQtXHUwMDNlbW9kdWxlYCwgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYCBvciBhbiBlcnJvciBoYW5kbGVyIChgZXJyX3B1dF9vd25lcmApIHJlbGVhc2VzIHRoZSByZWZlcmVuY2UgdXNpbmcgYG1vZHVsZV9wdXQoKWAuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMsIHRoaXMgcmVhbGx5IGJvaWxzIGRvd24gdG8gbWVtb3J5IHNhZmV0eS4gTXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSBleHBvc2VkIG9yIGZvciBvdGhlciBLTVNBTi1kZXRlY3RhYmxlIGlzc3Vlcy5cblxuSGVyZSdzIG15IHJlYXNvbmluZywgZ29pbmcgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWE6XG5cbiogICAqKkNyaXRlcmlvbiAxIChLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMpOioqIEFic29sdXRlbHkgbm90LiBUaGUgcGF0Y2ggZXhwbGljaXRseSBpbml0aWFsaXplcyBgY3R4LVx1MDAzZW93bmVyYCB3aXRoIHRoZSBtb2R1bGUgcG9pbnRlci4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuXG4qICAgKipDcml0ZXJpb24gMiAoQ29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMpOioqIE5vLiBUaGUgbG9naWMgYXJvdW5kIGBjdHgtXHUwMDNlb3duZXJgIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBlaXRoZXIgaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIG9yIGl0J3Mgbm90IGluaXRpYWxpemVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZCBiZWZvcmUgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSB1c2VkLlxuKiAgICoqQ3JpdGVyaW9uIDMgKENvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMpOioqIE5vLiBUaGUgYGN0eC1cdTAwM2Vvd25lcmAgcG9pbnRlciBpcyBiZWluZyBpbml0aWFsaXplZCwgaXQgaXMgYSBzaW5nbGUgcG9pbnRlciBhbmQgaGFzIGNsZWFyIGluaXRpYWxpc2F0aW9uIG9yIGVhcmx5IHJldHVybi5cbiogICAqKkNyaXRlcmlvbiA0IChVbmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMpOioqIE5vLiBUaGlzIHBhdGNoIHN0cmljdGx5IGZvY3VzZXMgb24gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBkb2Vzbid0IHRvdWNoIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIGludHJvZHVjZSBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgbGVuZ3RoIG9yIG9mZnNldCB2YXJpYWJsZXMuXG5cbkluIGVzc2VuY2UsIHRoaXMgaXMgYSBwdXJlIHJlZmNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IHBhdGNoIGRlc2lnbmVkIHRvIHByb3RlY3QgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSwgYSBwcm9ibGVtIHRoYXQgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycyBhcmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgY29ycmVjdCBkZWNpc2lvbiBoZXJlLlxuXG5UaW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4OCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1OS4wNTEyMDc0NDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyAoYHRyeV9tb2R1bGVfZ2V0KClgIC8gYG1vZHVsZV9wdXQoKWApIGR1cmluZyBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXAgb3BlcmF0aW9ucyAoYGN0cmxfZHVtcHBvbGljeV9zdGFydGAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZWApLiBUaGlzIHByZXZlbnRzIHRoZSBtb2R1bGUgaW1wbGVtZW50aW5nIHRoZSBmYW1pbHkgZnJvbSBiZWluZyB1bmxvYWRlZCB3aGlsZSBhIHBvbGljeSBkdW1wIGlzIGluIHByb2dyZXNzLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBtb2R1bGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgLyBpbnZhbGlkIGNvZGUgb3IgZGF0YSBhY2Nlc3Mgb24gbW9kdWxlIHVubG9hZCksIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGRhdGEgZXhwb3N1cmUsIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIChgdHJ5X21vZHVsZV9nZXQoKWAgLyBgbW9kdWxlX3B1dCgpYCkgZHVyaW5nIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcCBvcGVyYXRpb25zIChgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYCkuIFRoaXMgcHJldmVudHMgdGhlIG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIGZhbWlseSBmcm9tIGJlaW5nIHVubG9hZGVkIHdoaWxlIGEgcG9saWN5IGR1bXAgaXMgaW4gcHJvZ3Jlc3MuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIG1vZHVsZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAvIGludmFsaWQgY29kZSBvciBkYXRhIGFjY2VzcyBvbiBtb2R1bGUgdW5sb2FkKSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgZGF0YSBleHBvc3VyZSwgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowgmj9r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 01:12:47 +0000 UTC FinishedAt: 2026-09-03 02:06:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctrl_dumppolicy_start", "ctrl_dumppolicy_done", "ctrl_dumppolicy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeV9zdGFydCYjMzQ7LAogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3lfZG9uZSYjMzQ7LAogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3kmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgKGB0cnlfbW9kdWxlX2dldCgpYCAvIGBtb2R1bGVfcHV0KClgKSBkdXJpbmcgR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1wIG9wZXJhdGlvbnMgKGBjdHJsX2R1bXBwb2xpY3lfc3RhcnRgIGFuZCBgY3RybF9kdW1wcG9saWN5X2RvbmVgKS4gVGhpcyBwcmV2ZW50cyB0aGUgbW9kdWxlIGltcGxlbWVudGluZyB0aGUgZmFtaWx5IGZyb20gYmVpbmcgdW5sb2FkZWQgd2hpbGUgYSBwb2xpY3kgZHVtcCBpcyBpbiBwcm9ncmVzcy5cblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIG1vZHVsZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAvIGludmFsaWQgY29kZSBvciBkYXRhIGFjY2VzcyBvbiBtb2R1bGUgdW5sb2FkKSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgZGF0YSBleHBvc3VyZSwgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBtb2R1bGUgcmVmZXJlbmNlIGhvbGRpbmcgKHRyeV9tb2R1bGVfZ2V0L21vZHVsZV9wdXQpIGZvciBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHBvbGljeSBkdW1wcyBpbiBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKSBhbmQgY3RybF9kdW1wcG9saWN5X2RvbmUoKSwgYWx0ZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBlcnJvciBjbGVhbnVwIHBhdGhzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEdlbmVyaWMgTmV0bGluayBDVFJMX0NNRF9HRVRQT0xJQ1kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMzdmOTI3ODVmNjk3OGQzYWUxMWU3MzMyZTM0Y2IyMDNkNjlhYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMjowNTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jXG5pbmRleCAwZGEzOWVhZWQyNTVmLi40MWQzNzQ0MmYxODY4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jXG5AQCAtMTUxMyw2ICYjNDM7MTUxMyw3IEBAIHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7XG4gXHRzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGU7XG4gXHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xuIFx0c3RydWN0IGdlbmxfb3BfaXRlciAqb3BfaXRlcjtcbiYjNDM7XHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiBcdHUzMiBvcDtcbiBcdHUxNiBmYW1faWQ7XG4gXHR1OCBkdW1wX21hcDoxLFxuQEAgLTE1NTUsNiAmIzQzOzE1NTYsOSBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0Y3R4LVx1MDAzZXJ0ID0gcnQ7XG4mIzQzO1x0Y3R4LVx1MDAzZW93bmVyID0gcnQtXHUwMDNlbW9kdWxlO1xuJiM0MztcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0aWYgKHRiW0NUUkxfQVRUUl9PUF0pIHtcbiBcdFx0c3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7XG5AQCAtMTU2NSw3ICYjNDM7MTU2OSw3IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0ZXJyID0gZ2VubF9nZXRfY21kX2JvdGgoY3R4LVx1MDAzZW9wLCBydCwgXHUwMDI2ZG9pdCwgXHUwMDI2ZHVtcCk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHROTF9TRVRfQkFEX0FUVFIoY2ItXHUwMDNlZXh0YWNrLCB0YltDVFJMX0FUVFJfT1BdKTtcbi1cdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGRvaXQucG9saWN5KSB7XG5AQCAtMTU4MywxNiAmIzQzOzE1ODcsMjAgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSlcbi1cdFx0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1x0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSkge1xuJiM0MztcdFx0XHRlcnIgPSAtRU5PREFUQTtcbiYjNDM7XHRcdFx0Z290byBlcnJfcHV0X293bmVyO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRjdHgtXHUwMDNlZHVtcF9tYXAgPSAxO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGN0eC1cdTAwM2VvcF9pdGVyID0ga21hbGxvY19vYmooKmN0eC1cdTAwM2VvcF9pdGVyKTtcbi1cdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4mIzQzO1x0fVxuIFxuIFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbkBAIC0xNjI0LDYgJiM0MzsxNjMyLDggQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cdTAwM2VzdGF0ZSk7XG4gZXJyX2ZyZWVfb3BfaXRlcjpcbiBcdGtmcmVlKGN0eC1cdTAwM2VvcF9pdGVyKTtcbiYjNDM7ZXJyX3B1dF9vd25lcjpcbiYjNDM7XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzYwLDYgJiM0MzsxNzcwLDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXG4gXHRrZnJlZShjdHgtXHUwMDNlb3BfaXRlcik7XG4gXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5X3N0YXJ0JiMzNDssCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeV9kb25lJiMzNDssCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG1vZHVsZSByZWZlcmVuY2UgaG9sZGluZyAodHJ5X21vZHVsZV9nZXQvbW9kdWxlX3B1dCkgZm9yIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgcG9saWN5IGR1bXBzIGluIGN0cmxfZHVtcHBvbGljeV9zdGFydCgpIGFuZCBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpLCBhbHRlcmluZyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGVycm9yIGNsZWFudXAgcGF0aHMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgR2VuZXJpYyBOZXRsaW5rIENUUkxfQ01EX0dFVFBPTElDWS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUzN2Y5Mjc4NWY2OTc4ZDNhZTExZTczMzJlMzRjYjIwM2Q2OWFiZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAyOjA1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCAwZGEzOWVhZWQyNTVmLi40MWQzNzQ0MmYxODY4IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtMTUxMyw2ICYjNDM7MTUxMyw3IEBAIHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7CiAJc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlOwogCWNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqcnQ7CiAJc3RydWN0IGdlbmxfb3BfaXRlciAqb3BfaXRlcjsKJiM0MzsJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdTMyIG9wOwogCXUxNiBmYW1faWQ7CiAJdTggZHVtcF9tYXA6MSwKQEAgLTE1NTUsNiAmIzQzOzE1NTYsOSBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJY3R4LSZndDtydCA9IHJ0OwomIzQzOwljdHgtJmd0O293bmVyID0gcnQtJmd0O21vZHVsZTsKJiM0MzsJaWYgKCF0cnlfbW9kdWxlX2dldChjdHgtJmd0O293bmVyKSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwogCiAJaWYgKHRiW0NUUkxfQVRUUl9PUF0pIHsKIAkJc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7CkBAIC0xNTY1LDcgJiM0MzsxNTY5LDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQllcnIgPSBnZW5sX2dldF9jbWRfYm90aChjdHgtJmd0O29wLCBydCwgJmFtcDtkb2l0LCAmYW1wO2R1bXApOwogCQlpZiAoZXJyKSB7CiAJCQlOTF9TRVRfQkFEX0FUVFIoY2ItJmd0O2V4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7Ci0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gZXJyX3B1dF9vd25lcjsKIAkJfQogCiAJCWlmIChkb2l0LnBvbGljeSkgewpAQCAtMTU4MywxNiAmIzQzOzE1ODcsMjAgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJCWdvdG8gZXJyX2ZyZWVfc3RhdGU7CiAJCX0KIAotCQlpZiAoIWN0eC0mZ3Q7c3RhdGUpCi0JCQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CQlpZiAoIWN0eC0mZ3Q7c3RhdGUpIHsKJiM0MzsJCQllcnIgPSAtRU5PREFUQTsKJiM0MzsJCQlnb3RvIGVycl9wdXRfb3duZXI7CiYjNDM7CQl9CiAKIAkJY3R4LSZndDtkdW1wX21hcCA9IDE7CiAJCXJldHVybiAwOwogCX0KIAogCWN0eC0mZ3Q7b3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtJmd0O29wX2l0ZXIpOwotCWlmICghY3R4LSZndDtvcF9pdGVyKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCFjdHgtJmd0O29wX2l0ZXIpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9wdXRfb3duZXI7CiYjNDM7CX0KIAogCWdlbmxfb3BfaXRlcl9pbml0KHJ0LCBjdHgtJmd0O29wX2l0ZXIpOwogCWN0eC0mZ3Q7ZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtJmd0O29wX2l0ZXIpOwpAQCAtMTYyNCw2ICYjNDM7MTYzMiw4IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAluZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LSZndDtzdGF0ZSk7CiBlcnJfZnJlZV9vcF9pdGVyOgogCWtmcmVlKGN0eC0mZ3Q7b3BfaXRlcik7CiYjNDM7ZXJyX3B1dF9vd25lcjoKJiM0MzsJbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzYwLDYgJiM0MzsxNzcwLDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAKIAlrZnJlZShjdHgtJmd0O29wX2l0ZXIpOwogCW5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtJmd0O3N0YXRlKTsKJiM0MzsJbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKTsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2VubCBQb2xpY3kgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBMb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYC4gUmlnaHQsIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGNoYW5nZSBpcyBhY3R1YWxseSAqZG9pbmcqLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYC4gQWgsIEkgc2VlLCBpdCYjMzk7cyBhYm91dCBtb2R1bGUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgZHVyaW5nIHBvbGljeSBkdW1wcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBDVFJMX0NNRF9HRVRQT0xJQ1lgLiBJdCBhcHBlYXJzIHRoZXkmIzM5O3JlIGFkZGluZyBgY3R4LSZndDtvd25lciA9IHJ0LSZndDttb2R1bGU7YCBhbmQgaW1wbGVtZW50aW5nIGB0cnlfbW9kdWxlX2dldCgpYCBhbmQgYG1vZHVsZV9wdXQoKWAgY2FsbHMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgdHJhY2tpbmcgbW9kdWxlIHVzYWdlIHRvIHByZXZlbnQgdW5sb2FkIGlzc3VlcywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIHJlc291cmNlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgb3V0bGl2ZSB0aGUgcmVxdWVzdCBpdHNlbGYgZHVyaW5nIHBvbGljeSBkdW1wcyBpbiBHZW5lcmljIE5ldGxpbmsuCgpJbnRlcmVzdGluZywgdGhpcyBpcyBwcm9iYWJseSB0byBhZGRyZXNzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVmZXJlbmNlIGNvdW50IGVycm9ycy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgY29udGV4dCBpcyBpbiBvcmRlciwgSSYjMzk7bGwgcnVuIHRoZSBhcHByb3ByaWF0ZSB0b29scyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIGluIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdHJsX2R1bXBwb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNTIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdHJsX3BvbGljeV9wb2xpY3lbXSA9IHtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNTI5LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTUzMDpzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNTMxLXtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjM5LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY0MDpzdGF0aWMgdm9pZCAqY3RybF9kdW1wcG9saWN5X3ByZXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NDEtXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjU3LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY1ODpzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NTktXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjcxLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY3MjpcdGhkciA9IGN0cmxfZHVtcHBvbGljeV9wcmVwKHNrYiwgY2IpO1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY3My1cdGlmICghaGRyKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MTAtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzExOnN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MTIte1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MjMtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzI0Olx0XHRcdGlmIChjdHJsX2R1bXBwb2xpY3lfcHV0X29wKHNrYiwgY2IsIFx1MDAyNmRvaXQsIFx1MDAyNmR1bXBpdCkpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzI1LVx0XHRcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTczMS1cdFx0d2hpbGUgKGN0eC1cdTAwM2VkdW1wX21hcCkge1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTczMjpcdFx0XHRpZiAoY3RybF9kdW1wcG9saWN5X3B1dF9vcChza2IsIGNiLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTczMy1cdFx0XHRcdFx0XHQgICBcdTAwMjZjdHgtXHUwMDNlb3BfaXRlci1cdTAwM2Vkb2l0LFxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NDMtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzQ0Olx0XHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NDUtXHRcdGlmICghaGRyKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NjYtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzY3OnN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc2OC17XG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTc3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGdlbmxfY3RybF9vcHNbXSA9IHtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzk3LVx0XHQubWF4YXR0clx0PSBBUlJBWV9TSVpFKGN0cmxfcG9saWN5X3BvbGljeSkgLSAxLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTc5ODpcdFx0LnN0YXJ0XHRcdD0gY3RybF9kdW1wcG9saWN5X3N0YXJ0LFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTc5OTpcdFx0LmR1bXBpdFx0XHQ9IGN0cmxfZHVtcHBvbGljeSxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE4MDA6XHRcdC5kb25lXHRcdD0gY3RybF9kdW1wcG9saWN5X2RvbmUsXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xODAxLVx0XHQuZmxhZ3NcdFx0PSBHRU5MX0NNRF9DQVBfRFVNUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIGdlbmV0bGluay5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlnIGludG8gdGhlIGBuZXQvbmV0bGluay9nZW5ldGxpbmsuY2AgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZXN0YWJsaXNoIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZWNvc3lzdGVtIG9mIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcywgdG8gZ3Jhc3AgaG93IHRoaXMgc3BlY2lmaWMgZmlsZSBmaXRzIGludG8gdGhlIGxhcmdlciBnZW5ldGxpbmsgZnJhbWV3b3JrLiBJIHdhbnQgdG8gc2VlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGZsb3cuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24sIG1lc3NhZ2Ugcm91dGluZywgYW5kIHRoZSBjb3JlIGludGVyYWN0aW9uIGxvZ2ljLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBjbGFyaWZ5IHRoZSBwdXJwb3NlIG9mICp0aGlzKiBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MzA6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4xNTMxOlx0e1xuMTUzMjpcdFx0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcbjE1MzM6XHRcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4xNTM0Olx0XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4xNTM1Olx0XHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xuMTUzNjpcdFx0c3RydWN0IGdlbmxfb3BfaXRlciBpO1xuMTUzNzpcdFx0aW50IGVycjtcbjE1Mzg6XHRcbjE1Mzk6XHRcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXHUwMDNlIHNpemVvZihjYi1cdTAwM2VjdHgpKTtcbjE1NDA6XHRcbjE1NDE6XHRcdGlmICghdGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0gXHUwMDI2XHUwMDI2ICF0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKVxuMTU0MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1NDM6XHRcbjE1NDQ6XHRcdGlmICh0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSkge1xuMTU0NTpcdFx0XHRjdHgtXHUwMDNlZmFtX2lkID0gbmxhX2dldF91MTYodGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pO1xuMTU0NjpcdFx0fSBlbHNlIHtcbjE1NDc6XHRcdFx0cnQgPSBnZW5sX2ZhbWlseV9maW5kX2J5bmFtZShcbjE1NDg6XHRcdFx0XHRubGFfZGF0YSh0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKSk7XG4xNTQ5Olx0XHRcdGlmICghcnQpXG4xNTUwOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTUxOlx0XHRcdGN0eC1cdTAwM2VmYW1faWQgPSBydC1cdTAwM2VpZDtcbjE1NTI6XHRcdH1cbjE1NTM6XHRcbjE1NTQ6XHRcdHJ0ID0gZ2VubF9mYW1pbHlfZmluZF9ieWlkKGN0eC1cdTAwM2VmYW1faWQpO1xuMTU1NTpcdFx0aWYgKCFydClcbjE1NTY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTU3Olx0XG4xNTU4Olx0XHRjdHgtXHUwMDNlcnQgPSBydDtcbjE1NTk6XHRcdGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtcbjE1NjA6XHRcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbjE1NjE6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTYyOlx0XG4xNTYzOlx0XHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xuMTU2NDpcdFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcDtcbjE1NjU6XHRcbjE1NjY6XHRcdFx0Y3R4LVx1MDAzZXNpbmdsZV9vcCA9IHRydWU7XG4xNTY3Olx0XHRcdGN0eC1cdTAwM2VvcCA9IG5sYV9nZXRfdTMyKHRiW0NUUkxfQVRUUl9PUF0pO1xuMTU2ODpcdFxuMTU2OTpcdFx0XHRlcnIgPSBnZW5sX2dldF9jbWRfYm90aChjdHgtXHUwMDNlb3AsIHJ0LCBcdTAwMjZkb2l0LCBcdTAwMjZkdW1wKTtcbjE1NzA6XHRcdFx0aWYgKGVycikge1xuMTU3MTpcdFx0XHRcdE5MX1NFVF9CQURfQVRUUihjYi1cdTAwM2VleHRhY2ssIHRiW0NUUkxfQVRUUl9PUF0pO1xuMTU3MjpcdFx0XHRcdGdvdG8gZXJyX3B1dF9vd25lcjtcbjE1NzM6XHRcdFx0fVxuMTU3NDpcdFxuMTU3NTpcdFx0XHRpZiAoZG9pdC5wb2xpY3kpIHtcbjE1NzY6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTU3NzpcdFx0XHRcdFx0XHRcdFx0ICAgICBkb2l0LnBvbGljeSxcbjE1Nzg6XHRcdFx0XHRcdFx0XHRcdCAgICAgZG9pdC5tYXhhdHRyKTtcbjE1Nzk6XHRcdFx0XHRpZiAoZXJyKVxuMTU4MDpcdFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbjE1ODE6XHRcdFx0fVxuMTU4MjpcdFx0XHRpZiAoZHVtcC5wb2xpY3kpIHtcbjE1ODM6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTU4NDpcdFx0XHRcdFx0XHRcdFx0ICAgICBkdW1wLnBvbGljeSxcbjE1ODU6XHRcdFx0XHRcdFx0XHRcdCAgICAgZHVtcC5tYXhhdHRyKTtcbjE1ODY6XHRcdFx0XHRpZiAoZXJyKVxuMTU4NzpcdFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbjE1ODg6XHRcdFx0fVxuMTU4OTpcdFxuMTU5MDpcdFx0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSkge1xuMTU5MTpcdFx0XHRcdGVyciA9IC1FTk9EQVRBO1xuMTU5MjpcdFx0XHRcdGdvdG8gZXJyX3B1dF9vd25lcjtcbjE1OTM6XHRcdFx0fVxuMTU5NDpcdFxuMTU5NTpcdFx0XHRjdHgtXHUwMDNlZHVtcF9tYXAgPSAxO1xuMTU5NjpcdFx0XHRyZXR1cm4gMDtcbjE1OTc6XHRcdH1cbjE1OTg6XHRcbjE1OTk6XHRcdGN0eC1cdTAwM2VvcF9pdGVyID0ga21hbGxvY19vYmooKmN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDA6XHRcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbjE2MDE6XHRcdFx0ZXJyID0gLUVOT01FTTtcbjE2MDI6XHRcdFx0Z290byBlcnJfcHV0X293bmVyO1xuMTYwMzpcdFx0fVxuMTYwNDpcdFxuMTYwNTpcdFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDY6XHRcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDc6XHRcbjE2MDg6XHRcdGZvciAoZ2VubF9vcF9pdGVyX2luaXQocnQsIFx1MDAyNmkpOyBnZW5sX29wX2l0ZXJfbmV4dChcdTAwMjZpKTsgKSB7XG4xNjA5Olx0XHRcdGlmIChpLmRvaXQucG9saWN5KSB7XG4xNjEwOlx0XHRcdFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFx1MDAyNmN0eC1cdTAwM2VzdGF0ZSxcbjE2MTE6XHRcdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0LnBvbGljeSxcbjE2MTI6XHRcdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0Lm1heGF0dHIpO1xuMTYxMzpcdFx0XHRcdGlmIChlcnIpXG4xNjE0Olx0XHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuMTYxNTpcdFx0XHR9XG4xNjE2Olx0XHRcdGlmIChpLmR1bXBpdC5wb2xpY3kpIHtcbjE2MTc6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTYxODpcdFx0XHRcdFx0XHRcdFx0ICAgICBpLmR1bXBpdC5wb2xpY3ksXG4xNjE5Olx0XHRcdFx0XHRcdFx0XHQgICAgIGkuZHVtcGl0Lm1heGF0dHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgdGFyZ2V0ZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkZvY3VzaW5nIG9uIGEgU3BlY2lmaWMgU2VjdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgMTc2MC0xODEwLiBJJiMzOTttIHRha2luZyBhIHRhcmdldGVkIGFwcHJvYWNoIGhlcmUgYmVjYXVzZSwgYmFzZWQgb24gbXkgcHJpb3IgYW5hbHlzaXMgYW5kIGV4cGVyaWVuY2UsIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgcGFydGljdWxhcmx5IHJlbGV2YW50IG9yIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHdpdGhpbiB0aGlzIHJhbmdlLiBJdCBjb3VsZCBiZSBhIGtleSBhc3N1bXB0aW9uIGJlaW5nIG1hZGUsIGEgY3JpdGljYWwgZGF0YSBwb2ludCBiZWluZyBpbnRyb2R1Y2VkLCBvciBwZXJoYXBzIGEgc2VjdGlvbiB3aGVyZSB0aGUgYXJndW1lbnRhdGlvbiB0YWtlcyBhbiBpbnRlcmVzdGluZyB0dXJuIHRoYXQgd2FycmFudHMgZnVydGhlciBleGFtaW5hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0JiMzOTtzIGNvbnRyaWJ1dGlvbiB0byB0aGUgYmlnZ2VyIHBpY3R1cmUsIHNlZSBpZiBpdCBpcyByZWxldmFudCB0byB0aGUgcHJvYmxlbSBhdCBoYW5kLCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIG15IGh5cG90aGVzaXMuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VnbWVudCB0byBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiBhc3Nlc3NpbmcgdGhlIHBhcGVyIG9yIGRvY3VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NjA6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc2MTpcdFxuMTc2MjpcdG5sYV9wdXRfZmFpbHVyZTpcbjE3NjM6XHRcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcbjE3NjQ6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc2NTpcdH1cbjE3NjY6XHRcbjE3Njc6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjE3Njg6XHR7XG4xNzY5Olx0XHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuMTc3MDpcdFxuMTc3MTpcdFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuMTc3MjpcdFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cdTAwM2VzdGF0ZSk7XG4xNzczOlx0XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4xNzc0Olx0XHRyZXR1cm4gMDtcbjE3NzU6XHR9XG4xNzc2Olx0XG4xNzc3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBnZW5sX2N0cmxfb3BzW10gPSB7XG4xNzc4Olx0XHR7XG4xNzc5Olx0XHRcdC5jbWRcdFx0PSBDVFJMX0NNRF9HRVRGQU1JTFksXG4xNzgwOlx0XHRcdC52YWxpZGF0ZVx0PSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNULFxuMTc4MTpcdFx0XHQucG9saWN5XHRcdD0gY3RybF9wb2xpY3lfZmFtaWx5LFxuMTc4MjpcdFx0XHQubWF4YXR0clx0PSBBUlJBWV9TSVpFKGN0cmxfcG9saWN5X2ZhbWlseSkgLSAxLFxuMTc4MzpcdFx0XHQuZG9pdFx0XHQ9IGN0cmxfZ2V0ZmFtaWx5LFxuMTc4NDpcdFx0XHQuZmxhZ3NcdFx0PSBHRU5MX0NNRF9DQVBfRE8sXG4xNzg1Olx0XHR9LFxuMTc4NjpcdFx0e1xuMTc4NzpcdFx0XHQuY21kXHRcdD0gQ1RSTF9DTURfR0VURkFNSUxZLFxuMTc4ODpcdFx0XHQudmFsaWRhdGVcdD0gR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG4xNzg5Olx0XHRcdC5wb2xpY3lcdFx0PSBjdHJsX3BvbGljeV9mYW1pbHksXG4xNzkwOlx0XHRcdC5tYXhhdHRyXHQ9IEFSUkFZX1NJWkUoY3RybF9wb2xpY3lfZmFtaWx5KSAtIDEsXG4xNzkxOlx0XHRcdC5kdW1waXRcdFx0PSBjdHJsX2R1bXBmYW1pbHksXG4xNzkyOlx0XHRcdC5mbGFnc1x0XHQ9IEdFTkxfQ01EX0NBUF9EVU1QLFxuMTc5MzpcdFx0fSxcbjE3OTQ6XHRcdHtcbjE3OTU6XHRcdFx0LmNtZFx0XHQ9IENUUkxfQ01EX0dFVFBPTElDWSxcbjE3OTY6XHRcdFx0LnBvbGljeVx0XHQ9IGN0cmxfcG9saWN5X3BvbGljeSxcbjE3OTc6XHRcdFx0Lm1heGF0dHJcdD0gQVJSQVlfU0laRShjdHJsX3BvbGljeV9wb2xpY3kpIC0gMSxcbjE3OTg6XHRcdFx0LnN0YXJ0XHRcdD0gY3RybF9kdW1wcG9saWN5X3N0YXJ0LFxuMTc5OTpcdFx0XHQuZHVtcGl0XHRcdD0gY3RybF9kdW1wcG9saWN5LFxuMTgwMDpcdFx0XHQuZG9uZVx0XHQ9IGN0cmxfZHVtcHBvbGljeV9kb25lLFxuMTgwMTpcdFx0XHQuZmxhZ3NcdFx0PSBHRU5MX0NNRF9DQVBfRFVNUCxcbjE4MDI6XHRcdH0sXG4xODAzOlx0fTtcbjE4MDQ6XHRcbjE4MDU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGdlbmxfY3RybF9ncm91cHNbXSA9IHtcbjE4MDY6XHRcdHsgLm5hbWUgPSBcJiMzNDtub3RpZnlcJiMzNDssIH0sXG4xODA3Olx0fTtcbjE4MDg6XHRcbjE4MDk6XHRzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGdlbmxfY3RybCBfX3JvX2FmdGVyX2luaXQgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcwNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCYjMzk7cyB0b3VjaGluZyBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBpbnRlcmVzdC4gR2VuZXJpYyBuZXRsaW5rIGlzICpjb3JlKiBuZXR3b3JraW5nLCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldGxpbmsgc29ja2V0cyAoYEFGX05FVExJTktgLCBgTkVUTElOS19HRU5FUklDYCksIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBJIGtub3cgdGhlIGNvbnRyb2xsZXIgZmFtaWx5IGBHRU5MX0lEX0NUUkxgIGhhbmRsZXMgYENUUkxfQ01EX0dFVFBPTElDWWAgZHVtcCByZXF1ZXN0cy4KCk15IG1haW4gY29uY2VybiBpcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBwb2xpY3kgZHVtcHMuIFJpZ2h0LCB3aGVuIGR1bXBpbmcgcG9saWN5IHVzaW5nIGBDVFJMX0NNRF9HRVRQT0xJQ1lgLCBgY3RybF9kdW1wcG9saWN5X3N0YXJ0KClgIGdyYWJzIGEgcmVmZXJlbmNlIHRvIHRoZSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IG1vZHVsZSB3aXRoIGB0cnlfbW9kdWxlX2dldChjdHgtJmd0O293bmVyKWAgYW5kIHN0b3JlcyBpdC4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIHdpbmRvdyB3aGVyZSB0aGUgbW9kdWxlIGNvdWxkIGJlIHVubG9hZGVkIGlmIG5vdCBwcm9wZXJseSBwcm90ZWN0ZWQgd2hpbGUgcG9saWN5IGR1bXBpbmcgaXMgYWN0aXZlLiBUaGUgY2xlYW51cCBpbiBgY3RybF9kdW1wcG9saWN5X2RvbmUoKWAgZG9lcyBhIGBtb2R1bGVfcHV0KGN0eC0mZ3Q7b3duZXIpYCB0byByZWxlYXNlIGl0LiBJbXBvcnRhbnRseSwgdGhlIGVycm9yIHBhdGhzIGluIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYWxzbyByZWxlYXNlIHRoZSBtb2R1bGUgcmVmIHZpYSBgZ290byBlcnJfcHV0X293bmVyYC4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhpcyB3YXJyYW50cyBmdXp6aW5nOgoKKiAgICoqSXMgaXQgaW4gY29yZSBrZXJuZWwgbG9naWMvcmVhY2hhYmxlIGRyaXZlcnM/KiogWWVwLCBnZW5lcmljIG5ldGxpbmsgY29yZSwgd2hpY2ggbWFrZXMgaXQgaGlnaC12YWx1ZS4KKiAgICoqSXMgaXQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZT8qKiBBYnNvbHV0ZWx5LCB0aHJvdWdoIGBDVFJMX0NNRF9HRVRQT0xJQ1lgIG9uIGBORVRMSU5LX0dFTkVSSUNgLiBUaGlzIGlzIGtleS4KKiAgICoqRG9lcyBpdCBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcz8qKiBZZXMsIGNyaXRpY2FsbHksIGl0JiMzOTtzIGludHJvZHVjaW5nIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIHBvbGljeSBkdW1wcyB0byBwcmV2ZW50IG1vZHVsZSB1bmxvYWRpbmcgb3IgdXNlLWFmdGVyLWZyZWUgd2hpbGUgYSBwb2xpY3kgaXMgYmVpbmcgZHVtcGVkLiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBjaGFuZ2UgYW5kIGNoYW5nZXMgZXJyb3IvY2xlYW51cCBwYXRocy4KClRoZSBhbnN3ZXIgaXMgKip3b3J0aCBmdXp6aW5nKiouIFRoaXMgc291bmRzIGxpa2UgYSBwcmltZSB0YXJnZXQuCgpOb3cgSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGVuYWJsZSBHZW5lcmljIE5ldGxpbmsuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L25ldGxpbmsvTWFrZWZpbGVgIGFuZCB0aGVuIGBuZXQvS2NvbmZpZ2Agb3IgYG5ldC9uZXRsaW5rL0tjb25maWdgIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXRsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2JhdF9hbGdvLmM6MTg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMtNDMtI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYzo0NDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYy00NS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuYy0yOC0jaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuYzoyOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2JhdF92LmMtMzAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxuLS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQwLSNpbmNsdWRlIFx1MDAzY25ldC9hcnAuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmM6NDE6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00Mi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L2FycC5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzozOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTQwLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L2RzZmllbGQuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjM5OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTQwLSNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ0LSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo0NTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ2LSNpbmNsdWRlIFx1MDAzY25ldC9pZl9pbmV0Ni5oXHUwMDNlXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTMyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3V0c25hbWUuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjMzOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTM0LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2Vcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQyOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00My0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTItXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6MzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy00LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYy0yLVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjM6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNC1cbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0yOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MzA6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0zMS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZXZlbnQuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM6ODojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTktXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6MTE6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC0xMi1cbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtNi1cbm5ldC9kZXZsaW5rL2NvcmUuYzo3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvY29yZS5jLTgtI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4tLVxubmV0L2RldmxpbmsvZGV2LmMtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxubmV0L2RldmxpbmsvZGV2LmM6ODojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9kZXZsaW5rL2Rldi5jLTktI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuLS1cbm5ldC9kZXZsaW5rL2hlYWx0aC5jLTYtXG5uZXQvZGV2bGluay9oZWFsdGguYzo3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvaGVhbHRoLmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4tLVxubmV0L2RldmxpbmsvbmV0bGluay5jLTYtXG5uZXQvZGV2bGluay9uZXRsaW5rLmM6NzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9kZXZsaW5rL25ldGxpbmsuYy04LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0tXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5jLTctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy05LVxuLS1cbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaDoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTItXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTI2MD1pbnQgZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMjg3LSAqIGV0aG5sX3JlcGx5X2luaXQoKSAtIENyZWF0ZSBza2IgZm9yIGEgcmVwbHkgYW5kIGZpbGwgZGV2aWNlIGlkZW50aWZpY2F0aW9uXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6Mjg4OiAqIEBwYXlsb2FkOiAgICAgIHBheWxvYWQgbGVuZ3RoICh3aXRob3V0IG5ldGxpbmsgYW5kIGdlbmV0bGluayBoZWFkZXIpXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMjg5LSAqIEBkZXY6ICAgICAgICAgIGRldmljZSB0aGUgcmVwbHkgaXMgYWJvdXQgKG1heSBiZSBudWxsKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy0yOTEtICogQGhkcl9hdHRydHlwZTogYXR0cmlidXRlIHR5cGUgZm9yIGNvbW1vbiBoZWFkZXJcbm5ldC9ldGh0b29sL25ldGxpbmsuYzoyOTI6ICogQGluZm86ICAgICAgICAgZ2VuZXRsaW5rIGluZm8gb2YgdGhlIHJlY2VpdmVkIHBhY2tldCB3ZSByZXNwb25kIHRvXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMjkzLSAqIEBlaGRycDogICAgICAgIHBsYWNlIHRvIHN0b3JlIHBheWxvYWQgcG9pbnRlciByZXR1cm5lZCBieSBnZW5sbXNnX25ldygpXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTExNTU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBldGhubF9uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTExNTgtXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6MTE1OTovKiBnZW5ldGxpbmsgc2V0dXAgKi9cbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xMTYwLVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz0xNTk3PXN0YXRpYyBpbnQgX19pbml0IGV0aG5sX2luaXQodm9pZClcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTYwMS1cdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmV0aHRvb2xfZ2VubF9mYW1pbHkpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjE2MDI6XHRpZiAoV0FSTihyZXQgXHUwMDNjIDAsIFwmIzM0O2V0aHRvb2w6IGdlbmV0bGluayBmYW1pbHkgcmVnaXN0cmF0aW9uIGZhaWxlZFwmIzM0OykpXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTYwMy1cdFx0cmV0dXJuIHJldDtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmgtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxubmV0L2V0aHRvb2wvbmV0bGluay5oOjg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvZXRodG9vbC9uZXRsaW5rLmgtOS0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4tLVxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNy0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2hhbmRzaGFrZS9nZW5sLmMtOS1cbi0tXG5uZXQvaGFuZHNoYWtlL2dlbmwuaC0xMC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL2dlbmwuaDoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvZ2VubC5oLTEyLVxuLS1cbm5ldC9oYW5kc2hha2UvaGFuZHNoYWtlLXRlc3QuYy0xMy0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmM6MTQ6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxuLS1cbm5ldC9oYW5kc2hha2UvbmV0bGluay5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvbmV0bGluay5jOjE4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTktI2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxuLS1cbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjIwOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFx1MDAzZVxuLS1cbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvaGFuZHNoYWtlLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvdGxzaGQuYzoyMDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9oYW5kc2hha2UvdGxzaGQuYy0yMS0jaW5jbHVkZSBcdTAwM2NuZXQvdGxzX3Byb3QuaFx1MDAzZVxuLS1cbm5ldC9oYW5kc2hha2UvdHJhY2UuYy0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL3RyYWNlLmM6MTY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaGFuZHNoYWtlL3RyYWNlLmMtMTctXG4tLVxubmV0L2hzci9oc3JfbmV0bGluay5jLTEyLSNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxubmV0L2hzci9oc3JfbmV0bGluay5jOjEzOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2hzci9oc3JfbmV0bGluay5jLTE0LSNpbmNsdWRlIFwmIzM0O2hzcl9tYWluLmhcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg9NTE9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjE1NF9mYW1pbHk7XG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtNTItXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg6NTM6LyogZ2VuZXRsaW5rIG9wcy9ncm91cHMgKi9cbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC01NC1pbnQgaWVlZTgwMjE1NF9saXN0X3BoeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2Vcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxNTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ubDgwMjE1NC5oXHUwMDNlXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTgtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtcGh5LmMtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L2llZWU4MDIxNTQvbmwtcGh5LmM6MTc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaWVlZTgwMjE1NC9ubC1waHkuYy0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTU0LmhcdTAwM2Vcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTEyLSNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxNTQuaFx1MDAzZVxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYzoxMzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmMtMTQtI2luY2x1ZGUgXHUwMDNjbmV0L21hYzgwMjE1NC5oXHUwMDNlXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTItI2luY2x1ZGUgXHUwMDNjbmV0L2dyby5oXHUwMDNlXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xOS0jaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2ZvdS5oXHUwMDNlXG5uZXQvaXB2NC9mb3VfY29yZS5jOjIwOiNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMjEtXG4tLVxubmV0L2lwdjQvZm91X25sLmMtNy0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaXB2NC9mb3VfbmwuYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjQvZm91X25sLmMtOS1cbi0tXG5uZXQvaXB2NC9mb3VfbmwuaC0xMC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvaXB2NC9mb3VfbmwuaDoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY0L2ZvdV9ubC5oLTEyLVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIyOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMy1cbi0tXG5uZXQvaXB2Ni9pbGEvaWxhLmgtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L2NoZWNrc3VtLmhcdTAwM2Vcbm5ldC9pcHY2L2lsYS9pbGEuaDoxNzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY2L2lsYS9pbGEuaC0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jOjI6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX21haW4uYy0zLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRucy9nZW5lcmljLmhcdTAwM2Vcbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jOjQ6I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjYvaWxhL2lsYV9tYWluLmMtNS0jaW5jbHVkZSBcJiMzNDtpbGEuaFwmIzM0O1xuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzo3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXHUwMDNlXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzo5OiNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTEwLSNpbmNsdWRlIFwmIzM0O2lsYS5oXCYjMzQ7XG4tLVxubmV0L2lwdjYvaW9hbTYuYy0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxubmV0L2lwdjYvaW9hbTYuYzoxOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9pcHY2L2lvYW02LmMtMjAtI2luY2x1ZGUgXHUwMDNjbmV0L2lvYW02LmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtMjAtI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzYuaFx1MDAzZVxubmV0L2lwdjYvc2VnNi5jOjIxOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjYvc2VnNi5jLTIyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlZzYuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L3NlZzZfaG1hYy5jLTM5LSNpbmNsdWRlIFx1MDAzY25ldC9zZWc2LmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfaG1hYy5jOjQwOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9obWFjLmMtNDEtI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzZfaG1hYy5oXHUwMDNlXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmg9MTU4PXN0cnVjdCBsMnRwX3R1bm5lbCB7XG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMTg1LVxubmV0L2wydHAvbDJ0cF9jb3JlLmg6MTg2Oi8qIFBzZXVkb3dpcmUgb3BzIGNhbGxiYWNrcyBmb3IgdXNlIHdpdGggdGhlIGwydHAgZ2VuZXRsaW5rIGludGVyZmFjZSAqL1xubmV0L2wydHAvbDJ0cF9jb3JlLmgtMTg3LXN0cnVjdCBsMnRwX25sX2NtZF9vcHMge1xuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTE1LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjE2OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtMTctI2luY2x1ZGUgXHUwMDNjbmV0L3VkcC5oXHUwMDNlXG4tLVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jOjg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtOS1cbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtMTAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjExOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oLTEyLVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzLSNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbXB0Y3AuaFx1MDAzZVxubmV0L21wdGNwL3Byb3RvY29sLmg6MTQ6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvcnN0cmVhc29uLmhcdTAwM2Vcbi0tXG5uZXQvbmNzaS9uY3NpLWNtZC5jLTE1LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbm5ldC9uY3NpL25jc2ktY21kLmM6MTY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmNzaS9uY3NpLWNtZC5jLTE3LVxuLS1cbm5ldC9uY3NpL25jc2ktbWFuYWdlLmMtMTgtI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxubmV0L25jc2kvbmNzaS1tYW5hZ2UuYzoxOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uY3NpL25jc2ktbWFuYWdlLmMtMjAtXG4tLVxubmV0L25jc2kvbmNzaS1uZXRsaW5rLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxubmV0L25jc2kvbmNzaS1uZXRsaW5rLmM6MTE6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmNzaS9uY3NpLW5ldGxpbmsuYy0xMi0jaW5jbHVkZSBcdTAwM2NuZXQvbmNzaS5oXHUwMDNlXG4tLVxubmV0L25jc2kvbmNzaS1yc3AuYy0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG5uZXQvbmNzaS9uY3NpLXJzcC5jOjE2OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25jc2kvbmNzaS1yc3AuYy0xNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDMtI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ0OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zOTUxPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgaXBfdnNfc29ja29wdHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5NjUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzk2NjovKiBJUFZTIGdlbmV0bGluayBmYW1pbHkgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zOTY3LXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaXBfdnNfZ2VubF9mYW1pbHk7XG4tLVxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYy0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jOjI1OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYy0yNi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGFiZWwuaFx1MDAzZVxuLS1cbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jLTIzLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jOjI0OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxhYmVsLmhcdTAwM2Vcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmM6MjU6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jLTI2LSNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4tLVxubmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jLTMzLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYzozNDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYy0zNS0jaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuLS1cbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuYzoyNjojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMtMjctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxhYmVsLmhcdTAwM2Vcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5oLTIzLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmg6MjQ6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5oLTI1LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsYWJlbC5oXHUwMDNlXG4tLVxubmV0L25ldGxpbmsvTWFrZWZpbGUtNS1cbm5ldC9uZXRsaW5rL01ha2VmaWxlOjY6b2JqLXkgIFx0XHRcdFx0Oj0gYWZfbmV0bGluay5vIGdlbmV0bGluay5vIHBvbGljeS5vXG5uZXQvbmV0bGluay9NYWtlZmlsZS03LVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy03NS0jaW5jbHVkZSBcJiMzNDthZl9uZXRsaW5rLmhcJiMzNDtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzo3NjojaW5jbHVkZSBcJiMzNDtnZW5ldGxpbmsuaFwmIzM0O1xubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTc3LVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz03MTg9c3RhdGljIGludCBuZXRsaW5rX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNzM3LVx0LyogbXVzdCBub3QgYWNxdWlyZSBuZXRsaW5rX3RhYmxlX2xvY2sgaW4gYW55IHdheSBhZ2FpbiBiZWZvcmUgdW5iaW5kXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6NzM4Olx0ICogYW5kIG5vdGlmeWluZyBnZW5ldGxpbmsgaXMgZG9uZSBhcyBvdGhlcndpc2UgaXQgbWlnaHQgZGVhZGxvY2tcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy03MzktXHQgKi9cbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0yMi0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoyMzojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTI0LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MjU6I2luY2x1ZGUgXCYjMzQ7Z2VuZXRsaW5rLmhcJiMzNDtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTI2LVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5oLTYtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuaDo3Oi8qIGZvciBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbiBhZl9uZXRsaW5rIGFuZCBnZW5ldGxpbmsgKi9cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5oLTgtZXh0ZXJuIGF0b21pY190IGdlbmxfc2tfZGVzdHJ1Y3RpbmdfY250O1xuLS1cbm5ldC9uZmMvY29yZS5jLTE4LVxubmV0L25mYy9jb3JlLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvbmZjL2NvcmUuYy0yMC1cbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xNy1cbm5ldC9uZmMvbmV0bGluay5jOjE4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L25mYy9uZXRsaW5rLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbmZjLmhcdTAwM2Vcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTMtI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2Vcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2Vcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9kbWkuaFx1MDAzZVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNy0jaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2Vcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZHBfbm90aWZ5LmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxubmV0L29wZW52c3dpdGNoL2RwX25vdGlmeS5jOjc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvb3BlbnZzd2l0Y2gvZHBfbm90aWZ5LmMtOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXHUwMDNlXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xOC1cbi0tXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMTQtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L3BzYW1wbGUvcHNhbXBsZS5jOjE1OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3BzYW1wbGUvcHNhbXBsZS5jLTE2LSNpbmNsdWRlIFx1MDAzY25ldC9wc2FtcGxlLmhcdTAwM2Vcbi0tXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy03LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9wc3AvcHNwLW5sLWdlbi5jOjg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy05LVxuLS1cbm5ldC9wc3AvcHNwLW5sLWdlbi5oLTEwLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9wc3AvcHNwLW5sLWdlbi5oOjExOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMTItXG4tLVxubmV0L3BzcC9wc3BfbmwuYy02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG5uZXQvcHNwL3BzcF9ubC5jOjc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvcHNwL3BzcF9ubC5jLTgtI2luY2x1ZGUgXHUwMDNjbmV0L3BzcC5oXHUwMDNlXG4tLVxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmMtNy0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvc2hhcGVyL3NoYXBlcl9ubF9nZW4uYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmMtOS1cbi0tXG5uZXQvc2hhcGVyL3NoYXBlcl9ubF9nZW4uaC0xMC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvc2hhcGVyL3NoYXBlcl9ubF9nZW4uaDoxMTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9zaGFwZXIvc2hhcGVyX25sX2dlbi5oLTEyLVxuLS1cbm5ldC9zbWMvc21jLmgtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZSAvKiBfX2FsaWduZWQgKi9cbm5ldC9zbWMvc21jLmg6MTc6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvc21jL3NtYy5oLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0tXG5uZXQvc21jL3NtY19jb3JlLmgtMTktI2luY2x1ZGUgXHUwMDNjcmRtYS9pYl92ZXJicy5oXHUwMDNlXG5uZXQvc21jL3NtY19jb3JlLmg6MjA6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvc21jL3NtY19jb3JlLmgtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L3NtYy5oXHUwMDNlXG4tLVxubmV0L3NtYy9zbWNfbmV0bGluay5oLTE1LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9zbWMvc21jX25ldGxpbmsuaDoxNjojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9zbWMvc21jX25ldGxpbmsuaC0xNy1cbi0tXG5uZXQvc21jL3NtY19wbmV0LmMtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L3NtYy9zbWNfcG5ldC5jOjE3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3NtYy9zbWNfcG5ldC5jLTE4LVxuLS1cbm5ldC9zbWMvc21jX3N0YXRzLmMtMTUtI2luY2x1ZGUgXHUwMDNjbGludXgvc21jLmhcdTAwM2Vcbm5ldC9zbWMvc21jX3N0YXRzLmM6MTY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvc21jL3NtY19zdGF0cy5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0tXG5uZXQvc3VucnBjL2NhY2hlLmMtMzUtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3JwY19waXBlX2ZzLmhcdTAwM2Vcbm5ldC9zdW5ycGMvY2FjaGUuYzozNjojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9zdW5ycGMvY2FjaGUuYy0zNy0jaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvc3VucnBjLmhcdTAwM2Vcbi0tXG5uZXQvc3VucnBjL25ldGxpbmsuYy03LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9zdW5ycGMvbmV0bGluay5jOjg6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvc3VucnBjL25ldGxpbmsuYy05LVxuLS1cbm5ldC9zdW5ycGMvbmV0bGluay5oLTEwLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9zdW5ycGMvbmV0bGluay5oOjExOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3N1bnJwYy9uZXRsaW5rLmgtMTItXG4tLVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jLTI1LVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jOjI2OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jLTI3LVxuLS1cbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYzoyMDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMtMjEtI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9zdW5ycGNfbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L3RpcGMvYmVhcmVyLmgtNDItI2luY2x1ZGUgXCYjMzQ7bXNnLmhcJiMzNDtcbm5ldC90aXBjL2JlYXJlci5oOjQzOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3RpcGMvYmVhcmVyLmgtNDQtXG4tLVxubmV0L3RpcGMvY29yZS5oLTYyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFx1MDAzZVxubmV0L3RpcGMvY29yZS5oOjYzOiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3RpcGMvY29yZS5oLTY0LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRucy9oYXNoLmhcdTAwM2Vcbi0tXG5uZXQvdGlwYy9saW5rLmgtMzktXG5uZXQvdGlwYy9saW5rLmg6NDA6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvdGlwYy9saW5rLmgtNDEtI2luY2x1ZGUgXCYjMzQ7bXNnLmhcJiMzNDtcbi0tXG5uZXQvdGlwYy9tb25pdG9yLmMtMzUtXG5uZXQvdGlwYy9tb25pdG9yLmM6MzY6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvdGlwYy9tb25pdG9yLmMtMzctI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4tLVxubmV0L3RpcGMvbmV0LmgtMzktXG5uZXQvdGlwYy9uZXQuaDo0MDojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC90aXBjL25ldC5oLTQxLVxuLS1cbm5ldC90aXBjL25ldGxpbmsuYy00NC0jaW5jbHVkZSBcJiMzNDt1ZHBfbWVkaWEuaFwmIzM0O1xubmV0L3RpcGMvbmV0bGluay5jOjQ1OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3RpcGMvbmV0bGluay5jLTQ2LVxuLS1cbm5ldC90aXBjL25ldGxpbmtfY29tcGF0LmMtNDAtI2luY2x1ZGUgXCYjMzQ7bmV0LmhcJiMzNDtcbm5ldC90aXBjL25ldGxpbmtfY29tcGF0LmM6NDE6I2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG5uZXQvdGlwYy9uZXRsaW5rX2NvbXBhdC5jLTQyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcdTAwM2Vcbi0tXG5uZXQvdGlwYy9zb2NrZXQuaC0zOC0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG5uZXQvdGlwYy9zb2NrZXQuaDozOTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC90aXBjL3NvY2tldC5oLTQwLVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNTojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjYtI2luY2x1ZGUgXHUwMDNjbmV0L2NmZzgwMjExLmhcdTAwM2Vcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG5uZXQvd2lyZWxlc3MvY29yZS5oOjE3OiNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxubmV0L3dpcmVsZXNzL2NvcmUuaC0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyNjojaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2Vcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjctI2luY2x1ZGUgXHUwMDNjbmV0L2NmZzgwMjExLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgTmV0bGluayBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBOZXRsaW5rIGltcGxlbWVudGF0aW9uLiBGaXJzdCBzdG9wLCBgbmV0L25ldGxpbmsvTWFrZWZpbGVgLiBBbHJpZ2h0LCBoZXJlIHdlIGdvLi4uIGBvYmoteSA6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9gLiBSaWdodCwgc28gdGhpcyBjb25maXJtcyB0aGUgY29yZSBtb2R1bGVzOiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGltcGxlbWVudGF0aW9uLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGl0c2VsZiwgYW5kIHBvbGljeSBjb25maWd1cmF0aW9ucy4gU3RhbmRhcmQgc3R1ZmYuIFRoaXMgd2hvbGUgdGhpbmcgZ2V0cyBidWlsdCwgSSByZWNhbGwsIHdoZW5ldmVyIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgdHlwaWNhbGx5IGdhdGVkIGJlaGluZCBgQ09ORklHX05FVGAuIEdvdCBpdC4gTm93LCBsZXQmIzM5O3MgcGVlayBhdCB0aGUgcGFyZW50IGBuZXQvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgYnVpbGQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxuICAgNDpcdCNcbiAgIDU6XHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXHUwMDNlXG4gICA2Olx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cbiAgIDc6XHQjXG4gICA4Olx0XG4gICA5Olx0b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX0NPTVBBVClcdFx0JiM0Mzs9IGNvbXBhdC5vXG4gIDEyOlx0XG4gIDEzOlx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXG4gIDE0Olx0b2JqLSQoQ09ORklHX0xMQylcdFx0JiM0Mzs9IGxsYy9cbiAgMTU6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXG4gIDE2Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbiAgMTc6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG4gIDE4Olx0b2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiAgMTk6XHRvYmotJChDT05GSUdfWEZSTSlcdFx0JiM0Mzs9IHhmcm0vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VOSVgpXHRcdCYjNDM7PSB1bml4L1xuICAyMTpcdG9iai0kKENPTkZJR19JTkVUX1BTUClcdFx0JiM0Mzs9IHBzcC9cbiAgMjI6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGlwdjYvXG4gIDIzOlx0b2JqLSQoQ09ORklHX1BBQ0tFVClcdFx0JiM0Mzs9IHBhY2tldC9cbiAgMjQ6XHRvYmotJChDT05GSUdfTkVUX0tFWSlcdFx0JiM0Mzs9IGtleS9cbiAgMjU6XHRvYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xuICAyNjpcdG9iai0kKENPTkZJR19ORVRfREVWTElOSylcdCYjNDM7PSBkZXZsaW5rL1xuICAyNzpcdG9iai15XHRcdFx0XHQmIzQzOz0gZHNhL1xuICAyODpcdG9iai0kKENPTkZJR19YMjUpXHRcdCYjNDM7PSB4MjUvXG4gIDI5Olx0b2JqLSQoQ09ORklHX0xBUEIpXHRcdCYjNDM7PSBsYXBiL1xuICAzMDpcdG9iai0kKENPTkZJR19DQU4pXHRcdCYjNDM7PSBjYW4vXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JUKVx0XHQmIzQzOz0gYmx1ZXRvb3RoL1xuICAzMjpcdG9iai0kKENPTkZJR19TVU5SUEMpXHRcdCYjNDM7PSBzdW5ycGMvXG4gIDMzOlx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVx0XHQmIzQzOz0gcnhycGMvXG4gIDM0Olx0b2JqLSQoQ09ORklHX0FGX0tDTSlcdFx0JiM0Mzs9IGtjbS9cbiAgMzU6XHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcdCYjNDM7PSBzdHJwYXJzZXIvXG4gIDM2Olx0b2JqLSQoQ09ORklHX0FUTSlcdFx0JiM0Mzs9IGF0bS9cbiAgMzc6XHRvYmotJChDT05GSUdfTDJUUClcdFx0JiM0Mzs9IGwydHAvXG4gIDM4Olx0b2JqLSQoQ09ORklHX1BIT05FVClcdFx0JiM0Mzs9IHBob25ldC9cbiAgMzk6XHRpZm5lcSAoJChDT05GSUdfVkxBTl84MDIxUSksKVxuICA0MDpcdG9iai15XHRcdFx0XHQmIzQzOz0gODAyMXEvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjIyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0bGluay9nZW5ldGxpbmsgQ29kZSBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBvYmoteSAmIzQzOz0gLi4uIG5ldGxpbmsvIC4uLmAgaW4gdGhlIGBuZXQvTWFrZWZpbGVgIGltcGxpZXMgdGhhdCBgQ09ORklHX05FVD15YCBpcyB0aGUgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgZm9yIHRoaXMgY29kZSB0byBiZSBjb21waWxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBtb3JlIGludGVyZXN0aW5nIGFzcGVjdCwgZmluZGluZyBhcHByb3ByaWF0ZSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBpbnRlbnNpdmUgZnV6emluZywgc3RpY2tpbmcgY2xvc2VseSB0byB0aGUgaW5zdHJ1Y3Rpb25zLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYXMgdGhhdCB3b3VsZCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbi4gSSB3YW50IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgbGF0dGVyIGFyZSB1c3VhbGx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLgoKR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgIGZpbGUuIEkmIzM5O3ZlIGFscmVhZHkgbm90ZWQgYSBmZXc6IGBjdHJsX2R1bXBwb2xpY3lfc3RhcnRgLCBgY3RybF9kdW1wcG9saWN5YCwgYGN0cmxfZHVtcHBvbGljeV9kb25lYCwgYGdlbmxfcmN2X21zZ2AsIGBnZW5sX2ZhbWlseV9yY3ZfbXNnX2R1bXBpdGAsIGFuZCBgZ2VubF9yY3ZgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCwgYGN0cmxfZHVtcHBvbGljeWAsIGFuZCBgY3RybF9kdW1wcG9saWN5X2RvbmVgIGhhdmUgZGlzdGluY3QgYWRkcmVzc2VzLiBCZWNhdXNlIHRoZWlyIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBhc3NpZ25lZCB0byBhIHN0cnVjdCBjYWxsYmFjayAobGlrZSBgLnN0YXJ0ID0gY3RybF9kdW1wcG9saWN5X3N0YXJ0YCksIHRoZSBjb21waWxlciAqbXVzdCogZ2VuZXJhdGUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBmb3IgdGhlbS4gVW5sZXNzIExUTy9XUEEgaXMgbWVyZ2luZyBpZGVudGljYWwgZnVuY3Rpb25zICh3aGljaCB3b3VsZG4mIzM5O3QgaGF2ZSB1bmlxdWUgbG9naWMpLCB0aGVzZSBhcmUgbGlrZWx5IGdvb2QgdGFyZ2V0cy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoaXMsIGJ1dCBpdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBnZW5ldGxpbmsuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgZ2VubF98XnZvaWQgZ2VubF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYz0zMT1ERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChnZW5sX3NrX2Rlc3RydWN0aW5nX3dhaXRxKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTMyLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MzM6dm9pZCBnZW5sX2xvY2sodm9pZClcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTM0LXtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0zNz1FWFBPUlRfU1lNQk9MKGdlbmxfbG9jayk7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0zOC1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjM5OnZvaWQgZ2VubF91bmxvY2sodm9pZClcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTQwLXtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz03Mzc9dm9pZCAqZ2VubF9za19wcml2X2dldChzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTc3NC0gKi9cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjc3NTppbnQgZ2VubF9yZWdpc3Rlcl9mYW1pbHkoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHkpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy03NzYte1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTg0MD1FWFBPUlRfU1lNQk9MKGdlbmxfcmVnaXN0ZXJfZmFtaWx5KTtcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy04NDktICovXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzo4NTA6aW50IGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoY29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHkpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy04NTEte1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE5OTQ9RVhQT1JUX1NZTUJPTChnZW5sbXNnX211bHRpY2FzdF9hbGxucyk7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xOTk1LVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTk5Njp2b2lkIGdlbmxfbm90aWZ5KGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTk5Ny1cdFx0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBncm91cCwgZ2ZwX3QgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTM5CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0bGluayBQb2xpY3kgRHVtcGluZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGtleSBmb2N1cyBzeW1ib2xzOiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYC4gQXJlIHRoZXkgdmFsaWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQ/IFllcywgdGhleSBhcmUuIEFuZCBgY3RybF9kdW1wcG9saWN5YCBpcyBhbHNvIHJlbGV2YW50IGhlcmUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbnMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYENPTkZJR19ORVRgLCBvciBzaW1wbHkgJiMzNDtORVQsJiMzNDsgd2hpY2ggaXMgYSBnaXZlbiwgYXMgZ2VuZXJpYyBuZXRsaW5rIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGl0LgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIGRldGFpbHMuIFRoaXMgcGF0Y2ggYXBwZWFycyBjcml0aWNhbC4gSXQgYWRkcyBgY3R4LSZndDtvd25lciA9IHJ0LSZndDttb2R1bGU7YCBhbmQgYSBgdHJ5X21vZHVsZV9nZXQoY3R4LSZndDtvd25lcilgIHdpdGhpbiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0KClgLiBUaGlzIGlzIGdvb2Q7IGl0JiMzOTtzIHRoZSBtb2R1bGUgcmVmZXJlbmNlIGFjcXVpc2l0aW9uIHN0ZXAuIFRoZSBwYXRjaCB0aGVuIGNvcnJlY3RseSB1cGRhdGVzIHRoZSBlcnJvciBwYXRocyB3aXRoIGBtb2R1bGVfcHV0KGN0eC0mZ3Q7b3duZXIpYCB0byBoYW5kbGUgZmFpbHVyZSBzY2VuYXJpb3MsIGFuZCBgbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKWAgaXMgYWxzbyBhZGRlZCB0byBgY3RybF9kdW1wcG9saWN5X2RvbmUoKWAuIFRoaXMgaXMgYWxsIHRvIHByZXZlbnQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZHVtcGluZyBuZXRsaW5rIHBvbGljaWVzIG9mIGtlcm5lbCBtb2R1bGVzLiBUaGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgYENUUkxfQ01EX0dFVFBPTElDWWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UuCgpUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGVuYWJsZSBjb25maWcgaXMgYFsmIzM0O05FVCYjMzQ7XWAgYW5kIGZvY3VzIHN5bWJvbHMgYXJlIGBbJiMzNDtjdHJsX2R1bXBwb2xpY3lfc3RhcnQmIzM0OywgJiMzNDtjdHJsX2R1bXBwb2xpY3lfZG9uZSYjMzQ7LCAmIzM0O2N0cmxfZHVtcHBvbGljeSYjMzQ7XWAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIHBhcmFtZXRlcnM6CiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtORVQmIzM0O11gIC0gTWFrZXMgc2Vuc2UuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2N0cmxfZHVtcHBvbGljeV9zdGFydCYjMzQ7LCAmIzM0O2N0cmxfZHVtcHBvbGljeV9kb25lJiMzNDssICYjMzQ7Y3RybF9kdW1wcG9saWN5JiMzNDtdYCAtIEV4YWN0bHkgd2hhdCB3ZSBleHBlY3QuCiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1hbmFnZXMgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBtb2R1bGUgcmVmZXJlbmNlcyBkdXJpbmcgYENUUkxfQ01EX0dFVFBPTElDWWAgZHVtcCBvcGVyYXRpb25zIGluIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYCwgcHJldmVudGluZyBtb2R1bGUgdW5sb2FkaW5nIHdoaWxlIGR1bXBzIGFyZSBpbiBwcm9ncmVzcy4gVGhpcyBtb2RpZmllcyBnZW5lcmljIG5ldGxpbmsgY29udHJvbGxlciBsb2dpYyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiAtIFBlcmZlY3QsIHRoaXMgaXMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbi4KKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlIC0gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIHBhdGNoIGFuZCB0aGUgcG90ZW50aWFsIGZvciBtb2R1bGUtcmVsYXRlZCBpc3N1ZXMsIHRoaXMgaXMgYWJzb2x1dGVseSB0aGUgY29ycmVjdCBhc3Nlc3NtZW50LgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCBpcyBzYWZlIHRvIHVzZSB0aGlzIHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3lfc3RhcnQmIzM0OywKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5X2RvbmUmIzM0OywKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbW9kdWxlIHJlZmVyZW5jZSBob2xkaW5nICh0cnlfbW9kdWxlX2dldC9tb2R1bGVfcHV0KSBmb3IgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBwb2xpY3kgZHVtcHMgaW4gY3RybF9kdW1wcG9saWN5X3N0YXJ0KCkgYW5kIGN0cmxfZHVtcHBvbGljeV9kb25lKCksIGFsdGVyaW5nIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZXJyb3IgY2xlYW51cCBwYXRocyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBHZW5lcmljIE5ldGxpbmsgQ1RSTF9DTURfR0VUUE9MSUNZLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3lfc3RhcnQmIzM0OywKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5X2RvbmUmIzM0OywKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbW9kdWxlIHJlZmVyZW5jZSBob2xkaW5nICh0cnlfbW9kdWxlX2dldC9tb2R1bGVfcHV0KSBmb3IgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBwb2xpY3kgZHVtcHMgaW4gY3RybF9kdW1wcG9saWN5X3N0YXJ0KCkgYW5kIGN0cmxfZHVtcHBvbGljeV9kb25lKCksIGFsdGVyaW5nIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZXJyb3IgY2xlYW51cCBwYXRocyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBHZW5lcmljIE5ldGxpbmsgQ1RSTF9DTURfR0VUUE9MSUNZLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIChgdHJ5X21vZHVsZV9nZXQoKWAgLyBgbW9kdWxlX3B1dCgpYCkgZHVyaW5nIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcCBvcGVyYXRpb25zIChgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYCkuIFRoaXMgcHJldmVudHMgdGhlIG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIGZhbWlseSBmcm9tIGJlaW5nIHVubG9hZGVkIHdoaWxlIGEgcG9saWN5IGR1bXAgaXMgaW4gcHJvZ3Jlc3MuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBtb2R1bGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgLyBpbnZhbGlkIGNvZGUgb3IgZGF0YSBhY2Nlc3Mgb24gbW9kdWxlIHVubG9hZCksIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGRhdGEgZXhwb3N1cmUsIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUzN2Y5Mjc4NWY2OTc4ZDNhZTExZTczMzJlMzRjYjIwM2Q2OWFiZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAyOjA1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCAwZGEzOWVhZWQyNTVmLi40MWQzNzQ0MmYxODY4IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtMTUxMyw2ICYjNDM7MTUxMyw3IEBAIHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7CiAJc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlOwogCWNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqcnQ7CiAJc3RydWN0IGdlbmxfb3BfaXRlciAqb3BfaXRlcjsKJiM0MzsJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdTMyIG9wOwogCXUxNiBmYW1faWQ7CiAJdTggZHVtcF9tYXA6MSwKQEAgLTE1NTUsNiAmIzQzOzE1NTYsOSBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJY3R4LSZndDtydCA9IHJ0OwomIzQzOwljdHgtJmd0O293bmVyID0gcnQtJmd0O21vZHVsZTsKJiM0MzsJaWYgKCF0cnlfbW9kdWxlX2dldChjdHgtJmd0O293bmVyKSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwogCiAJaWYgKHRiW0NUUkxfQVRUUl9PUF0pIHsKIAkJc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7CkBAIC0xNTY1LDcgJiM0MzsxNTY5LDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQllcnIgPSBnZW5sX2dldF9jbWRfYm90aChjdHgtJmd0O29wLCBydCwgJmFtcDtkb2l0LCAmYW1wO2R1bXApOwogCQlpZiAoZXJyKSB7CiAJCQlOTF9TRVRfQkFEX0FUVFIoY2ItJmd0O2V4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7Ci0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gZXJyX3B1dF9vd25lcjsKIAkJfQogCiAJCWlmIChkb2l0LnBvbGljeSkgewpAQCAtMTU4MywxNiAmIzQzOzE1ODcsMjAgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJCWdvdG8gZXJyX2ZyZWVfc3RhdGU7CiAJCX0KIAotCQlpZiAoIWN0eC0mZ3Q7c3RhdGUpCi0JCQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CQlpZiAoIWN0eC0mZ3Q7c3RhdGUpIHsKJiM0MzsJCQllcnIgPSAtRU5PREFUQTsKJiM0MzsJCQlnb3RvIGVycl9wdXRfb3duZXI7CiYjNDM7CQl9CiAKIAkJY3R4LSZndDtkdW1wX21hcCA9IDE7CiAJCXJldHVybiAwOwogCX0KIAogCWN0eC0mZ3Q7b3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtJmd0O29wX2l0ZXIpOwotCWlmICghY3R4LSZndDtvcF9pdGVyKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCFjdHgtJmd0O29wX2l0ZXIpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9wdXRfb3duZXI7CiYjNDM7CX0KIAogCWdlbmxfb3BfaXRlcl9pbml0KHJ0LCBjdHgtJmd0O29wX2l0ZXIpOwogCWN0eC0mZ3Q7ZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtJmd0O29wX2l0ZXIpOwpAQCAtMTYyNCw2ICYjNDM7MTYzMiw4IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAluZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LSZndDtzdGF0ZSk7CiBlcnJfZnJlZV9vcF9pdGVyOgogCWtmcmVlKGN0eC0mZ3Q7b3BfaXRlcik7CiYjNDM7ZXJyX3B1dF9vd25lcjoKJiM0MzsJbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzYwLDYgJiM0MzsxNzcwLDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAKIAlrZnJlZShjdHgtJmd0O29wX2l0ZXIpOwogCW5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtJmd0O3N0YXRlKTsKJiM0MzsJbW9kdWxlX3B1dChjdHgtJmd0O293bmVyKTsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdlbmV0bGluayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCBpbnN0cnVjdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhhdCBzcGVjaWZpYyBtb2RpZmljYXRpb24gaW4gYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYC4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIG5ldyBmaWVsZCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eGA6IGBzdHJ1Y3QgbW9kdWxlICpvd25lcjtgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIG1vZHVsZSBvd25lcnNoaXAgaXMgYmVpbmcgdHJhY2tlZCB3aXRoaW4gdGhlIGR1bXAgcG9saWN5IGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW50byBob3cgdGhhdCYjMzk7cyBiZWluZyBoYW5kbGVkLgoKU3BlY2lmaWNhbGx5LCBpbiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCwgSSBzZWUgYGN0eC0mZ3Q7b3duZXIgPSBydC0mZ3Q7bW9kdWxlO2Agd2hpY2ggYXNzaWducyB0aGUgbW9kdWxlIGZyb20gYHJ0YCB0byB0aGUgY29udGV4dCYjMzk7cyBvd25lci4gVGhlbiwgY3J1Y2lhbGx5LCB0aGVyZSYjMzk7cyBhIGB0cnlfbW9kdWxlX2dldChjdHgtJmd0O293bmVyKWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBtYW5hZ2UgbW9kdWxlIHJlZmVyZW5jZSBjb3VudHMuIFRoZSBlcnJvciBwYXRocyBpbW1lZGlhdGVseSBjYWxsIGBtb2R1bGVfcHV0YCBvbiB0aGUgb3duZXIgd2l0aCBhIGBnb3RvIGVycl9wdXRfb3duZXI7YCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBiZWluZyByZWxlYXNlZCBpbiBjYXNlIG9mIGFuIGVhcmx5IHJldHVybi4gVGhpcyBpcyB0ZXh0Ym9vayByZWZlcmVuY2UgY291bnRpbmcgbG9naWMsIHByb3RlY3RpbmcgdGhlIG1vZHVsZSBpZiB0aGUgZHVtcCBwb2xpY3kgZXJyb3JzLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGN0cmxfZHVtcHBvbGljeV9kb25lYCwgd2hlcmUgYG1vZHVsZV9wdXQoY3R4LSZndDtvd25lcilgIGlzIGNhbGxlZC4gVGhhdCYjMzk7cyBjb25maXJtYXRpb246IHRoZSBgb3duZXJgIGZpZWxkIGlzIHVzZWQgdG8gY29ycmVjdGx5IGRlY3JlbWVudCB0aGUgbW9kdWxlJiMzOTtzIHJlZmVyZW5jZSBjb3VudCB3aGVuIHRoZSBwb2xpY3kgaXMgY29tcGxldGUuIEl0IGFwcGVhcnMgdGhlIHN5c3RlbSBpcyBtYWtpbmcgc3VyZSB0aGF0IGlmIGEgYHRyeV9tb2R1bGVfZ2V0YCBzdWNjZWVkcyBpbiBgc3RhcnRgLCB0aGUgYG1vZHVsZV9wdXRgIG11c3Qgb2NjdXIuIFRoaXMgZW5zdXJlcyB0aGF0IGEgYG1vZHVsZWAgaXNuJiMzOTt0IHVubG9hZGVkIHdoaWxlIHRoZSBkdW1wIHBvbGljeSBpcyBhY3RpdmUuCgpOb3csIEkgbmVlZCB0byBicm9hZGVuIG15IHNjb3BlLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIHJlc3Qgb2YgdGhlIGBjdHJsX2R1bXBwb2xpY3lfKmAgZnVuY3Rpb25zIGFuZCBob3cgYGN0eGAgaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgYW5kIHVzZWQuIEkmIzM5O2xsIGdvIGJhY2sgdG8gYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYCBhbmQgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBmcm9tIGxpbmUgMTUxMyB0byAxNzcwIHRvIHNlZSBob3cgdGhlIGNvbnRleHQgaXMgdXNlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBjb21wbGV0ZSBhbmQgcm9idXN0IGltcGxlbWVudGF0aW9uIGFuZCBub3QgaGF2ZSBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgbGlmZWN5Y2xlIG9mIHRoaXMgY29udGV4dCB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUxMDpcdH1cbjE1MTE6XHRcbjE1MTI6XHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xuMTUxMzpcdFx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xuMTUxNDpcdFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcbjE1MTU6XHRcdHN0cnVjdCBnZW5sX29wX2l0ZXIgKm9wX2l0ZXI7XG4xNTE2Olx0XHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbjE1MTc6XHRcdHUzMiBvcDtcbjE1MTg6XHRcdHUxNiBmYW1faWQ7XG4xNTE5Olx0XHR1OCBkdW1wX21hcDoxLFxuMTUyMDpcdFx0ICAgc2luZ2xlX29wOjE7XG4xNTIxOlx0fTtcbjE1MjI6XHRcbjE1MjM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RybF9wb2xpY3lfcG9saWN5W10gPSB7XG4xNTI0Olx0XHRbQ1RSTF9BVFRSX0ZBTUlMWV9JRF1cdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcbjE1MjU6XHRcdFtDVFJMX0FUVFJfRkFNSUxZX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyxcbjE1MjY6XHRcdFx0XHRcdCAgICAubGVuID0gR0VOTF9OQU1TSVogLSAxIH0sXG4xNTI3Olx0XHRbQ1RSTF9BVFRSX09QXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xNTI4Olx0fTtcbjE1Mjk6XHRcbjE1MzA6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4xNTMxOlx0e1xuMTUzMjpcdFx0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcbjE1MzM6XHRcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4xNTM0Olx0XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4xNTM1Olx0XHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xuMTUzNjpcdFx0c3RydWN0IGdlbmxfb3BfaXRlciBpO1xuMTUzNzpcdFx0aW50IGVycjtcbjE1Mzg6XHRcbjE1Mzk6XHRcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXHUwMDNlIHNpemVvZihjYi1cdTAwM2VjdHgpKTtcbjE1NDA6XHRcbjE1NDE6XHRcdGlmICghdGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0gXHUwMDI2XHUwMDI2ICF0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKVxuMTU0MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1NDM6XHRcbjE1NDQ6XHRcdGlmICh0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSkge1xuMTU0NTpcdFx0XHRjdHgtXHUwMDNlZmFtX2lkID0gbmxhX2dldF91MTYodGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pO1xuMTU0NjpcdFx0fSBlbHNlIHtcbjE1NDc6XHRcdFx0cnQgPSBnZW5sX2ZhbWlseV9maW5kX2J5bmFtZShcbjE1NDg6XHRcdFx0XHRubGFfZGF0YSh0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKSk7XG4xNTQ5Olx0XHRcdGlmICghcnQpXG4xNTUwOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTUxOlx0XHRcdGN0eC1cdTAwM2VmYW1faWQgPSBydC1cdTAwM2VpZDtcbjE1NTI6XHRcdH1cbjE1NTM6XHRcbjE1NTQ6XHRcdHJ0ID0gZ2VubF9mYW1pbHlfZmluZF9ieWlkKGN0eC1cdTAwM2VmYW1faWQpO1xuMTU1NTpcdFx0aWYgKCFydClcbjE1NTY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTU3Olx0XG4xNTU4Olx0XHRjdHgtXHUwMDNlcnQgPSBydDtcbjE1NTk6XHRcdGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtcbjE1NjA6XHRcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbjE1NjE6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTYyOlx0XG4xNTYzOlx0XHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xuMTU2NDpcdFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcDtcbjE1NjU6XHRcbjE1NjY6XHRcdFx0Y3R4LVx1MDAzZXNpbmdsZV9vcCA9IHRydWU7XG4xNTY3Olx0XHRcdGN0eC1cdTAwM2VvcCA9IG5sYV9nZXRfdTMyKHRiW0NUUkxfQVRUUl9PUF0pO1xuMTU2ODpcdFxuMTU2OTpcdFx0XHRlcnIgPSBnZW5sX2dldF9jbWRfYm90aChjdHgtXHUwMDNlb3AsIHJ0LCBcdTAwMjZkb2l0LCBcdTAwMjZkdW1wKTtcbjE1NzA6XHRcdFx0aWYgKGVycikge1xuMTU3MTpcdFx0XHRcdE5MX1NFVF9CQURfQVRUUihjYi1cdTAwM2VleHRhY2ssIHRiW0NUUkxfQVRUUl9PUF0pO1xuMTU3MjpcdFx0XHRcdGdvdG8gZXJyX3B1dF9vd25lcjtcbjE1NzM6XHRcdFx0fVxuMTU3NDpcdFxuMTU3NTpcdFx0XHRpZiAoZG9pdC5wb2xpY3kpIHtcbjE1NzY6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTU3NzpcdFx0XHRcdFx0XHRcdFx0ICAgICBkb2l0LnBvbGljeSxcbjE1Nzg6XHRcdFx0XHRcdFx0XHRcdCAgICAgZG9pdC5tYXhhdHRyKTtcbjE1Nzk6XHRcdFx0XHRpZiAoZXJyKVxuMTU4MDpcdFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbjE1ODE6XHRcdFx0fVxuMTU4MjpcdFx0XHRpZiAoZHVtcC5wb2xpY3kpIHtcbjE1ODM6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTU4NDpcdFx0XHRcdFx0XHRcdFx0ICAgICBkdW1wLnBvbGljeSxcbjE1ODU6XHRcdFx0XHRcdFx0XHRcdCAgICAgZHVtcC5tYXhhdHRyKTtcbjE1ODY6XHRcdFx0XHRpZiAoZXJyKVxuMTU4NzpcdFx0XHRcdFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcbjE1ODg6XHRcdFx0fVxuMTU4OTpcdFxuMTU5MDpcdFx0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSkge1xuMTU5MTpcdFx0XHRcdGVyciA9IC1FTk9EQVRBO1xuMTU5MjpcdFx0XHRcdGdvdG8gZXJyX3B1dF9vd25lcjtcbjE1OTM6XHRcdFx0fVxuMTU5NDpcdFxuMTU5NTpcdFx0XHRjdHgtXHUwMDNlZHVtcF9tYXAgPSAxO1xuMTU5NjpcdFx0XHRyZXR1cm4gMDtcbjE1OTc6XHRcdH1cbjE1OTg6XHRcbjE1OTk6XHRcdGN0eC1cdTAwM2VvcF9pdGVyID0ga21hbGxvY19vYmooKmN0eC1cdTAwM2VvcF9pdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg1NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGBjdHJsX2R1bXBwb2xpY3lfKmAgZnVuY3Rpb25zLiBMZXQgbWUgcmV2aWV3IGxpbmVzIDE2MDAtMTc3NSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBlbnRpcmUgY29udGV4dC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGNvbnRyb2wgcGxhbmUgYW5kIGRhdGEgcGxhbmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgaW4gdGhlIGxvZ2ljLiBJIG5lZWQgdG8gb2JzZXJ2ZSBob3cgdGhlIGNvZGUgbWFuYWdlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgY29udHJvbCBwb2xpY3kgcHJpbWl0aXZlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyZmFjZSB3aXRoIHRoZSBwb2xpY3kgbWFuYWdlbWVudCBjb3JlIGFuZCB3aGF0IGtpbmQgb2YgZGF0YSB0aGV5JiMzOTtyZSBkdW1waW5nIG9yIHVzaW5nIHRvIGFkanVzdCB0aGUgY29udHJvbCBwcm9jZXNzLiBBbnkgZGVzaWduIGNob2ljZXMgcmVsYXRlZCB0byB0aGUgZWZmaWNpZW5jeSBvciBzZWN1cml0eSBvZiB0aGUgY29udHJvbCBwcm9jZXNzIG5lZWQgc3BlY2lhbCBhdHRlbnRpb24uIEFmdGVyIHRoaXMgcmV2aWV3LCBteSB3b3JraW5nIGh5cG90aGVzaXMgaXMgdG8gaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgb3B0aW1pemF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MDA6XHRcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbjE2MDE6XHRcdFx0ZXJyID0gLUVOT01FTTtcbjE2MDI6XHRcdFx0Z290byBlcnJfcHV0X293bmVyO1xuMTYwMzpcdFx0fVxuMTYwNDpcdFxuMTYwNTpcdFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDY6XHRcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbjE2MDc6XHRcbjE2MDg6XHRcdGZvciAoZ2VubF9vcF9pdGVyX2luaXQocnQsIFx1MDAyNmkpOyBnZW5sX29wX2l0ZXJfbmV4dChcdTAwMjZpKTsgKSB7XG4xNjA5Olx0XHRcdGlmIChpLmRvaXQucG9saWN5KSB7XG4xNjEwOlx0XHRcdFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFx1MDAyNmN0eC1cdTAwM2VzdGF0ZSxcbjE2MTE6XHRcdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0LnBvbGljeSxcbjE2MTI6XHRcdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0Lm1heGF0dHIpO1xuMTYxMzpcdFx0XHRcdGlmIChlcnIpXG4xNjE0Olx0XHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuMTYxNTpcdFx0XHR9XG4xNjE2Olx0XHRcdGlmIChpLmR1bXBpdC5wb2xpY3kpIHtcbjE2MTc6XHRcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxuMTYxODpcdFx0XHRcdFx0XHRcdFx0ICAgICBpLmR1bXBpdC5wb2xpY3ksXG4xNjE5Olx0XHRcdFx0XHRcdFx0XHQgICAgIGkuZHVtcGl0Lm1heGF0dHIpO1xuMTYyMDpcdFx0XHRcdGlmIChlcnIpXG4xNjIxOlx0XHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuMTYyMjpcdFx0XHR9XG4xNjIzOlx0XHR9XG4xNjI0Olx0XG4xNjI1Olx0XHRpZiAoIWN0eC1cdTAwM2VzdGF0ZSkge1xuMTYyNjpcdFx0XHRlcnIgPSAtRU5PREFUQTtcbjE2Mjc6XHRcdFx0Z290byBlcnJfZnJlZV9vcF9pdGVyO1xuMTYyODpcdFx0fVxuMTYyOTpcdFx0cmV0dXJuIDA7XG4xNjMwOlx0XG4xNjMxOlx0ZXJyX2ZyZWVfc3RhdGU6XG4xNjMyOlx0XHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbjE2MzM6XHRlcnJfZnJlZV9vcF9pdGVyOlxuMTYzNDpcdFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuMTYzNTpcdGVycl9wdXRfb3duZXI6XG4xNjM2Olx0XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4xNjM3Olx0XHRyZXR1cm4gZXJyO1xuMTYzODpcdH1cbjE2Mzk6XHRcbjE2NDA6XHRzdGF0aWMgdm9pZCAqY3RybF9kdW1wcG9saWN5X3ByZXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE2NDE6XHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuMTY0MjpcdHtcbjE2NDM6XHRcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4xNjQ0Olx0XHR2b2lkICpoZHI7XG4xNjQ1Olx0XG4xNjQ2Olx0XHRoZHIgPSBnZW5sbXNnX3B1dChza2IsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4xNjQ3Olx0XHRcdFx0ICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBcdTAwMjZnZW5sX2N0cmwsXG4xNjQ4Olx0XHRcdFx0ICBOTE1fRl9NVUxUSSwgQ1RSTF9DTURfR0VUUE9MSUNZKTtcbjE2NDk6XHRcdGlmICghaGRyKVxuMTY1MDpcdFx0XHRyZXR1cm4gTlVMTDtcbjE2NTE6XHRcbjE2NTI6XHRcdGlmIChubGFfcHV0X3UxNihza2IsIENUUkxfQVRUUl9GQU1JTFlfSUQsIGN0eC1cdTAwM2VmYW1faWQpKVxuMTY1MzpcdFx0XHRyZXR1cm4gTlVMTDtcbjE2NTQ6XHRcbjE2NTU6XHRcdHJldHVybiBoZHI7XG4xNjU2Olx0fVxuMTY1NzpcdFxuMTY1ODpcdHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3B1dF9vcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTY1OTpcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4xNjYwOlx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqZG9pdCxcbjE2NjE6XHRcdFx0XHRcdCAgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpkdW1waXQpXG4xNjYyOlx0e1xuMTY2MzpcdFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbjE2NjQ6XHRcdHN0cnVjdCBubGF0dHIgKm5lc3RfcG9sLCAqbmVzdF9vcDtcbjE2NjU6XHRcdHZvaWQgKmhkcjtcbjE2NjY6XHRcdGludCBpZHg7XG4xNjY3Olx0XG4xNjY4Olx0XHQvKiBza2lwIGlmIHdlIGhhdmUgbm90aGluZyB0byBzaG93ICovXG4xNjY5Olx0XHRpZiAoIWRvaXQtXHUwMDNlcG9saWN5IFx1MDAyNlx1MDAyNiAhZHVtcGl0LVx1MDAzZXBvbGljeSlcbjE2NzA6XHRcdFx0cmV0dXJuIDA7XG4xNjcxOlx0XG4xNjcyOlx0XHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcbjE2NzM6XHRcdGlmICghaGRyKVxuMTY3NDpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xNjc1Olx0XG4xNjc2Olx0XHRuZXN0X3BvbCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgQ1RSTF9BVFRSX09QX1BPTElDWSk7XG4xNjc3Olx0XHRpZiAoIW5lc3RfcG9sKVxuMTY3ODpcdFx0XHRnb3RvIGVycjtcbjE2Nzk6XHRcbjE2ODA6XHRcdG5lc3Rfb3AgPSBubGFfbmVzdF9zdGFydChza2IsIGRvaXQtXHUwMDNlY21kKTtcbjE2ODE6XHRcdGlmICghbmVzdF9vcClcbjE2ODI6XHRcdFx0Z290byBlcnI7XG4xNjgzOlx0XG4xNjg0Olx0XHRpZiAoZG9pdC1cdTAwM2Vwb2xpY3kpIHtcbjE2ODU6XHRcdFx0aWR4ID0gbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChjdHgtXHUwMDNlc3RhdGUsXG4xNjg2Olx0XHRcdFx0XHRcdFx0XHQgZG9pdC1cdTAwM2Vwb2xpY3ksXG4xNjg3Olx0XHRcdFx0XHRcdFx0XHQgZG9pdC1cdTAwM2VtYXhhdHRyKTtcbjE2ODg6XHRcbjE2ODk6XHRcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgQ1RSTF9BVFRSX1BPTElDWV9ETywgaWR4KSlcbjE2OTA6XHRcdFx0XHRnb3RvIGVycjtcbjE2OTE6XHRcdH1cbjE2OTI6XHRcdGlmIChkdW1waXQtXHUwMDNlcG9saWN5KSB7XG4xNjkzOlx0XHRcdGlkeCA9IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoY3R4LVx1MDAzZXN0YXRlLFxuMTY5NDpcdFx0XHRcdFx0XHRcdFx0IGR1bXBpdC1cdTAwM2Vwb2xpY3ksXG4xNjk1Olx0XHRcdFx0XHRcdFx0XHQgZHVtcGl0LVx1MDAzZW1heGF0dHIpO1xuMTY5NjpcdFxuMTY5NzpcdFx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBDVFJMX0FUVFJfUE9MSUNZX0RVTVAsIGlkeCkpXG4xNjk4Olx0XHRcdFx0Z290byBlcnI7XG4xNjk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBIaXN0b3JpY2FsIGBjdHJsX2R1bXBwb2xpY3lfKmAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdGhlIGBjdHJsX2R1bXBwb2xpY3lfKmAgZnVuY3Rpb25zLiBNeSB0aGlua2luZyBpcyB0byB6b29tIGluIG9uIHRoZSBwZXJpb2QgYmV0d2VlbiAxNzUwIGFuZCAxNzgwLiBUaGF0IHRpbWVmcmFtZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCYjMzk7cyBsaWtlbHkgdG8gcmV2ZWFsIHRoZSBldm9sdXRpb24gb2YgdGhlc2UgcG9saWNpZXMgZHVyaW5nIHRoZSBwZXJpb2Qgb2YuLi4gd2VsbCwgbGV0JiMzOTtzIGxlYXZlIGl0IGF0IHRoYXQuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IG1ham9yIHNoaWZ0cywgaW5ub3ZhdGl2ZSBpbXBsZW1lbnRhdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBzaWduaWZpY2FudCBsaW1pdGF0aW9ucyBpbiBob3cgdGhleSB3ZXJlIGRlZmluZWQgb3IgZXhlY3V0ZWQuIFRoaXMgd2luZG93IHNob3VsZCBwcm92aWRlIHN1ZmZpY2llbnQgY29udGV4dCB0byBidWlsZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdWJqZWN0LCBhbmQgSSYjMzk7bGwgc2VlIHdoYXQgaXQgdHVybnMgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NDA6XHRcbjE3NDE6XHRcdHdoaWxlIChuZXRsaW5rX3BvbGljeV9kdW1wX2xvb3AoY3R4LVx1MDAzZXN0YXRlKSkge1xuMTc0MjpcdFx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuMTc0MzpcdFxuMTc0NDpcdFx0XHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcbjE3NDU6XHRcdFx0aWYgKCFoZHIpXG4xNzQ2Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzQ3Olx0XG4xNzQ4Olx0XHRcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIENUUkxfQVRUUl9QT0xJQ1kpO1xuMTc0OTpcdFx0XHRpZiAoIW5lc3QpXG4xNzUwOlx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzUxOlx0XG4xNzUyOlx0XHRcdGlmIChuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHNrYiwgY3R4LVx1MDAzZXN0YXRlKSlcbjE3NTM6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE3NTQ6XHRcbjE3NTU6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4xNzU2Olx0XG4xNzU3Olx0XHRcdGdlbmxtc2dfZW5kKHNrYiwgaGRyKTtcbjE3NTg6XHRcdH1cbjE3NTk6XHRcbjE3NjA6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc2MTpcdFxuMTc2MjpcdG5sYV9wdXRfZmFpbHVyZTpcbjE3NjM6XHRcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcbjE3NjQ6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc2NTpcdH1cbjE3NjY6XHRcbjE3Njc6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjE3Njg6XHR7XG4xNzY5Olx0XHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuMTc3MDpcdFxuMTc3MTpcdFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuMTc3MjpcdFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cdTAwM2VzdGF0ZSk7XG4xNzczOlx0XHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4xNzc0Olx0XHRyZXR1cm4gMDtcbjE3NzU6XHR9XG4xNzc2Olx0XG4xNzc3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBnZW5sX2N0cmxfb3BzW10gPSB7XG4xNzc4Olx0XHR7XG4xNzc5Olx0XHRcdC5jbWRcdFx0PSBDVFJMX0NNRF9HRVRGQU1JTFksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODgKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogNjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGBydGAgZmFtaWx5IGFuZCBpdHMgcG9saWN5IGR1bXBzLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgYSBtb2R1bGUgYmVpbmcgdW5sb2FkZWQgd2hpbGUgaXRzIHBvbGljaWVzIGFyZSBhY3RpdmVseSBiZWluZyBkdW1wZWQgb3ZlciBtdWx0aXBsZSBuZXRsaW5rIGNhbGxzLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW0uCgpUaGUgcGF0Y2ggaXRzZWxmIGltcGxlbWVudHMgYSBmaXggYnkgbWFuYWdpbmcgdGhlIG1vZHVsZSYjMzk7cyBsaWZldGltZSBtb3JlIGNhcmVmdWxseSBkdXJpbmcgdGhlc2UgZHVtcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBlbnN1cmUgdGhlIG1vZHVsZSBpc24mIzM5O3QgdW5sb2FkZWQgd2hpbGUgdGhlIGR1bXAgaXMgb25nb2luZy4gU3BlY2lmaWNhbGx5LCBgY3RybF9kdW1wcG9saWN5X3N0YXJ0KClgIHVzZXMgYHRyeV9tb2R1bGVfZ2V0KClgIHRvIHRha2UgYSByZWZlcmVuY2Ugb24gYHJ0LSZndDttb2R1bGVgLCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lKClgIG9yIGFuIGVycm9yIGhhbmRsZXIgKGBlcnJfcHV0X293bmVyYCkgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSB1c2luZyBgbW9kdWxlX3B1dCgpYC4KCk5vdywgcmVnYXJkaW5nIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMsIHRoaXMgcmVhbGx5IGJvaWxzIGRvd24gdG8gbWVtb3J5IHNhZmV0eS4gTXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGV4cG9zZWQgb3IgZm9yIG90aGVyIEtNU0FOLWRldGVjdGFibGUgaXNzdWVzLgoKSGVyZSYjMzk7cyBteSByZWFzb25pbmcsIGdvaW5nIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhOgoKKiAgICoqQ3JpdGVyaW9uIDEgKEtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyk6KiogQWJzb2x1dGVseSBub3QuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGBjdHgtJmd0O293bmVyYCB3aXRoIHRoZSBtb2R1bGUgcG9pbnRlci4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuCiogICAqKkNyaXRlcmlvbiAyIChDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyk6KiogTm8uIFRoZSBsb2dpYyBhcm91bmQgYGN0eC0mZ3Q7b3duZXJgIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgZWl0aGVyIGluaXRpYWxpemVkIGFuZCB1c2VkLCBvciBpdCYjMzk7cyBub3QgaW5pdGlhbGl6ZWQgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkIGJlZm9yZSBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIHVzZWQuCiogICAqKkNyaXRlcmlvbiAzIChDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzKToqKiBOby4gVGhlIGBjdHgtJmd0O293bmVyYCBwb2ludGVyIGlzIGJlaW5nIGluaXRpYWxpemVkLCBpdCBpcyBhIHNpbmdsZSBwb2ludGVyIGFuZCBoYXMgY2xlYXIgaW5pdGlhbGlzYXRpb24gb3IgZWFybHkgcmV0dXJuLgoqICAgKipDcml0ZXJpb24gNCAoVW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzKToqKiBOby4gVGhpcyBwYXRjaCBzdHJpY3RseSBmb2N1c2VzIG9uIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZG9lc24mIzM5O3QgdG91Y2ggYnVmZmVyIG1hbmFnZW1lbnQgb3IgaW50cm9kdWNlIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gdW5pbml0aWFsaXplZCBsZW5ndGggb3Igb2Zmc2V0IHZhcmlhYmxlcy4KCkluIGVzc2VuY2UsIHRoaXMgaXMgYSBwdXJlIHJlZmNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IHBhdGNoIGRlc2lnbmVkIHRvIHByb3RlY3QgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSwgYSBwcm9ibGVtIHRoYXQgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycyBhcmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIGNvcnJlY3QgZGVjaXNpb24gaGVyZS4KClRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgKGB0cnlfbW9kdWxlX2dldCgpYCAvIGBtb2R1bGVfcHV0KClgKSBkdXJpbmcgR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1wIG9wZXJhdGlvbnMgKGBjdHJsX2R1bXBwb2xpY3lfc3RhcnRgIGFuZCBgY3RybF9kdW1wcG9saWN5X2RvbmVgKS4gVGhpcyBwcmV2ZW50cyB0aGUgbW9kdWxlIGltcGxlbWVudGluZyB0aGUgZmFtaWx5IGZyb20gYmVpbmcgdW5sb2FkZWQgd2hpbGUgYSBwb2xpY3kgZHVtcCBpcyBpbiBwcm9ncmVzcy5cblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIG1vZHVsZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAvIGludmFsaWQgY29kZSBvciBkYXRhIGFjY2VzcyBvbiBtb2R1bGUgdW5sb2FkKSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgZGF0YSBleHBvc3VyZSwgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyAoYHRyeV9tb2R1bGVfZ2V0KClgIC8gYG1vZHVsZV9wdXQoKWApIGR1cmluZyBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXAgb3BlcmF0aW9ucyAoYGN0cmxfZHVtcHBvbGljeV9zdGFydGAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZWApLiBUaGlzIHByZXZlbnRzIHRoZSBtb2R1bGUgaW1wbGVtZW50aW5nIHRoZSBmYW1pbHkgZnJvbSBiZWluZyB1bmxvYWRlZCB3aGlsZSBhIHBvbGljeSBkdW1wIGlzIGluIHByb2dyZXNzLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgbW9kdWxlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKHByZXZlbnRpbmcgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIC8gaW52YWxpZCBjb2RlIG9yIGRhdGEgYWNjZXNzIG9uIG1vZHVsZSB1bmxvYWQpLCB3aGljaCBpcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBkYXRhIGV4cG9zdXJlLCBwYWRkaW5nIGxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTowOC42NzM2NTU2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDM3NzU5NjU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lfc3RhcnRcIixcbiAgICBcImN0cmxfZHVtcHBvbGljeV9kb25lXCIsXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyAoYHRyeV9tb2R1bGVfZ2V0KClgIC8gYG1vZHVsZV9wdXQoKWApIGR1cmluZyBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXAgb3BlcmF0aW9ucyAoYGN0cmxfZHVtcHBvbGljeV9zdGFydGAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZWApLiBUaGlzIHByZXZlbnRzIHRoZSBtb2R1bGUgaW1wbGVtZW50aW5nIHRoZSBmYW1pbHkgZnJvbSBiZWluZyB1bmxvYWRlZCB3aGlsZSBhIHBvbGljeSBkdW1wIGlzIGluIHByb2dyZXNzLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBtb2R1bGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgLyBpbnZhbGlkIGNvZGUgb3IgZGF0YSBhY2Nlc3Mgb24gbW9kdWxlIHVubG9hZCksIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGRhdGEgZXhwb3N1cmUsIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBtb2R1bGUgcmVmZXJlbmNlIGhvbGRpbmcgKHRyeV9tb2R1bGVfZ2V0L21vZHVsZV9wdXQpIGZvciBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHBvbGljeSBkdW1wcyBpbiBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKSBhbmQgY3RybF9kdW1wcG9saWN5X2RvbmUoKSwgYWx0ZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBlcnJvciBjbGVhbnVwIHBhdGhzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEdlbmVyaWMgTmV0bGluayBDVFJMX0NNRF9HRVRQT0xJQ1kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjA4LjY3MzY2MjE3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNTc1MTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUzN2Y5Mjc4NWY2OTc4ZDNhZTExZTczMzJlMzRjYjIwM2Q2OWFiZmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwMjowNTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jXFxuaW5kZXggMGRhMzllYWVkMjU1Zi4uNDFkMzc0NDJmMTg2OCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuY1xcbisrKyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jXFxuQEAgLTE1MTMsNiArMTUxMyw3IEBAIHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7XFxuIFxcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZTtcXG4gXFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcXG4gXFx0c3RydWN0IGdlbmxfb3BfaXRlciAqb3BfaXRlcjtcXG4rXFx0c3RydWN0IG1vZHVsZSAqb3duZXI7XFxuIFxcdHUzMiBvcDtcXG4gXFx0dTE2IGZhbV9pZDtcXG4gXFx0dTggZHVtcF9tYXA6MSxcXG5AQCAtMTU1NSw2ICsxNTU2LDkgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGN0eC1cXHUwMDNlcnQgPSBydDtcXG4rXFx0Y3R4LVxcdTAwM2Vvd25lciA9IHJ0LVxcdTAwM2Vtb2R1bGU7XFxuK1xcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVxcdTAwM2Vvd25lcikpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4gXFx0aWYgKHRiW0NUUkxfQVRUUl9PUF0pIHtcXG4gXFx0XFx0c3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7XFxuQEAgLTE1NjUsNyArMTU2OSw3IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0ZXJyID0gZ2VubF9nZXRfY21kX2JvdGgoY3R4LVxcdTAwM2VvcCwgcnQsIFxcdTAwMjZkb2l0LCBcXHUwMDI2ZHVtcCk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0JBRF9BVFRSKGNiLVxcdTAwM2VleHRhY2ssIHRiW0NUUkxfQVRUUl9PUF0pO1xcbi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRnb3RvIGVycl9wdXRfb3duZXI7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChkb2l0LnBvbGljeSkge1xcbkBAIC0xNTgzLDE2ICsxNTg3LDIwIEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKCFjdHgtXFx1MDAzZXN0YXRlKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuK1xcdFxcdGlmICghY3R4LVxcdTAwM2VzdGF0ZSkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PREFUQTtcXG4rXFx0XFx0XFx0Z290byBlcnJfcHV0X293bmVyO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRjdHgtXFx1MDAzZWR1bXBfbWFwID0gMTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdGN0eC1cXHUwMDNlb3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbi1cXHRpZiAoIWN0eC1cXHUwMDNlb3BfaXRlcilcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGlmICghY3R4LVxcdTAwM2VvcF9pdGVyKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX3B1dF9vd25lcjtcXG4rXFx0fVxcbiBcXG4gXFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuIFxcdGN0eC1cXHUwMDNlZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbkBAIC0xNjI0LDYgKzE2MzIsOCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXFx1MDAzZXN0YXRlKTtcXG4gZXJyX2ZyZWVfb3BfaXRlcjpcXG4gXFx0a2ZyZWUoY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG4rZXJyX3B1dF9vd25lcjpcXG4rXFx0bW9kdWxlX3B1dChjdHgtXFx1MDAzZW93bmVyKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTc2MCw2ICsxNzcwLDcgQEAgc3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcbiBcXHRrZnJlZShjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbiBcXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdG1vZHVsZV9wdXQoY3R4LVxcdTAwM2Vvd25lcik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNToxMC40MTA4OTkxNDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxOTExNzkzNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0cmxfZHVtcHBvbGljeV9zdGFydFwiLFxuICAgIFwiY3RybF9kdW1wcG9saWN5X2RvbmVcIixcbiAgICBcImN0cmxfZHVtcHBvbGljeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbW9kdWxlIHJlZmVyZW5jZSBob2xkaW5nICh0cnlfbW9kdWxlX2dldC9tb2R1bGVfcHV0KSBmb3IgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBwb2xpY3kgZHVtcHMgaW4gY3RybF9kdW1wcG9saWN5X3N0YXJ0KCkgYW5kIGN0cmxfZHVtcHBvbGljeV9kb25lKCksIGFsdGVyaW5nIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZXJyb3IgY2xlYW51cCBwYXRocyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBHZW5lcmljIE5ldGxpbmsgQ1RSTF9DTURfR0VUUE9MSUNZLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMzdmOTI3ODVmNjk3OGQzYWUxMWU3MzMyZTM0Y2IyMDNkNjlhYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMjowNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbmluZGV4IDBkYTM5ZWFlZDI1NWYuLjQxZDM3NDQyZjE4NjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuY1xuKysrIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbkBAIC0xNTEzLDYgKzE1MTMsNyBAQCBzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xuIFx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xuIFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcbiBcdHN0cnVjdCBnZW5sX29wX2l0ZXIgKm9wX2l0ZXI7XG4rXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiBcdHUzMiBvcDtcbiBcdHUxNiBmYW1faWQ7XG4gXHR1OCBkdW1wX21hcDoxLFxuQEAgLTE1NTUsNiArMTU1Niw5IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRjdHgtXHUwMDNlcnQgPSBydDtcbitcdGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtcbitcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xuIFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcDtcbkBAIC0xNTY1LDcgKzE1NjksNyBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdGVyciA9IGdlbmxfZ2V0X2NtZF9ib3RoKGN0eC1cdTAwM2VvcCwgcnQsIFx1MDAyNmRvaXQsIFx1MDAyNmR1bXApO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGNiLVx1MDAzZWV4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7XG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGRvaXQucG9saWN5KSB7XG5AQCAtMTU4MywxNiArMTU4NywyMCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuIFx0XHR9XG4gXG4tXHRcdGlmICghY3R4LVx1MDAzZXN0YXRlKVxuLVx0XHRcdHJldHVybiAtRU5PREFUQTtcbitcdFx0aWYgKCFjdHgtXHUwMDNlc3RhdGUpIHtcbitcdFx0XHRlcnIgPSAtRU5PREFUQTtcbitcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4rXHRcdH1cbiBcbiBcdFx0Y3R4LVx1MDAzZWR1bXBfbWFwID0gMTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRjdHgtXHUwMDNlb3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtXHUwMDNlb3BfaXRlcik7XG4tXHRpZiAoIWN0eC1cdTAwM2VvcF9pdGVyKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfcHV0X293bmVyO1xuK1x0fVxuIFxuIFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbkBAIC0xNjI0LDYgKzE2MzIsOCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbiBlcnJfZnJlZV9vcF9pdGVyOlxuIFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuK2Vycl9wdXRfb3duZXI6XG4rXHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzYwLDYgKzE3NzAsNyBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcbiBcdGtmcmVlKGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXHUwMDNlc3RhdGUpO1xuK1x0bW9kdWxlX3B1dChjdHgtXHUwMDNlb3duZXIpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MTAuNDEwOTAxODkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA1OTg3NDk0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5sIFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBMb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgLiBSaWdodCwgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBjaGFuZ2UgaXMgYWN0dWFsbHkgKmRvaW5nKi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYC4gQWgsIEkgc2VlLCBpdCdzIGFib3V0IG1vZHVsZSByZWZlcmVuY2UgbWFuYWdlbWVudCBkdXJpbmcgcG9saWN5IGR1bXBzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gYENUUkxfQ01EX0dFVFBPTElDWWAuIEl0IGFwcGVhcnMgdGhleSdyZSBhZGRpbmcgYGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtgIGFuZCBpbXBsZW1lbnRpbmcgYHRyeV9tb2R1bGVfZ2V0KClgIGFuZCBgbW9kdWxlX3B1dCgpYCBjYWxscy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciB0cmFja2luZyBtb2R1bGUgdXNhZ2UgdG8gcHJldmVudCB1bmxvYWQgaXNzdWVzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggcmVzb3VyY2VzIG9yIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBvdXRsaXZlIHRoZSByZXF1ZXN0IGl0c2VsZiBkdXJpbmcgcG9saWN5IGR1bXBzIGluIEdlbmVyaWMgTmV0bGluay5cblxuSW50ZXJlc3RpbmcsIHRoaXMgaXMgcHJvYmFibHkgdG8gYWRkcmVzcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHJlZmVyZW5jZSBjb3VudCBlcnJvcnMuIExldCdzIG1ha2Ugc3VyZSBvdXIgY29udGV4dCBpcyBpbiBvcmRlciwgSSdsbCBydW4gdGhlIGFwcHJvcHJpYXRlIHRvb2xzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MjEuMDA5NjU0MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE1Mjc0NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0cmxfZHVtcHBvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0bGluay9nZW5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNTIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdHJsX3BvbGljeV9wb2xpY3lbXSA9IHtcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1MjktXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTUzMDpzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTUzMS17XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjM5LVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2NDA6c3RhdGljIHZvaWQgKmN0cmxfZHVtcHBvbGljeV9wcmVwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY0MS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NTctXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY1ODpzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjU5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY3MS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNjcyOlxcdGhkciA9IGN0cmxfZHVtcHBvbGljeV9wcmVwKHNrYiwgY2IpO1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NzMtXFx0aWYgKCFoZHIpXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzEwLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE3MTE6c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MTIte1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTcyMy1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzI0OlxcdFxcdFxcdGlmIChjdHJsX2R1bXBwb2xpY3lfcHV0X29wKHNrYiwgY2IsIFxcdTAwMjZkb2l0LCBcXHUwMDI2ZHVtcGl0KSlcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzI1LVxcdFxcdFxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MzEtXFx0XFx0d2hpbGUgKGN0eC1cXHUwMDNlZHVtcF9tYXApIHtcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzMyOlxcdFxcdFxcdGlmIChjdHJsX2R1bXBwb2xpY3lfcHV0X29wKHNrYiwgY2IsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTczMy1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y3R4LVxcdTAwM2VvcF9pdGVyLVxcdTAwM2Vkb2l0LFxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc0My1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzQ0OlxcdFxcdGhkciA9IGN0cmxfZHVtcHBvbGljeV9wcmVwKHNrYiwgY2IpO1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NDUtXFx0XFx0aWYgKCFoZHIpXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzY2LVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE3Njc6c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc2OC17XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNzc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZ2VubF9jdHJsX29wc1tdID0ge1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc5Ny1cXHRcXHQubWF4YXR0clxcdD0gQVJSQVlfU0laRShjdHJsX3BvbGljeV9wb2xpY3kpIC0gMSxcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzk4OlxcdFxcdC5zdGFydFxcdFxcdD0gY3RybF9kdW1wcG9saWN5X3N0YXJ0LFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE3OTk6XFx0XFx0LmR1bXBpdFxcdFxcdD0gY3RybF9kdW1wcG9saWN5LFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE4MDA6XFx0XFx0LmRvbmVcXHRcXHQ9IGN0cmxfZHVtcHBvbGljeV9kb25lLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE4MDEtXFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX0NNRF9DQVBfRFVNUCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MjEuOTI0OTMzMjY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyNTU2MTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGdlbmV0bGluay5jKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpZyBpbnRvIHRoZSBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGVzdGFibGlzaCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGVjb3N5c3RlbSBvZiB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMsIHRvIGdyYXNwIGhvdyB0aGlzIHNwZWNpZmljIGZpbGUgZml0cyBpbnRvIHRoZSBsYXJnZXIgZ2VuZXRsaW5rIGZyYW1ld29yay4gSSB3YW50IHRvIHNlZSB0aGUga2V5IGVudHJ5IHBvaW50cywgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBmbG93LiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24sIG1lc3NhZ2Ugcm91dGluZywgYW5kIHRoZSBjb3JlIGludGVyYWN0aW9uIGxvZ2ljLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGNsYXJpZnkgdGhlIHB1cnBvc2Ugb2YgKnRoaXMqIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNToyMy43NTA0OTgyODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUzMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUzMDpcXHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMTUzMTpcXHR7XFxuMTUzMjpcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbjE1MzM6XFx0XFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuMTUzNDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVxcdTAwM2VpbmZvLmF0dHJzO1xcbjE1MzU6XFx0XFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcXG4xNTM2OlxcdFxcdHN0cnVjdCBnZW5sX29wX2l0ZXIgaTtcXG4xNTM3OlxcdFxcdGludCBlcnI7XFxuMTUzODpcXHRcXG4xNTM5OlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXFx1MDAzZSBzaXplb2YoY2ItXFx1MDAzZWN0eCkpO1xcbjE1NDA6XFx0XFxuMTU0MTpcXHRcXHRpZiAoIXRiW0NUUkxfQVRUUl9GQU1JTFlfSURdIFxcdTAwMjZcXHUwMDI2ICF0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKVxcbjE1NDI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU0MzpcXHRcXG4xNTQ0OlxcdFxcdGlmICh0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSkge1xcbjE1NDU6XFx0XFx0XFx0Y3R4LVxcdTAwM2VmYW1faWQgPSBubGFfZ2V0X3UxNih0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSk7XFxuMTU0NjpcXHRcXHR9IGVsc2Uge1xcbjE1NDc6XFx0XFx0XFx0cnQgPSBnZW5sX2ZhbWlseV9maW5kX2J5bmFtZShcXG4xNTQ4OlxcdFxcdFxcdFxcdG5sYV9kYXRhKHRiW0NUUkxfQVRUUl9GQU1JTFlfTkFNRV0pKTtcXG4xNTQ5OlxcdFxcdFxcdGlmICghcnQpXFxuMTU1MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xNTUxOlxcdFxcdFxcdGN0eC1cXHUwMDNlZmFtX2lkID0gcnQtXFx1MDAzZWlkO1xcbjE1NTI6XFx0XFx0fVxcbjE1NTM6XFx0XFxuMTU1NDpcXHRcXHRydCA9IGdlbmxfZmFtaWx5X2ZpbmRfYnlpZChjdHgtXFx1MDAzZWZhbV9pZCk7XFxuMTU1NTpcXHRcXHRpZiAoIXJ0KVxcbjE1NTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTU1NzpcXHRcXG4xNTU4OlxcdFxcdGN0eC1cXHUwMDNlcnQgPSBydDtcXG4xNTU5OlxcdFxcdGN0eC1cXHUwMDNlb3duZXIgPSBydC1cXHUwMDNlbW9kdWxlO1xcbjE1NjA6XFx0XFx0aWYgKCF0cnlfbW9kdWxlX2dldChjdHgtXFx1MDAzZW93bmVyKSlcXG4xNTYxOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE1NjI6XFx0XFxuMTU2MzpcXHRcXHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xcbjE1NjQ6XFx0XFx0XFx0c3RydWN0IGdlbmxfc3BsaXRfb3BzIGRvaXQsIGR1bXA7XFxuMTU2NTpcXHRcXG4xNTY2OlxcdFxcdFxcdGN0eC1cXHUwMDNlc2luZ2xlX29wID0gdHJ1ZTtcXG4xNTY3OlxcdFxcdFxcdGN0eC1cXHUwMDNlb3AgPSBubGFfZ2V0X3UzMih0YltDVFJMX0FUVFJfT1BdKTtcXG4xNTY4OlxcdFxcbjE1Njk6XFx0XFx0XFx0ZXJyID0gZ2VubF9nZXRfY21kX2JvdGgoY3R4LVxcdTAwM2VvcCwgcnQsIFxcdTAwMjZkb2l0LCBcXHUwMDI2ZHVtcCk7XFxuMTU3MDpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMTU3MTpcXHRcXHRcXHRcXHROTF9TRVRfQkFEX0FUVFIoY2ItXFx1MDAzZWV4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7XFxuMTU3MjpcXHRcXHRcXHRcXHRnb3RvIGVycl9wdXRfb3duZXI7XFxuMTU3MzpcXHRcXHRcXHR9XFxuMTU3NDpcXHRcXG4xNTc1OlxcdFxcdFxcdGlmIChkb2l0LnBvbGljeSkge1xcbjE1NzY6XFx0XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbjE1Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkb2l0LnBvbGljeSxcXG4xNTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZG9pdC5tYXhhdHRyKTtcXG4xNTc5OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTU4MDpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3N0YXRlO1xcbjE1ODE6XFx0XFx0XFx0fVxcbjE1ODI6XFx0XFx0XFx0aWYgKGR1bXAucG9saWN5KSB7XFxuMTU4MzpcXHRcXHRcXHRcXHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXFx1MDAyNmN0eC1cXHUwMDNlc3RhdGUsXFxuMTU4NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGR1bXAucG9saWN5LFxcbjE1ODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkdW1wLm1heGF0dHIpO1xcbjE1ODY6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4xNTg3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfc3RhdGU7XFxuMTU4ODpcXHRcXHRcXHR9XFxuMTU4OTpcXHRcXG4xNTkwOlxcdFxcdFxcdGlmICghY3R4LVxcdTAwM2VzdGF0ZSkge1xcbjE1OTE6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0RBVEE7XFxuMTU5MjpcXHRcXHRcXHRcXHRnb3RvIGVycl9wdXRfb3duZXI7XFxuMTU5MzpcXHRcXHRcXHR9XFxuMTU5NDpcXHRcXG4xNTk1OlxcdFxcdFxcdGN0eC1cXHUwMDNlZHVtcF9tYXAgPSAxO1xcbjE1OTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTU5NzpcXHRcXHR9XFxuMTU5ODpcXHRcXG4xNTk5OlxcdFxcdGN0eC1cXHUwMDNlb3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbjE2MDA6XFx0XFx0aWYgKCFjdHgtXFx1MDAzZW9wX2l0ZXIpIHtcXG4xNjAxOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMTYwMjpcXHRcXHRcXHRnb3RvIGVycl9wdXRfb3duZXI7XFxuMTYwMzpcXHRcXHR9XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdGdlbmxfb3BfaXRlcl9pbml0KHJ0LCBjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbjE2MDY6XFx0XFx0Y3R4LVxcdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuMTYwNzpcXHRcXG4xNjA4OlxcdFxcdGZvciAoZ2VubF9vcF9pdGVyX2luaXQocnQsIFxcdTAwMjZpKTsgZ2VubF9vcF9pdGVyX25leHQoXFx1MDAyNmkpOyApIHtcXG4xNjA5OlxcdFxcdFxcdGlmIChpLmRvaXQucG9saWN5KSB7XFxuMTYxMDpcXHRcXHRcXHRcXHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXFx1MDAyNmN0eC1cXHUwMDNlc3RhdGUsXFxuMTYxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGkuZG9pdC5wb2xpY3ksXFxuMTYxMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGkuZG9pdC5tYXhhdHRyKTtcXG4xNjEzOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTYxNDpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3N0YXRlO1xcbjE2MTU6XFx0XFx0XFx0fVxcbjE2MTY6XFx0XFx0XFx0aWYgKGkuZHVtcGl0LnBvbGljeSkge1xcbjE2MTc6XFx0XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbjE2MTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmR1bXBpdC5wb2xpY3ksXFxuMTYxOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGkuZHVtcGl0Lm1heGF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNToyMy43NTA4NzgyMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgxOTEwMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIHRhcmdldGVkIHRvd2FyZHMgYW4gZXhwZXJ0OlxuXG4qKkZvY3VzaW5nIG9uIGEgU3BlY2lmaWMgU2VjdGlvbioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDE3NjAtMTgxMC4gSSdtIHRha2luZyBhIHRhcmdldGVkIGFwcHJvYWNoIGhlcmUgYmVjYXVzZSwgYmFzZWQgb24gbXkgcHJpb3IgYW5hbHlzaXMgYW5kIGV4cGVyaWVuY2UsIEkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgd2l0aGluIHRoaXMgcmFuZ2UuIEl0IGNvdWxkIGJlIGEga2V5IGFzc3VtcHRpb24gYmVpbmcgbWFkZSwgYSBjcml0aWNhbCBkYXRhIHBvaW50IGJlaW5nIGludHJvZHVjZWQsIG9yIHBlcmhhcHMgYSBzZWN0aW9uIHdoZXJlIHRoZSBhcmd1bWVudGF0aW9uIHRha2VzIGFuIGludGVyZXN0aW5nIHR1cm4gdGhhdCB3YXJyYW50cyBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQncyBjb250cmlidXRpb24gdG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBzZWUgaWYgaXQgaXMgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW0gYXQgaGFuZCwgYW5kIHdoZXJlIGl0IGZpdHMgaW50byBteSBoeXBvdGhlc2lzLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgc2VnbWVudCB0byBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiBhc3Nlc3NpbmcgdGhlIHBhcGVyIG9yIGRvY3VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjkxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNToyNS42MzI3OTA3NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc2MDpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTc2MTpcXHRcXG4xNzYyOlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4xNzYzOlxcdFxcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcXG4xNzY0OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4xNzY1OlxcdH1cXG4xNzY2OlxcdFxcbjE3Njc6XFx0c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMTc2ODpcXHR7XFxuMTc2OTpcXHRcXHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4xNzcwOlxcdFxcbjE3NzE6XFx0XFx0a2ZyZWUoY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG4xNzcyOlxcdFxcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXFx1MDAzZXN0YXRlKTtcXG4xNzczOlxcdFxcdG1vZHVsZV9wdXQoY3R4LVxcdTAwM2Vvd25lcik7XFxuMTc3NDpcXHRcXHRyZXR1cm4gMDtcXG4xNzc1OlxcdH1cXG4xNzc2OlxcdFxcbjE3Nzc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBnZW5sX2N0cmxfb3BzW10gPSB7XFxuMTc3ODpcXHRcXHR7XFxuMTc3OTpcXHRcXHRcXHQuY21kXFx0XFx0PSBDVFJMX0NNRF9HRVRGQU1JTFksXFxuMTc4MDpcXHRcXHRcXHQudmFsaWRhdGVcXHQ9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QsXFxuMTc4MTpcXHRcXHRcXHQucG9saWN5XFx0XFx0PSBjdHJsX3BvbGljeV9mYW1pbHksXFxuMTc4MjpcXHRcXHRcXHQubWF4YXR0clxcdD0gQVJSQVlfU0laRShjdHJsX3BvbGljeV9mYW1pbHkpIC0gMSxcXG4xNzgzOlxcdFxcdFxcdC5kb2l0XFx0XFx0PSBjdHJsX2dldGZhbWlseSxcXG4xNzg0OlxcdFxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9DTURfQ0FQX0RPLFxcbjE3ODU6XFx0XFx0fSxcXG4xNzg2OlxcdFxcdHtcXG4xNzg3OlxcdFxcdFxcdC5jbWRcXHRcXHQ9IENUUkxfQ01EX0dFVEZBTUlMWSxcXG4xNzg4OlxcdFxcdFxcdC52YWxpZGF0ZVxcdD0gR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuMTc4OTpcXHRcXHRcXHQucG9saWN5XFx0XFx0PSBjdHJsX3BvbGljeV9mYW1pbHksXFxuMTc5MDpcXHRcXHRcXHQubWF4YXR0clxcdD0gQVJSQVlfU0laRShjdHJsX3BvbGljeV9mYW1pbHkpIC0gMSxcXG4xNzkxOlxcdFxcdFxcdC5kdW1waXRcXHRcXHQ9IGN0cmxfZHVtcGZhbWlseSxcXG4xNzkyOlxcdFxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9DTURfQ0FQX0RVTVAsXFxuMTc5MzpcXHRcXHR9LFxcbjE3OTQ6XFx0XFx0e1xcbjE3OTU6XFx0XFx0XFx0LmNtZFxcdFxcdD0gQ1RSTF9DTURfR0VUUE9MSUNZLFxcbjE3OTY6XFx0XFx0XFx0LnBvbGljeVxcdFxcdD0gY3RybF9wb2xpY3lfcG9saWN5LFxcbjE3OTc6XFx0XFx0XFx0Lm1heGF0dHJcXHQ9IEFSUkFZX1NJWkUoY3RybF9wb2xpY3lfcG9saWN5KSAtIDEsXFxuMTc5ODpcXHRcXHRcXHQuc3RhcnRcXHRcXHQ9IGN0cmxfZHVtcHBvbGljeV9zdGFydCxcXG4xNzk5OlxcdFxcdFxcdC5kdW1waXRcXHRcXHQ9IGN0cmxfZHVtcHBvbGljeSxcXG4xODAwOlxcdFxcdFxcdC5kb25lXFx0XFx0PSBjdHJsX2R1bXBwb2xpY3lfZG9uZSxcXG4xODAxOlxcdFxcdFxcdC5mbGFnc1xcdFxcdD0gR0VOTF9DTURfQ0FQX0RVTVAsXFxuMTgwMjpcXHRcXHR9LFxcbjE4MDM6XFx0fTtcXG4xODA0OlxcdFxcbjE4MDU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBnZW5sX2N0cmxfZ3JvdXBzW10gPSB7XFxuMTgwNjpcXHRcXHR7IC5uYW1lID0gXFxcIm5vdGlmeVxcXCIsIH0sXFxuMTgwNzpcXHR9O1xcbjE4MDg6XFx0XFxuMTgwOTpcXHRzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGdlbmxfY3RybCBfX3JvX2FmdGVyX2luaXQgPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjI1LjYzMjkxMDI4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0ODkxMjYwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEl0J3MgdG91Y2hpbmcgYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgaW50ZXJlc3QuIEdlbmVyaWMgbmV0bGluayBpcyAqY29yZSogbmV0d29ya2luZywgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXRsaW5rIHNvY2tldHMgKGBBRl9ORVRMSU5LYCwgYE5FVExJTktfR0VORVJJQ2ApLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0LiBJIGtub3cgdGhlIGNvbnRyb2xsZXIgZmFtaWx5IGBHRU5MX0lEX0NUUkxgIGhhbmRsZXMgYENUUkxfQ01EX0dFVFBPTElDWWAgZHVtcCByZXF1ZXN0cy5cblxuTXkgbWFpbiBjb25jZXJuIGlzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIHBvbGljeSBkdW1wcy4gUmlnaHQsIHdoZW4gZHVtcGluZyBwb2xpY3kgdXNpbmcgYENUUkxfQ01EX0dFVFBPTElDWWAsIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgZ3JhYnMgYSByZWZlcmVuY2UgdG8gdGhlIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgbW9kdWxlIHdpdGggYHRyeV9tb2R1bGVfZ2V0KGN0eC1cdTAwM2Vvd25lcilgIGFuZCBzdG9yZXMgaXQuIFRoaXMgaW1wbGllcyBhIHBvdGVudGlhbCB3aW5kb3cgd2hlcmUgdGhlIG1vZHVsZSBjb3VsZCBiZSB1bmxvYWRlZCBpZiBub3QgcHJvcGVybHkgcHJvdGVjdGVkIHdoaWxlIHBvbGljeSBkdW1waW5nIGlzIGFjdGl2ZS4gVGhlIGNsZWFudXAgaW4gYGN0cmxfZHVtcHBvbGljeV9kb25lKClgIGRvZXMgYSBgbW9kdWxlX3B1dChjdHgtXHUwMDNlb3duZXIpYCB0byByZWxlYXNlIGl0LiBJbXBvcnRhbnRseSwgdGhlIGVycm9yIHBhdGhzIGluIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYWxzbyByZWxlYXNlIHRoZSBtb2R1bGUgcmVmIHZpYSBgZ290byBlcnJfcHV0X293bmVyYC5cblxuQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoaXMgd2FycmFudHMgZnV6emluZzpcblxuKiAgICoqSXMgaXQgaW4gY29yZSBrZXJuZWwgbG9naWMvcmVhY2hhYmxlIGRyaXZlcnM/KiogWWVwLCBnZW5lcmljIG5ldGxpbmsgY29yZSwgd2hpY2ggbWFrZXMgaXQgaGlnaC12YWx1ZS5cbiogICAqKklzIGl0IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2U/KiogQWJzb2x1dGVseSwgdGhyb3VnaCBgQ1RSTF9DTURfR0VUUE9MSUNZYCBvbiBgTkVUTElOS19HRU5FUklDYC4gVGhpcyBpcyBrZXkuXG4qICAgKipEb2VzIGl0IG1ha2UgZnVuY3Rpb25hbCBjaGFuZ2VzPyoqIFllcywgY3JpdGljYWxseSwgaXQncyBpbnRyb2R1Y2luZyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBwb2xpY3kgZHVtcHMgdG8gcHJldmVudCBtb2R1bGUgdW5sb2FkaW5nIG9yIHVzZS1hZnRlci1mcmVlIHdoaWxlIGEgcG9saWN5IGlzIGJlaW5nIGR1bXBlZC4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIGFuZCBjaGFuZ2VzIGVycm9yL2NsZWFudXAgcGF0aHMuXG5cblRoZSBhbnN3ZXIgaXMgKip3b3J0aCBmdXp6aW5nKiouIFRoaXMgc291bmRzIGxpa2UgYSBwcmltZSB0YXJnZXQuXG5cbk5vdyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIEdlbmVyaWMgTmV0bGluay4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYG5ldC9uZXRsaW5rL01ha2VmaWxlYCBhbmQgdGhlbiBgbmV0L0tjb25maWdgIG9yIGBuZXQvbmV0bGluay9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MDYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTozMC4xMjIwMzk1MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjYzNjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldGxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L2JhdF9hbGdvLmM6MTg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jLTQzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmM6NDQ6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMtNDUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5jLTI4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5jOjI5OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2JhdG1hbi1hZHYvYmF0X3YuYy0zMC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTQwLSNpbmNsdWRlIFxcdTAwM2NuZXQvYXJwLmhcXHUwMDNlXFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmM6NDE6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy00Mi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTM4LSNpbmNsdWRlIFxcdTAwM2NuZXQvYXJwLmhcXHUwMDNlXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6Mzk6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy00MC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy0zOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2RzZmllbGQuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM6Mzk6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtNDAtI2luY2x1ZGUgXFx1MDAzY25ldC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ0LSNpbmNsdWRlIFxcdTAwM2NuZXQvYWRkcmNvbmYuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo0NTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ2LSNpbmNsdWRlIFxcdTAwM2NuZXQvaWZfaW5ldDYuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdXRzbmFtZS5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzozMzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zNC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDI6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQzLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTItXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjM6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYy0yLVxcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYzozOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTQtXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MzA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0zMS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGV2ZW50LmhcXHUwMDNlXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy05LVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6MTE6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC0xMi1cXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy02LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2RldmxpbmsvY29yZS5jLTgtI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG5uZXQvZGV2bGluay9kZXYuYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2RldmxpbmsvZGV2LmMtOS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9kZXZsaW5rL2hlYWx0aC5jLTYtXFxubmV0L2RldmxpbmsvaGVhbHRoLmM6NzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL2hlYWx0aC5jLTgtI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuLS1cXG5uZXQvZGV2bGluay9uZXRsaW5rLmMtNi1cXG5uZXQvZGV2bGluay9uZXRsaW5rLmM6NzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL25ldGxpbmsuYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbi0tXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmM6ODojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmMtOS1cXG4tLVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaDoxMTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTItXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9MjYwPWludCBldGhubF9maWxsX3JlcGx5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTI4Ny0gKiBldGhubF9yZXBseV9pbml0KCkgLSBDcmVhdGUgc2tiIGZvciBhIHJlcGx5IGFuZCBmaWxsIGRldmljZSBpZGVudGlmaWNhdGlvblxcbm5ldC9ldGh0b29sL25ldGxpbmsuYzoyODg6ICogQHBheWxvYWQ6ICAgICAgcGF5bG9hZCBsZW5ndGggKHdpdGhvdXQgbmV0bGluayBhbmQgZ2VuZXRsaW5rIGhlYWRlcilcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMjg5LSAqIEBkZXY6ICAgICAgICAgIGRldmljZSB0aGUgcmVwbHkgaXMgYWJvdXQgKG1heSBiZSBudWxsKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTI5MS0gKiBAaGRyX2F0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZSBmb3IgY29tbW9uIGhlYWRlclxcbm5ldC9ldGh0b29sL25ldGxpbmsuYzoyOTI6ICogQGluZm86ICAgICAgICAgZ2VuZXRsaW5rIGluZm8gb2YgdGhlIHJlY2VpdmVkIHBhY2tldCB3ZSByZXNwb25kIHRvXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTI5My0gKiBAZWhkcnA6ICAgICAgICBwbGFjZSB0byBzdG9yZSBwYXlsb2FkIHBvaW50ZXIgcmV0dXJuZWQgYnkgZ2VubG1zZ19uZXcoKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTExNTU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBldGhubF9uZXRkZXZfbm90aWZpZXIgPSB7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTE1OC1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6MTE1OTovKiBnZW5ldGxpbmsgc2V0dXAgKi9cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTE2MC1cXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz0xNTk3PXN0YXRpYyBpbnQgX19pbml0IGV0aG5sX2luaXQodm9pZClcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xNjAxLVxcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFxcdTAwMjZldGh0b29sX2dlbmxfZmFtaWx5KTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6MTYwMjpcXHRpZiAoV0FSTihyZXQgXFx1MDAzYyAwLCBcXFwiZXRodG9vbDogZ2VuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24gZmFpbGVkXFxcIikpXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTE2MDMtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuaC03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmg6ODojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9ldGh0b29sL25ldGxpbmsuaC05LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbi0tXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtNy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaGFuZHNoYWtlL2dlbmwuYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9nZW5sLmMtOS1cXG4tLVxcbm5ldC9oYW5kc2hha2UvZ2VubC5oLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9oYW5kc2hha2UvZ2VubC5oOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9nZW5sLmgtMTItXFxuLS1cXG5uZXQvaGFuZHNoYWtlL2hhbmRzaGFrZS10ZXN0LmMtMTMtI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jOjE0OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9oYW5kc2hha2UtdGVzdC5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXFx1MDAzZVxcbi0tXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmMtMTctI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9uZXRsaW5rLmM6MTg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaGFuZHNoYWtlL25ldGxpbmsuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9oYW5kc2hha2UvcmVxdWVzdC5jOjIwOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2hhbmRzaGFrZS9yZXF1ZXN0LmMtMjEtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRucy9nZW5lcmljLmhcXHUwMDNlXFxuLS1cXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMTktI2luY2x1ZGUgXFx1MDAzY25ldC9oYW5kc2hha2UuaFxcdTAwM2VcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmM6MjA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaGFuZHNoYWtlL3Rsc2hkLmMtMjEtI2luY2x1ZGUgXFx1MDAzY25ldC90bHNfcHJvdC5oXFx1MDAzZVxcbi0tXFxubmV0L2hhbmRzaGFrZS90cmFjZS5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9oYW5kc2hha2UvdHJhY2UuYzoxNjojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9oYW5kc2hha2UvdHJhY2UuYy0xNy1cXG4tLVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbmV0L3J0bmV0bGluay5oXFx1MDAzZVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYzoxMzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9oc3IvaHNyX25ldGxpbmsuYy0xNC0jaW5jbHVkZSBcXFwiaHNyX21haW4uaFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaD01MT1leHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IG5sODAyMTU0X2ZhbWlseTtcXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtNTItXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjUzOi8qIGdlbmV0bGluayBvcHMvZ3JvdXBzICovXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTU0LWludCBpZWVlODAyMTU0X2xpc3RfcGh5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTU6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25sODAyMTU0LmhcXHUwMDNlXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxOTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtcGh5LmMtMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L2llZWU4MDIxNTQvbmwtcGh5LmM6MTc6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9ubC1waHkuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjE1NC5oXFx1MDAzZVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjE1NC5oXFx1MDAzZVxcbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmM6MTM6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTE0LSNpbmNsdWRlIFxcdTAwM2NuZXQvbWFjODAyMTU0LmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2dyby5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xOS0jaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9mb3UuaFxcdTAwM2VcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjIwOiNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMjEtXFxuLS1cXG5uZXQvaXB2NC9mb3VfbmwuYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY0L2ZvdV9ubC5jOjg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaXB2NC9mb3VfbmwuYy05LVxcbi0tXFxubmV0L2lwdjQvZm91X25sLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjQvZm91X25sLmg6MTE6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaXB2NC9mb3VfbmwuaC0xMi1cXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjEtI2luY2x1ZGUgXFx1MDAzY25ldC90Y3AuaFxcdTAwM2VcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIyOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMy1cXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGEuaC0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NoZWNrc3VtLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYS5oOjE3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYS5oLTE4LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvaXB2Ni9pbGEvaWxhX21haW4uYzoyOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYV9tYWluLmMtMy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFxcdTAwM2VcXG5uZXQvaXB2Ni9pbGEvaWxhX21haW4uYzo0OiNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY2L2lsYS9pbGFfbWFpbi5jLTUtI2luY2x1ZGUgXFxcImlsYS5oXFxcIlxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjc6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bnMvZ2VuZXJpYy5oXFx1MDAzZVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjk6I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTAtI2luY2x1ZGUgXFxcImlsYS5oXFxcIlxcbi0tXFxubmV0L2lwdjYvaW9hbTYuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2FkZHJjb25mLmhcXHUwMDNlXFxubmV0L2lwdjYvaW9hbTYuYzoxOTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY2L2lvYW02LmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9pb2FtNi5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvc2VnNi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzYuYzoyMTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzYuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2VnNi5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNl9obWFjLmMtMzktI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2LmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9obWFjLmM6NDA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvaXB2Ni9zZWc2X2htYWMuYy00MS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmg9MTU4PXN0cnVjdCBsMnRwX3R1bm5lbCB7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0xODUtXFxubmV0L2wydHAvbDJ0cF9jb3JlLmg6MTg2Oi8qIFBzZXVkb3dpcmUgb3BzIGNhbGxiYWNrcyBmb3IgdXNlIHdpdGggdGhlIGwydHAgZ2VuZXRsaW5rIGludGVyZmFjZSAqL1xcbm5ldC9sMnRwL2wydHBfY29yZS5oLTE4Ny1zdHJ1Y3QgbDJ0cF9ubF9jbWRfb3BzIHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjE2OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtMTctI2luY2x1ZGUgXFx1MDAzY25ldC91ZHAuaFxcdTAwM2VcXG4tLVxcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTktXFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oLTEyLVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTMtI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbXB0Y3AuaFxcdTAwM2VcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxNDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvcnN0cmVhc29uLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmNzaS9uY3NpLWNtZC5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9uY3NpL25jc2ktY21kLmM6MTY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmNzaS9uY3NpLWNtZC5jLTE3LVxcbi0tXFxubmV0L25jc2kvbmNzaS1tYW5hZ2UuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG5uZXQvbmNzaS9uY3NpLW1hbmFnZS5jOjE5OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25jc2kvbmNzaS1tYW5hZ2UuYy0yMC1cXG4tLVxcbm5ldC9uY3NpL25jc2ktbmV0bGluay5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbm5ldC9uY3NpL25jc2ktbmV0bGluay5jOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25jc2kvbmNzaS1uZXRsaW5rLmMtMTItI2luY2x1ZGUgXFx1MDAzY25ldC9uY3NpLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmNzaS9uY3NpLXJzcC5jLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9uY3NpL25jc2ktcnNwLmM6MTY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmNzaS9uY3NpLXJzcC5jLTE3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQzLSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zOTUxPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgaXBfdnNfc29ja29wdHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzk2NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzk2NjovKiBJUFZTIGdlbmV0bGluayBmYW1pbHkgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzk2Ny1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGlwX3ZzX2dlbmxfZmFtaWx5O1xcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYy0yNC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jOjI1OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYy0yNi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxhYmVsLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYzoyNDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGFiZWwuaFxcdTAwM2VcXG4tLVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMtMjQtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYzoyNTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMtMjYtI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jLTMzLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYzozNDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmM6MjY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5jLTI3LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGFiZWwuaFxcdTAwM2VcXG4tLVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmgtMjMtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuaDoyNDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmgtMjUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsYWJlbC5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGxpbmsvTWFrZWZpbGUtNS1cXG5uZXQvbmV0bGluay9NYWtlZmlsZTo2Om9iai15ICBcXHRcXHRcXHRcXHQ6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9cXG5uZXQvbmV0bGluay9NYWtlZmlsZS03LVxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTc1LSNpbmNsdWRlIFxcXCJhZl9uZXRsaW5rLmhcXFwiXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjc2OiNpbmNsdWRlIFxcXCJnZW5ldGxpbmsuaFxcXCJcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNzctXFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9NzE4PXN0YXRpYyBpbnQgbmV0bGlua19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNzM3LVxcdC8qIG11c3Qgbm90IGFjcXVpcmUgbmV0bGlua190YWJsZV9sb2NrIGluIGFueSB3YXkgYWdhaW4gYmVmb3JlIHVuYmluZFxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzo3Mzg6XFx0ICogYW5kIG5vdGlmeWluZyBnZW5ldGxpbmsgaXMgZG9uZSBhcyBvdGhlcndpc2UgaXQgbWlnaHQgZGVhZGxvY2tcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNzM5LVxcdCAqL1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMjItI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MjM6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0yNC1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoyNTojaW5jbHVkZSBcXFwiZ2VuZXRsaW5rLmhcXFwiXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMjYtXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuaC02LVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5oOjc6LyogZm9yIHN5bmNocm9uaXNhdGlvbiBiZXR3ZWVuIGFmX25ldGxpbmsgYW5kIGdlbmV0bGluayAqL1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5oLTgtZXh0ZXJuIGF0b21pY190IGdlbmxfc2tfZGVzdHJ1Y3RpbmdfY250O1xcbi0tXFxubmV0L25mYy9jb3JlLmMtMTgtXFxubmV0L25mYy9jb3JlLmM6MTk6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvbmZjL2NvcmUuYy0yMC1cXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3LVxcbm5ldC9uZmMvbmV0bGluay5jOjE4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25mYy9uZXRsaW5rLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25mYy5oXFx1MDAzZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEzLSNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTQ6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaFxcdTAwM2VcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWkuaFxcdTAwM2VcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzozNjojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM3LSNpbmNsdWRlIFxcdTAwM2NuZXQvZ3NvLmhcXHUwMDNlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZHBfbm90aWZ5LmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxubmV0L29wZW52c3dpdGNoL2RwX25vdGlmeS5jOjc6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvb3BlbnZzd2l0Y2gvZHBfbm90aWZ5LmMtOC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2dlbmVyaWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE2LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjE3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTgtXFxuLS1cXG5uZXQvcHNhbXBsZS9wc2FtcGxlLmMtMTQtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jOjE1OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3BzYW1wbGUvcHNhbXBsZS5jLTE2LSNpbmNsdWRlIFxcdTAwM2NuZXQvcHNhbXBsZS5oXFx1MDAzZVxcbi0tXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtNy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvcHNwL3BzcC1ubC1nZW4uYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtOS1cXG4tLVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMTItXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbm5ldC9wc3AvcHNwX25sLmM6NzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9wc3AvcHNwX25sLmMtOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3BzcC5oXFx1MDAzZVxcbi0tXFxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmMtNy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc2hhcGVyL3NoYXBlcl9ubF9nZW4uYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmMtOS1cXG4tLVxcbm5ldC9zaGFwZXIvc2hhcGVyX25sX2dlbi5oLTEwLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zaGFwZXIvc2hhcGVyX25sX2dlbi5oOjExOiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NoYXBlci9zaGFwZXJfbmxfZ2VuLmgtMTItXFxuLS1cXG5uZXQvc21jL3NtYy5oLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZSAvKiBfX2FsaWduZWQgKi9cXG5uZXQvc21jL3NtYy5oOjE3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NtYy9zbWMuaC0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaC0xOS0jaW5jbHVkZSBcXHUwMDNjcmRtYS9pYl92ZXJicy5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2NvcmUuaDoyMDojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2NvcmUuaC0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NtYy5oXFx1MDAzZVxcbi0tXFxubmV0L3NtYy9zbWNfbmV0bGluay5oLTE1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX25ldGxpbmsuaDoxNjojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX25ldGxpbmsuaC0xNy1cXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc21jL3NtY19wbmV0LmM6MTc6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc21jL3NtY19wbmV0LmMtMTgtXFxuLS1cXG5uZXQvc21jL3NtY19zdGF0cy5jLTE1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbWMuaFxcdTAwM2VcXG5uZXQvc21jL3NtY19zdGF0cy5jOjE2OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NtYy9zbWNfc3RhdHMuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9zdW5ycGMvY2FjaGUuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3JwY19waXBlX2ZzLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9jYWNoZS5jOjM2OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9jYWNoZS5jLTM3LSNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvc3VucnBjLmhcXHUwMDNlXFxuLS1cXG5uZXQvc3VucnBjL25ldGxpbmsuYy03LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvbmV0bGluay5jOjg6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc3VucnBjL25ldGxpbmsuYy05LVxcbi0tXFxubmV0L3N1bnJwYy9uZXRsaW5rLmgtMTAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9uZXRsaW5rLmg6MTE6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc3VucnBjL25ldGxpbmsuaC0xMi1cXG4tLVxcbm5ldC9zdW5ycGMvc3VucnBjX3N5bXMuYy0yNS1cXG5uZXQvc3VucnBjL3N1bnJwY19zeW1zLmM6MjY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMtMjctXFxuLS1cXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmM6MjA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jLTIxLSNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L3N1bnJwY19uZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5uZXQvdGlwYy9iZWFyZXIuaC00Mi0jaW5jbHVkZSBcXFwibXNnLmhcXFwiXFxubmV0L3RpcGMvYmVhcmVyLmg6NDM6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvdGlwYy9iZWFyZXIuaC00NC1cXG4tLVxcbm5ldC90aXBjL2NvcmUuaC02Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbm5ldC90aXBjL2NvcmUuaDo2MzojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC90aXBjL2NvcmUuaC02NC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldG5zL2hhc2guaFxcdTAwM2VcXG4tLVxcbm5ldC90aXBjL2xpbmsuaC0zOS1cXG5uZXQvdGlwYy9saW5rLmg6NDA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvdGlwYy9saW5rLmgtNDEtI2luY2x1ZGUgXFxcIm1zZy5oXFxcIlxcbi0tXFxubmV0L3RpcGMvbW9uaXRvci5jLTM1LVxcbm5ldC90aXBjL21vbml0b3IuYzozNjojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC90aXBjL21vbml0b3IuYy0zNy0jaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbi0tXFxubmV0L3RpcGMvbmV0LmgtMzktXFxubmV0L3RpcGMvbmV0Lmg6NDA6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvdGlwYy9uZXQuaC00MS1cXG4tLVxcbm5ldC90aXBjL25ldGxpbmsuYy00NC0jaW5jbHVkZSBcXFwidWRwX21lZGlhLmhcXFwiXFxubmV0L3RpcGMvbmV0bGluay5jOjQ1OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3RpcGMvbmV0bGluay5jLTQ2LVxcbi0tXFxubmV0L3RpcGMvbmV0bGlua19jb21wYXQuYy00MC0jaW5jbHVkZSBcXFwibmV0LmhcXFwiXFxubmV0L3RpcGMvbmV0bGlua19jb21wYXQuYzo0MTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC90aXBjL25ldGxpbmtfY29tcGF0LmMtNDItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcXHUwMDNlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuaC0zOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG5uZXQvdGlwYy9zb2NrZXQuaDozOTojaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbm5ldC90aXBjL3NvY2tldC5oLTQwLVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjI1OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjExLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjE3OiNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxubmV0L3dpcmVsZXNzL2NvcmUuaC0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjExLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXFx1MDAzZVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjY6I2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI3LSNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MzAuNzg4NjgzOTEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODM4ODkyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIE5ldGxpbmsgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBOZXRsaW5rIGltcGxlbWVudGF0aW9uLiBGaXJzdCBzdG9wLCBgbmV0L25ldGxpbmsvTWFrZWZpbGVgLiBBbHJpZ2h0LCBoZXJlIHdlIGdvLi4uIGBvYmoteSA6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9gLiBSaWdodCwgc28gdGhpcyBjb25maXJtcyB0aGUgY29yZSBtb2R1bGVzOiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGltcGxlbWVudGF0aW9uLCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGl0c2VsZiwgYW5kIHBvbGljeSBjb25maWd1cmF0aW9ucy4gU3RhbmRhcmQgc3R1ZmYuIFRoaXMgd2hvbGUgdGhpbmcgZ2V0cyBidWlsdCwgSSByZWNhbGwsIHdoZW5ldmVyIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgdHlwaWNhbGx5IGdhdGVkIGJlaGluZCBgQ09ORklHX05FVGAuIEdvdCBpdC4gTm93LCBsZXQncyBwZWVrIGF0IHRoZSBwYXJlbnQgYG5ldC9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBidWlsZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcwMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjMyLjg3MjU3NTc4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG5ldHdvcmtpbmcuXFxuICAgNDpcXHQjXFxuICAgNTpcXHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFxcdTAwM2NoY2hAaW5mcmFkZWFkLm9yZ1xcdTAwM2VcXG4gICA2OlxcdCMgUmV3cml0dGVuIHRvIHVzZSBsaXN0cyBpbnN0ZWFkIG9mIGlmLXN0YXRlbWVudHMuXFxuICAgNzpcXHQjXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gZGV2cmVzLm8gc29ja2V0Lm8gY29yZS9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0NPTVBBVClcXHRcXHQrPSBjb21wYXQub1xcbiAgMTI6XFx0XFxuICAxMzpcXHQjIExMQyBoYXMgdG8gYmUgbGlua2VkIGJlZm9yZSB0aGUgZmlsZXMgaW4gbmV0LzgwMi9cXG4gIDE0OlxcdG9iai0kKENPTkZJR19MTEMpXFx0XFx0Kz0gbGxjL1xcbiAgMTU6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xcbiAgMTY6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHRcXHQrPSBuZXRmaWx0ZXIvXFxuICAxNzpcXHRvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBpcHY0L1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuICAxOTpcXHRvYmotJChDT05GSUdfWEZSTSlcXHRcXHQrPSB4ZnJtL1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1VOSVgpXFx0XFx0Kz0gdW5peC9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19JTkVUX1BTUClcXHRcXHQrPSBwc3AvXFxuICAyMjpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGlwdjYvXFxuICAyMzpcXHRvYmotJChDT05GSUdfUEFDS0VUKVxcdFxcdCs9IHBhY2tldC9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORVRfS0VZKVxcdFxcdCs9IGtleS9cXG4gIDI1OlxcdG9iai0kKENPTkZJR19CUklER0UpXFx0XFx0Kz0gYnJpZGdlL1xcbiAgMjY6XFx0b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVxcdCs9IGRldmxpbmsvXFxuICAyNzpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGRzYS9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19YMjUpXFx0XFx0Kz0geDI1L1xcbiAgMjk6XFx0b2JqLSQoQ09ORklHX0xBUEIpXFx0XFx0Kz0gbGFwYi9cXG4gIDMwOlxcdG9iai0kKENPTkZJR19DQU4pXFx0XFx0Kz0gY2FuL1xcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0JUKVxcdFxcdCs9IGJsdWV0b290aC9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19TVU5SUEMpXFx0XFx0Kz0gc3VucnBjL1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVxcdFxcdCs9IHJ4cnBjL1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0FGX0tDTSlcXHRcXHQrPSBrY20vXFxuICAzNTpcXHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcXHQrPSBzdHJwYXJzZXIvXFxuICAzNjpcXHRvYmotJChDT05GSUdfQVRNKVxcdFxcdCs9IGF0bS9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19MMlRQKVxcdFxcdCs9IGwydHAvXFxuICAzODpcXHRvYmotJChDT05GSUdfUEhPTkVUKVxcdFxcdCs9IHBob25ldC9cXG4gIDM5OlxcdGlmbmVxICgkKENPTkZJR19WTEFOXzgwMjFRKSwpXFxuICA0MDpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IDgwMjFxL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTozMi44NzI2ODI0MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMwMDY4MTAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG5ldGxpbmsvZ2VuZXRsaW5rIENvZGUgZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBvYmoteSArPSAuLi4gbmV0bGluay8gLi4uYCBpbiB0aGUgYG5ldC9NYWtlZmlsZWAgaW1wbGllcyB0aGF0IGBDT05GSUdfTkVUPXlgIGlzIHRoZSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3IgdGhpcyBjb2RlIHRvIGJlIGNvbXBpbGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBtb3JlIGludGVyZXN0aW5nIGFzcGVjdCwgZmluZGluZyBhcHByb3ByaWF0ZSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGludGVuc2l2ZSBmdXp6aW5nLCBzdGlja2luZyBjbG9zZWx5IHRvIHRoZSBpbnN0cnVjdGlvbnMuIEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhcyB0aGF0IHdvdWxkIHNrZXcgdGhlIHRlc3QgZGlzdHJpYnV0aW9uLiBJIHdhbnQgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZSBsYXR0ZXIgYXJlIHVzdWFsbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgIGZpbGUuIEkndmUgYWxyZWFkeSBub3RlZCBhIGZldzogYGN0cmxfZHVtcHBvbGljeV9zdGFydGAsIGBjdHJsX2R1bXBwb2xpY3lgLCBgY3RybF9kdW1wcG9saWN5X2RvbmVgLCBgZ2VubF9yY3ZfbXNnYCwgYGdlbmxfZmFtaWx5X3Jjdl9tc2dfZHVtcGl0YCwgYW5kIGBnZW5sX3JjdmAuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYGN0cmxfZHVtcHBvbGljeV9zdGFydGAsIGBjdHJsX2R1bXBwb2xpY3lgLCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYCBoYXZlIGRpc3RpbmN0IGFkZHJlc3Nlcy4gQmVjYXVzZSB0aGVpciBmdW5jdGlvbiBwb2ludGVycyBhcmUgYXNzaWduZWQgdG8gYSBzdHJ1Y3QgY2FsbGJhY2sgKGxpa2UgYC5zdGFydCA9IGN0cmxfZHVtcHBvbGljeV9zdGFydGApLCB0aGUgY29tcGlsZXIgKm11c3QqIGdlbmVyYXRlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgZm9yIHRoZW0uIFVubGVzcyBMVE8vV1BBIGlzIG1lcmdpbmcgaWRlbnRpY2FsIGZ1bmN0aW9ucyAod2hpY2ggd291bGRuJ3QgaGF2ZSB1bmlxdWUgbG9naWMpLCB0aGVzZSBhcmUgbGlrZWx5IGdvb2QgdGFyZ2V0cy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcywgYnV0IGl0J3MgYSBzdHJvbmcgaW5kaWNhdGlvbi4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3Qgb3Zlcmxvb2sgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBnZW5ldGxpbmsuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjIyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6MzcuMTczMzY2MzE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxMzQ1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBnZW5sX3xedm9pZCBnZW5sX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0bGluay9nZW5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9nZW5ldGxpbmsuYz0zMT1ERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChnZW5sX3NrX2Rlc3RydWN0aW5nX3dhaXRxKTtcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0zMi1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzozMzp2b2lkIGdlbmxfbG9jayh2b2lkKVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTM0LXtcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTM3PUVYUE9SVF9TWU1CT0woZ2VubF9sb2NrKTtcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0zOC1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzozOTp2b2lkIGdlbmxfdW5sb2NrKHZvaWQpXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtNDAte1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9NzM3PXZvaWQgKmdlbmxfc2tfcHJpdl9nZXQoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTc3NC0gKi9cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzo3NzU6aW50IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5KVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTc3Ni17XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz04NDA9RVhQT1JUX1NZTUJPTChnZW5sX3JlZ2lzdGVyX2ZhbWlseSk7XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy04NDktICovXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6ODUwOmludCBnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5KVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTg1MS17XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xOTk0PUVYUE9SVF9TWU1CT0woZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMpO1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE5OTUtXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTk5Njp2b2lkIGdlbmxfbm90aWZ5KGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE5OTctXFx0XFx0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBncm91cCwgZ2ZwX3QgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjM3LjMyMDUwNDY4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODU2MTg1MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRsaW5rIFBvbGljeSBEdW1waW5nIGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGtleSBmb2N1cyBzeW1ib2xzOiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYC4gQXJlIHRoZXkgdmFsaWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHdoYXQgd2UncmUgbG9va2luZyBhdD8gWWVzLCB0aGV5IGFyZS4gQW5kIGBjdHJsX2R1bXBwb2xpY3lgIGlzIGFsc28gcmVsZXZhbnQgaGVyZS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbnMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX05FVGAsIG9yIHNpbXBseSBcIk5FVCxcIiB3aGljaCBpcyBhIGdpdmVuLCBhcyBnZW5lcmljIG5ldGxpbmsgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggaXQuXG5cbk5vdywgbGV0J3Mgc29saWRpZnkgdGhlIGRldGFpbHMuIFRoaXMgcGF0Y2ggYXBwZWFycyBjcml0aWNhbC4gSXQgYWRkcyBgY3R4LVx1MDAzZW93bmVyID0gcnQtXHUwMDNlbW9kdWxlO2AgYW5kIGEgYHRyeV9tb2R1bGVfZ2V0KGN0eC1cdTAwM2Vvd25lcilgIHdpdGhpbiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0KClgLiBUaGlzIGlzIGdvb2Q7IGl0J3MgdGhlIG1vZHVsZSByZWZlcmVuY2UgYWNxdWlzaXRpb24gc3RlcC4gVGhlIHBhdGNoIHRoZW4gY29ycmVjdGx5IHVwZGF0ZXMgdGhlIGVycm9yIHBhdGhzIHdpdGggYG1vZHVsZV9wdXQoY3R4LVx1MDAzZW93bmVyKWAgdG8gaGFuZGxlIGZhaWx1cmUgc2NlbmFyaW9zLCBhbmQgYG1vZHVsZV9wdXQoY3R4LVx1MDAzZW93bmVyKWAgaXMgYWxzbyBhZGRlZCB0byBgY3RybF9kdW1wcG9saWN5X2RvbmUoKWAuIFRoaXMgaXMgYWxsIHRvIHByZXZlbnQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gZHVtcGluZyBuZXRsaW5rIHBvbGljaWVzIG9mIGtlcm5lbCBtb2R1bGVzLiBUaGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgYENUUkxfQ01EX0dFVFBPTElDWWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgZW5hYmxlIGNvbmZpZyBpcyBgW1wiTkVUXCJdYCBhbmQgZm9jdXMgc3ltYm9scyBhcmUgYFtcImN0cmxfZHVtcHBvbGljeV9zdGFydFwiLCBcImN0cmxfZHVtcHBvbGljeV9kb25lXCIsIFwiY3RybF9kdW1wcG9saWN5XCJdYC5cblxuTGV0J3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIHBhcmFtZXRlcnM6XG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiTkVUXCJdYCAtIE1ha2VzIHNlbnNlLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiY3RybF9kdW1wcG9saWN5X3N0YXJ0XCIsIFwiY3RybF9kdW1wcG9saWN5X2RvbmVcIiwgXCJjdHJsX2R1bXBwb2xpY3lcIl1gIC0gRXhhY3RseSB3aGF0IHdlIGV4cGVjdC5cbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1hbmFnZXMgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBtb2R1bGUgcmVmZXJlbmNlcyBkdXJpbmcgYENUUkxfQ01EX0dFVFBPTElDWWAgZHVtcCBvcGVyYXRpb25zIGluIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYCwgcHJldmVudGluZyBtb2R1bGUgdW5sb2FkaW5nIHdoaWxlIGR1bXBzIGFyZSBpbiBwcm9ncmVzcy4gVGhpcyBtb2RpZmllcyBnZW5lcmljIG5ldGxpbmsgY29udHJvbGxlciBsb2dpYyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiAtIFBlcmZlY3QsIHRoaXMgaXMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbi5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZSAtIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBwYXRjaCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgbW9kdWxlLXJlbGF0ZWQgaXNzdWVzLCB0aGlzIGlzIGFic29sdXRlbHkgdGhlIGNvcnJlY3QgYXNzZXNzbWVudC5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0IGlzIHNhZmUgdG8gdXNlIHRoaXMgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzksIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjQyLjE3NjY5MjM2OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk5NzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RybF9kdW1wcG9saWN5X3N0YXJ0XCIsXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lfZG9uZVwiLFxuICAgIFwiY3RybF9kdW1wcG9saWN5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBtb2R1bGUgcmVmZXJlbmNlIGhvbGRpbmcgKHRyeV9tb2R1bGVfZ2V0L21vZHVsZV9wdXQpIGZvciBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHBvbGljeSBkdW1wcyBpbiBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKSBhbmQgY3RybF9kdW1wcG9saWN5X2RvbmUoKSwgYWx0ZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBlcnJvciBjbGVhbnVwIHBhdGhzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEdlbmVyaWMgTmV0bGluayBDVFJMX0NNRF9HRVRQT0xJQ1kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RybF9kdW1wcG9saWN5X3N0YXJ0XCIsXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lfZG9uZVwiLFxuICAgIFwiY3RybF9kdW1wcG9saWN5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBtb2R1bGUgcmVmZXJlbmNlIGhvbGRpbmcgKHRyeV9tb2R1bGVfZ2V0L21vZHVsZV9wdXQpIGZvciBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHBvbGljeSBkdW1wcyBpbiBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKSBhbmQgY3RybF9kdW1wcG9saWN5X2RvbmUoKSwgYWx0ZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBlcnJvciBjbGVhbnVwIHBhdGhzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEdlbmVyaWMgTmV0bGluayBDVFJMX0NNRF9HRVRQT0xJQ1kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAyOjA1OjQyLjMyMjY5Njg1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3Mjg1NDI0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo0Mi4zMjMxNTAyODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjcyODA4MzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIChgdHJ5X21vZHVsZV9nZXQoKWAgLyBgbW9kdWxlX3B1dCgpYCkgZHVyaW5nIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcCBvcGVyYXRpb25zIChgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYCkuIFRoaXMgcHJldmVudHMgdGhlIG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIGZhbWlseSBmcm9tIGJlaW5nIHVubG9hZGVkIHdoaWxlIGEgcG9saWN5IGR1bXAgaXMgaW4gcHJvZ3Jlc3MuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIG1vZHVsZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAvIGludmFsaWQgY29kZSBvciBkYXRhIGFjY2VzcyBvbiBtb2R1bGUgdW5sb2FkKSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgZGF0YSBleHBvc3VyZSwgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMzdmOTI3ODVmNjk3OGQzYWUxMWU3MzMyZTM0Y2IyMDNkNjlhYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMjowNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbmluZGV4IDBkYTM5ZWFlZDI1NWYuLjQxZDM3NDQyZjE4NjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuY1xuKysrIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNcbkBAIC0xNTEzLDYgKzE1MTMsNyBAQCBzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xuIFx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xuIFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcbiBcdHN0cnVjdCBnZW5sX29wX2l0ZXIgKm9wX2l0ZXI7XG4rXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiBcdHUzMiBvcDtcbiBcdHUxNiBmYW1faWQ7XG4gXHR1OCBkdW1wX21hcDoxLFxuQEAgLTE1NTUsNiArMTU1Niw5IEBAIHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRjdHgtXHUwMDNlcnQgPSBydDtcbitcdGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtcbitcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVx1MDAzZW93bmVyKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRpZiAodGJbQ1RSTF9BVFRSX09QXSkge1xuIFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcDtcbkBAIC0xNTY1LDcgKzE1NjksNyBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdGVyciA9IGdlbmxfZ2V0X2NtZF9ib3RoKGN0eC1cdTAwM2VvcCwgcnQsIFx1MDAyNmRvaXQsIFx1MDAyNmR1bXApO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGNiLVx1MDAzZWV4dGFjaywgdGJbQ1RSTF9BVFRSX09QXSk7XG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGRvaXQucG9saWN5KSB7XG5AQCAtMTU4MywxNiArMTU4NywyMCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdFx0XHRnb3RvIGVycl9mcmVlX3N0YXRlO1xuIFx0XHR9XG4gXG4tXHRcdGlmICghY3R4LVx1MDAzZXN0YXRlKVxuLVx0XHRcdHJldHVybiAtRU5PREFUQTtcbitcdFx0aWYgKCFjdHgtXHUwMDNlc3RhdGUpIHtcbitcdFx0XHRlcnIgPSAtRU5PREFUQTtcbitcdFx0XHRnb3RvIGVycl9wdXRfb3duZXI7XG4rXHRcdH1cbiBcbiBcdFx0Y3R4LVx1MDAzZWR1bXBfbWFwID0gMTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRjdHgtXHUwMDNlb3BfaXRlciA9IGttYWxsb2Nfb2JqKCpjdHgtXHUwMDNlb3BfaXRlcik7XG4tXHRpZiAoIWN0eC1cdTAwM2VvcF9pdGVyKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmICghY3R4LVx1MDAzZW9wX2l0ZXIpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfcHV0X293bmVyO1xuK1x0fVxuIFxuIFx0Z2VubF9vcF9pdGVyX2luaXQocnQsIGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdGN0eC1cdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cdTAwM2VvcF9pdGVyKTtcbkBAIC0xNjI0LDYgKzE2MzIsOCBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbiBlcnJfZnJlZV9vcF9pdGVyOlxuIFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuK2Vycl9wdXRfb3duZXI6XG4rXHRtb2R1bGVfcHV0KGN0eC1cdTAwM2Vvd25lcik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzYwLDYgKzE3NzAsNyBAQCBzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcbiBcdGtmcmVlKGN0eC1cdTAwM2VvcF9pdGVyKTtcbiBcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXHUwMDNlc3RhdGUpO1xuK1x0bW9kdWxlX3B1dChjdHgtXHUwMDNlb3duZXIpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6NDIuMzIzMTUxMTY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2OTQ4ODQxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5ldGxpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGluc3RydWN0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGF0IHNwZWNpZmljIG1vZGlmaWNhdGlvbiBpbiBgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmNgLlxuXG5SaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBuZXcgZmllbGQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHhgOiBgc3RydWN0IG1vZHVsZSAqb3duZXI7YC4gVGhhdCdzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIG1vZHVsZSBvd25lcnNoaXAgaXMgYmVpbmcgdHJhY2tlZCB3aXRoaW4gdGhlIGR1bXAgcG9saWN5IGNvbnRleHQuIExldCdzIGRpZyBpbnRvIGhvdyB0aGF0J3MgYmVpbmcgaGFuZGxlZC5cblxuU3BlY2lmaWNhbGx5LCBpbiBgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCwgSSBzZWUgYGN0eC1cdTAwM2Vvd25lciA9IHJ0LVx1MDAzZW1vZHVsZTtgIHdoaWNoIGFzc2lnbnMgdGhlIG1vZHVsZSBmcm9tIGBydGAgdG8gdGhlIGNvbnRleHQncyBvd25lci4gVGhlbiwgY3J1Y2lhbGx5LCB0aGVyZSdzIGEgYHRyeV9tb2R1bGVfZ2V0KGN0eC1cdTAwM2Vvd25lcilgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gbWFuYWdlIG1vZHVsZSByZWZlcmVuY2UgY291bnRzLiBUaGUgZXJyb3IgcGF0aHMgaW1tZWRpYXRlbHkgY2FsbCBgbW9kdWxlX3B1dGAgb24gdGhlIG93bmVyIHdpdGggYSBgZ290byBlcnJfcHV0X293bmVyO2AsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSByZWZlcmVuY2UgY291bnQgaXMgYmVpbmcgcmVsZWFzZWQgaW4gY2FzZSBvZiBhbiBlYXJseSByZXR1cm4uIFRoaXMgaXMgdGV4dGJvb2sgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLCBwcm90ZWN0aW5nIHRoZSBtb2R1bGUgaWYgdGhlIGR1bXAgcG9saWN5IGVycm9ycy5cblxuVGhlbiwgdGhlcmUncyBgY3RybF9kdW1wcG9saWN5X2RvbmVgLCB3aGVyZSBgbW9kdWxlX3B1dChjdHgtXHUwMDNlb3duZXIpYCBpcyBjYWxsZWQuIFRoYXQncyBjb25maXJtYXRpb246IHRoZSBgb3duZXJgIGZpZWxkIGlzIHVzZWQgdG8gY29ycmVjdGx5IGRlY3JlbWVudCB0aGUgbW9kdWxlJ3MgcmVmZXJlbmNlIGNvdW50IHdoZW4gdGhlIHBvbGljeSBpcyBjb21wbGV0ZS4gSXQgYXBwZWFycyB0aGUgc3lzdGVtIGlzIG1ha2luZyBzdXJlIHRoYXQgaWYgYSBgdHJ5X21vZHVsZV9nZXRgIHN1Y2NlZWRzIGluIGBzdGFydGAsIHRoZSBgbW9kdWxlX3B1dGAgbXVzdCBvY2N1ci4gVGhpcyBlbnN1cmVzIHRoYXQgYSBgbW9kdWxlYCBpc24ndCB1bmxvYWRlZCB3aGlsZSB0aGUgZHVtcCBwb2xpY3kgaXMgYWN0aXZlLlxuXG5Ob3csIEkgbmVlZCB0byBicm9hZGVuIG15IHNjb3BlLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgcmVzdCBvZiB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBmdW5jdGlvbnMgYW5kIGhvdyBgY3R4YCBpcyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCBhbmQgdXNlZC4gSSdsbCBnbyBiYWNrIHRvIGBuZXQvbmV0bGluay9nZW5ldGxpbmsuY2AgYW5kIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgZnJvbSBsaW5lIDE1MTMgdG8gMTc3MCB0byBzZWUgaG93IHRoZSBjb250ZXh0IGlzIHVzZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGlzIGEgY29tcGxldGUgYW5kIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiBhbmQgbm90IGhhdmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZW50aXJlIGxpZmVjeWNsZSBvZiB0aGlzIGNvbnRleHQgdG8gZW5zdXJlIHRoaXMgaXMgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo0OS4wMTgwMzcxMzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL2dlbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MTA6XFx0fVxcbjE1MTE6XFx0XFxuMTUxMjpcXHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xcbjE1MTM6XFx0XFx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xcbjE1MTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpydDtcXG4xNTE1OlxcdFxcdHN0cnVjdCBnZW5sX29wX2l0ZXIgKm9wX2l0ZXI7XFxuMTUxNjpcXHRcXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcXG4xNTE3OlxcdFxcdHUzMiBvcDtcXG4xNTE4OlxcdFxcdHUxNiBmYW1faWQ7XFxuMTUxOTpcXHRcXHR1OCBkdW1wX21hcDoxLFxcbjE1MjA6XFx0XFx0ICAgc2luZ2xlX29wOjE7XFxuMTUyMTpcXHR9O1xcbjE1MjI6XFx0XFxuMTUyMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RybF9wb2xpY3lfcG9saWN5W10gPSB7XFxuMTUyNDpcXHRcXHRbQ1RSTF9BVFRSX0ZBTUlMWV9JRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxuMTUyNTpcXHRcXHRbQ1RSTF9BVFRSX0ZBTUlMWV9OQU1FXVxcdD0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLFxcbjE1MjY6XFx0XFx0XFx0XFx0XFx0ICAgIC5sZW4gPSBHRU5MX05BTVNJWiAtIDEgfSxcXG4xNTI3OlxcdFxcdFtDVFJMX0FUVFJfT1BdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbjE1Mjg6XFx0fTtcXG4xNTI5OlxcdFxcbjE1MzA6XFx0c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjE1MzE6XFx0e1xcbjE1MzI6XFx0XFx0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcXG4xNTMzOlxcdFxcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbjE1MzQ6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cXHUwMDNlaW5mby5hdHRycztcXG4xNTM1OlxcdFxcdGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqcnQ7XFxuMTUzNjpcXHRcXHRzdHJ1Y3QgZ2VubF9vcF9pdGVyIGk7XFxuMTUzNzpcXHRcXHRpbnQgZXJyO1xcbjE1Mzg6XFx0XFxuMTUzOTpcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFxcdTAwM2Ugc2l6ZW9mKGNiLVxcdTAwM2VjdHgpKTtcXG4xNTQwOlxcdFxcbjE1NDE6XFx0XFx0aWYgKCF0YltDVFJMX0FUVFJfRkFNSUxZX0lEXSBcXHUwMDI2XFx1MDAyNiAhdGJbQ1RSTF9BVFRSX0ZBTUlMWV9OQU1FXSlcXG4xNTQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1NDM6XFx0XFxuMTU0NDpcXHRcXHRpZiAodGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pIHtcXG4xNTQ1OlxcdFxcdFxcdGN0eC1cXHUwMDNlZmFtX2lkID0gbmxhX2dldF91MTYodGJbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pO1xcbjE1NDY6XFx0XFx0fSBlbHNlIHtcXG4xNTQ3OlxcdFxcdFxcdHJ0ID0gZ2VubF9mYW1pbHlfZmluZF9ieW5hbWUoXFxuMTU0ODpcXHRcXHRcXHRcXHRubGFfZGF0YSh0YltDVFJMX0FUVFJfRkFNSUxZX05BTUVdKSk7XFxuMTU0OTpcXHRcXHRcXHRpZiAoIXJ0KVxcbjE1NTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTU1MTpcXHRcXHRcXHRjdHgtXFx1MDAzZWZhbV9pZCA9IHJ0LVxcdTAwM2VpZDtcXG4xNTUyOlxcdFxcdH1cXG4xNTUzOlxcdFxcbjE1NTQ6XFx0XFx0cnQgPSBnZW5sX2ZhbWlseV9maW5kX2J5aWQoY3R4LVxcdTAwM2VmYW1faWQpO1xcbjE1NTU6XFx0XFx0aWYgKCFydClcXG4xNTU2OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE1NTc6XFx0XFxuMTU1ODpcXHRcXHRjdHgtXFx1MDAzZXJ0ID0gcnQ7XFxuMTU1OTpcXHRcXHRjdHgtXFx1MDAzZW93bmVyID0gcnQtXFx1MDAzZW1vZHVsZTtcXG4xNTYwOlxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQoY3R4LVxcdTAwM2Vvd25lcikpXFxuMTU2MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xNTYyOlxcdFxcbjE1NjM6XFx0XFx0aWYgKHRiW0NUUkxfQVRUUl9PUF0pIHtcXG4xNTY0OlxcdFxcdFxcdHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkb2l0LCBkdW1wO1xcbjE1NjU6XFx0XFxuMTU2NjpcXHRcXHRcXHRjdHgtXFx1MDAzZXNpbmdsZV9vcCA9IHRydWU7XFxuMTU2NzpcXHRcXHRcXHRjdHgtXFx1MDAzZW9wID0gbmxhX2dldF91MzIodGJbQ1RSTF9BVFRSX09QXSk7XFxuMTU2ODpcXHRcXG4xNTY5OlxcdFxcdFxcdGVyciA9IGdlbmxfZ2V0X2NtZF9ib3RoKGN0eC1cXHUwMDNlb3AsIHJ0LCBcXHUwMDI2ZG9pdCwgXFx1MDAyNmR1bXApO1xcbjE1NzA6XFx0XFx0XFx0aWYgKGVycikge1xcbjE1NzE6XFx0XFx0XFx0XFx0TkxfU0VUX0JBRF9BVFRSKGNiLVxcdTAwM2VleHRhY2ssIHRiW0NUUkxfQVRUUl9PUF0pO1xcbjE1NzI6XFx0XFx0XFx0XFx0Z290byBlcnJfcHV0X293bmVyO1xcbjE1NzM6XFx0XFx0XFx0fVxcbjE1NzQ6XFx0XFxuMTU3NTpcXHRcXHRcXHRpZiAoZG9pdC5wb2xpY3kpIHtcXG4xNTc2OlxcdFxcdFxcdFxcdGVyciA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShcXHUwMDI2Y3R4LVxcdTAwM2VzdGF0ZSxcXG4xNTc3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZG9pdC5wb2xpY3ksXFxuMTU3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRvaXQubWF4YXR0cik7XFxuMTU3OTpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjE1ODA6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcXG4xNTgxOlxcdFxcdFxcdH1cXG4xNTgyOlxcdFxcdFxcdGlmIChkdW1wLnBvbGljeSkge1xcbjE1ODM6XFx0XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbjE1ODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkdW1wLnBvbGljeSxcXG4xNTg1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZHVtcC5tYXhhdHRyKTtcXG4xNTg2OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTU4NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3N0YXRlO1xcbjE1ODg6XFx0XFx0XFx0fVxcbjE1ODk6XFx0XFxuMTU5MDpcXHRcXHRcXHRpZiAoIWN0eC1cXHUwMDNlc3RhdGUpIHtcXG4xNTkxOlxcdFxcdFxcdFxcdGVyciA9IC1FTk9EQVRBO1xcbjE1OTI6XFx0XFx0XFx0XFx0Z290byBlcnJfcHV0X293bmVyO1xcbjE1OTM6XFx0XFx0XFx0fVxcbjE1OTQ6XFx0XFxuMTU5NTpcXHRcXHRcXHRjdHgtXFx1MDAzZWR1bXBfbWFwID0gMTtcXG4xNTk2OlxcdFxcdFxcdHJldHVybiAwO1xcbjE1OTc6XFx0XFx0fVxcbjE1OTg6XFx0XFxuMTU5OTpcXHRcXHRjdHgtXFx1MDAzZW9wX2l0ZXIgPSBrbWFsbG9jX29iaigqY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDI6MDU6NDkuMDE4MjY0NTk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTU1MzQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBmdW5jdGlvbnMuIExldCBtZSByZXZpZXcgbGluZXMgMTYwMC0xNzc1IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGVudGlyZSBjb250ZXh0LiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgaW4gdGhlIGxvZ2ljLiBJIG5lZWQgdG8gb2JzZXJ2ZSBob3cgdGhlIGNvZGUgbWFuYWdlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgY29udHJvbCBwb2xpY3kgcHJpbWl0aXZlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyZmFjZSB3aXRoIHRoZSBwb2xpY3kgbWFuYWdlbWVudCBjb3JlIGFuZCB3aGF0IGtpbmQgb2YgZGF0YSB0aGV5J3JlIGR1bXBpbmcgb3IgdXNpbmcgdG8gYWRqdXN0IHRoZSBjb250cm9sIHByb2Nlc3MuIEFueSBkZXNpZ24gY2hvaWNlcyByZWxhdGVkIHRvIHRoZSBlZmZpY2llbmN5IG9yIHNlY3VyaXR5IG9mIHRoZSBjb250cm9sIHByb2Nlc3MgbmVlZCBzcGVjaWFsIGF0dGVudGlvbi4gQWZ0ZXIgdGhpcyByZXZpZXcsIG15IHdvcmtpbmcgaHlwb3RoZXNpcyBpcyB0byBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGFuZCBvcHRpbWl6YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1MS4xMzM4MDEzMzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL2dlbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjAwOlxcdFxcdGlmICghY3R4LVxcdTAwM2VvcF9pdGVyKSB7XFxuMTYwMTpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjE2MDI6XFx0XFx0XFx0Z290byBlcnJfcHV0X293bmVyO1xcbjE2MDM6XFx0XFx0fVxcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRnZW5sX29wX2l0ZXJfaW5pdChydCwgY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG4xNjA2OlxcdFxcdGN0eC1cXHUwMDNlZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtXFx1MDAzZW9wX2l0ZXIpO1xcbjE2MDc6XFx0XFxuMTYwODpcXHRcXHRmb3IgKGdlbmxfb3BfaXRlcl9pbml0KHJ0LCBcXHUwMDI2aSk7IGdlbmxfb3BfaXRlcl9uZXh0KFxcdTAwMjZpKTsgKSB7XFxuMTYwOTpcXHRcXHRcXHRpZiAoaS5kb2l0LnBvbGljeSkge1xcbjE2MTA6XFx0XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbjE2MTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmRvaXQucG9saWN5LFxcbjE2MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmRvaXQubWF4YXR0cik7XFxuMTYxMzpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjE2MTQ6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zdGF0ZTtcXG4xNjE1OlxcdFxcdFxcdH1cXG4xNjE2OlxcdFxcdFxcdGlmIChpLmR1bXBpdC5wb2xpY3kpIHtcXG4xNjE3OlxcdFxcdFxcdFxcdGVyciA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShcXHUwMDI2Y3R4LVxcdTAwM2VzdGF0ZSxcXG4xNjE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaS5kdW1waXQucG9saWN5LFxcbjE2MTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmR1bXBpdC5tYXhhdHRyKTtcXG4xNjIwOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTYyMTpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3N0YXRlO1xcbjE2MjI6XFx0XFx0XFx0fVxcbjE2MjM6XFx0XFx0fVxcbjE2MjQ6XFx0XFxuMTYyNTpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlc3RhdGUpIHtcXG4xNjI2OlxcdFxcdFxcdGVyciA9IC1FTk9EQVRBO1xcbjE2Mjc6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9vcF9pdGVyO1xcbjE2Mjg6XFx0XFx0fVxcbjE2Mjk6XFx0XFx0cmV0dXJuIDA7XFxuMTYzMDpcXHRcXG4xNjMxOlxcdGVycl9mcmVlX3N0YXRlOlxcbjE2MzI6XFx0XFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cXHUwMDNlc3RhdGUpO1xcbjE2MzM6XFx0ZXJyX2ZyZWVfb3BfaXRlcjpcXG4xNjM0OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuMTYzNTpcXHRlcnJfcHV0X293bmVyOlxcbjE2MzY6XFx0XFx0bW9kdWxlX3B1dChjdHgtXFx1MDAzZW93bmVyKTtcXG4xNjM3OlxcdFxcdHJldHVybiBlcnI7XFxuMTYzODpcXHR9XFxuMTYzOTpcXHRcXG4xNjQwOlxcdHN0YXRpYyB2b2lkICpjdHJsX2R1bXBwb2xpY3lfcHJlcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE2NDE6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMTY0MjpcXHR7XFxuMTY0MzpcXHRcXHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4xNjQ0OlxcdFxcdHZvaWQgKmhkcjtcXG4xNjQ1OlxcdFxcbjE2NDY6XFx0XFx0aGRyID0gZ2VubG1zZ19wdXQoc2tiLCBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4xNjQ3OlxcdFxcdFxcdFxcdCAgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBcXHUwMDI2Z2VubF9jdHJsLFxcbjE2NDg6XFx0XFx0XFx0XFx0ICBOTE1fRl9NVUxUSSwgQ1RSTF9DTURfR0VUUE9MSUNZKTtcXG4xNjQ5OlxcdFxcdGlmICghaGRyKVxcbjE2NTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTY1MTpcXHRcXG4xNjUyOlxcdFxcdGlmIChubGFfcHV0X3UxNihza2IsIENUUkxfQVRUUl9GQU1JTFlfSUQsIGN0eC1cXHUwMDNlZmFtX2lkKSlcXG4xNjUzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE2NTQ6XFx0XFxuMTY1NTpcXHRcXHRyZXR1cm4gaGRyO1xcbjE2NTY6XFx0fVxcbjE2NTc6XFx0XFxuMTY1ODpcXHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNjU5OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbjE2NjA6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKmRvaXQsXFxuMTY2MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqZHVtcGl0KVxcbjE2NjI6XFx0e1xcbjE2NjM6XFx0XFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuMTY2NDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpuZXN0X3BvbCwgKm5lc3Rfb3A7XFxuMTY2NTpcXHRcXHR2b2lkICpoZHI7XFxuMTY2NjpcXHRcXHRpbnQgaWR4O1xcbjE2Njc6XFx0XFxuMTY2ODpcXHRcXHQvKiBza2lwIGlmIHdlIGhhdmUgbm90aGluZyB0byBzaG93ICovXFxuMTY2OTpcXHRcXHRpZiAoIWRvaXQtXFx1MDAzZXBvbGljeSBcXHUwMDI2XFx1MDAyNiAhZHVtcGl0LVxcdTAwM2Vwb2xpY3kpXFxuMTY3MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNjcxOlxcdFxcbjE2NzI6XFx0XFx0aGRyID0gY3RybF9kdW1wcG9saWN5X3ByZXAoc2tiLCBjYik7XFxuMTY3MzpcXHRcXHRpZiAoIWhkcilcXG4xNjc0OlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4xNjc1OlxcdFxcbjE2NzY6XFx0XFx0bmVzdF9wb2wgPSBubGFfbmVzdF9zdGFydChza2IsIENUUkxfQVRUUl9PUF9QT0xJQ1kpO1xcbjE2Nzc6XFx0XFx0aWYgKCFuZXN0X3BvbClcXG4xNjc4OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjE2Nzk6XFx0XFxuMTY4MDpcXHRcXHRuZXN0X29wID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBkb2l0LVxcdTAwM2VjbWQpO1xcbjE2ODE6XFx0XFx0aWYgKCFuZXN0X29wKVxcbjE2ODI6XFx0XFx0XFx0Z290byBlcnI7XFxuMTY4MzpcXHRcXG4xNjg0OlxcdFxcdGlmIChkb2l0LVxcdTAwM2Vwb2xpY3kpIHtcXG4xNjg1OlxcdFxcdFxcdGlkeCA9IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoY3R4LVxcdTAwM2VzdGF0ZSxcXG4xNjg2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBkb2l0LVxcdTAwM2Vwb2xpY3ksXFxuMTY4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZG9pdC1cXHUwMDNlbWF4YXR0cik7XFxuMTY4ODpcXHRcXG4xNjg5OlxcdFxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIENUUkxfQVRUUl9QT0xJQ1lfRE8sIGlkeCkpXFxuMTY5MDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xNjkxOlxcdFxcdH1cXG4xNjkyOlxcdFxcdGlmIChkdW1waXQtXFx1MDAzZXBvbGljeSkge1xcbjE2OTM6XFx0XFx0XFx0aWR4ID0gbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChjdHgtXFx1MDAzZXN0YXRlLFxcbjE2OTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGR1bXBpdC1cXHUwMDNlcG9saWN5LFxcbjE2OTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGR1bXBpdC1cXHUwMDNlbWF4YXR0cik7XFxuMTY5NjpcXHRcXG4xNjk3OlxcdFxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIENUUkxfQVRUUl9QT0xJQ1lfRFVNUCwgaWR4KSlcXG4xNjk4OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjE2OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1MS4xMzM5NDE4NTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0NzEwNzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgSGlzdG9yaWNhbCBgY3RybF9kdW1wcG9saWN5XypgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiB0aGUgYGN0cmxfZHVtcHBvbGljeV8qYCBmdW5jdGlvbnMuIE15IHRoaW5raW5nIGlzIHRvIHpvb20gaW4gb24gdGhlIHBlcmlvZCBiZXR3ZWVuIDE3NTAgYW5kIDE3ODAuIFRoYXQgdGltZWZyYW1lIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0J3MgbGlrZWx5IHRvIHJldmVhbCB0aGUgZXZvbHV0aW9uIG9mIHRoZXNlIHBvbGljaWVzIGR1cmluZyB0aGUgcGVyaW9kIG9mLi4uIHdlbGwsIGxldCdzIGxlYXZlIGl0IGF0IHRoYXQuIEknbSBsb29raW5nIGZvciBhbnkgbWFqb3Igc2hpZnRzLCBpbm5vdmF0aXZlIGltcGxlbWVudGF0aW9ucywgb3IgcGVyaGFwcyBldmVuIHNpZ25pZmljYW50IGxpbWl0YXRpb25zIGluIGhvdyB0aGV5IHdlcmUgZGVmaW5lZCBvciBleGVjdXRlZC4gVGhpcyB3aW5kb3cgc2hvdWxkIHByb3ZpZGUgc3VmZmljaWVudCBjb250ZXh0IHRvIGJ1aWxkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1YmplY3QsIGFuZCBJJ2xsIHNlZSB3aGF0IGl0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjEwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1My4wODEwNTM1OTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL2dlbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NDA6XFx0XFxuMTc0MTpcXHRcXHR3aGlsZSAobmV0bGlua19wb2xpY3lfZHVtcF9sb29wKGN0eC1cXHUwMDNlc3RhdGUpKSB7XFxuMTc0MjpcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbjE3NDM6XFx0XFxuMTc0NDpcXHRcXHRcXHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcXG4xNzQ1OlxcdFxcdFxcdGlmICghaGRyKVxcbjE3NDY6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTc0NzpcXHRcXG4xNzQ4OlxcdFxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIENUUkxfQVRUUl9QT0xJQ1kpO1xcbjE3NDk6XFx0XFx0XFx0aWYgKCFuZXN0KVxcbjE3NTA6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTc1MTpcXHRcXG4xNzUyOlxcdFxcdFxcdGlmIChuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHNrYiwgY3R4LVxcdTAwM2VzdGF0ZSkpXFxuMTc1MzpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzU0OlxcdFxcbjE3NTU6XFx0XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XFxuMTc1NjpcXHRcXG4xNzU3OlxcdFxcdFxcdGdlbmxtc2dfZW5kKHNrYiwgaGRyKTtcXG4xNzU4OlxcdFxcdH1cXG4xNzU5OlxcdFxcbjE3NjA6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbjE3NjE6XFx0XFxuMTc2MjpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuMTc2MzpcXHRcXHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XFxuMTc2NDpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTc2NTpcXHR9XFxuMTc2NjpcXHRcXG4xNzY3OlxcdHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjE3Njg6XFx0e1xcbjE3Njk6XFx0XFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuMTc3MDpcXHRcXG4xNzcxOlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuMTc3MjpcXHRcXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVxcdTAwM2VzdGF0ZSk7XFxuMTc3MzpcXHRcXHRtb2R1bGVfcHV0KGN0eC1cXHUwMDNlb3duZXIpO1xcbjE3NzQ6XFx0XFx0cmV0dXJuIDA7XFxuMTc3NTpcXHR9XFxuMTc3NjpcXHRcXG4xNzc3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZ2VubF9jdHJsX29wc1tdID0ge1xcbjE3Nzg6XFx0XFx0e1xcbjE3Nzk6XFx0XFx0XFx0LmNtZFxcdFxcdD0gQ1RSTF9DTURfR0VURkFNSUxZLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1My4wODEyNDE2NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk2OTk2Mjg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBnZW5lcmljIG5ldGxpbmsgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHJ0YCBmYW1pbHkgYW5kIGl0cyBwb2xpY3kgZHVtcHMuIFRoZSBjb3JlIGlzc3VlIGlzIHRoZSBwb3NzaWJpbGl0eSBvZiBhIG1vZHVsZSBiZWluZyB1bmxvYWRlZCB3aGlsZSBpdHMgcG9saWNpZXMgYXJlIGFjdGl2ZWx5IGJlaW5nIGR1bXBlZCBvdmVyIG11bHRpcGxlIG5ldGxpbmsgY2FsbHMuIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGFuZCByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbS5cblxuVGhlIHBhdGNoIGl0c2VsZiBpbXBsZW1lbnRzIGEgZml4IGJ5IG1hbmFnaW5nIHRoZSBtb2R1bGUncyBsaWZldGltZSBtb3JlIGNhcmVmdWxseSBkdXJpbmcgdGhlc2UgZHVtcCBvcGVyYXRpb25zLiBJdCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBlbnN1cmUgdGhlIG1vZHVsZSBpc24ndCB1bmxvYWRlZCB3aGlsZSB0aGUgZHVtcCBpcyBvbmdvaW5nLiBTcGVjaWZpY2FsbHksIGBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoKWAgdXNlcyBgdHJ5X21vZHVsZV9nZXQoKWAgdG8gdGFrZSBhIHJlZmVyZW5jZSBvbiBgcnQtXHUwMDNlbW9kdWxlYCwgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZSgpYCBvciBhbiBlcnJvciBoYW5kbGVyIChgZXJyX3B1dF9vd25lcmApIHJlbGVhc2VzIHRoZSByZWZlcmVuY2UgdXNpbmcgYG1vZHVsZV9wdXQoKWAuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMsIHRoaXMgcmVhbGx5IGJvaWxzIGRvd24gdG8gbWVtb3J5IHNhZmV0eS4gTXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSBleHBvc2VkIG9yIGZvciBvdGhlciBLTVNBTi1kZXRlY3RhYmxlIGlzc3Vlcy5cblxuSGVyZSdzIG15IHJlYXNvbmluZywgZ29pbmcgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWE6XG5cbiogICAqKkNyaXRlcmlvbiAxIChLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMpOioqIEFic29sdXRlbHkgbm90LiBUaGUgcGF0Y2ggZXhwbGljaXRseSBpbml0aWFsaXplcyBgY3R4LVx1MDAzZW93bmVyYCB3aXRoIHRoZSBtb2R1bGUgcG9pbnRlci4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuXG4qICAgKipDcml0ZXJpb24gMiAoQ29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMpOioqIE5vLiBUaGUgbG9naWMgYXJvdW5kIGBjdHgtXHUwMDNlb3duZXJgIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBlaXRoZXIgaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIG9yIGl0J3Mgbm90IGluaXRpYWxpemVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZCBiZWZvcmUgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSB1c2VkLlxuKiAgICoqQ3JpdGVyaW9uIDMgKENvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMpOioqIE5vLiBUaGUgYGN0eC1cdTAwM2Vvd25lcmAgcG9pbnRlciBpcyBiZWluZyBpbml0aWFsaXplZCwgaXQgaXMgYSBzaW5nbGUgcG9pbnRlciBhbmQgaGFzIGNsZWFyIGluaXRpYWxpc2F0aW9uIG9yIGVhcmx5IHJldHVybi5cbiogICAqKkNyaXRlcmlvbiA0IChVbmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMpOioqIE5vLiBUaGlzIHBhdGNoIHN0cmljdGx5IGZvY3VzZXMgb24gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBkb2Vzbid0IHRvdWNoIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIGludHJvZHVjZSBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgbGVuZ3RoIG9yIG9mZnNldCB2YXJpYWJsZXMuXG5cbkluIGVzc2VuY2UsIHRoaXMgaXMgYSBwdXJlIHJlZmNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IHBhdGNoIGRlc2lnbmVkIHRvIHByb3RlY3QgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSwgYSBwcm9ibGVtIHRoYXQgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycyBhcmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgY29ycmVjdCBkZWNpc2lvbiBoZXJlLlxuXG5UaW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4OCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMjowNTo1OS4wNTEyMDc0NDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyAoYHRyeV9tb2R1bGVfZ2V0KClgIC8gYG1vZHVsZV9wdXQoKWApIGR1cmluZyBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXAgb3BlcmF0aW9ucyAoYGN0cmxfZHVtcHBvbGljeV9zdGFydGAgYW5kIGBjdHJsX2R1bXBwb2xpY3lfZG9uZWApLiBUaGlzIHByZXZlbnRzIHRoZSBtb2R1bGUgaW1wbGVtZW50aW5nIHRoZSBmYW1pbHkgZnJvbSBiZWluZyB1bmxvYWRlZCB3aGlsZSBhIHBvbGljeSBkdW1wIGlzIGluIHByb2dyZXNzLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBtb2R1bGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAocHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgLyBpbnZhbGlkIGNvZGUgb3IgZGF0YSBhY2Nlc3Mgb24gbW9kdWxlIHVubG9hZCksIHdoaWNoIGlzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGRhdGEgZXhwb3N1cmUsIHBhZGRpbmcgbGVha3MgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIChgdHJ5X21vZHVsZV9nZXQoKWAgLyBgbW9kdWxlX3B1dCgpYCkgZHVyaW5nIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcCBvcGVyYXRpb25zIChgY3RybF9kdW1wcG9saWN5X3N0YXJ0YCBhbmQgYGN0cmxfZHVtcHBvbGljeV9kb25lYCkuIFRoaXMgcHJldmVudHMgdGhlIG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIGZhbWlseSBmcm9tIGJlaW5nIHVubG9hZGVkIHdoaWxlIGEgcG9saWN5IGR1bXAgaXMgaW4gcHJvZ3Jlc3MuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIG1vZHVsZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAvIGludmFsaWQgY29kZSBvciBkYXRhIGFjY2VzcyBvbiBtb2R1bGUgdW5sb2FkKSwgd2hpY2ggaXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgZGF0YSBleHBvc3VyZSwgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowgmj9r[1] Phase: Succeeded StartedAt: 2026-09-03 02:06:20 +0000 UTC FinishedAt: 2026-09-03 02:06:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 02:06:20 +0000 UTC FinishedAt: 2026-09-03 02:06:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2] Phase: Succeeded StartedAt: 2026-09-03 02:06:20 +0000 UTC FinishedAt: 2026-09-03 05:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 02:06:20 +0000 UTC FinishedAt: 2026-09-03 05:47:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 02:06:20 +0000 UTC FinishedAt: 2026-09-03 02:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 02:06:20 +0000 UTC FinishedAt: 2026-09-03 02:06:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowgmj9r/series-workflowgmj9r-convert-artifact-3163925017/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 02:06:30 +0000 UTC FinishedAt: 2026-09-03 02:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 02:06:30 +0000 UTC FinishedAt: 2026-09-03 02:22:35 +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:*9fe2fc24-2d4d-4e02-b04c-78b21c1bf06a,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-workflowgmj9r/series-workflowgmj9r-convert-artifact-3163925017/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": "3f9b9b6d-b50a-4d28-b2e0-abeb26fb730d", "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-workflowgmj9r/series-workflowgmj9r-build-action-3046034871/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 02:06:30 +0000 UTC FinishedAt: 2026-09-03 02:22:25 +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:*9fe2fc24-2d4d-4e02-b04c-78b21c1bf06a,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-workflowgmj9r/series-workflowgmj9r-convert-artifact-3163925017/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": "3f9b9b6d-b50a-4d28-b2e0-abeb26fb730d", "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-workflowgmj9r/series-workflowgmj9r-build-action-3046034871/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 02:22:35 +0000 UTC FinishedAt: 2026-09-03 02:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 02:22:35 +0000 UTC FinishedAt: 2026-09-03 02:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 02:22:35 +0000 UTC FinishedAt: 2026-09-03 02:22:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 02:22:35 +0000 UTC FinishedAt: 2026-09-03 02:22:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowgmj9r/series-workflowgmj9r-convert-artifact-4185965548/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 02:22:45 +0000 UTC FinishedAt: 2026-09-03 02:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 02:22:45 +0000 UTC FinishedAt: 2026-09-03 02:24:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f9b9b6d-b50a-4d28-b2e0-abeb26fb730d,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-workflowgmj9r/series-workflowgmj9r-build-action-3046034871/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-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 02:24:39 +0000 UTC FinishedAt: 2026-09-03 02:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 02:24:39 +0000 UTC FinishedAt: 2026-09-03 02:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 02:24:39 +0000 UTC FinishedAt: 2026-09-03 02:41:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 02:24:39 +0000 UTC FinishedAt: 2026-09-03 02:41:04 +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:*9fe2fc24-2d4d-4e02-b04c-78b21c1bf06a,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-workflowgmj9r/series-workflowgmj9r-convert-artifact-4185965548/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": "169fc79d-5e6e-4df5-b003-684eeef3c9fc", "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-workflowgmj9r/series-workflowgmj9r-build-action-134716040/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 02:24:39 +0000 UTC FinishedAt: 2026-09-03 02:40:54 +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:*9fe2fc24-2d4d-4e02-b04c-78b21c1bf06a,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-workflowgmj9r/series-workflowgmj9r-convert-artifact-4185965548/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": "169fc79d-5e6e-4df5-b003-684eeef3c9fc", "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-workflowgmj9r/series-workflowgmj9r-build-action-134716040/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 02:41:04 +0000 UTC FinishedAt: 2026-09-03 02:41:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 02:41:04 +0000 UTC FinishedAt: 2026-09-03 02:41:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 02:41:04 +0000 UTC FinishedAt: 2026-09-03 02:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 02:41:04 +0000 UTC FinishedAt: 2026-09-03 02:42:50 +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:*169fc79d-5e6e-4df5-b003-684eeef3c9fc,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-workflowgmj9r/series-workflowgmj9r-build-action-134716040/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-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 02:43:00 +0000 UTC FinishedAt: 2026-09-03 05:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 02:43:00 +0000 UTC FinishedAt: 2026-09-03 05:47:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"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:*3f9b9b6d-b50a-4d28-b2e0-abeb26fb730d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*169fc79d-5e6e-4df5-b003-684eeef3c9fc,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-workflowgmj9r/series-workflowgmj9r-build-action-3046034871/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-workflowgmj9r/series-workflowgmj9r-build-action-134716040/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 02:43:00 +0000 UTC FinishedAt: 2026-09-03 02:43:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 02:43:00 +0000 UTC FinishedAt: 2026-09-03 02:43:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"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-workflowgmj9r/series-workflowgmj9r-convert-artifact-674826709/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 02:43:00 +0000 UTC FinishedAt: 2026-09-03 02:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 02:43:00 +0000 UTC FinishedAt: 2026-09-03 02:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 02:43:00 +0000 UTC FinishedAt: 2026-09-03 02:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 02:43:10 +0000 UTC FinishedAt: 2026-09-03 05:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmj9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy_start","ctrl_dumppolicy_done","ctrl_dumppolicy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8389933-86e7-4ce7-9fb9-6c6ba4b4b0ee","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 02:43:10 +0000 UTC FinishedAt: 2026-09-03 05:47:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f9b9b6d-b50a-4d28-b2e0-abeb26fb730d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*169fc79d-5e6e-4df5-b003-684eeef3c9fc,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-workflowgmj9r/series-workflowgmj9r-build-action-3046034871/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-workflowgmj9r/series-workflowgmj9r-build-action-134716040/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-workflowgmj9r/series-workflowgmj9r-convert-artifact-674826709/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,}