Name: series-workflowx64gp Phase: Succeeded StartedAt: 2026-09-13 10:16:37 +0000 UTC FinishedAt: 2026-09-13 14:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[0] Phase: Succeeded StartedAt: 2026-09-13 10:16:37 +0000 UTC FinishedAt: 2026-09-13 10:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 10:16:37 +0000 UTC FinishedAt: 2026-09-13 10:38:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "22120d40-dffd-489e-8a5c-b1c77b68a852" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "collapse_file", "collapse_scan_file", "collapse_single_pmd", "madvise_collapse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "cee9395acd8043be0644b25c34bfa86623f2b935", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW0va2h1Z2VwYWdlZC5jIHRvIGFkanVzdCBsb2NraW5nIG9yZGVyIGluIGNvbGxhcHNlX2ZpbGUoKSBieSBhY3F1aXJpbmcgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKCkgcHJpb3IgdG8gdGFraW5nIGZvbGlvIGxvY2tzLCBhbmQgaW52b2tlcyBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpIGluc3RlYWQgb2YgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggbG9ja2luZyBzeW5jaHJvbml6YXRpb24gYW5kIHBhZ2UgY2FjaGUgcmVhZGFoZWFkIGJvdW5kcy4gVGhlIHJlYWRhaGVhZF9jb250cm9sIHN0cnVjdHVyZSAocmFjdGwpIGlzIGluaXRpYWxpemVkIHVzaW5nIERFRklORV9SRUFEQUhFQUQgKEM5OSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBlbnN1cmluZyBhbGwgdW5tZW50aW9uZWQgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgbW9kaWZpZWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gTG9ja2luZyBpc3N1ZXMgYW5kIGRlYWRsb2NrcyBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBkZWJ1ZyBrZXJuZWxzIChLQVNBTiBidWlsZHMpLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDViOWQyMTE2NWE3MWZlM2FlN2I2MzBiMWExNmY1ZmNkM2QxNGJlYTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozNTowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDExZmY5OGQ1NWM3NmUuLjY5MGNjYmNkZjU5MzggMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTIyNjcsNiAmIzQzOzIyNjcsMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQobWFwcGluZykpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFKHN0YXJ0IFx1MDAyNiAoSFBBR0VfUE1EX05SIC0gMSkpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4mIzQzO1x0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghaXNfc2htZW0pXG4mIzQzO1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4mIzQzO1xuIFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFx1MDAyNm5ld19mb2xpbywgbW0sIGNjLCBIUEFHRV9QTURfT1JERVIpO1xuIFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTIzMzcsMTAgJiM0MzsyMzQ0LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XHQvKiAhaXNfc2htZW0gKi9cbiBcdFx0XHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuJiM0MztcdFx0XHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4mIzQzO1x0XHRcdFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cdTAwM2Vob3N0KSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgUEFHRV9TSVpFKTtcbiYjNDM7XG4gXHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuLVx0XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4tXHRcdFx0XHRcdFx0XHQgIGZpbGUsIGluZGV4LFxuLVx0XHRcdFx0XHRcdFx0ICBlbmQgLSBpbmRleCk7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBpbnZhbGlkYXRlX2xvY2sgaGVsZCBhYm92ZTsgZG9uJiMzOTt0IHJldGFrZSBpdC5cbiYjNDM7XHRcdFx0XHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxuJiM0MztcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0aWYgKGluZGV4IFx1MDAzYyBlb2YpXG4mIzQzO1x0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbiYjNDM7XHRcdFx0XHRcdFx0bWluKGVuZCwgZW9mKSAtIGluZGV4LCAwKTtcbiBcdFx0XHRcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cbiBcdFx0XHRcdGxydV9hZGRfZHJhaW4oKTtcbiBcdFx0XHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKG1hcHBpbmcsIGluZGV4KTtcbkBAIC0yNjcyLDYgJiM0MzsyNjg5LDggQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XG4gXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbiBvdXQ6XG4mIzQzO1x0aWYgKCFpc19zaG1lbSlcbiYjNDM7XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG4gXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XG4gXHRyZXR1cm4gcmVzdWx0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gY29sbGFwc2VfZmlsZSgpIGJ5IGFjcXVpcmluZyBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKSBhY3Jvc3MgZm9saW8gYWxsb2NhdGlvbiBhbmQgdGhlIHBhZ2Ugc2Nhbm5pbmcgbG9vcCwgYW5kIHN3aXRjaGluZyB0aGUgcmVhZGFoZWFkIG1lY2hhbmlzbSB0byBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLiBUaGlzIGNoYW5nZXMgc3luY2hyb25pemF0aW9uIGludmFyaWFudHMsIGxvY2sgb3JkZXJpbmcgKGludmFsaWRhdGVfbG9jayB2cyBmb2xpbyBsb2NrLCB0cnVuY2F0ZSwgYW5kIG1lbW9yeSByZWNsYWltIGR1cmluZyBhbGxvY2F0aW9uKSwgYW5kIHJlYWRhaGVhZCBib3VuZGluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciB0aGUga2h1Z2VwYWdlZCBkYWVtb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjlkMjExNjVhNzFmZTNhZTdiNjMwYjFhMTZmNWZjZDNkMTRiZWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6MzU6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmMKaW5kZXggMTFmZjk4ZDU1Yzc2ZS4uNjkwY2NiY2RmNTkzOCAxMDA2NDQKLS0tIGEvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuYwpAQCAtMjI2Nyw2ICYjNDM7MjI2NywxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJVk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSAmYW1wOyZhbXA7ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTsKIAlWTV9XQVJOX09OX09OQ0Uoc3RhcnQgJmFtcDsgKEhQQUdFX1BNRF9OUiAtIDEpKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3cKJiM0MzsJICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFpc19zaG1lbSkKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsKJiM0MzsKIAlyZXN1bHQgPSBhbGxvY19jaGFyZ2VfZm9saW8oJmFtcDtuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTsKIAlpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkKIAkJZ290byBvdXQ7CkBAIC0yMzM3LDEwICYjNDM7MjM0NCwyMCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQl9CiAJCX0gZWxzZSB7CS8qICFpc19zaG1lbSAqLwogCQkJaWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHsKJiM0MzsJCQkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgJmFtcDtmaWxlLSZndDtmX3JhLAomIzQzOwkJCQkJCSAgbWFwcGluZywgaW5kZXgpOwomIzQzOwkJCQlwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLSZndDtob3N0KSwKJiM0MzsJCQkJCQkJICAgIFBBR0VfU0laRSk7CiYjNDM7CiAJCQkJeGFzX3VubG9ja19pcnEoJmFtcDt4YXMpOwotCQkJCXBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgJmFtcDtmaWxlLSZndDtmX3JhLAotCQkJCQkJCSAgZmlsZSwgaW5kZXgsCi0JCQkJCQkJICBlbmQgLSBpbmRleCk7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LgomIzQzOwkJCQkgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZAomIzQzOwkJCQkgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKGluZGV4ICZsdDsgZW9mKQomIzQzOwkJCQkJcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoJmFtcDtyYWN0bCwKJiM0MzsJCQkJCQltaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApOwogCQkJCS8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi8KIAkJCQlscnVfYWRkX2RyYWluKCk7CiAJCQkJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpOwpAQCAtMjY3Miw2ICYjNDM7MjY4OSw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlmb2xpb191bmxvY2sobmV3X2ZvbGlvKTsKIAlmb2xpb19wdXQobmV3X2ZvbGlvKTsKIG91dDoKJiM0MzsJaWYgKCFpc19zaG1lbSkKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwogCVZNX0JVR19PTighbGlzdF9lbXB0eSgmYW1wO3BhZ2VsaXN0KSk7CiAJdHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS0hVR0VQQUdFRCBGaWxlIENvbGxhcHNlIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL2todWdlcGFnZWQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNvbGxhcHNlX2ZpbGUoKWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgZnJvbSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIHBlcnNwZWN0aXZlLiBUaGlzIGRlYWxzIHdpdGggVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgZmlsZS1iYWNrZWQgcG9ydGlvbiBvZiBUSFAgY29sbGFwc2UsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSB0aGluZ3MgbGlrZSBgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpYCBvciB0aGUga2h1Z2VwYWdlZCBkYWVtb24uCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUsIGFuZCBpdCBzZWVtcyBsaWtlbHkgdGhhdCBpdCBpcywgZ2l2ZW4gdGhhdCBtYWR2aXNlIGNhbiBjYWxsIHRoaXMgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGluIGBtbS9raHVnZXBhZ2VkLmNgLCBhbmQgc3l6a2FsbGVyIGNhbiBsaWtlbHkgdHJpZ2dlciBpdCB2aWEgYG1hZHZpc2VgIG9yIGtodWdlcGFnZWQgc3lzZnMvZGFlbW9uIG9uIGZpbGUgbWFwcGluZ3MuCgpOb3csIHRoZSBqdWljeSBwYXJ0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUgbG9ja2luZyBzdHJhdGVneS4gV2Ugc2VlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgIGJlaW5nIHRha2VuICpiZWZvcmUqIGZvbGlvIGFsbG9jYXRpb24gKGBhbGxvY19jaGFyZ2VfZm9saW9gKSBhbmQgdGhlIG1haW4gbG9vcCB3aXRoaW4gYGNvbGxhcHNlX2ZpbGUoKWAuIFRoaXMgcmVwbGFjZXMgdGhlIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3aXRoIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAuIFRoaXMgc2hpZnQgaW4gbG9ja2luZyBvcmRlciBhbmQgdGhlIGluY2x1c2lvbiBvZiByZWFkYWhlYWQgd2l0aGluIHRoZSBsb2NrZWQgc2VjdGlvbiBpcyBhIHJlZCBmbGFnLCBidXQgYSBwb3RlbnRpYWxseSB2ZXJ5IGludGVyZXN0aW5nIG9uZS4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJhY2luZyB3aXRoIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBwcmltYXJ5IGFyZWEgb2YgY29uY2VybiBsaWVzIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdHJ1bmNhdGUsIHJlYWRhaGVhZCwgZm9saW8gbG9ja3MsIHRoZSBpbnZhbGlkYXRlIGxvY2ssIGFuZCB0aGUgYGFsbG9jX2NoYXJnZV9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmLiBDb3VsZCBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBpdHNlbGYgdHJpZ2dlciBtZW1vcnkgcmVjbGFtYXRpb24sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcmVjdXJzaW9uIG9yIGxvY2tkZXAgaXNzdWVzPyBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBiYXR0bGVncm91bmQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHN1Y2ggY2hhbmdlcyBhcmUgYWxtb3N0IGFsd2F5cyB3b3J0aCBjYXJlZnVsIGZ1enppbmcuIFRoaXMgcmVnaW9uIGlzIGEgaG90YmVkIG9mIHBvdGVudGlhbCBkZWFkbG9ja3MsIHJhY2UgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucy4gV2UmIzM5O3ZlIGdvdCBmb2xpbyBsb2NrcywgcmVhZGFoZWFkLCBhbmQgbm93IGBpbnZhbGlkYXRlX2xvY2tgIGFsbCBpbiB0aGUgbWl4LCB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIEZTIHJlLWVudHJ5LgoKVGhlIGZhY3QgdGhhdCB3ZSBhcmUgaG9sZGluZyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCAqZHVyaW5nKiB0aGUgYGFsbG9jX2NoYXJnZV9mb2xpb2AgY2FsbCBpcyB3aGF0IHJlYWxseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoYXTigJlzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGNvbWJpbmF0aW9uIGFuZCBkZWZpbml0ZWx5IHN1Z2dlc3RzIHRoaXMgaXMgd29ydGggYSBkZWVwZXIgbG9vay4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgc3BlY2lmaWMgc2V0dGluZ3MgdGhhdCBpbmZsdWVuY2UgdGhpcyBjb2RlIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgdG8gdHJpZ2dlciBgY29sbGFwc2VfZmlsZWAgYW5kIGhvdyB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjMtLyoqXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMjQ5LVx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjk0LVx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG5tbS9raHVnZXBhZ2VkLmM6MjY5NTpcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbm1tL2todWdlcGFnZWQuYy0yNjk2LVx0cmV0dXJuIHJlc3VsdDtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjY5OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI3OTYtXHRcdH0gZWxzZSB7XG5tbS9raHVnZXBhZ2VkLmM6Mjc5NzpcdFx0XHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTI3OTgtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjEwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBIdWdlIFBhZ2UgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byB1bmRlcnN0YW5kIGhvdyBga2h1Z2VwYWdlZC5jYCBmaXRzIGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgYWx3YXlzIHRoZSBzYW1lOiBsZXQmIzM5O3MgcGlucG9pbnQgd2hlcmUgdGhpcyBjcnVjaWFsIGZpbGUgaXMgYWN0dWFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBLbm93aW5nIGl0cyBsb2NhdGlvbiBnaXZlcyBhIGNyaXRpY2FsIGNsdWUgYWJvdXQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQuIFNvLCBmaXJzdCB1cCwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgc3BvdCB3aGVyZSB0aGUgY29tcGlsYXRpb24gcnVsZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMsIGluY2x1ZGluZyBga2h1Z2VwYWdlZC5jYCwgcmVzaWRlLiBGcm9tIHRoZXJlLCBJIG5lZWQgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZ3VhcmQgaXRzIGluY2x1c2lvbi4gT2Z0ZW4sIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIGEgZmlsZSBpcyBkcml2ZW4gYnkgYSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWcgb3B0aW9uLiBUaGVzZSBvcHRpb25zIGFjdCBhcyBndWFyZCByYWlscywgZGV0ZXJtaW5pbmcgaWYgdGhlIHNvdXJjZSBjb2RlIGdldHMgY29tcGlsZWQgb3Igbm90IGJhc2VkIG9uIHRoZSB1c2VyJiMzOTtzIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBga2h1Z2VwYWdlZC5vYCBhbmQgaXRzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGZvciBga2h1Z2VwYWdlZC5vYC4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBOb3csIGdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbHVya2luZyBpbiB0aGUgYGtodWdlcGFnZWQuY2Agb3IsIGZvciB0aGF0IG1hdHRlciwgd2l0aGluIHRoZSBgY29sbGFwc2VfZmlsZWAgY29kZS4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBhZnRlciBhbGwuCgpUaW1lIHRvIHN5c3RlbWF0aWNhbGx5IGFuYWx5emUgdGhlIGNvZGUuIEkmIzM5O2xsIGluaXRpYXRlIGEgc2VhcmNoIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgdXNlcyBvZiBgI2lmZGVmYCBvciwgbW9yZSBkaXJlY3RseSwgYW55IG1lbnRpb25zIG9mIGBDT05GSUdfYCBpbnNpZGUgdGhlIGBtbS9raHVnZXBhZ2VkLmNgIGZpbGUuIFRoaXMgc2hvdWxkIGV4cG9zZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGVpdGhlciBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRoYXQgYXJlIGVzc2VudGlhbCBmb3IgdGhlIHByb3BlciBvcGVyYXRpb24gb2YgYGtodWdlcGFnZWRgLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MTM2PXN0YXRpYyBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIGtodWdlcGFnZWRfc2NhbiA9IHtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTM5LVxubW0va2h1Z2VwYWdlZC5jOjE0MDojaWZkZWYgQ09ORklHX1NZU0ZTXG5tbS9raHVnZXBhZ2VkLmMtMTQxLXN0YXRpYyBzc2l6ZV90IHNjYW5fc2xlZXBfbWlsbGlzZWNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jPTM0NT1zdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGtodWdlcGFnZWRfYXR0cl9ncm91cCA9IHtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzQ4LX07XG5tbS9raHVnZXBhZ2VkLmM6MzQ5OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cbm1tL2todWdlcGFnZWQuYy0zNTAtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwMzM9c3RhdGljIGlubGluZSBnZnBfdCBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2sodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTAzNy1cbm1tL2todWdlcGFnZWQuYzoxMDM4OiNpZmRlZiBDT05GSUdfTlVNQVxubW0va2h1Z2VwYWdlZC5jLTEwMzktc3RhdGljIGludCBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgVEhQIGFuZCBSZWFkLUFoZWFkIFNldHRpbmdzKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gc2VlIGhvdyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaGF2aW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGNoZWNrIGlzIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBjb25uZWN0aW9uIHRvIGBSRUFEX0FIRUFEYCBpcyBhIGdvb2QgbGVhZC4gSSBzaG91bGQgZ28gZGlnZ2luZyBpbnRvIHRoZSBgUkVBRF9BSEVBRGAgc2V0dGluZ3MsIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzZXR1cC4gVGhlIGBtbS9LY29uZmlnYCBmaWxlIGlzIHRoZSBnby10byBwbGFjZSBmb3IgYWxsIG1lbW9yeS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gaXQmIzM5O3MgdGhlIG9idmlvdXMgY2hvaWNlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHJlbGF0ZWQgdG8gVEhQIGFuZCBwb3NzaWJseSByZWxhdGVkIHRvIGBSRUFEX0FIRUFEYCBhcyB3ZWxsLiBUaGF0IGlzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHRpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODM0LVxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzYtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBLY29uZmlnIGVudHJ5OgoKKipBbmFseXppbmcgdGhlIFRSQU5TUEFSRU5UX0hVR0VQQUdFIEtjb25maWcgRW50cnkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGRlcGVuZGVuY2llcy4gV2hhdCBhcmNocyBpcyB0aGlzIHJlbGV2YW50IHRvPyBXaGF0IG90aGVyIGZlYXR1cmVzIG1pZ2h0IGl0IGludGVyYWN0IHdpdGgsIHBvc2l0aXZlbHkgb3IgbmVnYXRpdmVseT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGRlZmF1bHQgdmFsdWVzIG9yIGltcGxpY2F0aW9ucyBvZiBub3Qgc2VsZWN0aW5nIGl0PyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkNvbmRpdGlvbmFsIGRlcGVuZGVuY2llczoqKiBJcyBpdCBiYXNlZCBvbiBjZXJ0YWluIGhhcmR3YXJlIGZlYXR1cmVzIChlLmcuLCBzcGVjaWZpYyBDUFUgZXh0ZW5zaW9ucywgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCBjYXBhYmlsaXRpZXMpIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4gQW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0JiMzOTtzICpub3QqIGNvbXBhdGlibGUgd2l0aD8KKiAgICoqU3ltYm9sIGRlZmluaXRpb25zOioqIFdoYXQgZG9lcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFjdHVhbGx5ICpkbyogaW4gdGhlIGNvZGUsIGFuZCBob3cgZG9lcyBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQgY2hhbmdlIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWw/CiogICAqKkhlbHAgdGV4dDoqKiBUaGUgaGVscCB0ZXh0IHdpbGwgdGVsbCBtZSB0aGUgZnVuZGFtZW50YWwgcHVycG9zZSBhbmQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIGEgY2xlYXIgZGVmaW5pdGlvbiBvZiB3aGF0IGl0IGFjaGlldmVzLgoqICAgKipEZWZhdWx0IHZhbHVlczoqKiBBcmUgdGhlcmUgZGVmYXVsdCB2YWx1ZXMsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSB0aGV5IG1ha2luZz8gTWlnaHQgdGhlc2UgbmVlZCB0byBiZSBvdmVycmlkZGVuIGZvciBjZXJ0YWluIHVzZSBjYXNlcywgbGlrZSBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIG1lbW9yeSBpcyBtb3JlIHRpZ2h0bHkgY29uc3RyYWluZWQ/CiogICAqKlRyaWdnZXJzIGZvciBlbmFibGVtZW50KiogV2hhdCBzZXRzIHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgaXQgdG8gZW5hYmxlPwoqICAgKipJbXBsaWNhdGlvbnMqKjogd2hhdCBhcmUgdGhlIGJlbmVmaXRzIG9mIHRoaXMgb3B0aW9uLCBhbmQgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIGRvd25zaWRlcywgdHJhZGVvZmZzLCBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSB3aWxsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSB0cmFkZW9mZnMgYXJvdW5kIHRoaXMuCiogICAqKlJlbGV2YW50IGNvZGUgc2VjdGlvbnMqKjogV2hhdCBjb2RlIHNlY3Rpb25zIGFuZCBoZWFkZXIgZmlsZXMgYXJlIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uPyBVbmRlcnN0YW5kaW5nIHRoaXMgcXVpY2tseSBnaXZlcyBtZSBjbHVlcyBhYm91dCBob3cgcGVydmFzaXZlIHRoZSBpbXBhY3QgaXMuCgpJIGV4cGVjdCB0byBmaW5kIGluZm9ybWF0aW9uIG9uIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5LCBpdHMgcGVyZm9ybWFuY2UgaW1wYWN0LCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgS2NvbmZpZyBlbnRyeSB3aXRoIHRoZSByZWxldmFudCBrZXJuZWwgc291cmNlIGNvZGUgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBoZWxwcyB0byBkZXRlcm1pbmUgaWYgdGhlIGRlc2NyaXB0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZnVsbHkgY292ZXIgYWxsIGNvbnNpZGVyYXRpb25zLiBJIG1pZ2h0IGV2ZW4gbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBvdGhlciByZWxhdGVkIEtjb25maWdzIGxpa2UgYEhVR0VUTEJfUEFHRWAsIGBIVUdFVExCX1BBR0VfU0laRWAsIGFuZCBhbnkgTlVNQS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGZvciBhIGhvbGlzdGljIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODM1Olx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDgzNjpcdFx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4gODM3Olx0XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRcbiA4Mzg6XHRcdHNlbGVjdCBDT01QQUNUSU9OXG4gODM5Olx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4gODQwOlx0XHRzZWxlY3QgTU1fSURcbiA4NDE6XHRcdGhlbHBcbiA4NDI6XHRcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuIDg0MzpcdFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXG4gODQ0Olx0XHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxuIDg0NTpcdFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxuIDg0NjpcdFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXG4gODQ3Olx0XHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cbiA4NDg6XHRcbiA4NDk6XHRcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXG4gODUwOlx0XG4gODUxOlx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4NTI6XHRcbiA4NTM6XHRjaG9pY2VcbiA4NTQ6XHRcdHByb21wdCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXCYjMzQ7XG4gODU1Olx0XHRkZWZhdWx0IFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xuIDg1NjpcdFx0aGVscFxuIDg1NzpcdFx0ICBTZWxlY3RzIHRoZSBzeXNmcyBkZWZhdWx0cyBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydC5cbiA4NTg6XHRcbiA4NTk6XHRcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbiA4NjA6XHRcdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbiA4NjE6XHRcdGhlbHBcbiA4NjI6XHRcdCAgRW5hYmxpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgYWx3YXlzLCBjYW4gaW5jcmVhc2UgdGhlXG4gODYzOlx0XHQgIG1lbW9yeSBmb290cHJpbnQgb2YgYXBwbGljYXRpb25zIHdpdGhvdXQgYSBndWFyYW50ZWVkXG4gODY0Olx0XHQgIGJlbmVmaXQgYnV0IGl0IHdpbGwgd29yayBhdXRvbWF0aWNhbGx5IGZvciBhbGwgYXBwbGljYXRpb25zLlxuIDg2NTpcdFxuIDg2NjpcdFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcbiA4Njc6XHRcdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4gODY4Olx0XHRoZWxwXG4gODY5Olx0XHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIG1hZHZpc2UsIHdpbGwgb25seSBwcm92aWRlIGFcbiA4NzA6XHRcdCAgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYmVuZWZpdCB0byB0aGUgYXBwbGljYXRpb25zIHVzaW5nXG4gODcxOlx0XHQgIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgYnV0IGl0IHdvbiYjMzk7dCByaXNrIHRvIGluY3JlYXNlIHRoZVxuIDg3MjpcdFx0ICBtZW1vcnkgZm9vdHByaW50IG9mIGFwcGxpY2F0aW9ucyB3aXRob3V0IGEgZ3VhcmFudGVlZFxuIDg3MzpcdFx0ICBiZW5lZml0LlxuIDg3NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYGNvbGxhcHNlX2ZpbGVgIG9yIHBlcmhhcHMgc2V0dGluZ3MgcmVsYXRlZCB0byBmaWxlLWJhY2tlZCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggdG8gZW5zdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nLgoKSSYjMzk7bGwgcXVlcnkgZm9yIGEgZmV3IGtleSB0ZXJtcy4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYFJFQURBSEVBRF9NTUFQYCwgYG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnRgLCBhbmQgYGNvbGxhcHNlX2ZpbGVgLiBXaGlsZSBJJiMzOTttIGF0IGl0LCBJJiMzOTtsbCBhbHNvIGFkZCBgUkVBRE9OTFlfVEhQYCB0byB0aGUgc2VhcmNoIHBhcmFtZXRlcnMuIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkLCBicm9hZCBpbml0aWFsIHNlYXJjaCB0byBjb3ZlciB0aGUgbW9zdCBsaWtlbHkgYXJlYXMuCgpSaWdodCwgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgYG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnRgLCBqdXN0IHRvIGdldCB0aGluZ3MgZ29pbmcuIFRoaXMgd2lsbCBob3BlZnVsbHkgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD01MDc9c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MTYtLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1MTc6ICogbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydCgpIC0gQ2hlY2sgaWYgYSBtYXBwaW5nIHN1cHBvcnRzIFBNRC1zaXplZCBmb2xpb1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNTE4LSAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzc19zcGFjZVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUyNy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1Mjg6c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01Mjkte1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUzNi0jZWxzZVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NTM3OnN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNTM4LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTk1PXN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3RocF9lbmFibGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA2LVxubW0vaHVnZV9tZW1vcnkuYzoxMDc6XHRpZiAoIW1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKSlcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjY2LVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MjI2NzpcdFZNX1dBUk5fT05fT05DRSghaXNfc2htZW0gXHUwMDI2XHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcbm1tL2todWdlcGFnZWQuYy0yMjY4LVx0Vk1fV0FSTl9PTl9PTkNFKHN0YXJ0IFx1MDAyNiAoSFBBR0VfUE1EX05SIC0gMSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODQ5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUGFnZW1hcCBIZWFkZXIqKgoKT2theSwgdGltZSB0byBnZXQgc3BlY2lmaWMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCBoZWFkZXIgZmlsZS4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBsaWtlbHkgY2VudGVyZWQgYXJvdW5kIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgcGFnZSBtYXBwaW5nIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGF0IGxpbmUgNTE3IGlzIGdvaW5nIHRvIGJlIGEga2V5IHBvaW50LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIGFudGljaXBhdGUgdGhpcyBsaW5lIGNvbnRhaW5pbmcgZGVjbGFyYXRpb25zIG9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gcGVyaGFwcyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIGZvbGlvIGhhbmRsaW5nLCBvciBtYXliZSBldmVuIHNvbWUgY3JpdGljYWwgbG9ja2luZyBtZWNoYW5pc21zIHdpdGhpbiB0aGUgcGFnZSBjYWNoZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzZWN0aW9uIGRlYWxzIHdpdGguIFRpbWUgdG8gY2hlY2sgaXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTY6XHQvKipcbiA1MTc6XHQgKiBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KCkgLSBDaGVjayBpZiBhIG1hcHBpbmcgc3VwcG9ydHMgUE1ELXNpemVkIGZvbGlvXG4gNTE4Olx0ICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzX3NwYWNlXG4gNTE5Olx0ICpcbiA1MjA6XHQgKiBXaGlsZSBzb21lIG1hcHBpbmdzIHN1cHBvcnQgbGFyZ2UgZm9saW9zLCB0aGV5IG1pZ2h0IG5vdCBzdXBwb3J0IFBNRC1zaXplZFxuIDUyMTpcdCAqIGZvbGlvcy4gVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBhIG1hcHBpbmcgc3VwcG9ydHMgUE1ELXNpemVkIGZvbGlvcy5cbiA1MjI6XHQgKiBGb3IgZXhhbXBsZSwga2h1Z2VwYWdlZCBuZWVkcyB0aGlzIGluZm9ybWF0aW9uIGJlZm9yZSBhdHRlbXB0aW5nIHRvXG4gNTIzOlx0ICogY29sbGFwc2luZyBUSFBzLlxuIDUyNDpcdCAqXG4gNTI1Olx0ICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuIDUyNjpcdCAqL1xuIDUyNzpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA1Mjg6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiA1Mjk6XHR7XG4gNTMwOlx0XHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbiA1MzE6XHRcdFZNX1dBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyltYXBwaW5nIFx1MDAyNiBGT0xJT19NQVBQSU5HX0FOT04pO1xuIDUzMjpcdFxuIDUzMzpcdFx0cmV0dXJuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKG1hcHBpbmcpIFx1MDAzYz0gUE1EX09SREVSIFx1MDAyNlx1MDAyNlxuIDUzNDpcdFx0ICAgICAgIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKG1hcHBpbmcpIFx1MDAzZT0gUE1EX09SREVSO1xuIDUzNTpcdH1cbiA1MzY6XHQjZWxzZVxuIDUzNzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIDUzODpcdHtcbiA1Mzk6XHRcdHJldHVybiBmYWxzZTtcbiA1NDA6XHR9XG4gNTQxOlx0I2VuZGlmXG4gNTQyOlx0XG4gNTQzOlx0LyogUmV0dXJuIHRoZSBtYXhpbXVtIGZvbGlvIHNpemUgZm9yIHRoaXMgcGFnZWNhY2hlIG1hcHBpbmcsIGluIGJ5dGVzLiAqL1xuIDU0NDpcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4gNTQ1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBGaWxlIENvbGxhcHNlIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBUcmFuc3BhcmVudCBIdWdlcGFnZXMsIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZC4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmlsZSBjb2xsYXBzZSBtZWNoYW5pc20gYW5kIGhvdyBpdCYjMzk7cyB0cmlnZ2VyZWQsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGtlcm5lbCYjMzk7cyBga2h1Z2VwYWdlZGAgZGFlbW9uLiBUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGRlbHZlIGludG8gYGtodWdlcGFnZWQuY2AuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGluIGBraHVnZXBhZ2VkLmNgIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIGBjb2xsYXBzZV9maWxlYC4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgdmFyaW91cyBzY2VuYXJpb3MgYW5kIHBhdGhzIHRocm91Z2ggd2hpY2ggZmlsZSBjb2xsYXBzZSBpcyBpbnZva2VkLiBJIHdpbGwgdGhlbiBwZXJmb3JtIGEgY29kZSBzZWFyY2ggZm9yIGFsbCBjYWxscyB0byB0aGUgZnVuY3Rpb24gYGNvbGxhcHNlX2ZpbGVgIHdpdGhpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTIxMzk9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjIyMy0vKipcbm1tL2todWdlcGFnZWQuYzoyMjI0OiAqIGNvbGxhcHNlX2ZpbGUgLSBjb2xsYXBzZSBmaWxlbWFwL3RtcGZzL3NobWVtIHBhZ2VzIGludG8gaHVnZSBvbmUuXG5tbS9raHVnZXBhZ2VkLmMtMjIyNS0gKlxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjQ3LSAqL1xubW0va2h1Z2VwYWdlZC5jOjIyNDg6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTIyNDktXHRcdHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI2OTQtXHRWTV9CVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2cGFnZWxpc3QpKTtcbm1tL2todWdlcGFnZWQuYzoyNjk1Olx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xubW0va2h1Z2VwYWdlZC5jLTI2OTYtXHRyZXR1cm4gcmVzdWx0O1xuLS1cbm1tL2todWdlcGFnZWQuYz0yNjk5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjc5Ni1cdFx0fSBlbHNlIHtcbm1tL2todWdlcGFnZWQuYzoyNzk3Olx0XHRcdHJlc3VsdCA9IGNvbGxhcHNlX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHN0YXJ0LCBjYyk7XG5tbS9raHVnZXBhZ2VkLmMtMjc5OC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGNvbGxhcHNlX3NjYW5fZmlsZWAgYW5kIGl0cyBJbnRlcmFjdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBsYXlzIGEga2V5IHJvbGUgaW4gZGF0YSBwcm9jZXNzaW5nIG9yIEkvTywgcGVyaGFwcyBmaWxlIGFnZ3JlZ2F0aW9uIG9yIHN1bW1hcml6aW5nIHNjYW4gZGF0YS4gVG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBhY3QsIEkgbmVlZCB0byB0cmFjZSBpdHMgZmxvdy4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZWJhc2Ugd2hlcmUgYGNvbGxhcHNlX3NjYW5fZmlsZWAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHBpY3R1cmUgb2Ygd2hhdOKAmXMgKnVzaW5nKiB0aGlzIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgZGVwZW5kZW5jaWVzLCBkYXRhIGZsb3dzLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHBvaW50cyBvZiB2dWxuZXJhYmlsaXR5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBvdGhlciBmdW5jdGlvbnMg4oCTIHRoZSBkZWVwZXIgSSBnbywgdGhlIGJldHRlciBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIHdpbGwgYmUuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSBxdWljayBpbnZlc3RpZ2F0aW9uIGdpdmVuIG15IGV4aXN0aW5nIGV4cGVydGlzZS4gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZXNwb25zaWJpbGl0aWVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2Vfc2Nhbl9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjY5OC1cbm1tL2todWdlcGFnZWQuYzoyNjk5OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2todWdlcGFnZWQuYy0yNzAwLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYz0yODA5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODMxLXJldHJ5OlxubW0va2h1Z2VwYWdlZC5jOjI4MzI6XHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHBnb2ZmLCBjYyk7XG5tbS9raHVnZXBhZ2VkLmMtMjgzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3ODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBgY29sbGFwc2Vfc2Nhbl9maWxlYCBpcyBiZWluZyB1c2VkLiBUaGUgbm90ZXMgc2F5IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gUmlnaHQsIGFuZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgaXRzZWxmIHBhcnQgb2YgdGhlIGBtYWR2aXNlX2NvbGxhcHNlYCBwcm9jZXNzLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gY2FsbHMgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFuZCBhbHNvIHdoYXQgaXMgY2FsbGluZyBgY29sbGFwc2VfZmlsZWAuIEtub3dpbmcgdGhpcywgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHRoYXQgbGVhZCB0byBgY29sbGFwc2Vfc2Nhbl9maWxlYCBiZWluZyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTI2OTk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODA4LSAqL1xubW0va2h1Z2VwYWdlZC5jOjI4MDk6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjgxMC1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgKmxvY2tfZHJvcHBlZCxcbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjg2Nj1zdGF0aWMgdm9pZCBjb2xsYXBzZV9zY2FuX21tX3Nsb3QodW5zaWduZWQgaW50IHByb2dyZXNzX21heCxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjkzNi1cbm1tL2todWdlcGFnZWQuYzoyOTM3Olx0XHRcdCpyZXN1bHQgPSBjb2xsYXBzZV9zaW5nbGVfcG1kKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzLFxubW0va2h1Z2VwYWdlZC5jLTI5MzgtXHRcdFx0XHRcdFx0ICAgICAgdm1hLCBcdTAwMjZsb2NrX2Ryb3BwZWQsIGNjKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzIwNz1pbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzI1NS1cbm1tL2todWdlcGFnZWQuYzozMjU2Olx0XHRyZXN1bHQgPSBjb2xsYXBzZV9zaW5nbGVfcG1kKGFkZHIsIHZtYSwgXHUwMDI2bW1hcF91bmxvY2tlZCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTMyNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbGxhcHNlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBwYXRoIGZvciBtZW1vcnkgY29sbGFwc2luZy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgbWFkdmlzZV9jb2xsYXBzZSgpYCBhbmQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdCgpYCB1bHRpbWF0ZWx5IGZlZWQgaW50byBgY29sbGFwc2Vfc2luZ2xlX3BtZCgpYC4gVGhhdCB0aGVuIGNhbGxzIGBjb2xsYXBzZV9zY2FuX2ZpbGUoKWAsIHdoaWNoIGZpbmFsbHkgcmVhY2hlcyBgY29sbGFwc2VfZmlsZSgpYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3QgYXQgdGhlIGhpZ2ggbGV2ZWwuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwIGluIG15IG1pbmQ6IGlzIGBjb2xsYXBzZV9maWxlKClgIHN0YXRpYz8gWXVwLCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZSguLi4pYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGxpbWl0cyBpdHMgdmlzaWJpbGl0eS4gQnV0LCBhbmQgdGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLCBpcyBpdCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gQ29uc2lkZXJpbmcgdGhhdCBgY29sbGFwc2VfZmlsZWAgaXMgYSAqbWFzc2l2ZSogZnVuY3Rpb24g4oCTIHdlJiMzOTtyZSB0YWxraW5nIGFsbW9zdCA0NTAgbGluZXMgZnJvbSAyMjQ4IHRvIDI2OTYg4oCTIGl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0byBiZSBpbmxpbmVkIHVubGVzcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uIGxpa2UgTGluayBUaW1lIE9wdGltaXphdGlvbiAoTFRPKS4gSW4gYSBzdGFuZGFyZCBHQ0Mgb3IgQ2xhbmcgYnVpbGQgKndpdGhvdXQqIExUTywgYSBmdW5jdGlvbiBvZiB0aGF0IHNpemUsIGV2ZW4gaWYgc3RhdGljLCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgaW5saW5lZC4KClRoZSBpbXBsaWNhdGlvbnMgYXJlIHRoYXQsIGV2ZW4gaWYgaXQmIzM5O3Mgc3RhdGljLCBgY29sbGFwc2VfZmlsZWAgd2lsbCBoYXZlIGEgc3ltYm9sIGluIHRoZSBzeW1ib2wgdGFibGUsIGFsb25nIHdpdGggaXRzIGNhbGxlcnMsIHN1Y2ggYXMgYG1hZHZpc2VfY29sbGFwc2VgLCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAsIGFuZCBgY29sbGFwc2Vfc2Nhbl9maWxlYC4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBvciBhbmFseXNpcy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYG1hZHZpc2VfY29sbGFwc2VgIGlzbiYjMzk7dCBleHBvcnRlZCBvciBkZWNsYXJlZCBpbiBhIGhlYWRlciBzb21ld2hlcmUuIFRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD0zNDY9QSBoaWdoZXIgdmFsdWUgbWF5IGluY3JlYXNlIG1lbW9yeSBmb290cHJpbnQgZm9yIHNvbWUgd29ya2xvYWRzLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTMtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MzU0OiAgIEN1cnJlbnRseSwgbWFkdmlzZV9jb2xsYXBzZSBvbmx5IHN1cHBvcnRzIGNvbGxhcHNpbmcgdG8gUE1ELXNpemVkIFRIUHNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTUtICAgYW5kIGRvZXMgbm90IGF0dGVtcHQgbVRIUCBjb2xsYXBzZXMuXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTExPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cdFx0ICAgICBpbnQgYWR2aWNlKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MTI9c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTg6c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxOS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxNzA9Ym9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE3NC1cbm1tL2todWdlcGFnZWQuYzozMTc1OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXG5tbS9raHVnZXBhZ2VkLmMtMzE3Ni17XG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyMDYtXG5tbS9raHVnZXBhZ2VkLmM6MzIwNzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2todWdlcGFnZWQuYy0zMjA4LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyOTQtXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFx1MDAzZVx1MDAzZSBIUEFHRV9QTURfU0hJRlQpID8gMFxubW0va2h1Z2VwYWdlZC5jOjMyOTU6XHRcdFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XG5tbS9raHVnZXBhZ2VkLmMtMzI5Ni19XG4tLVxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM2My1cdGNhc2UgTUFEVl9DT0xMQVBTRTpcbm1tL21hZHZpc2UuYzoxMzY0Olx0XHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG5tbS9tYWR2aXNlLmMtMTM2NS1cdFx0XHRcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZWxvY2tfZHJvcHBlZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTIzNT1zdGF0aWMgdm9pZCBmaWxsX21lbW9yeShpbnQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDgtICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjQ5OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9yZXRyeSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjUwLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MjY3PXN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODAtXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtBbGxvY2F0ZSBodWdlIHBhZ2UuLi5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI4MTpcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODItXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTExPXN0YXRpYyBib29sIGlzX2Fub24oc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTE1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxNjpzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUxNy1cdFx0XHQgICAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUzOS1cdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjU0MDpcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU0MS1cdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTE6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTUyLVx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1Ni1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTc6XHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTgtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz02ODA9c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjY4MTpcdC5jb2xsYXBzZSA9IFx1MDAyNm1hZHZpc2VfY29sbGFwc2UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjgyLVx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEwNzY9c3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTMzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExMzQ6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzUtXHRcdFx0XHRcdCAgIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExNDQtXHQvKiBjLVx1MDAzZWNvbGxhcHNlKCkgd2lsbCBmaW5kIGEgaHVnZXBhZ2UgYW5kIGNvbXBsYWluIC0gY2FsbCBkaXJlY3RseS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxMTQ1Olx0X19tYWR2aXNlX2NvbGxhcHNlKFwmIzM0O1JlLWNvbGxhcHNlIFBNRC1tYXBwZWQgaHVnZXBhZ2VcJiMzNDssIHAsIDEsIG9wcywgdHJ1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE0Ni1cdHZhbGlkYXRlX21lbW9yeShwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEzMTE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xNDMyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzM6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNDpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNjpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRpdmluZyBpbnRvIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgY29sbGFwc2VfZmlsZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyBodWdlIHBhZ2UgY29sbGFwc2luZyB3b3Jrcywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZpbGUtYmFja2VkIG1lbW9yeS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgc291cmNlIGNvZGUsIHNvIEkmIzM5O20gaGVhZGluZyBkaXJlY3RseSB0byBgbW0va2h1Z2VwYWdlZC5jYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHZhcmlhYmxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBleGFjdCBjb250cm9sIGZsb3cgYW5kIGFueSBlZGdlIGNhc2VzLiBJJiMzOTtsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBmaWxlIG1hcHBpbmcgYW5kIHRoZSBodWdlIHBhZ2UgbWVjaGFuaWNzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNjA6XHRcbjIyNjE6XHRcdC8qXG4yMjYyOlx0XHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxuMjI2MzpcdFx0ICpcbjIyNjQ6XHRcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xuMjI2NTpcdFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxuMjI2NjpcdFx0ICovXG4yMjY3Olx0XHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XG4yMjY4Olx0XHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XG4yMjY5Olx0XG4yMjcwOlx0XHQvKlxuMjI3MTpcdFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4yMjcyOlx0XHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXG4yMjczOlx0XHQgKi9cbjIyNzQ6XHRcdGlmICghaXNfc2htZW0pXG4yMjc1Olx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbjIyNzY6XHRcbjIyNzc6XHRcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcbjIyNzg6XHRcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuMjI3OTpcdFx0XHRnb3RvIG91dDtcbjIyODA6XHRcbjIyODE6XHRcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuMjI4MjpcdFxuMjI4MzpcdFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG4yMjg0Olx0XHRpZiAoaXNfc2htZW0pXG4yMjg1Olx0XHRcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQobmV3X2ZvbGlvKTtcbjIyODY6XHRcdG5ld19mb2xpby1cdTAwM2VpbmRleCA9IHN0YXJ0O1xuMjI4NzpcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xuMjI4ODpcdFxuMjI4OTpcdFx0LypcbjIyOTA6XHRcdCAqIEVuc3VyZSB3ZSBoYXZlIHNsb3RzIGZvciBhbGwgdGhlIHBhZ2VzIGluIHRoZSByYW5nZS4gIFRoaXMgaXNcbjIyOTE6XHRcdCAqIGFsbW9zdCBjZXJ0YWlubHkgYSBuby1vcCBiZWNhdXNlIG1vc3Qgb2YgdGhlIHBhZ2VzIG11c3QgYmUgcHJlc2VudFxuMjI5MjpcdFx0ICovXG4yMjkzOlx0XHRkbyB7XG4yMjk0Olx0XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjI5NTpcdFx0XHR4YXNfY3JlYXRlX3JhbmdlKFx1MDAyNnhhcyk7XG4yMjk2Olx0XHRcdGlmICgheGFzX2Vycm9yKFx1MDAyNnhhcykpXG4yMjk3Olx0XHRcdFx0YnJlYWs7XG4yMjk4Olx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMjk5Olx0XHRcdGlmICgheGFzX25vbWVtKFx1MDAyNnhhcywgR0ZQX0tFUk5FTCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5OTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBjb2xsYXBzZV9maWxlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYWRkcmVzc2VkIG9uZSBzcGVjaWZpYyBtb2RpZmljYXRpb24uIE5vdywgSSBuZWVkIHRvIHNoaWZ0IGdlYXJzIGFuZCBkaWcgaW50byB0aGUgcmVtYWluaW5nIGFkanVzdG1lbnRzIHdpdGhpbiB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyAqYWxzbyogY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSAqb3RoZXIqIG1vZGlmaWVkIHNlZ21lbnRzLiYjMzQ7IEkga25vdyBJJiMzOTt2ZSBtaXNzZWQgc29tZXRoaW5nIGltcG9ydGFudCBpZiBJIG9ubHkgYWRkcmVzcyB0aGUgZmlyc3QgYWx0ZXJhdGlvbi4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0b3RhbCBmdW5jdGlvbiYjMzk7cyBjaGFuZ2UgaXMgYWNjdXJhdGUuIEkmIzM5O20gZm9jdXNpbmcgb24gY29tcGxldGVuZXNzIGFuZCBhY2N1cmFjeSwgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc2Vjb25kIGFsdGVyYXRpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMzNTpcdFx0XHRcdFx0fVxuMjMzNjpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjMzNzpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjMzODpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzMzk6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzQwOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM0MTpcdFx0XHRcdH0gZWxzZSB7XG4yMzQyOlx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbjIzNDM6XHRcdFx0XHRcdGdvdG8geGFfbG9ja2VkO1xuMjM0NDpcdFx0XHRcdH1cbjIzNDU6XHRcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuMjM0NjpcdFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4yMzQ3Olx0XHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4yMzQ4Olx0XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4yMzQ5Olx0XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuMjM1MDpcdFx0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4yMzUxOlx0XG4yMzUyOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM1MzpcdFx0XHRcdFx0LypcbjIzNTQ6XHRcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuMjM1NTpcdFx0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbjIzNTY6XHRcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4yMzU3Olx0XHRcdFx0XHQgKi9cbjIzNTg6XHRcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuMjM1OTpcdFx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbjIzNjA6XHRcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuMjM2MTpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM2MjpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM2MzpcdFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuMjM2NDpcdFx0XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjIzNjU6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjM2NjpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM2NzpcdFx0XHRcdFx0fVxuMjM2ODpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbjIzNjk6XHRcdFx0XHRcdC8qXG4yMzcwOlx0XHRcdFx0XHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJiMzOTt0XG4yMzcxOlx0XHRcdFx0XHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXG4yMzcyOlx0XHRcdFx0XHQgKlxuMjM3MzpcdFx0XHRcdFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxuMjM3NDpcdFx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipBbmFseXppbmcgdGhlIE91dHB1dCBvZiBgY29sbGFwc2VfZmlsZWAqKgoKT2theSwgc28gd2UmIzM5O3JlIGNpcmNsaW5nIGJhY2sgdG8gYGNvbGxhcHNlX2ZpbGVgIGFnYWluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBjcml0aWNhbCBwYXJ0OiB0aGUgYG91dDpgIGF0IHRoZSB2ZXJ5IGVuZC4gVGhhdCYjMzk7cyB0aGUga2V5LCBpc24mIzM5O3QgaXQ/IFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBpbnRlcm5hbCB0cmFuc2Zvcm1hdGlvbnMgYW5kIGNvbXB1dGF0aW9ucyBjb252ZXJnZSB0byBwcm9kdWNlIHRoZSByZXN1bHQuIEkgd2FudCB0byByZWFsbHkgZGlnIGludG8gd2hhdCYjMzk7cyBiZWluZyBvdXRwdXR0ZWQsIG5vdCBqdXN0ICp0aGF0KiBzb21ldGhpbmcgaXMgb3V0cHV0dGVkLiBJcyBpdCBhIGNvbnNvbGlkYXRlZCBkYXRhIHN0cnVjdHVyZSwgYSBmaW5hbCBwcm9jZXNzZWQgc3RyaW5nLCBhIHBhcnRpY3VsYXIgZm9ybWF0PwoKVW5kZXJzdGFuZGluZyAqdGhhdCogYG91dDpgIHNwZWNpZmljYWxseSB0ZWxscyB1cyBldmVyeXRoaW5nIGFib3V0IHRoZSBkZXNpZ24gZGVjaXNpb25zIHRoYXQgdW5kZXJwaW4gdGhlIGVudGlyZSBmdW5jdGlvbiwgYW5kIHRoZSBkYXRhIGl0IHByZXNlbnRzLiBXZSBjb3VsZCBpbmZlciBhbiBhd2Z1bCBsb3QgZnJvbSB0aGF0IHNpbXBsZSBzdGF0ZW1lbnQgYWxvbmUsIGlmIHdlJiMzOTtyZSBjYXJlZnVsLiBJcyBpdCBhIHdlbGwgc3RydWN0dXJlZCBvdXRwdXQsIG9yIGEgZHVtcD8gV2hhdCwgKmV4YWN0bHkqLCBpcyB0aGUgZm9ybSBvZiB0aGF0IG91dHB1dD8gVGhhdCB0ZWxscyB1cyBob3cgaXQgaXMgdG8gYmUgY29uc3VtZWQsIHdoZXRoZXIgaXQmIzM5O3MgZnJpZW5kbHkgdG8gYmVpbmcgcGFzc2VkIHRvIHRoZSBuZXh0IHN0YWdlLCBpZiBpdCBpcyBhcHByb3ByaWF0ZSBmb3Igc3RvcmFnZSBvciBkaXNwbGF5PyBUaGUgb3V0cHV0ICppcyogdGhlIGludGVyZmFjZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGF0IGRldGFpbCBmb3IgYSBtb21lbnQgYW5kIHJlYWxseSBleHBsb3JlIHdoYXQgaXQgbWVhbnMgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY4MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFx1MDAyNnBhZ2VsaXN0LCBscnUpIHtcbjI2ODE6XHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbjI2ODI6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjI2ODM6XHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuMjY4NDpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjY4NTpcdFx0fVxuMjY4NjpcdFxuMjY4NzpcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBOVUxMO1xuMjY4ODpcdFxuMjY4OTpcdFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XG4yNjkwOlx0XHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbjI2OTE6XHRvdXQ6XG4yNjkyOlx0XHRpZiAoIWlzX3NobWVtKVxuMjY5MzpcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbjI2OTQ6XHRcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuMjY5NTpcdFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuMjY5NjpcdFx0cmV0dXJuIHJlc3VsdDtcbjI2OTc6XHR9XG4yNjk4Olx0XG4yNjk5Olx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuMjcwMDpcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxuMjcwMTpcdFx0XHRzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4yNzAyOlx0e1xuMjcwMzpcdFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCBOVUxMLCBIUEFHRV9QTURfT1JERVIpO1xuMjcwNDpcdFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX3N3YXAgPSBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKGNjLCBIUEFHRV9QTURfT1JERVIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU3OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRXhpdCBQb2ludHMgaW4gYGNvbGxhcHNlX2ZpbGVgKioKCk9rYXksIGxldCYjMzk7cyBkaWcgaW50byB0aGlzIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGhvdyBpdCBleGl0cy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGBnb3RvIG91dDtgIG9yIHNpbWlsYXIganVtcCBzdGF0ZW1lbnRzIG1pZ2h0IGFmZmVjdCB0aGluZ3MuIFNvLCBJJiMzOTttIGdvaW5nIHRvIHN5c3RlbWF0aWNhbGx5IHRyYWNlIGFsbCB0aGUgZXhpdCBwYXRocy4KCkZpcnN0LCBJIHNlZSB0aGUgY2hlY2sgYXQgbGluZSAyMjc4OiBgaWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpIGdvdG8gb3V0O2AuIEFscmlnaHQsIHRoYXQmIzM5O3MgYSBkaXJlY3QgZWFybHkgZXhpdCBjb25kaXRpb24uIEFmdGVyIHRoaXMsIHRoZXJlIHNlZW0gdG8gYmUgc2V2ZXJhbCBsYWJlbHMgdG8gYmUgYXdhcmUgb2Y6IGB4YV9sb2NrZWQ6YCwgYHhhX3VubG9ja2VkOmAsIGByb2xsYmFjazpgLCBhbmQgcHJlc3VtYWJseSBvdGhlcnMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGxlYWQuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGZvbGxvdyB3aGVyZSB0aGUgYG91dGAgbGFiZWwgaXMgZGVmaW5lZCBhbmQgZXhhbWluZSB3aGF0IGFjdGlvbnMgYXJlIHBlcmZvcm1lZCBwcmlvciB0byBlYWNoIHBvdGVudGlhbCBleGl0LiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMgb2YgZWFjaCBwb3NzaWJsZSByZXR1cm4gcGF0aHdheSB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgZXNwZWNpYWxseSBpbiBlZGdlIGNhc2VzIG9yIGVycm9yIHNjZW5hcmlvcy4gVGhpcyB3aWxsIGhlbHAgbWUgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGNsZWFudXAgdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IHRoZXNlIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnb3RvIG91dDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTY5Mz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy03MTQtXHRcdFx0XHRcdFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX05PTkUpO1xubW0va2h1Z2VwYWdlZC5jOjcxNTpcdFx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTcxNi1cdFx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTcyMC1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BURV9OT05fUFJFU0VOVDtcbm1tL2todWdlcGFnZWQuYzo3MjE6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzIyLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTcyNC1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BURV9VRkZEO1xubW0va2h1Z2VwYWdlZC5jOjcyNTpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03MjYtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzI5LVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9OVUxMO1xubW0va2h1Z2VwYWdlZC5jOjczMDpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03MzEtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzQyLVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9MQVpZRlJFRTtcbm1tL2todWdlcGFnZWQuYzo3NDM6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzQ0LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTc1Ny1cdFx0XHRcdFx0XHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfU0hBUkVEKTtcbm1tL2todWdlcGFnZWQuYzo3NTg6XHRcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03NTktXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy03NjYtXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xubW0va2h1Z2VwYWdlZC5jOjc2NzpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03NjgtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzkwLVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xubW0va2h1Z2VwYWdlZC5jOjc5MTpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03OTItXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtODA3LVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT1VOVDtcbm1tL2todWdlcGFnZWQuYzo4MDg6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtODA5LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTgxNy1cdFx0XHRyZXN1bHQgPSBTQ0FOX0RFTF9QQUdFX0xSVTtcbm1tL2todWdlcGFnZWQuYzo4MTg6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtODE5LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jPTExNjU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMTkzLVx0XHRcdFx0cmVzdWx0ID0gU0NBTl9OT19QVEVfVEFCTEU7XG5tbS9raHVnZXBhZ2VkLmM6MTE5NDpcdFx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTExOTUtXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjEzLVx0XHRcdHJlc3VsdCA9IFNDQU5fRVhDRUVEX1NXQVBfUFRFO1xubW0va2h1Z2VwYWdlZC5jOjEyMTQ6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtMTIxNS1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjMxLVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xubW0va2h1Z2VwYWdlZC5jOjEyMzI6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtMTIzMy1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjM2LVx0XHRcdHJlc3VsdCA9IFNDQU5fRkFJTDtcbm1tL2todWdlcGFnZWQuYzoxMjM3Olx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTEyMzgtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTYzMC1cdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MmIzQzOyYjNDM7O1xubW0va2h1Z2VwYWdlZC5jOjE2MzE6XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTE2MzItXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2NDktXHRcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xubW0va2h1Z2VwYWdlZC5jOjE2NTA6XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTE2NTEtXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjc4LVx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG5tbS9raHVnZXBhZ2VkLmM6MjI3OTpcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtMjI4MC1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjY2OC1cbm1tL2todWdlcGFnZWQuYzoyNjY5Olx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtMjY3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGNvbGxhcHNlX2ZpbGVgIEV4aXQgU3RyYXRlZ2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHdpdGhpbiBgY29sbGFwc2VfZmlsZWAgYSBiaXQgYmV0dGVyLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGV4aXQgc2NlbmFyaW9zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGFsbCBleGl0IHBhdGhzIHVsdGltYXRlbHkgbGVhZCB0byBhIHJvbGxiYWNrLCBvciBpZiB0aGVyZSBhcmUgc2NlbmFyaW9zIHdoZXJlIHRoZSBmdW5jdGlvbiBtaWdodCBleGl0IGluIGEgbW9yZSAmIzM0O2NsZWFuJiMzNDsgd2F5IHdpdGhvdXQgdHJpZ2dlcmluZyBhIHJvbGxiYWNrIHByb2NlZHVyZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRhdGEgaW50ZWdyaXR5IGltcGxpY2F0aW9ucyBvZiBhIHN1Y2Nlc3NmdWwgb3IgZmFpbGVkIGNvbGxhcHNlIG9wZXJhdGlvbi4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgY29kZSBibG9jayBhcm91bmQgbGluZXMgMjY1MC0yNjk1LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSByYW5nZSB0byBzdGFydCB3aXRoLCBnaXZlbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlLiBJIGV4cGVjdCB0aGF0IHNlY3Rpb24gd2lsbCBwcm9iYWJseSBjb250YWluIHNvbWUga2V5IGRlY2lzaW9uIHBvaW50cyBhbmQgYnJhbmNoaW5nIGxvZ2ljIHJlbGF0ZWQgdG8gZXhpdCBjb25kaXRpb25zLiBCeSBpbnNwZWN0aW5nIHRoYXQgYXJlYSwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIHZhcmlvdXMgcGF0aHMgdGhlIGZ1bmN0aW9uIHRha2VzIG9uIGl0cyB3YXkgb3V0IGFuZCBkZXRlcm1pbmUgaWYgdGhlIHJvbGxiYWNrIG1lY2hhbmlzbSBpcyBhbHdheXMgaW52b2tlZC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY0NTpcdFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxuMjY0NjpcdFx0ICovXG4yNjQ3Olx0XHRyZXRyYWN0X3BhZ2VfdGFibGVzKG1hcHBpbmcsIHN0YXJ0KTtcbjI2NDg6XHRcdGlmIChjYyBcdTAwMjZcdTAwMjYgIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpXG4yNjQ5Olx0XHRcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcbjI2NTA6XHRcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xuMjY1MTpcdFxuMjY1MjpcdFx0LypcbjI2NTM6XHRcdCAqIFRoZSBjb2xsYXBzZSBoYXMgc3VjY2VlZGVkLCBzbyBmcmVlIHRoZSBvbGQgZm9saW9zLlxuMjY1NDpcdFx0ICovXG4yNjU1Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXHUwMDI2cGFnZWxpc3QsIGxydSkge1xuMjY1NjpcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuMjY1NzpcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsXG4yNjU4Olx0XHRcdFx0XHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbjI2NTk6XHRcdFx0aWYgKGlzX3NobWVtKVxuMjY2MDpcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU0hNRU0sXG4yNjYxOlx0XHRcdFx0XHRcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuMjY2MjpcdFx0XHRmb2xpby1cdTAwM2VtYXBwaW5nID0gTlVMTDtcbjI2NjM6XHRcdFx0Zm9saW9fY2xlYXJfYWN0aXZlKGZvbGlvKTtcbjI2NjQ6XHRcdFx0Zm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xuMjY2NTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjY2NjpcdFx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgMiAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuMjY2NzpcdFx0fVxuMjY2ODpcdFxuMjY2OTpcdFx0Z290byBvdXQ7XG4yNjcwOlx0XG4yNjcxOlx0cm9sbGJhY2s6XG4yNjcyOlx0XHQvKiBTb21ldGhpbmcgd2VudCB3cm9uZzogcm9sbCBiYWNrIHBhZ2UgY2FjaGUgY2hhbmdlcyAqL1xuMjY3MzpcdFx0aWYgKG5yX25vbmUpIHtcbjI2NzQ6XHRcdFx0eGFzX2xvY2tfaXJxKFx1MDAyNnhhcyk7XG4yNjc1Olx0XHRcdG1hcHBpbmctXHUwMDNlbnJwYWdlcyAtPSBucl9ub25lO1xuMjY3NjpcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjY3NzpcdFx0XHRzaG1lbV91bmNoYXJnZShtYXBwaW5nLVx1MDAzZWhvc3QsIG5yX25vbmUpO1xuMjY3ODpcdFx0fVxuMjY3OTpcdFxuMjY4MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFx1MDAyNnBhZ2VsaXN0LCBscnUpIHtcbjI2ODE6XHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbjI2ODI6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjI2ODM6XHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuMjY4NDpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgcm9sbGJhY2sgc2NlbmFyaW8gYW5kIGl0JiMzOTtzIGxhbmRpbmcgdXMgaW4gYSBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUsIGxpbmVzIDI2ODctMjY5MSwgYWZ0ZXIgdGhlIHJvbGxiYWNrIGhhcyBjb25jbHVkZWQuIEludGVyZXN0aW5nLCBhbGwgdGhlIGNvZGUgcGF0aHMgY29udmVyZ2UgYXQgdGhlIGBvdXQ6YCBsYWJlbCwgYW5kIHRoZW4gd2hhdD8gCgpSaWdodCwgbGV0JiMzOTtzIHpvb20gaW4gb24gYGNvbGxhcHNlX2ZpbGVgIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGdvdCBzb21ldGhpbmcganVpY3kgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYSBmaWxlIG1hcHBpbmcgaW52b2x2ZWQuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIGlzIGJlaW5nIGNhbGxlZCAqYmVmb3JlKiBgYWxsb2NfY2hhcmdlX2ZvbGlvYC4gV2h5IGlzIHRoYXQgc2lnbmlmaWNhbnQ/IFdlbGwsIGNvdWxkIGBhbGxvY19jaGFyZ2VfZm9saW9gIGJlIHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBoYXZlIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24gaGFwcGVuaW5nLCBwb3RlbnRpYWxseSB3aXRoIGZsYWdzIHRoYXQgbWlnaHQgdHJpZ2dlciBtZW1vcnkgcmVjbGFpbT8gSWYgcmVjbGFpbSBpcyBpbnZvbHZlZCwgdGhhdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgZ29vZCBzaWduIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGFsbG9jX2NoYXJnZV9mb2xpb2AgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLiBUaW1lIHRvIGluc3BlY3QgdGhlIGltcGxlbWVudGF0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTExNjU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjU1LVxubW0va2h1Z2VwYWdlZC5jOjEyNTY6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgYWxsb2NfY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9raHVnZXBhZ2VkLmMtMTI1Ny1cdFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTEyOTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfaHVnZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzMDktXG5tbS9raHVnZXBhZ2VkLmM6MTMxMDpcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZmb2xpbywgbW0sIGNjLCBvcmRlcik7XG5tbS9raHVnZXBhZ2VkLmMtMTMxMS1cdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI3Ni1cbm1tL2todWdlcGFnZWQuYzoyMjc3Olx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFx1MDAyNm5ld19mb2xpbywgbW0sIGNjLCBIUEFHRV9QTURfT1JERVIpO1xubW0va2h1Z2VwYWdlZC5jLTIyNzgtXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBhbGxvY19jaGFyZ2VfZm9saW9gKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzIGBhbGxvY19jaGFyZ2VfZm9saW9gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZTogSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgdGhpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGEgZm9saW8tc3BlY2lmaWMgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIG5hbWUgaW1wbGllcyBpdCBoYW5kbGVzIGZvbGlvLXJlbGF0ZWQgY2hhcmdpbmcsIHdoaWNoIHByb2JhYmx5IG1lYW5zIGFjY291bnRpbmcgZm9yIG1lbW9yeSB1c2FnZSwgcG90ZW50aWFsbHkgZm9yIGRpZmZlcmVudCBwcm9jZXNzZXMgb3Igc3Vic3lzdGVtcy4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSBlbGVtZW50czoKCiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBIb3cgZG9lcyBpdCBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGZvbGlvIHN0cnVjdHVyZXMgYW5kIGFjY291bnRpbmcgZGF0YT8gQXJlIHRoZXJlIHNwaW5sb2NrcywgbXV0ZXhlcywgYXRvbWljIG9wZXJhdGlvbnMgaW52b2x2ZWQ/IEFueSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpcyBhIG1ham9yIHJlZCBmbGFnIGluIHRoaXMgYXJlYS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIGZhaWx1cmUgcGF0aHM/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgb3V0LW9mLW1lbW9yeSBzY2VuYXJpb3Mgb3Igb3RoZXIgdW5leHBlY3RlZCBjb25kaXRpb25zPyBBcmUgdGhlcmUgcmV0dXJuIGNvZGVzIG9yIGVycm9yIGluZGljYXRvcnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPwoqICAgKipSZXNvdXJjZSBUcmFja2luZzoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdXNlZCB0byB0cmFjayB0aGUgYWxsb2NhdGVkIG1lbW9yeT8gSXMgaXQganVzdCB0aGUgZm9saW8gaXRzZWxmLCBvciBhcmUgdGhlcmUgY291bnRlcnMsIGJpdG1hcHMsIG9yIG90aGVyIGF1eGlsaWFyeSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhpcyB0cmFja2luZy4KKiAgICoqSW50ZWdyYXRpb24gUG9pbnRzOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzPyBEb2VzIGl0IGNhbGwgaW50byB0aGUgcGFnZSBhbGxvY2F0b3IsIHRoZSBzbGFiIGFsbG9jYXRvciwgb3Igb3RoZXIgcmVsZXZhbnQgc3Vic3lzdGVtcz8gSSYjMzk7bGwgYmUgdHJhY2luZyB0aGUgY29udHJvbCBmbG93IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuCiogICAqKkNvbnRleHQ6KiogV2hhdCBpcyB0aGUgY2FsbGluZyBjb250ZXh0PyBBcmUgd2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgdXNlciBwcm9jZXNzLCBvciBhIGtlcm5lbCB0aHJlYWQ/IFRoaXMgYWZmZWN0cyB0aGUgc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgZGVhZGxvY2suCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdWJ0bGUgZGV0YWlscywgbGlrZSB0aGUgdXNlIG9mIHNwZWNpZmljIGZsYWdzIG9yIGJpdGZpZWxkcyB3aXRoaW4gdGhlIGZvbGlvIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyosIG5vdCBqdXN0IHdoYXQgdGhlIG5hbWUgc3VnZ2VzdHMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjU2Olx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgYWxsb2NfY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4xMjU3Olx0XHRcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYywgdW5zaWduZWQgaW50IG9yZGVyKVxuMTI1ODpcdHtcbjEyNTk6XHRcdGdmcF90IGdmcCA9IChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkID8gYWxsb2NfaHVnZXBhZ2Vfa2h1Z2VwYWdlZF9nZnBtYXNrKCkgOlxuMTI2MDpcdFx0XHQgICAgIEdGUF9UUkFOU0hVR0UpO1xuMTI2MTpcdFx0aW50IG5vZGUgPSBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKGNjKTtcbjEyNjI6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4xMjYzOlx0XG4xMjY0Olx0XHRmb2xpbyA9IF9fZm9saW9fYWxsb2MoZ2ZwLCBvcmRlciwgbm9kZSwgXHUwMDI2Y2MtXHUwMDNlYWxsb2Nfbm1hc2spO1xuMTI2NTpcdFx0aWYgKCFmb2xpbykge1xuMTI2NjpcdFx0XHQqZm9saW9wID0gTlVMTDtcbjEyNjc6XHRcdFx0Y291bnRfY29sbGFwc2VfZXZlbnQob3JkZXIsIFRIUF9DT0xMQVBTRV9BTExPQ19GQUlMRUQsXG4xMjY4Olx0XHRcdFx0XHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9BTExPQ19GQUlMRUQpO1xuMTI2OTpcdFx0XHRyZXR1cm4gU0NBTl9BTExPQ19IVUdFX1BBR0VfRkFJTDtcbjEyNzA6XHRcdH1cbjEyNzE6XHRcbjEyNzI6XHRcdGNvdW50X2NvbGxhcHNlX2V2ZW50KG9yZGVyLCBUSFBfQ09MTEFQU0VfQUxMT0MsIE1USFBfU1RBVF9DT0xMQVBTRV9BTExPQyk7XG4xMjczOlx0XG4xMjc0Olx0XHRpZiAodW5saWtlbHkobWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApKSkge1xuMTI3NTpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTI3NjpcdFx0XHQqZm9saW9wID0gTlVMTDtcbjEyNzc6XHRcdFx0cmV0dXJuIFNDQU5fQ0dST1VQX0NIQVJHRV9GQUlMO1xuMTI3ODpcdFx0fVxuMTI3OTpcdFxuMTI4MDpcdFx0aWYgKGlzX3BtZF9vcmRlcihvcmRlcikpXG4xMjgxOlx0XHRcdGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhmb2xpbywgVEhQX0NPTExBUFNFX0FMTE9DLCAxKTtcbjEyODI6XHRcbjEyODM6XHRcdCpmb2xpb3AgPSBmb2xpbztcbjEyODQ6XHRcdHJldHVybiBTQ0FOX1NVQ0NFRUQ7XG4xMjg1Olx0fVxuMTI4NjpcdFxuMTI4NzpcdC8qXG4xMjg4Olx0ICogY29sbGFwc2VfaHVnZV9wYWdlKCkgZXhwZWN0cyB0aGUgbW1hcF9sb2NrIHRvIGJlIHVubG9ja2VkIGJlZm9yZSBlbnRlcmluZyBhbmRcbjEyODk6XHQgKiB3aWxsIGFsd2F5cyByZXR1cm4gd2l0aCB0aGUgbG9jayB1bmxvY2tlZCwgdG8gYXZvaWQgaG9sZGluZyB0aGUgbW1hcF9sb2NrXG4xMjkwOlx0ICogd2hpbGUgYWxsb2NhdGluZyBhIFRIUCwgYXMgdGhhdCBjb3VsZCB0cmlnZ2VyIGRpcmVjdCByZWNsYWltL2NvbXBhY3Rpb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgZGlnIGludG8gdGhpcyBjb2RlLiBUaG9zZSBsaW5lcywgc3BlY2lmaWNhbGx5IGxpbmVzIDEyODgtMTI5MCwgcmVhbGx5IGNhdWdodCBteSBleWUuIFRoZSBjb21tZW50IGFib3V0IGF2b2lkaW5nIHRoZSBgbW1hcF9sb2NrYCBkdXJpbmcgVEhQIGFsbG9jYXRpb24sIGFuZCBob3cgdGhhdCBjYW4gdHJpZ2dlciBkaXJlY3QgcmVjbGFpbS9jb21wYWN0aW9u4oCmIHRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuIE5vdywgKmBjb2xsYXBzZV9maWxlYCogaXMgaG9sZGluZyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCB3aGVuIGl0IGNhbGxzIGBhbGxvY19jaGFyZ2VfZm9saW9gLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIElmIGRpcmVjdCByZWNsYWltIGtpY2tzIGluLCB0aGUgZmlsZXN5c3RlbSBvciBwYWdlIGNhY2hlIGNvdWxkIHRyeSB0byBsb2NrIHRoZSAqYG1hcHBpbmdgKiwgYW5kIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgcG90ZW50aWFsIGxvY2tkZXAgaXNzdWUgaGVyZS4gSSBtZWFuLCB3ZSBhcmUgcmVhbGx5IHRvdWNoaW5nIG9uIGNvcmUgTU0gbG9naWM6IHRoZSBsb2NraW5nLCB0aGUgcGFnZSBjYWNoZSwgcmVhZGFoZWFkLCBraHVnZXBhZ2VkIGNvbGxhcHNlIG9mIGZpbGUgcGFnZXMsIHRoZSB3aG9sZSBlbmNoaWxhZGEuCgpUaGUgdXNlIG9mICpgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgKiB0byByZXBsYWNlICpgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAqIGlzIGFsc28gc2lnbmlmaWNhbnQsIGFuZCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBsb2NraW5nIG9yZGVyIG9mIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgIHJlbGF0aXZlIHRvIGZvbGlvIGxvY2tzLCB0cnVuY2F0ZSwgcmVhZGFoZWFkLCBhbmQgZXZlcnl0aGluZyBlbHNlIGluIGJldHdlZW4uCgpTbywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBTZWN0aW9uIDMgb2YgdGhhdCBkb2N1bWVudCBzZWVtcyBwcmV0dHkgY2xlYXI6ICYjMzQ7Q29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksIC4uLiYjMzQ7LiBCaW5nby4gQW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgb3Iga2h1Z2VwYWdlZCBzY2FubmluZy4gVGhpcyBpcyB1bmVxdWl2b2NhbGx5ICYjMzQ7V29ydGhGdXp6aW5nLiYjMzQ7CgpOb3cgdGhlIHF1ZXN0aW9uIGlzOiB3aGF0IGFyZSB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scz8gVGhlIGd1aWRlbGluZXMgaW4gU2VjdGlvbiA0IGFyZSByZWxldmFudDogYXZvaWRpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMsIHRhcmdldGluZyBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cywgYW5kIGRlYWxpbmcgd2l0aCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4KCldoYXQgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBoZXJlPyBPYnZpb3VzbHksICpgY29sbGFwc2VfZmlsZWAqIGluIGBtbS9raHVnZXBhZ2VkLmNgIGlzIG1vZGlmaWVkLiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgZW50cnlwb2ludHMgYW5kIGNhbGxlcnMgYXJlOiAqYGNvbGxhcHNlX3NjYW5fZmlsZWAqLCAqYGNvbGxhcHNlX3NpbmdsZV9wbWRgKiwgKmBtYWR2aXNlX2NvbGxhcHNlYCouIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBraHVnZXBhZ2VkIGNhbGxzIGluIHBhcnRpY3VsYXIsIGVzcGVjaWFsbHkgaG93IGl0IGNhbGxzICpgY29sbGFwc2VfZmlsZWAqIG9yICpgY29sbGFwc2Vfc2Nhbl9maWxlYCosIGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgaGVhZCBiYWNrIGludG8gYG1tL2todWdlcGFnZWQuY2AgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX2ZpbGV8Y29sbGFwc2Vfc2Nhbl9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjMtLyoqXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMjQ5LVx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjk0LVx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG5tbS9raHVnZXBhZ2VkLmM6MjY5NTpcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbm1tL2todWdlcGFnZWQuYy0yNjk2LVx0cmV0dXJuIHJlc3VsdDtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjY5OC1cbm1tL2todWdlcGFnZWQuYzoyNjk5OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2todWdlcGFnZWQuYy0yNzAwLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNzk2LVx0XHR9IGVsc2Uge1xubW0va2h1Z2VwYWdlZC5jOjI3OTc6XHRcdFx0cmVzdWx0ID0gY29sbGFwc2VfZmlsZShtbSwgYWRkciwgZmlsZSwgc3RhcnQsIGNjKTtcbm1tL2todWdlcGFnZWQuYy0yNzk4LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jPTI4MDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzEtcmV0cnk6XG5tbS9raHVnZXBhZ2VkLmM6MjgzMjpcdHJlc3VsdCA9IGNvbGxhcHNlX3NjYW5fZmlsZShtbSwgYWRkciwgZmlsZSwgcGdvZmYsIGNjKTtcbm1tL2todWdlcGFnZWQuYy0yODMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgQ2FsbGVycyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBGaXJzdCwgSSBzZWUgdGhhdCBgbWFkdmlzZV9jb2xsYXBzZWAgaXMgYSBjYWxsZXIuIFRoYXQgbWFrZXMgc2Vuc2UsIGhhbmRsaW5nIG1lbW9yeSBjb2xsYXBzZSBiYXNlZCBvbiB1c2VyIGhpbnRzLiBUaGVuIHRoZXJlIGlzIGBjb2xsYXBzZV9zY2FuX21tX3Nsb3RgLCB3aGljaCBpcyBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLCBwb3NzaWJseSBpbmRpY2F0aW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHNjYW5uaW5nIG9yIGJhY2tncm91bmQgcHJvY2Vzcy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXAuIEkgbmVlZCB0byBiZSBzdXJlOyBkb2VzIHRoZSBrZXJuZWwmIzM5O3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQgdGFzaywgc3BlY2lmaWNhbGx5IGBraHVnZXBhZ2VkX2RvX3NjYW5gLCBhY3R1YWxseSBjYWxsIHRoYXQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdGAgZnVuY3Rpb24/IElmIGl0IGRvZXMsIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgdmVyeSBzaWduaWZpY2FudCwgYXMgaXQgbGlua3MgYXV0b21hdGljIHBhZ2UgY29sbGFwc2luZyB0byB0aGUga2h1Z2VwYWdlZCBkYWVtb24uIFRoaXMgbmVlZHMgY29uZmlybWF0aW9uLCBzbyBJJiMzOTtsbCBwaXZvdCBteSBmb2N1cyB0byBleGFtaW5lIHRoZSBjb2RlIG9mIGBjb2xsYXBzZV9zY2FuX21tX3Nsb3RgIGl0c2VsZi4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBjYWxsaW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3NjYW5fbW1fc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MjgwOT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjg2NS1cbm1tL2todWdlcGFnZWQuYzoyODY2OnN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxubW0va2h1Z2VwYWdlZC5jLTI4NjctXHRcdGVudW0gc2Nhbl9yZXN1bHQgKnJlc3VsdCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYz0yOTk2PXN0YXRpYyB2b2lkIGtodWdlcGFnZWRfZG9fc2NhbihzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMwMTYtXHRcdCAgICBwYXNzX3Rocm91Z2hfaGVhZCBcdTAwM2MgMilcbm1tL2todWdlcGFnZWQuYzozMDE3Olx0XHRcdGNvbGxhcHNlX3NjYW5fbW1fc2xvdChwcm9ncmVzc19tYXgsIFx1MDAyNnJlc3VsdCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTMwMTgtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMjQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAqKgoKUmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGlzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgc2V0dGluZy4gSSByZW1lbWJlciBoZWFyaW5nIGFib3V0IGl0IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBkaXNjdXNzaW9ucywgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgcmVhZC1haGVhZCB0dW5pbmcgcGFyYW1ldGVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIEkgYW0gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgYSBnbG9iYWwgb3IgcGVyIG1vdW50IG9wdGlvbiBhbmQgaG93IGl0IGluZmx1ZW5jZXMgcmVhZC1haGVhZCBiZWhhdmlvcnMuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBrZXJuZWwgc291cmNlIG9yIHJlbGV2YW50IGRvY3VtZW50YXRpb24gc2hvdWxkIGNsYXJpZnkgaXRzIGxvY2F0aW9uIGFuZCBwdXJwb3NlLCBiZWNhdXNlIGl0cyBiZWhhdmlvciBzZWVtcyBhIGJpdCBhbWJpZ3VvdXMgZnJvbSB3aGF0IEkgaGF2ZSByZWFkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjM1NC1cdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxubW0va2h1Z2VwYWdlZC5jOjIzNTU6XHRcdFx0XHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxubW0va2h1Z2VwYWdlZC5jLTIzNTYtXHRcdFx0XHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxuLS1cbm1tL2todWdlcGFnZWQuYy0yMzU4LVx0XHRcdFx0aWYgKGluZGV4IFx1MDAzYyBlb2YpXG5tbS9raHVnZXBhZ2VkLmM6MjM1OTpcdFx0XHRcdFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXHUwMDI2cmFjdGwsXG5tbS9raHVnZXBhZ2VkLmMtMjM2MC1cdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuLS1cbm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTIwNy0vKipcbm1tL3JlYWRhaGVhZC5jOjIwODogKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCAtIFN0YXJ0IHVuY2hlY2tlZCByZWFkYWhlYWQuXG5tbS9yZWFkYWhlYWQuYy0yMDktICogQHJhY3RsOiBSZWFkYWhlYWQgY29udHJvbC5cbi0tXG5tbS9yZWFkYWhlYWQuYy0yMjEtICovXG5tbS9yZWFkYWhlYWQuYzoyMjI6dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxubW0vcmVhZGFoZWFkLmMtMjIzLVx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9va2FoZWFkX3NpemUpXG4tLVxubW0vcmVhZGFoZWFkLmMtMjQ0LVxubW0vcmVhZGFoZWFkLmM6MjQ1Olx0dHJhY2VfcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQobWFwcGluZy1cdTAwM2Vob3N0LCBpbmRleCwgbnJfdG9fcmVhZCxcbm1tL3JlYWRhaGVhZC5jLTI0Ni1cdFx0XHRcdCAgICAgIGxvb2thaGVhZF9zaXplKTtcbi0tXG5tbS9yZWFkYWhlYWQuYy0zMTctfVxubW0vcmVhZGFoZWFkLmM6MzE4OkVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKTtcbm1tL3JlYWRhaGVhZC5jLTMxOS1cbi0tXG5tbS9yZWFkYWhlYWQuYz0zMjY9c3RhdGljIHZvaWQgZG9fcGFnZV9jYWNoZV9yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTM0Ny1cdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbm1tL3JlYWRhaGVhZC5jOjM0ODpcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHJhY3RsLCBucl90b19yZWFkLCBsb29rYWhlYWRfc2l6ZSk7XG5tbS9yZWFkYWhlYWQuYy0zNDktXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbi0tXG5tbS9yZWFkYWhlYWQuYz00ODE9dm9pZCBwYWdlX2NhY2hlX3JhX29yZGVyKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtNTE0LVxubW0vcmVhZGFoZWFkLmM6NTE1Olx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xubW0vcmVhZGFoZWFkLmMtNTE2LVx0bm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDI3OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBDaGFuZ2UgaW4gQ29yZSBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW52b2x2aW5nIGBtbS9yZWFkYWhlYWQuYzozNDdgIGFuZCBpdCYjMzk7cyBnb3QgbWUgdGhpbmtpbmcuIEl0IHNlZW1zIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaXMgbm93IGFzc3VtaW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBhY3F1aXJlZCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuICBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgdXNlZCB0byBoYW5kbGUgdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UsIGJ1dCBub3cgd2UmIzM5O3ZlIGdvdCBgY29sbGFwc2VfZmlsZWAgKmhvbGRpbmcqIHRoaXMgbG9jayBmb3IgaXRzICplbnRpcmUqIGR1cmF0aW9uLiBUaGUgY29tbWVudCBhYm91dCB0YWtpbmcgdGhlIGBpbnZhbGlkYXRlX2xvY2tgIGJlZm9yZSBhbnkgZm9saW8gbG9jayBiZWNhdXNlICYjMzQ7dGhlIHJlYWRhaGVhZCBiZWxvdyBuZWVkcyBpdCYjMzQ7IGlzIHRoZSBjbHVlIGhlcmUgYW5kIHRoYXQgYHRydW5jYXRlYCBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBwYXJhZGlnbSBzaGlmdCBpbiB0aGUgTU0gY29yZS4KCk15IGltbWVkaWF0ZSBmb2N1cyBnb2VzIHRvIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIGBjb2xsYXBzZV9maWxlYCBpcyB0aGUgcHJpbWFyeSBtb2RpZmllZCBmdW5jdGlvbiwgYW5kIHRoZW4gdGhlcmUmIzM5O3MgaXRzIGNhbGxlciBgY29sbGFwc2Vfc2Nhbl9maWxlYCwgdGhlIGNhbGxlciBvZiB0aGF0IGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kIHRoZSBwdWJsaWMgZW50cnkgcG9pbnQgYG1hZHZpc2VfY29sbGFwc2VgIGZyb20gdGhlIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBzeXNjYWxsLiBBbmQgdGhlIGtodWdlcGFnZWQgZGFlbW9uIGVudHJ5cG9pbnQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdGAuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlaXIgdWJpcXVpdHksIGFuZCBteSBndXQgZmVlbGluZyB0ZWxscyBtZSBgbWFkdmlzZV9jb2xsYXBzZWAgaXMgTk9UIGEgY29tbW9uIHBhdGgsIG9ubHkgdHJpZ2dlcmVkIGJ5IHRoZSBzcGVjaWZpYyBgTUFEVl9DT0xMQVBTRWAgc3lzY2FsbC4gU2ltaWxhcmx5LCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgYWxzbyBub3QgdWJpcXVpdG91cywgb25seSBjYWxsZWQgYnkgdGhvc2UgY29sbGFwc2UtcmVsYXRlZCBmdW5jdGlvbnMuICBgY29sbGFwc2Vfc2Nhbl9maWxlYCBpcyBhbHNvIG9ubHkgY2FsbGVkIGJ5IGNvbGxhcHNlX3NpbmdsZV9wbWQuIFNvLCBub25lIG9mIHRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgd2lkZWx5IHVzZWQuIEJ1dCB0aGVuIEkmIzM5O20gd29uZGVyaW5nIGlmIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaXMgdWJpcXVpdG91cywgYmVjYXVzZSBpdCYjMzk7cyBhdCB0aGUgY29yZSBvZiByZWFkYWhlYWQgaW4gYW55IGZpbGUgcmVhZC4gVGhlIGZ1bmN0aW9ucyAoYGNvbGxhcHNlX2ZpbGVgLCBgY29sbGFwc2Vfc2Nhbl9maWxlYCwgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLCBgbWFkdmlzZV9jb2xsYXBzZWApIHNlZW0gc3BlY2lmaWMgdG8gdGhpcyBUSFAgY29sbGFwc2UgZmVhdHVyZS4gSXQmIzM5O3MgYmVzdCB0byBhdm9pZCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIHRvIGtlZXAgdGhlIGZ1enppbmcgZm9jdXNlZC4KCkFscmlnaHQsIHdoYXQgY29uZmlndXJhdGlvbiBrbm9icyBjb250cm9sIHRoaXM/IEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiAoYEVuYWJsZUNvbmZpZ3NgKS4gYGtodWdlcGFnZWQuY2AgaXMgdGhlIGtleSwgc28gSSYjMzk7bGwgZ28gdG8gYG1tL01ha2VmaWxlYC4gIEFoYSEgYG9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vYC4gVGhhdCYjMzk7cyB0aGUgb25lLiBBbmQgaW4gYG1tL0tjb25maWdgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGl0c2VsZi4gIEl0IGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGEgY291cGxlIG9mIG90aGVyIHRoaW5ncy4gIElzIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQgb24gYW1kNjQ/IEkgbmVlZCB0byBsb29rIGluIGBhcmNoL3g4Ni9LY29uZmlnYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMTEtXHRzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PS1xuYXJjaC94ODYvS2NvbmZpZzoyMTI6XHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3g4Ni9LY29uZmlnOjIxMzpcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZy0yMTQtXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQICAgICAgICAgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0yOTc9c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMDEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzAyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMwMy1zdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEzNTc9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTM3MC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMzcxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzNzItc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM9NTA5PXBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYy01MjItI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbmFyY2gveDg2L21tL3BndGFibGUuYzo1MjM6XHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTUyNC1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0MzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkqKgoKT2theSwgc28gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGZvciB4ODYgYXJjaGl0ZWN0dXJlLCB3aGljaCBtZWFucyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9uIGFtZDY0IGFzIHdlbGwuIFRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSBzaG91bGQgZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRpZWQgdG8gYGtodWdlcGFnZWRgIG9yIHJlbGF0ZWQgdG8gY29sbGFwc2VkIGZpbGVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gYXdhcmUgb2YgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBzcGFjZSBoZXJlLiBXYWl0IGEgc2Vjb25kLCB3YXNuJiMzOTt0IHRoZXJlIGEgYFJFQURPTkxZX1RIUGAgY29uZmlnIGF0IHNvbWUgcG9pbnQ/IFdhcyB0aGF0IGNvbXBsZXRlbHkgcmVtb3ZlZCwgb3IgaGFzIGl0IGJlZW4gcmVuYW1lZCBvciBkZXByZWNhdGVkPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSRUFET05MWV9USFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcxMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIGluIG1tL0tjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHNlZSBob3cgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgYmV5b25kIHRoZSBtYWluIG9uZSwgdGhhdCBhcmUgYWxzbyB1c2luZyB0aGlzIG9wdGlvbiBpbiB0aGUgZmlsZSBgbW0vS2NvbmZpZ2A/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBsYW5kc2NhcGUgb2YgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBvdmVycmlkZXMsIG9yIHJlbGF0ZWQgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbnRlcnR3aW5lZCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzEwIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9LY29uZmlnPTM9bWVudSBcJiMzNDtNZW1vcnkgTWFuYWdlbWVudCBvcHRpb25zXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04LSNcbm1tL0tjb25maWc6OTpjb25maWcgQVJDSF9OT19TV0FQXG5tbS9LY29uZmlnLTEwLVx0Ym9vbFxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuLS1cbm1tL0tjb25maWctMTI0LVxubW0vS2NvbmZpZzoxMjU6Y29uZmlnIFpTTUFMTE9DXG5tbS9LY29uZmlnLTEyNi1cdHRyaXN0YXRlXG4tLVxubW0vS2NvbmZpZz0xMzE9Y29tbWVudCBcJiMzNDtac21hbGxvYyBpcyBhIGNvbW1vbiBiYWNrZW5kIGFsbG9jYXRvciBmb3IgenN3YXAgXHUwMDI2IHpyYW1cJiMzNDtcbm1tL0tjb25maWctMTMyLVxubW0vS2NvbmZpZzoxMzM6Y29uZmlnIFpTTUFMTE9DX1NUQVRcbm1tL0tjb25maWctMTM0LVx0Ym9vbCBcJiMzNDtFeHBvcnQgenNtYWxsb2Mgc3RhdGlzdGljc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxLVxubW0vS2NvbmZpZzoxNDI6Y29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcbm1tL0tjb25maWctMTQzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzIHBlci16c3BhZ2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTE2Mj1tZW51IFwmIzM0O1NsYWIgYWxsb2NhdG9yIG9wdGlvbnNcJiMzNDtcbm1tL0tjb25maWctMTYzLVxubW0vS2NvbmZpZzoxNjQ6Y29uZmlnIFNMVUJcbm1tL0tjb25maWctMTY1LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctMTY3LVxubW0vS2NvbmZpZzoxNjg6Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxubW0vS2NvbmZpZy0xNjktXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy0xNzItXG5tbS9LY29uZmlnOjE3Mzpjb25maWcgU0xVQl9USU5ZXG5tbS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7Q29uZmlndXJlIGZvciBtaW5pbWFsIG1lbW9yeSBmb290cHJpbnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE4NS1cbm1tL0tjb25maWc6MTg2OmNvbmZpZyBTTEFCX01FUkdFX0RFRkFVTFRcbm1tL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtBbGxvdyBzbGFiIGNhY2hlcyB0byBiZSBtZXJnZWRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE5OS1cbm1tL0tjb25maWc6MjAwOmNvbmZpZyBTTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vS2NvbmZpZy0yMDEtXHRib29sIFwmIzM0O1JhbmRvbWl6ZSBzbGFiIGZyZWVsaXN0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0yMDctXG5tbS9LY29uZmlnOjIwODpjb25maWcgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxubW0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O0hhcmRlbiBzbGFiIGZyZWVsaXN0IG1ldGFkYXRhXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0yMTYtXG5tbS9LY29uZmlnOjIxNzpjb25maWcgU0xBQl9CVUNLRVRTXG5tbS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0yMzMtXG5tbS9LY29uZmlnOjIzNDpjb25maWcgU0xVQl9TVEFUU1xubW0vS2NvbmZpZy0yMzUtXHRkZWZhdWx0IG5cbi0tXG5tbS9LY29uZmlnLTI0Ni1cbm1tL0tjb25maWc6MjQ3OmNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcbm1tL0tjb25maWctMjQ4LVx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG4tLVxubW0vS2NvbmZpZz0yNjM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy0yNzAtXG5tbS9LY29uZmlnOjI3MTpjb25maWcgS01BTExPQ19QQVJUSVRJT05fUkFORE9NXG5tbS9LY29uZmlnLTI3Mi1cdGJvb2wgXCYjMzQ7UmFuZG9taXplIHNsYWIgY2FjaGVzIGZvciBub3JtYWwga21hbGxvY1wmIzM0O1xuLS1cbm1tL0tjb25maWctMjgyLVxubW0vS2NvbmZpZzoyODM6Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEXG5tbS9LY29uZmlnLTI4NC1cdGJvb2wgXCYjMzQ7VHlwZSBiYXNlZCBzbGFiIGNhY2hlIHNlbGVjdGlvbiBmb3Igbm9ybWFsIGttYWxsb2NcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTMwOT1lbmRjaG9pY2Vcbm1tL0tjb25maWctMzEwLVxubW0vS2NvbmZpZzozMTE6Y29uZmlnIFJBTkRPTV9LTUFMTE9DX0NBQ0hFU1xubW0vS2NvbmZpZy0zMTItXHRib29sXG4tLVxubW0vS2NvbmZpZy0zMTQtXHRoZWxwXG5tbS9LY29uZmlnOjMxNTpcdCAgVHJhbnNpdGlvbmFsIGNvbmZpZyBmb3IgbWlncmF0aW9uIHRvIEtNQUxMT0NfUEFSVElUSU9OX0NBQ0hFUy5cbm1tL0tjb25maWctMzE2LVxubW0vS2NvbmZpZz0zMTc9ZW5kbWVudSAjIFNsYWIgYWxsb2NhdG9yIG9wdGlvbnNcbm1tL0tjb25maWctMzE4LVxubW0vS2NvbmZpZzozMTk6Y29uZmlnIFNIVUZGTEVfUEFHRV9BTExPQ0FUT1Jcbm1tL0tjb25maWctMzIwLVx0Ym9vbCBcJiMzNDtQYWdlIGFsbG9jYXRvciByYW5kb21pemF0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNDEtXG5tbS9LY29uZmlnOjM0Mjpjb25maWcgQ09NUEFUX0JSS1xubW0vS2NvbmZpZy0zNDMtXHRib29sIFwmIzM0O0Rpc2FibGUgaGVhcCByYW5kb21pemF0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNTMtXG5tbS9LY29uZmlnOjM1NDpjb25maWcgTU1BUF9BTExPV19VTklOSVRJQUxJWkVEXG5tbS9LY29uZmlnLTM1NS1cdGJvb2wgXCYjMzQ7QWxsb3cgbW1hcHBlZCBhbm9ueW1vdXMgbWVtb3J5IHRvIGJlIHVuaW5pdGlhbGl6ZWRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM2MC1cdCAgZnJvbSBtbWFwKCkgaGFzIGl0cyBjb250ZW50cyBjbGVhcmVkIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG9cbm1tL0tjb25maWc6MzYxOlx0ICB1c2Vyc3BhY2UuICBFbmFibGluZyB0aGlzIGNvbmZpZyBvcHRpb24gYWxsb3dzIHlvdSB0byByZXF1ZXN0IHRoYXRcbm1tL0tjb25maWctMzYyLVx0ICBtbWFwKCkgc2tpcCB0aGF0IGlmIGl0IGlzIGdpdmVuIGFuIE1BUF9VTklOSVRJQUxJWkVEIGZsYWcsIHRodXNcbi0tXG5tbS9LY29uZmlnLTM3NS1cbm1tL0tjb25maWc6Mzc2OmNvbmZpZyBTRUxFQ1RfTUVNT1JZX01PREVMXG5tbS9LY29uZmlnLTM3Ny1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnPTM4MD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTM5MC1cbm1tL0tjb25maWc6MzkxOmNvbmZpZyBGTEFUTUVNX01BTlVBTFxubW0vS2NvbmZpZy0zOTItXHRib29sIFwmIzM0O0ZsYXQgTWVtb3J5XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00MDYtXG5tbS9LY29uZmlnOjQwNzpjb25maWcgU1BBUlNFTUVNX01BTlVBTFxubW0vS2NvbmZpZy00MDgtXHRib29sIFwmIzM0O1NwYXJzZSBNZW1vcnlcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTQyMD1lbmRjaG9pY2Vcbm1tL0tjb25maWctNDIxLVxubW0vS2NvbmZpZzo0MjI6Y29uZmlnIFNQQVJTRU1FTVxubW0vS2NvbmZpZy00MjMtXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy00MjUtXG5tbS9LY29uZmlnOjQyNjpjb25maWcgRkxBVE1FTVxubW0vS2NvbmZpZy00MjctXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy00NDAtI1xubW0vS2NvbmZpZzo0NDE6Y29uZmlnIFNQQVJTRU1FTV9TVEFUSUNcbm1tL0tjb25maWctNDQyLVx0Ym9vbFxuLS1cbm1tL0tjb25maWctNDQ4LSNcbm1tL0tjb25maWc6NDQ5OmNvbmZpZyBTUEFSU0VNRU1fRVhUUkVNRVxubW0vS2NvbmZpZy00NTAtXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy00NTItXG5tbS9LY29uZmlnOjQ1Mzpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXG5tbS9LY29uZmlnLTQ1NC1cdGJvb2xcbm1tL0tjb25maWctNDU1LVxubW0vS2NvbmZpZzo0NTY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQXG5tbS9LY29uZmlnLTQ1Ny1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnLTQ2My1cbm1tL0tjb25maWc6NDY0OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXG5tbS9LY29uZmlnLTQ2NS1cdGJvb2xcbm1tL0tjb25maWctNDY2LSNcbm1tL0tjb25maWc6NDY3OiMgU2VsZWN0IHRoaXMgY29uZmlnIG9wdGlvbiBmcm9tIHRoZSBhcmNoaXRlY3R1cmUgS2NvbmZpZywgaWYgaXQgaXMgcHJlZmVycmVkXG5tbS9LY29uZmlnLTQ2OC0jIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSBvZiBIdWdlVExCL2Rldl9kYXggdm1lbW1hcCBvcHRpbWl6YXRpb24uXG5tbS9LY29uZmlnLTQ2OS0jXG5tbS9LY29uZmlnOjQ3MDpjb25maWcgQVJDSF9XQU5UX09QVElNSVpFX0RBWF9WTUVNTUFQXG5tbS9LY29uZmlnLTQ3MS1cdGJvb2xcbm1tL0tjb25maWctNDcyLVxubW0vS2NvbmZpZzo0NzM6Y29uZmlnIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcbm1tL0tjb25maWctNDc0LVx0Ym9vbFxubW0vS2NvbmZpZy00NzUtXG5tbS9LY29uZmlnOjQ3Njpjb25maWcgQVJDSF9XQU5UX0hVR0VUTEJfVk1FTU1BUF9QUkVJTklUXG5tbS9LY29uZmlnLTQ3Ny1cdGJvb2xcbm1tL0tjb25maWctNDc4LVxubW0vS2NvbmZpZzo0Nzk6Y29uZmlnIEhBVkVfTUVNQkxPQ0tfUEhZU19NQVBcbm1tL0tjb25maWctNDgwLVx0Ym9vbFxubW0vS2NvbmZpZy00ODEtXG5tbS9LY29uZmlnOjQ4Mjpjb25maWcgSEFWRV9HVVBfRkFTVFxubW0vS2NvbmZpZy00ODMtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWctNDg2LSMgRW5hYmxlIG1lbWJsb2NrIHN1cHBvcnQgZm9yIHNjcmF0Y2ggbWVtb3J5IHdoaWNoIGlzIG5lZWRlZCBmb3Iga2V4ZWMgaGFuZG92ZXJcbm1tL0tjb25maWc6NDg3OmNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxubW0vS2NvbmZpZy00ODgtXHRib29sXG4tLVxubW0vS2NvbmZpZy00OTItIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXG5tbS9LY29uZmlnOjQ5Mzpjb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXG5tbS9LY29uZmlnLTQ5NC1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTQ5Ni0jIEtlZXAgYXJjaCBOVU1BIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgcG9zdC1pbml0LlxubW0vS2NvbmZpZzo0OTc6Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXG5tbS9LY29uZmlnLTQ5OC1cdGJvb2xcbm1tL0tjb25maWctNDk5LVxubW0vS2NvbmZpZzo1MDA6Y29uZmlnIE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWctNTAxLVx0Ym9vbFxuLS1cbm1tL0tjb25maWctNTA1LSMgL2Rldi9tZW0uXG5tbS9LY29uZmlnOjUwNjpjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cbm1tL0tjb25maWctNTA3LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNTA5LVxubW0vS2NvbmZpZzo1MTA6Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUxMS1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTUxMy0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTE0Om1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTE1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuLS1cbm1tL0tjb25maWc9NTI0PWNob2ljZVxuLS1cbm1tL0tjb25maWctNTQ1LVxubW0vS2NvbmZpZzo1NDY6Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcbm1tL0tjb25maWctNTQ3LVx0Ym9vbCBcJiMzNDtvZmZsaW5lXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy01NTItXG5tbS9LY29uZmlnOjU1Mzpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE9cbm1tL0tjb25maWctNTU0LVx0Ym9vbCBcJiMzNDthdXRvXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy01NTktXG5tbS9LY29uZmlnOjU2MDpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0tFUk5FTFxubW0vS2NvbmZpZy01NjEtXHRib29sIFwmIzM0O2tlcm5lbFwmIzM0O1xuLS1cbm1tL0tjb25maWctNTY2LVxubW0vS2NvbmZpZzo1Njc6Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFXG5tbS9LY29uZmlnLTU2OC1cdGJvb2wgXCYjMzQ7bW92YWJsZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTgwPWVuZGNob2ljZVxubW0vS2NvbmZpZy01ODEtXG5tbS9LY29uZmlnOjU4Mjpjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy01ODMtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctNTg1LVxubW0vS2NvbmZpZzo1ODY6Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXG5tbS9LY29uZmlnLTU4Ny1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnPTU5MD1lbmRpZiAjIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTU5MS1cbm1tL0tjb25maWc6NTkyOmNvbmZpZyBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxubW0vS2NvbmZpZy01OTMtICAgICAgIGJvb2xcbi0tXG5tbS9LY29uZmlnLTYwNS0jXG5tbS9LY29uZmlnOjYwNjpjb25maWcgU1BMSVRfUFRFX1BUTE9DS1Ncbm1tL0tjb25maWctNjA3LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNjE1LVxubW0vS2NvbmZpZzo2MTY6Y29uZmlnIEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0tcbm1tL0tjb25maWctNjE3LVx0Ym9vbFxubW0vS2NvbmZpZy02MTgtXG5tbS9LY29uZmlnOjYxOTpjb25maWcgU1BMSVRfUE1EX1BUTE9DS1Ncbm1tL0tjb25maWctNjIwLVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNjI0LSMgc3VwcG9ydCBmb3IgbWVtb3J5IGJhbGxvb25cbm1tL0tjb25maWc6NjI1OmNvbmZpZyBCQUxMT09OXG5tbS9LY29uZmlnLTYyNi1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTYyOS0jIHN1cHBvcnQgZm9yIG1lbW9yeSBiYWxsb29uIHBhZ2UgbWlncmF0aW9uXG5tbS9LY29uZmlnOjYzMDpjb25maWcgQkFMTE9PTl9NSUdSQVRJT05cbm1tL0tjb25maWctNjMxLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgYmFsbG9vbiBtZW1vcnkgbWlncmF0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy02NDEtIyBzdXBwb3J0IGZvciBtZW1vcnkgY29tcGFjdGlvblxubW0vS2NvbmZpZzo2NDI6Y29uZmlnIENPTVBBQ1RJT05cbm1tL0tjb25maWctNjQzLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTY1Ni1cbm1tL0tjb25maWc6NjU3OmNvbmZpZyBDT01QQUNUX1VORVZJQ1RBQkxFX0RFRkFVTFRcbm1tL0tjb25maWctNjU4LVx0aW50XG4tLVxubW0vS2NvbmZpZy02NjQtIyBzdXBwb3J0IGZvciBmcmVlIHBhZ2UgcmVwb3J0aW5nXG5tbS9LY29uZmlnOjY2NTpjb25maWcgUEFHRV9SRVBPUlRJTkdcbm1tL0tjb25maWctNjY2LVx0Ym9vbCBcJiMzNDtGcmVlIHBhZ2UgcmVwb3J0aW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy02NzItXG5tbS9LY29uZmlnOjY3Mzpjb25maWcgTlVNQV9NSUdSQVRJT05cbm1tL0tjb25maWctNjc0LVx0Ym9vbCBcJiMzNDtOVU1BIHBhZ2UgbWlncmF0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy02ODMtXG5tbS9LY29uZmlnOjY4NDpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4NS1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTY4Ny1cbm1tL0tjb25maWc6Njg4OmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4OS1cdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctNjkwLVxubW0vS2NvbmZpZzo2OTE6Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxubW0vS2NvbmZpZy02OTItXHRib29sXG5tbS9LY29uZmlnLTY5My1cbm1tL0tjb25maWc6Njk0OmNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xubW0vS2NvbmZpZy02OTUtXHRib29sXG5tbS9LY29uZmlnLTY5Ni1cbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy02OTgtXHRkZWZfYm9vbCBuXG4tLVxubW0vS2NvbmZpZy03MDYtXG5tbS9LY29uZmlnOjcwNzpjb25maWcgQ09OVElHX0FMTE9DXG5tbS9LY29uZmlnLTcwOC1cdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFx1MDAyNlx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcbm1tL0tjb25maWctNzA5LVxubW0vS2NvbmZpZzo3MTA6Y29uZmlnIFBDUF9CQVRDSF9TQ0FMRV9NQVhcbm1tL0tjb25maWctNzExLVx0aW50IFwmIzM0O01heGltdW0gc2NhbGUgZmFjdG9yIG9mIFBDUCAoUGVyLUNQVSBwYWdlc2V0KSBiYXRjaCBhbGxvY2F0ZS9mcmVlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy03MjAtXG5tbS9LY29uZmlnOjcyMTpjb25maWcgUEhZU19BRERSX1RfNjRCSVRcbm1tL0tjb25maWctNzIyLVx0ZGVmX2Jvb2wgNjRCSVRcbm1tL0tjb25maWctNzIzLVxubW0vS2NvbmZpZzo3MjQ6Y29uZmlnIE1NVV9OT1RJRklFUlxubW0vS2NvbmZpZy03MjUtXHRib29sXG4tLVxubW0vS2NvbmZpZy03MjctXG5tbS9LY29uZmlnOjcyODpjb25maWcgS1NNXG5tbS9LY29uZmlnLTcyOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy03NDItXG5tbS9LY29uZmlnOjc0Mzpjb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXG5tbS9LY29uZmlnLTc0NC1cdGludCBcJiMzNDtMb3cgYWRkcmVzcyBzcGFjZSB0byBwcm90ZWN0IGZyb20gdXNlciBhbGxvY2F0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy03NjEtXG5tbS9LY29uZmlnOjc2Mjpjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjMtXHRib29sXG5tbS9LY29uZmlnLTc2NC1cbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWctNzc2LVxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxubW0vS2NvbmZpZy03NzgtXHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuLS1cbm1tL0tjb25maWctNzgxLVxubW0vS2NvbmZpZzo3ODI6Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1Ncbm1tL0tjb25maWctNzgzLVx0aW50IFwmIzM0O1R1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctODA5LVxubW0vS2NvbmZpZzo4MTA6Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcbm1tL0tjb25maWctODExLVx0Ym9vbFxubW0vS2NvbmZpZy04MTItXG5tbS9LY29uZmlnOjgxMzpjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxubW0vS2NvbmZpZy04MTQtXHRkZWZfYm9vbCBuXG5tbS9LY29uZmlnLTgxNS1cbm1tL0tjb25maWc6ODE2OmNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xubW0vS2NvbmZpZy04MTctXHRib29sIFwmIzM0O0FsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04MzEtXG5tbS9LY29uZmlnOjgzMjpjb25maWcgTU1fSURcbm1tL0tjb25maWctODMzLVx0ZGVmX2Jvb2wgblxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTk2OT1lbmRjaG9pY2Vcbm1tL0tjb25maWctOTcwLVxubW0vS2NvbmZpZzo5NzE6Y29uZmlnIFRIUF9TV0FQXG5tbS9LY29uZmlnLTk3Mi1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnLTk4MC1cbm1tL0tjb25maWc6OTgxOmNvbmZpZyBOT19QQUdFX01BUENPVU5UXG5tbS9LY29uZmlnLTk4Mi1cdGJvb2wgXCYjMzQ7Tm8gcGVyLXBhZ2UgbWFwY291bnQgKEVYUEVSSU1FTlRBTClcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk4Ni1cbm1tL0tjb25maWc6OTg3Olx0ICBXaGVuIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLCBzb21lIGludGVyZmFjZXMgdGhhdCByZWxpZWQgb25cbm1tL0tjb25maWctOTg4LVx0ICB0aGlzIGluZm9ybWF0aW9uIHdpbGwgcmVseSBvbiBsZXNzLXByZWNpc2UgcGVyLWFsbG9jYXRpb24gaW5mb3JtYXRpb25cbi0tXG5tbS9LY29uZmlnPTk5ND1lbmRpZiAjIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4tLVxubW0vS2NvbmZpZy05OTYtIyBzaW1wbGUgaGVscGVyIHRvIG1ha2UgdGhlIGNvZGUgYSBiaXQgZWFzaWVyIHRvIHJlYWRcbm1tL0tjb25maWc6OTk3OmNvbmZpZyBQQUdFX01BUENPVU5UXG5tbS9LY29uZmlnLTk5OC1cdGRlZl9ib29sICFOT19QQUdFX01BUENPVU5UXG4tLVxubW0vS2NvbmZpZy0xMDAyLSNcbm1tL0tjb25maWc6MTAwMzpjb25maWcgUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNcbm1tL0tjb25maWctMTAwNC1cdGRlZl9ib29sIFRSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWctMTAwOC0jXG5tbS9LY29uZmlnOjEwMDk6Y29uZmlnIEhBVkVfR0lHQU5USUNfRk9MSU9TXG5tbS9LY29uZmlnLTEwMTAtXHRkZWZfYm9vbCAoSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19HSUdBTlRJQ19QQUdFKSB8fCBcXFxuLS1cbm1tL0tjb25maWctMTAxMi1cbm1tL0tjb25maWc6MTAxMzpjb25maWcgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVxubW0vS2NvbmZpZy0xMDE0LVx0ZGVmX2Jvb2wgblxuLS1cbm1tL0tjb25maWctMTAxNi0jIFRPRE86IEFsbG93IHRvIGJlIGVuYWJsZWQgd2l0aG91dCBUSFBcbm1tL0tjb25maWc6MTAxNzpjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUFxubW0vS2NvbmZpZy0xMDE4LVx0ZGVmX2Jvb2wgblxuLS1cbm1tL0tjb25maWctMTAyMC1cbm1tL0tjb25maWc6MTAyMTpjb25maWcgQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG5tbS9LY29uZmlnLTEwMjItXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy0xMDI0LVxubW0vS2NvbmZpZzoxMDI1OmNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbm1tL0tjb25maWctMTAyNi1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnLTEwMzItI1xubW0vS2NvbmZpZzoxMDMzOmNvbmZpZyBBUkNIX01PRFVMRV9ORUVEU19XRUFLX1BFUl9DUFVcbm1tL0tjb25maWctMTAzNC0gICAgICAgYm9vbFxuLS1cbm1tL0tjb25maWctMTAzOC0jXG5tbS9LY29uZmlnOjEwMzk6Y29uZmlnIE5FRURfUEVSX0NQVV9LTVxubW0vS2NvbmZpZy0xMDQwLVx0ZGVwZW5kcyBvbiAhU01QIHx8ICFNTVVcbi0tXG5tbS9LY29uZmlnLTEwNDMtXG5tbS9LY29uZmlnOjEwNDQ6Y29uZmlnIE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xubW0vS2NvbmZpZy0xMDQ1LVx0Ym9vbFxubW0vS2NvbmZpZy0xMDQ2LVxubW0vS2NvbmZpZzoxMDQ3OmNvbmZpZyBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xubW0vS2NvbmZpZy0xMDQ4LVx0Ym9vbFxubW0vS2NvbmZpZy0xMDQ5LVxubW0vS2NvbmZpZzoxMDUwOmNvbmZpZyBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRFxubW0vS2NvbmZpZy0xMDUxLVx0Ym9vbFxubW0vS2NvbmZpZy0xMDUyLVxubW0vS2NvbmZpZzoxMDUzOmNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxubW0vS2NvbmZpZy0xMDU0LVx0Ym9vbFxubW0vS2NvbmZpZy0xMDU1LVxubW0vS2NvbmZpZzoxMDU2OmNvbmZpZyBDTUFcbm1tL0tjb25maWctMTA1Ny1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDcwLVxubW0vS2NvbmZpZzoxMDcxOmNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDcyLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNzYtXG5tbS9LY29uZmlnOjEwNzc6Y29uZmlnIENNQV9TWVNGU1xubW0vS2NvbmZpZy0xMDc4LVx0Ym9vbCBcJiMzNDtDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODMtXG5tbS9LY29uZmlnOjEwODQ6Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDg1LVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5Ni0jXG5tbS9LY29uZmlnOjEwOTc6IyBTZWxlY3QgdGhpcyBjb25maWcgb3B0aW9uIGZyb20gdGhlIGFyY2hpdGVjdHVyZSBLY29uZmlnLCBpZiBhdmFpbGFibGUsIHRvIHNldFxubW0vS2NvbmZpZy0xMDk4LSMgdGhlIG1heCBwYWdlIG9yZGVyIGZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYWxsb2NhdGlvbnMuXG5tbS9LY29uZmlnLTEwOTktI1xubW0vS2NvbmZpZzoxMTAwOmNvbmZpZyBBUkNIX0ZPUkNFX01BWF9PUkRFUlxubW0vS2NvbmZpZy0xMTAxLVx0aW50XG4tLVxubW0vS2NvbmZpZy0xMTA3LSNcbm1tL0tjb25maWc6MTEwODpjb25maWcgUEFHRV9CTE9DS19NQVhfT1JERVJcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM1MwoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA0MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSFAgQ29sbGFwc2UgUGF0Y2gqKgoKT2theSwgdGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBrZXkgY29uZmlnIGhlcmUsIHRoZSBlbmFibGVyIGZvciBraHVnZXBhZ2VkLCBhbmQgdGhhdCB1bmRlciBpdCwgdGhlIHN5c3RlbSBkZWZhdWx0cyBmb3IgVEhQIGFyZSBpbXBsaWNpdGx5IGluY2x1ZGVkLgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmb2N1cyBzeW1ib2xzLi4uIHJpZ2h0LCBpdCYjMzk7cyBgY29sbGFwc2VfZmlsZWAsIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSBuZWVkIHRvIGV4cGxhaW4gdGhlIHJlYXNvbmluZyBjbGVhcmx5LiBUaGUgcGF0Y2ggaXMgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgYmVoYXZpb3Igd2l0aGluIGBjb2xsYXBzZV9maWxlKClgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG5vdyB0YWtpbmcgdGhlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKWAgYWNyb3NzIHRoZSBlbnRpcmUgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbiwgaW5jbHVkaW5nIHRoZSBjYWxsIHRvIGBhbGxvY19jaGFyZ2VfZm9saW8oKWAuIEFkZGl0aW9uYWxseSwgaXQgcmVwbGFjZXMgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAgd2l0aCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKWAuIFRoaXMgaW1wYWN0cyBjb3JlIE1NIGNvbmN1cnJlbmN5LCBsb2NraW5nIG9yZGVycyDigJMgaW52YWxpZGF0ZSBsb2NrIHZlcnN1cyBmb2xpbyBsb2NrcyB2ZXJzdXMgcmVjbGFpbSBhbmQgdHJ1bmNhdGUgaW50ZXJhY3Rpb25zIOKAkyBhbmQgcmVhZGFoZWFkIGxpbWl0cy4gUmVtZW1iZXIsIHRoaXMgbG9naWMgaXMgdHJpZ2dlcmVkIGJ5IGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBhbmQga2h1Z2VwYWdlZCBzY2FubmluZy4KClRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBzaW1wbGUgZW5vdWdoLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUganVzdCBgWyYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0O11gLiBBbmQsIGFzIHdlJiMzOTt2ZSByZXZpZXdlZCwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgWyYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LCAmIzM0O2NvbGxhcHNlX3NjYW5fZmlsZSYjMzQ7LCAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OywgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDtdYC4KCkhvbGQgb24sIGxldCBtZSBkb3VibGUtY2hlY2suIEFtIEkgbWlzc2luZyBhbnl0aGluZywgb3IgaXMgdGhlcmUgc29tZSBvdGhlciBmdW5jdGlvbiBpbiB0aGlzIHNwYWNlIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkPyBBaCwgcmlnaHQsIGBhbGxvY19jaGFyZ2VfZm9saW9gLi4uIEJ1dCB0aGF0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGtodWdlcGFnZWQsIGFuZCAqc3BlY2lmaWNhbGx5KiBieSBgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluYCwgYGNvbGxhcHNlX2h1Z2VfcGFnZWAgYW5kIGBjb2xsYXBzZV9maWxlYC4gSG93ZXZlciwgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgY29sbGFwc2VfZmlsZWAsIGFuZCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmcm9tIHVzZXJzcGFjZSBpcyBgbWFkdmlzZV9jb2xsYXBzZWAuIFNvLCB0aGUgaW5pdGlhbCBmb2N1cyBpcyBjb3JyZWN0LiBUaG9zZSBmb3VyIGFyZSB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGVtcGhhc2l6ZS4KCk9rYXksIGFsbCBzZXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2xsYXBzZV9maWxlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NjYW5fZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zaW5nbGVfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2xsYXBzZV9maWxlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NjYW5fZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zaW5nbGVfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL2todWdlcGFnZWQuYyB0byBhZGp1c3QgbG9ja2luZyBvcmRlciBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIHByaW9yIHRvIHRha2luZyBmb2xpbyBsb2NrcywgYW5kIGludm9rZXMgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSBpbnN0ZWFkIG9mIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGFuZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCBib3VuZHMuIFRoZSByZWFkYWhlYWRfY29udHJvbCBzdHJ1Y3R1cmUgKHJhY3RsKSBpcyBpbml0aWFsaXplZCB1c2luZyBERUZJTkVfUkVBREFIRUFEIChDOTkgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZW5zdXJpbmcgYWxsIHVubWVudGlvbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIGludHJvZHVjZWQsIG1vZGlmaWVkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgZGVidWcga2VybmVscyAoS0FTQU4gYnVpbGRzKSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjlkMjExNjVhNzFmZTNhZTdiNjMwYjFhMTZmNWZjZDNkMTRiZWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6MzU6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmMKaW5kZXggMTFmZjk4ZDU1Yzc2ZS4uNjkwY2NiY2RmNTkzOCAxMDA2NDQKLS0tIGEvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuYwpAQCAtMjI2Nyw2ICYjNDM7MjI2NywxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJVk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSAmYW1wOyZhbXA7ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTsKIAlWTV9XQVJOX09OX09OQ0Uoc3RhcnQgJmFtcDsgKEhQQUdFX1BNRF9OUiAtIDEpKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3cKJiM0MzsJICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFpc19zaG1lbSkKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsKJiM0MzsKIAlyZXN1bHQgPSBhbGxvY19jaGFyZ2VfZm9saW8oJmFtcDtuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTsKIAlpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkKIAkJZ290byBvdXQ7CkBAIC0yMzM3LDEwICYjNDM7MjM0NCwyMCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQl9CiAJCX0gZWxzZSB7CS8qICFpc19zaG1lbSAqLwogCQkJaWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHsKJiM0MzsJCQkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgJmFtcDtmaWxlLSZndDtmX3JhLAomIzQzOwkJCQkJCSAgbWFwcGluZywgaW5kZXgpOwomIzQzOwkJCQlwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLSZndDtob3N0KSwKJiM0MzsJCQkJCQkJICAgIFBBR0VfU0laRSk7CiYjNDM7CiAJCQkJeGFzX3VubG9ja19pcnEoJmFtcDt4YXMpOwotCQkJCXBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgJmFtcDtmaWxlLSZndDtmX3JhLAotCQkJCQkJCSAgZmlsZSwgaW5kZXgsCi0JCQkJCQkJICBlbmQgLSBpbmRleCk7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LgomIzQzOwkJCQkgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZAomIzQzOwkJCQkgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKGluZGV4ICZsdDsgZW9mKQomIzQzOwkJCQkJcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoJmFtcDtyYWN0bCwKJiM0MzsJCQkJCQltaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApOwogCQkJCS8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi8KIAkJCQlscnVfYWRkX2RyYWluKCk7CiAJCQkJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpOwpAQCAtMjY3Miw2ICYjNDM7MjY4OSw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlmb2xpb191bmxvY2sobmV3X2ZvbGlvKTsKIAlmb2xpb19wdXQobmV3X2ZvbGlvKTsKIG91dDoKJiM0MzsJaWYgKCFpc19zaG1lbSkKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwogCVZNX0JVR19PTighbGlzdF9lbXB0eSgmYW1wO3BhZ2VsaXN0KSk7CiAJdHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUga2h1Z2VwYWdlZCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZpcnN0IGltcHJlc3Npb24gaXMgdGhhdCBpdCBkZWFscyB3aXRoIHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiBjb21wbGV4IG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgdGVuZCB0byBvY2N1ci4gIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIG9yZGVyaW5nIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KCkxvb2tpbmcgYXQgdGhlIGRpZmYsIHRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGZpbGUgbWFwcGluZyBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24gYW5kIGhhbmRsaW5nIG9mIHRoZSBgaW52YWxpZGF0ZV9sb2NrYC4gIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAgYW5kIGBmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZGAgYWxvbmcgd2l0aCB0aGUgYERFRklORV9SRUFEQUhFQURgIG1hY3JvIGNhdGNoZXMgbXkgZXllIGltbWVkaWF0ZWx5LiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIHRyeWluZyB0byBpbXByb3ZlIHRoZSByZWFkYWhlYWQgbG9naWMsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgYnV0IGFzIHdlIGFsbCBrbm93IHRoZXNlIHR5cGVzIG9mIGNoYW5nZXMgY2FuIG9mdGVuIGludHJvZHVjZSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGlzc3Vlcy4KClRoZSBjb21tZW50IGFib3V0IHRha2luZyBgaW52YWxpZGF0ZV9sb2NrYCBiZWZvcmUgYW55IGZvbGlvIGxvY2sgaXMgY3J1Y2lhbC4gIFRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBsb2NraW5nIG9yZGVyLCBwb3RlbnRpYWxseSB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBpbXByb3ZlIGNvbmN1cnJlbmN5LiBUaGUgb2xkIGxvY2tpbmcgb3JkZXIgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuIFdhcyB0aGVyZSBhIGtub3duIGlzc3VlIHRoYXQgbGVkIHRvIHRoaXMgcmVvcmRlcmluZz8KClRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIHNlZW1zIGltcG9ydGFudCBhcyBhIHJlcGxhY2VtZW50IGZvciBhIHByZXZpb3VzIHJlYWRhaGVhZCBjYWxsLiBUaGUgbm90ZSBhYm91dCBFT0YgbWFrZXMgbWUgdGhpbmsgdGhlIG9sZCBiZWhhdmlvciBjb3VsZCBoYXZlIGNhdXNlZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgY29tbWVudCBhYm91dCBpbnZhbGlkYXRlX2xvY2sgYmVpbmcgaGVsZCBhYm92ZSBpcyBhbHNvIGltcG9ydGFudC4KCk92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIGZhaXJseSB0YXJnZXRlZCBjaGFuZ2UsIGFuZCBub3QgYSBtYXNzaXZlIHJlZmFjdG9yLiBCdXQsIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGEgc2VlbWluZ2x5IHNtYWxsIGNoYW5nZSBjYW4gaGF2ZSBmYXItcmVhY2hpbmcgY29uc2VxdWVuY2VzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIG5ldyByZWFkYWhlYWQgbWVjaGFuaXNtIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuICBJJiMzOTtsbCB3YW50IHRvIGluc3BlY3QgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGhvdyBgaW52YWxpZGF0ZV9sb2NrYCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gbG9ja2luZyBhbmQgdGhlIHJlYWRhaGVhZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBLTVNBTiB0byByZXZlYWwgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJIHNob3VsZCB1c2UgZ3JlcHBlciBvciByZWFkLWZpbGUgb24gYG1tL2todWdlcGFnZWQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgY29kZS4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGBpZiAoIWlzX3NobWVtKWAgYmxvY2ssIHRvIHNlZSBob3cgdGhlIG5ldyBsb2NraW5nIGFuZCByZWFkYWhlYWQgZnVuY3Rpb25zIGFyZSB1c2VkLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgSSBnZXQgZnJvbSB0aGVzZSBjaGVja3MsIEkmIzM5O2xsIGJlIGFibGUgdG8gdGVsbCBpZiBLTVNBTiBzaG91bGQgYmUgYXBwbGllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNjA6XHRcbjIyNjE6XHRcdC8qXG4yMjYyOlx0XHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxuMjI2MzpcdFx0ICpcbjIyNjQ6XHRcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xuMjI2NTpcdFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxuMjI2NjpcdFx0ICovXG4yMjY3Olx0XHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XG4yMjY4Olx0XHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XG4yMjY5Olx0XG4yMjcwOlx0XHQvKlxuMjI3MTpcdFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4yMjcyOlx0XHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXG4yMjczOlx0XHQgKi9cbjIyNzQ6XHRcdGlmICghaXNfc2htZW0pXG4yMjc1Olx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbjIyNzY6XHRcbjIyNzc6XHRcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcbjIyNzg6XHRcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuMjI3OTpcdFx0XHRnb3RvIG91dDtcbjIyODA6XHRcbjIyODE6XHRcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuMjI4MjpcdFxuMjI4MzpcdFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG4yMjg0Olx0XHRpZiAoaXNfc2htZW0pXG4yMjg1Olx0XHRcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQobmV3X2ZvbGlvKTtcbjIyODY6XHRcdG5ld19mb2xpby1cdTAwM2VpbmRleCA9IHN0YXJ0O1xuMjI4NzpcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xuMjI4ODpcdFxuMjI4OTpcdFx0LypcbjIyOTA6XHRcdCAqIEVuc3VyZSB3ZSBoYXZlIHNsb3RzIGZvciBhbGwgdGhlIHBhZ2VzIGluIHRoZSByYW5nZS4gIFRoaXMgaXNcbjIyOTE6XHRcdCAqIGFsbW9zdCBjZXJ0YWlubHkgYSBuby1vcCBiZWNhdXNlIG1vc3Qgb2YgdGhlIHBhZ2VzIG11c3QgYmUgcHJlc2VudFxuMjI5MjpcdFx0ICovXG4yMjkzOlx0XHRkbyB7XG4yMjk0Olx0XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjI5NTpcdFx0XHR4YXNfY3JlYXRlX3JhbmdlKFx1MDAyNnhhcyk7XG4yMjk2Olx0XHRcdGlmICgheGFzX2Vycm9yKFx1MDAyNnhhcykpXG4yMjk3Olx0XHRcdFx0YnJlYWs7XG4yMjk4Olx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMjk5Olx0XHRcdGlmICgheGFzX25vbWVtKFx1MDAyNnhhcywgR0ZQX0tFUk5FTCkpIHtcbjIzMDA6XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XG4yMzAxOlx0XHRcdFx0Z290byByb2xsYmFjaztcbjIzMDI6XHRcdFx0fVxuMjMwMzpcdFx0fSB3aGlsZSAoMSk7XG4yMzA0Olx0XG4yMzA1Olx0XHRmb3IgKGluZGV4ID0gc3RhcnQ7IGluZGV4IFx1MDAzYyBlbmQ7KSB7XG4yMzA2Olx0XHRcdHhhc19zZXQoXHUwMDI2eGFzLCBpbmRleCk7XG4yMzA3Olx0XHRcdGZvbGlvID0geGFzX2xvYWQoXHUwMDI2eGFzKTtcbjIzMDg6XHRcbjIzMDk6XHRcdFx0Vk1fQlVHX09OKGluZGV4ICE9IHhhcy54YV9pbmRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBraHVnZXBhZ2VkLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGh1Z2VwYWdlcywgYW5kIHRoZSBkaXNjdXNzaW9uIGhhcyBkcmlmdGVkIHRvd2FyZHMgcG90ZW50aWFsIGlzc3Vlcywgb3IgcGVyaGFwcyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHRoaW5rIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCB0aGlzIGRlZXAgZGl2ZSBpcyB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AuIFRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lcyAyMzMwLTIzODAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMsIGFuZCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IG1pc21hbmFnaW5nLCBodWdlcGFnZXMgaW4gYSBzcGVjaWZpYyBzY2VuYXJpby4gSSYjMzk7bGwgbmVlZCB0byBzZWUgd2hhdCB0aG9zZSBsaW5lcyBhcmUgYWN0dWFsbHkgKmRvaW5nKiB0byBnZXQgYSBwcm9wZXIgaGFuZGxlIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzMwOlx0XHRcdFx0XHQvKiBzd2FwIGluIG9yIGluc3RhbnRpYXRlIGZhbGxvY2F0ZWQgcGFnZSAqL1xuMjMzMTpcdFx0XHRcdFx0aWYgKHNobWVtX2dldF9mb2xpbyhtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCAwLFxuMjMzMjpcdFx0XHRcdFx0XHRcdFx1MDAyNmZvbGlvLCBTR1BfTk9BTExPQykpIHtcbjIzMzM6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjMzNDpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjMzNTpcdFx0XHRcdFx0fVxuMjMzNjpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjMzNzpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjMzODpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzMzk6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzQwOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM0MTpcdFx0XHRcdH0gZWxzZSB7XG4yMzQyOlx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbjIzNDM6XHRcdFx0XHRcdGdvdG8geGFfbG9ja2VkO1xuMjM0NDpcdFx0XHRcdH1cbjIzNDU6XHRcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuMjM0NjpcdFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4yMzQ3Olx0XHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4yMzQ4Olx0XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4yMzQ5Olx0XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuMjM1MDpcdFx0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4yMzUxOlx0XG4yMzUyOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM1MzpcdFx0XHRcdFx0LypcbjIzNTQ6XHRcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuMjM1NTpcdFx0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbjIzNTY6XHRcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4yMzU3Olx0XHRcdFx0XHQgKi9cbjIzNTg6XHRcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuMjM1OTpcdFx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbjIzNjA6XHRcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuMjM2MTpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM2MjpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM2MzpcdFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuMjM2NDpcdFx0XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjIzNjU6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjM2NjpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM2NzpcdFx0XHRcdFx0fVxuMjM2ODpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbjIzNjk6XHRcdFx0XHRcdC8qXG4yMzcwOlx0XHRcdFx0XHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJiMzOTt0XG4yMzcxOlx0XHRcdFx0XHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXG4yMzcyOlx0XHRcdFx0XHQgKlxuMjM3MzpcdFx0XHRcdFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxuMjM3NDpcdFx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG4yMzc1Olx0XHRcdFx0XHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXG4yMzc2Olx0XHRcdFx0XHQgKiB0aGVpciBmb2xpb3MgZGlydHkgYXQgYW55IHRpbWU7IGJsaW5kbHlcbjIzNzc6XHRcdFx0XHRcdCAqIGZsdXNoaW5nIHRoZW0gd291bGQgY2F1c2UgdW5kZXNpcmFibGVcbjIzNzg6XHRcdFx0XHRcdCAqIHN5c3RlbS13aWRlIHdyaXRlYmFjay5cbjIzNzk6XHRcdFx0XHRcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyBgY29sbGFwc2VfZmlsZWAgYXJvdW5kIHRoZSBgb3V0OmAgSW5kaWNhdG9yKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG9iamVjdGl2ZSBoZXJlIGlzIGNsZWFybHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYmVoYXZlcyBuZWFyIHRoZSBgb3V0OmAgbWFya2VyIHdpdGhpbiB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgaG9saXN0aWMgdmlldywgbm90IGp1c3QgaXNvbGF0ZSB0aGUgc25pcHBldC4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0JiMzOTtzIHRoZSBjb250ZXh0PyYjMzQ7IFdoYXQmIzM5O3MgaGFwcGVuaW5nICpiZWZvcmUqIHRoYXQgYG91dDpgIGxhYmVsLCBhbmQgd2hhdCBmb2xsb3dzPyBVbmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoYXQgcG9pbnQgaXMgY3JpdGljYWwuIElzIGl0IGEgY29uZGl0aW9uYWw/IEEgbG9vcD8gV2hhdCBhcmUgdGhlIHZhcmlhYmxlcyBpbiBzY29wZSBhdCB0aGF0IGxvY2F0aW9uPyBBcmUgdGhlcmUgc2lkZSBlZmZlY3RzIGJlaW5nIG1hbmFnZWQ/CgpJJiMzOTttIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggaXQsIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIElzIHRoaXMgYSBmaWxlIGhhbmRsZSwgYSBzdHJpbmcsIGEgbGlzdCwgYSBkaWN0aW9uYXJ5PyBJcyBpdCBnZW5lcmF0aW5nIHNvbWUgc29ydCBvZiBvdXRwdXQgZmlsZT8gV2hhdCYjMzk7cyB0aGUgb3ZlcmFyY2hpbmcgcHVycG9zZSBvZiBgY29sbGFwc2VfZmlsZWA/IEFtIEkgbG9va2luZyBhdCBmaWxlIEkvTyBvcGVyYXRpb25zLCBkYXRhIHRyYW5zZm9ybWF0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpNeSBtaW5kIGlzIGFsc28gY2hlY2tpbmcgZm9yIHRoZSBlZGdlIGNhc2VzLiBFcnJvciBoYW5kbGluZz8gRGF0YSB2YWxpZGF0aW9uPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIGx1cmtpbmcgbmVhciB0aGF0IGBvdXQ6YCBpbmRpY2F0b3IgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgYnVncz8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBwb3NzaWJsZSBwYXRocyBvZiBleGVjdXRpb24gdGhyb3VnaCB0aGF0IGFyZWEgb2YgdGhlIGNvZGUuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBleGVjdXRpb24gcHJvZmlsZSBjZW50ZXJlZCBhcm91bmQgdGhlIGBvdXQ6YCBsYWJlbCB0byBidWlsZCBhbiBhY2N1cmF0ZSBtZW50YWwgbW9kZWwgZm9yIHRoZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NzA6XHRcbjI2NzE6XHRyb2xsYmFjazpcbjI2NzI6XHRcdC8qIFNvbWV0aGluZyB3ZW50IHdyb25nOiByb2xsIGJhY2sgcGFnZSBjYWNoZSBjaGFuZ2VzICovXG4yNjczOlx0XHRpZiAobnJfbm9uZSkge1xuMjY3NDpcdFx0XHR4YXNfbG9ja19pcnEoXHUwMDI2eGFzKTtcbjI2NzU6XHRcdFx0bWFwcGluZy1cdTAwM2VucnBhZ2VzIC09IG5yX25vbmU7XG4yNjc2Olx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yNjc3Olx0XHRcdHNobWVtX3VuY2hhcmdlKG1hcHBpbmctXHUwMDNlaG9zdCwgbnJfbm9uZSk7XG4yNjc4Olx0XHR9XG4yNjc5Olx0XG4yNjgwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXHUwMDI2cGFnZWxpc3QsIGxydSkge1xuMjY4MTpcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuMjY4MjpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjY4MzpcdFx0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG4yNjg0Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4yNjg1Olx0XHR9XG4yNjg2Olx0XG4yNjg3Olx0XHRuZXdfZm9saW8tXHUwMDNlbWFwcGluZyA9IE5VTEw7XG4yNjg4Olx0XG4yNjg5Olx0XHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcbjI2OTA6XHRcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xuMjY5MTpcdG91dDpcbjI2OTI6XHRcdGlmICghaXNfc2htZW0pXG4yNjkzOlx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuMjY5NDpcdFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG4yNjk1Olx0XHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XG4yNjk2Olx0XHRyZXR1cm4gcmVzdWx0O1xuMjY5NzpcdH1cbjI2OTg6XHRcbjI2OTk6XHRzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4yNzAwOlx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsXG4yNzAxOlx0XHRcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbjI3MDI6XHR7XG4yNzAzOlx0XHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZSA9IGNvbGxhcHNlX21heF9wdGVzX25vbmUoY2MsIE5VTEwsIEhQQUdFX1BNRF9PUkRFUik7XG4yNzA0Olx0XHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfc3dhcCA9IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoY2MsIEhQQUdFX1BNRF9PUkRFUik7XG4yNzA1Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbjI3MDY6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4yNzA3Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcywgc3RhcnQpO1xuMjcwODpcdFx0aW50IHByZXNlbnQsIHN3YXA7XG4yNzA5Olx0XHRpbnQgbm9kZSA9IE5VTUFfTk9fTk9ERTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGtodWdlcGFnZWQuYyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBjb2xsYXBzZV9maWxlYCB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZS4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGZpbGUgbWFwcGluZyBpbnZhbGlkYXRpb24gbG9jayBhbmQgdGhlIHJlYWQtYWhlYWQgbWVjaGFuaXNtLgoKVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIGxvY2suICBCZWZvcmUsIHRoaXMgbG9jayB3YXMgdGFrZW4gd2l0aGluIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCwgYnV0IG9ubHkgKmFmdGVyKiBhY3F1aXJpbmcgZm9saW8gbG9ja3MgKGZvciBgIWlzX3NobWVtYCkuIFRoZSBwYXRjaCBub3cgdGFrZXMgdGhlIHNoYXJlZCBpbnZhbGlkYXRpb24gbG9jayAqYmVmb3JlKiBmb2xpbyBsb2NrIGFjcXVpc2l0aW9uLCBhbmQgaG9sZHMgaXQgZm9yIHRoZSBlbnRpcmUgY29sbGFwc2Ugb3BlcmF0aW9uLiAgVGhpcyBpcyBhIGNsYXNzaWMgZGVhZGxvY2sgYXZvaWRhbmNlIHN0cmF0ZWd5IOKAkyB0aGUgZHJlYWRlZCBsb2NrIGludmVyc2lvbi4KClRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGFwcHJvYWNoIG9mIGdyYWJiaW5nIHRoZSBmb2xpbyBsb2NrcywgdGhlbiBjYWxsaW5nIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCwgY291bGQgY3JlYXRlIGEgZGVhZGxvY2sgc2NlbmFyaW8uICBgY29sbGFwc2VfZmlsZWAgcG90ZW50aWFsbHkgd291bGQgYmUgd2FpdGluZyBvbiB0aGUgZm9saW8gbG9ja3Mgd2hpbGUgdHJ1bmNhdGUsIGhvbGRpbmcgdGhlIGludmFsaWRhdGUgbG9jaywgd2FpdGVkIG9uIHRoZSBgY29sbGFwc2VfZmlsZWAgdG8gcmVsZWFzZSBmb2xpbyBsb2NrcyB3aGljaCB3b3VsZCB0aGVuIG1ha2UgdGhlIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBmdW5jdGlvbiB0cnkgdG8gdGFrZSB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAuIFRoaXMgc2VxdWVuY2UgaXMgYSByZWNpcGUgZm9yIGxvY2sgaW52ZXJzaW9uIGFuZCwgbW9yZSBjb25jZXJuaW5nLCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2tkZXAgd2FybmluZ3MuCgpUaGUgZml4PyAgU2hpZnQgdGhlIGludmFsaWRhdGlvbiBsb2NrIGFjcXVpc2l0aW9uIHVwLWZyb250LiBBbmQgdGhhdCBtYWtlcyB0aGUgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIGNhbGwgcHJvYmxlbWF0aWMuIEl0JiMzOTtzIGJlZW4gcmVwbGFjZWQgd2l0aCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgLCB3aGljaCBkb2VzbiYjMzk7dCBpbnRlcm5hbGx5IHRyeSB0byBncmFiIHRoZSBzaGFyZWQgaW52YWxpZGF0aW9uIGxvY2suIEl0IHNlZW1zIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgKmV4cGVjdHMqIHRoZSBpbnZhbGlkYXRpb24gbG9jayB0byBhbHJlYWR5IGJlIGhlbGQsIG9yIGl0IHNpbXBseSBkb2VzbiYjMzk7dCBncmFiIGl0IGF0IGFsbC4KCkkgYWxzbyBub3RpY2UgdGhlIGFkZGl0aW9uIG9mIGBERUZJTkVfUkVBREFIRUFEYCBhbmQgdGhlIEVPRiBjaGVjazogYGlmIChpbmRleCAmbHQ7IGVvZilgLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IGNsYW1wIHRoZSByZWFkLWFoZWFkIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIFNvLCB0aGV5JiMzOTt2ZSBhZGRlZCB0aGlzIGV4cGxpY2l0IGNsYW1wIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgcmVhZCBwYXN0IHRoZSBmaWxlIHNpemUuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4KTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGV4cGFuc2lvbiBvZiBgREVGSU5FX1JFQURBSEVBRGAgaW4gbW9yZSBkZXRhaWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IG1hY3JvIGlzIGFjdHVhbGx5IGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIERFRklORV9SRUFEQUhFQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDA4PXN0cnVjdCByZWFkYWhlYWRfY29udHJvbCB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQyMC1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MjE6I2RlZmluZSBERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmLCByLCBtLCBpKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MjItXHRzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGwgPSB7XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUGFnZW1hcCBIZWFkZXIqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb3IgaW52ZXN0aWdhdGUgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHBhZ2UgY2FjaGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVk0uIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSAxNDIwLiBJJiMzOTttIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMsIG9yIGF0IGxlYXN0IHRoZSByZWxldmFudCBkZWNsYXJhdGlvbnMsIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBmbGFncywgbG9ja2luZyBtZWNoYW5pc21zLCBvciBwb3NzaWJseSB0aGUgbGlua2FnZSBiZXR3ZWVuIHBhZ2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGlub2Rlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDE1Olx0XHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xuMTQxNjpcdFx0Ym9vbCBkcm9wYmVoaW5kO1xuMTQxNzpcdFx0Ym9vbCBfd29ya2luZ3NldDtcbjE0MTg6XHRcdHVuc2lnbmVkIGxvbmcgX3BmbGFncztcbjE0MTk6XHR9O1xuMTQyMDpcdFxuMTQyMTpcdCNkZWZpbmUgREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZiwgciwgbSwgaSlcdFx0XHRcdFxcXG4xNDIyOlx0XHRzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGwgPSB7XHRcdFx0XHRcXFxuMTQyMzpcdFx0XHQuZmlsZSA9IGYsXHRcdFx0XHRcdFx0XFxcbjE0MjQ6XHRcdFx0Lm1hcHBpbmcgPSBtLFx0XHRcdFx0XHRcdFxcXG4xNDI1Olx0XHRcdC5yYSA9IHIsXHRcdFx0XHRcdFx0XFxcbjE0MjY6XHRcdFx0Ll9pbmRleCA9IGksXHRcdFx0XHRcdFx0XFxcbjE0Mjc6XHRcdH1cbjE0Mjg6XHRcbjE0Mjk6XHQjZGVmaW5lIFZNX1JFQURBSEVBRF9QQUdFU1x0KFNaXzEyOEsgLyBQQUdFX1NJWkUpXG4xNDMwOlx0XG4xNDMxOlx0dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKixcbjE0MzI6XHRcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWFkLCB1bnNpZ25lZCBsb25nIGxvb2thaGVhZF9jb3VudCk7XG4xNDMzOlx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHVuc2lnbmVkIGxvbmcgcmVxX2NvdW50KTtcbjE0MzQ6XHR2b2lkIHBhZ2VfY2FjaGVfYXN5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHN0cnVjdCBmb2xpbyAqLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTU5CgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDEyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjoga2h1Z2VwYWdlZCBSZWFkYWhlYWQgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgREVGSU5FX1JFQURBSEVBRGAgbWFjcm8gdXNlcyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggaXMgc3RhbmRhcmQgQzsgYW55IHVuc3BlY2lmaWVkIGZpZWxkcyB3aWxsIGJlIHplcm9lZCBvdXQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgZm9yIGFueSBwb3RlbnRpYWwgS01TQU4gaW1wbGljYXRpb25zLgoKTm93LCB0aGUgbWFpbiBwb2ludDogdGhpcyBwYXRjaCBpcyAqbm90KiBhIEtNU0FOIGNvbmNlcm4uIFRoZSB1cHN0cmVhbSBrZXJuZWwgYWxyZWFkeSBoYXMgS0FTQU4sIExPQ0tERVAsIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuIEtNU0FOIGlzIG9ubHkgcmVsZXZhbnQgaWYgdGhlIHBhdGNoIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCAqb25seSogS01TQU4gY2FuIGRldGVjdC4gVGhlIGd1aWRlbGluZXMgYXJlIGNyeXN0YWwgY2xlYXI6IGRvbiYjMzk7dCB3YXN0ZSByZXNvdXJjZXMgcnVubmluZyBLTVNBTiBpZiBLQVNBTiBvciBvdGhlciB0b29scyBjYXRjaCB0aGUgaXNzdWVzLgoKSeKAmW0gbG9va2luZyBhdCB0aGVzZSBjcml0aWNhbCBkaXN0aW5jdGlvbnM6CgoqICAgVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBsb2NraW5nIGRlYWRsb2NrIGJldHdlZW4gYHRydW5jYXRlYCBhbmQgYGtodWdlcGFnZWRgIHJlYWRhaGVhZC4gVGhlIHByb2JsZW0/ICBgY29sbGFwc2VfZmlsZWAgdXNlZCB0byBhY3F1aXJlIGZvbGlvIGxvY2tzICpiZWZvcmUqIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgLCB3aGljaCBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgdGhlbiB0YWtlcywgbGVhZGluZyB0byBhbiBBQkJBIGRlYWRsb2NrLiBUaGlzIHBhdGNoIHNpbXBseSByZXZlcnNlcyB0aGUgbG9ja2luZyBvcmRlciBhbmQgcmVwbGFjZXMgdGhlIGNhbGwgdG8gYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIHdpdGggYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbG9ja2luZyBoaWVyYXJjaHkgYnVnLgoKTm93LCB0byBzZWUgaWYgS01TQU4gaXMgbmVlZGVkLCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgS01TQU4gdHJpZ2dlcnM6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4gYGNvbGxhcHNlX2ZpbGVgIGlzIGludGVybmFsIHRvIHRoZSBraHVnZXBhZ2VkIG1lbW9yeSBtYW5hZ2VtZW50LgoyLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYz8qKiAgTm9wZS4gYGlzX3NobWVtYCBpcyBhIHBhcmFtZXRlciwgYG5ld19mb2xpb2AgZ2V0cyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBgZW9mYCBpcyBkZXJpdmVkIGZyb20gYGlfc2l6ZV9yZWFkKC4uLilgLCBhbmQgdGhlIGByYWN0bGAgaXMgKnByb3Blcmx5KiBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogIE5vLCBgc3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHJhY3RsYCBpcyBpbml0aWFsaXplZCBhbmQgd2lsbCBub3QgaGF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuCjQuICAqKkJvdW5kcyBjaGVja3MsIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIERlZmluaXRlbHkgbm90LiBUaGlzIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgZm9yIHJlYWRhaGVhZCBpbiB0aGUgcGFnZSBjYWNoZTsgbm8gYm91bmRzIGNoZWNrcyBhcmUgaW52b2x2ZWQuCgpUaGlzIGZpeCBmb2N1c2VzIG9uICoqbG9ja2luZyBvcmRlcioqLiAgTE9DS0RFUCBhbmQgc3RhbmRhcmQgdGVzdGluZyBvciBLQVNBTiBidWlsZHMgd2lsbCBlYXNpbHkgcGljayB1cCBhbnkgbG9ja2luZyBpc3N1ZXMgaGVyZS4KCkFzIGEgcXVpY2sgY2hlY2ssIEkgZG91YmxlLWNoZWNrZWQgdGhlIGBvdXQ6YCBsYWJlbC4gYGFsbG9jX2NoYXJnZV9mb2xpb2Agc2V0cyBgbmV3X2ZvbGlvYCB0byBOVUxMIG9uIGZhaWx1cmUgYW5kIHRoZSB0cmFjZSBjYWxsIGlzIGhhbmRsZWQgY29ycmVjdGx5LCBubyBwcm9ibGVtIHRoZXJlLiBgREVGSU5FX1JFQURBSEVBRGAgZW5zdXJlcyBgcmFjdGxgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBFdmVyeXRoaW5nIGxvb2tzIGNvbXBsZXRlbHkgc3RhbmRhcmQgYW5kIHNhZmUgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gSXQmIzM5O3MgdGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL2todWdlcGFnZWQuYyB0byBhZGp1c3QgbG9ja2luZyBvcmRlciBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIHByaW9yIHRvIHRha2luZyBmb2xpbyBsb2NrcywgYW5kIGludm9rZXMgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSBpbnN0ZWFkIG9mIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGFuZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCBib3VuZHMuIFRoZSByZWFkYWhlYWRfY29udHJvbCBzdHJ1Y3R1cmUgKHJhY3RsKSBpcyBpbml0aWFsaXplZCB1c2luZyBERUZJTkVfUkVBREFIRUFEIChDOTkgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZW5zdXJpbmcgYWxsIHVubWVudGlvbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIGludHJvZHVjZWQsIG1vZGlmaWVkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgZGVidWcga2VybmVscyAoS0FTQU4gYnVpbGRzKSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS9raHVnZXBhZ2VkLmMgdG8gYWRqdXN0IGxvY2tpbmcgb3JkZXIgaW4gY29sbGFwc2VfZmlsZSgpIGJ5IGFjcXVpcmluZyBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKSBwcmlvciB0byB0YWtpbmcgZm9saW8gbG9ja3MsIGFuZCBpbnZva2VzIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkgaW5zdGVhZCBvZiBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggZmlsZSB0cnVuY2F0aW9uLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBhbmQgcGFnZSBjYWNoZSByZWFkYWhlYWQgYm91bmRzLiBUaGUgcmVhZGFoZWFkX2NvbnRyb2wgc3RydWN0dXJlIChyYWN0bCkgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgREVGSU5FX1JFQURBSEVBRCAoQzk5IGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGVuc3VyaW5nIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBtb2RpZmllZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGRlYnVnIGtlcm5lbHMgKEtBU0FOIGJ1aWxkcyksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTowMC45MTE0NDI5ODVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc4OTg4Njg0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2xsYXBzZV9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zY2FuX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL2todWdlcGFnZWQuYyB0byBhZGp1c3QgbG9ja2luZyBvcmRlciBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIHByaW9yIHRvIHRha2luZyBmb2xpbyBsb2NrcywgYW5kIGludm9rZXMgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSBpbnN0ZWFkIG9mIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24uXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggbG9ja2luZyBzeW5jaHJvbml6YXRpb24gYW5kIHBhZ2UgY2FjaGUgcmVhZGFoZWFkIGJvdW5kcy4gVGhlIHJlYWRhaGVhZF9jb250cm9sIHN0cnVjdHVyZSAocmFjdGwpIGlzIGluaXRpYWxpemVkIHVzaW5nIERFRklORV9SRUFEQUhFQUQgKEM5OSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBlbnN1cmluZyBhbGwgdW5tZW50aW9uZWQgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgbW9kaWZpZWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gTG9ja2luZyBpc3N1ZXMgYW5kIGRlYWRsb2NrcyBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBkZWJ1ZyBrZXJuZWxzIChLQVNBTiBidWlsZHMpLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIGNvbGxhcHNlX2ZpbGUoKSBieSBhY3F1aXJpbmcgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKCkgYWNyb3NzIGZvbGlvIGFsbG9jYXRpb24gYW5kIHRoZSBwYWdlIHNjYW5uaW5nIGxvb3AsIGFuZCBzd2l0Y2hpbmcgdGhlIHJlYWRhaGVhZCBtZWNoYW5pc20gdG8gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKS4gVGhpcyBjaGFuZ2VzIHN5bmNocm9uaXphdGlvbiBpbnZhcmlhbnRzLCBsb2NrIG9yZGVyaW5nIChpbnZhbGlkYXRlX2xvY2sgdnMgZm9saW8gbG9jaywgdHJ1bmNhdGUsIGFuZCBtZW1vcnkgcmVjbGFpbSBkdXJpbmcgYWxsb2NhdGlvbiksIGFuZCByZWFkYWhlYWQgYm91bmRpbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3IgdGhlIGtodWdlcGFnZWQgZGFlbW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTowMC45MTE0NDc1NDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjgyMDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViOWQyMTE2NWE3MWZlM2FlN2I2MzBiMWExNmY1ZmNkM2QxNGJlYTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzU6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXFxuaW5kZXggMTFmZjk4ZDU1Yzc2ZS4uNjkwY2NiY2RmNTkzOCAxMDA2NDRcXG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMjI2Nyw2ICsyMjY3LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRShzdGFydCBcXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcXG4rXFx0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFpc19zaG1lbSlcXG4rXFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbitcXG4gXFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFxcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcXG4gXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0yMzM3LDEwICsyMzQ0LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2Uge1xcdC8qICFpc19zaG1lbSAqL1xcbiBcXHRcXHRcXHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xcbitcXHRcXHRcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBtYXBwaW5nLCBpbmRleCk7XFxuK1xcdFxcdFxcdFxcdHBnb2ZmX3QgZW9mID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctXFx1MDAzZWhvc3QpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgUEFHRV9TSVpFKTtcXG4rXFxuIFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbi1cXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFxcdTAwMjZmaWxlLVxcdTAwM2VmX3JhLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbGUsIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGVuZCAtIGluZGV4KTtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cXG4rXFx0XFx0XFx0XFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcXG4rXFx0XFx0XFx0XFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGlmIChpbmRleCBcXHUwMDNjIGVvZilcXG4rXFx0XFx0XFx0XFx0XFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXFx1MDAyNnJhY3RsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xcbiBcXHRcXHRcXHRcXHQvKiBkcmFpbiBscnUgY2FjaGUgdG8gaGVscCBmb2xpb19pc29sYXRlX2xydSgpICovXFxuIFxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW4oKTtcXG4gXFx0XFx0XFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xcbkBAIC0yNjcyLDYgKzI2ODksOCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xcbiBcXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcXG4gb3V0OlxcbitcXHRpZiAoIWlzX3NobWVtKVxcbitcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4gXFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbiBcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XFxuIFxcdHJldHVybiByZXN1bHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjAxLjM1NDk0NDMxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM1NDM4MTI2MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29sbGFwc2VfZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zaW5nbGVfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjlkMjExNjVhNzFmZTNhZTdiNjMwYjFhMTZmNWZjZDNkMTRiZWEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzU6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDExZmY5OGQ1NWM3NmUuLjY5MGNjYmNkZjU5MzggMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTIyNjcsNiArMjI2NywxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XG4gXHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XG4gXG4rXHQvKlxuK1x0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4rXHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXG4rXHQgKi9cbitcdGlmICghaXNfc2htZW0pXG4rXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbitcbiBcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcbiBcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0yMzM3LDEwICsyMzQ0LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XHQvKiAhaXNfc2htZW0gKi9cbiBcdFx0XHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuK1x0XHRcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuK1x0XHRcdFx0XHRcdCAgbWFwcGluZywgaW5kZXgpO1xuK1x0XHRcdFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cdTAwM2Vob3N0KSxcbitcdFx0XHRcdFx0XHRcdCAgICBQQUdFX1NJWkUpO1xuK1xuIFx0XHRcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbi1cdFx0XHRcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuLVx0XHRcdFx0XHRcdFx0ICBmaWxlLCBpbmRleCxcbi1cdFx0XHRcdFx0XHRcdCAgZW5kIC0gaW5kZXgpO1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24ndCByZXRha2UgaXQuXG4rXHRcdFx0XHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxuK1x0XHRcdFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKGluZGV4IFx1MDAzYyBlb2YpXG4rXHRcdFx0XHRcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFx1MDAyNnJhY3RsLFxuK1x0XHRcdFx0XHRcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XG4gXHRcdFx0XHQvKiBkcmFpbiBscnUgY2FjaGUgdG8gaGVscCBmb2xpb19pc29sYXRlX2xydSgpICovXG4gXHRcdFx0XHRscnVfYWRkX2RyYWluKCk7XG4gXHRcdFx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7XG5AQCAtMjY3Miw2ICsyNjg5LDggQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XG4gXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbiBvdXQ6XG4rXHRpZiAoIWlzX3NobWVtKVxuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuIFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuIFx0cmV0dXJuIHJlc3VsdDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjAxLjM1NDk0NjUwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzNjMyOTM0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLSFVHRVBBR0VEIEZpbGUgQ29sbGFwc2UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL2todWdlcGFnZWQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNvbGxhcHNlX2ZpbGUoKWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgZnJvbSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIHBlcnNwZWN0aXZlLiBUaGlzIGRlYWxzIHdpdGggVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgZmlsZS1iYWNrZWQgcG9ydGlvbiBvZiBUSFAgY29sbGFwc2UsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSB0aGluZ3MgbGlrZSBgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpYCBvciB0aGUga2h1Z2VwYWdlZCBkYWVtb24uXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSwgYW5kIGl0IHNlZW1zIGxpa2VseSB0aGF0IGl0IGlzLCBnaXZlbiB0aGF0IG1hZHZpc2UgY2FuIGNhbGwgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgaW4gYG1tL2todWdlcGFnZWQuY2AsIGFuZCBzeXprYWxsZXIgY2FuIGxpa2VseSB0cmlnZ2VyIGl0IHZpYSBgbWFkdmlzZWAgb3Iga2h1Z2VwYWdlZCBzeXNmcy9kYWVtb24gb24gZmlsZSBtYXBwaW5ncy5cblxuTm93LCB0aGUganVpY3kgcGFydC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgc3RyYXRlZ3kuIFdlIHNlZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCBiZWluZyB0YWtlbiAqYmVmb3JlKiBmb2xpbyBhbGxvY2F0aW9uIChgYWxsb2NfY2hhcmdlX2ZvbGlvYCkgYW5kIHRoZSBtYWluIGxvb3Agd2l0aGluIGBjb2xsYXBzZV9maWxlKClgLiBUaGlzIHJlcGxhY2VzIHRoZSBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgd2l0aCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgLiBUaGlzIHNoaWZ0IGluIGxvY2tpbmcgb3JkZXIgYW5kIHRoZSBpbmNsdXNpb24gb2YgcmVhZGFoZWFkIHdpdGhpbiB0aGUgbG9ja2VkIHNlY3Rpb24gaXMgYSByZWQgZmxhZywgYnV0IGEgcG90ZW50aWFsbHkgdmVyeSBpbnRlcmVzdGluZyBvbmUuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJhY2luZyB3aXRoIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBwcmltYXJ5IGFyZWEgb2YgY29uY2VybiBsaWVzIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdHJ1bmNhdGUsIHJlYWRhaGVhZCwgZm9saW8gbG9ja3MsIHRoZSBpbnZhbGlkYXRlIGxvY2ssIGFuZCB0aGUgYGFsbG9jX2NoYXJnZV9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmLiBDb3VsZCBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBpdHNlbGYgdHJpZ2dlciBtZW1vcnkgcmVjbGFtYXRpb24sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcmVjdXJzaW9uIG9yIGxvY2tkZXAgaXNzdWVzPyBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBiYXR0bGVncm91bmQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHN1Y2ggY2hhbmdlcyBhcmUgYWxtb3N0IGFsd2F5cyB3b3J0aCBjYXJlZnVsIGZ1enppbmcuIFRoaXMgcmVnaW9uIGlzIGEgaG90YmVkIG9mIHBvdGVudGlhbCBkZWFkbG9ja3MsIHJhY2UgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucy4gV2UndmUgZ290IGZvbGlvIGxvY2tzLCByZWFkYWhlYWQsIGFuZCBub3cgYGludmFsaWRhdGVfbG9ja2AgYWxsIGluIHRoZSBtaXgsIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgRlMgcmUtZW50cnkuXG5cblRoZSBmYWN0IHRoYXQgd2UgYXJlIGhvbGRpbmcgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKWAgKmR1cmluZyogdGhlIGBhbGxvY19jaGFyZ2VfZm9saW9gIGNhbGwgaXMgd2hhdCByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGF04oCZcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyBjb21iaW5hdGlvbiBhbmQgZGVmaW5pdGVseSBzdWdnZXN0cyB0aGlzIGlzIHdvcnRoIGEgZGVlcGVyIGxvb2suXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgc3BlY2lmaWMgc2V0dGluZ3MgdGhhdCBpbmZsdWVuY2UgdGhpcyBjb2RlIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgdG8gdHJpZ2dlciBgY29sbGFwc2VfZmlsZWAgYW5kIGhvdyB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTowNy43MTgyNDQyNjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0NTQ1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTIxMzk9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjIzLS8qKlxcbm1tL2todWdlcGFnZWQuYzoyMjI0OiAqIGNvbGxhcHNlX2ZpbGUgLSBjb2xsYXBzZSBmaWxlbWFwL3RtcGZzL3NobWVtIHBhZ2VzIGludG8gaHVnZSBvbmUuXFxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjQ3LSAqL1xcbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjI0OS1cXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2OTQtXFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbm1tL2todWdlcGFnZWQuYzoyNjk1OlxcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcXG5tbS9raHVnZXBhZ2VkLmMtMjY5Ni1cXHRyZXR1cm4gcmVzdWx0O1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI2OTk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI3OTYtXFx0XFx0fSBlbHNlIHtcXG5tbS9raHVnZXBhZ2VkLmM6Mjc5NzpcXHRcXHRcXHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xcbm1tL2todWdlcGFnZWQuYy0yNzk4LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MDcuNzgxNzA1MDM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTQwMjkwNTQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIEh1Z2UgUGFnZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gdW5kZXJzdGFuZCBob3cgYGtodWdlcGFnZWQuY2AgZml0cyBpbnRvIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0J3MgcGlucG9pbnQgd2hlcmUgdGhpcyBjcnVjaWFsIGZpbGUgaXMgYWN0dWFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIEtub3dpbmcgaXRzIGxvY2F0aW9uIGdpdmVzIGEgY3JpdGljYWwgY2x1ZSBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkLiBTbywgZmlyc3QgdXAsIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbW0vTWFrZWZpbGVgLiBUaGF0J3MgdGhlIGxpa2VseSBzcG90IHdoZXJlIHRoZSBjb21waWxhdGlvbiBydWxlcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cywgaW5jbHVkaW5nIGBraHVnZXBhZ2VkLmNgLCByZXNpZGUuIEZyb20gdGhlcmUsIEkgbmVlZCB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBndWFyZCBpdHMgaW5jbHVzaW9uLiBPZnRlbiwgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgYSBmaWxlIGlzIGRyaXZlbiBieSBhIHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZyBvcHRpb24uIFRoZXNlIG9wdGlvbnMgYWN0IGFzIGd1YXJkIHJhaWxzLCBkZXRlcm1pbmluZyBpZiB0aGUgc291cmNlIGNvZGUgZ2V0cyBjb21waWxlZCBvciBub3QgYmFzZWQgb24gdGhlIHVzZXIncyBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYxMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjE3LjE4NDYxMzg5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQwNTU3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNToxNy4zMTg2NzgyNTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDUyNzA3MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYGtodWdlcGFnZWQub2AgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGZvciBga2h1Z2VwYWdlZC5vYC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIE5vdywgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsdXJraW5nIGluIHRoZSBga2h1Z2VwYWdlZC5jYCBvciwgZm9yIHRoYXQgbWF0dGVyLCB3aXRoaW4gdGhlIGBjb2xsYXBzZV9maWxlYCBjb2RlLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIGFmdGVyIGFsbC5cblxuVGltZSB0byBzeXN0ZW1hdGljYWxseSBhbmFseXplIHRoZSBjb2RlLiBJJ2xsIGluaXRpYXRlIGEgc2VhcmNoIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSB1c2VzIG9mIGAjaWZkZWZgIG9yLCBtb3JlIGRpcmVjdGx5LCBhbnkgbWVudGlvbnMgb2YgYENPTkZJR19gIGluc2lkZSB0aGUgYG1tL2todWdlcGFnZWQuY2AgZmlsZS4gVGhpcyBzaG91bGQgZXhwb3NlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgZWl0aGVyIGRpcmVjdCBvciBpbmRpcmVjdCwgdGhhdCBhcmUgZXNzZW50aWFsIGZvciB0aGUgcHJvcGVyIG9wZXJhdGlvbiBvZiBga2h1Z2VwYWdlZGAuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjE5Ljc3MTM4ODMxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1NjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTM2PXN0YXRpYyBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIGtodWdlcGFnZWRfc2NhbiA9IHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzktXFxubW0va2h1Z2VwYWdlZC5jOjE0MDojaWZkZWYgQ09ORklHX1NZU0ZTXFxubW0va2h1Z2VwYWdlZC5jLTE0MS1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTM0NT1zdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGtodWdlcGFnZWRfYXR0cl9ncm91cCA9IHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcXG5tbS9raHVnZXBhZ2VkLmM6MzQ5OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5tbS9raHVnZXBhZ2VkLmMtMzUwLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwMzM9c3RhdGljIGlubGluZSBnZnBfdCBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2sodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDM3LVxcbm1tL2todWdlcGFnZWQuYzoxMDM4OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL2todWdlcGFnZWQuYy0xMDM5LXN0YXRpYyBpbnQgY29sbGFwc2VfZmluZF90YXJnZXRfbm9kZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjE5LjgxOTQ1MDE3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyNTM3NzI4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFRIUCBhbmQgUmVhZC1BaGVhZCBTZXR0aW5ncyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gc2VlIGhvdyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaGF2aW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJ2QgY2hlY2sgaXMgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhlIGNvbm5lY3Rpb24gdG8gYFJFQURfQUhFQURgIGlzIGEgZ29vZCBsZWFkLiBJIHNob3VsZCBnbyBkaWdnaW5nIGludG8gdGhlIGBSRUFEX0FIRUFEYCBzZXR0aW5ncywgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNldHVwLiBUaGUgYG1tL0tjb25maWdgIGZpbGUgaXMgdGhlIGdvLXRvIHBsYWNlIGZvciBhbGwgbWVtb3J5LXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBpdCdzIHRoZSBvYnZpb3VzIGNob2ljZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzZXR0aW5ncyByZWxhdGVkIHRvIFRIUCBhbmQgcG9zc2libHkgcmVsYXRlZCB0byBgUkVBRF9BSEVBRGAgYXMgd2VsbC4gVGhhdCBpcyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncyBJJ20gaW50ZXJlc3RlZCBpbi4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNToyNi4wNzMyMjUzODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjYwMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MjYuMTIyODkyNjM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2MjE2MjgxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgS2NvbmZpZyBlbnRyeTpcblxuKipBbmFseXppbmcgdGhlIFRSQU5TUEFSRU5UX0hVR0VQQUdFIEtjb25maWcgRW50cnkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBkZXBlbmRlbmNpZXMuIFdoYXQgYXJjaHMgaXMgdGhpcyByZWxldmFudCB0bz8gV2hhdCBvdGhlciBmZWF0dXJlcyBtaWdodCBpdCBpbnRlcmFjdCB3aXRoLCBwb3NpdGl2ZWx5IG9yIG5lZ2F0aXZlbHk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZWZhdWx0IHZhbHVlcyBvciBpbXBsaWNhdGlvbnMgb2Ygbm90IHNlbGVjdGluZyBpdD8gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzOioqIElzIGl0IGJhc2VkIG9uIGNlcnRhaW4gaGFyZHdhcmUgZmVhdHVyZXMgKGUuZy4sIHNwZWNpZmljIENQVSBleHRlbnNpb25zLCBtZW1vcnkgbWFuYWdlbWVudCB1bml0IGNhcGFiaWxpdGllcykgb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIEFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpdCdzICpub3QqIGNvbXBhdGlibGUgd2l0aD9cbiogICAqKlN5bWJvbCBkZWZpbml0aW9uczoqKiBXaGF0IGRvZXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhY3R1YWxseSAqZG8qIGluIHRoZSBjb2RlLCBhbmQgaG93IGRvZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0IGNoYW5nZSB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgcnVudGltZSBiZWhhdmlvciBvZiB0aGUga2VybmVsP1xuKiAgICoqSGVscCB0ZXh0OioqIFRoZSBoZWxwIHRleHQgd2lsbCB0ZWxsIG1lIHRoZSBmdW5kYW1lbnRhbCBwdXJwb3NlIGFuZCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgYSBjbGVhciBkZWZpbml0aW9uIG9mIHdoYXQgaXQgYWNoaWV2ZXMuXG4qICAgKipEZWZhdWx0IHZhbHVlczoqKiBBcmUgdGhlcmUgZGVmYXVsdCB2YWx1ZXMsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSB0aGV5IG1ha2luZz8gTWlnaHQgdGhlc2UgbmVlZCB0byBiZSBvdmVycmlkZGVuIGZvciBjZXJ0YWluIHVzZSBjYXNlcywgbGlrZSBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIG1lbW9yeSBpcyBtb3JlIHRpZ2h0bHkgY29uc3RyYWluZWQ/XG4qICAgKipUcmlnZ2VycyBmb3IgZW5hYmxlbWVudCoqIFdoYXQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGl0IHRvIGVuYWJsZT9cbiogICAqKkltcGxpY2F0aW9ucyoqOiB3aGF0IGFyZSB0aGUgYmVuZWZpdHMgb2YgdGhpcyBvcHRpb24sIGFuZCB3aGF0IGFyZSB0aGUgcG9zc2libGUgZG93bnNpZGVzLCB0cmFkZW9mZnMsIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucz8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIHdpbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHRyYWRlb2ZmcyBhcm91bmQgdGhpcy5cbiogICAqKlJlbGV2YW50IGNvZGUgc2VjdGlvbnMqKjogV2hhdCBjb2RlIHNlY3Rpb25zIGFuZCBoZWFkZXIgZmlsZXMgYXJlIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uPyBVbmRlcnN0YW5kaW5nIHRoaXMgcXVpY2tseSBnaXZlcyBtZSBjbHVlcyBhYm91dCBob3cgcGVydmFzaXZlIHRoZSBpbXBhY3QgaXMuXG5cbkkgZXhwZWN0IHRvIGZpbmQgaW5mb3JtYXRpb24gb24gdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHksIGl0cyBwZXJmb3JtYW5jZSBpbXBhY3QsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIEtjb25maWcgZW50cnkgd2l0aCB0aGUgcmVsZXZhbnQga2VybmVsIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaGVscHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBkZXNjcmlwdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZ1bGx5IGNvdmVyIGFsbCBjb25zaWRlcmF0aW9ucy4gSSBtaWdodCBldmVuIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggb3RoZXIgcmVsYXRlZCBLY29uZmlncyBsaWtlIGBIVUdFVExCX1BBR0VgLCBgSFVHRVRMQl9QQUdFX1NJWkVgLCBhbmQgYW55IE5VTUEtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBmb3IgYSBob2xpc3RpYyB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTE2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MjkuNzQ0NTIzMDc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM1OlxcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODM2OlxcdFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIDgzNzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbiA4Mzg6XFx0XFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gODM5OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gODQwOlxcdFxcdHNlbGVjdCBNTV9JRFxcbiA4NDE6XFx0XFx0aGVscFxcbiA4NDI6XFx0XFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuIDg0MzpcXHRcXHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cXG4gODQ0OlxcdFxcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXFxuIDg0NTpcXHRcXHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XFxuIDg0NjpcXHRcXHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcXG4gODQ3OlxcdFxcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxcbiA4NDg6XFx0XFxuIDg0OTpcXHRcXHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxcbiA4NTA6XFx0XFxuIDg1MTpcXHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRjaG9pY2VcXG4gODU0OlxcdFxcdHByb21wdCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1xcXCJcXG4gODU1OlxcdFxcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg1NjpcXHRcXHRoZWxwXFxuIDg1NzpcXHRcXHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg2MDpcXHRcXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuIDg2MTpcXHRcXHRoZWxwXFxuIDg2MjpcXHRcXHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIGFsd2F5cywgY2FuIGluY3JlYXNlIHRoZVxcbiA4NjM6XFx0XFx0ICBtZW1vcnkgZm9vdHByaW50IG9mIGFwcGxpY2F0aW9ucyB3aXRob3V0IGEgZ3VhcmFudGVlZFxcbiA4NjQ6XFx0XFx0ICBiZW5lZml0IGJ1dCBpdCB3aWxsIHdvcmsgYXV0b21hdGljYWxseSBmb3IgYWxsIGFwcGxpY2F0aW9ucy5cXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG4gODY3OlxcdFxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuIDg2ODpcXHRcXHRoZWxwXFxuIDg2OTpcXHRcXHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIG1hZHZpc2UsIHdpbGwgb25seSBwcm92aWRlIGFcXG4gODcwOlxcdFxcdCAgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYmVuZWZpdCB0byB0aGUgYXBwbGljYXRpb25zIHVzaW5nXFxuIDg3MTpcXHRcXHQgIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgYnV0IGl0IHdvbid0IHJpc2sgdG8gaW5jcmVhc2UgdGhlXFxuIDg3MjpcXHRcXHQgIG1lbW9yeSBmb290cHJpbnQgb2YgYXBwbGljYXRpb25zIHdpdGhvdXQgYSBndWFyYW50ZWVkXFxuIDg3MzpcXHRcXHQgIGJlbmVmaXQuXFxuIDg3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MjkuNzQ0NjIwNjg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2MDU5OTE3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYGNvbGxhcHNlX2ZpbGVgIG9yIHBlcmhhcHMgc2V0dGluZ3MgcmVsYXRlZCB0byBmaWxlLWJhY2tlZCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggdG8gZW5zdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcuXG5cbkknbGwgcXVlcnkgZm9yIGEgZmV3IGtleSB0ZXJtcy4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYFJFQURBSEVBRF9NTUFQYCwgYG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnRgLCBhbmQgYGNvbGxhcHNlX2ZpbGVgLiBXaGlsZSBJJ20gYXQgaXQsIEknbGwgYWxzbyBhZGQgYFJFQURPTkxZX1RIUGAgdG8gdGhlIHNlYXJjaCBwYXJhbWV0ZXJzLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCwgYnJvYWQgaW5pdGlhbCBzZWFyY2ggdG8gY292ZXIgdGhlIG1vc3QgbGlrZWx5IGFyZWFzLlxuXG5SaWdodCwgSSdsbCBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydGAsIGp1c3QgdG8gZ2V0IHRoaW5ncyBnb2luZy4gVGhpcyB3aWxsIGhvcGVmdWxseSBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTozMy4zNTA2MTYzODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODI3MzY4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD01MDc9c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUxNi0vKipcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1MTc6ICogbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydCgpIC0gQ2hlY2sgaWYgYSBtYXBwaW5nIHN1cHBvcnRzIFBNRC1zaXplZCBmb2xpb1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUxOC0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Nfc3BhY2VcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUyNy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NTI4OnN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUyOS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MzYtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1Mzc6c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNTM4LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTU9c3RhdGljIGlubGluZSBib29sIGZpbGVfdGhwX2VuYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEwNi1cXG5tbS9odWdlX21lbW9yeS5jOjEwNzpcXHRpZiAoIW1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQodm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjY2LVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzoyMjY3OlxcdFZNX1dBUk5fT05fT05DRSghaXNfc2htZW0gXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQobWFwcGluZykpO1xcbm1tL2todWdlcGFnZWQuYy0yMjY4LVxcdFZNX1dBUk5fT05fT05DRShzdGFydCBcXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjM1LjAzMzM1OTAwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTM2ODY0NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWdlbWFwIEhlYWRlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHNwZWNpZmljLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgaGVhZGVyIGZpbGUuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgbGlrZWx5IGNlbnRlcmVkIGFyb3VuZCB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHBhZ2UgbWFwcGluZyBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyB0aGF0IGxpbmUgNTE3IGlzIGdvaW5nIHRvIGJlIGEga2V5IHBvaW50LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgYW50aWNpcGF0ZSB0aGlzIGxpbmUgY29udGFpbmluZyBkZWNsYXJhdGlvbnMgb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBwZXJoYXBzIHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgZm9saW8gaGFuZGxpbmcsIG9yIG1heWJlIGV2ZW4gc29tZSBjcml0aWNhbCBsb2NraW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IHNlY3Rpb24gZGVhbHMgd2l0aC4gVGltZSB0byBjaGVjayBpdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTozNi45NzAyMjU5MzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZW1hcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxNjpcXHQvKipcXG4gNTE3OlxcdCAqIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoKSAtIENoZWNrIGlmIGEgbWFwcGluZyBzdXBwb3J0cyBQTUQtc2l6ZWQgZm9saW9cXG4gNTE4OlxcdCAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzc19zcGFjZVxcbiA1MTk6XFx0ICpcXG4gNTIwOlxcdCAqIFdoaWxlIHNvbWUgbWFwcGluZ3Mgc3VwcG9ydCBsYXJnZSBmb2xpb3MsIHRoZXkgbWlnaHQgbm90IHN1cHBvcnQgUE1ELXNpemVkXFxuIDUyMTpcXHQgKiBmb2xpb3MuIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBtYXBwaW5nIHN1cHBvcnRzIFBNRC1zaXplZCBmb2xpb3MuXFxuIDUyMjpcXHQgKiBGb3IgZXhhbXBsZSwga2h1Z2VwYWdlZCBuZWVkcyB0aGlzIGluZm9ybWF0aW9uIGJlZm9yZSBhdHRlbXB0aW5nIHRvXFxuIDUyMzpcXHQgKiBjb2xsYXBzaW5nIFRIUHMuXFxuIDUyNDpcXHQgKlxcbiA1MjU6XFx0ICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiA1MjY6XFx0ICovXFxuIDUyNzpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDUyODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gNTI5OlxcdHtcXG4gNTMwOlxcdFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbiA1MzE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKW1hcHBpbmcgXFx1MDAyNiBGT0xJT19NQVBQSU5HX0FOT04pO1xcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIobWFwcGluZykgXFx1MDAzYz0gUE1EX09SREVSIFxcdTAwMjZcXHUwMDI2XFxuIDUzNDpcXHRcXHQgICAgICAgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIobWFwcGluZykgXFx1MDAzZT0gUE1EX09SREVSO1xcbiA1MzU6XFx0fVxcbiA1MzY6XFx0I2Vsc2VcXG4gNTM3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiA1Mzg6XFx0e1xcbiA1Mzk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA1NDA6XFx0fVxcbiA1NDE6XFx0I2VuZGlmXFxuIDU0MjpcXHRcXG4gNTQzOlxcdC8qIFJldHVybiB0aGUgbWF4aW11bSBmb2xpbyBzaXplIGZvciB0aGlzIHBhZ2VjYWNoZSBtYXBwaW5nLCBpbiBieXRlcy4gKi9cXG4gNTQ0OlxcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIDU0NTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjM2Ljk3MDMzNDA4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDMzMjMyMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYW5kIEZpbGUgQ29sbGFwc2UgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBUcmFuc3BhcmVudCBIdWdlcGFnZXMsIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZC4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmlsZSBjb2xsYXBzZSBtZWNoYW5pc20gYW5kIGhvdyBpdCdzIHRyaWdnZXJlZCwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUga2VybmVsJ3MgYGtodWdlcGFnZWRgIGRhZW1vbi4gVG8gZG8gdGhhdCwgSSdtIGdvaW5nIHRvIGRlbHZlIGludG8gYGtodWdlcGFnZWQuY2AuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGluIGBraHVnZXBhZ2VkLmNgIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3Igd2hpY2ggZnVuY3Rpb25zIGNhbGwgYGNvbGxhcHNlX2ZpbGVgLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSB2YXJpb3VzIHNjZW5hcmlvcyBhbmQgcGF0aHMgdGhyb3VnaCB3aGljaCBmaWxlIGNvbGxhcHNlIGlzIGludm9rZWQuIEkgd2lsbCB0aGVuIHBlcmZvcm0gYSBjb2RlIHNlYXJjaCBmb3IgYWxsIGNhbGxzIHRvIHRoZSBmdW5jdGlvbiBgY29sbGFwc2VfZmlsZWAgd2l0aGluIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6NDMuMDAzNTY4NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzI1OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjIyMy0vKipcXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxcbm1tL2todWdlcGFnZWQuYy0yMjI1LSAqXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjI0ODpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTIyNDktXFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjk0LVxcdFZNX0JVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cGFnZWxpc3QpKTtcXG5tbS9raHVnZXBhZ2VkLmM6MjY5NTpcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XFxubW0va2h1Z2VwYWdlZC5jLTI2OTYtXFx0cmV0dXJuIHJlc3VsdDtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yNjk5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNzk2LVxcdFxcdH0gZWxzZSB7XFxubW0va2h1Z2VwYWdlZC5jOjI3OTc6XFx0XFx0XFx0cmVzdWx0ID0gY29sbGFwc2VfZmlsZShtbSwgYWRkciwgZmlsZSwgc3RhcnQsIGNjKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjc5OC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjQzLjA0ODkwMDUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMTIzMDU2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvbGxhcHNlX3NjYW5fZmlsZWAgYW5kIGl0cyBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGNvbGxhcHNlX3NjYW5fZmlsZWAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBrZXkgcm9sZSBpbiBkYXRhIHByb2Nlc3Npbmcgb3IgSS9PLCBwZXJoYXBzIGZpbGUgYWdncmVnYXRpb24gb3Igc3VtbWFyaXppbmcgc2NhbiBkYXRhLiBUbyB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyBmbG93LiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlYmFzZSB3aGVyZSBgY29sbGFwc2Vfc2Nhbl9maWxlYCBpcyBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgcGljdHVyZSBvZiB3aGF04oCZcyAqdXNpbmcqIHRoaXMgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyBkZXBlbmRlbmNpZXMsIGRhdGEgZmxvd3MsIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgcG9pbnRzIG9mIHZ1bG5lcmFiaWxpdHkuIEknbSBsb29raW5nIGZvciBib3RoIGRpcmVjdCBjYWxscyBhbmQgYW55IGluZGlyZWN0IGNhbGxzIHRocm91Z2ggb3RoZXIgZnVuY3Rpb25zIOKAkyB0aGUgZGVlcGVyIEkgZ28sIHRoZSBiZXR0ZXIgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aWxsIGJlLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgcXVpY2sgaW52ZXN0aWdhdGlvbiBnaXZlbiBteSBleGlzdGluZyBleHBlcnRpc2UuIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcmVzcG9uc2liaWxpdGllcyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjc3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6NDUuMjYxMjA4NTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY0NjQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsYXBzZV9zY2FuX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjk4LVxcbm1tL2todWdlcGFnZWQuYzoyNjk5OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9raHVnZXBhZ2VkLmMtMjcwMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI4MDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgzMS1yZXRyeTpcXG5tbS9raHVnZXBhZ2VkLmM6MjgzMjpcXHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHBnb2ZmLCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTI4MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjQ1LjMwNjg1OTIxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTI0MjY3NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIENoYWluKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgYGNvbGxhcHNlX3NjYW5fZmlsZWAgaXMgYmVpbmcgdXNlZC4gVGhlIG5vdGVzIHNheSBpdCdzIGNhbGxlZCBmcm9tIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gUmlnaHQsIGFuZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgaXRzZWxmIHBhcnQgb2YgdGhlIGBtYWR2aXNlX2NvbGxhcHNlYCBwcm9jZXNzLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gY2FsbHMgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFuZCBhbHNvIHdoYXQgaXMgY2FsbGluZyBgY29sbGFwc2VfZmlsZWAuIEtub3dpbmcgdGhpcywgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHRoYXQgbGVhZCB0byBgY29sbGFwc2Vfc2Nhbl9maWxlYCBiZWluZyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6NDguMjMxMTMwOTQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYxNzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsYXBzZV9zaW5nbGVfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MjY5OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgwOC0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjgwOTpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjgxMC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCAqbG9ja19kcm9wcGVkLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI4NjY9c3RhdGljIHZvaWQgY29sbGFwc2Vfc2Nhbl9tbV9zbG90KHVuc2lnbmVkIGludCBwcm9ncmVzc19tYXgsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjkzNi1cXG5tbS9raHVnZXBhZ2VkLmM6MjkzNzpcXHRcXHRcXHQqcmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyxcXG5tbS9raHVnZXBhZ2VkLmMtMjkzOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICB2bWEsIFxcdTAwMjZsb2NrX2Ryb3BwZWQsIGNjKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMjA3PWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyNTUtXFxubW0va2h1Z2VwYWdlZC5jOjMyNTY6XFx0XFx0cmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChhZGRyLCB2bWEsIFxcdTAwMjZtbWFwX3VubG9ja2VkLCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTMyNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjQ4LjI3Njc1NDI4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NTAzMzIwMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbGxhcHNlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgcGF0aCBmb3IgbWVtb3J5IGNvbGxhcHNpbmcuIEl0J3MgY2xlYXIgdGhhdCBgbWFkdmlzZV9jb2xsYXBzZSgpYCBhbmQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdCgpYCB1bHRpbWF0ZWx5IGZlZWQgaW50byBgY29sbGFwc2Vfc2luZ2xlX3BtZCgpYC4gVGhhdCB0aGVuIGNhbGxzIGBjb2xsYXBzZV9zY2FuX2ZpbGUoKWAsIHdoaWNoIGZpbmFsbHkgcmVhY2hlcyBgY29sbGFwc2VfZmlsZSgpYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3QgYXQgdGhlIGhpZ2ggbGV2ZWwuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXAgaW4gbXkgbWluZDogaXMgYGNvbGxhcHNlX2ZpbGUoKWAgc3RhdGljPyBZdXAsIGl0J3MgZGVjbGFyZWQgYHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoLi4uKWAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBpdCBsaW1pdHMgaXRzIHZpc2liaWxpdHkuIEJ1dCwgYW5kIHRoaXMgaXMgd2hlcmUgSSBzdGFydCBkaWdnaW5nIGRlZXBlciwgaXMgaXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXI/IENvbnNpZGVyaW5nIHRoYXQgYGNvbGxhcHNlX2ZpbGVgIGlzIGEgKm1hc3NpdmUqIGZ1bmN0aW9uIOKAkyB3ZSdyZSB0YWxraW5nIGFsbW9zdCA0NTAgbGluZXMgZnJvbSAyMjQ4IHRvIDI2OTYg4oCTIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRvIGJlIGlubGluZWQgdW5sZXNzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBsaWtlIExpbmsgVGltZSBPcHRpbWl6YXRpb24gKExUTykuIEluIGEgc3RhbmRhcmQgR0NDIG9yIENsYW5nIGJ1aWxkICp3aXRob3V0KiBMVE8sIGEgZnVuY3Rpb24gb2YgdGhhdCBzaXplLCBldmVuIGlmIHN0YXRpYywgaXNuJ3QgZ29pbmcgdG8gYmUgaW5saW5lZC5cblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgdGhhdCwgZXZlbiBpZiBpdCdzIHN0YXRpYywgYGNvbGxhcHNlX2ZpbGVgIHdpbGwgaGF2ZSBhIHN5bWJvbCBpbiB0aGUgc3ltYm9sIHRhYmxlLCBhbG9uZyB3aXRoIGl0cyBjYWxsZXJzLCBzdWNoIGFzIGBtYWR2aXNlX2NvbGxhcHNlYCwgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLCBhbmQgYGNvbGxhcHNlX3NjYW5fZmlsZWAuIFRoaXMgY291bGQgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpc24ndCBleHBvcnRlZCBvciBkZWNsYXJlZCBpbiBhIGhlYWRlciBzb21ld2hlcmUuIFRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTo1Ni43ODAwNzg0MTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Njc4NjAxNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xsYXBzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MzQ2PUEgaGlnaGVyIHZhbHVlIG1heSBpbmNyZWFzZSBtZW1vcnkgZm9vdHByaW50IGZvciBzb21lIHdvcmtsb2Fkcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjM1NDogICBDdXJyZW50bHksIG1hZHZpc2VfY29sbGFwc2Ugb25seSBzdXBwb3J0cyBjb2xsYXBzaW5nIHRvIFBNRC1zaXplZCBUSFBzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTM1NS0gICBhbmQgZG9lcyBub3QgYXR0ZW1wdCBtVEhQIGNvbGxhcHNlcy5cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTUxMT1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVxcdFxcdCAgICAgaW50IGFkdmljZSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTEzOmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzEyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzE4OnN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzE5LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzE3MD1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxNzQtXFxubW0va2h1Z2VwYWdlZC5jOjMxNzU6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcXG5tbS9raHVnZXBhZ2VkLmMtMzE3Ni17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzIwNi1cXG5tbS9raHVnZXBhZ2VkLmM6MzIwNzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzIwOC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI5NC1cXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXFxubW0va2h1Z2VwYWdlZC5jOjMyOTU6XFx0XFx0XFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XFxubW0va2h1Z2VwYWdlZC5jLTMyOTYtfVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzYzLVxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG5tbS9tYWR2aXNlLmM6MTM2NDpcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG5tbS9tYWR2aXNlLmMtMTM2NS1cXHRcXHRcXHRcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19kcm9wcGVkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yMzU9c3RhdGljIHZvaWQgZmlsbF9tZW1vcnkoaW50ICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDgtICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI0OTpzdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI2Nz1zdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODAtXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyODE6XFx0aWYgKG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgaHBhZ2VfcG1kX3NpemUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODItXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTExPXN0YXRpYyBib29sIGlzX2Fub24oc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxNjpzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUzOS1cXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTQwOlxcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NDEtXFx0aWYgKCgoYm9vbClyZXQpID09IGV4cGVjdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjU1MTpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTUyLVxcdFxcdFxcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTU2LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTc6XFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1OC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NjgwPXN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX21hZHZpc2VfY29udGV4dCA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NjgxOlxcdC5jb2xsYXBzZSA9IFxcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02ODItXFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MTA3Nj1zdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTEzMy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTEzNDpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzUtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ0LVxcdC8qIGMtXFx1MDAzZWNvbGxhcHNlKCkgd2lsbCBmaW5kIGEgaHVnZXBhZ2UgYW5kIGNvbXBsYWluIC0gY2FsbCBkaXJlY3RseS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTE0NTpcXHRfX21hZHZpc2VfY29sbGFwc2UoXFxcIlJlLWNvbGxhcHNlIFBNRC1tYXBwZWQgaHVnZXBhZ2VcXFwiLCBwLCAxLCBvcHMsIHRydWUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ2LVxcdHZhbGlkYXRlX21lbW9yeShwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MTMxMT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzMzpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzQ6XFx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxNDM2OlxcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTE0MzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjU4LjU0Nzk0NDI3M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg5NDc1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgY29sbGFwc2VfZmlsZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgaG93IGh1Z2UgcGFnZSBjb2xsYXBzaW5nIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWVtb3J5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gYG1tL2todWdlcGFnZWQuY2AuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHZhcmlhYmxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBleGFjdCBjb250cm9sIGZsb3cgYW5kIGFueSBlZGdlIGNhc2VzLiBJJ2xsIGZvY3VzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGZpbGUgbWFwcGluZyBhbmQgdGhlIGh1Z2UgcGFnZSBtZWNoYW5pY3MuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjAwLjczNzQyMjQ5MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNjA6XFx0XFxuMjI2MTpcXHRcXHQvKlxcbjIyNjI6XFx0XFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cXG4yMjYzOlxcdFxcdCAqXFxuMjI2NDpcXHRcXHQgKiBUT0RPOiBvbmNlIHNobWVtIGFsd2F5cyBjYWxscyBtYXBwaW5nX3NldF9sYXJnZV9mb2xpb3MoKSBvbiBpdHNcXG4yMjY1OlxcdFxcdCAqIG1hcHBpbmcsIHRoZSBzaG1lbSBjaGVjayBjYW4gYmUgcmVtb3ZlZC5cXG4yMjY2OlxcdFxcdCAqL1xcbjIyNjc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XFxuMjI2ODpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXFx1MDAyNiAoSFBBR0VfUE1EX05SIC0gMSkpO1xcbjIyNjk6XFx0XFxuMjI3MDpcXHRcXHQvKlxcbjIyNzE6XFx0XFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XFxuMjI3MjpcXHRcXHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXFxuMjI3MzpcXHRcXHQgKi9cXG4yMjc0OlxcdFxcdGlmICghaXNfc2htZW0pXFxuMjI3NTpcXHRcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuMjI3NjpcXHRcXG4yMjc3OlxcdFxcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcXHUwMDI2bmV3X2ZvbGlvLCBtbSwgY2MsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjI3ODpcXHRcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG4yMjc5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIyODA6XFx0XFxuMjI4MTpcXHRcXHRtYXBwaW5nX3NldF91cGRhdGUoXFx1MDAyNnhhcywgbWFwcGluZyk7XFxuMjI4MjpcXHRcXG4yMjgzOlxcdFxcdF9fZm9saW9fc2V0X2xvY2tlZChuZXdfZm9saW8pO1xcbjIyODQ6XFx0XFx0aWYgKGlzX3NobWVtKVxcbjIyODU6XFx0XFx0XFx0X19mb2xpb19zZXRfc3dhcGJhY2tlZChuZXdfZm9saW8pO1xcbjIyODY6XFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VpbmRleCA9IHN0YXJ0O1xcbjIyODc6XFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtYXBwaW5nID0gbWFwcGluZztcXG4yMjg4OlxcdFxcbjIyODk6XFx0XFx0LypcXG4yMjkwOlxcdFxcdCAqIEVuc3VyZSB3ZSBoYXZlIHNsb3RzIGZvciBhbGwgdGhlIHBhZ2VzIGluIHRoZSByYW5nZS4gIFRoaXMgaXNcXG4yMjkxOlxcdFxcdCAqIGFsbW9zdCBjZXJ0YWlubHkgYSBuby1vcCBiZWNhdXNlIG1vc3Qgb2YgdGhlIHBhZ2VzIG11c3QgYmUgcHJlc2VudFxcbjIyOTI6XFx0XFx0ICovXFxuMjI5MzpcXHRcXHRkbyB7XFxuMjI5NDpcXHRcXHRcXHR4YXNfbG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjI5NTpcXHRcXHRcXHR4YXNfY3JlYXRlX3JhbmdlKFxcdTAwMjZ4YXMpO1xcbjIyOTY6XFx0XFx0XFx0aWYgKCF4YXNfZXJyb3IoXFx1MDAyNnhhcykpXFxuMjI5NzpcXHRcXHRcXHRcXHRicmVhaztcXG4yMjk4OlxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIyOTk6XFx0XFx0XFx0aWYgKCF4YXNfbm9tZW0oXFx1MDAyNnhhcywgR0ZQX0tFUk5FTCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzY6MDAuNzM3NjIxNzAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NzQ0NjA1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGNvbGxhcHNlX2ZpbGVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gd2UndmUgYWRkcmVzc2VkIG9uZSBzcGVjaWZpYyBtb2RpZmljYXRpb24uIE5vdywgSSBuZWVkIHRvIHNoaWZ0IGdlYXJzIGFuZCBkaWcgaW50byB0aGUgcmVtYWluaW5nIGFkanVzdG1lbnRzIHdpdGhpbiB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgKmFsc28qIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgKm90aGVyKiBtb2RpZmllZCBzZWdtZW50cy5cIiBJIGtub3cgSSd2ZSBtaXNzZWQgc29tZXRoaW5nIGltcG9ydGFudCBpZiBJIG9ubHkgYWRkcmVzcyB0aGUgZmlyc3QgYWx0ZXJhdGlvbi4gSSd2ZSBnb3QgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRvdGFsIGZ1bmN0aW9uJ3MgY2hhbmdlIGlzIGFjY3VyYXRlLiBJJ20gZm9jdXNpbmcgb24gY29tcGxldGVuZXNzIGFuZCBhY2N1cmFjeSwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBzZWNvbmQgYWx0ZXJhdGlvbiBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjowMi40MTIwODQ2ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzM1OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzM2OlxcdFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG4yMzM3OlxcdFxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW4oKTtcXG4yMzM4OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4yMzM5OlxcdFxcdFxcdFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuMjM0MDpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzQxOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM0MjpcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG4yMzQzOlxcdFxcdFxcdFxcdFxcdGdvdG8geGFfbG9ja2VkO1xcbjIzNDQ6XFx0XFx0XFx0XFx0fVxcbjIzNDU6XFx0XFx0XFx0fSBlbHNlIHtcXHQvKiAhaXNfc2htZW0gKi9cXG4yMzQ2OlxcdFxcdFxcdFxcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XFxuMjM0NzpcXHRcXHRcXHRcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYSxcXG4yMzQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbWFwcGluZywgaW5kZXgpO1xcbjIzNDk6XFx0XFx0XFx0XFx0XFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cXHUwMDNlaG9zdCksXFxuMjM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgUEFHRV9TSVpFKTtcXG4yMzUxOlxcdFxcbjIzNTI6XFx0XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjM1MzpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzNTQ6XFx0XFx0XFx0XFx0XFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cXG4yMzU1OlxcdFxcdFxcdFxcdFxcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXFxuMjM1NjpcXHRcXHRcXHRcXHRcXHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxcbjIzNTc6XFx0XFx0XFx0XFx0XFx0ICovXFxuMjM1ODpcXHRcXHRcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAzYyBlb2YpXFxuMjM1OTpcXHRcXHRcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcXHUwMDI2cmFjdGwsXFxuMjM2MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xcbjIzNjE6XFx0XFx0XFx0XFx0XFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xcbjIzNjI6XFx0XFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbjIzNjM6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xcbjIzNjQ6XFx0XFx0XFx0XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4yMzY1OlxcdFxcdFxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fRkFJTDtcXG4yMzY2OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8geGFfdW5sb2NrZWQ7XFxuMjM2NzpcXHRcXHRcXHRcXHRcXHR9XFxuMjM2ODpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxuMjM2OTpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzNzA6XFx0XFx0XFx0XFx0XFx0ICogVGhpcyBwYWdlIGlzIGRpcnR5IGJlY2F1c2UgaXQgaGFzbid0XFxuMjM3MTpcXHRcXHRcXHRcXHRcXHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXFxuMjM3MjpcXHRcXHRcXHRcXHRcXHQgKlxcbjIzNzM6XFx0XFx0XFx0XFx0XFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxcbjIzNzQ6XFx0XFx0XFx0XFx0XFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjAyLjQxMjI3NjUyNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NzIyNDk3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKkFuYWx5emluZyB0aGUgT3V0cHV0IG9mIGBjb2xsYXBzZV9maWxlYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGNpcmNsaW5nIGJhY2sgdG8gYGNvbGxhcHNlX2ZpbGVgIGFnYWluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBjcml0aWNhbCBwYXJ0OiB0aGUgYG91dDpgIGF0IHRoZSB2ZXJ5IGVuZC4gVGhhdCdzIHRoZSBrZXksIGlzbid0IGl0PyBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBpbnRlcm5hbCB0cmFuc2Zvcm1hdGlvbnMgYW5kIGNvbXB1dGF0aW9ucyBjb252ZXJnZSB0byBwcm9kdWNlIHRoZSByZXN1bHQuIEkgd2FudCB0byByZWFsbHkgZGlnIGludG8gd2hhdCdzIGJlaW5nIG91dHB1dHRlZCwgbm90IGp1c3QgKnRoYXQqIHNvbWV0aGluZyBpcyBvdXRwdXR0ZWQuIElzIGl0IGEgY29uc29saWRhdGVkIGRhdGEgc3RydWN0dXJlLCBhIGZpbmFsIHByb2Nlc3NlZCBzdHJpbmcsIGEgcGFydGljdWxhciBmb3JtYXQ/XG5cblVuZGVyc3RhbmRpbmcgKnRoYXQqIGBvdXQ6YCBzcGVjaWZpY2FsbHkgdGVsbHMgdXMgZXZlcnl0aGluZyBhYm91dCB0aGUgZGVzaWduIGRlY2lzaW9ucyB0aGF0IHVuZGVycGluIHRoZSBlbnRpcmUgZnVuY3Rpb24sIGFuZCB0aGUgZGF0YSBpdCBwcmVzZW50cy4gV2UgY291bGQgaW5mZXIgYW4gYXdmdWwgbG90IGZyb20gdGhhdCBzaW1wbGUgc3RhdGVtZW50IGFsb25lLCBpZiB3ZSdyZSBjYXJlZnVsLiBJcyBpdCBhIHdlbGwgc3RydWN0dXJlZCBvdXRwdXQsIG9yIGEgZHVtcD8gV2hhdCwgKmV4YWN0bHkqLCBpcyB0aGUgZm9ybSBvZiB0aGF0IG91dHB1dD8gVGhhdCB0ZWxscyB1cyBob3cgaXQgaXMgdG8gYmUgY29uc3VtZWQsIHdoZXRoZXIgaXQncyBmcmllbmRseSB0byBiZWluZyBwYXNzZWQgdG8gdGhlIG5leHQgc3RhZ2UsIGlmIGl0IGlzIGFwcHJvcHJpYXRlIGZvciBzdG9yYWdlIG9yIGRpc3BsYXk/IFRoZSBvdXRwdXQgKmlzKiB0aGUgaW50ZXJmYWNlLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhhdCBkZXRhaWwgZm9yIGEgbW9tZW50IGFuZCByZWFsbHkgZXhwbG9yZSB3aGF0IGl0IG1lYW5zIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjA4LjEzNDc3NzEzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2ODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2ODA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFxcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XFxuMjY4MTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuMjY4MjpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI2ODM6XFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcbjI2ODQ6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yNjg1OlxcdFxcdH1cXG4yNjg2OlxcdFxcbjI2ODc6XFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtYXBwaW5nID0gTlVMTDtcXG4yNjg4OlxcdFxcbjI2ODk6XFx0XFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuMjY5MDpcXHRcXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcXG4yNjkxOlxcdG91dDpcXG4yNjkyOlxcdFxcdGlmICghaXNfc2htZW0pXFxuMjY5MzpcXHRcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4yNjk0OlxcdFxcdFZNX0JVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cGFnZWxpc3QpKTtcXG4yNjk1OlxcdFxcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcXG4yNjk2OlxcdFxcdHJldHVybiByZXN1bHQ7XFxuMjY5NzpcXHR9XFxuMjY5ODpcXHRcXG4yNjk5OlxcdHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4yNzAwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsXFxuMjcwMTpcXHRcXHRcXHRzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuMjcwMjpcXHR7XFxuMjcwMzpcXHRcXHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZSA9IGNvbGxhcHNlX21heF9wdGVzX25vbmUoY2MsIE5VTEwsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjcwNDpcXHRcXHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfc3dhcCA9IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoY2MsIEhQQUdFX1BNRF9PUkRFUik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjA4LjEzNDk3NjAzMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDI5MzkyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRXhpdCBQb2ludHMgaW4gYGNvbGxhcHNlX2ZpbGVgKipcblxuT2theSwgbGV0J3MgZGlnIGludG8gdGhpcyBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgaXQgZXhpdHMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyBgZ290byBvdXQ7YCBvciBzaW1pbGFyIGp1bXAgc3RhdGVtZW50cyBtaWdodCBhZmZlY3QgdGhpbmdzLiBTbywgSSdtIGdvaW5nIHRvIHN5c3RlbWF0aWNhbGx5IHRyYWNlIGFsbCB0aGUgZXhpdCBwYXRocy5cblxuRmlyc3QsIEkgc2VlIHRoZSBjaGVjayBhdCBsaW5lIDIyNzg6IGBpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkgZ290byBvdXQ7YC4gQWxyaWdodCwgdGhhdCdzIGEgZGlyZWN0IGVhcmx5IGV4aXQgY29uZGl0aW9uLiBBZnRlciB0aGlzLCB0aGVyZSBzZWVtIHRvIGJlIHNldmVyYWwgbGFiZWxzIHRvIGJlIGF3YXJlIG9mOiBgeGFfbG9ja2VkOmAsIGB4YV91bmxvY2tlZDpgLCBgcm9sbGJhY2s6YCwgYW5kIHByZXN1bWFibHkgb3RoZXJzLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSBsZWFkLlxuXG5Ob3csIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHdoZXJlIHRoZSBgb3V0YCBsYWJlbCBpcyBkZWZpbmVkIGFuZCBleGFtaW5lIHdoYXQgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIHByaW9yIHRvIGVhY2ggcG90ZW50aWFsIGV4aXQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiBlYWNoIHBvc3NpYmxlIHJldHVybiBwYXRod2F5IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGluIGVkZ2UgY2FzZXMgb3IgZXJyb3Igc2NlbmFyaW9zLiBUaGlzIHdpbGwgaGVscCBtZSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgY2xlYW51cCB0aGF0IGFyZSB0cmlnZ2VyZWQgYnkgdGhlc2UgY29udHJvbCBmbG93IGNvbnN0cnVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTc4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoxMS4xNjQzNzI2MDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTg3ODk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnb3RvIG91dDtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz02OTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2VfaXNvbGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MTQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX05PTkUpO1xcbm1tL2todWdlcGFnZWQuYzo3MTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTcxNi1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzIwLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUFRFX05PTl9QUkVTRU5UO1xcbm1tL2todWdlcGFnZWQuYzo3MjE6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTcyMi1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzI0LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUFRFX1VGRkQ7XFxubW0va2h1Z2VwYWdlZC5jOjcyNTpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzI2LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MjktXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX05VTEw7XFxubW0va2h1Z2VwYWdlZC5jOjczMDpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzMxLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03NDItXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0xBWllGUkVFO1xcbm1tL2todWdlcGFnZWQuYzo3NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTc0NC1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTVRIUF9TVEFUX0NPTExBUFNFX0VYQ0VFRF9TSEFSRUQpO1xcbm1tL2todWdlcGFnZWQuYzo3NTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTc1OS1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzY2LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcXG5tbS9raHVnZXBhZ2VkLmM6NzY3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy03NjgtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTc5MC1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG5tbS9raHVnZXBhZ2VkLmM6NzkxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy03OTItXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTgwNy1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09VTlQ7XFxubW0va2h1Z2VwYWdlZC5jOjgwODpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtODA5LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy04MTctXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9ERUxfUEFHRV9MUlU7XFxubW0va2h1Z2VwYWdlZC5jOjgxODpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtODE5LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMTY1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX3N3YXBpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMTkzLVxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xcbm1tL2todWdlcGFnZWQuYzoxMTk0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xMTk1LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjEzLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fRVhDRUVEX1NXQVBfUFRFO1xcbm1tL2todWdlcGFnZWQuYzoxMjE0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xMjE1LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjMxLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xcbm1tL2todWdlcGFnZWQuYzoxMjMyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xMjMzLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjM2LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fRkFJTDtcXG5tbS9raHVnZXBhZ2VkLmM6MTIzNzpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtMTIzOC1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjMwLVxcdFxcdGNjLVxcdTAwM2Vwcm9ncmVzcysrO1xcbm1tL2todWdlcGFnZWQuYzoxNjMxOlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xNjMyLVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjQ5LVxcdFxcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xcbm1tL2todWdlcGFnZWQuYzoxNjUwOlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xNjUxLVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjc4LVxcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxcbm1tL2todWdlcGFnZWQuYzoyMjc5OlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0yMjgwLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2NjgtXFxubW0va2h1Z2VwYWdlZC5jOjI2Njk6XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTI2NzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjExLjI3NDI1Njc4N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDIwNjc3OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgY29sbGFwc2VfZmlsZWAgRXhpdCBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGNvbGxhcHNlX2ZpbGVgIGEgYml0IGJldHRlciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBleGl0IHNjZW5hcmlvcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBhbGwgZXhpdCBwYXRocyB1bHRpbWF0ZWx5IGxlYWQgdG8gYSByb2xsYmFjaywgb3IgaWYgdGhlcmUgYXJlIHNjZW5hcmlvcyB3aGVyZSB0aGUgZnVuY3Rpb24gbWlnaHQgZXhpdCBpbiBhIG1vcmUgXCJjbGVhblwiIHdheSB3aXRob3V0IHRyaWdnZXJpbmcgYSByb2xsYmFjayBwcm9jZWR1cmUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkYXRhIGludGVncml0eSBpbXBsaWNhdGlvbnMgb2YgYSBzdWNjZXNzZnVsIG9yIGZhaWxlZCBjb2xsYXBzZSBvcGVyYXRpb24uXG5cblRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjb2RlIGJsb2NrIGFyb3VuZCBsaW5lcyAyNjUwLTI2OTUuIFRoYXQncyBhIHJlYXNvbmFibGUgcmFuZ2UgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBjb2RlYmFzZS4gSSBleHBlY3QgdGhhdCBzZWN0aW9uIHdpbGwgcHJvYmFibHkgY29udGFpbiBzb21lIGtleSBkZWNpc2lvbiBwb2ludHMgYW5kIGJyYW5jaGluZyBsb2dpYyByZWxhdGVkIHRvIGV4aXQgY29uZGl0aW9ucy4gQnkgaW5zcGVjdGluZyB0aGF0IGFyZWEsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSB2YXJpb3VzIHBhdGhzIHRoZSBmdW5jdGlvbiB0YWtlcyBvbiBpdHMgd2F5IG91dCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSByb2xsYmFjayBtZWNoYW5pc20gaXMgYWx3YXlzIGludm9rZWQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoxMy42OTQ5Mzk2NzJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjQ1OlxcdFxcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cXG4yNjQ2OlxcdFxcdCAqL1xcbjI2NDc6XFx0XFx0cmV0cmFjdF9wYWdlX3RhYmxlcyhtYXBwaW5nLCBzdGFydCk7XFxuMjY0ODpcXHRcXHRpZiAoY2MgXFx1MDAyNlxcdTAwMjYgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKVxcbjI2NDk6XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xcbjI2NTA6XFx0XFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuMjY1MTpcXHRcXG4yNjUyOlxcdFxcdC8qXFxuMjY1MzpcXHRcXHQgKiBUaGUgY29sbGFwc2UgaGFzIHN1Y2NlZWRlZCwgc28gZnJlZSB0aGUgb2xkIGZvbGlvcy5cXG4yNjU0OlxcdFxcdCAqL1xcbjI2NTU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFxcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XFxuMjY1NjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuMjY1NzpcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsXFxuMjY1ODpcXHRcXHRcXHRcXHRcXHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4yNjU5OlxcdFxcdFxcdGlmIChpc19zaG1lbSlcXG4yNjYwOlxcdFxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU0hNRU0sXFxuMjY2MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4yNjYyOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VtYXBwaW5nID0gTlVMTDtcXG4yNjYzOlxcdFxcdFxcdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XFxuMjY2NDpcXHRcXHRcXHRmb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxuMjY2NTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI2NjY6XFx0XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIDIgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbjI2Njc6XFx0XFx0fVxcbjI2Njg6XFx0XFxuMjY2OTpcXHRcXHRnb3RvIG91dDtcXG4yNjcwOlxcdFxcbjI2NzE6XFx0cm9sbGJhY2s6XFxuMjY3MjpcXHRcXHQvKiBTb21ldGhpbmcgd2VudCB3cm9uZzogcm9sbCBiYWNrIHBhZ2UgY2FjaGUgY2hhbmdlcyAqL1xcbjI2NzM6XFx0XFx0aWYgKG5yX25vbmUpIHtcXG4yNjc0OlxcdFxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yNjc1OlxcdFxcdFxcdG1hcHBpbmctXFx1MDAzZW5ycGFnZXMgLT0gbnJfbm9uZTtcXG4yNjc2OlxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjI2Nzc6XFx0XFx0XFx0c2htZW1fdW5jaGFyZ2UobWFwcGluZy1cXHUwMDNlaG9zdCwgbnJfbm9uZSk7XFxuMjY3ODpcXHRcXHR9XFxuMjY3OTpcXHRcXG4yNjgwOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgdG1wLCBcXHUwMDI2cGFnZWxpc3QsIGxydSkge1xcbjI2ODE6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbjI2ODI6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4yNjgzOlxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG4yNjg0OlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjEzLjY5NTI5MDY4MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTA1MDg5ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gd2UndmUgZ290IHRoaXMgcm9sbGJhY2sgc2NlbmFyaW8gYW5kIGl0J3MgbGFuZGluZyB1cyBpbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgY29kZSwgbGluZXMgMjY4Ny0yNjkxLCBhZnRlciB0aGUgcm9sbGJhY2sgaGFzIGNvbmNsdWRlZC4gSW50ZXJlc3RpbmcsIGFsbCB0aGUgY29kZSBwYXRocyBjb252ZXJnZSBhdCB0aGUgYG91dDpgIGxhYmVsLCBhbmQgdGhlbiB3aGF0PyBcblxuUmlnaHQsIGxldCdzIHpvb20gaW4gb24gYGNvbGxhcHNlX2ZpbGVgIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IHNvbWV0aGluZyBqdWljeSBmb3IgZnV6emluZy4gU2VlbXMgbGlrZSB0aGVyZSdzIGEgZmlsZSBtYXBwaW5nIGludm9sdmVkLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBpcyBiZWluZyBjYWxsZWQgKmJlZm9yZSogYGFsbG9jX2NoYXJnZV9mb2xpb2AuIFdoeSBpcyB0aGF0IHNpZ25pZmljYW50PyBXZWxsLCBjb3VsZCBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBiZSB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgaGF2ZSBzb21lIG1lbW9yeSBhbGxvY2F0aW9uIGhhcHBlbmluZywgcG90ZW50aWFsbHkgd2l0aCBmbGFncyB0aGF0IG1pZ2h0IHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0/IElmIHJlY2xhaW0gaXMgaW52b2x2ZWQsIHRoYXQncyBhbG1vc3QgYWx3YXlzIGEgZ29vZCBzaWduIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS4gVGltZSB0byBpbnNwZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoxNi42MDAzODMyMzlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2Njc5NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NoYXJnZV9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTExNjU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyNTUtXFxubW0va2h1Z2VwYWdlZC5jOjEyNTY6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgYWxsb2NfY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0va2h1Z2VwYWdlZC5jLTEyNTctXFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTI5Mz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzA5LVxcbm1tL2todWdlcGFnZWQuYzoxMzEwOlxcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcXHUwMDI2Zm9saW8sIG1tLCBjYywgb3JkZXIpO1xcbm1tL2todWdlcGFnZWQuYy0xMzExLVxcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyNzYtXFxubW0va2h1Z2VwYWdlZC5jOjIyNzc6XFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFxcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjI3OC1cXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzY6MTYuNjg3MDcwNDA4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzOTQxOTU3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGFsbG9jX2NoYXJnZV9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzIGBhbGxvY19jaGFyZ2VfZm9saW9gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZTogSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgdGhpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGEgZm9saW8tc3BlY2lmaWMgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIG5hbWUgaW1wbGllcyBpdCBoYW5kbGVzIGZvbGlvLXJlbGF0ZWQgY2hhcmdpbmcsIHdoaWNoIHByb2JhYmx5IG1lYW5zIGFjY291bnRpbmcgZm9yIG1lbW9yeSB1c2FnZSwgcG90ZW50aWFsbHkgZm9yIGRpZmZlcmVudCBwcm9jZXNzZXMgb3Igc3Vic3lzdGVtcy5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSBlbGVtZW50czpcblxuKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBkb2VzIGl0IGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgZm9saW8gc3RydWN0dXJlcyBhbmQgYWNjb3VudGluZyBkYXRhPyBBcmUgdGhlcmUgc3BpbmxvY2tzLCBtdXRleGVzLCBhdG9taWMgb3BlcmF0aW9ucyBpbnZvbHZlZD8gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIGlzIGEgbWFqb3IgcmVkIGZsYWcgaW4gdGhpcyBhcmVhLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIGZhaWx1cmUgcGF0aHM/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgb3V0LW9mLW1lbW9yeSBzY2VuYXJpb3Mgb3Igb3RoZXIgdW5leHBlY3RlZCBjb25kaXRpb25zPyBBcmUgdGhlcmUgcmV0dXJuIGNvZGVzIG9yIGVycm9yIGluZGljYXRvcnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mP1xuKiAgICoqUmVzb3VyY2UgVHJhY2tpbmc6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHVzZWQgdG8gdHJhY2sgdGhlIGFsbG9jYXRlZCBtZW1vcnk/IElzIGl0IGp1c3QgdGhlIGZvbGlvIGl0c2VsZiwgb3IgYXJlIHRoZXJlIGNvdW50ZXJzLCBiaXRtYXBzLCBvciBvdGhlciBhdXhpbGlhcnkgc3RydWN0dXJlcyBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdyYW51bGFyaXR5IG9mIHRoaXMgdHJhY2tpbmcuXG4qICAgKipJbnRlZ3JhdGlvbiBQb2ludHM6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHM/IERvZXMgaXQgY2FsbCBpbnRvIHRoZSBwYWdlIGFsbG9jYXRvciwgdGhlIHNsYWIgYWxsb2NhdG9yLCBvciBvdGhlciByZWxldmFudCBzdWJzeXN0ZW1zPyBJJ2xsIGJlIHRyYWNpbmcgdGhlIGNvbnRyb2wgZmxvdyB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLlxuKiAgICoqQ29udGV4dDoqKiBXaGF0IGlzIHRoZSBjYWxsaW5nIGNvbnRleHQ/IEFyZSB3ZSBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgYSB1c2VyIHByb2Nlc3MsIG9yIGEga2VybmVsIHRocmVhZD8gVGhpcyBhZmZlY3RzIHRoZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBkZWFkbG9jay5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdWJ0bGUgZGV0YWlscywgbGlrZSB0aGUgdXNlIG9mIHNwZWNpZmljIGZsYWdzIG9yIGJpdGZpZWxkcyB3aXRoaW4gdGhlIGZvbGlvIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyosIG5vdCBqdXN0IHdoYXQgdGhlIG5hbWUgc3VnZ2VzdHMuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoyMC4wODEyNjgzMTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjU2LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjU2OlxcdHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbjEyNTc6XFx0XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuMTI1ODpcXHR7XFxuMTI1OTpcXHRcXHRnZnBfdCBnZnAgPSAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgPyBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2soKSA6XFxuMTI2MDpcXHRcXHRcXHQgICAgIEdGUF9UUkFOU0hVR0UpO1xcbjEyNjE6XFx0XFx0aW50IG5vZGUgPSBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKGNjKTtcXG4xMjYyOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMTI2MzpcXHRcXG4xMjY0OlxcdFxcdGZvbGlvID0gX19mb2xpb19hbGxvYyhnZnAsIG9yZGVyLCBub2RlLCBcXHUwMDI2Y2MtXFx1MDAzZWFsbG9jX25tYXNrKTtcXG4xMjY1OlxcdFxcdGlmICghZm9saW8pIHtcXG4xMjY2OlxcdFxcdFxcdCpmb2xpb3AgPSBOVUxMO1xcbjEyNjc6XFx0XFx0XFx0Y291bnRfY29sbGFwc2VfZXZlbnQob3JkZXIsIFRIUF9DT0xMQVBTRV9BTExPQ19GQUlMRUQsXFxuMTI2ODpcXHRcXHRcXHRcXHRcXHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9BTExPQ19GQUlMRUQpO1xcbjEyNjk6XFx0XFx0XFx0cmV0dXJuIFNDQU5fQUxMT0NfSFVHRV9QQUdFX0ZBSUw7XFxuMTI3MDpcXHRcXHR9XFxuMTI3MTpcXHRcXG4xMjcyOlxcdFxcdGNvdW50X2NvbGxhcHNlX2V2ZW50KG9yZGVyLCBUSFBfQ09MTEFQU0VfQUxMT0MsIE1USFBfU1RBVF9DT0xMQVBTRV9BTExPQyk7XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCkpKSB7XFxuMTI3NTpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEyNzY6XFx0XFx0XFx0KmZvbGlvcCA9IE5VTEw7XFxuMTI3NzpcXHRcXHRcXHRyZXR1cm4gU0NBTl9DR1JPVVBfQ0hBUkdFX0ZBSUw7XFxuMTI3ODpcXHRcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdFxcdGlmIChpc19wbWRfb3JkZXIob3JkZXIpKVxcbjEyODE6XFx0XFx0XFx0Y291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGZvbGlvLCBUSFBfQ09MTEFQU0VfQUxMT0MsIDEpO1xcbjEyODI6XFx0XFxuMTI4MzpcXHRcXHQqZm9saW9wID0gZm9saW87XFxuMTI4NDpcXHRcXHRyZXR1cm4gU0NBTl9TVUNDRUVEO1xcbjEyODU6XFx0fVxcbjEyODY6XFx0XFxuMTI4NzpcXHQvKlxcbjEyODg6XFx0ICogY29sbGFwc2VfaHVnZV9wYWdlKCkgZXhwZWN0cyB0aGUgbW1hcF9sb2NrIHRvIGJlIHVubG9ja2VkIGJlZm9yZSBlbnRlcmluZyBhbmRcXG4xMjg5OlxcdCAqIHdpbGwgYWx3YXlzIHJldHVybiB3aXRoIHRoZSBsb2NrIHVubG9ja2VkLCB0byBhdm9pZCBob2xkaW5nIHRoZSBtbWFwX2xvY2tcXG4xMjkwOlxcdCAqIHdoaWxlIGFsbG9jYXRpbmcgYSBUSFAsIGFzIHRoYXQgY291bGQgdHJpZ2dlciBkaXJlY3QgcmVjbGFpbS9jb21wYWN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoyMC4wODE0MDQwNjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzgxMTU1MDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGRpZyBpbnRvIHRoaXMgY29kZS4gVGhvc2UgbGluZXMsIHNwZWNpZmljYWxseSBsaW5lcyAxMjg4LTEyOTAsIHJlYWxseSBjYXVnaHQgbXkgZXllLiBUaGUgY29tbWVudCBhYm91dCBhdm9pZGluZyB0aGUgYG1tYXBfbG9ja2AgZHVyaW5nIFRIUCBhbGxvY2F0aW9uLCBhbmQgaG93IHRoYXQgY2FuIHRyaWdnZXIgZGlyZWN0IHJlY2xhaW0vY29tcGFjdGlvbuKApiB0aGF0J3MgdGhlIGNydXggb2YgaXQuIE5vdywgKmBjb2xsYXBzZV9maWxlYCogaXMgaG9sZGluZyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCB3aGVuIGl0IGNhbGxzIGBhbGxvY19jaGFyZ2VfZm9saW9gLiBUaGF0J3MgYSBwb3RlbnRpYWwgcmVjaXBlIGZvciBkaXNhc3Rlci4gSWYgZGlyZWN0IHJlY2xhaW0ga2lja3MgaW4sIHRoZSBmaWxlc3lzdGVtIG9yIHBhZ2UgY2FjaGUgY291bGQgdHJ5IHRvIGxvY2sgdGhlICpgbWFwcGluZ2AqLCBhbmQgd2UncmUgdGFsa2luZyBhYm91dCBhIHBvdGVudGlhbCBsb2NrZGVwIGlzc3VlIGhlcmUuIEkgbWVhbiwgd2UgYXJlIHJlYWxseSB0b3VjaGluZyBvbiBjb3JlIE1NIGxvZ2ljOiB0aGUgbG9ja2luZywgdGhlIHBhZ2UgY2FjaGUsIHJlYWRhaGVhZCwga2h1Z2VwYWdlZCBjb2xsYXBzZSBvZiBmaWxlIHBhZ2VzLCB0aGUgd2hvbGUgZW5jaGlsYWRhLlxuXG5UaGUgdXNlIG9mICpgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgKiB0byByZXBsYWNlICpgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAqIGlzIGFsc28gc2lnbmlmaWNhbnQsIGFuZCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBsb2NraW5nIG9yZGVyIG9mIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgIHJlbGF0aXZlIHRvIGZvbGlvIGxvY2tzLCB0cnVuY2F0ZSwgcmVhZGFoZWFkLCBhbmQgZXZlcnl0aGluZyBlbHNlIGluIGJldHdlZW4uXG5cblNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCdzIGNoZWNrIHRoZSBjcml0ZXJpYS4gU2VjdGlvbiAzIG9mIHRoYXQgZG9jdW1lbnQgc2VlbXMgcHJldHR5IGNsZWFyOiBcIkNvcmUgU3Vic3lzdGVtczogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLCAuLi5cIi4gQmluZ28uIEFuZCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgb3Iga2h1Z2VwYWdlZCBzY2FubmluZy4gVGhpcyBpcyB1bmVxdWl2b2NhbGx5IFwiV29ydGhGdXp6aW5nLlwiXG5cbk5vdyB0aGUgcXVlc3Rpb24gaXM6IHdoYXQgYXJlIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzPyBUaGUgZ3VpZGVsaW5lcyBpbiBTZWN0aW9uIDQgYXJlIHJlbGV2YW50OiBhdm9pZGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgdGFyZ2V0aW5nIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5cG9pbnRzLCBhbmQgZGVhbGluZyB3aXRoIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLlxuXG5XaGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaGVyZT8gT2J2aW91c2x5LCAqYGNvbGxhcHNlX2ZpbGVgKiBpbiBgbW0va2h1Z2VwYWdlZC5jYCBpcyBtb2RpZmllZC4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5cG9pbnRzIGFuZCBjYWxsZXJzIGFyZTogKmBjb2xsYXBzZV9zY2FuX2ZpbGVgKiwgKmBjb2xsYXBzZV9zaW5nbGVfcG1kYCosICpgbWFkdmlzZV9jb2xsYXBzZWAqLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBraHVnZXBhZ2VkIGNhbGxzIGluIHBhcnRpY3VsYXIsIGVzcGVjaWFsbHkgaG93IGl0IGNhbGxzICpgY29sbGFwc2VfZmlsZWAqIG9yICpgY29sbGFwc2Vfc2Nhbl9maWxlYCosIGp1c3QgdG8gYmUgc3VyZS4gSSdsbCBoZWFkIGJhY2sgaW50byBgbW0va2h1Z2VwYWdlZC5jYCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoyNy44OTI5NTc1NDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDM5NDE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsYXBzZV9maWxlfGNvbGxhcHNlX3NjYW5fZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTIxMzk9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjIzLS8qKlxcbm1tL2todWdlcGFnZWQuYzoyMjI0OiAqIGNvbGxhcHNlX2ZpbGUgLSBjb2xsYXBzZSBmaWxlbWFwL3RtcGZzL3NobWVtIHBhZ2VzIGludG8gaHVnZSBvbmUuXFxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjQ3LSAqL1xcbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjI0OS1cXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2OTQtXFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbm1tL2todWdlcGFnZWQuYzoyNjk1OlxcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcXG5tbS9raHVnZXBhZ2VkLmMtMjY5Ni1cXHRyZXR1cm4gcmVzdWx0O1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2OTgtXFxubW0va2h1Z2VwYWdlZC5jOjI2OTk6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2todWdlcGFnZWQuYy0yNzAwLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjc5Ni1cXHRcXHR9IGVsc2Uge1xcbm1tL2todWdlcGFnZWQuYzoyNzk3OlxcdFxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHN0YXJ0LCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTI3OTgtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI4MDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgzMS1yZXRyeTpcXG5tbS9raHVnZXBhZ2VkLmM6MjgzMjpcXHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHBnb2ZmLCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTI4MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjI4LjA4NzM1NjU4MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODE0MjIwMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBGaXJzdCwgSSBzZWUgdGhhdCBgbWFkdmlzZV9jb2xsYXBzZWAgaXMgYSBjYWxsZXIuIFRoYXQgbWFrZXMgc2Vuc2UsIGhhbmRsaW5nIG1lbW9yeSBjb2xsYXBzZSBiYXNlZCBvbiB1c2VyIGhpbnRzLiBUaGVuIHRoZXJlIGlzIGBjb2xsYXBzZV9zY2FuX21tX3Nsb3RgLCB3aGljaCBpcyBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLCBwb3NzaWJseSBpbmRpY2F0aW5nIGl0J3MgcmVsYXRlZCB0byBzb21lIGtpbmQgb2Ygc2Nhbm5pbmcgb3IgYmFja2dyb3VuZCBwcm9jZXNzLlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwLiBJIG5lZWQgdG8gYmUgc3VyZTsgZG9lcyB0aGUga2VybmVsJ3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQgdGFzaywgc3BlY2lmaWNhbGx5IGBraHVnZXBhZ2VkX2RvX3NjYW5gLCBhY3R1YWxseSBjYWxsIHRoYXQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdGAgZnVuY3Rpb24/IElmIGl0IGRvZXMsIHRoYXQncyBwb3RlbnRpYWxseSB2ZXJ5IHNpZ25pZmljYW50LCBhcyBpdCBsaW5rcyBhdXRvbWF0aWMgcGFnZSBjb2xsYXBzaW5nIHRvIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4gVGhpcyBuZWVkcyBjb25maXJtYXRpb24sIHNvIEknbGwgcGl2b3QgbXkgZm9jdXMgdG8gZXhhbWluZSB0aGUgY29kZSBvZiBgY29sbGFwc2Vfc2Nhbl9tbV9zbG90YCBpdHNlbGYuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgY2FsbGluZyBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjMyLjkwMTU3ODdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzE3NDA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsYXBzZV9zY2FuX21tX3Nsb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yODA5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4NjUtXFxubW0va2h1Z2VwYWdlZC5jOjI4NjY6c3RhdGljIHZvaWQgY29sbGFwc2Vfc2Nhbl9tbV9zbG90KHVuc2lnbmVkIGludCBwcm9ncmVzc19tYXgsXFxubW0va2h1Z2VwYWdlZC5jLTI4NjctXFx0XFx0ZW51bSBzY2FuX3Jlc3VsdCAqcmVzdWx0LCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjk5Nj1zdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2RvX3NjYW4oc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMwMTYtXFx0XFx0ICAgIHBhc3NfdGhyb3VnaF9oZWFkIFxcdTAwM2MgMilcXG5tbS9raHVnZXBhZ2VkLmM6MzAxNzpcXHRcXHRcXHRjb2xsYXBzZV9zY2FuX21tX3Nsb3QocHJvZ3Jlc3NfbWF4LCBcXHUwMDI2cmVzdWx0LCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTMwMTgtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjozMy4yODg3NTc2NjRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE4OTgxMjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgKipcblxuUmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoaXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBzZXR0aW5nLiBJIHJlbWVtYmVyIGhlYXJpbmcgYWJvdXQgaXQgaW4gdGhlIGNvbnRleHQgb2YgcmVjZW50IGRpc2N1c3Npb25zLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgaXQncyBhY3R1YWxseSBkZWZpbmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIHJlYWQtYWhlYWQgdHVuaW5nIHBhcmFtZXRlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBJIGFtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0IGlzIGEgZ2xvYmFsIG9yIHBlciBtb3VudCBvcHRpb24gYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHJlYWQtYWhlYWQgYmVoYXZpb3JzLiBBIHF1aWNrIHNlYXJjaCBvZiB0aGUga2VybmVsIHNvdXJjZSBvciByZWxldmFudCBkb2N1bWVudGF0aW9uIHNob3VsZCBjbGFyaWZ5IGl0cyBsb2NhdGlvbiBhbmQgcHVycG9zZSwgYmVjYXVzZSBpdHMgYmVoYXZpb3Igc2VlbXMgYSBiaXQgYW1iaWd1b3VzIGZyb20gd2hhdCBJIGhhdmUgcmVhZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzMyNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjM1LjQ3ODU3MzUzMVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5MTMzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jYWNoZV9yYV91bmJvdW5kZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMzU0LVxcdFxcdFxcdFxcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24ndCByZXRha2UgaXQuXFxubW0va2h1Z2VwYWdlZC5jOjIzNTU6XFx0XFx0XFx0XFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcXG5tbS9raHVnZXBhZ2VkLmMtMjM1Ni1cXHRcXHRcXHRcXHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIzNTgtXFx0XFx0XFx0XFx0aWYgKGluZGV4IFxcdTAwM2MgZW9mKVxcbm1tL2todWdlcGFnZWQuYzoyMzU5OlxcdFxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFxcdTAwMjZyYWN0bCxcXG5tbS9raHVnZXBhZ2VkLmMtMjM2MC1cXHRcXHRcXHRcXHRcXHRcXHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xcbi0tXFxubW0vcmVhZGFoZWFkLmM9MTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJhY3RsX2FsbG9jX2ZvbGlvKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0yMDctLyoqXFxubW0vcmVhZGFoZWFkLmM6MjA4OiAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkIC0gU3RhcnQgdW5jaGVja2VkIHJlYWRhaGVhZC5cXG5tbS9yZWFkYWhlYWQuYy0yMDktICogQHJhY3RsOiBSZWFkYWhlYWQgY29udHJvbC5cXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTIyMS0gKi9cXG5tbS9yZWFkYWhlYWQuYzoyMjI6dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbm1tL3JlYWRhaGVhZC5jLTIyMy1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9va2FoZWFkX3NpemUpXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0yNDQtXFxubW0vcmVhZGFoZWFkLmM6MjQ1OlxcdHRyYWNlX3BhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKG1hcHBpbmctXFx1MDAzZWhvc3QsIGluZGV4LCBucl90b19yZWFkLFxcbm1tL3JlYWRhaGVhZC5jLTI0Ni1cXHRcXHRcXHRcXHQgICAgICBsb29rYWhlYWRfc2l6ZSk7XFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0zMTctfVxcbm1tL3JlYWRhaGVhZC5jOjMxODpFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCk7XFxubW0vcmVhZGFoZWFkLmMtMzE5LVxcbi0tXFxubW0vcmVhZGFoZWFkLmM9MzI2PXN0YXRpYyB2b2lkIGRvX3BhZ2VfY2FjaGVfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTM0Ny1cXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxubW0vcmVhZGFoZWFkLmM6MzQ4OlxcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHJhY3RsLCBucl90b19yZWFkLCBsb29rYWhlYWRfc2l6ZSk7XFxubW0vcmVhZGFoZWFkLmMtMzQ5LVxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbi0tXFxubW0vcmVhZGFoZWFkLmM9NDgxPXZvaWQgcGFnZV9jYWNoZV9yYV9vcmRlcihzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtNTE0LVxcbm1tL3JlYWRhaGVhZC5jOjUxNTpcXHQvKiBTZWUgY29tbWVudCBpbiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpICovXFxubW0vcmVhZGFoZWFkLmMtNTE2LVxcdG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzY6MzUuNTc1NDkyODhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njc2MTk0ODk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBDaGFuZ2UgaW4gQ29yZSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGludm9sdmluZyBgbW0vcmVhZGFoZWFkLmM6MzQ3YCBhbmQgaXQncyBnb3QgbWUgdGhpbmtpbmcuIEl0IHNlZW1zIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaXMgbm93IGFzc3VtaW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBhY3F1aXJlZCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYC4gVGhhdCdzIGEga2V5IGRldGFpbC4gIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB1c2VkIHRvIGhhbmRsZSB0aGUgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSwgYnV0IG5vdyB3ZSd2ZSBnb3QgYGNvbGxhcHNlX2ZpbGVgICpob2xkaW5nKiB0aGlzIGxvY2sgZm9yIGl0cyAqZW50aXJlKiBkdXJhdGlvbi4gVGhlIGNvbW1lbnQgYWJvdXQgdGFraW5nIHRoZSBgaW52YWxpZGF0ZV9sb2NrYCBiZWZvcmUgYW55IGZvbGlvIGxvY2sgYmVjYXVzZSBcInRoZSByZWFkYWhlYWQgYmVsb3cgbmVlZHMgaXRcIiBpcyB0aGUgY2x1ZSBoZXJlIGFuZCB0aGF0IGB0cnVuY2F0ZWAgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgcGFyYWRpZ20gc2hpZnQgaW4gdGhlIE1NIGNvcmUuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBnb2VzIHRvIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIGBjb2xsYXBzZV9maWxlYCBpcyB0aGUgcHJpbWFyeSBtb2RpZmllZCBmdW5jdGlvbiwgYW5kIHRoZW4gdGhlcmUncyBpdHMgY2FsbGVyIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLCB0aGUgY2FsbGVyIG9mIHRoYXQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLCBhbmQgdGhlIHB1YmxpYyBlbnRyeSBwb2ludCBgbWFkdmlzZV9jb2xsYXBzZWAgZnJvbSB0aGUgYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgIHN5c2NhbGwuIEFuZCB0aGUga2h1Z2VwYWdlZCBkYWVtb24gZW50cnlwb2ludCBgY29sbGFwc2Vfc2Nhbl9tbV9zbG90YC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZWlyIHViaXF1aXR5LCBhbmQgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgYG1hZHZpc2VfY29sbGFwc2VgIGlzIE5PVCBhIGNvbW1vbiBwYXRoLCBvbmx5IHRyaWdnZXJlZCBieSB0aGUgc3BlY2lmaWMgYE1BRFZfQ09MTEFQU0VgIHN5c2NhbGwuIFNpbWlsYXJseSwgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGlzIGFsc28gbm90IHViaXF1aXRvdXMsIG9ubHkgY2FsbGVkIGJ5IHRob3NlIGNvbGxhcHNlLXJlbGF0ZWQgZnVuY3Rpb25zLiAgYGNvbGxhcHNlX3NjYW5fZmlsZWAgaXMgYWxzbyBvbmx5IGNhbGxlZCBieSBjb2xsYXBzZV9zaW5nbGVfcG1kLiBTbywgbm9uZSBvZiB0aGVzZSBhcmUgbGlrZWx5IHRvIGJlIHdpZGVseSB1c2VkLiBCdXQgdGhlbiBJJ20gd29uZGVyaW5nIGlmIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaXMgdWJpcXVpdG91cywgYmVjYXVzZSBpdCdzIGF0IHRoZSBjb3JlIG9mIHJlYWRhaGVhZCBpbiBhbnkgZmlsZSByZWFkLiBUaGUgZnVuY3Rpb25zIChgY29sbGFwc2VfZmlsZWAsIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAsIGBtYWR2aXNlX2NvbGxhcHNlYCkgc2VlbSBzcGVjaWZpYyB0byB0aGlzIFRIUCBjb2xsYXBzZSBmZWF0dXJlLiBJdCdzIGJlc3QgdG8gYXZvaWQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCB0byBrZWVwIHRoZSBmdXp6aW5nIGZvY3VzZWQuXG5cbkFscmlnaHQsIHdoYXQgY29uZmlndXJhdGlvbiBrbm9icyBjb250cm9sIHRoaXM/IEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiAoYEVuYWJsZUNvbmZpZ3NgKS4gYGtodWdlcGFnZWQuY2AgaXMgdGhlIGtleSwgc28gSSdsbCBnbyB0byBgbW0vTWFrZWZpbGVgLiAgQWhhISBgb2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub2AuIFRoYXQncyB0aGUgb25lLiBBbmQgaW4gYG1tL0tjb25maWdgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGl0c2VsZi4gIEl0IGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGEgY291cGxlIG9mIG90aGVyIHRoaW5ncy4gIElzIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQgb24gYW1kNjQ/IEkgbmVlZCB0byBsb29rIGluIGBhcmNoL3g4Ni9LY29uZmlnYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI3OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjo0Mi4zMzc0NDQ2NzFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDk2MzU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTEtXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0tcXG5hcmNoL3g4Ni9LY29uZmlnOjIxMjpcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC94ODYvS2NvbmZpZzoyMTM6XFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0yMTQtXFx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUCAgICAgICAgIGlmIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBVU0VSRkFVTFRGRFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTI5Nz1zdGF0aWMgaW5saW5lIGludCBwbWRfdHJhbnNfaHVnZShwbWRfdCBwbWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzAxLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMDI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMwMy1zdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTM1Nz1zdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzNzAtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEzNzE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzNzItc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYz01MDk9cG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNTIyLSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmFyY2gveDg2L21tL3BndGFibGUuYzo1MjM6XFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNTI0LXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjo0Mi40NTg0MTQ4NDlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE1ODYzMTQ5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApKipcblxuT2theSwgc28gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGZvciB4ODYgYXJjaGl0ZWN0dXJlLCB3aGljaCBtZWFucyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9uIGFtZDY0IGFzIHdlbGwuIFRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSBzaG91bGQgZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRpZWQgdG8gYGtodWdlcGFnZWRgIG9yIHJlbGF0ZWQgdG8gY29sbGFwc2VkIGZpbGVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBhd2FyZSBvZiB0aGUgZnVsbCBjb25maWd1cmF0aW9uIHNwYWNlIGhlcmUuIFdhaXQgYSBzZWNvbmQsIHdhc24ndCB0aGVyZSBhIGBSRUFET05MWV9USFBgIGNvbmZpZyBhdCBzb21lIHBvaW50PyBXYXMgdGhhdCBjb21wbGV0ZWx5IHJlbW92ZWQsIG9yIGhhcyBpdCBiZWVuIHJlbmFtZWQgb3IgZGVwcmVjYXRlZD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0MzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjo1NC4wNDQ3MzI4OThaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjM0NjkwNzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJFQURPTkxZX1RIUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzY6NTYuMDA4MjE0ODM5WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY1MTQ3OTMwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIGluIG1tL0tjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gc2VlIGhvdyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBiZXlvbmQgdGhlIG1haW4gb25lLCB0aGF0IGFyZSBhbHNvIHVzaW5nIHRoaXMgb3B0aW9uIGluIHRoZSBmaWxlIGBtbS9LY29uZmlnYD8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbGFuZHNjYXBlIG9mIGRlcGVuZGVuY2llcyBhbmQgYXNzb2NpYXRlZCBzZXR0aW5ncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBvdmVycmlkZXMsIG9yIHJlbGF0ZWQgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbnRlcnR3aW5lZCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjcxMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM3OjAyLjUyMzAxMTQ2NFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzMzM0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzEwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9LY29uZmlnPTM9bWVudSBcXFwiTWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9uc1xcXCJcXG4tLVxcbm1tL0tjb25maWctOC0jXFxubW0vS2NvbmZpZzo5OmNvbmZpZyBBUkNIX05PX1NXQVBcXG5tbS9LY29uZmlnLTEwLVxcdGJvb2xcXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuLS1cXG5tbS9LY29uZmlnLTEyNC1cXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0NcXG5tbS9LY29uZmlnLTEyNi1cXHR0cmlzdGF0ZVxcbi0tXFxubW0vS2NvbmZpZz0xMzE9Y29tbWVudCBcXFwiWnNtYWxsb2MgaXMgYSBjb21tb24gYmFja2VuZCBhbGxvY2F0b3IgZm9yIHpzd2FwIFxcdTAwMjYgenJhbVxcXCJcXG5tbS9LY29uZmlnLTEzMi1cXG5tbS9LY29uZmlnOjEzMzpjb25maWcgWlNNQUxMT0NfU1RBVFxcbm1tL0tjb25maWctMTM0LVxcdGJvb2wgXFxcIkV4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEtXFxubW0vS2NvbmZpZzoxNDI6Y29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcXG5tbS9LY29uZmlnLTE0My1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzIHBlci16c3BhZ2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTE2Mj1tZW51IFxcXCJTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxcIlxcbm1tL0tjb25maWctMTYzLVxcbm1tL0tjb25maWc6MTY0OmNvbmZpZyBTTFVCXFxubW0vS2NvbmZpZy0xNjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy0xNjctXFxubW0vS2NvbmZpZzoxNjg6Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxcbm1tL0tjb25maWctMTY5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctMTcyLVxcbm1tL0tjb25maWc6MTczOmNvbmZpZyBTTFVCX1RJTllcXG5tbS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTg1LVxcbm1tL0tjb25maWc6MTg2OmNvbmZpZyBTTEFCX01FUkdFX0RFRkFVTFRcXG5tbS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJBbGxvdyBzbGFiIGNhY2hlcyB0byBiZSBtZXJnZWRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE5OS1cXG5tbS9LY29uZmlnOjIwMDpjb25maWcgU0xBQl9GUkVFTElTVF9SQU5ET01cXG5tbS9LY29uZmlnLTIwMS1cXHRib29sIFxcXCJSYW5kb21pemUgc2xhYiBmcmVlbGlzdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMjA3LVxcbm1tL0tjb25maWc6MjA4OmNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxubW0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiSGFyZGVuIHNsYWIgZnJlZWxpc3QgbWV0YWRhdGFcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTIxNi1cXG5tbS9LY29uZmlnOjIxNzpjb25maWcgU0xBQl9CVUNLRVRTXFxubW0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0yMzMtXFxubW0vS2NvbmZpZzoyMzQ6Y29uZmlnIFNMVUJfU1RBVFNcXG5tbS9LY29uZmlnLTIzNS1cXHRkZWZhdWx0IG5cXG4tLVxcbm1tL0tjb25maWctMjQ2LVxcbm1tL0tjb25maWc6MjQ3OmNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcXG5tbS9LY29uZmlnLTI0OC1cXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG4tLVxcbm1tL0tjb25maWc9MjYzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy0yNzAtXFxubW0vS2NvbmZpZzoyNzE6Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX1JBTkRPTVxcbm1tL0tjb25maWctMjcyLVxcdGJvb2wgXFxcIlJhbmRvbWl6ZSBzbGFiIGNhY2hlcyBmb3Igbm9ybWFsIGttYWxsb2NcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTI4Mi1cXG5tbS9LY29uZmlnOjI4Mzpjb25maWcgS01BTExPQ19QQVJUSVRJT05fVFlQRURcXG5tbS9LY29uZmlnLTI4NC1cXHRib29sIFxcXCJUeXBlIGJhc2VkIHNsYWIgY2FjaGUgc2VsZWN0aW9uIGZvciBub3JtYWwga21hbGxvY1xcXCJcXG4tLVxcbm1tL0tjb25maWc9MzA5PWVuZGNob2ljZVxcbm1tL0tjb25maWctMzEwLVxcbm1tL0tjb25maWc6MzExOmNvbmZpZyBSQU5ET01fS01BTExPQ19DQUNIRVNcXG5tbS9LY29uZmlnLTMxMi1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTMxNC1cXHRoZWxwXFxubW0vS2NvbmZpZzozMTU6XFx0ICBUcmFuc2l0aW9uYWwgY29uZmlnIGZvciBtaWdyYXRpb24gdG8gS01BTExPQ19QQVJUSVRJT05fQ0FDSEVTLlxcbm1tL0tjb25maWctMzE2LVxcbm1tL0tjb25maWc9MzE3PWVuZG1lbnUgIyBTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxubW0vS2NvbmZpZy0zMTgtXFxubW0vS2NvbmZpZzozMTk6Y29uZmlnIFNIVUZGTEVfUEFHRV9BTExPQ0FUT1JcXG5tbS9LY29uZmlnLTMyMC1cXHRib29sIFxcXCJQYWdlIGFsbG9jYXRvciByYW5kb21pemF0aW9uXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNDEtXFxubW0vS2NvbmZpZzozNDI6Y29uZmlnIENPTVBBVF9CUktcXG5tbS9LY29uZmlnLTM0My1cXHRib29sIFxcXCJEaXNhYmxlIGhlYXAgcmFuZG9taXphdGlvblxcXCJcXG4tLVxcbm1tL0tjb25maWctMzUzLVxcbm1tL0tjb25maWc6MzU0OmNvbmZpZyBNTUFQX0FMTE9XX1VOSU5JVElBTElaRURcXG5tbS9LY29uZmlnLTM1NS1cXHRib29sIFxcXCJBbGxvdyBtbWFwcGVkIGFub255bW91cyBtZW1vcnkgdG8gYmUgdW5pbml0aWFsaXplZFxcXCJcXG4tLVxcbm1tL0tjb25maWctMzYwLVxcdCAgZnJvbSBtbWFwKCkgaGFzIGl0cyBjb250ZW50cyBjbGVhcmVkIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG9cXG5tbS9LY29uZmlnOjM2MTpcXHQgIHVzZXJzcGFjZS4gIEVuYWJsaW5nIHRoaXMgY29uZmlnIG9wdGlvbiBhbGxvd3MgeW91IHRvIHJlcXVlc3QgdGhhdFxcbm1tL0tjb25maWctMzYyLVxcdCAgbW1hcCgpIHNraXAgdGhhdCBpZiBpdCBpcyBnaXZlbiBhbiBNQVBfVU5JTklUSUFMSVpFRCBmbGFnLCB0aHVzXFxuLS1cXG5tbS9LY29uZmlnLTM3NS1cXG5tbS9LY29uZmlnOjM3Njpjb25maWcgU0VMRUNUX01FTU9SWV9NT0RFTFxcbm1tL0tjb25maWctMzc3LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWc9MzgwPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy0zOTAtXFxubW0vS2NvbmZpZzozOTE6Y29uZmlnIEZMQVRNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy0zOTItXFx0Ym9vbCBcXFwiRmxhdCBNZW1vcnlcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQwNi1cXG5tbS9LY29uZmlnOjQwNzpjb25maWcgU1BBUlNFTUVNX01BTlVBTFxcbm1tL0tjb25maWctNDA4LVxcdGJvb2wgXFxcIlNwYXJzZSBNZW1vcnlcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTQyMD1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTQyMS1cXG5tbS9LY29uZmlnOjQyMjpjb25maWcgU1BBUlNFTUVNXFxubW0vS2NvbmZpZy00MjMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy00MjUtXFxubW0vS2NvbmZpZzo0MjY6Y29uZmlnIEZMQVRNRU1cXG5tbS9LY29uZmlnLTQyNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTQ0MC0jXFxubW0vS2NvbmZpZzo0NDE6Y29uZmlnIFNQQVJTRU1FTV9TVEFUSUNcXG5tbS9LY29uZmlnLTQ0Mi1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTQ0OC0jXFxubW0vS2NvbmZpZzo0NDk6Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxubW0vS2NvbmZpZy00NTAtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy00NTItXFxubW0vS2NvbmZpZzo0NTM6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRVxcbm1tL0tjb25maWctNDU0LVxcdGJvb2xcXG5tbS9LY29uZmlnLTQ1NS1cXG5tbS9LY29uZmlnOjQ1Njpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcXG5tbS9LY29uZmlnLTQ1Ny1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTQ2My1cXG5tbS9LY29uZmlnOjQ2NDpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfUFJFSU5JVFxcbm1tL0tjb25maWctNDY1LVxcdGJvb2xcXG5tbS9LY29uZmlnLTQ2Ni0jXFxubW0vS2NvbmZpZzo0Njc6IyBTZWxlY3QgdGhpcyBjb25maWcgb3B0aW9uIGZyb20gdGhlIGFyY2hpdGVjdHVyZSBLY29uZmlnLCBpZiBpdCBpcyBwcmVmZXJyZWRcXG5tbS9LY29uZmlnLTQ2OC0jIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSBvZiBIdWdlVExCL2Rldl9kYXggdm1lbW1hcCBvcHRpbWl6YXRpb24uXFxubW0vS2NvbmZpZy00NjktI1xcbm1tL0tjb25maWc6NDcwOmNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcXG5tbS9LY29uZmlnLTQ3MS1cXHRib29sXFxubW0vS2NvbmZpZy00NzItXFxubW0vS2NvbmZpZzo0NzM6Y29uZmlnIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcXG5tbS9LY29uZmlnLTQ3NC1cXHRib29sXFxubW0vS2NvbmZpZy00NzUtXFxubW0vS2NvbmZpZzo0NzY6Y29uZmlnIEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVFxcbm1tL0tjb25maWctNDc3LVxcdGJvb2xcXG5tbS9LY29uZmlnLTQ3OC1cXG5tbS9LY29uZmlnOjQ3OTpjb25maWcgSEFWRV9NRU1CTE9DS19QSFlTX01BUFxcbm1tL0tjb25maWctNDgwLVxcdGJvb2xcXG5tbS9LY29uZmlnLTQ4MS1cXG5tbS9LY29uZmlnOjQ4Mjpjb25maWcgSEFWRV9HVVBfRkFTVFxcbm1tL0tjb25maWctNDgzLVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnLTQ4Ni0jIEVuYWJsZSBtZW1ibG9jayBzdXBwb3J0IGZvciBzY3JhdGNoIG1lbW9yeSB3aGljaCBpcyBuZWVkZWQgZm9yIGtleGVjIGhhbmRvdmVyXFxubW0vS2NvbmZpZzo0ODc6Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXFxubW0vS2NvbmZpZy00ODgtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZy00OTItIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXFxubW0vS2NvbmZpZzo0OTM6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xcbm1tL0tjb25maWctNDk0LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWctNDk2LSMgS2VlcCBhcmNoIE5VTUEgbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBwb3N0LWluaXQuXFxubW0vS2NvbmZpZzo0OTc6Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXFxubW0vS2NvbmZpZy00OTgtXFx0Ym9vbFxcbm1tL0tjb25maWctNDk5LVxcbm1tL0tjb25maWc6NTAwOmNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXFxubW0vS2NvbmZpZy01MDEtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZy01MDUtIyAvZGV2L21lbS5cXG5tbS9LY29uZmlnOjUwNjpjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG5tbS9LY29uZmlnLTUwNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTUwOS1cXG5tbS9LY29uZmlnOjUxMDpjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUxMS1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTUxMy0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxubW0vS2NvbmZpZzo1MTQ6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTE1LVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01MjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTU0NS1cXG5tbS9LY29uZmlnOjU0Njpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT0ZGTElORVxcbm1tL0tjb25maWctNTQ3LVxcdGJvb2wgXFxcIm9mZmxpbmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTU1Mi1cXG5tbS9LY29uZmlnOjU1Mzpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE9cXG5tbS9LY29uZmlnLTU1NC1cXHRib29sIFxcXCJhdXRvXFxcIlxcbi0tXFxubW0vS2NvbmZpZy01NTktXFxubW0vS2NvbmZpZzo1NjA6Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9LRVJORUxcXG5tbS9LY29uZmlnLTU2MS1cXHRib29sIFxcXCJrZXJuZWxcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTU2Ni1cXG5tbS9LY29uZmlnOjU2Nzpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX01PVkFCTEVcXG5tbS9LY29uZmlnLTU2OC1cXHRib29sIFxcXCJtb3ZhYmxlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01ODA9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy01ODEtXFxubW0vS2NvbmZpZzo1ODI6Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG5tbS9LY29uZmlnLTU4My1cXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTU4NS1cXG5tbS9LY29uZmlnOjU4Njpjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcXG5tbS9LY29uZmlnLTU4Ny1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnPTU5MD1lbmRpZiAjIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01OTEtXFxubW0vS2NvbmZpZzo1OTI6Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxubW0vS2NvbmZpZy01OTMtICAgICAgIGJvb2xcXG4tLVxcbm1tL0tjb25maWctNjA1LSNcXG5tbS9LY29uZmlnOjYwNjpjb25maWcgU1BMSVRfUFRFX1BUTE9DS1NcXG5tbS9LY29uZmlnLTYwNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTYxNS1cXG5tbS9LY29uZmlnOjYxNjpjb25maWcgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DS1xcbm1tL0tjb25maWctNjE3LVxcdGJvb2xcXG5tbS9LY29uZmlnLTYxOC1cXG5tbS9LY29uZmlnOjYxOTpjb25maWcgU1BMSVRfUE1EX1BUTE9DS1NcXG5tbS9LY29uZmlnLTYyMC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTYyNC0jIHN1cHBvcnQgZm9yIG1lbW9yeSBiYWxsb29uXFxubW0vS2NvbmZpZzo2MjU6Y29uZmlnIEJBTExPT05cXG5tbS9LY29uZmlnLTYyNi1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTYyOS0jIHN1cHBvcnQgZm9yIG1lbW9yeSBiYWxsb29uIHBhZ2UgbWlncmF0aW9uXFxubW0vS2NvbmZpZzo2MzA6Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02MzEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIGJhbGxvb24gbWVtb3J5IG1pZ3JhdGlvblxcXCJcXG4tLVxcbm1tL0tjb25maWctNjQxLSMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cXG5tbS9LY29uZmlnOjY0Mjpjb25maWcgQ09NUEFDVElPTlxcbm1tL0tjb25maWctNjQzLVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgY29tcGFjdGlvblxcXCJcXG4tLVxcbm1tL0tjb25maWctNjU2LVxcbm1tL0tjb25maWc6NjU3OmNvbmZpZyBDT01QQUNUX1VORVZJQ1RBQkxFX0RFRkFVTFRcXG5tbS9LY29uZmlnLTY1OC1cXHRpbnRcXG4tLVxcbm1tL0tjb25maWctNjY0LSMgc3VwcG9ydCBmb3IgZnJlZSBwYWdlIHJlcG9ydGluZ1xcbm1tL0tjb25maWc6NjY1OmNvbmZpZyBQQUdFX1JFUE9SVElOR1xcbm1tL0tjb25maWctNjY2LVxcdGJvb2wgXFxcIkZyZWUgcGFnZSByZXBvcnRpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTY3Mi1cXG5tbS9LY29uZmlnOjY3Mzpjb25maWcgTlVNQV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3NC1cXHRib29sIFxcXCJOVU1BIHBhZ2UgbWlncmF0aW9uXFxcIlxcbi0tXFxubW0vS2NvbmZpZy02ODMtXFxubW0vS2NvbmZpZzo2ODQ6Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjg1LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWctNjg3LVxcbm1tL0tjb25maWc6Njg4OmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODktXFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy02OTAtXFxubW0vS2NvbmZpZzo2OTE6Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbm1tL0tjb25maWctNjkyLVxcdGJvb2xcXG5tbS9LY29uZmlnLTY5My1cXG5tbS9LY29uZmlnOjY5NDpjb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG5tbS9LY29uZmlnLTY5NS1cXHRib29sXFxubW0vS2NvbmZpZy02OTYtXFxubW0vS2NvbmZpZzo2OTc6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTgtXFx0ZGVmX2Jvb2wgblxcbi0tXFxubW0vS2NvbmZpZy03MDYtXFxubW0vS2NvbmZpZzo3MDc6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzA4LVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcbm1tL0tjb25maWctNzA5LVxcbm1tL0tjb25maWc6NzEwOmNvbmZpZyBQQ1BfQkFUQ0hfU0NBTEVfTUFYXFxubW0vS2NvbmZpZy03MTEtXFx0aW50IFxcXCJNYXhpbXVtIHNjYWxlIGZhY3RvciBvZiBQQ1AgKFBlci1DUFUgcGFnZXNldCkgYmF0Y2ggYWxsb2NhdGUvZnJlZVxcXCJcXG4tLVxcbm1tL0tjb25maWctNzIwLVxcbm1tL0tjb25maWc6NzIxOmNvbmZpZyBQSFlTX0FERFJfVF82NEJJVFxcbm1tL0tjb25maWctNzIyLVxcdGRlZl9ib29sIDY0QklUXFxubW0vS2NvbmZpZy03MjMtXFxubW0vS2NvbmZpZzo3MjQ6Y29uZmlnIE1NVV9OT1RJRklFUlxcbm1tL0tjb25maWctNzI1LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWctNzI3LVxcbm1tL0tjb25maWc6NzI4OmNvbmZpZyBLU01cXG5tbS9LY29uZmlnLTcyOS1cXHRib29sIFxcXCJFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTc0Mi1cXG5tbS9LY29uZmlnOjc0Mzpjb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXFxubW0vS2NvbmZpZy03NDQtXFx0aW50IFxcXCJMb3cgYWRkcmVzcyBzcGFjZSB0byBwcm90ZWN0IGZyb20gdXNlciBhbGxvY2F0aW9uXFxcIlxcbi0tXFxubW0vS2NvbmZpZy03NjEtXFxubW0vS2NvbmZpZzo3NjI6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc2My1cXHRib29sXFxubW0vS2NvbmZpZy03NjQtXFxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NjYtXFx0ZGVwZW5kcyBvbiBNTVVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc3OC1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTc4MS1cXG5tbS9LY29uZmlnOjc4Mjpjb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xcbm1tL0tjb25maWctNzgzLVxcdGludCBcXFwiVHVybiBvbiBtbWFwKCkgZXhjZXNzIHNwYWNlIHRyaW1taW5nIGJlZm9yZSBib290aW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04MDktXFxubW0vS2NvbmZpZzo4MTA6Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcXG5tbS9LY29uZmlnLTgxMS1cXHRib29sXFxubW0vS2NvbmZpZy04MTItXFxubW0vS2NvbmZpZzo4MTM6Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcXG5tbS9LY29uZmlnLTgxNC1cXHRkZWZfYm9vbCBuXFxubW0vS2NvbmZpZy04MTUtXFxubW0vS2NvbmZpZzo4MTY6Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXFxubW0vS2NvbmZpZy04MTctXFx0Ym9vbCBcXFwiQWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgzMS1cXG5tbS9LY29uZmlnOjgzMjpjb25maWcgTU1fSURcXG5tbS9LY29uZmlnLTgzMy1cXHRkZWZfYm9vbCBuXFxubW0vS2NvbmZpZy04MzQtXFxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM2LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU4LVxcbm1tL0tjb25maWc6ODU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2MC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2NS1cXG5tbS9LY29uZmlnOjg2NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY3LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3NC1cXG5tbS9LY29uZmlnOjg3NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3Ni1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODgyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTEtXFxubW0vS2NvbmZpZzo4OTI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5My1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTAxLVxcbm1tL0tjb25maWc6OTAyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAzLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA5LVxcbm1tL0tjb25maWc6OTEwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTEtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNy1cXG5tbS9LY29uZmlnOjkxODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxOS1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyNz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM2LVxcbm1tL0tjb25maWc6OTM3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzgtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0NS1cXG5tbS9LY29uZmlnOjk0NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1My1cXG5tbS9LY29uZmlnOjk1NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU1LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjEtXFxubW0vS2NvbmZpZzo5NjI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjMtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Njk9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy05NzAtXFxubW0vS2NvbmZpZzo5NzE6Y29uZmlnIFRIUF9TV0FQXFxubW0vS2NvbmZpZy05NzItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy05ODAtXFxubW0vS2NvbmZpZzo5ODE6Y29uZmlnIE5PX1BBR0VfTUFQQ09VTlRcXG5tbS9LY29uZmlnLTk4Mi1cXHRib29sIFxcXCJObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTg2LVxcbm1tL0tjb25maWc6OTg3OlxcdCAgV2hlbiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCwgc29tZSBpbnRlcmZhY2VzIHRoYXQgcmVsaWVkIG9uXFxubW0vS2NvbmZpZy05ODgtXFx0ICB0aGlzIGluZm9ybWF0aW9uIHdpbGwgcmVseSBvbiBsZXNzLXByZWNpc2UgcGVyLWFsbG9jYXRpb24gaW5mb3JtYXRpb25cXG4tLVxcbm1tL0tjb25maWc9OTk0PWVuZGlmICMgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4tLVxcbm1tL0tjb25maWctOTk2LSMgc2ltcGxlIGhlbHBlciB0byBtYWtlIHRoZSBjb2RlIGEgYml0IGVhc2llciB0byByZWFkXFxubW0vS2NvbmZpZzo5OTc6Y29uZmlnIFBBR0VfTUFQQ09VTlRcXG5tbS9LY29uZmlnLTk5OC1cXHRkZWZfYm9vbCAhTk9fUEFHRV9NQVBDT1VOVFxcbi0tXFxubW0vS2NvbmZpZy0xMDAyLSNcXG5tbS9LY29uZmlnOjEwMDM6Y29uZmlnIFBHVEFCTEVfSEFTX0hVR0VfTEVBVkVTXFxubW0vS2NvbmZpZy0xMDA0LVxcdGRlZl9ib29sIFRSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZy0xMDA4LSNcXG5tbS9LY29uZmlnOjEwMDk6Y29uZmlnIEhBVkVfR0lHQU5USUNfRk9MSU9TXFxubW0vS2NvbmZpZy0xMDEwLVxcdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcXFxcbi0tXFxubW0vS2NvbmZpZy0xMDEyLVxcbm1tL0tjb25maWc6MTAxMzpjb25maWcgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVxcbm1tL0tjb25maWctMTAxNC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5tbS9LY29uZmlnLTEwMTYtIyBUT0RPOiBBbGxvdyB0byBiZSBlbmFibGVkIHdpdGhvdXQgVEhQXFxubW0vS2NvbmZpZzoxMDE3OmNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDE4LVxcdGRlZl9ib29sIG5cXG4tLVxcbm1tL0tjb25maWctMTAyMC1cXG5tbS9LY29uZmlnOjEwMjE6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxcbm1tL0tjb25maWctMTAyMi1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTEwMjQtXFxubW0vS2NvbmZpZzoxMDI1OmNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMjYtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy0xMDMyLSNcXG5tbS9LY29uZmlnOjEwMzM6Y29uZmlnIEFSQ0hfTU9EVUxFX05FRURTX1dFQUtfUEVSX0NQVVxcbm1tL0tjb25maWctMTAzNC0gICAgICAgYm9vbFxcbi0tXFxubW0vS2NvbmZpZy0xMDM4LSNcXG5tbS9LY29uZmlnOjEwMzk6Y29uZmlnIE5FRURfUEVSX0NQVV9LTVxcbm1tL0tjb25maWctMTA0MC1cXHRkZXBlbmRzIG9uICFTTVAgfHwgIU1NVVxcbi0tXFxubW0vS2NvbmZpZy0xMDQzLVxcbm1tL0tjb25maWc6MTA0NDpjb25maWcgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXFxubW0vS2NvbmZpZy0xMDQ1LVxcdGJvb2xcXG5tbS9LY29uZmlnLTEwNDYtXFxubW0vS2NvbmZpZzoxMDQ3OmNvbmZpZyBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbm1tL0tjb25maWctMTA0OC1cXHRib29sXFxubW0vS2NvbmZpZy0xMDQ5LVxcbm1tL0tjb25maWc6MTA1MDpjb25maWcgVVNFX1BFUkNQVV9OVU1BX05PREVfSURcXG5tbS9LY29uZmlnLTEwNTEtXFx0Ym9vbFxcbm1tL0tjb25maWctMTA1Mi1cXG5tbS9LY29uZmlnOjEwNTM6Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxubW0vS2NvbmZpZy0xMDU0LVxcdGJvb2xcXG5tbS9LY29uZmlnLTEwNTUtXFxubW0vS2NvbmZpZzoxMDU2OmNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNTctXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDcwLVxcbm1tL0tjb25maWc6MTA3MTpjb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwNzItXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDc2LVxcbm1tL0tjb25maWc6MTA3Nzpjb25maWcgQ01BX1NZU0ZTXFxubW0vS2NvbmZpZy0xMDc4LVxcdGJvb2wgXFxcIkNNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4My1cXG5tbS9LY29uZmlnOjEwODQ6Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA4NS1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA5Ni0jXFxubW0vS2NvbmZpZzoxMDk3OiMgU2VsZWN0IHRoaXMgY29uZmlnIG9wdGlvbiBmcm9tIHRoZSBhcmNoaXRlY3R1cmUgS2NvbmZpZywgaWYgYXZhaWxhYmxlLCB0byBzZXRcXG5tbS9LY29uZmlnLTEwOTgtIyB0aGUgbWF4IHBhZ2Ugb3JkZXIgZm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBhbGxvY2F0aW9ucy5cXG5tbS9LY29uZmlnLTEwOTktI1xcbm1tL0tjb25maWc6MTEwMDpjb25maWcgQVJDSF9GT1JDRV9NQVhfT1JERVJcXG5tbS9LY29uZmlnLTExMDEtXFx0aW50XFxuLS1cXG5tbS9LY29uZmlnLTExMDctI1xcbm1tL0tjb25maWc6MTEwODpjb25maWcgUEFHRV9CTE9DS19NQVhfT1JERVJcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MDIuNTkxMzUyNzIzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MDg1MDY1MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEhQIENvbGxhcHNlIFBhdGNoKipcblxuT2theSwgdGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBrZXkgY29uZmlnIGhlcmUsIHRoZSBlbmFibGVyIGZvciBraHVnZXBhZ2VkLCBhbmQgdGhhdCB1bmRlciBpdCwgdGhlIHN5c3RlbSBkZWZhdWx0cyBmb3IgVEhQIGFyZSBpbXBsaWNpdGx5IGluY2x1ZGVkLlxuXG5MZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZvY3VzIHN5bWJvbHMuLi4gcmlnaHQsIGl0J3MgYGNvbGxhcHNlX2ZpbGVgLCBgY29sbGFwc2Vfc2Nhbl9maWxlYCwgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBHb3QgaXQuXG5cbk5vdywgbGV0J3MgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJIG5lZWQgdG8gZXhwbGFpbiB0aGUgcmVhc29uaW5nIGNsZWFybHkuIFRoZSBwYXRjaCBpcyBhbHRlcmluZyB0aGUgbG9ja2luZyBiZWhhdmlvciB3aXRoaW4gYGNvbGxhcHNlX2ZpbGUoKWAuIFNwZWNpZmljYWxseSwgaXQncyBub3cgdGFraW5nIHRoZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKClgIGFjcm9zcyB0aGUgZW50aXJlIFRIUCBjb2xsYXBzZSBvcGVyYXRpb24sIGluY2x1ZGluZyB0aGUgY2FsbCB0byBgYWxsb2NfY2hhcmdlX2ZvbGlvKClgLiBBZGRpdGlvbmFsbHksIGl0IHJlcGxhY2VzIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgIHdpdGggYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgLiBUaGlzIGltcGFjdHMgY29yZSBNTSBjb25jdXJyZW5jeSwgbG9ja2luZyBvcmRlcnMg4oCTIGludmFsaWRhdGUgbG9jayB2ZXJzdXMgZm9saW8gbG9ja3MgdmVyc3VzIHJlY2xhaW0gYW5kIHRydW5jYXRlIGludGVyYWN0aW9ucyDigJMgYW5kIHJlYWRhaGVhZCBsaW1pdHMuIFJlbWVtYmVyLCB0aGlzIGxvZ2ljIGlzIHRyaWdnZXJlZCBieSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgYW5kIGtodWdlcGFnZWQgc2Nhbm5pbmcuXG5cblRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBzaW1wbGUgZW5vdWdoLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUganVzdCBgW1wiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIl1gLiBBbmQsIGFzIHdlJ3ZlIHJldmlld2VkLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJjb2xsYXBzZV9maWxlXCIsIFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsIFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLCBcIm1hZHZpc2VfY29sbGFwc2VcIl1gLlxuXG5Ib2xkIG9uLCBsZXQgbWUgZG91YmxlLWNoZWNrLiBBbSBJIG1pc3NpbmcgYW55dGhpbmcsIG9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgZnVuY3Rpb24gaW4gdGhpcyBzcGFjZSB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZD8gQWgsIHJpZ2h0LCBgYWxsb2NfY2hhcmdlX2ZvbGlvYC4uLiBCdXQgdGhhdCdzIG9ubHkgY2FsbGVkIGJ5IGtodWdlcGFnZWQsIGFuZCAqc3BlY2lmaWNhbGx5KiBieSBgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluYCwgYGNvbGxhcHNlX2h1Z2VfcGFnZWAgYW5kIGBjb2xsYXBzZV9maWxlYC4gSG93ZXZlciwgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgY29sbGFwc2VfZmlsZWAsIGFuZCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmcm9tIHVzZXJzcGFjZSBpcyBgbWFkdmlzZV9jb2xsYXBzZWAuIFNvLCB0aGUgaW5pdGlhbCBmb2N1cyBpcyBjb3JyZWN0LiBUaG9zZSBmb3VyIGFyZSB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGVtcGhhc2l6ZS5cblxuT2theSwgYWxsIHNldC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzUzLCJPdXRwdXRUb2tlbnMiOjE3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNzoxNi42NzY0MjA2NjRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY2NDQ5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29sbGFwc2VfZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zaW5nbGVfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbGxhcHNlX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NjYW5fZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xsYXBzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gY29sbGFwc2VfZmlsZSgpIGJ5IGFjcXVpcmluZyBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKSBhY3Jvc3MgZm9saW8gYWxsb2NhdGlvbiBhbmQgdGhlIHBhZ2Ugc2Nhbm5pbmcgbG9vcCwgYW5kIHN3aXRjaGluZyB0aGUgcmVhZGFoZWFkIG1lY2hhbmlzbSB0byBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLiBUaGlzIGNoYW5nZXMgc3luY2hyb25pemF0aW9uIGludmFyaWFudHMsIGxvY2sgb3JkZXJpbmcgKGludmFsaWRhdGVfbG9jayB2cyBmb2xpbyBsb2NrLCB0cnVuY2F0ZSwgYW5kIG1lbW9yeSByZWNsYWltIGR1cmluZyBhbGxvY2F0aW9uKSwgYW5kIHJlYWRhaGVhZCBib3VuZGluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciB0aGUga2h1Z2VwYWdlZCBkYWVtb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM3OjE2Ljc5MzA3NDYyM1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMTcyMjE3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNzoxNi43OTM1MTE4NjNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MjAxNjc3Njg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0va2h1Z2VwYWdlZC5jIHRvIGFkanVzdCBsb2NraW5nIG9yZGVyIGluIGNvbGxhcHNlX2ZpbGUoKSBieSBhY3F1aXJpbmcgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKCkgcHJpb3IgdG8gdGFraW5nIGZvbGlvIGxvY2tzLCBhbmQgaW52b2tlcyBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpIGluc3RlYWQgb2YgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBhbmQgcGFnZSBjYWNoZSByZWFkYWhlYWQgYm91bmRzLiBUaGUgcmVhZGFoZWFkX2NvbnRyb2wgc3RydWN0dXJlIChyYWN0bCkgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgREVGSU5FX1JFQURBSEVBRCAoQzk5IGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGVuc3VyaW5nIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBtb2RpZmllZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGRlYnVnIGtlcm5lbHMgKEtBU0FOIGJ1aWxkcyksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViOWQyMTE2NWE3MWZlM2FlN2I2MzBiMWExNmY1ZmNkM2QxNGJlYTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozNTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xuaW5kZXggMTFmZjk4ZDU1Yzc2ZS4uNjkwY2NiY2RmNTkzOCAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuKysrIGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjI2Nyw2ICsyMjY3LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFZNX1dBUk5fT05fT05DRSghaXNfc2htZW0gXHUwMDI2XHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcbiBcdFZNX1dBUk5fT05fT05DRShzdGFydCBcdTAwMjYgKEhQQUdFX1BNRF9OUiAtIDEpKTtcbiBcbitcdC8qXG4rXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcbitcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbitcdCAqL1xuK1x0aWYgKCFpc19zaG1lbSlcbitcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xuK1xuIFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFx1MDAyNm5ld19mb2xpbywgbW0sIGNjLCBIUEFHRV9QTURfT1JERVIpO1xuIFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTIzMzcsMTAgKzIzNDQsMjAgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuIFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4rXHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4rXHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4rXHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4rXG4gXHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuLVx0XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4tXHRcdFx0XHRcdFx0XHQgIGZpbGUsIGluZGV4LFxuLVx0XHRcdFx0XHRcdFx0ICBlbmQgLSBpbmRleCk7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cbitcdFx0XHRcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXG4rXHRcdFx0XHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAoaW5kZXggXHUwMDNjIGVvZilcbitcdFx0XHRcdFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXHUwMDI2cmFjdGwsXG4rXHRcdFx0XHRcdFx0bWluKGVuZCwgZW9mKSAtIGluZGV4LCAwKTtcbiBcdFx0XHRcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cbiBcdFx0XHRcdGxydV9hZGRfZHJhaW4oKTtcbiBcdFx0XHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKG1hcHBpbmcsIGluZGV4KTtcbkBAIC0yNjcyLDYgKzI2ODksOCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcbiBcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xuIG91dDpcbitcdGlmICghaXNfc2htZW0pXG4rXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG4gXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XG4gXHRyZXR1cm4gcmVzdWx0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MTYuNzkzNTEyNzgzWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwOTIxNDA0MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUga2h1Z2VwYWdlZCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYG1tL2todWdlcGFnZWQuY2AgYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgZGVhbHMgd2l0aCB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQncyB3aGVyZSBhIGxvdCBvZiBjb21wbGV4IG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgdGVuZCB0byBvY2N1ci4gIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIG9yZGVyaW5nIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy5cblxuTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgZmlsZSBtYXBwaW5nIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiBhbmQgaGFuZGxpbmcgb2YgdGhlIGBpbnZhbGlkYXRlX2xvY2tgLiAgVGhlIGludHJvZHVjdGlvbiBvZiBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCBhbmQgYGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkYCBhbG9uZyB3aXRoIHRoZSBgREVGSU5FX1JFQURBSEVBRGAgbWFjcm8gY2F0Y2hlcyBteSBleWUgaW1tZWRpYXRlbHkuIFRoaXMgc3VnZ2VzdHMgdGhleSBhcmUgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIHJlYWRhaGVhZCBsb2dpYywgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBidXQgYXMgd2UgYWxsIGtub3cgdGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBjYW4gb2Z0ZW4gaW50cm9kdWNlIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgaXNzdWVzLlxuXG5UaGUgY29tbWVudCBhYm91dCB0YWtpbmcgYGludmFsaWRhdGVfbG9ja2AgYmVmb3JlIGFueSBmb2xpbyBsb2NrIGlzIGNydWNpYWwuICBUaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgbG9ja2luZyBvcmRlciwgcG90ZW50aWFsbHkgdG8gcHJldmVudCBkZWFkbG9ja3Mgb3IgaW1wcm92ZSBjb25jdXJyZW5jeS4gVGhlIG9sZCBsb2NraW5nIG9yZGVyIGlzIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLiBXYXMgdGhlcmUgYSBrbm93biBpc3N1ZSB0aGF0IGxlZCB0byB0aGlzIHJlb3JkZXJpbmc/XG5cblRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIHNlZW1zIGltcG9ydGFudCBhcyBhIHJlcGxhY2VtZW50IGZvciBhIHByZXZpb3VzIHJlYWRhaGVhZCBjYWxsLiBUaGUgbm90ZSBhYm91dCBFT0YgbWFrZXMgbWUgdGhpbmsgdGhlIG9sZCBiZWhhdmlvciBjb3VsZCBoYXZlIGNhdXNlZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgY29tbWVudCBhYm91dCBpbnZhbGlkYXRlX2xvY2sgYmVpbmcgaGVsZCBhYm92ZSBpcyBhbHNvIGltcG9ydGFudC5cblxuT3ZlcmFsbCwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZmFpcmx5IHRhcmdldGVkIGNoYW5nZSwgYW5kIG5vdCBhIG1hc3NpdmUgcmVmYWN0b3IuIEJ1dCwgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgYSBzZWVtaW5nbHkgc21hbGwgY2hhbmdlIGNhbiBoYXZlIGZhci1yZWFjaGluZyBjb25zZXF1ZW5jZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBuZXcgcmVhZGFoZWFkIG1lY2hhbmlzbSBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIG1lbW9yeSBzYWZldHkgaXNzdWVzLiAgSSdsbCB3YW50IHRvIGluc3BlY3QgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGhvdyBgaW52YWxpZGF0ZV9sb2NrYCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gbG9ja2luZyBhbmQgdGhlIHJlYWRhaGVhZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBLTVNBTiB0byByZXZlYWwgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJIHNob3VsZCB1c2UgZ3JlcHBlciBvciByZWFkLWZpbGUgb24gYG1tL2todWdlcGFnZWQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgY29kZS4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGBpZiAoIWlzX3NobWVtKWAgYmxvY2ssIHRvIHNlZSBob3cgdGhlIG5ldyBsb2NraW5nIGFuZCByZWFkYWhlYWQgZnVuY3Rpb25zIGFyZSB1c2VkLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgSSBnZXQgZnJvbSB0aGVzZSBjaGVja3MsIEknbGwgYmUgYWJsZSB0byB0ZWxsIGlmIEtNU0FOIHNob3VsZCBiZSBhcHBsaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MjcuNzE0OTIyNDQxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MzAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI2MDpcXHRcXG4yMjYxOlxcdFxcdC8qXFxuMjI2MjpcXHRcXHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxcbjIyNjM6XFx0XFx0ICpcXG4yMjY0OlxcdFxcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xcbjIyNjU6XFx0XFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxcbjIyNjY6XFx0XFx0ICovXFxuMjI2NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcXG4yMjY4OlxcdFxcdFZNX1dBUk5fT05fT05DRShzdGFydCBcXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XFxuMjI2OTpcXHRcXG4yMjcwOlxcdFxcdC8qXFxuMjI3MTpcXHRcXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcXG4yMjcyOlxcdFxcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cXG4yMjczOlxcdFxcdCAqL1xcbjIyNzQ6XFx0XFx0aWYgKCFpc19zaG1lbSlcXG4yMjc1OlxcdFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4yMjc2OlxcdFxcbjIyNzc6XFx0XFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFxcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcXG4yMjc4OlxcdFxcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxcbjIyNzk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI4MDpcXHRcXG4yMjgxOlxcdFxcdG1hcHBpbmdfc2V0X3VwZGF0ZShcXHUwMDI2eGFzLCBtYXBwaW5nKTtcXG4yMjgyOlxcdFxcbjIyODM6XFx0XFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XFxuMjI4NDpcXHRcXHRpZiAoaXNfc2htZW0pXFxuMjI4NTpcXHRcXHRcXHRfX2ZvbGlvX3NldF9zd2FwYmFja2VkKG5ld19mb2xpbyk7XFxuMjI4NjpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZWluZGV4ID0gc3RhcnQ7XFxuMjI4NzpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xcbjIyODg6XFx0XFxuMjI4OTpcXHRcXHQvKlxcbjIyOTA6XFx0XFx0ICogRW5zdXJlIHdlIGhhdmUgc2xvdHMgZm9yIGFsbCB0aGUgcGFnZXMgaW4gdGhlIHJhbmdlLiAgVGhpcyBpc1xcbjIyOTE6XFx0XFx0ICogYWxtb3N0IGNlcnRhaW5seSBhIG5vLW9wIGJlY2F1c2UgbW9zdCBvZiB0aGUgcGFnZXMgbXVzdCBiZSBwcmVzZW50XFxuMjI5MjpcXHRcXHQgKi9cXG4yMjkzOlxcdFxcdGRvIHtcXG4yMjk0OlxcdFxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMjk1OlxcdFxcdFxcdHhhc19jcmVhdGVfcmFuZ2UoXFx1MDAyNnhhcyk7XFxuMjI5NjpcXHRcXHRcXHRpZiAoIXhhc19lcnJvcihcXHUwMDI2eGFzKSlcXG4yMjk3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIyOTg6XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjI5OTpcXHRcXHRcXHRpZiAoIXhhc19ub21lbShcXHUwMDI2eGFzLCBHRlBfS0VSTkVMKSkge1xcbjIzMDA6XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjIzMDE6XFx0XFx0XFx0XFx0Z290byByb2xsYmFjaztcXG4yMzAyOlxcdFxcdFxcdH1cXG4yMzAzOlxcdFxcdH0gd2hpbGUgKDEpO1xcbjIzMDQ6XFx0XFxuMjMwNTpcXHRcXHRmb3IgKGluZGV4ID0gc3RhcnQ7IGluZGV4IFxcdTAwM2MgZW5kOykge1xcbjIzMDY6XFx0XFx0XFx0eGFzX3NldChcXHUwMDI2eGFzLCBpbmRleCk7XFxuMjMwNzpcXHRcXHRcXHRmb2xpbyA9IHhhc19sb2FkKFxcdTAwMjZ4YXMpO1xcbjIzMDg6XFx0XFxuMjMwOTpcXHRcXHRcXHRWTV9CVUdfT04oaW5kZXggIT0geGFzLnhhX2luZGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MjcuNzE1MzA4MjcyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3NTY4ODkxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGtodWdlcGFnZWQuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGh1Z2VwYWdlcywgYW5kIHRoZSBkaXNjdXNzaW9uIGhhcyBkcmlmdGVkIHRvd2FyZHMgcG90ZW50aWFsIGlzc3Vlcywgb3IgcGVyaGFwcyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgdGhpbmsgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IHRoaXMgZGVlcCBkaXZlIGlzIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgbWlnaHQgYmUgZ29pbmcgb24sIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDIzMzAtMjM4MC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgc29tZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLCBhbmQgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IG1pc21hbmFnaW5nLCBodWdlcGFnZXMgaW4gYSBzcGVjaWZpYyBzY2VuYXJpby4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0IHRob3NlIGxpbmVzIGFyZSBhY3R1YWxseSAqZG9pbmcqIHRvIGdldCBhIHByb3BlciBoYW5kbGUgb24gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MjkuNDcyMjAxNDQ2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMzMDpcXHRcXHRcXHRcXHRcXHQvKiBzd2FwIGluIG9yIGluc3RhbnRpYXRlIGZhbGxvY2F0ZWQgcGFnZSAqL1xcbjIzMzE6XFx0XFx0XFx0XFx0XFx0aWYgKHNobWVtX2dldF9mb2xpbyhtYXBwaW5nLVxcdTAwM2Vob3N0LCBpbmRleCwgMCxcXG4yMzMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmb2xpbywgU0dQX05PQUxMT0MpKSB7XFxuMjMzMzpcXHRcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxuMjMzNDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHhhX3VubG9ja2VkO1xcbjIzMzU6XFx0XFx0XFx0XFx0XFx0fVxcbjIzMzY6XFx0XFx0XFx0XFx0XFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xcbjIzMzc6XFx0XFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbjIzMzg6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbjIzMzk6XFx0XFx0XFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4yMzQwOlxcdFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIzNDE6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4yMzQyOlxcdFxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xcbjIzNDM6XFx0XFx0XFx0XFx0XFx0Z290byB4YV9sb2NrZWQ7XFxuMjM0NDpcXHRcXHRcXHRcXHR9XFxuMjM0NTpcXHRcXHRcXHR9IGVsc2Uge1xcdC8qICFpc19zaG1lbSAqL1xcbjIzNDY6XFx0XFx0XFx0XFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHtcXG4yMzQ3OlxcdFxcdFxcdFxcdFxcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFxcdTAwMjZmaWxlLVxcdTAwM2VmX3JhLFxcbjIzNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBtYXBwaW5nLCBpbmRleCk7XFxuMjM0OTpcXHRcXHRcXHRcXHRcXHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVxcdTAwM2Vob3N0KSxcXG4yMzUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBQQUdFX1NJWkUpO1xcbjIzNTE6XFx0XFxuMjM1MjpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzUzOlxcdFxcdFxcdFxcdFxcdC8qXFxuMjM1NDpcXHRcXHRcXHRcXHRcXHQgKiBpbnZhbGlkYXRlX2xvY2sgaGVsZCBhYm92ZTsgZG9uJ3QgcmV0YWtlIGl0LlxcbjIzNTU6XFx0XFx0XFx0XFx0XFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcXG4yMzU2OlxcdFxcdFxcdFxcdFxcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXFxuMjM1NzpcXHRcXHRcXHRcXHRcXHQgKi9cXG4yMzU4OlxcdFxcdFxcdFxcdFxcdGlmIChpbmRleCBcXHUwMDNjIGVvZilcXG4yMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFxcdTAwMjZyYWN0bCxcXG4yMzYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XFxuMjM2MTpcXHRcXHRcXHRcXHRcXHQvKiBkcmFpbiBscnUgY2FjaGUgdG8gaGVscCBmb2xpb19pc29sYXRlX2xydSgpICovXFxuMjM2MjpcXHRcXHRcXHRcXHRcXHRscnVfYWRkX2RyYWluKCk7XFxuMjM2MzpcXHRcXHRcXHRcXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7XFxuMjM2NDpcXHRcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbjIzNjU6XFx0XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjIzNjY6XFx0XFx0XFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG4yMzY3OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzY4OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcXG4yMzY5OlxcdFxcdFxcdFxcdFxcdC8qXFxuMjM3MDpcXHRcXHRcXHRcXHRcXHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJ3RcXG4yMzcxOlxcdFxcdFxcdFxcdFxcdCAqIGJlZW4gZmx1c2hlZCBzaW5jZSBmaXJzdCB3cml0ZS5cXG4yMzcyOlxcdFxcdFxcdFxcdFxcdCAqXFxuMjM3MzpcXHRcXHRcXHRcXHRcXHQgKiBUcmlnZ2VyIGFzeW5jIGZsdXNoIGZvciByZWFkLW9ubHkgZmlsZXMgYW5kXFxuMjM3NDpcXHRcXHRcXHRcXHRcXHQgKiBob3BlIHRoZSB3cml0ZWJhY2sgaXMgZG9uZSB3aGVuIGtodWdlcGFnZWRcXG4yMzc1OlxcdFxcdFxcdFxcdFxcdCAqIHJldmlzaXRzIHRoaXMgcGFnZS4gV3JpdGFibGUgZmlsZXMgY2FuIGhhdmVcXG4yMzc2OlxcdFxcdFxcdFxcdFxcdCAqIHRoZWlyIGZvbGlvcyBkaXJ0eSBhdCBhbnkgdGltZTsgYmxpbmRseVxcbjIzNzc6XFx0XFx0XFx0XFx0XFx0ICogZmx1c2hpbmcgdGhlbSB3b3VsZCBjYXVzZSB1bmRlc2lyYWJsZVxcbjIzNzg6XFx0XFx0XFx0XFx0XFx0ICogc3lzdGVtLXdpZGUgd3JpdGViYWNrLlxcbjIzNzk6XFx0XFx0XFx0XFx0XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MjkuNDcyNTEwMTc2WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MDg5MjA4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIGBjb2xsYXBzZV9maWxlYCBhcm91bmQgdGhlIGBvdXQ6YCBJbmRpY2F0b3IqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIG9iamVjdGl2ZSBoZXJlIGlzIGNsZWFybHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYmVoYXZlcyBuZWFyIHRoZSBgb3V0OmAgbWFya2VyIHdpdGhpbiB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgaG9saXN0aWMgdmlldywgbm90IGp1c3QgaXNvbGF0ZSB0aGUgc25pcHBldC4gSSdtIHRoaW5raW5nLCBcIndoYXQncyB0aGUgY29udGV4dD9cIiBXaGF0J3MgaGFwcGVuaW5nICpiZWZvcmUqIHRoYXQgYG91dDpgIGxhYmVsLCBhbmQgd2hhdCBmb2xsb3dzPyBVbmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoYXQgcG9pbnQgaXMgY3JpdGljYWwuIElzIGl0IGEgY29uZGl0aW9uYWw/IEEgbG9vcD8gV2hhdCBhcmUgdGhlIHZhcmlhYmxlcyBpbiBzY29wZSBhdCB0aGF0IGxvY2F0aW9uPyBBcmUgdGhlcmUgc2lkZSBlZmZlY3RzIGJlaW5nIG1hbmFnZWQ/XG5cbkknbSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGl0LCB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBJcyB0aGlzIGEgZmlsZSBoYW5kbGUsIGEgc3RyaW5nLCBhIGxpc3QsIGEgZGljdGlvbmFyeT8gSXMgaXQgZ2VuZXJhdGluZyBzb21lIHNvcnQgb2Ygb3V0cHV0IGZpbGU/IFdoYXQncyB0aGUgb3ZlcmFyY2hpbmcgcHVycG9zZSBvZiBgY29sbGFwc2VfZmlsZWA/IEFtIEkgbG9va2luZyBhdCBmaWxlIEkvTyBvcGVyYXRpb25zLCBkYXRhIHRyYW5zZm9ybWF0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbk15IG1pbmQgaXMgYWxzbyBjaGVja2luZyBmb3IgdGhlIGVkZ2UgY2FzZXMuIEVycm9yIGhhbmRsaW5nPyBEYXRhIHZhbGlkYXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgbHVya2luZyBuZWFyIHRoYXQgYG91dDpgIGluZGljYXRvciB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBidWdzPyBJdCdzIGVzc2VudGlhbCB0byB0cmFjZSB0aGUgcG9zc2libGUgcGF0aHMgb2YgZXhlY3V0aW9uIHRocm91Z2ggdGhhdCBhcmVhIG9mIHRoZSBjb2RlLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBleGVjdXRpb24gcHJvZmlsZSBjZW50ZXJlZCBhcm91bmQgdGhlIGBvdXQ6YCBsYWJlbCB0byBidWlsZCBhbiBhY2N1cmF0ZSBtZW50YWwgbW9kZWwgZm9yIHRoZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MzIuMjgxNDMzMjA1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY3MDpcXHRcXG4yNjcxOlxcdHJvbGxiYWNrOlxcbjI2NzI6XFx0XFx0LyogU29tZXRoaW5nIHdlbnQgd3Jvbmc6IHJvbGwgYmFjayBwYWdlIGNhY2hlIGNoYW5nZXMgKi9cXG4yNjczOlxcdFxcdGlmIChucl9ub25lKSB7XFxuMjY3NDpcXHRcXHRcXHR4YXNfbG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjY3NTpcXHRcXHRcXHRtYXBwaW5nLVxcdTAwM2VucnBhZ2VzIC09IG5yX25vbmU7XFxuMjY3NjpcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yNjc3OlxcdFxcdFxcdHNobWVtX3VuY2hhcmdlKG1hcHBpbmctXFx1MDAzZWhvc3QsIG5yX25vbmUpO1xcbjI2Nzg6XFx0XFx0fVxcbjI2Nzk6XFx0XFxuMjY4MDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXFx1MDAyNnBhZ2VsaXN0LCBscnUpIHtcXG4yNjgxOlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4yNjgyOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMjY4MzpcXHRcXHRcXHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XFxuMjY4NDpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjI2ODU6XFx0XFx0fVxcbjI2ODY6XFx0XFxuMjY4NzpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBOVUxMO1xcbjI2ODg6XFx0XFxuMjY4OTpcXHRcXHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcXG4yNjkwOlxcdFxcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xcbjI2OTE6XFx0b3V0OlxcbjI2OTI6XFx0XFx0aWYgKCFpc19zaG1lbSlcXG4yNjkzOlxcdFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbjI2OTQ6XFx0XFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbjI2OTU6XFx0XFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xcbjI2OTY6XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4yNjk3OlxcdH1cXG4yNjk4OlxcdFxcbjI2OTk6XFx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbjI3MDA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCxcXG4yNzAxOlxcdFxcdFxcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4yNzAyOlxcdHtcXG4yNzAzOlxcdFxcdGNvbnN0IHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lID0gY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShjYywgTlVMTCwgSFBBR0VfUE1EX09SREVSKTtcXG4yNzA0OlxcdFxcdGNvbnN0IHVuc2lnbmVkIGludCBtYXhfcHRlc19zd2FwID0gY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChjYywgSFBBR0VfUE1EX09SREVSKTtcXG4yNzA1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xcbjI3MDY6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuMjcwNzpcXHRcXHRYQV9TVEFURSh4YXMsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBzdGFydCk7XFxuMjcwODpcXHRcXHRpbnQgcHJlc2VudCwgc3dhcDtcXG4yNzA5OlxcdFxcdGludCBub2RlID0gTlVNQV9OT19OT0RFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNzozMi4yODE1NzI2MzRaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTUzODQzNDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtodWdlcGFnZWQuYyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIG1vZGlmeWluZyBgY29sbGFwc2VfZmlsZWAgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaGFuZ2UuIEl0J3MgdG91Y2hpbmcgdGhlIGZpbGUgbWFwcGluZyBpbnZhbGlkYXRpb24gbG9jayBhbmQgdGhlIHJlYWQtYWhlYWQgbWVjaGFuaXNtLlxuXG5UaGUga2V5IGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKWAgbG9jay4gIEJlZm9yZSwgdGhpcyBsb2NrIHdhcyB0YWtlbiB3aXRoaW4gYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgLCBidXQgb25seSAqYWZ0ZXIqIGFjcXVpcmluZyBmb2xpbyBsb2NrcyAoZm9yIGAhaXNfc2htZW1gKS4gVGhlIHBhdGNoIG5vdyB0YWtlcyB0aGUgc2hhcmVkIGludmFsaWRhdGlvbiBsb2NrICpiZWZvcmUqIGZvbGlvIGxvY2sgYWNxdWlzaXRpb24sIGFuZCBob2xkcyBpdCBmb3IgdGhlIGVudGlyZSBjb2xsYXBzZSBvcGVyYXRpb24uICBUaGlzIGlzIGEgY2xhc3NpYyBkZWFkbG9jayBhdm9pZGFuY2Ugc3RyYXRlZ3kg4oCTIHRoZSBkcmVhZGVkIGxvY2sgaW52ZXJzaW9uLlxuXG5UaGUgb3JpZ2luYWwgY29kZSdzIGFwcHJvYWNoIG9mIGdyYWJiaW5nIHRoZSBmb2xpbyBsb2NrcywgdGhlbiBjYWxsaW5nIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCwgY291bGQgY3JlYXRlIGEgZGVhZGxvY2sgc2NlbmFyaW8uICBgY29sbGFwc2VfZmlsZWAgcG90ZW50aWFsbHkgd291bGQgYmUgd2FpdGluZyBvbiB0aGUgZm9saW8gbG9ja3Mgd2hpbGUgdHJ1bmNhdGUsIGhvbGRpbmcgdGhlIGludmFsaWRhdGUgbG9jaywgd2FpdGVkIG9uIHRoZSBgY29sbGFwc2VfZmlsZWAgdG8gcmVsZWFzZSBmb2xpbyBsb2NrcyB3aGljaCB3b3VsZCB0aGVuIG1ha2UgdGhlIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBmdW5jdGlvbiB0cnkgdG8gdGFrZSB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAuIFRoaXMgc2VxdWVuY2UgaXMgYSByZWNpcGUgZm9yIGxvY2sgaW52ZXJzaW9uIGFuZCwgbW9yZSBjb25jZXJuaW5nLCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2tkZXAgd2FybmluZ3MuXG5cblRoZSBmaXg/ICBTaGlmdCB0aGUgaW52YWxpZGF0aW9uIGxvY2sgYWNxdWlzaXRpb24gdXAtZnJvbnQuIEFuZCB0aGF0IG1ha2VzIHRoZSBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgY2FsbCBwcm9ibGVtYXRpYy4gSXQncyBiZWVuIHJlcGxhY2VkIHdpdGggYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCwgd2hpY2ggZG9lc24ndCBpbnRlcm5hbGx5IHRyeSB0byBncmFiIHRoZSBzaGFyZWQgaW52YWxpZGF0aW9uIGxvY2suIEl0IHNlZW1zIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgKmV4cGVjdHMqIHRoZSBpbnZhbGlkYXRpb24gbG9jayB0byBhbHJlYWR5IGJlIGhlbGQsIG9yIGl0IHNpbXBseSBkb2Vzbid0IGdyYWIgaXQgYXQgYWxsLlxuXG5JIGFsc28gbm90aWNlIHRoZSBhZGRpdGlvbiBvZiBgREVGSU5FX1JFQURBSEVBRGAgYW5kIHRoZSBFT0YgY2hlY2s6IGBpZiAoaW5kZXggXHUwMDNjIGVvZilgLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgY2xhbXAgdGhlIHJlYWQtYWhlYWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gU28sIHRoZXkndmUgYWRkZWQgdGhpcyBleHBsaWNpdCBjbGFtcCB0byBlbnN1cmUgd2UgZG9uJ3QgcmVhZCBwYXN0IHRoZSBmaWxlIHNpemUuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC5cbk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBleHBhbnNpb24gb2YgYERFRklORV9SRUFEQUhFQURgIGluIG1vcmUgZGV0YWlsLiBMZXQncyBzZWUgd2hhdCB0aGF0IG1hY3JvIGlzIGFjdHVhbGx5IGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MzcuODIwMDEwMDEyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU0Mzk4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBERUZJTkVfUkVBREFIRUFEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZW1hcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTE0MDg9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MjAtXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQyMTojZGVmaW5lIERFRklORV9SRUFEQUhFQUQocmFjdGwsIGYsIHIsIG0sIGkpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MjItXFx0c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHJhY3RsID0ge1xcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MzguMzU1NDU3OTY1WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNTY5MTY1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFBhZ2VtYXAgSGVhZGVyKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvciBpbnZlc3RpZ2F0ZSBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgcGFnZSBjYWNoZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTS4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMTQyMC4gSSdtIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMsIG9yIGF0IGxlYXN0IHRoZSByZWxldmFudCBkZWNsYXJhdGlvbnMsIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHBhZ2UgZmxhZ3MsIGxvY2tpbmcgbWVjaGFuaXNtcywgb3IgcG9zc2libHkgdGhlIGxpbmthZ2UgYmV0d2VlbiBwYWdlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBpbm9kZXMuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTk1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6NDAuNjEyMzc4MTgxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDE1OlxcdFxcdHVuc2lnbmVkIGludCBfYmF0Y2hfY291bnQ7XFxuMTQxNjpcXHRcXHRib29sIGRyb3BiZWhpbmQ7XFxuMTQxNzpcXHRcXHRib29sIF93b3JraW5nc2V0O1xcbjE0MTg6XFx0XFx0dW5zaWduZWQgbG9uZyBfcGZsYWdzO1xcbjE0MTk6XFx0fTtcXG4xNDIwOlxcdFxcbjE0MjE6XFx0I2RlZmluZSBERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmLCByLCBtLCBpKVxcdFxcdFxcdFxcdFxcXFxcXG4xNDIyOlxcdFxcdHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCByYWN0bCA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuMTQyMzpcXHRcXHRcXHQuZmlsZSA9IGYsXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjE0MjQ6XFx0XFx0XFx0Lm1hcHBpbmcgPSBtLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xNDI1OlxcdFxcdFxcdC5yYSA9IHIsXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjE0MjY6XFx0XFx0XFx0Ll9pbmRleCA9IGksXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjE0Mjc6XFx0XFx0fVxcbjE0Mjg6XFx0XFxuMTQyOTpcXHQjZGVmaW5lIFZNX1JFQURBSEVBRF9QQUdFU1xcdChTWl8xMjhLIC8gUEFHRV9TSVpFKVxcbjE0MzA6XFx0XFxuMTQzMTpcXHR2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqLFxcbjE0MzI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19yZWFkLCB1bnNpZ25lZCBsb25nIGxvb2thaGVhZF9jb3VudCk7XFxuMTQzMzpcXHR2b2lkIHBhZ2VfY2FjaGVfc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKiwgdW5zaWduZWQgbG9uZyByZXFfY291bnQpO1xcbjE0MzQ6XFx0dm9pZCBwYWdlX2NhY2hlX2FzeW5jX3JhKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqLCBzdHJ1Y3QgZm9saW8gKixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6NDAuNjEyNTM3MTgxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4MTk3NzE5MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IGtodWdlcGFnZWQgUmVhZGFoZWFkIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBERUZJTkVfUkVBREFIRUFEYCBtYWNybyB1c2VzIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCBpcyBzdGFuZGFyZCBDOyBhbnkgdW5zcGVjaWZpZWQgZmllbGRzIHdpbGwgYmUgemVyb2VkIG91dC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBmb3IgYW55IHBvdGVudGlhbCBLTVNBTiBpbXBsaWNhdGlvbnMuXG5cbk5vdywgdGhlIG1haW4gcG9pbnQ6IHRoaXMgcGF0Y2ggaXMgKm5vdCogYSBLTVNBTiBjb25jZXJuLiBUaGUgdXBzdHJlYW0ga2VybmVsIGFscmVhZHkgaGFzIEtBU0FOLCBMT0NLREVQLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLiBLTVNBTiBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZSBwYXRjaCBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgKm9ubHkqIEtNU0FOIGNhbiBkZXRlY3QuIFRoZSBndWlkZWxpbmVzIGFyZSBjcnlzdGFsIGNsZWFyOiBkb24ndCB3YXN0ZSByZXNvdXJjZXMgcnVubmluZyBLTVNBTiBpZiBLQVNBTiBvciBvdGhlciB0b29scyBjYXRjaCB0aGUgaXNzdWVzLlxuXG5J4oCZbSBsb29raW5nIGF0IHRoZXNlIGNyaXRpY2FsIGRpc3RpbmN0aW9uczpcblxuKiAgIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgbG9ja2luZyBkZWFkbG9jayBiZXR3ZWVuIGB0cnVuY2F0ZWAgYW5kIGBraHVnZXBhZ2VkYCByZWFkYWhlYWQuIFRoZSBwcm9ibGVtPyAgYGNvbGxhcHNlX2ZpbGVgIHVzZWQgdG8gYWNxdWlyZSBmb2xpbyBsb2NrcyAqYmVmb3JlKiBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCwgd2hpY2ggYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIHRoZW4gdGFrZXMsIGxlYWRpbmcgdG8gYW4gQUJCQSBkZWFkbG9jay4gVGhpcyBwYXRjaCBzaW1wbHkgcmV2ZXJzZXMgdGhlIGxvY2tpbmcgb3JkZXIgYW5kIHJlcGxhY2VzIHRoZSBjYWxsIHRvIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3aXRoIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAuIFRoYXQncyBhIGNsYXNzaWMgbG9ja2luZyBoaWVyYXJjaHkgYnVnLlxuXG5Ob3csIHRvIHNlZSBpZiBLTVNBTiBpcyBuZWVkZWQsIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgcG90ZW50aWFsIEtNU0FOIHRyaWdnZXJzOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4gYGNvbGxhcHNlX2ZpbGVgIGlzIGludGVybmFsIHRvIHRoZSBraHVnZXBhZ2VkIG1lbW9yeSBtYW5hZ2VtZW50LlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWM/KiogIE5vcGUuIGBpc19zaG1lbWAgaXMgYSBwYXJhbWV0ZXIsIGBuZXdfZm9saW9gIGdldHMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCwgYGVvZmAgaXMgZGVyaXZlZCBmcm9tIGBpX3NpemVfcmVhZCguLi4pYCwgYW5kIHRoZSBgcmFjdGxgIGlzICpwcm9wZXJseSogaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycy5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiAgTm8sIGBzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGxgIGlzIGluaXRpYWxpemVkIGFuZCB3aWxsIG5vdCBoYXZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjQuICAqKkJvdW5kcyBjaGVja3MsIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIERlZmluaXRlbHkgbm90LiBUaGlzIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgZm9yIHJlYWRhaGVhZCBpbiB0aGUgcGFnZSBjYWNoZTsgbm8gYm91bmRzIGNoZWNrcyBhcmUgaW52b2x2ZWQuXG5cblRoaXMgZml4IGZvY3VzZXMgb24gKipsb2NraW5nIG9yZGVyKiouICBMT0NLREVQIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOIGJ1aWxkcyB3aWxsIGVhc2lseSBwaWNrIHVwIGFueSBsb2NraW5nIGlzc3VlcyBoZXJlLlxuXG5BcyBhIHF1aWNrIGNoZWNrLCBJIGRvdWJsZS1jaGVja2VkIHRoZSBgb3V0OmAgbGFiZWwuIGBhbGxvY19jaGFyZ2VfZm9saW9gIHNldHMgYG5ld19mb2xpb2AgdG8gTlVMTCBvbiBmYWlsdXJlIGFuZCB0aGUgdHJhY2UgY2FsbCBpcyBoYW5kbGVkIGNvcnJlY3RseSwgbm8gcHJvYmxlbSB0aGVyZS4gYERFRklORV9SRUFEQUhFQURgIGVuc3VyZXMgYHJhY3RsYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gRXZlcnl0aGluZyBsb29rcyBjb21wbGV0ZWx5IHN0YW5kYXJkIGFuZCBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gSXQncyB0aW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1OSwiT3V0cHV0VG9rZW5zIjoxOTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6NTguODEwMjU5NjE0WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS9raHVnZXBhZ2VkLmMgdG8gYWRqdXN0IGxvY2tpbmcgb3JkZXIgaW4gY29sbGFwc2VfZmlsZSgpIGJ5IGFjcXVpcmluZyBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKSBwcmlvciB0byB0YWtpbmcgZm9saW8gbG9ja3MsIGFuZCBpbnZva2VzIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkgaW5zdGVhZCBvZiBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggZmlsZSB0cnVuY2F0aW9uLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGFuZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCBib3VuZHMuIFRoZSByZWFkYWhlYWRfY29udHJvbCBzdHJ1Y3R1cmUgKHJhY3RsKSBpcyBpbml0aWFsaXplZCB1c2luZyBERUZJTkVfUkVBREFIRUFEIChDOTkgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZW5zdXJpbmcgYWxsIHVubWVudGlvbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIGludHJvZHVjZWQsIG1vZGlmaWVkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgZGVidWcga2VybmVscyAoS0FTQU4gYnVpbGRzKSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0va2h1Z2VwYWdlZC5jIHRvIGFkanVzdCBsb2NraW5nIG9yZGVyIGluIGNvbGxhcHNlX2ZpbGUoKSBieSBhY3F1aXJpbmcgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKCkgcHJpb3IgdG8gdGFraW5nIGZvbGlvIGxvY2tzLCBhbmQgaW52b2tlcyBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpIGluc3RlYWQgb2YgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBhbmQgcGFnZSBjYWNoZSByZWFkYWhlYWQgYm91bmRzLiBUaGUgcmVhZGFoZWFkX2NvbnRyb2wgc3RydWN0dXJlIChyYWN0bCkgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgREVGSU5FX1JFQURBSEVBRCAoQzk5IGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGVuc3VyaW5nIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBtb2RpZmllZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGRlYnVnIGtlcm5lbHMgKEtBU0FOIGJ1aWxkcyksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx64gp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 10:16:37 +0000 UTC FinishedAt: 2026-09-13 10:38:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "22120d40-dffd-489e-8a5c-b1c77b68a852" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "collapse_file", "collapse_scan_file", "collapse_single_pmd", "madvise_collapse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "cee9395acd8043be0644b25c34bfa86623f2b935", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW0va2h1Z2VwYWdlZC5jIHRvIGFkanVzdCBsb2NraW5nIG9yZGVyIGluIGNvbGxhcHNlX2ZpbGUoKSBieSBhY3F1aXJpbmcgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKCkgcHJpb3IgdG8gdGFraW5nIGZvbGlvIGxvY2tzLCBhbmQgaW52b2tlcyBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpIGluc3RlYWQgb2YgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggbG9ja2luZyBzeW5jaHJvbml6YXRpb24gYW5kIHBhZ2UgY2FjaGUgcmVhZGFoZWFkIGJvdW5kcy4gVGhlIHJlYWRhaGVhZF9jb250cm9sIHN0cnVjdHVyZSAocmFjdGwpIGlzIGluaXRpYWxpemVkIHVzaW5nIERFRklORV9SRUFEQUhFQUQgKEM5OSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBlbnN1cmluZyBhbGwgdW5tZW50aW9uZWQgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgbW9kaWZpZWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gTG9ja2luZyBpc3N1ZXMgYW5kIGRlYWRsb2NrcyBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBkZWJ1ZyBrZXJuZWxzIChLQVNBTiBidWlsZHMpLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDViOWQyMTE2NWE3MWZlM2FlN2I2MzBiMWExNmY1ZmNkM2QxNGJlYTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozNTowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDExZmY5OGQ1NWM3NmUuLjY5MGNjYmNkZjU5MzggMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTIyNjcsNiAmIzQzOzIyNjcsMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQobWFwcGluZykpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFKHN0YXJ0IFx1MDAyNiAoSFBBR0VfUE1EX05SIC0gMSkpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4mIzQzO1x0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghaXNfc2htZW0pXG4mIzQzO1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4mIzQzO1xuIFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFx1MDAyNm5ld19mb2xpbywgbW0sIGNjLCBIUEFHRV9QTURfT1JERVIpO1xuIFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTIzMzcsMTAgJiM0MzsyMzQ0LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XHQvKiAhaXNfc2htZW0gKi9cbiBcdFx0XHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuJiM0MztcdFx0XHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4mIzQzO1x0XHRcdFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cdTAwM2Vob3N0KSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgUEFHRV9TSVpFKTtcbiYjNDM7XG4gXHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuLVx0XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4tXHRcdFx0XHRcdFx0XHQgIGZpbGUsIGluZGV4LFxuLVx0XHRcdFx0XHRcdFx0ICBlbmQgLSBpbmRleCk7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBpbnZhbGlkYXRlX2xvY2sgaGVsZCBhYm92ZTsgZG9uJiMzOTt0IHJldGFrZSBpdC5cbiYjNDM7XHRcdFx0XHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxuJiM0MztcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0aWYgKGluZGV4IFx1MDAzYyBlb2YpXG4mIzQzO1x0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbiYjNDM7XHRcdFx0XHRcdFx0bWluKGVuZCwgZW9mKSAtIGluZGV4LCAwKTtcbiBcdFx0XHRcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cbiBcdFx0XHRcdGxydV9hZGRfZHJhaW4oKTtcbiBcdFx0XHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKG1hcHBpbmcsIGluZGV4KTtcbkBAIC0yNjcyLDYgJiM0MzsyNjg5LDggQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XG4gXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbiBvdXQ6XG4mIzQzO1x0aWYgKCFpc19zaG1lbSlcbiYjNDM7XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG4gXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XG4gXHRyZXR1cm4gcmVzdWx0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gY29sbGFwc2VfZmlsZSgpIGJ5IGFjcXVpcmluZyBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKSBhY3Jvc3MgZm9saW8gYWxsb2NhdGlvbiBhbmQgdGhlIHBhZ2Ugc2Nhbm5pbmcgbG9vcCwgYW5kIHN3aXRjaGluZyB0aGUgcmVhZGFoZWFkIG1lY2hhbmlzbSB0byBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLiBUaGlzIGNoYW5nZXMgc3luY2hyb25pemF0aW9uIGludmFyaWFudHMsIGxvY2sgb3JkZXJpbmcgKGludmFsaWRhdGVfbG9jayB2cyBmb2xpbyBsb2NrLCB0cnVuY2F0ZSwgYW5kIG1lbW9yeSByZWNsYWltIGR1cmluZyBhbGxvY2F0aW9uKSwgYW5kIHJlYWRhaGVhZCBib3VuZGluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciB0aGUga2h1Z2VwYWdlZCBkYWVtb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjlkMjExNjVhNzFmZTNhZTdiNjMwYjFhMTZmNWZjZDNkMTRiZWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6MzU6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmMKaW5kZXggMTFmZjk4ZDU1Yzc2ZS4uNjkwY2NiY2RmNTkzOCAxMDA2NDQKLS0tIGEvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuYwpAQCAtMjI2Nyw2ICYjNDM7MjI2NywxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJVk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSAmYW1wOyZhbXA7ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTsKIAlWTV9XQVJOX09OX09OQ0Uoc3RhcnQgJmFtcDsgKEhQQUdFX1BNRF9OUiAtIDEpKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3cKJiM0MzsJICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFpc19zaG1lbSkKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsKJiM0MzsKIAlyZXN1bHQgPSBhbGxvY19jaGFyZ2VfZm9saW8oJmFtcDtuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTsKIAlpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkKIAkJZ290byBvdXQ7CkBAIC0yMzM3LDEwICYjNDM7MjM0NCwyMCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQl9CiAJCX0gZWxzZSB7CS8qICFpc19zaG1lbSAqLwogCQkJaWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHsKJiM0MzsJCQkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgJmFtcDtmaWxlLSZndDtmX3JhLAomIzQzOwkJCQkJCSAgbWFwcGluZywgaW5kZXgpOwomIzQzOwkJCQlwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLSZndDtob3N0KSwKJiM0MzsJCQkJCQkJICAgIFBBR0VfU0laRSk7CiYjNDM7CiAJCQkJeGFzX3VubG9ja19pcnEoJmFtcDt4YXMpOwotCQkJCXBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgJmFtcDtmaWxlLSZndDtmX3JhLAotCQkJCQkJCSAgZmlsZSwgaW5kZXgsCi0JCQkJCQkJICBlbmQgLSBpbmRleCk7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LgomIzQzOwkJCQkgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZAomIzQzOwkJCQkgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKGluZGV4ICZsdDsgZW9mKQomIzQzOwkJCQkJcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoJmFtcDtyYWN0bCwKJiM0MzsJCQkJCQltaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApOwogCQkJCS8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi8KIAkJCQlscnVfYWRkX2RyYWluKCk7CiAJCQkJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpOwpAQCAtMjY3Miw2ICYjNDM7MjY4OSw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlmb2xpb191bmxvY2sobmV3X2ZvbGlvKTsKIAlmb2xpb19wdXQobmV3X2ZvbGlvKTsKIG91dDoKJiM0MzsJaWYgKCFpc19zaG1lbSkKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwogCVZNX0JVR19PTighbGlzdF9lbXB0eSgmYW1wO3BhZ2VsaXN0KSk7CiAJdHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS0hVR0VQQUdFRCBGaWxlIENvbGxhcHNlIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL2todWdlcGFnZWQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNvbGxhcHNlX2ZpbGUoKWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgZnJvbSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIHBlcnNwZWN0aXZlLiBUaGlzIGRlYWxzIHdpdGggVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgZmlsZS1iYWNrZWQgcG9ydGlvbiBvZiBUSFAgY29sbGFwc2UsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSB0aGluZ3MgbGlrZSBgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpYCBvciB0aGUga2h1Z2VwYWdlZCBkYWVtb24uCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUsIGFuZCBpdCBzZWVtcyBsaWtlbHkgdGhhdCBpdCBpcywgZ2l2ZW4gdGhhdCBtYWR2aXNlIGNhbiBjYWxsIHRoaXMgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGluIGBtbS9raHVnZXBhZ2VkLmNgLCBhbmQgc3l6a2FsbGVyIGNhbiBsaWtlbHkgdHJpZ2dlciBpdCB2aWEgYG1hZHZpc2VgIG9yIGtodWdlcGFnZWQgc3lzZnMvZGFlbW9uIG9uIGZpbGUgbWFwcGluZ3MuCgpOb3csIHRoZSBqdWljeSBwYXJ0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUgbG9ja2luZyBzdHJhdGVneS4gV2Ugc2VlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgIGJlaW5nIHRha2VuICpiZWZvcmUqIGZvbGlvIGFsbG9jYXRpb24gKGBhbGxvY19jaGFyZ2VfZm9saW9gKSBhbmQgdGhlIG1haW4gbG9vcCB3aXRoaW4gYGNvbGxhcHNlX2ZpbGUoKWAuIFRoaXMgcmVwbGFjZXMgdGhlIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3aXRoIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAuIFRoaXMgc2hpZnQgaW4gbG9ja2luZyBvcmRlciBhbmQgdGhlIGluY2x1c2lvbiBvZiByZWFkYWhlYWQgd2l0aGluIHRoZSBsb2NrZWQgc2VjdGlvbiBpcyBhIHJlZCBmbGFnLCBidXQgYSBwb3RlbnRpYWxseSB2ZXJ5IGludGVyZXN0aW5nIG9uZS4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJhY2luZyB3aXRoIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBwcmltYXJ5IGFyZWEgb2YgY29uY2VybiBsaWVzIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdHJ1bmNhdGUsIHJlYWRhaGVhZCwgZm9saW8gbG9ja3MsIHRoZSBpbnZhbGlkYXRlIGxvY2ssIGFuZCB0aGUgYGFsbG9jX2NoYXJnZV9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmLiBDb3VsZCBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBpdHNlbGYgdHJpZ2dlciBtZW1vcnkgcmVjbGFtYXRpb24sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcmVjdXJzaW9uIG9yIGxvY2tkZXAgaXNzdWVzPyBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBiYXR0bGVncm91bmQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHN1Y2ggY2hhbmdlcyBhcmUgYWxtb3N0IGFsd2F5cyB3b3J0aCBjYXJlZnVsIGZ1enppbmcuIFRoaXMgcmVnaW9uIGlzIGEgaG90YmVkIG9mIHBvdGVudGlhbCBkZWFkbG9ja3MsIHJhY2UgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucy4gV2UmIzM5O3ZlIGdvdCBmb2xpbyBsb2NrcywgcmVhZGFoZWFkLCBhbmQgbm93IGBpbnZhbGlkYXRlX2xvY2tgIGFsbCBpbiB0aGUgbWl4LCB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIEZTIHJlLWVudHJ5LgoKVGhlIGZhY3QgdGhhdCB3ZSBhcmUgaG9sZGluZyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCAqZHVyaW5nKiB0aGUgYGFsbG9jX2NoYXJnZV9mb2xpb2AgY2FsbCBpcyB3aGF0IHJlYWxseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoYXTigJlzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGNvbWJpbmF0aW9uIGFuZCBkZWZpbml0ZWx5IHN1Z2dlc3RzIHRoaXMgaXMgd29ydGggYSBkZWVwZXIgbG9vay4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgc3BlY2lmaWMgc2V0dGluZ3MgdGhhdCBpbmZsdWVuY2UgdGhpcyBjb2RlIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgdG8gdHJpZ2dlciBgY29sbGFwc2VfZmlsZWAgYW5kIGhvdyB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjMtLyoqXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMjQ5LVx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjk0LVx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG5tbS9raHVnZXBhZ2VkLmM6MjY5NTpcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbm1tL2todWdlcGFnZWQuYy0yNjk2LVx0cmV0dXJuIHJlc3VsdDtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjY5OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI3OTYtXHRcdH0gZWxzZSB7XG5tbS9raHVnZXBhZ2VkLmM6Mjc5NzpcdFx0XHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTI3OTgtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjEwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBIdWdlIFBhZ2UgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byB1bmRlcnN0YW5kIGhvdyBga2h1Z2VwYWdlZC5jYCBmaXRzIGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgYWx3YXlzIHRoZSBzYW1lOiBsZXQmIzM5O3MgcGlucG9pbnQgd2hlcmUgdGhpcyBjcnVjaWFsIGZpbGUgaXMgYWN0dWFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBLbm93aW5nIGl0cyBsb2NhdGlvbiBnaXZlcyBhIGNyaXRpY2FsIGNsdWUgYWJvdXQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQuIFNvLCBmaXJzdCB1cCwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgc3BvdCB3aGVyZSB0aGUgY29tcGlsYXRpb24gcnVsZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMsIGluY2x1ZGluZyBga2h1Z2VwYWdlZC5jYCwgcmVzaWRlLiBGcm9tIHRoZXJlLCBJIG5lZWQgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZ3VhcmQgaXRzIGluY2x1c2lvbi4gT2Z0ZW4sIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIGEgZmlsZSBpcyBkcml2ZW4gYnkgYSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWcgb3B0aW9uLiBUaGVzZSBvcHRpb25zIGFjdCBhcyBndWFyZCByYWlscywgZGV0ZXJtaW5pbmcgaWYgdGhlIHNvdXJjZSBjb2RlIGdldHMgY29tcGlsZWQgb3Igbm90IGJhc2VkIG9uIHRoZSB1c2VyJiMzOTtzIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBga2h1Z2VwYWdlZC5vYCBhbmQgaXRzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGZvciBga2h1Z2VwYWdlZC5vYC4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBOb3csIGdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbHVya2luZyBpbiB0aGUgYGtodWdlcGFnZWQuY2Agb3IsIGZvciB0aGF0IG1hdHRlciwgd2l0aGluIHRoZSBgY29sbGFwc2VfZmlsZWAgY29kZS4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBhZnRlciBhbGwuCgpUaW1lIHRvIHN5c3RlbWF0aWNhbGx5IGFuYWx5emUgdGhlIGNvZGUuIEkmIzM5O2xsIGluaXRpYXRlIGEgc2VhcmNoIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgdXNlcyBvZiBgI2lmZGVmYCBvciwgbW9yZSBkaXJlY3RseSwgYW55IG1lbnRpb25zIG9mIGBDT05GSUdfYCBpbnNpZGUgdGhlIGBtbS9raHVnZXBhZ2VkLmNgIGZpbGUuIFRoaXMgc2hvdWxkIGV4cG9zZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGVpdGhlciBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRoYXQgYXJlIGVzc2VudGlhbCBmb3IgdGhlIHByb3BlciBvcGVyYXRpb24gb2YgYGtodWdlcGFnZWRgLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MTM2PXN0YXRpYyBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIGtodWdlcGFnZWRfc2NhbiA9IHtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTM5LVxubW0va2h1Z2VwYWdlZC5jOjE0MDojaWZkZWYgQ09ORklHX1NZU0ZTXG5tbS9raHVnZXBhZ2VkLmMtMTQxLXN0YXRpYyBzc2l6ZV90IHNjYW5fc2xlZXBfbWlsbGlzZWNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jPTM0NT1zdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGtodWdlcGFnZWRfYXR0cl9ncm91cCA9IHtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzQ4LX07XG5tbS9raHVnZXBhZ2VkLmM6MzQ5OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cbm1tL2todWdlcGFnZWQuYy0zNTAtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwMzM9c3RhdGljIGlubGluZSBnZnBfdCBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2sodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTAzNy1cbm1tL2todWdlcGFnZWQuYzoxMDM4OiNpZmRlZiBDT05GSUdfTlVNQVxubW0va2h1Z2VwYWdlZC5jLTEwMzktc3RhdGljIGludCBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgVEhQIGFuZCBSZWFkLUFoZWFkIFNldHRpbmdzKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gc2VlIGhvdyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaGF2aW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGNoZWNrIGlzIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBjb25uZWN0aW9uIHRvIGBSRUFEX0FIRUFEYCBpcyBhIGdvb2QgbGVhZC4gSSBzaG91bGQgZ28gZGlnZ2luZyBpbnRvIHRoZSBgUkVBRF9BSEVBRGAgc2V0dGluZ3MsIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzZXR1cC4gVGhlIGBtbS9LY29uZmlnYCBmaWxlIGlzIHRoZSBnby10byBwbGFjZSBmb3IgYWxsIG1lbW9yeS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gaXQmIzM5O3MgdGhlIG9idmlvdXMgY2hvaWNlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHJlbGF0ZWQgdG8gVEhQIGFuZCBwb3NzaWJseSByZWxhdGVkIHRvIGBSRUFEX0FIRUFEYCBhcyB3ZWxsLiBUaGF0IGlzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHRpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODM0LVxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzYtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBLY29uZmlnIGVudHJ5OgoKKipBbmFseXppbmcgdGhlIFRSQU5TUEFSRU5UX0hVR0VQQUdFIEtjb25maWcgRW50cnkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGRlcGVuZGVuY2llcy4gV2hhdCBhcmNocyBpcyB0aGlzIHJlbGV2YW50IHRvPyBXaGF0IG90aGVyIGZlYXR1cmVzIG1pZ2h0IGl0IGludGVyYWN0IHdpdGgsIHBvc2l0aXZlbHkgb3IgbmVnYXRpdmVseT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGRlZmF1bHQgdmFsdWVzIG9yIGltcGxpY2F0aW9ucyBvZiBub3Qgc2VsZWN0aW5nIGl0PyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkNvbmRpdGlvbmFsIGRlcGVuZGVuY2llczoqKiBJcyBpdCBiYXNlZCBvbiBjZXJ0YWluIGhhcmR3YXJlIGZlYXR1cmVzIChlLmcuLCBzcGVjaWZpYyBDUFUgZXh0ZW5zaW9ucywgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCBjYXBhYmlsaXRpZXMpIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4gQW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0JiMzOTtzICpub3QqIGNvbXBhdGlibGUgd2l0aD8KKiAgICoqU3ltYm9sIGRlZmluaXRpb25zOioqIFdoYXQgZG9lcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFjdHVhbGx5ICpkbyogaW4gdGhlIGNvZGUsIGFuZCBob3cgZG9lcyBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQgY2hhbmdlIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWw/CiogICAqKkhlbHAgdGV4dDoqKiBUaGUgaGVscCB0ZXh0IHdpbGwgdGVsbCBtZSB0aGUgZnVuZGFtZW50YWwgcHVycG9zZSBhbmQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIGEgY2xlYXIgZGVmaW5pdGlvbiBvZiB3aGF0IGl0IGFjaGlldmVzLgoqICAgKipEZWZhdWx0IHZhbHVlczoqKiBBcmUgdGhlcmUgZGVmYXVsdCB2YWx1ZXMsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSB0aGV5IG1ha2luZz8gTWlnaHQgdGhlc2UgbmVlZCB0byBiZSBvdmVycmlkZGVuIGZvciBjZXJ0YWluIHVzZSBjYXNlcywgbGlrZSBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIG1lbW9yeSBpcyBtb3JlIHRpZ2h0bHkgY29uc3RyYWluZWQ/CiogICAqKlRyaWdnZXJzIGZvciBlbmFibGVtZW50KiogV2hhdCBzZXRzIHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgaXQgdG8gZW5hYmxlPwoqICAgKipJbXBsaWNhdGlvbnMqKjogd2hhdCBhcmUgdGhlIGJlbmVmaXRzIG9mIHRoaXMgb3B0aW9uLCBhbmQgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIGRvd25zaWRlcywgdHJhZGVvZmZzLCBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSB3aWxsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSB0cmFkZW9mZnMgYXJvdW5kIHRoaXMuCiogICAqKlJlbGV2YW50IGNvZGUgc2VjdGlvbnMqKjogV2hhdCBjb2RlIHNlY3Rpb25zIGFuZCBoZWFkZXIgZmlsZXMgYXJlIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uPyBVbmRlcnN0YW5kaW5nIHRoaXMgcXVpY2tseSBnaXZlcyBtZSBjbHVlcyBhYm91dCBob3cgcGVydmFzaXZlIHRoZSBpbXBhY3QgaXMuCgpJIGV4cGVjdCB0byBmaW5kIGluZm9ybWF0aW9uIG9uIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5LCBpdHMgcGVyZm9ybWFuY2UgaW1wYWN0LCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgS2NvbmZpZyBlbnRyeSB3aXRoIHRoZSByZWxldmFudCBrZXJuZWwgc291cmNlIGNvZGUgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBoZWxwcyB0byBkZXRlcm1pbmUgaWYgdGhlIGRlc2NyaXB0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZnVsbHkgY292ZXIgYWxsIGNvbnNpZGVyYXRpb25zLiBJIG1pZ2h0IGV2ZW4gbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBvdGhlciByZWxhdGVkIEtjb25maWdzIGxpa2UgYEhVR0VUTEJfUEFHRWAsIGBIVUdFVExCX1BBR0VfU0laRWAsIGFuZCBhbnkgTlVNQS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGZvciBhIGhvbGlzdGljIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODM1Olx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDgzNjpcdFx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4gODM3Olx0XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRcbiA4Mzg6XHRcdHNlbGVjdCBDT01QQUNUSU9OXG4gODM5Olx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4gODQwOlx0XHRzZWxlY3QgTU1fSURcbiA4NDE6XHRcdGhlbHBcbiA4NDI6XHRcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuIDg0MzpcdFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXG4gODQ0Olx0XHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxuIDg0NTpcdFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxuIDg0NjpcdFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXG4gODQ3Olx0XHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cbiA4NDg6XHRcbiA4NDk6XHRcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXG4gODUwOlx0XG4gODUxOlx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4NTI6XHRcbiA4NTM6XHRjaG9pY2VcbiA4NTQ6XHRcdHByb21wdCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXCYjMzQ7XG4gODU1Olx0XHRkZWZhdWx0IFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xuIDg1NjpcdFx0aGVscFxuIDg1NzpcdFx0ICBTZWxlY3RzIHRoZSBzeXNmcyBkZWZhdWx0cyBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydC5cbiA4NTg6XHRcbiA4NTk6XHRcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbiA4NjA6XHRcdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbiA4NjE6XHRcdGhlbHBcbiA4NjI6XHRcdCAgRW5hYmxpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgYWx3YXlzLCBjYW4gaW5jcmVhc2UgdGhlXG4gODYzOlx0XHQgIG1lbW9yeSBmb290cHJpbnQgb2YgYXBwbGljYXRpb25zIHdpdGhvdXQgYSBndWFyYW50ZWVkXG4gODY0Olx0XHQgIGJlbmVmaXQgYnV0IGl0IHdpbGwgd29yayBhdXRvbWF0aWNhbGx5IGZvciBhbGwgYXBwbGljYXRpb25zLlxuIDg2NTpcdFxuIDg2NjpcdFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcbiA4Njc6XHRcdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4gODY4Olx0XHRoZWxwXG4gODY5Olx0XHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIG1hZHZpc2UsIHdpbGwgb25seSBwcm92aWRlIGFcbiA4NzA6XHRcdCAgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYmVuZWZpdCB0byB0aGUgYXBwbGljYXRpb25zIHVzaW5nXG4gODcxOlx0XHQgIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgYnV0IGl0IHdvbiYjMzk7dCByaXNrIHRvIGluY3JlYXNlIHRoZVxuIDg3MjpcdFx0ICBtZW1vcnkgZm9vdHByaW50IG9mIGFwcGxpY2F0aW9ucyB3aXRob3V0IGEgZ3VhcmFudGVlZFxuIDg3MzpcdFx0ICBiZW5lZml0LlxuIDg3NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYGNvbGxhcHNlX2ZpbGVgIG9yIHBlcmhhcHMgc2V0dGluZ3MgcmVsYXRlZCB0byBmaWxlLWJhY2tlZCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggdG8gZW5zdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nLgoKSSYjMzk7bGwgcXVlcnkgZm9yIGEgZmV3IGtleSB0ZXJtcy4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYFJFQURBSEVBRF9NTUFQYCwgYG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnRgLCBhbmQgYGNvbGxhcHNlX2ZpbGVgLiBXaGlsZSBJJiMzOTttIGF0IGl0LCBJJiMzOTtsbCBhbHNvIGFkZCBgUkVBRE9OTFlfVEhQYCB0byB0aGUgc2VhcmNoIHBhcmFtZXRlcnMuIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkLCBicm9hZCBpbml0aWFsIHNlYXJjaCB0byBjb3ZlciB0aGUgbW9zdCBsaWtlbHkgYXJlYXMuCgpSaWdodCwgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgYG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnRgLCBqdXN0IHRvIGdldCB0aGluZ3MgZ29pbmcuIFRoaXMgd2lsbCBob3BlZnVsbHkgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD01MDc9c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MTYtLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1MTc6ICogbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydCgpIC0gQ2hlY2sgaWYgYSBtYXBwaW5nIHN1cHBvcnRzIFBNRC1zaXplZCBmb2xpb1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNTE4LSAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzc19zcGFjZVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUyNy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1Mjg6c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01Mjkte1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUzNi0jZWxzZVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NTM3OnN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNTM4LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTk1PXN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3RocF9lbmFibGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA2LVxubW0vaHVnZV9tZW1vcnkuYzoxMDc6XHRpZiAoIW1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKSlcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjY2LVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MjI2NzpcdFZNX1dBUk5fT05fT05DRSghaXNfc2htZW0gXHUwMDI2XHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcbm1tL2todWdlcGFnZWQuYy0yMjY4LVx0Vk1fV0FSTl9PTl9PTkNFKHN0YXJ0IFx1MDAyNiAoSFBBR0VfUE1EX05SIC0gMSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODQ5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUGFnZW1hcCBIZWFkZXIqKgoKT2theSwgdGltZSB0byBnZXQgc3BlY2lmaWMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCBoZWFkZXIgZmlsZS4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBsaWtlbHkgY2VudGVyZWQgYXJvdW5kIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgcGFnZSBtYXBwaW5nIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGF0IGxpbmUgNTE3IGlzIGdvaW5nIHRvIGJlIGEga2V5IHBvaW50LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIGFudGljaXBhdGUgdGhpcyBsaW5lIGNvbnRhaW5pbmcgZGVjbGFyYXRpb25zIG9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gcGVyaGFwcyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIGZvbGlvIGhhbmRsaW5nLCBvciBtYXliZSBldmVuIHNvbWUgY3JpdGljYWwgbG9ja2luZyBtZWNoYW5pc21zIHdpdGhpbiB0aGUgcGFnZSBjYWNoZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzZWN0aW9uIGRlYWxzIHdpdGguIFRpbWUgdG8gY2hlY2sgaXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTY6XHQvKipcbiA1MTc6XHQgKiBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KCkgLSBDaGVjayBpZiBhIG1hcHBpbmcgc3VwcG9ydHMgUE1ELXNpemVkIGZvbGlvXG4gNTE4Olx0ICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzX3NwYWNlXG4gNTE5Olx0ICpcbiA1MjA6XHQgKiBXaGlsZSBzb21lIG1hcHBpbmdzIHN1cHBvcnQgbGFyZ2UgZm9saW9zLCB0aGV5IG1pZ2h0IG5vdCBzdXBwb3J0IFBNRC1zaXplZFxuIDUyMTpcdCAqIGZvbGlvcy4gVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBhIG1hcHBpbmcgc3VwcG9ydHMgUE1ELXNpemVkIGZvbGlvcy5cbiA1MjI6XHQgKiBGb3IgZXhhbXBsZSwga2h1Z2VwYWdlZCBuZWVkcyB0aGlzIGluZm9ybWF0aW9uIGJlZm9yZSBhdHRlbXB0aW5nIHRvXG4gNTIzOlx0ICogY29sbGFwc2luZyBUSFBzLlxuIDUyNDpcdCAqXG4gNTI1Olx0ICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuIDUyNjpcdCAqL1xuIDUyNzpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA1Mjg6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiA1Mjk6XHR7XG4gNTMwOlx0XHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbiA1MzE6XHRcdFZNX1dBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyltYXBwaW5nIFx1MDAyNiBGT0xJT19NQVBQSU5HX0FOT04pO1xuIDUzMjpcdFxuIDUzMzpcdFx0cmV0dXJuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKG1hcHBpbmcpIFx1MDAzYz0gUE1EX09SREVSIFx1MDAyNlx1MDAyNlxuIDUzNDpcdFx0ICAgICAgIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKG1hcHBpbmcpIFx1MDAzZT0gUE1EX09SREVSO1xuIDUzNTpcdH1cbiA1MzY6XHQjZWxzZVxuIDUzNzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIDUzODpcdHtcbiA1Mzk6XHRcdHJldHVybiBmYWxzZTtcbiA1NDA6XHR9XG4gNTQxOlx0I2VuZGlmXG4gNTQyOlx0XG4gNTQzOlx0LyogUmV0dXJuIHRoZSBtYXhpbXVtIGZvbGlvIHNpemUgZm9yIHRoaXMgcGFnZWNhY2hlIG1hcHBpbmcsIGluIGJ5dGVzLiAqL1xuIDU0NDpcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4gNTQ1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBGaWxlIENvbGxhcHNlIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBUcmFuc3BhcmVudCBIdWdlcGFnZXMsIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZC4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmlsZSBjb2xsYXBzZSBtZWNoYW5pc20gYW5kIGhvdyBpdCYjMzk7cyB0cmlnZ2VyZWQsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGtlcm5lbCYjMzk7cyBga2h1Z2VwYWdlZGAgZGFlbW9uLiBUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGRlbHZlIGludG8gYGtodWdlcGFnZWQuY2AuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGluIGBraHVnZXBhZ2VkLmNgIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIGBjb2xsYXBzZV9maWxlYC4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgdmFyaW91cyBzY2VuYXJpb3MgYW5kIHBhdGhzIHRocm91Z2ggd2hpY2ggZmlsZSBjb2xsYXBzZSBpcyBpbnZva2VkLiBJIHdpbGwgdGhlbiBwZXJmb3JtIGEgY29kZSBzZWFyY2ggZm9yIGFsbCBjYWxscyB0byB0aGUgZnVuY3Rpb24gYGNvbGxhcHNlX2ZpbGVgIHdpdGhpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTIxMzk9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjIyMy0vKipcbm1tL2todWdlcGFnZWQuYzoyMjI0OiAqIGNvbGxhcHNlX2ZpbGUgLSBjb2xsYXBzZSBmaWxlbWFwL3RtcGZzL3NobWVtIHBhZ2VzIGludG8gaHVnZSBvbmUuXG5tbS9raHVnZXBhZ2VkLmMtMjIyNS0gKlxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjQ3LSAqL1xubW0va2h1Z2VwYWdlZC5jOjIyNDg6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTIyNDktXHRcdHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI2OTQtXHRWTV9CVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2cGFnZWxpc3QpKTtcbm1tL2todWdlcGFnZWQuYzoyNjk1Olx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xubW0va2h1Z2VwYWdlZC5jLTI2OTYtXHRyZXR1cm4gcmVzdWx0O1xuLS1cbm1tL2todWdlcGFnZWQuYz0yNjk5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjc5Ni1cdFx0fSBlbHNlIHtcbm1tL2todWdlcGFnZWQuYzoyNzk3Olx0XHRcdHJlc3VsdCA9IGNvbGxhcHNlX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHN0YXJ0LCBjYyk7XG5tbS9raHVnZXBhZ2VkLmMtMjc5OC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGNvbGxhcHNlX3NjYW5fZmlsZWAgYW5kIGl0cyBJbnRlcmFjdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBsYXlzIGEga2V5IHJvbGUgaW4gZGF0YSBwcm9jZXNzaW5nIG9yIEkvTywgcGVyaGFwcyBmaWxlIGFnZ3JlZ2F0aW9uIG9yIHN1bW1hcml6aW5nIHNjYW4gZGF0YS4gVG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBhY3QsIEkgbmVlZCB0byB0cmFjZSBpdHMgZmxvdy4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZWJhc2Ugd2hlcmUgYGNvbGxhcHNlX3NjYW5fZmlsZWAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHBpY3R1cmUgb2Ygd2hhdOKAmXMgKnVzaW5nKiB0aGlzIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgZGVwZW5kZW5jaWVzLCBkYXRhIGZsb3dzLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHBvaW50cyBvZiB2dWxuZXJhYmlsaXR5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBvdGhlciBmdW5jdGlvbnMg4oCTIHRoZSBkZWVwZXIgSSBnbywgdGhlIGJldHRlciBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIHdpbGwgYmUuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSBxdWljayBpbnZlc3RpZ2F0aW9uIGdpdmVuIG15IGV4aXN0aW5nIGV4cGVydGlzZS4gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZXNwb25zaWJpbGl0aWVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2Vfc2Nhbl9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjY5OC1cbm1tL2todWdlcGFnZWQuYzoyNjk5OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2todWdlcGFnZWQuYy0yNzAwLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYz0yODA5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODMxLXJldHJ5OlxubW0va2h1Z2VwYWdlZC5jOjI4MzI6XHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHBnb2ZmLCBjYyk7XG5tbS9raHVnZXBhZ2VkLmMtMjgzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3ODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBgY29sbGFwc2Vfc2Nhbl9maWxlYCBpcyBiZWluZyB1c2VkLiBUaGUgbm90ZXMgc2F5IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gUmlnaHQsIGFuZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgaXRzZWxmIHBhcnQgb2YgdGhlIGBtYWR2aXNlX2NvbGxhcHNlYCBwcm9jZXNzLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gY2FsbHMgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFuZCBhbHNvIHdoYXQgaXMgY2FsbGluZyBgY29sbGFwc2VfZmlsZWAuIEtub3dpbmcgdGhpcywgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHRoYXQgbGVhZCB0byBgY29sbGFwc2Vfc2Nhbl9maWxlYCBiZWluZyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTI2OTk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODA4LSAqL1xubW0va2h1Z2VwYWdlZC5jOjI4MDk6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjgxMC1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgKmxvY2tfZHJvcHBlZCxcbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjg2Nj1zdGF0aWMgdm9pZCBjb2xsYXBzZV9zY2FuX21tX3Nsb3QodW5zaWduZWQgaW50IHByb2dyZXNzX21heCxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjkzNi1cbm1tL2todWdlcGFnZWQuYzoyOTM3Olx0XHRcdCpyZXN1bHQgPSBjb2xsYXBzZV9zaW5nbGVfcG1kKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzLFxubW0va2h1Z2VwYWdlZC5jLTI5MzgtXHRcdFx0XHRcdFx0ICAgICAgdm1hLCBcdTAwMjZsb2NrX2Ryb3BwZWQsIGNjKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzIwNz1pbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzI1NS1cbm1tL2todWdlcGFnZWQuYzozMjU2Olx0XHRyZXN1bHQgPSBjb2xsYXBzZV9zaW5nbGVfcG1kKGFkZHIsIHZtYSwgXHUwMDI2bW1hcF91bmxvY2tlZCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTMyNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbGxhcHNlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBwYXRoIGZvciBtZW1vcnkgY29sbGFwc2luZy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgbWFkdmlzZV9jb2xsYXBzZSgpYCBhbmQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdCgpYCB1bHRpbWF0ZWx5IGZlZWQgaW50byBgY29sbGFwc2Vfc2luZ2xlX3BtZCgpYC4gVGhhdCB0aGVuIGNhbGxzIGBjb2xsYXBzZV9zY2FuX2ZpbGUoKWAsIHdoaWNoIGZpbmFsbHkgcmVhY2hlcyBgY29sbGFwc2VfZmlsZSgpYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3QgYXQgdGhlIGhpZ2ggbGV2ZWwuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwIGluIG15IG1pbmQ6IGlzIGBjb2xsYXBzZV9maWxlKClgIHN0YXRpYz8gWXVwLCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZSguLi4pYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGxpbWl0cyBpdHMgdmlzaWJpbGl0eS4gQnV0LCBhbmQgdGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLCBpcyBpdCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gQ29uc2lkZXJpbmcgdGhhdCBgY29sbGFwc2VfZmlsZWAgaXMgYSAqbWFzc2l2ZSogZnVuY3Rpb24g4oCTIHdlJiMzOTtyZSB0YWxraW5nIGFsbW9zdCA0NTAgbGluZXMgZnJvbSAyMjQ4IHRvIDI2OTYg4oCTIGl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0byBiZSBpbmxpbmVkIHVubGVzcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uIGxpa2UgTGluayBUaW1lIE9wdGltaXphdGlvbiAoTFRPKS4gSW4gYSBzdGFuZGFyZCBHQ0Mgb3IgQ2xhbmcgYnVpbGQgKndpdGhvdXQqIExUTywgYSBmdW5jdGlvbiBvZiB0aGF0IHNpemUsIGV2ZW4gaWYgc3RhdGljLCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgaW5saW5lZC4KClRoZSBpbXBsaWNhdGlvbnMgYXJlIHRoYXQsIGV2ZW4gaWYgaXQmIzM5O3Mgc3RhdGljLCBgY29sbGFwc2VfZmlsZWAgd2lsbCBoYXZlIGEgc3ltYm9sIGluIHRoZSBzeW1ib2wgdGFibGUsIGFsb25nIHdpdGggaXRzIGNhbGxlcnMsIHN1Y2ggYXMgYG1hZHZpc2VfY29sbGFwc2VgLCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAsIGFuZCBgY29sbGFwc2Vfc2Nhbl9maWxlYC4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBvciBhbmFseXNpcy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYG1hZHZpc2VfY29sbGFwc2VgIGlzbiYjMzk7dCBleHBvcnRlZCBvciBkZWNsYXJlZCBpbiBhIGhlYWRlciBzb21ld2hlcmUuIFRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD0zNDY9QSBoaWdoZXIgdmFsdWUgbWF5IGluY3JlYXNlIG1lbW9yeSBmb290cHJpbnQgZm9yIHNvbWUgd29ya2xvYWRzLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTMtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MzU0OiAgIEN1cnJlbnRseSwgbWFkdmlzZV9jb2xsYXBzZSBvbmx5IHN1cHBvcnRzIGNvbGxhcHNpbmcgdG8gUE1ELXNpemVkIFRIUHNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTUtICAgYW5kIGRvZXMgbm90IGF0dGVtcHQgbVRIUCBjb2xsYXBzZXMuXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTExPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cdFx0ICAgICBpbnQgYWR2aWNlKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MTI9c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTg6c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxOS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxNzA9Ym9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE3NC1cbm1tL2todWdlcGFnZWQuYzozMTc1OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXG5tbS9raHVnZXBhZ2VkLmMtMzE3Ni17XG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyMDYtXG5tbS9raHVnZXBhZ2VkLmM6MzIwNzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2todWdlcGFnZWQuYy0zMjA4LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyOTQtXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFx1MDAzZVx1MDAzZSBIUEFHRV9QTURfU0hJRlQpID8gMFxubW0va2h1Z2VwYWdlZC5jOjMyOTU6XHRcdFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XG5tbS9raHVnZXBhZ2VkLmMtMzI5Ni19XG4tLVxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM2My1cdGNhc2UgTUFEVl9DT0xMQVBTRTpcbm1tL21hZHZpc2UuYzoxMzY0Olx0XHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG5tbS9tYWR2aXNlLmMtMTM2NS1cdFx0XHRcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZWxvY2tfZHJvcHBlZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTIzNT1zdGF0aWMgdm9pZCBmaWxsX21lbW9yeShpbnQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDgtICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjQ5OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9yZXRyeSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjUwLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MjY3PXN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODAtXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtBbGxvY2F0ZSBodWdlIHBhZ2UuLi5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI4MTpcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODItXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTExPXN0YXRpYyBib29sIGlzX2Fub24oc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTE1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxNjpzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUxNy1cdFx0XHQgICAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUzOS1cdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjU0MDpcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU0MS1cdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTE6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTUyLVx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1Ni1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTc6XHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTgtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz02ODA9c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjY4MTpcdC5jb2xsYXBzZSA9IFx1MDAyNm1hZHZpc2VfY29sbGFwc2UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjgyLVx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEwNzY9c3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTMzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExMzQ6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzUtXHRcdFx0XHRcdCAgIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExNDQtXHQvKiBjLVx1MDAzZWNvbGxhcHNlKCkgd2lsbCBmaW5kIGEgaHVnZXBhZ2UgYW5kIGNvbXBsYWluIC0gY2FsbCBkaXJlY3RseS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxMTQ1Olx0X19tYWR2aXNlX2NvbGxhcHNlKFwmIzM0O1JlLWNvbGxhcHNlIFBNRC1tYXBwZWQgaHVnZXBhZ2VcJiMzNDssIHAsIDEsIG9wcywgdHJ1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE0Ni1cdHZhbGlkYXRlX21lbW9yeShwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEzMTE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xNDMyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzM6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNDpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNjpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRpdmluZyBpbnRvIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgY29sbGFwc2VfZmlsZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyBodWdlIHBhZ2UgY29sbGFwc2luZyB3b3Jrcywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZpbGUtYmFja2VkIG1lbW9yeS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgc291cmNlIGNvZGUsIHNvIEkmIzM5O20gaGVhZGluZyBkaXJlY3RseSB0byBgbW0va2h1Z2VwYWdlZC5jYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHZhcmlhYmxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBleGFjdCBjb250cm9sIGZsb3cgYW5kIGFueSBlZGdlIGNhc2VzLiBJJiMzOTtsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBmaWxlIG1hcHBpbmcgYW5kIHRoZSBodWdlIHBhZ2UgbWVjaGFuaWNzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNjA6XHRcbjIyNjE6XHRcdC8qXG4yMjYyOlx0XHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxuMjI2MzpcdFx0ICpcbjIyNjQ6XHRcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xuMjI2NTpcdFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxuMjI2NjpcdFx0ICovXG4yMjY3Olx0XHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XG4yMjY4Olx0XHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XG4yMjY5Olx0XG4yMjcwOlx0XHQvKlxuMjI3MTpcdFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4yMjcyOlx0XHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXG4yMjczOlx0XHQgKi9cbjIyNzQ6XHRcdGlmICghaXNfc2htZW0pXG4yMjc1Olx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbjIyNzY6XHRcbjIyNzc6XHRcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcbjIyNzg6XHRcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuMjI3OTpcdFx0XHRnb3RvIG91dDtcbjIyODA6XHRcbjIyODE6XHRcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuMjI4MjpcdFxuMjI4MzpcdFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG4yMjg0Olx0XHRpZiAoaXNfc2htZW0pXG4yMjg1Olx0XHRcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQobmV3X2ZvbGlvKTtcbjIyODY6XHRcdG5ld19mb2xpby1cdTAwM2VpbmRleCA9IHN0YXJ0O1xuMjI4NzpcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xuMjI4ODpcdFxuMjI4OTpcdFx0LypcbjIyOTA6XHRcdCAqIEVuc3VyZSB3ZSBoYXZlIHNsb3RzIGZvciBhbGwgdGhlIHBhZ2VzIGluIHRoZSByYW5nZS4gIFRoaXMgaXNcbjIyOTE6XHRcdCAqIGFsbW9zdCBjZXJ0YWlubHkgYSBuby1vcCBiZWNhdXNlIG1vc3Qgb2YgdGhlIHBhZ2VzIG11c3QgYmUgcHJlc2VudFxuMjI5MjpcdFx0ICovXG4yMjkzOlx0XHRkbyB7XG4yMjk0Olx0XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjI5NTpcdFx0XHR4YXNfY3JlYXRlX3JhbmdlKFx1MDAyNnhhcyk7XG4yMjk2Olx0XHRcdGlmICgheGFzX2Vycm9yKFx1MDAyNnhhcykpXG4yMjk3Olx0XHRcdFx0YnJlYWs7XG4yMjk4Olx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMjk5Olx0XHRcdGlmICgheGFzX25vbWVtKFx1MDAyNnhhcywgR0ZQX0tFUk5FTCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5OTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBjb2xsYXBzZV9maWxlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYWRkcmVzc2VkIG9uZSBzcGVjaWZpYyBtb2RpZmljYXRpb24uIE5vdywgSSBuZWVkIHRvIHNoaWZ0IGdlYXJzIGFuZCBkaWcgaW50byB0aGUgcmVtYWluaW5nIGFkanVzdG1lbnRzIHdpdGhpbiB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyAqYWxzbyogY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSAqb3RoZXIqIG1vZGlmaWVkIHNlZ21lbnRzLiYjMzQ7IEkga25vdyBJJiMzOTt2ZSBtaXNzZWQgc29tZXRoaW5nIGltcG9ydGFudCBpZiBJIG9ubHkgYWRkcmVzcyB0aGUgZmlyc3QgYWx0ZXJhdGlvbi4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0b3RhbCBmdW5jdGlvbiYjMzk7cyBjaGFuZ2UgaXMgYWNjdXJhdGUuIEkmIzM5O20gZm9jdXNpbmcgb24gY29tcGxldGVuZXNzIGFuZCBhY2N1cmFjeSwgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc2Vjb25kIGFsdGVyYXRpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMzNTpcdFx0XHRcdFx0fVxuMjMzNjpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjMzNzpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjMzODpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzMzk6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzQwOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM0MTpcdFx0XHRcdH0gZWxzZSB7XG4yMzQyOlx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbjIzNDM6XHRcdFx0XHRcdGdvdG8geGFfbG9ja2VkO1xuMjM0NDpcdFx0XHRcdH1cbjIzNDU6XHRcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuMjM0NjpcdFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4yMzQ3Olx0XHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4yMzQ4Olx0XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4yMzQ5Olx0XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuMjM1MDpcdFx0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4yMzUxOlx0XG4yMzUyOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM1MzpcdFx0XHRcdFx0LypcbjIzNTQ6XHRcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuMjM1NTpcdFx0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbjIzNTY6XHRcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4yMzU3Olx0XHRcdFx0XHQgKi9cbjIzNTg6XHRcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuMjM1OTpcdFx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbjIzNjA6XHRcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuMjM2MTpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM2MjpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM2MzpcdFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuMjM2NDpcdFx0XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjIzNjU6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjM2NjpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM2NzpcdFx0XHRcdFx0fVxuMjM2ODpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbjIzNjk6XHRcdFx0XHRcdC8qXG4yMzcwOlx0XHRcdFx0XHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJiMzOTt0XG4yMzcxOlx0XHRcdFx0XHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXG4yMzcyOlx0XHRcdFx0XHQgKlxuMjM3MzpcdFx0XHRcdFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxuMjM3NDpcdFx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipBbmFseXppbmcgdGhlIE91dHB1dCBvZiBgY29sbGFwc2VfZmlsZWAqKgoKT2theSwgc28gd2UmIzM5O3JlIGNpcmNsaW5nIGJhY2sgdG8gYGNvbGxhcHNlX2ZpbGVgIGFnYWluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBjcml0aWNhbCBwYXJ0OiB0aGUgYG91dDpgIGF0IHRoZSB2ZXJ5IGVuZC4gVGhhdCYjMzk7cyB0aGUga2V5LCBpc24mIzM5O3QgaXQ/IFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBpbnRlcm5hbCB0cmFuc2Zvcm1hdGlvbnMgYW5kIGNvbXB1dGF0aW9ucyBjb252ZXJnZSB0byBwcm9kdWNlIHRoZSByZXN1bHQuIEkgd2FudCB0byByZWFsbHkgZGlnIGludG8gd2hhdCYjMzk7cyBiZWluZyBvdXRwdXR0ZWQsIG5vdCBqdXN0ICp0aGF0KiBzb21ldGhpbmcgaXMgb3V0cHV0dGVkLiBJcyBpdCBhIGNvbnNvbGlkYXRlZCBkYXRhIHN0cnVjdHVyZSwgYSBmaW5hbCBwcm9jZXNzZWQgc3RyaW5nLCBhIHBhcnRpY3VsYXIgZm9ybWF0PwoKVW5kZXJzdGFuZGluZyAqdGhhdCogYG91dDpgIHNwZWNpZmljYWxseSB0ZWxscyB1cyBldmVyeXRoaW5nIGFib3V0IHRoZSBkZXNpZ24gZGVjaXNpb25zIHRoYXQgdW5kZXJwaW4gdGhlIGVudGlyZSBmdW5jdGlvbiwgYW5kIHRoZSBkYXRhIGl0IHByZXNlbnRzLiBXZSBjb3VsZCBpbmZlciBhbiBhd2Z1bCBsb3QgZnJvbSB0aGF0IHNpbXBsZSBzdGF0ZW1lbnQgYWxvbmUsIGlmIHdlJiMzOTtyZSBjYXJlZnVsLiBJcyBpdCBhIHdlbGwgc3RydWN0dXJlZCBvdXRwdXQsIG9yIGEgZHVtcD8gV2hhdCwgKmV4YWN0bHkqLCBpcyB0aGUgZm9ybSBvZiB0aGF0IG91dHB1dD8gVGhhdCB0ZWxscyB1cyBob3cgaXQgaXMgdG8gYmUgY29uc3VtZWQsIHdoZXRoZXIgaXQmIzM5O3MgZnJpZW5kbHkgdG8gYmVpbmcgcGFzc2VkIHRvIHRoZSBuZXh0IHN0YWdlLCBpZiBpdCBpcyBhcHByb3ByaWF0ZSBmb3Igc3RvcmFnZSBvciBkaXNwbGF5PyBUaGUgb3V0cHV0ICppcyogdGhlIGludGVyZmFjZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGF0IGRldGFpbCBmb3IgYSBtb21lbnQgYW5kIHJlYWxseSBleHBsb3JlIHdoYXQgaXQgbWVhbnMgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY4MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFx1MDAyNnBhZ2VsaXN0LCBscnUpIHtcbjI2ODE6XHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbjI2ODI6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjI2ODM6XHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuMjY4NDpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjY4NTpcdFx0fVxuMjY4NjpcdFxuMjY4NzpcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBOVUxMO1xuMjY4ODpcdFxuMjY4OTpcdFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XG4yNjkwOlx0XHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbjI2OTE6XHRvdXQ6XG4yNjkyOlx0XHRpZiAoIWlzX3NobWVtKVxuMjY5MzpcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbjI2OTQ6XHRcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuMjY5NTpcdFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuMjY5NjpcdFx0cmV0dXJuIHJlc3VsdDtcbjI2OTc6XHR9XG4yNjk4Olx0XG4yNjk5Olx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuMjcwMDpcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxuMjcwMTpcdFx0XHRzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4yNzAyOlx0e1xuMjcwMzpcdFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCBOVUxMLCBIUEFHRV9QTURfT1JERVIpO1xuMjcwNDpcdFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX3N3YXAgPSBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKGNjLCBIUEFHRV9QTURfT1JERVIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU3OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRXhpdCBQb2ludHMgaW4gYGNvbGxhcHNlX2ZpbGVgKioKCk9rYXksIGxldCYjMzk7cyBkaWcgaW50byB0aGlzIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGhvdyBpdCBleGl0cy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGBnb3RvIG91dDtgIG9yIHNpbWlsYXIganVtcCBzdGF0ZW1lbnRzIG1pZ2h0IGFmZmVjdCB0aGluZ3MuIFNvLCBJJiMzOTttIGdvaW5nIHRvIHN5c3RlbWF0aWNhbGx5IHRyYWNlIGFsbCB0aGUgZXhpdCBwYXRocy4KCkZpcnN0LCBJIHNlZSB0aGUgY2hlY2sgYXQgbGluZSAyMjc4OiBgaWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpIGdvdG8gb3V0O2AuIEFscmlnaHQsIHRoYXQmIzM5O3MgYSBkaXJlY3QgZWFybHkgZXhpdCBjb25kaXRpb24uIEFmdGVyIHRoaXMsIHRoZXJlIHNlZW0gdG8gYmUgc2V2ZXJhbCBsYWJlbHMgdG8gYmUgYXdhcmUgb2Y6IGB4YV9sb2NrZWQ6YCwgYHhhX3VubG9ja2VkOmAsIGByb2xsYmFjazpgLCBhbmQgcHJlc3VtYWJseSBvdGhlcnMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGxlYWQuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGZvbGxvdyB3aGVyZSB0aGUgYG91dGAgbGFiZWwgaXMgZGVmaW5lZCBhbmQgZXhhbWluZSB3aGF0IGFjdGlvbnMgYXJlIHBlcmZvcm1lZCBwcmlvciB0byBlYWNoIHBvdGVudGlhbCBleGl0LiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMgb2YgZWFjaCBwb3NzaWJsZSByZXR1cm4gcGF0aHdheSB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgZXNwZWNpYWxseSBpbiBlZGdlIGNhc2VzIG9yIGVycm9yIHNjZW5hcmlvcy4gVGhpcyB3aWxsIGhlbHAgbWUgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGNsZWFudXAgdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IHRoZXNlIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnb3RvIG91dDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTY5Mz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy03MTQtXHRcdFx0XHRcdFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX05PTkUpO1xubW0va2h1Z2VwYWdlZC5jOjcxNTpcdFx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTcxNi1cdFx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTcyMC1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BURV9OT05fUFJFU0VOVDtcbm1tL2todWdlcGFnZWQuYzo3MjE6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzIyLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTcyNC1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BURV9VRkZEO1xubW0va2h1Z2VwYWdlZC5jOjcyNTpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03MjYtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzI5LVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9OVUxMO1xubW0va2h1Z2VwYWdlZC5jOjczMDpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03MzEtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzQyLVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9MQVpZRlJFRTtcbm1tL2todWdlcGFnZWQuYzo3NDM6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzQ0LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTc1Ny1cdFx0XHRcdFx0XHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfU0hBUkVEKTtcbm1tL2todWdlcGFnZWQuYzo3NTg6XHRcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03NTktXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy03NjYtXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xubW0va2h1Z2VwYWdlZC5jOjc2NzpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03NjgtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzkwLVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xubW0va2h1Z2VwYWdlZC5jOjc5MTpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03OTItXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtODA3LVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT1VOVDtcbm1tL2todWdlcGFnZWQuYzo4MDg6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtODA5LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTgxNy1cdFx0XHRyZXN1bHQgPSBTQ0FOX0RFTF9QQUdFX0xSVTtcbm1tL2todWdlcGFnZWQuYzo4MTg6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtODE5LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jPTExNjU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMTkzLVx0XHRcdFx0cmVzdWx0ID0gU0NBTl9OT19QVEVfVEFCTEU7XG5tbS9raHVnZXBhZ2VkLmM6MTE5NDpcdFx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTExOTUtXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjEzLVx0XHRcdHJlc3VsdCA9IFNDQU5fRVhDRUVEX1NXQVBfUFRFO1xubW0va2h1Z2VwYWdlZC5jOjEyMTQ6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtMTIxNS1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjMxLVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xubW0va2h1Z2VwYWdlZC5jOjEyMzI6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtMTIzMy1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjM2LVx0XHRcdHJlc3VsdCA9IFNDQU5fRkFJTDtcbm1tL2todWdlcGFnZWQuYzoxMjM3Olx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTEyMzgtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTYzMC1cdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MmIzQzOyYjNDM7O1xubW0va2h1Z2VwYWdlZC5jOjE2MzE6XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTE2MzItXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2NDktXHRcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xubW0va2h1Z2VwYWdlZC5jOjE2NTA6XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTE2NTEtXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjc4LVx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG5tbS9raHVnZXBhZ2VkLmM6MjI3OTpcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtMjI4MC1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjY2OC1cbm1tL2todWdlcGFnZWQuYzoyNjY5Olx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtMjY3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGNvbGxhcHNlX2ZpbGVgIEV4aXQgU3RyYXRlZ2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHdpdGhpbiBgY29sbGFwc2VfZmlsZWAgYSBiaXQgYmV0dGVyLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGV4aXQgc2NlbmFyaW9zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGFsbCBleGl0IHBhdGhzIHVsdGltYXRlbHkgbGVhZCB0byBhIHJvbGxiYWNrLCBvciBpZiB0aGVyZSBhcmUgc2NlbmFyaW9zIHdoZXJlIHRoZSBmdW5jdGlvbiBtaWdodCBleGl0IGluIGEgbW9yZSAmIzM0O2NsZWFuJiMzNDsgd2F5IHdpdGhvdXQgdHJpZ2dlcmluZyBhIHJvbGxiYWNrIHByb2NlZHVyZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRhdGEgaW50ZWdyaXR5IGltcGxpY2F0aW9ucyBvZiBhIHN1Y2Nlc3NmdWwgb3IgZmFpbGVkIGNvbGxhcHNlIG9wZXJhdGlvbi4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgY29kZSBibG9jayBhcm91bmQgbGluZXMgMjY1MC0yNjk1LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSByYW5nZSB0byBzdGFydCB3aXRoLCBnaXZlbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlLiBJIGV4cGVjdCB0aGF0IHNlY3Rpb24gd2lsbCBwcm9iYWJseSBjb250YWluIHNvbWUga2V5IGRlY2lzaW9uIHBvaW50cyBhbmQgYnJhbmNoaW5nIGxvZ2ljIHJlbGF0ZWQgdG8gZXhpdCBjb25kaXRpb25zLiBCeSBpbnNwZWN0aW5nIHRoYXQgYXJlYSwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIHZhcmlvdXMgcGF0aHMgdGhlIGZ1bmN0aW9uIHRha2VzIG9uIGl0cyB3YXkgb3V0IGFuZCBkZXRlcm1pbmUgaWYgdGhlIHJvbGxiYWNrIG1lY2hhbmlzbSBpcyBhbHdheXMgaW52b2tlZC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY0NTpcdFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxuMjY0NjpcdFx0ICovXG4yNjQ3Olx0XHRyZXRyYWN0X3BhZ2VfdGFibGVzKG1hcHBpbmcsIHN0YXJ0KTtcbjI2NDg6XHRcdGlmIChjYyBcdTAwMjZcdTAwMjYgIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpXG4yNjQ5Olx0XHRcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcbjI2NTA6XHRcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xuMjY1MTpcdFxuMjY1MjpcdFx0LypcbjI2NTM6XHRcdCAqIFRoZSBjb2xsYXBzZSBoYXMgc3VjY2VlZGVkLCBzbyBmcmVlIHRoZSBvbGQgZm9saW9zLlxuMjY1NDpcdFx0ICovXG4yNjU1Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXHUwMDI2cGFnZWxpc3QsIGxydSkge1xuMjY1NjpcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuMjY1NzpcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsXG4yNjU4Olx0XHRcdFx0XHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbjI2NTk6XHRcdFx0aWYgKGlzX3NobWVtKVxuMjY2MDpcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU0hNRU0sXG4yNjYxOlx0XHRcdFx0XHRcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuMjY2MjpcdFx0XHRmb2xpby1cdTAwM2VtYXBwaW5nID0gTlVMTDtcbjI2NjM6XHRcdFx0Zm9saW9fY2xlYXJfYWN0aXZlKGZvbGlvKTtcbjI2NjQ6XHRcdFx0Zm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xuMjY2NTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjY2NjpcdFx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgMiAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuMjY2NzpcdFx0fVxuMjY2ODpcdFxuMjY2OTpcdFx0Z290byBvdXQ7XG4yNjcwOlx0XG4yNjcxOlx0cm9sbGJhY2s6XG4yNjcyOlx0XHQvKiBTb21ldGhpbmcgd2VudCB3cm9uZzogcm9sbCBiYWNrIHBhZ2UgY2FjaGUgY2hhbmdlcyAqL1xuMjY3MzpcdFx0aWYgKG5yX25vbmUpIHtcbjI2NzQ6XHRcdFx0eGFzX2xvY2tfaXJxKFx1MDAyNnhhcyk7XG4yNjc1Olx0XHRcdG1hcHBpbmctXHUwMDNlbnJwYWdlcyAtPSBucl9ub25lO1xuMjY3NjpcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjY3NzpcdFx0XHRzaG1lbV91bmNoYXJnZShtYXBwaW5nLVx1MDAzZWhvc3QsIG5yX25vbmUpO1xuMjY3ODpcdFx0fVxuMjY3OTpcdFxuMjY4MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFx1MDAyNnBhZ2VsaXN0LCBscnUpIHtcbjI2ODE6XHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbjI2ODI6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjI2ODM6XHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuMjY4NDpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgcm9sbGJhY2sgc2NlbmFyaW8gYW5kIGl0JiMzOTtzIGxhbmRpbmcgdXMgaW4gYSBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUsIGxpbmVzIDI2ODctMjY5MSwgYWZ0ZXIgdGhlIHJvbGxiYWNrIGhhcyBjb25jbHVkZWQuIEludGVyZXN0aW5nLCBhbGwgdGhlIGNvZGUgcGF0aHMgY29udmVyZ2UgYXQgdGhlIGBvdXQ6YCBsYWJlbCwgYW5kIHRoZW4gd2hhdD8gCgpSaWdodCwgbGV0JiMzOTtzIHpvb20gaW4gb24gYGNvbGxhcHNlX2ZpbGVgIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGdvdCBzb21ldGhpbmcganVpY3kgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYSBmaWxlIG1hcHBpbmcgaW52b2x2ZWQuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIGlzIGJlaW5nIGNhbGxlZCAqYmVmb3JlKiBgYWxsb2NfY2hhcmdlX2ZvbGlvYC4gV2h5IGlzIHRoYXQgc2lnbmlmaWNhbnQ/IFdlbGwsIGNvdWxkIGBhbGxvY19jaGFyZ2VfZm9saW9gIGJlIHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBoYXZlIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24gaGFwcGVuaW5nLCBwb3RlbnRpYWxseSB3aXRoIGZsYWdzIHRoYXQgbWlnaHQgdHJpZ2dlciBtZW1vcnkgcmVjbGFpbT8gSWYgcmVjbGFpbSBpcyBpbnZvbHZlZCwgdGhhdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgZ29vZCBzaWduIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGFsbG9jX2NoYXJnZV9mb2xpb2AgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLiBUaW1lIHRvIGluc3BlY3QgdGhlIGltcGxlbWVudGF0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTExNjU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjU1LVxubW0va2h1Z2VwYWdlZC5jOjEyNTY6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgYWxsb2NfY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9raHVnZXBhZ2VkLmMtMTI1Ny1cdFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTEyOTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfaHVnZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzMDktXG5tbS9raHVnZXBhZ2VkLmM6MTMxMDpcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZmb2xpbywgbW0sIGNjLCBvcmRlcik7XG5tbS9raHVnZXBhZ2VkLmMtMTMxMS1cdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI3Ni1cbm1tL2todWdlcGFnZWQuYzoyMjc3Olx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFx1MDAyNm5ld19mb2xpbywgbW0sIGNjLCBIUEFHRV9QTURfT1JERVIpO1xubW0va2h1Z2VwYWdlZC5jLTIyNzgtXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBhbGxvY19jaGFyZ2VfZm9saW9gKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzIGBhbGxvY19jaGFyZ2VfZm9saW9gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZTogSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgdGhpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGEgZm9saW8tc3BlY2lmaWMgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIG5hbWUgaW1wbGllcyBpdCBoYW5kbGVzIGZvbGlvLXJlbGF0ZWQgY2hhcmdpbmcsIHdoaWNoIHByb2JhYmx5IG1lYW5zIGFjY291bnRpbmcgZm9yIG1lbW9yeSB1c2FnZSwgcG90ZW50aWFsbHkgZm9yIGRpZmZlcmVudCBwcm9jZXNzZXMgb3Igc3Vic3lzdGVtcy4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSBlbGVtZW50czoKCiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBIb3cgZG9lcyBpdCBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGZvbGlvIHN0cnVjdHVyZXMgYW5kIGFjY291bnRpbmcgZGF0YT8gQXJlIHRoZXJlIHNwaW5sb2NrcywgbXV0ZXhlcywgYXRvbWljIG9wZXJhdGlvbnMgaW52b2x2ZWQ/IEFueSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpcyBhIG1ham9yIHJlZCBmbGFnIGluIHRoaXMgYXJlYS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIGZhaWx1cmUgcGF0aHM/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgb3V0LW9mLW1lbW9yeSBzY2VuYXJpb3Mgb3Igb3RoZXIgdW5leHBlY3RlZCBjb25kaXRpb25zPyBBcmUgdGhlcmUgcmV0dXJuIGNvZGVzIG9yIGVycm9yIGluZGljYXRvcnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPwoqICAgKipSZXNvdXJjZSBUcmFja2luZzoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdXNlZCB0byB0cmFjayB0aGUgYWxsb2NhdGVkIG1lbW9yeT8gSXMgaXQganVzdCB0aGUgZm9saW8gaXRzZWxmLCBvciBhcmUgdGhlcmUgY291bnRlcnMsIGJpdG1hcHMsIG9yIG90aGVyIGF1eGlsaWFyeSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhpcyB0cmFja2luZy4KKiAgICoqSW50ZWdyYXRpb24gUG9pbnRzOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzPyBEb2VzIGl0IGNhbGwgaW50byB0aGUgcGFnZSBhbGxvY2F0b3IsIHRoZSBzbGFiIGFsbG9jYXRvciwgb3Igb3RoZXIgcmVsZXZhbnQgc3Vic3lzdGVtcz8gSSYjMzk7bGwgYmUgdHJhY2luZyB0aGUgY29udHJvbCBmbG93IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuCiogICAqKkNvbnRleHQ6KiogV2hhdCBpcyB0aGUgY2FsbGluZyBjb250ZXh0PyBBcmUgd2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgdXNlciBwcm9jZXNzLCBvciBhIGtlcm5lbCB0aHJlYWQ/IFRoaXMgYWZmZWN0cyB0aGUgc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgZGVhZGxvY2suCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdWJ0bGUgZGV0YWlscywgbGlrZSB0aGUgdXNlIG9mIHNwZWNpZmljIGZsYWdzIG9yIGJpdGZpZWxkcyB3aXRoaW4gdGhlIGZvbGlvIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyosIG5vdCBqdXN0IHdoYXQgdGhlIG5hbWUgc3VnZ2VzdHMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjU2Olx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgYWxsb2NfY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4xMjU3Olx0XHRcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYywgdW5zaWduZWQgaW50IG9yZGVyKVxuMTI1ODpcdHtcbjEyNTk6XHRcdGdmcF90IGdmcCA9IChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkID8gYWxsb2NfaHVnZXBhZ2Vfa2h1Z2VwYWdlZF9nZnBtYXNrKCkgOlxuMTI2MDpcdFx0XHQgICAgIEdGUF9UUkFOU0hVR0UpO1xuMTI2MTpcdFx0aW50IG5vZGUgPSBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKGNjKTtcbjEyNjI6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4xMjYzOlx0XG4xMjY0Olx0XHRmb2xpbyA9IF9fZm9saW9fYWxsb2MoZ2ZwLCBvcmRlciwgbm9kZSwgXHUwMDI2Y2MtXHUwMDNlYWxsb2Nfbm1hc2spO1xuMTI2NTpcdFx0aWYgKCFmb2xpbykge1xuMTI2NjpcdFx0XHQqZm9saW9wID0gTlVMTDtcbjEyNjc6XHRcdFx0Y291bnRfY29sbGFwc2VfZXZlbnQob3JkZXIsIFRIUF9DT0xMQVBTRV9BTExPQ19GQUlMRUQsXG4xMjY4Olx0XHRcdFx0XHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9BTExPQ19GQUlMRUQpO1xuMTI2OTpcdFx0XHRyZXR1cm4gU0NBTl9BTExPQ19IVUdFX1BBR0VfRkFJTDtcbjEyNzA6XHRcdH1cbjEyNzE6XHRcbjEyNzI6XHRcdGNvdW50X2NvbGxhcHNlX2V2ZW50KG9yZGVyLCBUSFBfQ09MTEFQU0VfQUxMT0MsIE1USFBfU1RBVF9DT0xMQVBTRV9BTExPQyk7XG4xMjczOlx0XG4xMjc0Olx0XHRpZiAodW5saWtlbHkobWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApKSkge1xuMTI3NTpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTI3NjpcdFx0XHQqZm9saW9wID0gTlVMTDtcbjEyNzc6XHRcdFx0cmV0dXJuIFNDQU5fQ0dST1VQX0NIQVJHRV9GQUlMO1xuMTI3ODpcdFx0fVxuMTI3OTpcdFxuMTI4MDpcdFx0aWYgKGlzX3BtZF9vcmRlcihvcmRlcikpXG4xMjgxOlx0XHRcdGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhmb2xpbywgVEhQX0NPTExBUFNFX0FMTE9DLCAxKTtcbjEyODI6XHRcbjEyODM6XHRcdCpmb2xpb3AgPSBmb2xpbztcbjEyODQ6XHRcdHJldHVybiBTQ0FOX1NVQ0NFRUQ7XG4xMjg1Olx0fVxuMTI4NjpcdFxuMTI4NzpcdC8qXG4xMjg4Olx0ICogY29sbGFwc2VfaHVnZV9wYWdlKCkgZXhwZWN0cyB0aGUgbW1hcF9sb2NrIHRvIGJlIHVubG9ja2VkIGJlZm9yZSBlbnRlcmluZyBhbmRcbjEyODk6XHQgKiB3aWxsIGFsd2F5cyByZXR1cm4gd2l0aCB0aGUgbG9jayB1bmxvY2tlZCwgdG8gYXZvaWQgaG9sZGluZyB0aGUgbW1hcF9sb2NrXG4xMjkwOlx0ICogd2hpbGUgYWxsb2NhdGluZyBhIFRIUCwgYXMgdGhhdCBjb3VsZCB0cmlnZ2VyIGRpcmVjdCByZWNsYWltL2NvbXBhY3Rpb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgZGlnIGludG8gdGhpcyBjb2RlLiBUaG9zZSBsaW5lcywgc3BlY2lmaWNhbGx5IGxpbmVzIDEyODgtMTI5MCwgcmVhbGx5IGNhdWdodCBteSBleWUuIFRoZSBjb21tZW50IGFib3V0IGF2b2lkaW5nIHRoZSBgbW1hcF9sb2NrYCBkdXJpbmcgVEhQIGFsbG9jYXRpb24sIGFuZCBob3cgdGhhdCBjYW4gdHJpZ2dlciBkaXJlY3QgcmVjbGFpbS9jb21wYWN0aW9u4oCmIHRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuIE5vdywgKmBjb2xsYXBzZV9maWxlYCogaXMgaG9sZGluZyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCB3aGVuIGl0IGNhbGxzIGBhbGxvY19jaGFyZ2VfZm9saW9gLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIElmIGRpcmVjdCByZWNsYWltIGtpY2tzIGluLCB0aGUgZmlsZXN5c3RlbSBvciBwYWdlIGNhY2hlIGNvdWxkIHRyeSB0byBsb2NrIHRoZSAqYG1hcHBpbmdgKiwgYW5kIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgcG90ZW50aWFsIGxvY2tkZXAgaXNzdWUgaGVyZS4gSSBtZWFuLCB3ZSBhcmUgcmVhbGx5IHRvdWNoaW5nIG9uIGNvcmUgTU0gbG9naWM6IHRoZSBsb2NraW5nLCB0aGUgcGFnZSBjYWNoZSwgcmVhZGFoZWFkLCBraHVnZXBhZ2VkIGNvbGxhcHNlIG9mIGZpbGUgcGFnZXMsIHRoZSB3aG9sZSBlbmNoaWxhZGEuCgpUaGUgdXNlIG9mICpgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgKiB0byByZXBsYWNlICpgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAqIGlzIGFsc28gc2lnbmlmaWNhbnQsIGFuZCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBsb2NraW5nIG9yZGVyIG9mIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgIHJlbGF0aXZlIHRvIGZvbGlvIGxvY2tzLCB0cnVuY2F0ZSwgcmVhZGFoZWFkLCBhbmQgZXZlcnl0aGluZyBlbHNlIGluIGJldHdlZW4uCgpTbywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBTZWN0aW9uIDMgb2YgdGhhdCBkb2N1bWVudCBzZWVtcyBwcmV0dHkgY2xlYXI6ICYjMzQ7Q29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksIC4uLiYjMzQ7LiBCaW5nby4gQW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgb3Iga2h1Z2VwYWdlZCBzY2FubmluZy4gVGhpcyBpcyB1bmVxdWl2b2NhbGx5ICYjMzQ7V29ydGhGdXp6aW5nLiYjMzQ7CgpOb3cgdGhlIHF1ZXN0aW9uIGlzOiB3aGF0IGFyZSB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scz8gVGhlIGd1aWRlbGluZXMgaW4gU2VjdGlvbiA0IGFyZSByZWxldmFudDogYXZvaWRpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMsIHRhcmdldGluZyBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cywgYW5kIGRlYWxpbmcgd2l0aCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4KCldoYXQgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBoZXJlPyBPYnZpb3VzbHksICpgY29sbGFwc2VfZmlsZWAqIGluIGBtbS9raHVnZXBhZ2VkLmNgIGlzIG1vZGlmaWVkLiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgZW50cnlwb2ludHMgYW5kIGNhbGxlcnMgYXJlOiAqYGNvbGxhcHNlX3NjYW5fZmlsZWAqLCAqYGNvbGxhcHNlX3NpbmdsZV9wbWRgKiwgKmBtYWR2aXNlX2NvbGxhcHNlYCouIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBraHVnZXBhZ2VkIGNhbGxzIGluIHBhcnRpY3VsYXIsIGVzcGVjaWFsbHkgaG93IGl0IGNhbGxzICpgY29sbGFwc2VfZmlsZWAqIG9yICpgY29sbGFwc2Vfc2Nhbl9maWxlYCosIGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgaGVhZCBiYWNrIGludG8gYG1tL2todWdlcGFnZWQuY2AgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX2ZpbGV8Y29sbGFwc2Vfc2Nhbl9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjMtLyoqXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMjQ5LVx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjk0LVx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG5tbS9raHVnZXBhZ2VkLmM6MjY5NTpcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbm1tL2todWdlcGFnZWQuYy0yNjk2LVx0cmV0dXJuIHJlc3VsdDtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjY5OC1cbm1tL2todWdlcGFnZWQuYzoyNjk5OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2todWdlcGFnZWQuYy0yNzAwLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNzk2LVx0XHR9IGVsc2Uge1xubW0va2h1Z2VwYWdlZC5jOjI3OTc6XHRcdFx0cmVzdWx0ID0gY29sbGFwc2VfZmlsZShtbSwgYWRkciwgZmlsZSwgc3RhcnQsIGNjKTtcbm1tL2todWdlcGFnZWQuYy0yNzk4LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jPTI4MDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzEtcmV0cnk6XG5tbS9raHVnZXBhZ2VkLmM6MjgzMjpcdHJlc3VsdCA9IGNvbGxhcHNlX3NjYW5fZmlsZShtbSwgYWRkciwgZmlsZSwgcGdvZmYsIGNjKTtcbm1tL2todWdlcGFnZWQuYy0yODMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgQ2FsbGVycyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBGaXJzdCwgSSBzZWUgdGhhdCBgbWFkdmlzZV9jb2xsYXBzZWAgaXMgYSBjYWxsZXIuIFRoYXQgbWFrZXMgc2Vuc2UsIGhhbmRsaW5nIG1lbW9yeSBjb2xsYXBzZSBiYXNlZCBvbiB1c2VyIGhpbnRzLiBUaGVuIHRoZXJlIGlzIGBjb2xsYXBzZV9zY2FuX21tX3Nsb3RgLCB3aGljaCBpcyBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLCBwb3NzaWJseSBpbmRpY2F0aW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHNjYW5uaW5nIG9yIGJhY2tncm91bmQgcHJvY2Vzcy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXAuIEkgbmVlZCB0byBiZSBzdXJlOyBkb2VzIHRoZSBrZXJuZWwmIzM5O3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQgdGFzaywgc3BlY2lmaWNhbGx5IGBraHVnZXBhZ2VkX2RvX3NjYW5gLCBhY3R1YWxseSBjYWxsIHRoYXQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdGAgZnVuY3Rpb24/IElmIGl0IGRvZXMsIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgdmVyeSBzaWduaWZpY2FudCwgYXMgaXQgbGlua3MgYXV0b21hdGljIHBhZ2UgY29sbGFwc2luZyB0byB0aGUga2h1Z2VwYWdlZCBkYWVtb24uIFRoaXMgbmVlZHMgY29uZmlybWF0aW9uLCBzbyBJJiMzOTtsbCBwaXZvdCBteSBmb2N1cyB0byBleGFtaW5lIHRoZSBjb2RlIG9mIGBjb2xsYXBzZV9zY2FuX21tX3Nsb3RgIGl0c2VsZi4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBjYWxsaW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3NjYW5fbW1fc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MjgwOT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjg2NS1cbm1tL2todWdlcGFnZWQuYzoyODY2OnN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxubW0va2h1Z2VwYWdlZC5jLTI4NjctXHRcdGVudW0gc2Nhbl9yZXN1bHQgKnJlc3VsdCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYz0yOTk2PXN0YXRpYyB2b2lkIGtodWdlcGFnZWRfZG9fc2NhbihzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMwMTYtXHRcdCAgICBwYXNzX3Rocm91Z2hfaGVhZCBcdTAwM2MgMilcbm1tL2todWdlcGFnZWQuYzozMDE3Olx0XHRcdGNvbGxhcHNlX3NjYW5fbW1fc2xvdChwcm9ncmVzc19tYXgsIFx1MDAyNnJlc3VsdCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTMwMTgtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMjQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAqKgoKUmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGlzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgc2V0dGluZy4gSSByZW1lbWJlciBoZWFyaW5nIGFib3V0IGl0IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBkaXNjdXNzaW9ucywgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgcmVhZC1haGVhZCB0dW5pbmcgcGFyYW1ldGVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIEkgYW0gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgYSBnbG9iYWwgb3IgcGVyIG1vdW50IG9wdGlvbiBhbmQgaG93IGl0IGluZmx1ZW5jZXMgcmVhZC1haGVhZCBiZWhhdmlvcnMuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBrZXJuZWwgc291cmNlIG9yIHJlbGV2YW50IGRvY3VtZW50YXRpb24gc2hvdWxkIGNsYXJpZnkgaXRzIGxvY2F0aW9uIGFuZCBwdXJwb3NlLCBiZWNhdXNlIGl0cyBiZWhhdmlvciBzZWVtcyBhIGJpdCBhbWJpZ3VvdXMgZnJvbSB3aGF0IEkgaGF2ZSByZWFkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjM1NC1cdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxubW0va2h1Z2VwYWdlZC5jOjIzNTU6XHRcdFx0XHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxubW0va2h1Z2VwYWdlZC5jLTIzNTYtXHRcdFx0XHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxuLS1cbm1tL2todWdlcGFnZWQuYy0yMzU4LVx0XHRcdFx0aWYgKGluZGV4IFx1MDAzYyBlb2YpXG5tbS9raHVnZXBhZ2VkLmM6MjM1OTpcdFx0XHRcdFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXHUwMDI2cmFjdGwsXG5tbS9raHVnZXBhZ2VkLmMtMjM2MC1cdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuLS1cbm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTIwNy0vKipcbm1tL3JlYWRhaGVhZC5jOjIwODogKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCAtIFN0YXJ0IHVuY2hlY2tlZCByZWFkYWhlYWQuXG5tbS9yZWFkYWhlYWQuYy0yMDktICogQHJhY3RsOiBSZWFkYWhlYWQgY29udHJvbC5cbi0tXG5tbS9yZWFkYWhlYWQuYy0yMjEtICovXG5tbS9yZWFkYWhlYWQuYzoyMjI6dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxubW0vcmVhZGFoZWFkLmMtMjIzLVx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9va2FoZWFkX3NpemUpXG4tLVxubW0vcmVhZGFoZWFkLmMtMjQ0LVxubW0vcmVhZGFoZWFkLmM6MjQ1Olx0dHJhY2VfcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQobWFwcGluZy1cdTAwM2Vob3N0LCBpbmRleCwgbnJfdG9fcmVhZCxcbm1tL3JlYWRhaGVhZC5jLTI0Ni1cdFx0XHRcdCAgICAgIGxvb2thaGVhZF9zaXplKTtcbi0tXG5tbS9yZWFkYWhlYWQuYy0zMTctfVxubW0vcmVhZGFoZWFkLmM6MzE4OkVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKTtcbm1tL3JlYWRhaGVhZC5jLTMxOS1cbi0tXG5tbS9yZWFkYWhlYWQuYz0zMjY9c3RhdGljIHZvaWQgZG9fcGFnZV9jYWNoZV9yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTM0Ny1cdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbm1tL3JlYWRhaGVhZC5jOjM0ODpcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHJhY3RsLCBucl90b19yZWFkLCBsb29rYWhlYWRfc2l6ZSk7XG5tbS9yZWFkYWhlYWQuYy0zNDktXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbi0tXG5tbS9yZWFkYWhlYWQuYz00ODE9dm9pZCBwYWdlX2NhY2hlX3JhX29yZGVyKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtNTE0LVxubW0vcmVhZGFoZWFkLmM6NTE1Olx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xubW0vcmVhZGFoZWFkLmMtNTE2LVx0bm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDI3OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBDaGFuZ2UgaW4gQ29yZSBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW52b2x2aW5nIGBtbS9yZWFkYWhlYWQuYzozNDdgIGFuZCBpdCYjMzk7cyBnb3QgbWUgdGhpbmtpbmcuIEl0IHNlZW1zIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaXMgbm93IGFzc3VtaW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBhY3F1aXJlZCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuICBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgdXNlZCB0byBoYW5kbGUgdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UsIGJ1dCBub3cgd2UmIzM5O3ZlIGdvdCBgY29sbGFwc2VfZmlsZWAgKmhvbGRpbmcqIHRoaXMgbG9jayBmb3IgaXRzICplbnRpcmUqIGR1cmF0aW9uLiBUaGUgY29tbWVudCBhYm91dCB0YWtpbmcgdGhlIGBpbnZhbGlkYXRlX2xvY2tgIGJlZm9yZSBhbnkgZm9saW8gbG9jayBiZWNhdXNlICYjMzQ7dGhlIHJlYWRhaGVhZCBiZWxvdyBuZWVkcyBpdCYjMzQ7IGlzIHRoZSBjbHVlIGhlcmUgYW5kIHRoYXQgYHRydW5jYXRlYCBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBwYXJhZGlnbSBzaGlmdCBpbiB0aGUgTU0gY29yZS4KCk15IGltbWVkaWF0ZSBmb2N1cyBnb2VzIHRvIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIGBjb2xsYXBzZV9maWxlYCBpcyB0aGUgcHJpbWFyeSBtb2RpZmllZCBmdW5jdGlvbiwgYW5kIHRoZW4gdGhlcmUmIzM5O3MgaXRzIGNhbGxlciBgY29sbGFwc2Vfc2Nhbl9maWxlYCwgdGhlIGNhbGxlciBvZiB0aGF0IGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kIHRoZSBwdWJsaWMgZW50cnkgcG9pbnQgYG1hZHZpc2VfY29sbGFwc2VgIGZyb20gdGhlIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBzeXNjYWxsLiBBbmQgdGhlIGtodWdlcGFnZWQgZGFlbW9uIGVudHJ5cG9pbnQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdGAuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlaXIgdWJpcXVpdHksIGFuZCBteSBndXQgZmVlbGluZyB0ZWxscyBtZSBgbWFkdmlzZV9jb2xsYXBzZWAgaXMgTk9UIGEgY29tbW9uIHBhdGgsIG9ubHkgdHJpZ2dlcmVkIGJ5IHRoZSBzcGVjaWZpYyBgTUFEVl9DT0xMQVBTRWAgc3lzY2FsbC4gU2ltaWxhcmx5LCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgYWxzbyBub3QgdWJpcXVpdG91cywgb25seSBjYWxsZWQgYnkgdGhvc2UgY29sbGFwc2UtcmVsYXRlZCBmdW5jdGlvbnMuICBgY29sbGFwc2Vfc2Nhbl9maWxlYCBpcyBhbHNvIG9ubHkgY2FsbGVkIGJ5IGNvbGxhcHNlX3NpbmdsZV9wbWQuIFNvLCBub25lIG9mIHRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgd2lkZWx5IHVzZWQuIEJ1dCB0aGVuIEkmIzM5O20gd29uZGVyaW5nIGlmIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaXMgdWJpcXVpdG91cywgYmVjYXVzZSBpdCYjMzk7cyBhdCB0aGUgY29yZSBvZiByZWFkYWhlYWQgaW4gYW55IGZpbGUgcmVhZC4gVGhlIGZ1bmN0aW9ucyAoYGNvbGxhcHNlX2ZpbGVgLCBgY29sbGFwc2Vfc2Nhbl9maWxlYCwgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLCBgbWFkdmlzZV9jb2xsYXBzZWApIHNlZW0gc3BlY2lmaWMgdG8gdGhpcyBUSFAgY29sbGFwc2UgZmVhdHVyZS4gSXQmIzM5O3MgYmVzdCB0byBhdm9pZCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIHRvIGtlZXAgdGhlIGZ1enppbmcgZm9jdXNlZC4KCkFscmlnaHQsIHdoYXQgY29uZmlndXJhdGlvbiBrbm9icyBjb250cm9sIHRoaXM/IEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiAoYEVuYWJsZUNvbmZpZ3NgKS4gYGtodWdlcGFnZWQuY2AgaXMgdGhlIGtleSwgc28gSSYjMzk7bGwgZ28gdG8gYG1tL01ha2VmaWxlYC4gIEFoYSEgYG9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vYC4gVGhhdCYjMzk7cyB0aGUgb25lLiBBbmQgaW4gYG1tL0tjb25maWdgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGl0c2VsZi4gIEl0IGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGEgY291cGxlIG9mIG90aGVyIHRoaW5ncy4gIElzIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQgb24gYW1kNjQ/IEkgbmVlZCB0byBsb29rIGluIGBhcmNoL3g4Ni9LY29uZmlnYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMTEtXHRzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PS1xuYXJjaC94ODYvS2NvbmZpZzoyMTI6XHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3g4Ni9LY29uZmlnOjIxMzpcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZy0yMTQtXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQICAgICAgICAgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0yOTc9c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMDEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzAyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMwMy1zdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEzNTc9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTM3MC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMzcxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzNzItc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM9NTA5PXBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYy01MjItI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbmFyY2gveDg2L21tL3BndGFibGUuYzo1MjM6XHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTUyNC1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0MzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkqKgoKT2theSwgc28gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGZvciB4ODYgYXJjaGl0ZWN0dXJlLCB3aGljaCBtZWFucyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9uIGFtZDY0IGFzIHdlbGwuIFRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSBzaG91bGQgZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRpZWQgdG8gYGtodWdlcGFnZWRgIG9yIHJlbGF0ZWQgdG8gY29sbGFwc2VkIGZpbGVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gYXdhcmUgb2YgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBzcGFjZSBoZXJlLiBXYWl0IGEgc2Vjb25kLCB3YXNuJiMzOTt0IHRoZXJlIGEgYFJFQURPTkxZX1RIUGAgY29uZmlnIGF0IHNvbWUgcG9pbnQ/IFdhcyB0aGF0IGNvbXBsZXRlbHkgcmVtb3ZlZCwgb3IgaGFzIGl0IGJlZW4gcmVuYW1lZCBvciBkZXByZWNhdGVkPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSRUFET05MWV9USFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcxMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIGluIG1tL0tjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHNlZSBob3cgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgYmV5b25kIHRoZSBtYWluIG9uZSwgdGhhdCBhcmUgYWxzbyB1c2luZyB0aGlzIG9wdGlvbiBpbiB0aGUgZmlsZSBgbW0vS2NvbmZpZ2A/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBsYW5kc2NhcGUgb2YgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIHNldHRpbmdzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBvdmVycmlkZXMsIG9yIHJlbGF0ZWQgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbnRlcnR3aW5lZCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzEwIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9LY29uZmlnPTM9bWVudSBcJiMzNDtNZW1vcnkgTWFuYWdlbWVudCBvcHRpb25zXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04LSNcbm1tL0tjb25maWc6OTpjb25maWcgQVJDSF9OT19TV0FQXG5tbS9LY29uZmlnLTEwLVx0Ym9vbFxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuLS1cbm1tL0tjb25maWctMTI0LVxubW0vS2NvbmZpZzoxMjU6Y29uZmlnIFpTTUFMTE9DXG5tbS9LY29uZmlnLTEyNi1cdHRyaXN0YXRlXG4tLVxubW0vS2NvbmZpZz0xMzE9Y29tbWVudCBcJiMzNDtac21hbGxvYyBpcyBhIGNvbW1vbiBiYWNrZW5kIGFsbG9jYXRvciBmb3IgenN3YXAgXHUwMDI2IHpyYW1cJiMzNDtcbm1tL0tjb25maWctMTMyLVxubW0vS2NvbmZpZzoxMzM6Y29uZmlnIFpTTUFMTE9DX1NUQVRcbm1tL0tjb25maWctMTM0LVx0Ym9vbCBcJiMzNDtFeHBvcnQgenNtYWxsb2Mgc3RhdGlzdGljc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxLVxubW0vS2NvbmZpZzoxNDI6Y29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcbm1tL0tjb25maWctMTQzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzIHBlci16c3BhZ2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTE2Mj1tZW51IFwmIzM0O1NsYWIgYWxsb2NhdG9yIG9wdGlvbnNcJiMzNDtcbm1tL0tjb25maWctMTYzLVxubW0vS2NvbmZpZzoxNjQ6Y29uZmlnIFNMVUJcbm1tL0tjb25maWctMTY1LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctMTY3LVxubW0vS2NvbmZpZzoxNjg6Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxubW0vS2NvbmZpZy0xNjktXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy0xNzItXG5tbS9LY29uZmlnOjE3Mzpjb25maWcgU0xVQl9USU5ZXG5tbS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7Q29uZmlndXJlIGZvciBtaW5pbWFsIG1lbW9yeSBmb290cHJpbnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE4NS1cbm1tL0tjb25maWc6MTg2OmNvbmZpZyBTTEFCX01FUkdFX0RFRkFVTFRcbm1tL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtBbGxvdyBzbGFiIGNhY2hlcyB0byBiZSBtZXJnZWRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE5OS1cbm1tL0tjb25maWc6MjAwOmNvbmZpZyBTTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vS2NvbmZpZy0yMDEtXHRib29sIFwmIzM0O1JhbmRvbWl6ZSBzbGFiIGZyZWVsaXN0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0yMDctXG5tbS9LY29uZmlnOjIwODpjb25maWcgU0xBQl9GUkVFTElTVF9IQVJERU5FRFxubW0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O0hhcmRlbiBzbGFiIGZyZWVsaXN0IG1ldGFkYXRhXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0yMTYtXG5tbS9LY29uZmlnOjIxNzpjb25maWcgU0xBQl9CVUNLRVRTXG5tbS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0yMzMtXG5tbS9LY29uZmlnOjIzNDpjb25maWcgU0xVQl9TVEFUU1xubW0vS2NvbmZpZy0yMzUtXHRkZWZhdWx0IG5cbi0tXG5tbS9LY29uZmlnLTI0Ni1cbm1tL0tjb25maWc6MjQ3OmNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcbm1tL0tjb25maWctMjQ4LVx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG4tLVxubW0vS2NvbmZpZz0yNjM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy0yNzAtXG5tbS9LY29uZmlnOjI3MTpjb25maWcgS01BTExPQ19QQVJUSVRJT05fUkFORE9NXG5tbS9LY29uZmlnLTI3Mi1cdGJvb2wgXCYjMzQ7UmFuZG9taXplIHNsYWIgY2FjaGVzIGZvciBub3JtYWwga21hbGxvY1wmIzM0O1xuLS1cbm1tL0tjb25maWctMjgyLVxubW0vS2NvbmZpZzoyODM6Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEXG5tbS9LY29uZmlnLTI4NC1cdGJvb2wgXCYjMzQ7VHlwZSBiYXNlZCBzbGFiIGNhY2hlIHNlbGVjdGlvbiBmb3Igbm9ybWFsIGttYWxsb2NcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTMwOT1lbmRjaG9pY2Vcbm1tL0tjb25maWctMzEwLVxubW0vS2NvbmZpZzozMTE6Y29uZmlnIFJBTkRPTV9LTUFMTE9DX0NBQ0hFU1xubW0vS2NvbmZpZy0zMTItXHRib29sXG4tLVxubW0vS2NvbmZpZy0zMTQtXHRoZWxwXG5tbS9LY29uZmlnOjMxNTpcdCAgVHJhbnNpdGlvbmFsIGNvbmZpZyBmb3IgbWlncmF0aW9uIHRvIEtNQUxMT0NfUEFSVElUSU9OX0NBQ0hFUy5cbm1tL0tjb25maWctMzE2LVxubW0vS2NvbmZpZz0zMTc9ZW5kbWVudSAjIFNsYWIgYWxsb2NhdG9yIG9wdGlvbnNcbm1tL0tjb25maWctMzE4LVxubW0vS2NvbmZpZzozMTk6Y29uZmlnIFNIVUZGTEVfUEFHRV9BTExPQ0FUT1Jcbm1tL0tjb25maWctMzIwLVx0Ym9vbCBcJiMzNDtQYWdlIGFsbG9jYXRvciByYW5kb21pemF0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNDEtXG5tbS9LY29uZmlnOjM0Mjpjb25maWcgQ09NUEFUX0JSS1xubW0vS2NvbmZpZy0zNDMtXHRib29sIFwmIzM0O0Rpc2FibGUgaGVhcCByYW5kb21pemF0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNTMtXG5tbS9LY29uZmlnOjM1NDpjb25maWcgTU1BUF9BTExPV19VTklOSVRJQUxJWkVEXG5tbS9LY29uZmlnLTM1NS1cdGJvb2wgXCYjMzQ7QWxsb3cgbW1hcHBlZCBhbm9ueW1vdXMgbWVtb3J5IHRvIGJlIHVuaW5pdGlhbGl6ZWRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM2MC1cdCAgZnJvbSBtbWFwKCkgaGFzIGl0cyBjb250ZW50cyBjbGVhcmVkIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG9cbm1tL0tjb25maWc6MzYxOlx0ICB1c2Vyc3BhY2UuICBFbmFibGluZyB0aGlzIGNvbmZpZyBvcHRpb24gYWxsb3dzIHlvdSB0byByZXF1ZXN0IHRoYXRcbm1tL0tjb25maWctMzYyLVx0ICBtbWFwKCkgc2tpcCB0aGF0IGlmIGl0IGlzIGdpdmVuIGFuIE1BUF9VTklOSVRJQUxJWkVEIGZsYWcsIHRodXNcbi0tXG5tbS9LY29uZmlnLTM3NS1cbm1tL0tjb25maWc6Mzc2OmNvbmZpZyBTRUxFQ1RfTUVNT1JZX01PREVMXG5tbS9LY29uZmlnLTM3Ny1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnPTM4MD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTM5MC1cbm1tL0tjb25maWc6MzkxOmNvbmZpZyBGTEFUTUVNX01BTlVBTFxubW0vS2NvbmZpZy0zOTItXHRib29sIFwmIzM0O0ZsYXQgTWVtb3J5XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00MDYtXG5tbS9LY29uZmlnOjQwNzpjb25maWcgU1BBUlNFTUVNX01BTlVBTFxubW0vS2NvbmZpZy00MDgtXHRib29sIFwmIzM0O1NwYXJzZSBNZW1vcnlcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTQyMD1lbmRjaG9pY2Vcbm1tL0tjb25maWctNDIxLVxubW0vS2NvbmZpZzo0MjI6Y29uZmlnIFNQQVJTRU1FTVxubW0vS2NvbmZpZy00MjMtXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy00MjUtXG5tbS9LY29uZmlnOjQyNjpjb25maWcgRkxBVE1FTVxubW0vS2NvbmZpZy00MjctXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy00NDAtI1xubW0vS2NvbmZpZzo0NDE6Y29uZmlnIFNQQVJTRU1FTV9TVEFUSUNcbm1tL0tjb25maWctNDQyLVx0Ym9vbFxuLS1cbm1tL0tjb25maWctNDQ4LSNcbm1tL0tjb25maWc6NDQ5OmNvbmZpZyBTUEFSU0VNRU1fRVhUUkVNRVxubW0vS2NvbmZpZy00NTAtXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy00NTItXG5tbS9LY29uZmlnOjQ1Mzpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXG5tbS9LY29uZmlnLTQ1NC1cdGJvb2xcbm1tL0tjb25maWctNDU1LVxubW0vS2NvbmZpZzo0NTY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQXG5tbS9LY29uZmlnLTQ1Ny1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnLTQ2My1cbm1tL0tjb25maWc6NDY0OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXG5tbS9LY29uZmlnLTQ2NS1cdGJvb2xcbm1tL0tjb25maWctNDY2LSNcbm1tL0tjb25maWc6NDY3OiMgU2VsZWN0IHRoaXMgY29uZmlnIG9wdGlvbiBmcm9tIHRoZSBhcmNoaXRlY3R1cmUgS2NvbmZpZywgaWYgaXQgaXMgcHJlZmVycmVkXG5tbS9LY29uZmlnLTQ2OC0jIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSBvZiBIdWdlVExCL2Rldl9kYXggdm1lbW1hcCBvcHRpbWl6YXRpb24uXG5tbS9LY29uZmlnLTQ2OS0jXG5tbS9LY29uZmlnOjQ3MDpjb25maWcgQVJDSF9XQU5UX09QVElNSVpFX0RBWF9WTUVNTUFQXG5tbS9LY29uZmlnLTQ3MS1cdGJvb2xcbm1tL0tjb25maWctNDcyLVxubW0vS2NvbmZpZzo0NzM6Y29uZmlnIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcbm1tL0tjb25maWctNDc0LVx0Ym9vbFxubW0vS2NvbmZpZy00NzUtXG5tbS9LY29uZmlnOjQ3Njpjb25maWcgQVJDSF9XQU5UX0hVR0VUTEJfVk1FTU1BUF9QUkVJTklUXG5tbS9LY29uZmlnLTQ3Ny1cdGJvb2xcbm1tL0tjb25maWctNDc4LVxubW0vS2NvbmZpZzo0Nzk6Y29uZmlnIEhBVkVfTUVNQkxPQ0tfUEhZU19NQVBcbm1tL0tjb25maWctNDgwLVx0Ym9vbFxubW0vS2NvbmZpZy00ODEtXG5tbS9LY29uZmlnOjQ4Mjpjb25maWcgSEFWRV9HVVBfRkFTVFxubW0vS2NvbmZpZy00ODMtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWctNDg2LSMgRW5hYmxlIG1lbWJsb2NrIHN1cHBvcnQgZm9yIHNjcmF0Y2ggbWVtb3J5IHdoaWNoIGlzIG5lZWRlZCBmb3Iga2V4ZWMgaGFuZG92ZXJcbm1tL0tjb25maWc6NDg3OmNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxubW0vS2NvbmZpZy00ODgtXHRib29sXG4tLVxubW0vS2NvbmZpZy00OTItIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXG5tbS9LY29uZmlnOjQ5Mzpjb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXG5tbS9LY29uZmlnLTQ5NC1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTQ5Ni0jIEtlZXAgYXJjaCBOVU1BIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgcG9zdC1pbml0LlxubW0vS2NvbmZpZzo0OTc6Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXG5tbS9LY29uZmlnLTQ5OC1cdGJvb2xcbm1tL0tjb25maWctNDk5LVxubW0vS2NvbmZpZzo1MDA6Y29uZmlnIE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWctNTAxLVx0Ym9vbFxuLS1cbm1tL0tjb25maWctNTA1LSMgL2Rldi9tZW0uXG5tbS9LY29uZmlnOjUwNjpjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cbm1tL0tjb25maWctNTA3LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNTA5LVxubW0vS2NvbmZpZzo1MTA6Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUxMS1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTUxMy0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTE0Om1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTE1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuLS1cbm1tL0tjb25maWc9NTI0PWNob2ljZVxuLS1cbm1tL0tjb25maWctNTQ1LVxubW0vS2NvbmZpZzo1NDY6Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcbm1tL0tjb25maWctNTQ3LVx0Ym9vbCBcJiMzNDtvZmZsaW5lXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy01NTItXG5tbS9LY29uZmlnOjU1Mzpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE9cbm1tL0tjb25maWctNTU0LVx0Ym9vbCBcJiMzNDthdXRvXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy01NTktXG5tbS9LY29uZmlnOjU2MDpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0tFUk5FTFxubW0vS2NvbmZpZy01NjEtXHRib29sIFwmIzM0O2tlcm5lbFwmIzM0O1xuLS1cbm1tL0tjb25maWctNTY2LVxubW0vS2NvbmZpZzo1Njc6Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFXG5tbS9LY29uZmlnLTU2OC1cdGJvb2wgXCYjMzQ7bW92YWJsZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTgwPWVuZGNob2ljZVxubW0vS2NvbmZpZy01ODEtXG5tbS9LY29uZmlnOjU4Mjpjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy01ODMtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctNTg1LVxubW0vS2NvbmZpZzo1ODY6Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXG5tbS9LY29uZmlnLTU4Ny1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnPTU5MD1lbmRpZiAjIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTU5MS1cbm1tL0tjb25maWc6NTkyOmNvbmZpZyBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxubW0vS2NvbmZpZy01OTMtICAgICAgIGJvb2xcbi0tXG5tbS9LY29uZmlnLTYwNS0jXG5tbS9LY29uZmlnOjYwNjpjb25maWcgU1BMSVRfUFRFX1BUTE9DS1Ncbm1tL0tjb25maWctNjA3LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNjE1LVxubW0vS2NvbmZpZzo2MTY6Y29uZmlnIEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0tcbm1tL0tjb25maWctNjE3LVx0Ym9vbFxubW0vS2NvbmZpZy02MTgtXG5tbS9LY29uZmlnOjYxOTpjb25maWcgU1BMSVRfUE1EX1BUTE9DS1Ncbm1tL0tjb25maWctNjIwLVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNjI0LSMgc3VwcG9ydCBmb3IgbWVtb3J5IGJhbGxvb25cbm1tL0tjb25maWc6NjI1OmNvbmZpZyBCQUxMT09OXG5tbS9LY29uZmlnLTYyNi1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTYyOS0jIHN1cHBvcnQgZm9yIG1lbW9yeSBiYWxsb29uIHBhZ2UgbWlncmF0aW9uXG5tbS9LY29uZmlnOjYzMDpjb25maWcgQkFMTE9PTl9NSUdSQVRJT05cbm1tL0tjb25maWctNjMxLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgYmFsbG9vbiBtZW1vcnkgbWlncmF0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy02NDEtIyBzdXBwb3J0IGZvciBtZW1vcnkgY29tcGFjdGlvblxubW0vS2NvbmZpZzo2NDI6Y29uZmlnIENPTVBBQ1RJT05cbm1tL0tjb25maWctNjQzLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTY1Ni1cbm1tL0tjb25maWc6NjU3OmNvbmZpZyBDT01QQUNUX1VORVZJQ1RBQkxFX0RFRkFVTFRcbm1tL0tjb25maWctNjU4LVx0aW50XG4tLVxubW0vS2NvbmZpZy02NjQtIyBzdXBwb3J0IGZvciBmcmVlIHBhZ2UgcmVwb3J0aW5nXG5tbS9LY29uZmlnOjY2NTpjb25maWcgUEFHRV9SRVBPUlRJTkdcbm1tL0tjb25maWctNjY2LVx0Ym9vbCBcJiMzNDtGcmVlIHBhZ2UgcmVwb3J0aW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy02NzItXG5tbS9LY29uZmlnOjY3Mzpjb25maWcgTlVNQV9NSUdSQVRJT05cbm1tL0tjb25maWctNjc0LVx0Ym9vbCBcJiMzNDtOVU1BIHBhZ2UgbWlncmF0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy02ODMtXG5tbS9LY29uZmlnOjY4NDpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4NS1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTY4Ny1cbm1tL0tjb25maWc6Njg4OmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4OS1cdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctNjkwLVxubW0vS2NvbmZpZzo2OTE6Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxubW0vS2NvbmZpZy02OTItXHRib29sXG5tbS9LY29uZmlnLTY5My1cbm1tL0tjb25maWc6Njk0OmNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xubW0vS2NvbmZpZy02OTUtXHRib29sXG5tbS9LY29uZmlnLTY5Ni1cbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy02OTgtXHRkZWZfYm9vbCBuXG4tLVxubW0vS2NvbmZpZy03MDYtXG5tbS9LY29uZmlnOjcwNzpjb25maWcgQ09OVElHX0FMTE9DXG5tbS9LY29uZmlnLTcwOC1cdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFx1MDAyNlx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcbm1tL0tjb25maWctNzA5LVxubW0vS2NvbmZpZzo3MTA6Y29uZmlnIFBDUF9CQVRDSF9TQ0FMRV9NQVhcbm1tL0tjb25maWctNzExLVx0aW50IFwmIzM0O01heGltdW0gc2NhbGUgZmFjdG9yIG9mIFBDUCAoUGVyLUNQVSBwYWdlc2V0KSBiYXRjaCBhbGxvY2F0ZS9mcmVlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy03MjAtXG5tbS9LY29uZmlnOjcyMTpjb25maWcgUEhZU19BRERSX1RfNjRCSVRcbm1tL0tjb25maWctNzIyLVx0ZGVmX2Jvb2wgNjRCSVRcbm1tL0tjb25maWctNzIzLVxubW0vS2NvbmZpZzo3MjQ6Y29uZmlnIE1NVV9OT1RJRklFUlxubW0vS2NvbmZpZy03MjUtXHRib29sXG4tLVxubW0vS2NvbmZpZy03MjctXG5tbS9LY29uZmlnOjcyODpjb25maWcgS1NNXG5tbS9LY29uZmlnLTcyOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy03NDItXG5tbS9LY29uZmlnOjc0Mzpjb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXG5tbS9LY29uZmlnLTc0NC1cdGludCBcJiMzNDtMb3cgYWRkcmVzcyBzcGFjZSB0byBwcm90ZWN0IGZyb20gdXNlciBhbGxvY2F0aW9uXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy03NjEtXG5tbS9LY29uZmlnOjc2Mjpjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjMtXHRib29sXG5tbS9LY29uZmlnLTc2NC1cbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWctNzc2LVxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxubW0vS2NvbmZpZy03NzgtXHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuLS1cbm1tL0tjb25maWctNzgxLVxubW0vS2NvbmZpZzo3ODI6Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1Ncbm1tL0tjb25maWctNzgzLVx0aW50IFwmIzM0O1R1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctODA5LVxubW0vS2NvbmZpZzo4MTA6Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcbm1tL0tjb25maWctODExLVx0Ym9vbFxubW0vS2NvbmZpZy04MTItXG5tbS9LY29uZmlnOjgxMzpjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxubW0vS2NvbmZpZy04MTQtXHRkZWZfYm9vbCBuXG5tbS9LY29uZmlnLTgxNS1cbm1tL0tjb25maWc6ODE2OmNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xubW0vS2NvbmZpZy04MTctXHRib29sIFwmIzM0O0FsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04MzEtXG5tbS9LY29uZmlnOjgzMjpjb25maWcgTU1fSURcbm1tL0tjb25maWctODMzLVx0ZGVmX2Jvb2wgblxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTk2OT1lbmRjaG9pY2Vcbm1tL0tjb25maWctOTcwLVxubW0vS2NvbmZpZzo5NzE6Y29uZmlnIFRIUF9TV0FQXG5tbS9LY29uZmlnLTk3Mi1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnLTk4MC1cbm1tL0tjb25maWc6OTgxOmNvbmZpZyBOT19QQUdFX01BUENPVU5UXG5tbS9LY29uZmlnLTk4Mi1cdGJvb2wgXCYjMzQ7Tm8gcGVyLXBhZ2UgbWFwY291bnQgKEVYUEVSSU1FTlRBTClcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk4Ni1cbm1tL0tjb25maWc6OTg3Olx0ICBXaGVuIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLCBzb21lIGludGVyZmFjZXMgdGhhdCByZWxpZWQgb25cbm1tL0tjb25maWctOTg4LVx0ICB0aGlzIGluZm9ybWF0aW9uIHdpbGwgcmVseSBvbiBsZXNzLXByZWNpc2UgcGVyLWFsbG9jYXRpb24gaW5mb3JtYXRpb25cbi0tXG5tbS9LY29uZmlnPTk5ND1lbmRpZiAjIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4tLVxubW0vS2NvbmZpZy05OTYtIyBzaW1wbGUgaGVscGVyIHRvIG1ha2UgdGhlIGNvZGUgYSBiaXQgZWFzaWVyIHRvIHJlYWRcbm1tL0tjb25maWc6OTk3OmNvbmZpZyBQQUdFX01BUENPVU5UXG5tbS9LY29uZmlnLTk5OC1cdGRlZl9ib29sICFOT19QQUdFX01BUENPVU5UXG4tLVxubW0vS2NvbmZpZy0xMDAyLSNcbm1tL0tjb25maWc6MTAwMzpjb25maWcgUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNcbm1tL0tjb25maWctMTAwNC1cdGRlZl9ib29sIFRSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWctMTAwOC0jXG5tbS9LY29uZmlnOjEwMDk6Y29uZmlnIEhBVkVfR0lHQU5USUNfRk9MSU9TXG5tbS9LY29uZmlnLTEwMTAtXHRkZWZfYm9vbCAoSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19HSUdBTlRJQ19QQUdFKSB8fCBcXFxuLS1cbm1tL0tjb25maWctMTAxMi1cbm1tL0tjb25maWc6MTAxMzpjb25maWcgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVxubW0vS2NvbmZpZy0xMDE0LVx0ZGVmX2Jvb2wgblxuLS1cbm1tL0tjb25maWctMTAxNi0jIFRPRE86IEFsbG93IHRvIGJlIGVuYWJsZWQgd2l0aG91dCBUSFBcbm1tL0tjb25maWc6MTAxNzpjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUFxubW0vS2NvbmZpZy0xMDE4LVx0ZGVmX2Jvb2wgblxuLS1cbm1tL0tjb25maWctMTAyMC1cbm1tL0tjb25maWc6MTAyMTpjb25maWcgQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG5tbS9LY29uZmlnLTEwMjItXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZy0xMDI0LVxubW0vS2NvbmZpZzoxMDI1OmNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbm1tL0tjb25maWctMTAyNi1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnLTEwMzItI1xubW0vS2NvbmZpZzoxMDMzOmNvbmZpZyBBUkNIX01PRFVMRV9ORUVEU19XRUFLX1BFUl9DUFVcbm1tL0tjb25maWctMTAzNC0gICAgICAgYm9vbFxuLS1cbm1tL0tjb25maWctMTAzOC0jXG5tbS9LY29uZmlnOjEwMzk6Y29uZmlnIE5FRURfUEVSX0NQVV9LTVxubW0vS2NvbmZpZy0xMDQwLVx0ZGVwZW5kcyBvbiAhU01QIHx8ICFNTVVcbi0tXG5tbS9LY29uZmlnLTEwNDMtXG5tbS9LY29uZmlnOjEwNDQ6Y29uZmlnIE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xubW0vS2NvbmZpZy0xMDQ1LVx0Ym9vbFxubW0vS2NvbmZpZy0xMDQ2LVxubW0vS2NvbmZpZzoxMDQ3OmNvbmZpZyBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xubW0vS2NvbmZpZy0xMDQ4LVx0Ym9vbFxubW0vS2NvbmZpZy0xMDQ5LVxubW0vS2NvbmZpZzoxMDUwOmNvbmZpZyBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRFxubW0vS2NvbmZpZy0xMDUxLVx0Ym9vbFxubW0vS2NvbmZpZy0xMDUyLVxubW0vS2NvbmZpZzoxMDUzOmNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxubW0vS2NvbmZpZy0xMDU0LVx0Ym9vbFxubW0vS2NvbmZpZy0xMDU1LVxubW0vS2NvbmZpZzoxMDU2OmNvbmZpZyBDTUFcbm1tL0tjb25maWctMTA1Ny1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDcwLVxubW0vS2NvbmZpZzoxMDcxOmNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDcyLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNzYtXG5tbS9LY29uZmlnOjEwNzc6Y29uZmlnIENNQV9TWVNGU1xubW0vS2NvbmZpZy0xMDc4LVx0Ym9vbCBcJiMzNDtDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODMtXG5tbS9LY29uZmlnOjEwODQ6Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDg1LVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5Ni0jXG5tbS9LY29uZmlnOjEwOTc6IyBTZWxlY3QgdGhpcyBjb25maWcgb3B0aW9uIGZyb20gdGhlIGFyY2hpdGVjdHVyZSBLY29uZmlnLCBpZiBhdmFpbGFibGUsIHRvIHNldFxubW0vS2NvbmZpZy0xMDk4LSMgdGhlIG1heCBwYWdlIG9yZGVyIGZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYWxsb2NhdGlvbnMuXG5tbS9LY29uZmlnLTEwOTktI1xubW0vS2NvbmZpZzoxMTAwOmNvbmZpZyBBUkNIX0ZPUkNFX01BWF9PUkRFUlxubW0vS2NvbmZpZy0xMTAxLVx0aW50XG4tLVxubW0vS2NvbmZpZy0xMTA3LSNcbm1tL0tjb25maWc6MTEwODpjb25maWcgUEFHRV9CTE9DS19NQVhfT1JERVJcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM1MwoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA0MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSFAgQ29sbGFwc2UgUGF0Y2gqKgoKT2theSwgdGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBrZXkgY29uZmlnIGhlcmUsIHRoZSBlbmFibGVyIGZvciBraHVnZXBhZ2VkLCBhbmQgdGhhdCB1bmRlciBpdCwgdGhlIHN5c3RlbSBkZWZhdWx0cyBmb3IgVEhQIGFyZSBpbXBsaWNpdGx5IGluY2x1ZGVkLgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmb2N1cyBzeW1ib2xzLi4uIHJpZ2h0LCBpdCYjMzk7cyBgY29sbGFwc2VfZmlsZWAsIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSBuZWVkIHRvIGV4cGxhaW4gdGhlIHJlYXNvbmluZyBjbGVhcmx5LiBUaGUgcGF0Y2ggaXMgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgYmVoYXZpb3Igd2l0aGluIGBjb2xsYXBzZV9maWxlKClgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG5vdyB0YWtpbmcgdGhlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKWAgYWNyb3NzIHRoZSBlbnRpcmUgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbiwgaW5jbHVkaW5nIHRoZSBjYWxsIHRvIGBhbGxvY19jaGFyZ2VfZm9saW8oKWAuIEFkZGl0aW9uYWxseSwgaXQgcmVwbGFjZXMgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAgd2l0aCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKWAuIFRoaXMgaW1wYWN0cyBjb3JlIE1NIGNvbmN1cnJlbmN5LCBsb2NraW5nIG9yZGVycyDigJMgaW52YWxpZGF0ZSBsb2NrIHZlcnN1cyBmb2xpbyBsb2NrcyB2ZXJzdXMgcmVjbGFpbSBhbmQgdHJ1bmNhdGUgaW50ZXJhY3Rpb25zIOKAkyBhbmQgcmVhZGFoZWFkIGxpbWl0cy4gUmVtZW1iZXIsIHRoaXMgbG9naWMgaXMgdHJpZ2dlcmVkIGJ5IGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBhbmQga2h1Z2VwYWdlZCBzY2FubmluZy4KClRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBzaW1wbGUgZW5vdWdoLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUganVzdCBgWyYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0O11gLiBBbmQsIGFzIHdlJiMzOTt2ZSByZXZpZXdlZCwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgWyYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LCAmIzM0O2NvbGxhcHNlX3NjYW5fZmlsZSYjMzQ7LCAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OywgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDtdYC4KCkhvbGQgb24sIGxldCBtZSBkb3VibGUtY2hlY2suIEFtIEkgbWlzc2luZyBhbnl0aGluZywgb3IgaXMgdGhlcmUgc29tZSBvdGhlciBmdW5jdGlvbiBpbiB0aGlzIHNwYWNlIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkPyBBaCwgcmlnaHQsIGBhbGxvY19jaGFyZ2VfZm9saW9gLi4uIEJ1dCB0aGF0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGtodWdlcGFnZWQsIGFuZCAqc3BlY2lmaWNhbGx5KiBieSBgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluYCwgYGNvbGxhcHNlX2h1Z2VfcGFnZWAgYW5kIGBjb2xsYXBzZV9maWxlYC4gSG93ZXZlciwgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgY29sbGFwc2VfZmlsZWAsIGFuZCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmcm9tIHVzZXJzcGFjZSBpcyBgbWFkdmlzZV9jb2xsYXBzZWAuIFNvLCB0aGUgaW5pdGlhbCBmb2N1cyBpcyBjb3JyZWN0LiBUaG9zZSBmb3VyIGFyZSB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGVtcGhhc2l6ZS4KCk9rYXksIGFsbCBzZXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2xsYXBzZV9maWxlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NjYW5fZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zaW5nbGVfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2xsYXBzZV9maWxlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NjYW5fZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zaW5nbGVfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL2todWdlcGFnZWQuYyB0byBhZGp1c3QgbG9ja2luZyBvcmRlciBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIHByaW9yIHRvIHRha2luZyBmb2xpbyBsb2NrcywgYW5kIGludm9rZXMgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSBpbnN0ZWFkIG9mIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGFuZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCBib3VuZHMuIFRoZSByZWFkYWhlYWRfY29udHJvbCBzdHJ1Y3R1cmUgKHJhY3RsKSBpcyBpbml0aWFsaXplZCB1c2luZyBERUZJTkVfUkVBREFIRUFEIChDOTkgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZW5zdXJpbmcgYWxsIHVubWVudGlvbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIGludHJvZHVjZWQsIG1vZGlmaWVkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgZGVidWcga2VybmVscyAoS0FTQU4gYnVpbGRzKSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjlkMjExNjVhNzFmZTNhZTdiNjMwYjFhMTZmNWZjZDNkMTRiZWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6MzU6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmMKaW5kZXggMTFmZjk4ZDU1Yzc2ZS4uNjkwY2NiY2RmNTkzOCAxMDA2NDQKLS0tIGEvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuYwpAQCAtMjI2Nyw2ICYjNDM7MjI2NywxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJVk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSAmYW1wOyZhbXA7ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTsKIAlWTV9XQVJOX09OX09OQ0Uoc3RhcnQgJmFtcDsgKEhQQUdFX1BNRF9OUiAtIDEpKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3cKJiM0MzsJICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFpc19zaG1lbSkKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsKJiM0MzsKIAlyZXN1bHQgPSBhbGxvY19jaGFyZ2VfZm9saW8oJmFtcDtuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTsKIAlpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkKIAkJZ290byBvdXQ7CkBAIC0yMzM3LDEwICYjNDM7MjM0NCwyMCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQl9CiAJCX0gZWxzZSB7CS8qICFpc19zaG1lbSAqLwogCQkJaWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHsKJiM0MzsJCQkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgJmFtcDtmaWxlLSZndDtmX3JhLAomIzQzOwkJCQkJCSAgbWFwcGluZywgaW5kZXgpOwomIzQzOwkJCQlwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLSZndDtob3N0KSwKJiM0MzsJCQkJCQkJICAgIFBBR0VfU0laRSk7CiYjNDM7CiAJCQkJeGFzX3VubG9ja19pcnEoJmFtcDt4YXMpOwotCQkJCXBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgJmFtcDtmaWxlLSZndDtmX3JhLAotCQkJCQkJCSAgZmlsZSwgaW5kZXgsCi0JCQkJCQkJICBlbmQgLSBpbmRleCk7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LgomIzQzOwkJCQkgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZAomIzQzOwkJCQkgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKGluZGV4ICZsdDsgZW9mKQomIzQzOwkJCQkJcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoJmFtcDtyYWN0bCwKJiM0MzsJCQkJCQltaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApOwogCQkJCS8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi8KIAkJCQlscnVfYWRkX2RyYWluKCk7CiAJCQkJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpOwpAQCAtMjY3Miw2ICYjNDM7MjY4OSw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlmb2xpb191bmxvY2sobmV3X2ZvbGlvKTsKIAlmb2xpb19wdXQobmV3X2ZvbGlvKTsKIG91dDoKJiM0MzsJaWYgKCFpc19zaG1lbSkKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwogCVZNX0JVR19PTighbGlzdF9lbXB0eSgmYW1wO3BhZ2VsaXN0KSk7CiAJdHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUga2h1Z2VwYWdlZCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZpcnN0IGltcHJlc3Npb24gaXMgdGhhdCBpdCBkZWFscyB3aXRoIHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiBjb21wbGV4IG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgdGVuZCB0byBvY2N1ci4gIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIG9yZGVyaW5nIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KCkxvb2tpbmcgYXQgdGhlIGRpZmYsIHRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGZpbGUgbWFwcGluZyBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24gYW5kIGhhbmRsaW5nIG9mIHRoZSBgaW52YWxpZGF0ZV9sb2NrYC4gIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAgYW5kIGBmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZGAgYWxvbmcgd2l0aCB0aGUgYERFRklORV9SRUFEQUhFQURgIG1hY3JvIGNhdGNoZXMgbXkgZXllIGltbWVkaWF0ZWx5LiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIHRyeWluZyB0byBpbXByb3ZlIHRoZSByZWFkYWhlYWQgbG9naWMsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgYnV0IGFzIHdlIGFsbCBrbm93IHRoZXNlIHR5cGVzIG9mIGNoYW5nZXMgY2FuIG9mdGVuIGludHJvZHVjZSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGlzc3Vlcy4KClRoZSBjb21tZW50IGFib3V0IHRha2luZyBgaW52YWxpZGF0ZV9sb2NrYCBiZWZvcmUgYW55IGZvbGlvIGxvY2sgaXMgY3J1Y2lhbC4gIFRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBsb2NraW5nIG9yZGVyLCBwb3RlbnRpYWxseSB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBpbXByb3ZlIGNvbmN1cnJlbmN5LiBUaGUgb2xkIGxvY2tpbmcgb3JkZXIgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuIFdhcyB0aGVyZSBhIGtub3duIGlzc3VlIHRoYXQgbGVkIHRvIHRoaXMgcmVvcmRlcmluZz8KClRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIHNlZW1zIGltcG9ydGFudCBhcyBhIHJlcGxhY2VtZW50IGZvciBhIHByZXZpb3VzIHJlYWRhaGVhZCBjYWxsLiBUaGUgbm90ZSBhYm91dCBFT0YgbWFrZXMgbWUgdGhpbmsgdGhlIG9sZCBiZWhhdmlvciBjb3VsZCBoYXZlIGNhdXNlZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgY29tbWVudCBhYm91dCBpbnZhbGlkYXRlX2xvY2sgYmVpbmcgaGVsZCBhYm92ZSBpcyBhbHNvIGltcG9ydGFudC4KCk92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIGZhaXJseSB0YXJnZXRlZCBjaGFuZ2UsIGFuZCBub3QgYSBtYXNzaXZlIHJlZmFjdG9yLiBCdXQsIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGEgc2VlbWluZ2x5IHNtYWxsIGNoYW5nZSBjYW4gaGF2ZSBmYXItcmVhY2hpbmcgY29uc2VxdWVuY2VzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIG5ldyByZWFkYWhlYWQgbWVjaGFuaXNtIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuICBJJiMzOTtsbCB3YW50IHRvIGluc3BlY3QgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGhvdyBgaW52YWxpZGF0ZV9sb2NrYCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gbG9ja2luZyBhbmQgdGhlIHJlYWRhaGVhZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBLTVNBTiB0byByZXZlYWwgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJIHNob3VsZCB1c2UgZ3JlcHBlciBvciByZWFkLWZpbGUgb24gYG1tL2todWdlcGFnZWQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgY29kZS4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGBpZiAoIWlzX3NobWVtKWAgYmxvY2ssIHRvIHNlZSBob3cgdGhlIG5ldyBsb2NraW5nIGFuZCByZWFkYWhlYWQgZnVuY3Rpb25zIGFyZSB1c2VkLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgSSBnZXQgZnJvbSB0aGVzZSBjaGVja3MsIEkmIzM5O2xsIGJlIGFibGUgdG8gdGVsbCBpZiBLTVNBTiBzaG91bGQgYmUgYXBwbGllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNjA6XHRcbjIyNjE6XHRcdC8qXG4yMjYyOlx0XHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxuMjI2MzpcdFx0ICpcbjIyNjQ6XHRcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xuMjI2NTpcdFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxuMjI2NjpcdFx0ICovXG4yMjY3Olx0XHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XG4yMjY4Olx0XHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XG4yMjY5Olx0XG4yMjcwOlx0XHQvKlxuMjI3MTpcdFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4yMjcyOlx0XHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXG4yMjczOlx0XHQgKi9cbjIyNzQ6XHRcdGlmICghaXNfc2htZW0pXG4yMjc1Olx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbjIyNzY6XHRcbjIyNzc6XHRcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcbjIyNzg6XHRcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuMjI3OTpcdFx0XHRnb3RvIG91dDtcbjIyODA6XHRcbjIyODE6XHRcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuMjI4MjpcdFxuMjI4MzpcdFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG4yMjg0Olx0XHRpZiAoaXNfc2htZW0pXG4yMjg1Olx0XHRcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQobmV3X2ZvbGlvKTtcbjIyODY6XHRcdG5ld19mb2xpby1cdTAwM2VpbmRleCA9IHN0YXJ0O1xuMjI4NzpcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xuMjI4ODpcdFxuMjI4OTpcdFx0LypcbjIyOTA6XHRcdCAqIEVuc3VyZSB3ZSBoYXZlIHNsb3RzIGZvciBhbGwgdGhlIHBhZ2VzIGluIHRoZSByYW5nZS4gIFRoaXMgaXNcbjIyOTE6XHRcdCAqIGFsbW9zdCBjZXJ0YWlubHkgYSBuby1vcCBiZWNhdXNlIG1vc3Qgb2YgdGhlIHBhZ2VzIG11c3QgYmUgcHJlc2VudFxuMjI5MjpcdFx0ICovXG4yMjkzOlx0XHRkbyB7XG4yMjk0Olx0XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjI5NTpcdFx0XHR4YXNfY3JlYXRlX3JhbmdlKFx1MDAyNnhhcyk7XG4yMjk2Olx0XHRcdGlmICgheGFzX2Vycm9yKFx1MDAyNnhhcykpXG4yMjk3Olx0XHRcdFx0YnJlYWs7XG4yMjk4Olx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMjk5Olx0XHRcdGlmICgheGFzX25vbWVtKFx1MDAyNnhhcywgR0ZQX0tFUk5FTCkpIHtcbjIzMDA6XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XG4yMzAxOlx0XHRcdFx0Z290byByb2xsYmFjaztcbjIzMDI6XHRcdFx0fVxuMjMwMzpcdFx0fSB3aGlsZSAoMSk7XG4yMzA0Olx0XG4yMzA1Olx0XHRmb3IgKGluZGV4ID0gc3RhcnQ7IGluZGV4IFx1MDAzYyBlbmQ7KSB7XG4yMzA2Olx0XHRcdHhhc19zZXQoXHUwMDI2eGFzLCBpbmRleCk7XG4yMzA3Olx0XHRcdGZvbGlvID0geGFzX2xvYWQoXHUwMDI2eGFzKTtcbjIzMDg6XHRcbjIzMDk6XHRcdFx0Vk1fQlVHX09OKGluZGV4ICE9IHhhcy54YV9pbmRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBraHVnZXBhZ2VkLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGh1Z2VwYWdlcywgYW5kIHRoZSBkaXNjdXNzaW9uIGhhcyBkcmlmdGVkIHRvd2FyZHMgcG90ZW50aWFsIGlzc3Vlcywgb3IgcGVyaGFwcyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHRoaW5rIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCB0aGlzIGRlZXAgZGl2ZSBpcyB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AuIFRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lcyAyMzMwLTIzODAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMsIGFuZCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IG1pc21hbmFnaW5nLCBodWdlcGFnZXMgaW4gYSBzcGVjaWZpYyBzY2VuYXJpby4gSSYjMzk7bGwgbmVlZCB0byBzZWUgd2hhdCB0aG9zZSBsaW5lcyBhcmUgYWN0dWFsbHkgKmRvaW5nKiB0byBnZXQgYSBwcm9wZXIgaGFuZGxlIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzMwOlx0XHRcdFx0XHQvKiBzd2FwIGluIG9yIGluc3RhbnRpYXRlIGZhbGxvY2F0ZWQgcGFnZSAqL1xuMjMzMTpcdFx0XHRcdFx0aWYgKHNobWVtX2dldF9mb2xpbyhtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCAwLFxuMjMzMjpcdFx0XHRcdFx0XHRcdFx1MDAyNmZvbGlvLCBTR1BfTk9BTExPQykpIHtcbjIzMzM6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjMzNDpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjMzNTpcdFx0XHRcdFx0fVxuMjMzNjpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjMzNzpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjMzODpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzMzk6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzQwOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM0MTpcdFx0XHRcdH0gZWxzZSB7XG4yMzQyOlx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbjIzNDM6XHRcdFx0XHRcdGdvdG8geGFfbG9ja2VkO1xuMjM0NDpcdFx0XHRcdH1cbjIzNDU6XHRcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuMjM0NjpcdFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4yMzQ3Olx0XHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4yMzQ4Olx0XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4yMzQ5Olx0XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuMjM1MDpcdFx0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4yMzUxOlx0XG4yMzUyOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM1MzpcdFx0XHRcdFx0LypcbjIzNTQ6XHRcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuMjM1NTpcdFx0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbjIzNTY6XHRcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4yMzU3Olx0XHRcdFx0XHQgKi9cbjIzNTg6XHRcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuMjM1OTpcdFx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbjIzNjA6XHRcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuMjM2MTpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM2MjpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM2MzpcdFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuMjM2NDpcdFx0XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjIzNjU6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjM2NjpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM2NzpcdFx0XHRcdFx0fVxuMjM2ODpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbjIzNjk6XHRcdFx0XHRcdC8qXG4yMzcwOlx0XHRcdFx0XHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJiMzOTt0XG4yMzcxOlx0XHRcdFx0XHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXG4yMzcyOlx0XHRcdFx0XHQgKlxuMjM3MzpcdFx0XHRcdFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxuMjM3NDpcdFx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG4yMzc1Olx0XHRcdFx0XHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXG4yMzc2Olx0XHRcdFx0XHQgKiB0aGVpciBmb2xpb3MgZGlydHkgYXQgYW55IHRpbWU7IGJsaW5kbHlcbjIzNzc6XHRcdFx0XHRcdCAqIGZsdXNoaW5nIHRoZW0gd291bGQgY2F1c2UgdW5kZXNpcmFibGVcbjIzNzg6XHRcdFx0XHRcdCAqIHN5c3RlbS13aWRlIHdyaXRlYmFjay5cbjIzNzk6XHRcdFx0XHRcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyBgY29sbGFwc2VfZmlsZWAgYXJvdW5kIHRoZSBgb3V0OmAgSW5kaWNhdG9yKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG9iamVjdGl2ZSBoZXJlIGlzIGNsZWFybHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYmVoYXZlcyBuZWFyIHRoZSBgb3V0OmAgbWFya2VyIHdpdGhpbiB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgaG9saXN0aWMgdmlldywgbm90IGp1c3QgaXNvbGF0ZSB0aGUgc25pcHBldC4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0JiMzOTtzIHRoZSBjb250ZXh0PyYjMzQ7IFdoYXQmIzM5O3MgaGFwcGVuaW5nICpiZWZvcmUqIHRoYXQgYG91dDpgIGxhYmVsLCBhbmQgd2hhdCBmb2xsb3dzPyBVbmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoYXQgcG9pbnQgaXMgY3JpdGljYWwuIElzIGl0IGEgY29uZGl0aW9uYWw/IEEgbG9vcD8gV2hhdCBhcmUgdGhlIHZhcmlhYmxlcyBpbiBzY29wZSBhdCB0aGF0IGxvY2F0aW9uPyBBcmUgdGhlcmUgc2lkZSBlZmZlY3RzIGJlaW5nIG1hbmFnZWQ/CgpJJiMzOTttIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggaXQsIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIElzIHRoaXMgYSBmaWxlIGhhbmRsZSwgYSBzdHJpbmcsIGEgbGlzdCwgYSBkaWN0aW9uYXJ5PyBJcyBpdCBnZW5lcmF0aW5nIHNvbWUgc29ydCBvZiBvdXRwdXQgZmlsZT8gV2hhdCYjMzk7cyB0aGUgb3ZlcmFyY2hpbmcgcHVycG9zZSBvZiBgY29sbGFwc2VfZmlsZWA/IEFtIEkgbG9va2luZyBhdCBmaWxlIEkvTyBvcGVyYXRpb25zLCBkYXRhIHRyYW5zZm9ybWF0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpNeSBtaW5kIGlzIGFsc28gY2hlY2tpbmcgZm9yIHRoZSBlZGdlIGNhc2VzLiBFcnJvciBoYW5kbGluZz8gRGF0YSB2YWxpZGF0aW9uPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIGx1cmtpbmcgbmVhciB0aGF0IGBvdXQ6YCBpbmRpY2F0b3IgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgYnVncz8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBwb3NzaWJsZSBwYXRocyBvZiBleGVjdXRpb24gdGhyb3VnaCB0aGF0IGFyZWEgb2YgdGhlIGNvZGUuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBleGVjdXRpb24gcHJvZmlsZSBjZW50ZXJlZCBhcm91bmQgdGhlIGBvdXQ6YCBsYWJlbCB0byBidWlsZCBhbiBhY2N1cmF0ZSBtZW50YWwgbW9kZWwgZm9yIHRoZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NzA6XHRcbjI2NzE6XHRyb2xsYmFjazpcbjI2NzI6XHRcdC8qIFNvbWV0aGluZyB3ZW50IHdyb25nOiByb2xsIGJhY2sgcGFnZSBjYWNoZSBjaGFuZ2VzICovXG4yNjczOlx0XHRpZiAobnJfbm9uZSkge1xuMjY3NDpcdFx0XHR4YXNfbG9ja19pcnEoXHUwMDI2eGFzKTtcbjI2NzU6XHRcdFx0bWFwcGluZy1cdTAwM2VucnBhZ2VzIC09IG5yX25vbmU7XG4yNjc2Olx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yNjc3Olx0XHRcdHNobWVtX3VuY2hhcmdlKG1hcHBpbmctXHUwMDNlaG9zdCwgbnJfbm9uZSk7XG4yNjc4Olx0XHR9XG4yNjc5Olx0XG4yNjgwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXHUwMDI2cGFnZWxpc3QsIGxydSkge1xuMjY4MTpcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuMjY4MjpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjY4MzpcdFx0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG4yNjg0Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4yNjg1Olx0XHR9XG4yNjg2Olx0XG4yNjg3Olx0XHRuZXdfZm9saW8tXHUwMDNlbWFwcGluZyA9IE5VTEw7XG4yNjg4Olx0XG4yNjg5Olx0XHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcbjI2OTA6XHRcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xuMjY5MTpcdG91dDpcbjI2OTI6XHRcdGlmICghaXNfc2htZW0pXG4yNjkzOlx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuMjY5NDpcdFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG4yNjk1Olx0XHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XG4yNjk2Olx0XHRyZXR1cm4gcmVzdWx0O1xuMjY5NzpcdH1cbjI2OTg6XHRcbjI2OTk6XHRzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4yNzAwOlx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsXG4yNzAxOlx0XHRcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbjI3MDI6XHR7XG4yNzAzOlx0XHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZSA9IGNvbGxhcHNlX21heF9wdGVzX25vbmUoY2MsIE5VTEwsIEhQQUdFX1BNRF9PUkRFUik7XG4yNzA0Olx0XHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfc3dhcCA9IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoY2MsIEhQQUdFX1BNRF9PUkRFUik7XG4yNzA1Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbjI3MDY6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4yNzA3Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcywgc3RhcnQpO1xuMjcwODpcdFx0aW50IHByZXNlbnQsIHN3YXA7XG4yNzA5Olx0XHRpbnQgbm9kZSA9IE5VTUFfTk9fTk9ERTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGtodWdlcGFnZWQuYyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBjb2xsYXBzZV9maWxlYCB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZS4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGZpbGUgbWFwcGluZyBpbnZhbGlkYXRpb24gbG9jayBhbmQgdGhlIHJlYWQtYWhlYWQgbWVjaGFuaXNtLgoKVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIGxvY2suICBCZWZvcmUsIHRoaXMgbG9jayB3YXMgdGFrZW4gd2l0aGluIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCwgYnV0IG9ubHkgKmFmdGVyKiBhY3F1aXJpbmcgZm9saW8gbG9ja3MgKGZvciBgIWlzX3NobWVtYCkuIFRoZSBwYXRjaCBub3cgdGFrZXMgdGhlIHNoYXJlZCBpbnZhbGlkYXRpb24gbG9jayAqYmVmb3JlKiBmb2xpbyBsb2NrIGFjcXVpc2l0aW9uLCBhbmQgaG9sZHMgaXQgZm9yIHRoZSBlbnRpcmUgY29sbGFwc2Ugb3BlcmF0aW9uLiAgVGhpcyBpcyBhIGNsYXNzaWMgZGVhZGxvY2sgYXZvaWRhbmNlIHN0cmF0ZWd5IOKAkyB0aGUgZHJlYWRlZCBsb2NrIGludmVyc2lvbi4KClRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGFwcHJvYWNoIG9mIGdyYWJiaW5nIHRoZSBmb2xpbyBsb2NrcywgdGhlbiBjYWxsaW5nIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCwgY291bGQgY3JlYXRlIGEgZGVhZGxvY2sgc2NlbmFyaW8uICBgY29sbGFwc2VfZmlsZWAgcG90ZW50aWFsbHkgd291bGQgYmUgd2FpdGluZyBvbiB0aGUgZm9saW8gbG9ja3Mgd2hpbGUgdHJ1bmNhdGUsIGhvbGRpbmcgdGhlIGludmFsaWRhdGUgbG9jaywgd2FpdGVkIG9uIHRoZSBgY29sbGFwc2VfZmlsZWAgdG8gcmVsZWFzZSBmb2xpbyBsb2NrcyB3aGljaCB3b3VsZCB0aGVuIG1ha2UgdGhlIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBmdW5jdGlvbiB0cnkgdG8gdGFrZSB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAuIFRoaXMgc2VxdWVuY2UgaXMgYSByZWNpcGUgZm9yIGxvY2sgaW52ZXJzaW9uIGFuZCwgbW9yZSBjb25jZXJuaW5nLCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2tkZXAgd2FybmluZ3MuCgpUaGUgZml4PyAgU2hpZnQgdGhlIGludmFsaWRhdGlvbiBsb2NrIGFjcXVpc2l0aW9uIHVwLWZyb250LiBBbmQgdGhhdCBtYWtlcyB0aGUgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIGNhbGwgcHJvYmxlbWF0aWMuIEl0JiMzOTtzIGJlZW4gcmVwbGFjZWQgd2l0aCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgLCB3aGljaCBkb2VzbiYjMzk7dCBpbnRlcm5hbGx5IHRyeSB0byBncmFiIHRoZSBzaGFyZWQgaW52YWxpZGF0aW9uIGxvY2suIEl0IHNlZW1zIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgKmV4cGVjdHMqIHRoZSBpbnZhbGlkYXRpb24gbG9jayB0byBhbHJlYWR5IGJlIGhlbGQsIG9yIGl0IHNpbXBseSBkb2VzbiYjMzk7dCBncmFiIGl0IGF0IGFsbC4KCkkgYWxzbyBub3RpY2UgdGhlIGFkZGl0aW9uIG9mIGBERUZJTkVfUkVBREFIRUFEYCBhbmQgdGhlIEVPRiBjaGVjazogYGlmIChpbmRleCAmbHQ7IGVvZilgLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IGNsYW1wIHRoZSByZWFkLWFoZWFkIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIFNvLCB0aGV5JiMzOTt2ZSBhZGRlZCB0aGlzIGV4cGxpY2l0IGNsYW1wIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgcmVhZCBwYXN0IHRoZSBmaWxlIHNpemUuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4KTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGV4cGFuc2lvbiBvZiBgREVGSU5FX1JFQURBSEVBRGAgaW4gbW9yZSBkZXRhaWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IG1hY3JvIGlzIGFjdHVhbGx5IGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIERFRklORV9SRUFEQUhFQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDA4PXN0cnVjdCByZWFkYWhlYWRfY29udHJvbCB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQyMC1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MjE6I2RlZmluZSBERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmLCByLCBtLCBpKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MjItXHRzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGwgPSB7XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUGFnZW1hcCBIZWFkZXIqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb3IgaW52ZXN0aWdhdGUgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHBhZ2UgY2FjaGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVk0uIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSAxNDIwLiBJJiMzOTttIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMsIG9yIGF0IGxlYXN0IHRoZSByZWxldmFudCBkZWNsYXJhdGlvbnMsIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBmbGFncywgbG9ja2luZyBtZWNoYW5pc21zLCBvciBwb3NzaWJseSB0aGUgbGlua2FnZSBiZXR3ZWVuIHBhZ2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGlub2Rlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDE1Olx0XHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xuMTQxNjpcdFx0Ym9vbCBkcm9wYmVoaW5kO1xuMTQxNzpcdFx0Ym9vbCBfd29ya2luZ3NldDtcbjE0MTg6XHRcdHVuc2lnbmVkIGxvbmcgX3BmbGFncztcbjE0MTk6XHR9O1xuMTQyMDpcdFxuMTQyMTpcdCNkZWZpbmUgREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZiwgciwgbSwgaSlcdFx0XHRcdFxcXG4xNDIyOlx0XHRzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGwgPSB7XHRcdFx0XHRcXFxuMTQyMzpcdFx0XHQuZmlsZSA9IGYsXHRcdFx0XHRcdFx0XFxcbjE0MjQ6XHRcdFx0Lm1hcHBpbmcgPSBtLFx0XHRcdFx0XHRcdFxcXG4xNDI1Olx0XHRcdC5yYSA9IHIsXHRcdFx0XHRcdFx0XFxcbjE0MjY6XHRcdFx0Ll9pbmRleCA9IGksXHRcdFx0XHRcdFx0XFxcbjE0Mjc6XHRcdH1cbjE0Mjg6XHRcbjE0Mjk6XHQjZGVmaW5lIFZNX1JFQURBSEVBRF9QQUdFU1x0KFNaXzEyOEsgLyBQQUdFX1NJWkUpXG4xNDMwOlx0XG4xNDMxOlx0dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKixcbjE0MzI6XHRcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWFkLCB1bnNpZ25lZCBsb25nIGxvb2thaGVhZF9jb3VudCk7XG4xNDMzOlx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHVuc2lnbmVkIGxvbmcgcmVxX2NvdW50KTtcbjE0MzQ6XHR2b2lkIHBhZ2VfY2FjaGVfYXN5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHN0cnVjdCBmb2xpbyAqLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTU5CgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDEyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjoga2h1Z2VwYWdlZCBSZWFkYWhlYWQgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgREVGSU5FX1JFQURBSEVBRGAgbWFjcm8gdXNlcyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggaXMgc3RhbmRhcmQgQzsgYW55IHVuc3BlY2lmaWVkIGZpZWxkcyB3aWxsIGJlIHplcm9lZCBvdXQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgZm9yIGFueSBwb3RlbnRpYWwgS01TQU4gaW1wbGljYXRpb25zLgoKTm93LCB0aGUgbWFpbiBwb2ludDogdGhpcyBwYXRjaCBpcyAqbm90KiBhIEtNU0FOIGNvbmNlcm4uIFRoZSB1cHN0cmVhbSBrZXJuZWwgYWxyZWFkeSBoYXMgS0FTQU4sIExPQ0tERVAsIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuIEtNU0FOIGlzIG9ubHkgcmVsZXZhbnQgaWYgdGhlIHBhdGNoIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCAqb25seSogS01TQU4gY2FuIGRldGVjdC4gVGhlIGd1aWRlbGluZXMgYXJlIGNyeXN0YWwgY2xlYXI6IGRvbiYjMzk7dCB3YXN0ZSByZXNvdXJjZXMgcnVubmluZyBLTVNBTiBpZiBLQVNBTiBvciBvdGhlciB0b29scyBjYXRjaCB0aGUgaXNzdWVzLgoKSeKAmW0gbG9va2luZyBhdCB0aGVzZSBjcml0aWNhbCBkaXN0aW5jdGlvbnM6CgoqICAgVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBsb2NraW5nIGRlYWRsb2NrIGJldHdlZW4gYHRydW5jYXRlYCBhbmQgYGtodWdlcGFnZWRgIHJlYWRhaGVhZC4gVGhlIHByb2JsZW0/ICBgY29sbGFwc2VfZmlsZWAgdXNlZCB0byBhY3F1aXJlIGZvbGlvIGxvY2tzICpiZWZvcmUqIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgLCB3aGljaCBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgdGhlbiB0YWtlcywgbGVhZGluZyB0byBhbiBBQkJBIGRlYWRsb2NrLiBUaGlzIHBhdGNoIHNpbXBseSByZXZlcnNlcyB0aGUgbG9ja2luZyBvcmRlciBhbmQgcmVwbGFjZXMgdGhlIGNhbGwgdG8gYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIHdpdGggYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbG9ja2luZyBoaWVyYXJjaHkgYnVnLgoKTm93LCB0byBzZWUgaWYgS01TQU4gaXMgbmVlZGVkLCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgS01TQU4gdHJpZ2dlcnM6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4gYGNvbGxhcHNlX2ZpbGVgIGlzIGludGVybmFsIHRvIHRoZSBraHVnZXBhZ2VkIG1lbW9yeSBtYW5hZ2VtZW50LgoyLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYz8qKiAgTm9wZS4gYGlzX3NobWVtYCBpcyBhIHBhcmFtZXRlciwgYG5ld19mb2xpb2AgZ2V0cyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBgZW9mYCBpcyBkZXJpdmVkIGZyb20gYGlfc2l6ZV9yZWFkKC4uLilgLCBhbmQgdGhlIGByYWN0bGAgaXMgKnByb3Blcmx5KiBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogIE5vLCBgc3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHJhY3RsYCBpcyBpbml0aWFsaXplZCBhbmQgd2lsbCBub3QgaGF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuCjQuICAqKkJvdW5kcyBjaGVja3MsIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIERlZmluaXRlbHkgbm90LiBUaGlzIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgZm9yIHJlYWRhaGVhZCBpbiB0aGUgcGFnZSBjYWNoZTsgbm8gYm91bmRzIGNoZWNrcyBhcmUgaW52b2x2ZWQuCgpUaGlzIGZpeCBmb2N1c2VzIG9uICoqbG9ja2luZyBvcmRlcioqLiAgTE9DS0RFUCBhbmQgc3RhbmRhcmQgdGVzdGluZyBvciBLQVNBTiBidWlsZHMgd2lsbCBlYXNpbHkgcGljayB1cCBhbnkgbG9ja2luZyBpc3N1ZXMgaGVyZS4KCkFzIGEgcXVpY2sgY2hlY2ssIEkgZG91YmxlLWNoZWNrZWQgdGhlIGBvdXQ6YCBsYWJlbC4gYGFsbG9jX2NoYXJnZV9mb2xpb2Agc2V0cyBgbmV3X2ZvbGlvYCB0byBOVUxMIG9uIGZhaWx1cmUgYW5kIHRoZSB0cmFjZSBjYWxsIGlzIGhhbmRsZWQgY29ycmVjdGx5LCBubyBwcm9ibGVtIHRoZXJlLiBgREVGSU5FX1JFQURBSEVBRGAgZW5zdXJlcyBgcmFjdGxgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBFdmVyeXRoaW5nIGxvb2tzIGNvbXBsZXRlbHkgc3RhbmRhcmQgYW5kIHNhZmUgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gSXQmIzM5O3MgdGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL2todWdlcGFnZWQuYyB0byBhZGp1c3QgbG9ja2luZyBvcmRlciBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIHByaW9yIHRvIHRha2luZyBmb2xpbyBsb2NrcywgYW5kIGludm9rZXMgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSBpbnN0ZWFkIG9mIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGFuZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCBib3VuZHMuIFRoZSByZWFkYWhlYWRfY29udHJvbCBzdHJ1Y3R1cmUgKHJhY3RsKSBpcyBpbml0aWFsaXplZCB1c2luZyBERUZJTkVfUkVBREFIRUFEIChDOTkgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZW5zdXJpbmcgYWxsIHVubWVudGlvbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIGludHJvZHVjZWQsIG1vZGlmaWVkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgZGVidWcga2VybmVscyAoS0FTQU4gYnVpbGRzKSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS9raHVnZXBhZ2VkLmMgdG8gYWRqdXN0IGxvY2tpbmcgb3JkZXIgaW4gY29sbGFwc2VfZmlsZSgpIGJ5IGFjcXVpcmluZyBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKSBwcmlvciB0byB0YWtpbmcgZm9saW8gbG9ja3MsIGFuZCBpbnZva2VzIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkgaW5zdGVhZCBvZiBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggZmlsZSB0cnVuY2F0aW9uLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBhbmQgcGFnZSBjYWNoZSByZWFkYWhlYWQgYm91bmRzLiBUaGUgcmVhZGFoZWFkX2NvbnRyb2wgc3RydWN0dXJlIChyYWN0bCkgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgREVGSU5FX1JFQURBSEVBRCAoQzk5IGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGVuc3VyaW5nIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBtb2RpZmllZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGRlYnVnIGtlcm5lbHMgKEtBU0FOIGJ1aWxkcyksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTowMC45MTE0NDI5ODVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc4OTg4Njg0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2xsYXBzZV9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zY2FuX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL2todWdlcGFnZWQuYyB0byBhZGp1c3QgbG9ja2luZyBvcmRlciBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIHByaW9yIHRvIHRha2luZyBmb2xpbyBsb2NrcywgYW5kIGludm9rZXMgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSBpbnN0ZWFkIG9mIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB0byBhdm9pZCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24uXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggbG9ja2luZyBzeW5jaHJvbml6YXRpb24gYW5kIHBhZ2UgY2FjaGUgcmVhZGFoZWFkIGJvdW5kcy4gVGhlIHJlYWRhaGVhZF9jb250cm9sIHN0cnVjdHVyZSAocmFjdGwpIGlzIGluaXRpYWxpemVkIHVzaW5nIERFRklORV9SRUFEQUhFQUQgKEM5OSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBlbnN1cmluZyBhbGwgdW5tZW50aW9uZWQgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgaW50cm9kdWNlZCwgbW9kaWZpZWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gTG9ja2luZyBpc3N1ZXMgYW5kIGRlYWRsb2NrcyBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBkZWJ1ZyBrZXJuZWxzIChLQVNBTiBidWlsZHMpLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIGNvbGxhcHNlX2ZpbGUoKSBieSBhY3F1aXJpbmcgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKCkgYWNyb3NzIGZvbGlvIGFsbG9jYXRpb24gYW5kIHRoZSBwYWdlIHNjYW5uaW5nIGxvb3AsIGFuZCBzd2l0Y2hpbmcgdGhlIHJlYWRhaGVhZCBtZWNoYW5pc20gdG8gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKS4gVGhpcyBjaGFuZ2VzIHN5bmNocm9uaXphdGlvbiBpbnZhcmlhbnRzLCBsb2NrIG9yZGVyaW5nIChpbnZhbGlkYXRlX2xvY2sgdnMgZm9saW8gbG9jaywgdHJ1bmNhdGUsIGFuZCBtZW1vcnkgcmVjbGFpbSBkdXJpbmcgYWxsb2NhdGlvbiksIGFuZCByZWFkYWhlYWQgYm91bmRpbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3IgdGhlIGtodWdlcGFnZWQgZGFlbW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTowMC45MTE0NDc1NDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjgyMDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViOWQyMTE2NWE3MWZlM2FlN2I2MzBiMWExNmY1ZmNkM2QxNGJlYTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzU6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXFxuaW5kZXggMTFmZjk4ZDU1Yzc2ZS4uNjkwY2NiY2RmNTkzOCAxMDA2NDRcXG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMjI2Nyw2ICsyMjY3LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRShzdGFydCBcXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcXG4rXFx0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFpc19zaG1lbSlcXG4rXFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbitcXG4gXFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFxcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcXG4gXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0yMzM3LDEwICsyMzQ0LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2Uge1xcdC8qICFpc19zaG1lbSAqL1xcbiBcXHRcXHRcXHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xcbitcXHRcXHRcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBtYXBwaW5nLCBpbmRleCk7XFxuK1xcdFxcdFxcdFxcdHBnb2ZmX3QgZW9mID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctXFx1MDAzZWhvc3QpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgUEFHRV9TSVpFKTtcXG4rXFxuIFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbi1cXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFxcdTAwMjZmaWxlLVxcdTAwM2VmX3JhLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbGUsIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGVuZCAtIGluZGV4KTtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cXG4rXFx0XFx0XFx0XFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcXG4rXFx0XFx0XFx0XFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGlmIChpbmRleCBcXHUwMDNjIGVvZilcXG4rXFx0XFx0XFx0XFx0XFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXFx1MDAyNnJhY3RsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xcbiBcXHRcXHRcXHRcXHQvKiBkcmFpbiBscnUgY2FjaGUgdG8gaGVscCBmb2xpb19pc29sYXRlX2xydSgpICovXFxuIFxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW4oKTtcXG4gXFx0XFx0XFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xcbkBAIC0yNjcyLDYgKzI2ODksOCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xcbiBcXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcXG4gb3V0OlxcbitcXHRpZiAoIWlzX3NobWVtKVxcbitcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4gXFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbiBcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XFxuIFxcdHJldHVybiByZXN1bHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjAxLjM1NDk0NDMxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM1NDM4MTI2MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29sbGFwc2VfZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zaW5nbGVfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjlkMjExNjVhNzFmZTNhZTdiNjMwYjFhMTZmNWZjZDNkMTRiZWEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzU6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDExZmY5OGQ1NWM3NmUuLjY5MGNjYmNkZjU5MzggMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTIyNjcsNiArMjI2NywxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XG4gXHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XG4gXG4rXHQvKlxuK1x0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4rXHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXG4rXHQgKi9cbitcdGlmICghaXNfc2htZW0pXG4rXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbitcbiBcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcbiBcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0yMzM3LDEwICsyMzQ0LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XHQvKiAhaXNfc2htZW0gKi9cbiBcdFx0XHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuK1x0XHRcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuK1x0XHRcdFx0XHRcdCAgbWFwcGluZywgaW5kZXgpO1xuK1x0XHRcdFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cdTAwM2Vob3N0KSxcbitcdFx0XHRcdFx0XHRcdCAgICBQQUdFX1NJWkUpO1xuK1xuIFx0XHRcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbi1cdFx0XHRcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuLVx0XHRcdFx0XHRcdFx0ICBmaWxlLCBpbmRleCxcbi1cdFx0XHRcdFx0XHRcdCAgZW5kIC0gaW5kZXgpO1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24ndCByZXRha2UgaXQuXG4rXHRcdFx0XHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxuK1x0XHRcdFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKGluZGV4IFx1MDAzYyBlb2YpXG4rXHRcdFx0XHRcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFx1MDAyNnJhY3RsLFxuK1x0XHRcdFx0XHRcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XG4gXHRcdFx0XHQvKiBkcmFpbiBscnUgY2FjaGUgdG8gaGVscCBmb2xpb19pc29sYXRlX2xydSgpICovXG4gXHRcdFx0XHRscnVfYWRkX2RyYWluKCk7XG4gXHRcdFx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7XG5AQCAtMjY3Miw2ICsyNjg5LDggQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XG4gXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbiBvdXQ6XG4rXHRpZiAoIWlzX3NobWVtKVxuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuIFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuIFx0cmV0dXJuIHJlc3VsdDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjAxLjM1NDk0NjUwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzNjMyOTM0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLSFVHRVBBR0VEIEZpbGUgQ29sbGFwc2UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL2todWdlcGFnZWQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNvbGxhcHNlX2ZpbGUoKWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgZnJvbSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIHBlcnNwZWN0aXZlLiBUaGlzIGRlYWxzIHdpdGggVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgZmlsZS1iYWNrZWQgcG9ydGlvbiBvZiBUSFAgY29sbGFwc2UsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSB0aGluZ3MgbGlrZSBgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpYCBvciB0aGUga2h1Z2VwYWdlZCBkYWVtb24uXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSwgYW5kIGl0IHNlZW1zIGxpa2VseSB0aGF0IGl0IGlzLCBnaXZlbiB0aGF0IG1hZHZpc2UgY2FuIGNhbGwgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgaW4gYG1tL2todWdlcGFnZWQuY2AsIGFuZCBzeXprYWxsZXIgY2FuIGxpa2VseSB0cmlnZ2VyIGl0IHZpYSBgbWFkdmlzZWAgb3Iga2h1Z2VwYWdlZCBzeXNmcy9kYWVtb24gb24gZmlsZSBtYXBwaW5ncy5cblxuTm93LCB0aGUganVpY3kgcGFydC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgc3RyYXRlZ3kuIFdlIHNlZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCBiZWluZyB0YWtlbiAqYmVmb3JlKiBmb2xpbyBhbGxvY2F0aW9uIChgYWxsb2NfY2hhcmdlX2ZvbGlvYCkgYW5kIHRoZSBtYWluIGxvb3Agd2l0aGluIGBjb2xsYXBzZV9maWxlKClgLiBUaGlzIHJlcGxhY2VzIHRoZSBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgd2l0aCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgLiBUaGlzIHNoaWZ0IGluIGxvY2tpbmcgb3JkZXIgYW5kIHRoZSBpbmNsdXNpb24gb2YgcmVhZGFoZWFkIHdpdGhpbiB0aGUgbG9ja2VkIHNlY3Rpb24gaXMgYSByZWQgZmxhZywgYnV0IGEgcG90ZW50aWFsbHkgdmVyeSBpbnRlcmVzdGluZyBvbmUuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJhY2luZyB3aXRoIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBwcmltYXJ5IGFyZWEgb2YgY29uY2VybiBsaWVzIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdHJ1bmNhdGUsIHJlYWRhaGVhZCwgZm9saW8gbG9ja3MsIHRoZSBpbnZhbGlkYXRlIGxvY2ssIGFuZCB0aGUgYGFsbG9jX2NoYXJnZV9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmLiBDb3VsZCBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBpdHNlbGYgdHJpZ2dlciBtZW1vcnkgcmVjbGFtYXRpb24sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcmVjdXJzaW9uIG9yIGxvY2tkZXAgaXNzdWVzPyBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBiYXR0bGVncm91bmQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHN1Y2ggY2hhbmdlcyBhcmUgYWxtb3N0IGFsd2F5cyB3b3J0aCBjYXJlZnVsIGZ1enppbmcuIFRoaXMgcmVnaW9uIGlzIGEgaG90YmVkIG9mIHBvdGVudGlhbCBkZWFkbG9ja3MsIHJhY2UgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucy4gV2UndmUgZ290IGZvbGlvIGxvY2tzLCByZWFkYWhlYWQsIGFuZCBub3cgYGludmFsaWRhdGVfbG9ja2AgYWxsIGluIHRoZSBtaXgsIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgRlMgcmUtZW50cnkuXG5cblRoZSBmYWN0IHRoYXQgd2UgYXJlIGhvbGRpbmcgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKWAgKmR1cmluZyogdGhlIGBhbGxvY19jaGFyZ2VfZm9saW9gIGNhbGwgaXMgd2hhdCByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGF04oCZcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyBjb21iaW5hdGlvbiBhbmQgZGVmaW5pdGVseSBzdWdnZXN0cyB0aGlzIGlzIHdvcnRoIGEgZGVlcGVyIGxvb2suXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgc3BlY2lmaWMgc2V0dGluZ3MgdGhhdCBpbmZsdWVuY2UgdGhpcyBjb2RlIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgdG8gdHJpZ2dlciBgY29sbGFwc2VfZmlsZWAgYW5kIGhvdyB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTowNy43MTgyNDQyNjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0NTQ1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTIxMzk9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjIzLS8qKlxcbm1tL2todWdlcGFnZWQuYzoyMjI0OiAqIGNvbGxhcHNlX2ZpbGUgLSBjb2xsYXBzZSBmaWxlbWFwL3RtcGZzL3NobWVtIHBhZ2VzIGludG8gaHVnZSBvbmUuXFxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjQ3LSAqL1xcbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjI0OS1cXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2OTQtXFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbm1tL2todWdlcGFnZWQuYzoyNjk1OlxcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcXG5tbS9raHVnZXBhZ2VkLmMtMjY5Ni1cXHRyZXR1cm4gcmVzdWx0O1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI2OTk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI3OTYtXFx0XFx0fSBlbHNlIHtcXG5tbS9raHVnZXBhZ2VkLmM6Mjc5NzpcXHRcXHRcXHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xcbm1tL2todWdlcGFnZWQuYy0yNzk4LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MDcuNzgxNzA1MDM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTQwMjkwNTQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIEh1Z2UgUGFnZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gdW5kZXJzdGFuZCBob3cgYGtodWdlcGFnZWQuY2AgZml0cyBpbnRvIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0J3MgcGlucG9pbnQgd2hlcmUgdGhpcyBjcnVjaWFsIGZpbGUgaXMgYWN0dWFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIEtub3dpbmcgaXRzIGxvY2F0aW9uIGdpdmVzIGEgY3JpdGljYWwgY2x1ZSBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkLiBTbywgZmlyc3QgdXAsIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbW0vTWFrZWZpbGVgLiBUaGF0J3MgdGhlIGxpa2VseSBzcG90IHdoZXJlIHRoZSBjb21waWxhdGlvbiBydWxlcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cywgaW5jbHVkaW5nIGBraHVnZXBhZ2VkLmNgLCByZXNpZGUuIEZyb20gdGhlcmUsIEkgbmVlZCB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBndWFyZCBpdHMgaW5jbHVzaW9uLiBPZnRlbiwgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgYSBmaWxlIGlzIGRyaXZlbiBieSBhIHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZyBvcHRpb24uIFRoZXNlIG9wdGlvbnMgYWN0IGFzIGd1YXJkIHJhaWxzLCBkZXRlcm1pbmluZyBpZiB0aGUgc291cmNlIGNvZGUgZ2V0cyBjb21waWxlZCBvciBub3QgYmFzZWQgb24gdGhlIHVzZXIncyBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYxMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjE3LjE4NDYxMzg5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQwNTU3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNToxNy4zMTg2NzgyNTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDUyNzA3MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYGtodWdlcGFnZWQub2AgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGZvciBga2h1Z2VwYWdlZC5vYC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIE5vdywgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsdXJraW5nIGluIHRoZSBga2h1Z2VwYWdlZC5jYCBvciwgZm9yIHRoYXQgbWF0dGVyLCB3aXRoaW4gdGhlIGBjb2xsYXBzZV9maWxlYCBjb2RlLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIGFmdGVyIGFsbC5cblxuVGltZSB0byBzeXN0ZW1hdGljYWxseSBhbmFseXplIHRoZSBjb2RlLiBJJ2xsIGluaXRpYXRlIGEgc2VhcmNoIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSB1c2VzIG9mIGAjaWZkZWZgIG9yLCBtb3JlIGRpcmVjdGx5LCBhbnkgbWVudGlvbnMgb2YgYENPTkZJR19gIGluc2lkZSB0aGUgYG1tL2todWdlcGFnZWQuY2AgZmlsZS4gVGhpcyBzaG91bGQgZXhwb3NlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgZWl0aGVyIGRpcmVjdCBvciBpbmRpcmVjdCwgdGhhdCBhcmUgZXNzZW50aWFsIGZvciB0aGUgcHJvcGVyIG9wZXJhdGlvbiBvZiBga2h1Z2VwYWdlZGAuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjE5Ljc3MTM4ODMxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1NjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTM2PXN0YXRpYyBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIGtodWdlcGFnZWRfc2NhbiA9IHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzktXFxubW0va2h1Z2VwYWdlZC5jOjE0MDojaWZkZWYgQ09ORklHX1NZU0ZTXFxubW0va2h1Z2VwYWdlZC5jLTE0MS1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTM0NT1zdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGtodWdlcGFnZWRfYXR0cl9ncm91cCA9IHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcXG5tbS9raHVnZXBhZ2VkLmM6MzQ5OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5tbS9raHVnZXBhZ2VkLmMtMzUwLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwMzM9c3RhdGljIGlubGluZSBnZnBfdCBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2sodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDM3LVxcbm1tL2todWdlcGFnZWQuYzoxMDM4OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL2todWdlcGFnZWQuYy0xMDM5LXN0YXRpYyBpbnQgY29sbGFwc2VfZmluZF90YXJnZXRfbm9kZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjE5LjgxOTQ1MDE3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyNTM3NzI4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFRIUCBhbmQgUmVhZC1BaGVhZCBTZXR0aW5ncyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gc2VlIGhvdyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaGF2aW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJ2QgY2hlY2sgaXMgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhlIGNvbm5lY3Rpb24gdG8gYFJFQURfQUhFQURgIGlzIGEgZ29vZCBsZWFkLiBJIHNob3VsZCBnbyBkaWdnaW5nIGludG8gdGhlIGBSRUFEX0FIRUFEYCBzZXR0aW5ncywgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNldHVwLiBUaGUgYG1tL0tjb25maWdgIGZpbGUgaXMgdGhlIGdvLXRvIHBsYWNlIGZvciBhbGwgbWVtb3J5LXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBpdCdzIHRoZSBvYnZpb3VzIGNob2ljZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzZXR0aW5ncyByZWxhdGVkIHRvIFRIUCBhbmQgcG9zc2libHkgcmVsYXRlZCB0byBgUkVBRF9BSEVBRGAgYXMgd2VsbC4gVGhhdCBpcyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncyBJJ20gaW50ZXJlc3RlZCBpbi4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNToyNi4wNzMyMjUzODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjYwMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MjYuMTIyODkyNjM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2MjE2MjgxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgS2NvbmZpZyBlbnRyeTpcblxuKipBbmFseXppbmcgdGhlIFRSQU5TUEFSRU5UX0hVR0VQQUdFIEtjb25maWcgRW50cnkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBkZXBlbmRlbmNpZXMuIFdoYXQgYXJjaHMgaXMgdGhpcyByZWxldmFudCB0bz8gV2hhdCBvdGhlciBmZWF0dXJlcyBtaWdodCBpdCBpbnRlcmFjdCB3aXRoLCBwb3NpdGl2ZWx5IG9yIG5lZ2F0aXZlbHk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZWZhdWx0IHZhbHVlcyBvciBpbXBsaWNhdGlvbnMgb2Ygbm90IHNlbGVjdGluZyBpdD8gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzOioqIElzIGl0IGJhc2VkIG9uIGNlcnRhaW4gaGFyZHdhcmUgZmVhdHVyZXMgKGUuZy4sIHNwZWNpZmljIENQVSBleHRlbnNpb25zLCBtZW1vcnkgbWFuYWdlbWVudCB1bml0IGNhcGFiaWxpdGllcykgb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIEFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpdCdzICpub3QqIGNvbXBhdGlibGUgd2l0aD9cbiogICAqKlN5bWJvbCBkZWZpbml0aW9uczoqKiBXaGF0IGRvZXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhY3R1YWxseSAqZG8qIGluIHRoZSBjb2RlLCBhbmQgaG93IGRvZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0IGNoYW5nZSB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgcnVudGltZSBiZWhhdmlvciBvZiB0aGUga2VybmVsP1xuKiAgICoqSGVscCB0ZXh0OioqIFRoZSBoZWxwIHRleHQgd2lsbCB0ZWxsIG1lIHRoZSBmdW5kYW1lbnRhbCBwdXJwb3NlIGFuZCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgYSBjbGVhciBkZWZpbml0aW9uIG9mIHdoYXQgaXQgYWNoaWV2ZXMuXG4qICAgKipEZWZhdWx0IHZhbHVlczoqKiBBcmUgdGhlcmUgZGVmYXVsdCB2YWx1ZXMsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSB0aGV5IG1ha2luZz8gTWlnaHQgdGhlc2UgbmVlZCB0byBiZSBvdmVycmlkZGVuIGZvciBjZXJ0YWluIHVzZSBjYXNlcywgbGlrZSBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIG1lbW9yeSBpcyBtb3JlIHRpZ2h0bHkgY29uc3RyYWluZWQ/XG4qICAgKipUcmlnZ2VycyBmb3IgZW5hYmxlbWVudCoqIFdoYXQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGl0IHRvIGVuYWJsZT9cbiogICAqKkltcGxpY2F0aW9ucyoqOiB3aGF0IGFyZSB0aGUgYmVuZWZpdHMgb2YgdGhpcyBvcHRpb24sIGFuZCB3aGF0IGFyZSB0aGUgcG9zc2libGUgZG93bnNpZGVzLCB0cmFkZW9mZnMsIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucz8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIHdpbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHRyYWRlb2ZmcyBhcm91bmQgdGhpcy5cbiogICAqKlJlbGV2YW50IGNvZGUgc2VjdGlvbnMqKjogV2hhdCBjb2RlIHNlY3Rpb25zIGFuZCBoZWFkZXIgZmlsZXMgYXJlIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uPyBVbmRlcnN0YW5kaW5nIHRoaXMgcXVpY2tseSBnaXZlcyBtZSBjbHVlcyBhYm91dCBob3cgcGVydmFzaXZlIHRoZSBpbXBhY3QgaXMuXG5cbkkgZXhwZWN0IHRvIGZpbmQgaW5mb3JtYXRpb24gb24gdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHksIGl0cyBwZXJmb3JtYW5jZSBpbXBhY3QsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIEtjb25maWcgZW50cnkgd2l0aCB0aGUgcmVsZXZhbnQga2VybmVsIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaGVscHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBkZXNjcmlwdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZ1bGx5IGNvdmVyIGFsbCBjb25zaWRlcmF0aW9ucy4gSSBtaWdodCBldmVuIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggb3RoZXIgcmVsYXRlZCBLY29uZmlncyBsaWtlIGBIVUdFVExCX1BBR0VgLCBgSFVHRVRMQl9QQUdFX1NJWkVgLCBhbmQgYW55IE5VTUEtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBmb3IgYSBob2xpc3RpYyB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTE2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MjkuNzQ0NTIzMDc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM1OlxcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODM2OlxcdFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIDgzNzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbiA4Mzg6XFx0XFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gODM5OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gODQwOlxcdFxcdHNlbGVjdCBNTV9JRFxcbiA4NDE6XFx0XFx0aGVscFxcbiA4NDI6XFx0XFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuIDg0MzpcXHRcXHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cXG4gODQ0OlxcdFxcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXFxuIDg0NTpcXHRcXHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XFxuIDg0NjpcXHRcXHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcXG4gODQ3OlxcdFxcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxcbiA4NDg6XFx0XFxuIDg0OTpcXHRcXHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxcbiA4NTA6XFx0XFxuIDg1MTpcXHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRjaG9pY2VcXG4gODU0OlxcdFxcdHByb21wdCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1xcXCJcXG4gODU1OlxcdFxcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg1NjpcXHRcXHRoZWxwXFxuIDg1NzpcXHRcXHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg2MDpcXHRcXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuIDg2MTpcXHRcXHRoZWxwXFxuIDg2MjpcXHRcXHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIGFsd2F5cywgY2FuIGluY3JlYXNlIHRoZVxcbiA4NjM6XFx0XFx0ICBtZW1vcnkgZm9vdHByaW50IG9mIGFwcGxpY2F0aW9ucyB3aXRob3V0IGEgZ3VhcmFudGVlZFxcbiA4NjQ6XFx0XFx0ICBiZW5lZml0IGJ1dCBpdCB3aWxsIHdvcmsgYXV0b21hdGljYWxseSBmb3IgYWxsIGFwcGxpY2F0aW9ucy5cXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG4gODY3OlxcdFxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuIDg2ODpcXHRcXHRoZWxwXFxuIDg2OTpcXHRcXHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIG1hZHZpc2UsIHdpbGwgb25seSBwcm92aWRlIGFcXG4gODcwOlxcdFxcdCAgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYmVuZWZpdCB0byB0aGUgYXBwbGljYXRpb25zIHVzaW5nXFxuIDg3MTpcXHRcXHQgIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgYnV0IGl0IHdvbid0IHJpc2sgdG8gaW5jcmVhc2UgdGhlXFxuIDg3MjpcXHRcXHQgIG1lbW9yeSBmb290cHJpbnQgb2YgYXBwbGljYXRpb25zIHdpdGhvdXQgYSBndWFyYW50ZWVkXFxuIDg3MzpcXHRcXHQgIGJlbmVmaXQuXFxuIDg3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MjkuNzQ0NjIwNjg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2MDU5OTE3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYGNvbGxhcHNlX2ZpbGVgIG9yIHBlcmhhcHMgc2V0dGluZ3MgcmVsYXRlZCB0byBmaWxlLWJhY2tlZCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggdG8gZW5zdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcuXG5cbkknbGwgcXVlcnkgZm9yIGEgZmV3IGtleSB0ZXJtcy4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYFJFQURBSEVBRF9NTUFQYCwgYG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnRgLCBhbmQgYGNvbGxhcHNlX2ZpbGVgLiBXaGlsZSBJJ20gYXQgaXQsIEknbGwgYWxzbyBhZGQgYFJFQURPTkxZX1RIUGAgdG8gdGhlIHNlYXJjaCBwYXJhbWV0ZXJzLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCwgYnJvYWQgaW5pdGlhbCBzZWFyY2ggdG8gY292ZXIgdGhlIG1vc3QgbGlrZWx5IGFyZWFzLlxuXG5SaWdodCwgSSdsbCBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydGAsIGp1c3QgdG8gZ2V0IHRoaW5ncyBnb2luZy4gVGhpcyB3aWxsIGhvcGVmdWxseSBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTozMy4zNTA2MTYzODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODI3MzY4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD01MDc9c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUxNi0vKipcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1MTc6ICogbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydCgpIC0gQ2hlY2sgaWYgYSBtYXBwaW5nIHN1cHBvcnRzIFBNRC1zaXplZCBmb2xpb1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUxOC0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Nfc3BhY2VcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUyNy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NTI4OnN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTUyOS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC01MzYtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo1Mzc6c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNTM4LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTU9c3RhdGljIGlubGluZSBib29sIGZpbGVfdGhwX2VuYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEwNi1cXG5tbS9odWdlX21lbW9yeS5jOjEwNzpcXHRpZiAoIW1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQodm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjY2LVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzoyMjY3OlxcdFZNX1dBUk5fT05fT05DRSghaXNfc2htZW0gXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQobWFwcGluZykpO1xcbm1tL2todWdlcGFnZWQuYy0yMjY4LVxcdFZNX1dBUk5fT05fT05DRShzdGFydCBcXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjM1LjAzMzM1OTAwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTM2ODY0NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWdlbWFwIEhlYWRlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHNwZWNpZmljLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgaGVhZGVyIGZpbGUuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgbGlrZWx5IGNlbnRlcmVkIGFyb3VuZCB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHBhZ2UgbWFwcGluZyBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyB0aGF0IGxpbmUgNTE3IGlzIGdvaW5nIHRvIGJlIGEga2V5IHBvaW50LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgYW50aWNpcGF0ZSB0aGlzIGxpbmUgY29udGFpbmluZyBkZWNsYXJhdGlvbnMgb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBwZXJoYXBzIHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgZm9saW8gaGFuZGxpbmcsIG9yIG1heWJlIGV2ZW4gc29tZSBjcml0aWNhbCBsb2NraW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IHNlY3Rpb24gZGVhbHMgd2l0aC4gVGltZSB0byBjaGVjayBpdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTozNi45NzAyMjU5MzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZW1hcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxNjpcXHQvKipcXG4gNTE3OlxcdCAqIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoKSAtIENoZWNrIGlmIGEgbWFwcGluZyBzdXBwb3J0cyBQTUQtc2l6ZWQgZm9saW9cXG4gNTE4OlxcdCAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzc19zcGFjZVxcbiA1MTk6XFx0ICpcXG4gNTIwOlxcdCAqIFdoaWxlIHNvbWUgbWFwcGluZ3Mgc3VwcG9ydCBsYXJnZSBmb2xpb3MsIHRoZXkgbWlnaHQgbm90IHN1cHBvcnQgUE1ELXNpemVkXFxuIDUyMTpcXHQgKiBmb2xpb3MuIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBtYXBwaW5nIHN1cHBvcnRzIFBNRC1zaXplZCBmb2xpb3MuXFxuIDUyMjpcXHQgKiBGb3IgZXhhbXBsZSwga2h1Z2VwYWdlZCBuZWVkcyB0aGlzIGluZm9ybWF0aW9uIGJlZm9yZSBhdHRlbXB0aW5nIHRvXFxuIDUyMzpcXHQgKiBjb2xsYXBzaW5nIFRIUHMuXFxuIDUyNDpcXHQgKlxcbiA1MjU6XFx0ICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiA1MjY6XFx0ICovXFxuIDUyNzpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDUyODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gNTI5OlxcdHtcXG4gNTMwOlxcdFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbiA1MzE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKW1hcHBpbmcgXFx1MDAyNiBGT0xJT19NQVBQSU5HX0FOT04pO1xcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIobWFwcGluZykgXFx1MDAzYz0gUE1EX09SREVSIFxcdTAwMjZcXHUwMDI2XFxuIDUzNDpcXHRcXHQgICAgICAgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIobWFwcGluZykgXFx1MDAzZT0gUE1EX09SREVSO1xcbiA1MzU6XFx0fVxcbiA1MzY6XFx0I2Vsc2VcXG4gNTM3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiA1Mzg6XFx0e1xcbiA1Mzk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA1NDA6XFx0fVxcbiA1NDE6XFx0I2VuZGlmXFxuIDU0MjpcXHRcXG4gNTQzOlxcdC8qIFJldHVybiB0aGUgbWF4aW11bSBmb2xpbyBzaXplIGZvciB0aGlzIHBhZ2VjYWNoZSBtYXBwaW5nLCBpbiBieXRlcy4gKi9cXG4gNTQ0OlxcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIDU0NTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjM2Ljk3MDMzNDA4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDMzMjMyMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYW5kIEZpbGUgQ29sbGFwc2UgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBUcmFuc3BhcmVudCBIdWdlcGFnZXMsIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZC4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmlsZSBjb2xsYXBzZSBtZWNoYW5pc20gYW5kIGhvdyBpdCdzIHRyaWdnZXJlZCwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUga2VybmVsJ3MgYGtodWdlcGFnZWRgIGRhZW1vbi4gVG8gZG8gdGhhdCwgSSdtIGdvaW5nIHRvIGRlbHZlIGludG8gYGtodWdlcGFnZWQuY2AuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGluIGBraHVnZXBhZ2VkLmNgIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3Igd2hpY2ggZnVuY3Rpb25zIGNhbGwgYGNvbGxhcHNlX2ZpbGVgLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSB2YXJpb3VzIHNjZW5hcmlvcyBhbmQgcGF0aHMgdGhyb3VnaCB3aGljaCBmaWxlIGNvbGxhcHNlIGlzIGludm9rZWQuIEkgd2lsbCB0aGVuIHBlcmZvcm0gYSBjb2RlIHNlYXJjaCBmb3IgYWxsIGNhbGxzIHRvIHRoZSBmdW5jdGlvbiBgY29sbGFwc2VfZmlsZWAgd2l0aGluIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6NDMuMDAzNTY4NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzI1OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjIyMy0vKipcXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxcbm1tL2todWdlcGFnZWQuYy0yMjI1LSAqXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjI0ODpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTIyNDktXFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjk0LVxcdFZNX0JVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cGFnZWxpc3QpKTtcXG5tbS9raHVnZXBhZ2VkLmM6MjY5NTpcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XFxubW0va2h1Z2VwYWdlZC5jLTI2OTYtXFx0cmV0dXJuIHJlc3VsdDtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yNjk5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNzk2LVxcdFxcdH0gZWxzZSB7XFxubW0va2h1Z2VwYWdlZC5jOjI3OTc6XFx0XFx0XFx0cmVzdWx0ID0gY29sbGFwc2VfZmlsZShtbSwgYWRkciwgZmlsZSwgc3RhcnQsIGNjKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjc5OC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjQzLjA0ODkwMDUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMTIzMDU2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvbGxhcHNlX3NjYW5fZmlsZWAgYW5kIGl0cyBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGNvbGxhcHNlX3NjYW5fZmlsZWAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBrZXkgcm9sZSBpbiBkYXRhIHByb2Nlc3Npbmcgb3IgSS9PLCBwZXJoYXBzIGZpbGUgYWdncmVnYXRpb24gb3Igc3VtbWFyaXppbmcgc2NhbiBkYXRhLiBUbyB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyBmbG93LiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlYmFzZSB3aGVyZSBgY29sbGFwc2Vfc2Nhbl9maWxlYCBpcyBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgcGljdHVyZSBvZiB3aGF04oCZcyAqdXNpbmcqIHRoaXMgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyBkZXBlbmRlbmNpZXMsIGRhdGEgZmxvd3MsIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgcG9pbnRzIG9mIHZ1bG5lcmFiaWxpdHkuIEknbSBsb29raW5nIGZvciBib3RoIGRpcmVjdCBjYWxscyBhbmQgYW55IGluZGlyZWN0IGNhbGxzIHRocm91Z2ggb3RoZXIgZnVuY3Rpb25zIOKAkyB0aGUgZGVlcGVyIEkgZ28sIHRoZSBiZXR0ZXIgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aWxsIGJlLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgcXVpY2sgaW52ZXN0aWdhdGlvbiBnaXZlbiBteSBleGlzdGluZyBleHBlcnRpc2UuIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcmVzcG9uc2liaWxpdGllcyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjc3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6NDUuMjYxMjA4NTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY0NjQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsYXBzZV9zY2FuX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjk4LVxcbm1tL2todWdlcGFnZWQuYzoyNjk5OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9raHVnZXBhZ2VkLmMtMjcwMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI4MDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgzMS1yZXRyeTpcXG5tbS9raHVnZXBhZ2VkLmM6MjgzMjpcXHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHBnb2ZmLCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTI4MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjQ1LjMwNjg1OTIxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTI0MjY3NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIENoYWluKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgYGNvbGxhcHNlX3NjYW5fZmlsZWAgaXMgYmVpbmcgdXNlZC4gVGhlIG5vdGVzIHNheSBpdCdzIGNhbGxlZCBmcm9tIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gUmlnaHQsIGFuZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgaXRzZWxmIHBhcnQgb2YgdGhlIGBtYWR2aXNlX2NvbGxhcHNlYCBwcm9jZXNzLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gY2FsbHMgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFuZCBhbHNvIHdoYXQgaXMgY2FsbGluZyBgY29sbGFwc2VfZmlsZWAuIEtub3dpbmcgdGhpcywgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHRoYXQgbGVhZCB0byBgY29sbGFwc2Vfc2Nhbl9maWxlYCBiZWluZyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6NDguMjMxMTMwOTQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYxNzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsYXBzZV9zaW5nbGVfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MjY5OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgwOC0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjgwOTpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjgxMC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCAqbG9ja19kcm9wcGVkLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI4NjY9c3RhdGljIHZvaWQgY29sbGFwc2Vfc2Nhbl9tbV9zbG90KHVuc2lnbmVkIGludCBwcm9ncmVzc19tYXgsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjkzNi1cXG5tbS9raHVnZXBhZ2VkLmM6MjkzNzpcXHRcXHRcXHQqcmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyxcXG5tbS9raHVnZXBhZ2VkLmMtMjkzOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICB2bWEsIFxcdTAwMjZsb2NrX2Ryb3BwZWQsIGNjKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMjA3PWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyNTUtXFxubW0va2h1Z2VwYWdlZC5jOjMyNTY6XFx0XFx0cmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChhZGRyLCB2bWEsIFxcdTAwMjZtbWFwX3VubG9ja2VkLCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTMyNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjQ4LjI3Njc1NDI4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NTAzMzIwMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbGxhcHNlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgcGF0aCBmb3IgbWVtb3J5IGNvbGxhcHNpbmcuIEl0J3MgY2xlYXIgdGhhdCBgbWFkdmlzZV9jb2xsYXBzZSgpYCBhbmQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdCgpYCB1bHRpbWF0ZWx5IGZlZWQgaW50byBgY29sbGFwc2Vfc2luZ2xlX3BtZCgpYC4gVGhhdCB0aGVuIGNhbGxzIGBjb2xsYXBzZV9zY2FuX2ZpbGUoKWAsIHdoaWNoIGZpbmFsbHkgcmVhY2hlcyBgY29sbGFwc2VfZmlsZSgpYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3QgYXQgdGhlIGhpZ2ggbGV2ZWwuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXAgaW4gbXkgbWluZDogaXMgYGNvbGxhcHNlX2ZpbGUoKWAgc3RhdGljPyBZdXAsIGl0J3MgZGVjbGFyZWQgYHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoLi4uKWAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBpdCBsaW1pdHMgaXRzIHZpc2liaWxpdHkuIEJ1dCwgYW5kIHRoaXMgaXMgd2hlcmUgSSBzdGFydCBkaWdnaW5nIGRlZXBlciwgaXMgaXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXI/IENvbnNpZGVyaW5nIHRoYXQgYGNvbGxhcHNlX2ZpbGVgIGlzIGEgKm1hc3NpdmUqIGZ1bmN0aW9uIOKAkyB3ZSdyZSB0YWxraW5nIGFsbW9zdCA0NTAgbGluZXMgZnJvbSAyMjQ4IHRvIDI2OTYg4oCTIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRvIGJlIGlubGluZWQgdW5sZXNzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBsaWtlIExpbmsgVGltZSBPcHRpbWl6YXRpb24gKExUTykuIEluIGEgc3RhbmRhcmQgR0NDIG9yIENsYW5nIGJ1aWxkICp3aXRob3V0KiBMVE8sIGEgZnVuY3Rpb24gb2YgdGhhdCBzaXplLCBldmVuIGlmIHN0YXRpYywgaXNuJ3QgZ29pbmcgdG8gYmUgaW5saW5lZC5cblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgdGhhdCwgZXZlbiBpZiBpdCdzIHN0YXRpYywgYGNvbGxhcHNlX2ZpbGVgIHdpbGwgaGF2ZSBhIHN5bWJvbCBpbiB0aGUgc3ltYm9sIHRhYmxlLCBhbG9uZyB3aXRoIGl0cyBjYWxsZXJzLCBzdWNoIGFzIGBtYWR2aXNlX2NvbGxhcHNlYCwgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLCBhbmQgYGNvbGxhcHNlX3NjYW5fZmlsZWAuIFRoaXMgY291bGQgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpc24ndCBleHBvcnRlZCBvciBkZWNsYXJlZCBpbiBhIGhlYWRlciBzb21ld2hlcmUuIFRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNTo1Ni43ODAwNzg0MTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Njc4NjAxNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xsYXBzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MzQ2PUEgaGlnaGVyIHZhbHVlIG1heSBpbmNyZWFzZSBtZW1vcnkgZm9vdHByaW50IGZvciBzb21lIHdvcmtsb2Fkcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjM1NDogICBDdXJyZW50bHksIG1hZHZpc2VfY29sbGFwc2Ugb25seSBzdXBwb3J0cyBjb2xsYXBzaW5nIHRvIFBNRC1zaXplZCBUSFBzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTM1NS0gICBhbmQgZG9lcyBub3QgYXR0ZW1wdCBtVEhQIGNvbGxhcHNlcy5cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTUxMT1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVxcdFxcdCAgICAgaW50IGFkdmljZSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTEzOmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzEyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzE4OnN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzE5LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzE3MD1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxNzQtXFxubW0va2h1Z2VwYWdlZC5jOjMxNzU6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcXG5tbS9raHVnZXBhZ2VkLmMtMzE3Ni17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzIwNi1cXG5tbS9raHVnZXBhZ2VkLmM6MzIwNzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzIwOC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI5NC1cXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXFxubW0va2h1Z2VwYWdlZC5jOjMyOTU6XFx0XFx0XFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XFxubW0va2h1Z2VwYWdlZC5jLTMyOTYtfVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzYzLVxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG5tbS9tYWR2aXNlLmM6MTM2NDpcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG5tbS9tYWR2aXNlLmMtMTM2NS1cXHRcXHRcXHRcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19kcm9wcGVkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yMzU9c3RhdGljIHZvaWQgZmlsbF9tZW1vcnkoaW50ICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDgtICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI0OTpzdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI2Nz1zdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODAtXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyODE6XFx0aWYgKG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgaHBhZ2VfcG1kX3NpemUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODItXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTExPXN0YXRpYyBib29sIGlzX2Fub24oc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxNjpzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUzOS1cXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTQwOlxcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NDEtXFx0aWYgKCgoYm9vbClyZXQpID09IGV4cGVjdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjU1MTpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTUyLVxcdFxcdFxcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTU2LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTc6XFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1OC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NjgwPXN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX21hZHZpc2VfY29udGV4dCA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NjgxOlxcdC5jb2xsYXBzZSA9IFxcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02ODItXFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MTA3Nj1zdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTEzMy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTEzNDpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzUtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ0LVxcdC8qIGMtXFx1MDAzZWNvbGxhcHNlKCkgd2lsbCBmaW5kIGEgaHVnZXBhZ2UgYW5kIGNvbXBsYWluIC0gY2FsbCBkaXJlY3RseS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTE0NTpcXHRfX21hZHZpc2VfY29sbGFwc2UoXFxcIlJlLWNvbGxhcHNlIFBNRC1tYXBwZWQgaHVnZXBhZ2VcXFwiLCBwLCAxLCBvcHMsIHRydWUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ2LVxcdHZhbGlkYXRlX21lbW9yeShwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MTMxMT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzMzpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzQ6XFx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxNDM2OlxcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTE0MzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM1OjU4LjU0Nzk0NDI3M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg5NDc1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgY29sbGFwc2VfZmlsZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgaG93IGh1Z2UgcGFnZSBjb2xsYXBzaW5nIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWVtb3J5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gYG1tL2todWdlcGFnZWQuY2AuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHZhcmlhYmxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBleGFjdCBjb250cm9sIGZsb3cgYW5kIGFueSBlZGdlIGNhc2VzLiBJJ2xsIGZvY3VzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGZpbGUgbWFwcGluZyBhbmQgdGhlIGh1Z2UgcGFnZSBtZWNoYW5pY3MuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjAwLjczNzQyMjQ5MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNjA6XFx0XFxuMjI2MTpcXHRcXHQvKlxcbjIyNjI6XFx0XFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cXG4yMjYzOlxcdFxcdCAqXFxuMjI2NDpcXHRcXHQgKiBUT0RPOiBvbmNlIHNobWVtIGFsd2F5cyBjYWxscyBtYXBwaW5nX3NldF9sYXJnZV9mb2xpb3MoKSBvbiBpdHNcXG4yMjY1OlxcdFxcdCAqIG1hcHBpbmcsIHRoZSBzaG1lbSBjaGVjayBjYW4gYmUgcmVtb3ZlZC5cXG4yMjY2OlxcdFxcdCAqL1xcbjIyNjc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XFxuMjI2ODpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXFx1MDAyNiAoSFBBR0VfUE1EX05SIC0gMSkpO1xcbjIyNjk6XFx0XFxuMjI3MDpcXHRcXHQvKlxcbjIyNzE6XFx0XFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XFxuMjI3MjpcXHRcXHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXFxuMjI3MzpcXHRcXHQgKi9cXG4yMjc0OlxcdFxcdGlmICghaXNfc2htZW0pXFxuMjI3NTpcXHRcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuMjI3NjpcXHRcXG4yMjc3OlxcdFxcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcXHUwMDI2bmV3X2ZvbGlvLCBtbSwgY2MsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjI3ODpcXHRcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG4yMjc5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIyODA6XFx0XFxuMjI4MTpcXHRcXHRtYXBwaW5nX3NldF91cGRhdGUoXFx1MDAyNnhhcywgbWFwcGluZyk7XFxuMjI4MjpcXHRcXG4yMjgzOlxcdFxcdF9fZm9saW9fc2V0X2xvY2tlZChuZXdfZm9saW8pO1xcbjIyODQ6XFx0XFx0aWYgKGlzX3NobWVtKVxcbjIyODU6XFx0XFx0XFx0X19mb2xpb19zZXRfc3dhcGJhY2tlZChuZXdfZm9saW8pO1xcbjIyODY6XFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VpbmRleCA9IHN0YXJ0O1xcbjIyODc6XFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtYXBwaW5nID0gbWFwcGluZztcXG4yMjg4OlxcdFxcbjIyODk6XFx0XFx0LypcXG4yMjkwOlxcdFxcdCAqIEVuc3VyZSB3ZSBoYXZlIHNsb3RzIGZvciBhbGwgdGhlIHBhZ2VzIGluIHRoZSByYW5nZS4gIFRoaXMgaXNcXG4yMjkxOlxcdFxcdCAqIGFsbW9zdCBjZXJ0YWlubHkgYSBuby1vcCBiZWNhdXNlIG1vc3Qgb2YgdGhlIHBhZ2VzIG11c3QgYmUgcHJlc2VudFxcbjIyOTI6XFx0XFx0ICovXFxuMjI5MzpcXHRcXHRkbyB7XFxuMjI5NDpcXHRcXHRcXHR4YXNfbG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjI5NTpcXHRcXHRcXHR4YXNfY3JlYXRlX3JhbmdlKFxcdTAwMjZ4YXMpO1xcbjIyOTY6XFx0XFx0XFx0aWYgKCF4YXNfZXJyb3IoXFx1MDAyNnhhcykpXFxuMjI5NzpcXHRcXHRcXHRcXHRicmVhaztcXG4yMjk4OlxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIyOTk6XFx0XFx0XFx0aWYgKCF4YXNfbm9tZW0oXFx1MDAyNnhhcywgR0ZQX0tFUk5FTCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzY6MDAuNzM3NjIxNzAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NzQ0NjA1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGNvbGxhcHNlX2ZpbGVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gd2UndmUgYWRkcmVzc2VkIG9uZSBzcGVjaWZpYyBtb2RpZmljYXRpb24uIE5vdywgSSBuZWVkIHRvIHNoaWZ0IGdlYXJzIGFuZCBkaWcgaW50byB0aGUgcmVtYWluaW5nIGFkanVzdG1lbnRzIHdpdGhpbiB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgKmFsc28qIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgKm90aGVyKiBtb2RpZmllZCBzZWdtZW50cy5cIiBJIGtub3cgSSd2ZSBtaXNzZWQgc29tZXRoaW5nIGltcG9ydGFudCBpZiBJIG9ubHkgYWRkcmVzcyB0aGUgZmlyc3QgYWx0ZXJhdGlvbi4gSSd2ZSBnb3QgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRvdGFsIGZ1bmN0aW9uJ3MgY2hhbmdlIGlzIGFjY3VyYXRlLiBJJ20gZm9jdXNpbmcgb24gY29tcGxldGVuZXNzIGFuZCBhY2N1cmFjeSwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBzZWNvbmQgYWx0ZXJhdGlvbiBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjowMi40MTIwODQ2ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzM1OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzM2OlxcdFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG4yMzM3OlxcdFxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW4oKTtcXG4yMzM4OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4yMzM5OlxcdFxcdFxcdFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuMjM0MDpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzQxOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM0MjpcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG4yMzQzOlxcdFxcdFxcdFxcdFxcdGdvdG8geGFfbG9ja2VkO1xcbjIzNDQ6XFx0XFx0XFx0XFx0fVxcbjIzNDU6XFx0XFx0XFx0fSBlbHNlIHtcXHQvKiAhaXNfc2htZW0gKi9cXG4yMzQ2OlxcdFxcdFxcdFxcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XFxuMjM0NzpcXHRcXHRcXHRcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYSxcXG4yMzQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbWFwcGluZywgaW5kZXgpO1xcbjIzNDk6XFx0XFx0XFx0XFx0XFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cXHUwMDNlaG9zdCksXFxuMjM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgUEFHRV9TSVpFKTtcXG4yMzUxOlxcdFxcbjIzNTI6XFx0XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjM1MzpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzNTQ6XFx0XFx0XFx0XFx0XFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cXG4yMzU1OlxcdFxcdFxcdFxcdFxcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXFxuMjM1NjpcXHRcXHRcXHRcXHRcXHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxcbjIzNTc6XFx0XFx0XFx0XFx0XFx0ICovXFxuMjM1ODpcXHRcXHRcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAzYyBlb2YpXFxuMjM1OTpcXHRcXHRcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcXHUwMDI2cmFjdGwsXFxuMjM2MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xcbjIzNjE6XFx0XFx0XFx0XFx0XFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xcbjIzNjI6XFx0XFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbjIzNjM6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xcbjIzNjQ6XFx0XFx0XFx0XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4yMzY1OlxcdFxcdFxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fRkFJTDtcXG4yMzY2OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8geGFfdW5sb2NrZWQ7XFxuMjM2NzpcXHRcXHRcXHRcXHRcXHR9XFxuMjM2ODpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxuMjM2OTpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzNzA6XFx0XFx0XFx0XFx0XFx0ICogVGhpcyBwYWdlIGlzIGRpcnR5IGJlY2F1c2UgaXQgaGFzbid0XFxuMjM3MTpcXHRcXHRcXHRcXHRcXHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXFxuMjM3MjpcXHRcXHRcXHRcXHRcXHQgKlxcbjIzNzM6XFx0XFx0XFx0XFx0XFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxcbjIzNzQ6XFx0XFx0XFx0XFx0XFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjAyLjQxMjI3NjUyNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NzIyNDk3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKkFuYWx5emluZyB0aGUgT3V0cHV0IG9mIGBjb2xsYXBzZV9maWxlYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGNpcmNsaW5nIGJhY2sgdG8gYGNvbGxhcHNlX2ZpbGVgIGFnYWluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBjcml0aWNhbCBwYXJ0OiB0aGUgYG91dDpgIGF0IHRoZSB2ZXJ5IGVuZC4gVGhhdCdzIHRoZSBrZXksIGlzbid0IGl0PyBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBpbnRlcm5hbCB0cmFuc2Zvcm1hdGlvbnMgYW5kIGNvbXB1dGF0aW9ucyBjb252ZXJnZSB0byBwcm9kdWNlIHRoZSByZXN1bHQuIEkgd2FudCB0byByZWFsbHkgZGlnIGludG8gd2hhdCdzIGJlaW5nIG91dHB1dHRlZCwgbm90IGp1c3QgKnRoYXQqIHNvbWV0aGluZyBpcyBvdXRwdXR0ZWQuIElzIGl0IGEgY29uc29saWRhdGVkIGRhdGEgc3RydWN0dXJlLCBhIGZpbmFsIHByb2Nlc3NlZCBzdHJpbmcsIGEgcGFydGljdWxhciBmb3JtYXQ/XG5cblVuZGVyc3RhbmRpbmcgKnRoYXQqIGBvdXQ6YCBzcGVjaWZpY2FsbHkgdGVsbHMgdXMgZXZlcnl0aGluZyBhYm91dCB0aGUgZGVzaWduIGRlY2lzaW9ucyB0aGF0IHVuZGVycGluIHRoZSBlbnRpcmUgZnVuY3Rpb24sIGFuZCB0aGUgZGF0YSBpdCBwcmVzZW50cy4gV2UgY291bGQgaW5mZXIgYW4gYXdmdWwgbG90IGZyb20gdGhhdCBzaW1wbGUgc3RhdGVtZW50IGFsb25lLCBpZiB3ZSdyZSBjYXJlZnVsLiBJcyBpdCBhIHdlbGwgc3RydWN0dXJlZCBvdXRwdXQsIG9yIGEgZHVtcD8gV2hhdCwgKmV4YWN0bHkqLCBpcyB0aGUgZm9ybSBvZiB0aGF0IG91dHB1dD8gVGhhdCB0ZWxscyB1cyBob3cgaXQgaXMgdG8gYmUgY29uc3VtZWQsIHdoZXRoZXIgaXQncyBmcmllbmRseSB0byBiZWluZyBwYXNzZWQgdG8gdGhlIG5leHQgc3RhZ2UsIGlmIGl0IGlzIGFwcHJvcHJpYXRlIGZvciBzdG9yYWdlIG9yIGRpc3BsYXk/IFRoZSBvdXRwdXQgKmlzKiB0aGUgaW50ZXJmYWNlLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhhdCBkZXRhaWwgZm9yIGEgbW9tZW50IGFuZCByZWFsbHkgZXhwbG9yZSB3aGF0IGl0IG1lYW5zIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjA4LjEzNDc3NzEzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2ODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2ODA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFxcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XFxuMjY4MTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuMjY4MjpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI2ODM6XFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcbjI2ODQ6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yNjg1OlxcdFxcdH1cXG4yNjg2OlxcdFxcbjI2ODc6XFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtYXBwaW5nID0gTlVMTDtcXG4yNjg4OlxcdFxcbjI2ODk6XFx0XFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuMjY5MDpcXHRcXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcXG4yNjkxOlxcdG91dDpcXG4yNjkyOlxcdFxcdGlmICghaXNfc2htZW0pXFxuMjY5MzpcXHRcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4yNjk0OlxcdFxcdFZNX0JVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cGFnZWxpc3QpKTtcXG4yNjk1OlxcdFxcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcXG4yNjk2OlxcdFxcdHJldHVybiByZXN1bHQ7XFxuMjY5NzpcXHR9XFxuMjY5ODpcXHRcXG4yNjk5OlxcdHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4yNzAwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsXFxuMjcwMTpcXHRcXHRcXHRzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuMjcwMjpcXHR7XFxuMjcwMzpcXHRcXHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZSA9IGNvbGxhcHNlX21heF9wdGVzX25vbmUoY2MsIE5VTEwsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjcwNDpcXHRcXHRjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfc3dhcCA9IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoY2MsIEhQQUdFX1BNRF9PUkRFUik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjA4LjEzNDk3NjAzMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDI5MzkyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRXhpdCBQb2ludHMgaW4gYGNvbGxhcHNlX2ZpbGVgKipcblxuT2theSwgbGV0J3MgZGlnIGludG8gdGhpcyBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgaXQgZXhpdHMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyBgZ290byBvdXQ7YCBvciBzaW1pbGFyIGp1bXAgc3RhdGVtZW50cyBtaWdodCBhZmZlY3QgdGhpbmdzLiBTbywgSSdtIGdvaW5nIHRvIHN5c3RlbWF0aWNhbGx5IHRyYWNlIGFsbCB0aGUgZXhpdCBwYXRocy5cblxuRmlyc3QsIEkgc2VlIHRoZSBjaGVjayBhdCBsaW5lIDIyNzg6IGBpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkgZ290byBvdXQ7YC4gQWxyaWdodCwgdGhhdCdzIGEgZGlyZWN0IGVhcmx5IGV4aXQgY29uZGl0aW9uLiBBZnRlciB0aGlzLCB0aGVyZSBzZWVtIHRvIGJlIHNldmVyYWwgbGFiZWxzIHRvIGJlIGF3YXJlIG9mOiBgeGFfbG9ja2VkOmAsIGB4YV91bmxvY2tlZDpgLCBgcm9sbGJhY2s6YCwgYW5kIHByZXN1bWFibHkgb3RoZXJzLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSBsZWFkLlxuXG5Ob3csIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHdoZXJlIHRoZSBgb3V0YCBsYWJlbCBpcyBkZWZpbmVkIGFuZCBleGFtaW5lIHdoYXQgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIHByaW9yIHRvIGVhY2ggcG90ZW50aWFsIGV4aXQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiBlYWNoIHBvc3NpYmxlIHJldHVybiBwYXRod2F5IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGluIGVkZ2UgY2FzZXMgb3IgZXJyb3Igc2NlbmFyaW9zLiBUaGlzIHdpbGwgaGVscCBtZSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgY2xlYW51cCB0aGF0IGFyZSB0cmlnZ2VyZWQgYnkgdGhlc2UgY29udHJvbCBmbG93IGNvbnN0cnVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTc4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoxMS4xNjQzNzI2MDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTg3ODk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnb3RvIG91dDtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz02OTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2VfaXNvbGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MTQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX05PTkUpO1xcbm1tL2todWdlcGFnZWQuYzo3MTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTcxNi1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzIwLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUFRFX05PTl9QUkVTRU5UO1xcbm1tL2todWdlcGFnZWQuYzo3MjE6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTcyMi1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzI0LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUFRFX1VGRkQ7XFxubW0va2h1Z2VwYWdlZC5jOjcyNTpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzI2LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MjktXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX05VTEw7XFxubW0va2h1Z2VwYWdlZC5jOjczMDpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzMxLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03NDItXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0xBWllGUkVFO1xcbm1tL2todWdlcGFnZWQuYzo3NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTc0NC1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTVRIUF9TVEFUX0NPTExBUFNFX0VYQ0VFRF9TSEFSRUQpO1xcbm1tL2todWdlcGFnZWQuYzo3NTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTc1OS1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzY2LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcXG5tbS9raHVnZXBhZ2VkLmM6NzY3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy03NjgtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTc5MC1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG5tbS9raHVnZXBhZ2VkLmM6NzkxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy03OTItXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTgwNy1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09VTlQ7XFxubW0va2h1Z2VwYWdlZC5jOjgwODpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtODA5LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy04MTctXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9ERUxfUEFHRV9MUlU7XFxubW0va2h1Z2VwYWdlZC5jOjgxODpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtODE5LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMTY1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX3N3YXBpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMTkzLVxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xcbm1tL2todWdlcGFnZWQuYzoxMTk0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xMTk1LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjEzLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fRVhDRUVEX1NXQVBfUFRFO1xcbm1tL2todWdlcGFnZWQuYzoxMjE0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xMjE1LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjMxLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xcbm1tL2todWdlcGFnZWQuYzoxMjMyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xMjMzLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjM2LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fRkFJTDtcXG5tbS9raHVnZXBhZ2VkLmM6MTIzNzpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtMTIzOC1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjMwLVxcdFxcdGNjLVxcdTAwM2Vwcm9ncmVzcysrO1xcbm1tL2todWdlcGFnZWQuYzoxNjMxOlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xNjMyLVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjQ5LVxcdFxcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xcbm1tL2todWdlcGFnZWQuYzoxNjUwOlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xNjUxLVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjc4LVxcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxcbm1tL2todWdlcGFnZWQuYzoyMjc5OlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0yMjgwLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2NjgtXFxubW0va2h1Z2VwYWdlZC5jOjI2Njk6XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTI2NzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjExLjI3NDI1Njc4N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDIwNjc3OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgY29sbGFwc2VfZmlsZWAgRXhpdCBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGNvbGxhcHNlX2ZpbGVgIGEgYml0IGJldHRlciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBleGl0IHNjZW5hcmlvcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBhbGwgZXhpdCBwYXRocyB1bHRpbWF0ZWx5IGxlYWQgdG8gYSByb2xsYmFjaywgb3IgaWYgdGhlcmUgYXJlIHNjZW5hcmlvcyB3aGVyZSB0aGUgZnVuY3Rpb24gbWlnaHQgZXhpdCBpbiBhIG1vcmUgXCJjbGVhblwiIHdheSB3aXRob3V0IHRyaWdnZXJpbmcgYSByb2xsYmFjayBwcm9jZWR1cmUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkYXRhIGludGVncml0eSBpbXBsaWNhdGlvbnMgb2YgYSBzdWNjZXNzZnVsIG9yIGZhaWxlZCBjb2xsYXBzZSBvcGVyYXRpb24uXG5cblRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjb2RlIGJsb2NrIGFyb3VuZCBsaW5lcyAyNjUwLTI2OTUuIFRoYXQncyBhIHJlYXNvbmFibGUgcmFuZ2UgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBjb2RlYmFzZS4gSSBleHBlY3QgdGhhdCBzZWN0aW9uIHdpbGwgcHJvYmFibHkgY29udGFpbiBzb21lIGtleSBkZWNpc2lvbiBwb2ludHMgYW5kIGJyYW5jaGluZyBsb2dpYyByZWxhdGVkIHRvIGV4aXQgY29uZGl0aW9ucy4gQnkgaW5zcGVjdGluZyB0aGF0IGFyZWEsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSB2YXJpb3VzIHBhdGhzIHRoZSBmdW5jdGlvbiB0YWtlcyBvbiBpdHMgd2F5IG91dCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSByb2xsYmFjayBtZWNoYW5pc20gaXMgYWx3YXlzIGludm9rZWQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoxMy42OTQ5Mzk2NzJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjQ1OlxcdFxcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cXG4yNjQ2OlxcdFxcdCAqL1xcbjI2NDc6XFx0XFx0cmV0cmFjdF9wYWdlX3RhYmxlcyhtYXBwaW5nLCBzdGFydCk7XFxuMjY0ODpcXHRcXHRpZiAoY2MgXFx1MDAyNlxcdTAwMjYgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKVxcbjI2NDk6XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xcbjI2NTA6XFx0XFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuMjY1MTpcXHRcXG4yNjUyOlxcdFxcdC8qXFxuMjY1MzpcXHRcXHQgKiBUaGUgY29sbGFwc2UgaGFzIHN1Y2NlZWRlZCwgc28gZnJlZSB0aGUgb2xkIGZvbGlvcy5cXG4yNjU0OlxcdFxcdCAqL1xcbjI2NTU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFxcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XFxuMjY1NjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuMjY1NzpcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsXFxuMjY1ODpcXHRcXHRcXHRcXHRcXHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4yNjU5OlxcdFxcdFxcdGlmIChpc19zaG1lbSlcXG4yNjYwOlxcdFxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU0hNRU0sXFxuMjY2MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4yNjYyOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VtYXBwaW5nID0gTlVMTDtcXG4yNjYzOlxcdFxcdFxcdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XFxuMjY2NDpcXHRcXHRcXHRmb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxuMjY2NTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI2NjY6XFx0XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIDIgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbjI2Njc6XFx0XFx0fVxcbjI2Njg6XFx0XFxuMjY2OTpcXHRcXHRnb3RvIG91dDtcXG4yNjcwOlxcdFxcbjI2NzE6XFx0cm9sbGJhY2s6XFxuMjY3MjpcXHRcXHQvKiBTb21ldGhpbmcgd2VudCB3cm9uZzogcm9sbCBiYWNrIHBhZ2UgY2FjaGUgY2hhbmdlcyAqL1xcbjI2NzM6XFx0XFx0aWYgKG5yX25vbmUpIHtcXG4yNjc0OlxcdFxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yNjc1OlxcdFxcdFxcdG1hcHBpbmctXFx1MDAzZW5ycGFnZXMgLT0gbnJfbm9uZTtcXG4yNjc2OlxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjI2Nzc6XFx0XFx0XFx0c2htZW1fdW5jaGFyZ2UobWFwcGluZy1cXHUwMDNlaG9zdCwgbnJfbm9uZSk7XFxuMjY3ODpcXHRcXHR9XFxuMjY3OTpcXHRcXG4yNjgwOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgdG1wLCBcXHUwMDI2cGFnZWxpc3QsIGxydSkge1xcbjI2ODE6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbjI2ODI6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4yNjgzOlxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG4yNjg0OlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjEzLjY5NTI5MDY4MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTA1MDg5ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gd2UndmUgZ290IHRoaXMgcm9sbGJhY2sgc2NlbmFyaW8gYW5kIGl0J3MgbGFuZGluZyB1cyBpbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgY29kZSwgbGluZXMgMjY4Ny0yNjkxLCBhZnRlciB0aGUgcm9sbGJhY2sgaGFzIGNvbmNsdWRlZC4gSW50ZXJlc3RpbmcsIGFsbCB0aGUgY29kZSBwYXRocyBjb252ZXJnZSBhdCB0aGUgYG91dDpgIGxhYmVsLCBhbmQgdGhlbiB3aGF0PyBcblxuUmlnaHQsIGxldCdzIHpvb20gaW4gb24gYGNvbGxhcHNlX2ZpbGVgIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IHNvbWV0aGluZyBqdWljeSBmb3IgZnV6emluZy4gU2VlbXMgbGlrZSB0aGVyZSdzIGEgZmlsZSBtYXBwaW5nIGludm9sdmVkLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBpcyBiZWluZyBjYWxsZWQgKmJlZm9yZSogYGFsbG9jX2NoYXJnZV9mb2xpb2AuIFdoeSBpcyB0aGF0IHNpZ25pZmljYW50PyBXZWxsLCBjb3VsZCBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBiZSB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgaGF2ZSBzb21lIG1lbW9yeSBhbGxvY2F0aW9uIGhhcHBlbmluZywgcG90ZW50aWFsbHkgd2l0aCBmbGFncyB0aGF0IG1pZ2h0IHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0/IElmIHJlY2xhaW0gaXMgaW52b2x2ZWQsIHRoYXQncyBhbG1vc3QgYWx3YXlzIGEgZ29vZCBzaWduIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS4gVGltZSB0byBpbnNwZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoxNi42MDAzODMyMzlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2Njc5NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NoYXJnZV9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTExNjU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyNTUtXFxubW0va2h1Z2VwYWdlZC5jOjEyNTY6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgYWxsb2NfY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0va2h1Z2VwYWdlZC5jLTEyNTctXFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTI5Mz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzA5LVxcbm1tL2todWdlcGFnZWQuYzoxMzEwOlxcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcXHUwMDI2Zm9saW8sIG1tLCBjYywgb3JkZXIpO1xcbm1tL2todWdlcGFnZWQuYy0xMzExLVxcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyNzYtXFxubW0va2h1Z2VwYWdlZC5jOjIyNzc6XFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFxcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjI3OC1cXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzY6MTYuNjg3MDcwNDA4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzOTQxOTU3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGFsbG9jX2NoYXJnZV9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzIGBhbGxvY19jaGFyZ2VfZm9saW9gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZTogSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgdGhpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGEgZm9saW8tc3BlY2lmaWMgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIG5hbWUgaW1wbGllcyBpdCBoYW5kbGVzIGZvbGlvLXJlbGF0ZWQgY2hhcmdpbmcsIHdoaWNoIHByb2JhYmx5IG1lYW5zIGFjY291bnRpbmcgZm9yIG1lbW9yeSB1c2FnZSwgcG90ZW50aWFsbHkgZm9yIGRpZmZlcmVudCBwcm9jZXNzZXMgb3Igc3Vic3lzdGVtcy5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSBlbGVtZW50czpcblxuKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBkb2VzIGl0IGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgZm9saW8gc3RydWN0dXJlcyBhbmQgYWNjb3VudGluZyBkYXRhPyBBcmUgdGhlcmUgc3BpbmxvY2tzLCBtdXRleGVzLCBhdG9taWMgb3BlcmF0aW9ucyBpbnZvbHZlZD8gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIGlzIGEgbWFqb3IgcmVkIGZsYWcgaW4gdGhpcyBhcmVhLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIGZhaWx1cmUgcGF0aHM/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgb3V0LW9mLW1lbW9yeSBzY2VuYXJpb3Mgb3Igb3RoZXIgdW5leHBlY3RlZCBjb25kaXRpb25zPyBBcmUgdGhlcmUgcmV0dXJuIGNvZGVzIG9yIGVycm9yIGluZGljYXRvcnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mP1xuKiAgICoqUmVzb3VyY2UgVHJhY2tpbmc6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHVzZWQgdG8gdHJhY2sgdGhlIGFsbG9jYXRlZCBtZW1vcnk/IElzIGl0IGp1c3QgdGhlIGZvbGlvIGl0c2VsZiwgb3IgYXJlIHRoZXJlIGNvdW50ZXJzLCBiaXRtYXBzLCBvciBvdGhlciBhdXhpbGlhcnkgc3RydWN0dXJlcyBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdyYW51bGFyaXR5IG9mIHRoaXMgdHJhY2tpbmcuXG4qICAgKipJbnRlZ3JhdGlvbiBQb2ludHM6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHM/IERvZXMgaXQgY2FsbCBpbnRvIHRoZSBwYWdlIGFsbG9jYXRvciwgdGhlIHNsYWIgYWxsb2NhdG9yLCBvciBvdGhlciByZWxldmFudCBzdWJzeXN0ZW1zPyBJJ2xsIGJlIHRyYWNpbmcgdGhlIGNvbnRyb2wgZmxvdyB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLlxuKiAgICoqQ29udGV4dDoqKiBXaGF0IGlzIHRoZSBjYWxsaW5nIGNvbnRleHQ/IEFyZSB3ZSBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgYSB1c2VyIHByb2Nlc3MsIG9yIGEga2VybmVsIHRocmVhZD8gVGhpcyBhZmZlY3RzIHRoZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBkZWFkbG9jay5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdWJ0bGUgZGV0YWlscywgbGlrZSB0aGUgdXNlIG9mIHNwZWNpZmljIGZsYWdzIG9yIGJpdGZpZWxkcyB3aXRoaW4gdGhlIGZvbGlvIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyosIG5vdCBqdXN0IHdoYXQgdGhlIG5hbWUgc3VnZ2VzdHMuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoyMC4wODEyNjgzMTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjU2LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjU2OlxcdHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbjEyNTc6XFx0XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuMTI1ODpcXHR7XFxuMTI1OTpcXHRcXHRnZnBfdCBnZnAgPSAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgPyBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2soKSA6XFxuMTI2MDpcXHRcXHRcXHQgICAgIEdGUF9UUkFOU0hVR0UpO1xcbjEyNjE6XFx0XFx0aW50IG5vZGUgPSBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKGNjKTtcXG4xMjYyOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMTI2MzpcXHRcXG4xMjY0OlxcdFxcdGZvbGlvID0gX19mb2xpb19hbGxvYyhnZnAsIG9yZGVyLCBub2RlLCBcXHUwMDI2Y2MtXFx1MDAzZWFsbG9jX25tYXNrKTtcXG4xMjY1OlxcdFxcdGlmICghZm9saW8pIHtcXG4xMjY2OlxcdFxcdFxcdCpmb2xpb3AgPSBOVUxMO1xcbjEyNjc6XFx0XFx0XFx0Y291bnRfY29sbGFwc2VfZXZlbnQob3JkZXIsIFRIUF9DT0xMQVBTRV9BTExPQ19GQUlMRUQsXFxuMTI2ODpcXHRcXHRcXHRcXHRcXHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9BTExPQ19GQUlMRUQpO1xcbjEyNjk6XFx0XFx0XFx0cmV0dXJuIFNDQU5fQUxMT0NfSFVHRV9QQUdFX0ZBSUw7XFxuMTI3MDpcXHRcXHR9XFxuMTI3MTpcXHRcXG4xMjcyOlxcdFxcdGNvdW50X2NvbGxhcHNlX2V2ZW50KG9yZGVyLCBUSFBfQ09MTEFQU0VfQUxMT0MsIE1USFBfU1RBVF9DT0xMQVBTRV9BTExPQyk7XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCkpKSB7XFxuMTI3NTpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEyNzY6XFx0XFx0XFx0KmZvbGlvcCA9IE5VTEw7XFxuMTI3NzpcXHRcXHRcXHRyZXR1cm4gU0NBTl9DR1JPVVBfQ0hBUkdFX0ZBSUw7XFxuMTI3ODpcXHRcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdFxcdGlmIChpc19wbWRfb3JkZXIob3JkZXIpKVxcbjEyODE6XFx0XFx0XFx0Y291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGZvbGlvLCBUSFBfQ09MTEFQU0VfQUxMT0MsIDEpO1xcbjEyODI6XFx0XFxuMTI4MzpcXHRcXHQqZm9saW9wID0gZm9saW87XFxuMTI4NDpcXHRcXHRyZXR1cm4gU0NBTl9TVUNDRUVEO1xcbjEyODU6XFx0fVxcbjEyODY6XFx0XFxuMTI4NzpcXHQvKlxcbjEyODg6XFx0ICogY29sbGFwc2VfaHVnZV9wYWdlKCkgZXhwZWN0cyB0aGUgbW1hcF9sb2NrIHRvIGJlIHVubG9ja2VkIGJlZm9yZSBlbnRlcmluZyBhbmRcXG4xMjg5OlxcdCAqIHdpbGwgYWx3YXlzIHJldHVybiB3aXRoIHRoZSBsb2NrIHVubG9ja2VkLCB0byBhdm9pZCBob2xkaW5nIHRoZSBtbWFwX2xvY2tcXG4xMjkwOlxcdCAqIHdoaWxlIGFsbG9jYXRpbmcgYSBUSFAsIGFzIHRoYXQgY291bGQgdHJpZ2dlciBkaXJlY3QgcmVjbGFpbS9jb21wYWN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoyMC4wODE0MDQwNjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzgxMTU1MDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGRpZyBpbnRvIHRoaXMgY29kZS4gVGhvc2UgbGluZXMsIHNwZWNpZmljYWxseSBsaW5lcyAxMjg4LTEyOTAsIHJlYWxseSBjYXVnaHQgbXkgZXllLiBUaGUgY29tbWVudCBhYm91dCBhdm9pZGluZyB0aGUgYG1tYXBfbG9ja2AgZHVyaW5nIFRIUCBhbGxvY2F0aW9uLCBhbmQgaG93IHRoYXQgY2FuIHRyaWdnZXIgZGlyZWN0IHJlY2xhaW0vY29tcGFjdGlvbuKApiB0aGF0J3MgdGhlIGNydXggb2YgaXQuIE5vdywgKmBjb2xsYXBzZV9maWxlYCogaXMgaG9sZGluZyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCB3aGVuIGl0IGNhbGxzIGBhbGxvY19jaGFyZ2VfZm9saW9gLiBUaGF0J3MgYSBwb3RlbnRpYWwgcmVjaXBlIGZvciBkaXNhc3Rlci4gSWYgZGlyZWN0IHJlY2xhaW0ga2lja3MgaW4sIHRoZSBmaWxlc3lzdGVtIG9yIHBhZ2UgY2FjaGUgY291bGQgdHJ5IHRvIGxvY2sgdGhlICpgbWFwcGluZ2AqLCBhbmQgd2UncmUgdGFsa2luZyBhYm91dCBhIHBvdGVudGlhbCBsb2NrZGVwIGlzc3VlIGhlcmUuIEkgbWVhbiwgd2UgYXJlIHJlYWxseSB0b3VjaGluZyBvbiBjb3JlIE1NIGxvZ2ljOiB0aGUgbG9ja2luZywgdGhlIHBhZ2UgY2FjaGUsIHJlYWRhaGVhZCwga2h1Z2VwYWdlZCBjb2xsYXBzZSBvZiBmaWxlIHBhZ2VzLCB0aGUgd2hvbGUgZW5jaGlsYWRhLlxuXG5UaGUgdXNlIG9mICpgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgKiB0byByZXBsYWNlICpgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAqIGlzIGFsc28gc2lnbmlmaWNhbnQsIGFuZCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBsb2NraW5nIG9yZGVyIG9mIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgIHJlbGF0aXZlIHRvIGZvbGlvIGxvY2tzLCB0cnVuY2F0ZSwgcmVhZGFoZWFkLCBhbmQgZXZlcnl0aGluZyBlbHNlIGluIGJldHdlZW4uXG5cblNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCdzIGNoZWNrIHRoZSBjcml0ZXJpYS4gU2VjdGlvbiAzIG9mIHRoYXQgZG9jdW1lbnQgc2VlbXMgcHJldHR5IGNsZWFyOiBcIkNvcmUgU3Vic3lzdGVtczogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLCAuLi5cIi4gQmluZ28uIEFuZCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgb3Iga2h1Z2VwYWdlZCBzY2FubmluZy4gVGhpcyBpcyB1bmVxdWl2b2NhbGx5IFwiV29ydGhGdXp6aW5nLlwiXG5cbk5vdyB0aGUgcXVlc3Rpb24gaXM6IHdoYXQgYXJlIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzPyBUaGUgZ3VpZGVsaW5lcyBpbiBTZWN0aW9uIDQgYXJlIHJlbGV2YW50OiBhdm9pZGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgdGFyZ2V0aW5nIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5cG9pbnRzLCBhbmQgZGVhbGluZyB3aXRoIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLlxuXG5XaGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaGVyZT8gT2J2aW91c2x5LCAqYGNvbGxhcHNlX2ZpbGVgKiBpbiBgbW0va2h1Z2VwYWdlZC5jYCBpcyBtb2RpZmllZC4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5cG9pbnRzIGFuZCBjYWxsZXJzIGFyZTogKmBjb2xsYXBzZV9zY2FuX2ZpbGVgKiwgKmBjb2xsYXBzZV9zaW5nbGVfcG1kYCosICpgbWFkdmlzZV9jb2xsYXBzZWAqLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBraHVnZXBhZ2VkIGNhbGxzIGluIHBhcnRpY3VsYXIsIGVzcGVjaWFsbHkgaG93IGl0IGNhbGxzICpgY29sbGFwc2VfZmlsZWAqIG9yICpgY29sbGFwc2Vfc2Nhbl9maWxlYCosIGp1c3QgdG8gYmUgc3VyZS4gSSdsbCBoZWFkIGJhY2sgaW50byBgbW0va2h1Z2VwYWdlZC5jYCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjoyNy44OTI5NTc1NDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDM5NDE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsYXBzZV9maWxlfGNvbGxhcHNlX3NjYW5fZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTIxMzk9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjIzLS8qKlxcbm1tL2todWdlcGFnZWQuYzoyMjI0OiAqIGNvbGxhcHNlX2ZpbGUgLSBjb2xsYXBzZSBmaWxlbWFwL3RtcGZzL3NobWVtIHBhZ2VzIGludG8gaHVnZSBvbmUuXFxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjQ3LSAqL1xcbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjI0OS1cXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2OTQtXFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbm1tL2todWdlcGFnZWQuYzoyNjk1OlxcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcXG5tbS9raHVnZXBhZ2VkLmMtMjY5Ni1cXHRyZXR1cm4gcmVzdWx0O1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2OTgtXFxubW0va2h1Z2VwYWdlZC5jOjI2OTk6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2todWdlcGFnZWQuYy0yNzAwLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjc5Ni1cXHRcXHR9IGVsc2Uge1xcbm1tL2todWdlcGFnZWQuYzoyNzk3OlxcdFxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHN0YXJ0LCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTI3OTgtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI4MDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgzMS1yZXRyeTpcXG5tbS9raHVnZXBhZ2VkLmM6MjgzMjpcXHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHBnb2ZmLCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTI4MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjI4LjA4NzM1NjU4MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODE0MjIwMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBGaXJzdCwgSSBzZWUgdGhhdCBgbWFkdmlzZV9jb2xsYXBzZWAgaXMgYSBjYWxsZXIuIFRoYXQgbWFrZXMgc2Vuc2UsIGhhbmRsaW5nIG1lbW9yeSBjb2xsYXBzZSBiYXNlZCBvbiB1c2VyIGhpbnRzLiBUaGVuIHRoZXJlIGlzIGBjb2xsYXBzZV9zY2FuX21tX3Nsb3RgLCB3aGljaCBpcyBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLCBwb3NzaWJseSBpbmRpY2F0aW5nIGl0J3MgcmVsYXRlZCB0byBzb21lIGtpbmQgb2Ygc2Nhbm5pbmcgb3IgYmFja2dyb3VuZCBwcm9jZXNzLlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwLiBJIG5lZWQgdG8gYmUgc3VyZTsgZG9lcyB0aGUga2VybmVsJ3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQgdGFzaywgc3BlY2lmaWNhbGx5IGBraHVnZXBhZ2VkX2RvX3NjYW5gLCBhY3R1YWxseSBjYWxsIHRoYXQgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdGAgZnVuY3Rpb24/IElmIGl0IGRvZXMsIHRoYXQncyBwb3RlbnRpYWxseSB2ZXJ5IHNpZ25pZmljYW50LCBhcyBpdCBsaW5rcyBhdXRvbWF0aWMgcGFnZSBjb2xsYXBzaW5nIHRvIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4gVGhpcyBuZWVkcyBjb25maXJtYXRpb24sIHNvIEknbGwgcGl2b3QgbXkgZm9jdXMgdG8gZXhhbWluZSB0aGUgY29kZSBvZiBgY29sbGFwc2Vfc2Nhbl9tbV9zbG90YCBpdHNlbGYuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgY2FsbGluZyBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjMyLjkwMTU3ODdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzE3NDA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsYXBzZV9zY2FuX21tX3Nsb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yODA5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4NjUtXFxubW0va2h1Z2VwYWdlZC5jOjI4NjY6c3RhdGljIHZvaWQgY29sbGFwc2Vfc2Nhbl9tbV9zbG90KHVuc2lnbmVkIGludCBwcm9ncmVzc19tYXgsXFxubW0va2h1Z2VwYWdlZC5jLTI4NjctXFx0XFx0ZW51bSBzY2FuX3Jlc3VsdCAqcmVzdWx0LCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjk5Nj1zdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2RvX3NjYW4oc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMwMTYtXFx0XFx0ICAgIHBhc3NfdGhyb3VnaF9oZWFkIFxcdTAwM2MgMilcXG5tbS9raHVnZXBhZ2VkLmM6MzAxNzpcXHRcXHRcXHRjb2xsYXBzZV9zY2FuX21tX3Nsb3QocHJvZ3Jlc3NfbWF4LCBcXHUwMDI2cmVzdWx0LCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTMwMTgtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjozMy4yODg3NTc2NjRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE4OTgxMjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgKipcblxuUmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoaXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBzZXR0aW5nLiBJIHJlbWVtYmVyIGhlYXJpbmcgYWJvdXQgaXQgaW4gdGhlIGNvbnRleHQgb2YgcmVjZW50IGRpc2N1c3Npb25zLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgaXQncyBhY3R1YWxseSBkZWZpbmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIHJlYWQtYWhlYWQgdHVuaW5nIHBhcmFtZXRlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBJIGFtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0IGlzIGEgZ2xvYmFsIG9yIHBlciBtb3VudCBvcHRpb24gYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHJlYWQtYWhlYWQgYmVoYXZpb3JzLiBBIHF1aWNrIHNlYXJjaCBvZiB0aGUga2VybmVsIHNvdXJjZSBvciByZWxldmFudCBkb2N1bWVudGF0aW9uIHNob3VsZCBjbGFyaWZ5IGl0cyBsb2NhdGlvbiBhbmQgcHVycG9zZSwgYmVjYXVzZSBpdHMgYmVoYXZpb3Igc2VlbXMgYSBiaXQgYW1iaWd1b3VzIGZyb20gd2hhdCBJIGhhdmUgcmVhZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzMyNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM2OjM1LjQ3ODU3MzUzMVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5MTMzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jYWNoZV9yYV91bmJvdW5kZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMzU0LVxcdFxcdFxcdFxcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24ndCByZXRha2UgaXQuXFxubW0va2h1Z2VwYWdlZC5jOjIzNTU6XFx0XFx0XFx0XFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcXG5tbS9raHVnZXBhZ2VkLmMtMjM1Ni1cXHRcXHRcXHRcXHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIzNTgtXFx0XFx0XFx0XFx0aWYgKGluZGV4IFxcdTAwM2MgZW9mKVxcbm1tL2todWdlcGFnZWQuYzoyMzU5OlxcdFxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFxcdTAwMjZyYWN0bCxcXG5tbS9raHVnZXBhZ2VkLmMtMjM2MC1cXHRcXHRcXHRcXHRcXHRcXHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xcbi0tXFxubW0vcmVhZGFoZWFkLmM9MTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJhY3RsX2FsbG9jX2ZvbGlvKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0yMDctLyoqXFxubW0vcmVhZGFoZWFkLmM6MjA4OiAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkIC0gU3RhcnQgdW5jaGVja2VkIHJlYWRhaGVhZC5cXG5tbS9yZWFkYWhlYWQuYy0yMDktICogQHJhY3RsOiBSZWFkYWhlYWQgY29udHJvbC5cXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTIyMS0gKi9cXG5tbS9yZWFkYWhlYWQuYzoyMjI6dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbm1tL3JlYWRhaGVhZC5jLTIyMy1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9va2FoZWFkX3NpemUpXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0yNDQtXFxubW0vcmVhZGFoZWFkLmM6MjQ1OlxcdHRyYWNlX3BhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKG1hcHBpbmctXFx1MDAzZWhvc3QsIGluZGV4LCBucl90b19yZWFkLFxcbm1tL3JlYWRhaGVhZC5jLTI0Ni1cXHRcXHRcXHRcXHQgICAgICBsb29rYWhlYWRfc2l6ZSk7XFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0zMTctfVxcbm1tL3JlYWRhaGVhZC5jOjMxODpFWFBPUlRfU1lNQk9MX0dQTChwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCk7XFxubW0vcmVhZGFoZWFkLmMtMzE5LVxcbi0tXFxubW0vcmVhZGFoZWFkLmM9MzI2PXN0YXRpYyB2b2lkIGRvX3BhZ2VfY2FjaGVfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTM0Ny1cXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxubW0vcmVhZGFoZWFkLmM6MzQ4OlxcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHJhY3RsLCBucl90b19yZWFkLCBsb29rYWhlYWRfc2l6ZSk7XFxubW0vcmVhZGFoZWFkLmMtMzQ5LVxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbi0tXFxubW0vcmVhZGFoZWFkLmM9NDgxPXZvaWQgcGFnZV9jYWNoZV9yYV9vcmRlcihzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtNTE0LVxcbm1tL3JlYWRhaGVhZC5jOjUxNTpcXHQvKiBTZWUgY29tbWVudCBpbiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpICovXFxubW0vcmVhZGFoZWFkLmMtNTE2LVxcdG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzY6MzUuNTc1NDkyODhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njc2MTk0ODk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBDaGFuZ2UgaW4gQ29yZSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGludm9sdmluZyBgbW0vcmVhZGFoZWFkLmM6MzQ3YCBhbmQgaXQncyBnb3QgbWUgdGhpbmtpbmcuIEl0IHNlZW1zIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaXMgbm93IGFzc3VtaW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBhY3F1aXJlZCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYC4gVGhhdCdzIGEga2V5IGRldGFpbC4gIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB1c2VkIHRvIGhhbmRsZSB0aGUgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSwgYnV0IG5vdyB3ZSd2ZSBnb3QgYGNvbGxhcHNlX2ZpbGVgICpob2xkaW5nKiB0aGlzIGxvY2sgZm9yIGl0cyAqZW50aXJlKiBkdXJhdGlvbi4gVGhlIGNvbW1lbnQgYWJvdXQgdGFraW5nIHRoZSBgaW52YWxpZGF0ZV9sb2NrYCBiZWZvcmUgYW55IGZvbGlvIGxvY2sgYmVjYXVzZSBcInRoZSByZWFkYWhlYWQgYmVsb3cgbmVlZHMgaXRcIiBpcyB0aGUgY2x1ZSBoZXJlIGFuZCB0aGF0IGB0cnVuY2F0ZWAgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgcGFyYWRpZ20gc2hpZnQgaW4gdGhlIE1NIGNvcmUuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBnb2VzIHRvIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIGBjb2xsYXBzZV9maWxlYCBpcyB0aGUgcHJpbWFyeSBtb2RpZmllZCBmdW5jdGlvbiwgYW5kIHRoZW4gdGhlcmUncyBpdHMgY2FsbGVyIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLCB0aGUgY2FsbGVyIG9mIHRoYXQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLCBhbmQgdGhlIHB1YmxpYyBlbnRyeSBwb2ludCBgbWFkdmlzZV9jb2xsYXBzZWAgZnJvbSB0aGUgYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgIHN5c2NhbGwuIEFuZCB0aGUga2h1Z2VwYWdlZCBkYWVtb24gZW50cnlwb2ludCBgY29sbGFwc2Vfc2Nhbl9tbV9zbG90YC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZWlyIHViaXF1aXR5LCBhbmQgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgYG1hZHZpc2VfY29sbGFwc2VgIGlzIE5PVCBhIGNvbW1vbiBwYXRoLCBvbmx5IHRyaWdnZXJlZCBieSB0aGUgc3BlY2lmaWMgYE1BRFZfQ09MTEFQU0VgIHN5c2NhbGwuIFNpbWlsYXJseSwgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGlzIGFsc28gbm90IHViaXF1aXRvdXMsIG9ubHkgY2FsbGVkIGJ5IHRob3NlIGNvbGxhcHNlLXJlbGF0ZWQgZnVuY3Rpb25zLiAgYGNvbGxhcHNlX3NjYW5fZmlsZWAgaXMgYWxzbyBvbmx5IGNhbGxlZCBieSBjb2xsYXBzZV9zaW5nbGVfcG1kLiBTbywgbm9uZSBvZiB0aGVzZSBhcmUgbGlrZWx5IHRvIGJlIHdpZGVseSB1c2VkLiBCdXQgdGhlbiBJJ20gd29uZGVyaW5nIGlmIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaXMgdWJpcXVpdG91cywgYmVjYXVzZSBpdCdzIGF0IHRoZSBjb3JlIG9mIHJlYWRhaGVhZCBpbiBhbnkgZmlsZSByZWFkLiBUaGUgZnVuY3Rpb25zIChgY29sbGFwc2VfZmlsZWAsIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAsIGBtYWR2aXNlX2NvbGxhcHNlYCkgc2VlbSBzcGVjaWZpYyB0byB0aGlzIFRIUCBjb2xsYXBzZSBmZWF0dXJlLiBJdCdzIGJlc3QgdG8gYXZvaWQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCB0byBrZWVwIHRoZSBmdXp6aW5nIGZvY3VzZWQuXG5cbkFscmlnaHQsIHdoYXQgY29uZmlndXJhdGlvbiBrbm9icyBjb250cm9sIHRoaXM/IEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiAoYEVuYWJsZUNvbmZpZ3NgKS4gYGtodWdlcGFnZWQuY2AgaXMgdGhlIGtleSwgc28gSSdsbCBnbyB0byBgbW0vTWFrZWZpbGVgLiAgQWhhISBgb2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub2AuIFRoYXQncyB0aGUgb25lLiBBbmQgaW4gYG1tL0tjb25maWdgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGl0c2VsZi4gIEl0IGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGEgY291cGxlIG9mIG90aGVyIHRoaW5ncy4gIElzIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQgb24gYW1kNjQ/IEkgbmVlZCB0byBsb29rIGluIGBhcmNoL3g4Ni9LY29uZmlnYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI3OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjo0Mi4zMzc0NDQ2NzFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDk2MzU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTEtXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0tcXG5hcmNoL3g4Ni9LY29uZmlnOjIxMjpcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC94ODYvS2NvbmZpZzoyMTM6XFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0yMTQtXFx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUCAgICAgICAgIGlmIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBVU0VSRkFVTFRGRFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTI5Nz1zdGF0aWMgaW5saW5lIGludCBwbWRfdHJhbnNfaHVnZShwbWRfdCBwbWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzAxLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMDI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMwMy1zdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTM1Nz1zdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzNzAtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEzNzE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzNzItc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYz01MDk9cG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNTIyLSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmFyY2gveDg2L21tL3BndGFibGUuYzo1MjM6XFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNTI0LXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjo0Mi40NTg0MTQ4NDlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE1ODYzMTQ5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApKipcblxuT2theSwgc28gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGZvciB4ODYgYXJjaGl0ZWN0dXJlLCB3aGljaCBtZWFucyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9uIGFtZDY0IGFzIHdlbGwuIFRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSBzaG91bGQgZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRpZWQgdG8gYGtodWdlcGFnZWRgIG9yIHJlbGF0ZWQgdG8gY29sbGFwc2VkIGZpbGVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBhd2FyZSBvZiB0aGUgZnVsbCBjb25maWd1cmF0aW9uIHNwYWNlIGhlcmUuIFdhaXQgYSBzZWNvbmQsIHdhc24ndCB0aGVyZSBhIGBSRUFET05MWV9USFBgIGNvbmZpZyBhdCBzb21lIHBvaW50PyBXYXMgdGhhdCBjb21wbGV0ZWx5IHJlbW92ZWQsIG9yIGhhcyBpdCBiZWVuIHJlbmFtZWQgb3IgZGVwcmVjYXRlZD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0MzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNjo1NC4wNDQ3MzI4OThaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjM0NjkwNzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJFQURPTkxZX1RIUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzY6NTYuMDA4MjE0ODM5WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY1MTQ3OTMwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIGluIG1tL0tjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gc2VlIGhvdyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBiZXlvbmQgdGhlIG1haW4gb25lLCB0aGF0IGFyZSBhbHNvIHVzaW5nIHRoaXMgb3B0aW9uIGluIHRoZSBmaWxlIGBtbS9LY29uZmlnYD8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbGFuZHNjYXBlIG9mIGRlcGVuZGVuY2llcyBhbmQgYXNzb2NpYXRlZCBzZXR0aW5ncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBvdmVycmlkZXMsIG9yIHJlbGF0ZWQgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbnRlcnR3aW5lZCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjcxMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM3OjAyLjUyMzAxMTQ2NFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzMzM0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzEwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9LY29uZmlnPTM9bWVudSBcXFwiTWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9uc1xcXCJcXG4tLVxcbm1tL0tjb25maWctOC0jXFxubW0vS2NvbmZpZzo5OmNvbmZpZyBBUkNIX05PX1NXQVBcXG5tbS9LY29uZmlnLTEwLVxcdGJvb2xcXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuLS1cXG5tbS9LY29uZmlnLTEyNC1cXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0NcXG5tbS9LY29uZmlnLTEyNi1cXHR0cmlzdGF0ZVxcbi0tXFxubW0vS2NvbmZpZz0xMzE9Y29tbWVudCBcXFwiWnNtYWxsb2MgaXMgYSBjb21tb24gYmFja2VuZCBhbGxvY2F0b3IgZm9yIHpzd2FwIFxcdTAwMjYgenJhbVxcXCJcXG5tbS9LY29uZmlnLTEzMi1cXG5tbS9LY29uZmlnOjEzMzpjb25maWcgWlNNQUxMT0NfU1RBVFxcbm1tL0tjb25maWctMTM0LVxcdGJvb2wgXFxcIkV4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEtXFxubW0vS2NvbmZpZzoxNDI6Y29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcXG5tbS9LY29uZmlnLTE0My1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzIHBlci16c3BhZ2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTE2Mj1tZW51IFxcXCJTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxcIlxcbm1tL0tjb25maWctMTYzLVxcbm1tL0tjb25maWc6MTY0OmNvbmZpZyBTTFVCXFxubW0vS2NvbmZpZy0xNjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy0xNjctXFxubW0vS2NvbmZpZzoxNjg6Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxcbm1tL0tjb25maWctMTY5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctMTcyLVxcbm1tL0tjb25maWc6MTczOmNvbmZpZyBTTFVCX1RJTllcXG5tbS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTg1LVxcbm1tL0tjb25maWc6MTg2OmNvbmZpZyBTTEFCX01FUkdFX0RFRkFVTFRcXG5tbS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJBbGxvdyBzbGFiIGNhY2hlcyB0byBiZSBtZXJnZWRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE5OS1cXG5tbS9LY29uZmlnOjIwMDpjb25maWcgU0xBQl9GUkVFTElTVF9SQU5ET01cXG5tbS9LY29uZmlnLTIwMS1cXHRib29sIFxcXCJSYW5kb21pemUgc2xhYiBmcmVlbGlzdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMjA3LVxcbm1tL0tjb25maWc6MjA4OmNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxubW0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiSGFyZGVuIHNsYWIgZnJlZWxpc3QgbWV0YWRhdGFcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTIxNi1cXG5tbS9LY29uZmlnOjIxNzpjb25maWcgU0xBQl9CVUNLRVRTXFxubW0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0yMzMtXFxubW0vS2NvbmZpZzoyMzQ6Y29uZmlnIFNMVUJfU1RBVFNcXG5tbS9LY29uZmlnLTIzNS1cXHRkZWZhdWx0IG5cXG4tLVxcbm1tL0tjb25maWctMjQ2LVxcbm1tL0tjb25maWc6MjQ3OmNvbmZpZyBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcXG5tbS9LY29uZmlnLTI0OC1cXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG4tLVxcbm1tL0tjb25maWc9MjYzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy0yNzAtXFxubW0vS2NvbmZpZzoyNzE6Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX1JBTkRPTVxcbm1tL0tjb25maWctMjcyLVxcdGJvb2wgXFxcIlJhbmRvbWl6ZSBzbGFiIGNhY2hlcyBmb3Igbm9ybWFsIGttYWxsb2NcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTI4Mi1cXG5tbS9LY29uZmlnOjI4Mzpjb25maWcgS01BTExPQ19QQVJUSVRJT05fVFlQRURcXG5tbS9LY29uZmlnLTI4NC1cXHRib29sIFxcXCJUeXBlIGJhc2VkIHNsYWIgY2FjaGUgc2VsZWN0aW9uIGZvciBub3JtYWwga21hbGxvY1xcXCJcXG4tLVxcbm1tL0tjb25maWc9MzA5PWVuZGNob2ljZVxcbm1tL0tjb25maWctMzEwLVxcbm1tL0tjb25maWc6MzExOmNvbmZpZyBSQU5ET01fS01BTExPQ19DQUNIRVNcXG5tbS9LY29uZmlnLTMxMi1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTMxNC1cXHRoZWxwXFxubW0vS2NvbmZpZzozMTU6XFx0ICBUcmFuc2l0aW9uYWwgY29uZmlnIGZvciBtaWdyYXRpb24gdG8gS01BTExPQ19QQVJUSVRJT05fQ0FDSEVTLlxcbm1tL0tjb25maWctMzE2LVxcbm1tL0tjb25maWc9MzE3PWVuZG1lbnUgIyBTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxubW0vS2NvbmZpZy0zMTgtXFxubW0vS2NvbmZpZzozMTk6Y29uZmlnIFNIVUZGTEVfUEFHRV9BTExPQ0FUT1JcXG5tbS9LY29uZmlnLTMyMC1cXHRib29sIFxcXCJQYWdlIGFsbG9jYXRvciByYW5kb21pemF0aW9uXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNDEtXFxubW0vS2NvbmZpZzozNDI6Y29uZmlnIENPTVBBVF9CUktcXG5tbS9LY29uZmlnLTM0My1cXHRib29sIFxcXCJEaXNhYmxlIGhlYXAgcmFuZG9taXphdGlvblxcXCJcXG4tLVxcbm1tL0tjb25maWctMzUzLVxcbm1tL0tjb25maWc6MzU0OmNvbmZpZyBNTUFQX0FMTE9XX1VOSU5JVElBTElaRURcXG5tbS9LY29uZmlnLTM1NS1cXHRib29sIFxcXCJBbGxvdyBtbWFwcGVkIGFub255bW91cyBtZW1vcnkgdG8gYmUgdW5pbml0aWFsaXplZFxcXCJcXG4tLVxcbm1tL0tjb25maWctMzYwLVxcdCAgZnJvbSBtbWFwKCkgaGFzIGl0cyBjb250ZW50cyBjbGVhcmVkIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG9cXG5tbS9LY29uZmlnOjM2MTpcXHQgIHVzZXJzcGFjZS4gIEVuYWJsaW5nIHRoaXMgY29uZmlnIG9wdGlvbiBhbGxvd3MgeW91IHRvIHJlcXVlc3QgdGhhdFxcbm1tL0tjb25maWctMzYyLVxcdCAgbW1hcCgpIHNraXAgdGhhdCBpZiBpdCBpcyBnaXZlbiBhbiBNQVBfVU5JTklUSUFMSVpFRCBmbGFnLCB0aHVzXFxuLS1cXG5tbS9LY29uZmlnLTM3NS1cXG5tbS9LY29uZmlnOjM3Njpjb25maWcgU0VMRUNUX01FTU9SWV9NT0RFTFxcbm1tL0tjb25maWctMzc3LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWc9MzgwPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy0zOTAtXFxubW0vS2NvbmZpZzozOTE6Y29uZmlnIEZMQVRNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy0zOTItXFx0Ym9vbCBcXFwiRmxhdCBNZW1vcnlcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQwNi1cXG5tbS9LY29uZmlnOjQwNzpjb25maWcgU1BBUlNFTUVNX01BTlVBTFxcbm1tL0tjb25maWctNDA4LVxcdGJvb2wgXFxcIlNwYXJzZSBNZW1vcnlcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTQyMD1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTQyMS1cXG5tbS9LY29uZmlnOjQyMjpjb25maWcgU1BBUlNFTUVNXFxubW0vS2NvbmZpZy00MjMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy00MjUtXFxubW0vS2NvbmZpZzo0MjY6Y29uZmlnIEZMQVRNRU1cXG5tbS9LY29uZmlnLTQyNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTQ0MC0jXFxubW0vS2NvbmZpZzo0NDE6Y29uZmlnIFNQQVJTRU1FTV9TVEFUSUNcXG5tbS9LY29uZmlnLTQ0Mi1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTQ0OC0jXFxubW0vS2NvbmZpZzo0NDk6Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxubW0vS2NvbmZpZy00NTAtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy00NTItXFxubW0vS2NvbmZpZzo0NTM6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRVxcbm1tL0tjb25maWctNDU0LVxcdGJvb2xcXG5tbS9LY29uZmlnLTQ1NS1cXG5tbS9LY29uZmlnOjQ1Njpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcXG5tbS9LY29uZmlnLTQ1Ny1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTQ2My1cXG5tbS9LY29uZmlnOjQ2NDpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfUFJFSU5JVFxcbm1tL0tjb25maWctNDY1LVxcdGJvb2xcXG5tbS9LY29uZmlnLTQ2Ni0jXFxubW0vS2NvbmZpZzo0Njc6IyBTZWxlY3QgdGhpcyBjb25maWcgb3B0aW9uIGZyb20gdGhlIGFyY2hpdGVjdHVyZSBLY29uZmlnLCBpZiBpdCBpcyBwcmVmZXJyZWRcXG5tbS9LY29uZmlnLTQ2OC0jIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSBvZiBIdWdlVExCL2Rldl9kYXggdm1lbW1hcCBvcHRpbWl6YXRpb24uXFxubW0vS2NvbmZpZy00NjktI1xcbm1tL0tjb25maWc6NDcwOmNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcXG5tbS9LY29uZmlnLTQ3MS1cXHRib29sXFxubW0vS2NvbmZpZy00NzItXFxubW0vS2NvbmZpZzo0NzM6Y29uZmlnIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcXG5tbS9LY29uZmlnLTQ3NC1cXHRib29sXFxubW0vS2NvbmZpZy00NzUtXFxubW0vS2NvbmZpZzo0NzY6Y29uZmlnIEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVFxcbm1tL0tjb25maWctNDc3LVxcdGJvb2xcXG5tbS9LY29uZmlnLTQ3OC1cXG5tbS9LY29uZmlnOjQ3OTpjb25maWcgSEFWRV9NRU1CTE9DS19QSFlTX01BUFxcbm1tL0tjb25maWctNDgwLVxcdGJvb2xcXG5tbS9LY29uZmlnLTQ4MS1cXG5tbS9LY29uZmlnOjQ4Mjpjb25maWcgSEFWRV9HVVBfRkFTVFxcbm1tL0tjb25maWctNDgzLVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnLTQ4Ni0jIEVuYWJsZSBtZW1ibG9jayBzdXBwb3J0IGZvciBzY3JhdGNoIG1lbW9yeSB3aGljaCBpcyBuZWVkZWQgZm9yIGtleGVjIGhhbmRvdmVyXFxubW0vS2NvbmZpZzo0ODc6Y29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENIXFxubW0vS2NvbmZpZy00ODgtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZy00OTItIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXFxubW0vS2NvbmZpZzo0OTM6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xcbm1tL0tjb25maWctNDk0LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWctNDk2LSMgS2VlcCBhcmNoIE5VTUEgbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBwb3N0LWluaXQuXFxubW0vS2NvbmZpZzo0OTc6Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXFxubW0vS2NvbmZpZy00OTgtXFx0Ym9vbFxcbm1tL0tjb25maWctNDk5LVxcbm1tL0tjb25maWc6NTAwOmNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXFxubW0vS2NvbmZpZy01MDEtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZy01MDUtIyAvZGV2L21lbS5cXG5tbS9LY29uZmlnOjUwNjpjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG5tbS9LY29uZmlnLTUwNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTUwOS1cXG5tbS9LY29uZmlnOjUxMDpjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUxMS1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTUxMy0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxubW0vS2NvbmZpZzo1MTQ6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTE1LVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01MjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTU0NS1cXG5tbS9LY29uZmlnOjU0Njpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT0ZGTElORVxcbm1tL0tjb25maWctNTQ3LVxcdGJvb2wgXFxcIm9mZmxpbmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTU1Mi1cXG5tbS9LY29uZmlnOjU1Mzpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE9cXG5tbS9LY29uZmlnLTU1NC1cXHRib29sIFxcXCJhdXRvXFxcIlxcbi0tXFxubW0vS2NvbmZpZy01NTktXFxubW0vS2NvbmZpZzo1NjA6Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9LRVJORUxcXG5tbS9LY29uZmlnLTU2MS1cXHRib29sIFxcXCJrZXJuZWxcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTU2Ni1cXG5tbS9LY29uZmlnOjU2Nzpjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX01PVkFCTEVcXG5tbS9LY29uZmlnLTU2OC1cXHRib29sIFxcXCJtb3ZhYmxlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01ODA9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy01ODEtXFxubW0vS2NvbmZpZzo1ODI6Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG5tbS9LY29uZmlnLTU4My1cXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTU4NS1cXG5tbS9LY29uZmlnOjU4Njpjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcXG5tbS9LY29uZmlnLTU4Ny1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnPTU5MD1lbmRpZiAjIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01OTEtXFxubW0vS2NvbmZpZzo1OTI6Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxubW0vS2NvbmZpZy01OTMtICAgICAgIGJvb2xcXG4tLVxcbm1tL0tjb25maWctNjA1LSNcXG5tbS9LY29uZmlnOjYwNjpjb25maWcgU1BMSVRfUFRFX1BUTE9DS1NcXG5tbS9LY29uZmlnLTYwNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTYxNS1cXG5tbS9LY29uZmlnOjYxNjpjb25maWcgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DS1xcbm1tL0tjb25maWctNjE3LVxcdGJvb2xcXG5tbS9LY29uZmlnLTYxOC1cXG5tbS9LY29uZmlnOjYxOTpjb25maWcgU1BMSVRfUE1EX1BUTE9DS1NcXG5tbS9LY29uZmlnLTYyMC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTYyNC0jIHN1cHBvcnQgZm9yIG1lbW9yeSBiYWxsb29uXFxubW0vS2NvbmZpZzo2MjU6Y29uZmlnIEJBTExPT05cXG5tbS9LY29uZmlnLTYyNi1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTYyOS0jIHN1cHBvcnQgZm9yIG1lbW9yeSBiYWxsb29uIHBhZ2UgbWlncmF0aW9uXFxubW0vS2NvbmZpZzo2MzA6Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02MzEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIGJhbGxvb24gbWVtb3J5IG1pZ3JhdGlvblxcXCJcXG4tLVxcbm1tL0tjb25maWctNjQxLSMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cXG5tbS9LY29uZmlnOjY0Mjpjb25maWcgQ09NUEFDVElPTlxcbm1tL0tjb25maWctNjQzLVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgY29tcGFjdGlvblxcXCJcXG4tLVxcbm1tL0tjb25maWctNjU2LVxcbm1tL0tjb25maWc6NjU3OmNvbmZpZyBDT01QQUNUX1VORVZJQ1RBQkxFX0RFRkFVTFRcXG5tbS9LY29uZmlnLTY1OC1cXHRpbnRcXG4tLVxcbm1tL0tjb25maWctNjY0LSMgc3VwcG9ydCBmb3IgZnJlZSBwYWdlIHJlcG9ydGluZ1xcbm1tL0tjb25maWc6NjY1OmNvbmZpZyBQQUdFX1JFUE9SVElOR1xcbm1tL0tjb25maWctNjY2LVxcdGJvb2wgXFxcIkZyZWUgcGFnZSByZXBvcnRpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTY3Mi1cXG5tbS9LY29uZmlnOjY3Mzpjb25maWcgTlVNQV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3NC1cXHRib29sIFxcXCJOVU1BIHBhZ2UgbWlncmF0aW9uXFxcIlxcbi0tXFxubW0vS2NvbmZpZy02ODMtXFxubW0vS2NvbmZpZzo2ODQ6Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjg1LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWctNjg3LVxcbm1tL0tjb25maWc6Njg4OmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODktXFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy02OTAtXFxubW0vS2NvbmZpZzo2OTE6Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbm1tL0tjb25maWctNjkyLVxcdGJvb2xcXG5tbS9LY29uZmlnLTY5My1cXG5tbS9LY29uZmlnOjY5NDpjb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG5tbS9LY29uZmlnLTY5NS1cXHRib29sXFxubW0vS2NvbmZpZy02OTYtXFxubW0vS2NvbmZpZzo2OTc6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTgtXFx0ZGVmX2Jvb2wgblxcbi0tXFxubW0vS2NvbmZpZy03MDYtXFxubW0vS2NvbmZpZzo3MDc6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzA4LVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcbm1tL0tjb25maWctNzA5LVxcbm1tL0tjb25maWc6NzEwOmNvbmZpZyBQQ1BfQkFUQ0hfU0NBTEVfTUFYXFxubW0vS2NvbmZpZy03MTEtXFx0aW50IFxcXCJNYXhpbXVtIHNjYWxlIGZhY3RvciBvZiBQQ1AgKFBlci1DUFUgcGFnZXNldCkgYmF0Y2ggYWxsb2NhdGUvZnJlZVxcXCJcXG4tLVxcbm1tL0tjb25maWctNzIwLVxcbm1tL0tjb25maWc6NzIxOmNvbmZpZyBQSFlTX0FERFJfVF82NEJJVFxcbm1tL0tjb25maWctNzIyLVxcdGRlZl9ib29sIDY0QklUXFxubW0vS2NvbmZpZy03MjMtXFxubW0vS2NvbmZpZzo3MjQ6Y29uZmlnIE1NVV9OT1RJRklFUlxcbm1tL0tjb25maWctNzI1LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWctNzI3LVxcbm1tL0tjb25maWc6NzI4OmNvbmZpZyBLU01cXG5tbS9LY29uZmlnLTcyOS1cXHRib29sIFxcXCJFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTc0Mi1cXG5tbS9LY29uZmlnOjc0Mzpjb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXFxubW0vS2NvbmZpZy03NDQtXFx0aW50IFxcXCJMb3cgYWRkcmVzcyBzcGFjZSB0byBwcm90ZWN0IGZyb20gdXNlciBhbGxvY2F0aW9uXFxcIlxcbi0tXFxubW0vS2NvbmZpZy03NjEtXFxubW0vS2NvbmZpZzo3NjI6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc2My1cXHRib29sXFxubW0vS2NvbmZpZy03NjQtXFxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NjYtXFx0ZGVwZW5kcyBvbiBNTVVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc3OC1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTc4MS1cXG5tbS9LY29uZmlnOjc4Mjpjb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xcbm1tL0tjb25maWctNzgzLVxcdGludCBcXFwiVHVybiBvbiBtbWFwKCkgZXhjZXNzIHNwYWNlIHRyaW1taW5nIGJlZm9yZSBib290aW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04MDktXFxubW0vS2NvbmZpZzo4MTA6Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcXG5tbS9LY29uZmlnLTgxMS1cXHRib29sXFxubW0vS2NvbmZpZy04MTItXFxubW0vS2NvbmZpZzo4MTM6Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcXG5tbS9LY29uZmlnLTgxNC1cXHRkZWZfYm9vbCBuXFxubW0vS2NvbmZpZy04MTUtXFxubW0vS2NvbmZpZzo4MTY6Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXFxubW0vS2NvbmZpZy04MTctXFx0Ym9vbCBcXFwiQWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgzMS1cXG5tbS9LY29uZmlnOjgzMjpjb25maWcgTU1fSURcXG5tbS9LY29uZmlnLTgzMy1cXHRkZWZfYm9vbCBuXFxubW0vS2NvbmZpZy04MzQtXFxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM2LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU4LVxcbm1tL0tjb25maWc6ODU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2MC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2NS1cXG5tbS9LY29uZmlnOjg2NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY3LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3NC1cXG5tbS9LY29uZmlnOjg3NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3Ni1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODgyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTEtXFxubW0vS2NvbmZpZzo4OTI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5My1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTAxLVxcbm1tL0tjb25maWc6OTAyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAzLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA5LVxcbm1tL0tjb25maWc6OTEwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTEtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNy1cXG5tbS9LY29uZmlnOjkxODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxOS1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyNz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM2LVxcbm1tL0tjb25maWc6OTM3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzgtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0NS1cXG5tbS9LY29uZmlnOjk0NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1My1cXG5tbS9LY29uZmlnOjk1NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU1LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjEtXFxubW0vS2NvbmZpZzo5NjI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjMtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Njk9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy05NzAtXFxubW0vS2NvbmZpZzo5NzE6Y29uZmlnIFRIUF9TV0FQXFxubW0vS2NvbmZpZy05NzItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy05ODAtXFxubW0vS2NvbmZpZzo5ODE6Y29uZmlnIE5PX1BBR0VfTUFQQ09VTlRcXG5tbS9LY29uZmlnLTk4Mi1cXHRib29sIFxcXCJObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTg2LVxcbm1tL0tjb25maWc6OTg3OlxcdCAgV2hlbiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCwgc29tZSBpbnRlcmZhY2VzIHRoYXQgcmVsaWVkIG9uXFxubW0vS2NvbmZpZy05ODgtXFx0ICB0aGlzIGluZm9ybWF0aW9uIHdpbGwgcmVseSBvbiBsZXNzLXByZWNpc2UgcGVyLWFsbG9jYXRpb24gaW5mb3JtYXRpb25cXG4tLVxcbm1tL0tjb25maWc9OTk0PWVuZGlmICMgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4tLVxcbm1tL0tjb25maWctOTk2LSMgc2ltcGxlIGhlbHBlciB0byBtYWtlIHRoZSBjb2RlIGEgYml0IGVhc2llciB0byByZWFkXFxubW0vS2NvbmZpZzo5OTc6Y29uZmlnIFBBR0VfTUFQQ09VTlRcXG5tbS9LY29uZmlnLTk5OC1cXHRkZWZfYm9vbCAhTk9fUEFHRV9NQVBDT1VOVFxcbi0tXFxubW0vS2NvbmZpZy0xMDAyLSNcXG5tbS9LY29uZmlnOjEwMDM6Y29uZmlnIFBHVEFCTEVfSEFTX0hVR0VfTEVBVkVTXFxubW0vS2NvbmZpZy0xMDA0LVxcdGRlZl9ib29sIFRSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZy0xMDA4LSNcXG5tbS9LY29uZmlnOjEwMDk6Y29uZmlnIEhBVkVfR0lHQU5USUNfRk9MSU9TXFxubW0vS2NvbmZpZy0xMDEwLVxcdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcXFxcbi0tXFxubW0vS2NvbmZpZy0xMDEyLVxcbm1tL0tjb25maWc6MTAxMzpjb25maWcgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVxcbm1tL0tjb25maWctMTAxNC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5tbS9LY29uZmlnLTEwMTYtIyBUT0RPOiBBbGxvdyB0byBiZSBlbmFibGVkIHdpdGhvdXQgVEhQXFxubW0vS2NvbmZpZzoxMDE3OmNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDE4LVxcdGRlZl9ib29sIG5cXG4tLVxcbm1tL0tjb25maWctMTAyMC1cXG5tbS9LY29uZmlnOjEwMjE6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxcbm1tL0tjb25maWctMTAyMi1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9LY29uZmlnLTEwMjQtXFxubW0vS2NvbmZpZzoxMDI1OmNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMjYtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy0xMDMyLSNcXG5tbS9LY29uZmlnOjEwMzM6Y29uZmlnIEFSQ0hfTU9EVUxFX05FRURTX1dFQUtfUEVSX0NQVVxcbm1tL0tjb25maWctMTAzNC0gICAgICAgYm9vbFxcbi0tXFxubW0vS2NvbmZpZy0xMDM4LSNcXG5tbS9LY29uZmlnOjEwMzk6Y29uZmlnIE5FRURfUEVSX0NQVV9LTVxcbm1tL0tjb25maWctMTA0MC1cXHRkZXBlbmRzIG9uICFTTVAgfHwgIU1NVVxcbi0tXFxubW0vS2NvbmZpZy0xMDQzLVxcbm1tL0tjb25maWc6MTA0NDpjb25maWcgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXFxubW0vS2NvbmZpZy0xMDQ1LVxcdGJvb2xcXG5tbS9LY29uZmlnLTEwNDYtXFxubW0vS2NvbmZpZzoxMDQ3OmNvbmZpZyBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbm1tL0tjb25maWctMTA0OC1cXHRib29sXFxubW0vS2NvbmZpZy0xMDQ5LVxcbm1tL0tjb25maWc6MTA1MDpjb25maWcgVVNFX1BFUkNQVV9OVU1BX05PREVfSURcXG5tbS9LY29uZmlnLTEwNTEtXFx0Ym9vbFxcbm1tL0tjb25maWctMTA1Mi1cXG5tbS9LY29uZmlnOjEwNTM6Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxubW0vS2NvbmZpZy0xMDU0LVxcdGJvb2xcXG5tbS9LY29uZmlnLTEwNTUtXFxubW0vS2NvbmZpZzoxMDU2OmNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNTctXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDcwLVxcbm1tL0tjb25maWc6MTA3MTpjb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwNzItXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDc2LVxcbm1tL0tjb25maWc6MTA3Nzpjb25maWcgQ01BX1NZU0ZTXFxubW0vS2NvbmZpZy0xMDc4LVxcdGJvb2wgXFxcIkNNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4My1cXG5tbS9LY29uZmlnOjEwODQ6Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA4NS1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA5Ni0jXFxubW0vS2NvbmZpZzoxMDk3OiMgU2VsZWN0IHRoaXMgY29uZmlnIG9wdGlvbiBmcm9tIHRoZSBhcmNoaXRlY3R1cmUgS2NvbmZpZywgaWYgYXZhaWxhYmxlLCB0byBzZXRcXG5tbS9LY29uZmlnLTEwOTgtIyB0aGUgbWF4IHBhZ2Ugb3JkZXIgZm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBhbGxvY2F0aW9ucy5cXG5tbS9LY29uZmlnLTEwOTktI1xcbm1tL0tjb25maWc6MTEwMDpjb25maWcgQVJDSF9GT1JDRV9NQVhfT1JERVJcXG5tbS9LY29uZmlnLTExMDEtXFx0aW50XFxuLS1cXG5tbS9LY29uZmlnLTExMDctI1xcbm1tL0tjb25maWc6MTEwODpjb25maWcgUEFHRV9CTE9DS19NQVhfT1JERVJcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MDIuNTkxMzUyNzIzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MDg1MDY1MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEhQIENvbGxhcHNlIFBhdGNoKipcblxuT2theSwgdGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBrZXkgY29uZmlnIGhlcmUsIHRoZSBlbmFibGVyIGZvciBraHVnZXBhZ2VkLCBhbmQgdGhhdCB1bmRlciBpdCwgdGhlIHN5c3RlbSBkZWZhdWx0cyBmb3IgVEhQIGFyZSBpbXBsaWNpdGx5IGluY2x1ZGVkLlxuXG5MZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZvY3VzIHN5bWJvbHMuLi4gcmlnaHQsIGl0J3MgYGNvbGxhcHNlX2ZpbGVgLCBgY29sbGFwc2Vfc2Nhbl9maWxlYCwgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBHb3QgaXQuXG5cbk5vdywgbGV0J3MgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJIG5lZWQgdG8gZXhwbGFpbiB0aGUgcmVhc29uaW5nIGNsZWFybHkuIFRoZSBwYXRjaCBpcyBhbHRlcmluZyB0aGUgbG9ja2luZyBiZWhhdmlvciB3aXRoaW4gYGNvbGxhcHNlX2ZpbGUoKWAuIFNwZWNpZmljYWxseSwgaXQncyBub3cgdGFraW5nIHRoZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKClgIGFjcm9zcyB0aGUgZW50aXJlIFRIUCBjb2xsYXBzZSBvcGVyYXRpb24sIGluY2x1ZGluZyB0aGUgY2FsbCB0byBgYWxsb2NfY2hhcmdlX2ZvbGlvKClgLiBBZGRpdGlvbmFsbHksIGl0IHJlcGxhY2VzIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgIHdpdGggYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgLiBUaGlzIGltcGFjdHMgY29yZSBNTSBjb25jdXJyZW5jeSwgbG9ja2luZyBvcmRlcnMg4oCTIGludmFsaWRhdGUgbG9jayB2ZXJzdXMgZm9saW8gbG9ja3MgdmVyc3VzIHJlY2xhaW0gYW5kIHRydW5jYXRlIGludGVyYWN0aW9ucyDigJMgYW5kIHJlYWRhaGVhZCBsaW1pdHMuIFJlbWVtYmVyLCB0aGlzIGxvZ2ljIGlzIHRyaWdnZXJlZCBieSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgYW5kIGtodWdlcGFnZWQgc2Nhbm5pbmcuXG5cblRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBzaW1wbGUgZW5vdWdoLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUganVzdCBgW1wiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIl1gLiBBbmQsIGFzIHdlJ3ZlIHJldmlld2VkLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJjb2xsYXBzZV9maWxlXCIsIFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsIFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLCBcIm1hZHZpc2VfY29sbGFwc2VcIl1gLlxuXG5Ib2xkIG9uLCBsZXQgbWUgZG91YmxlLWNoZWNrLiBBbSBJIG1pc3NpbmcgYW55dGhpbmcsIG9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgZnVuY3Rpb24gaW4gdGhpcyBzcGFjZSB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZD8gQWgsIHJpZ2h0LCBgYWxsb2NfY2hhcmdlX2ZvbGlvYC4uLiBCdXQgdGhhdCdzIG9ubHkgY2FsbGVkIGJ5IGtodWdlcGFnZWQsIGFuZCAqc3BlY2lmaWNhbGx5KiBieSBgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluYCwgYGNvbGxhcHNlX2h1Z2VfcGFnZWAgYW5kIGBjb2xsYXBzZV9maWxlYC4gSG93ZXZlciwgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgY29sbGFwc2VfZmlsZWAsIGFuZCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmcm9tIHVzZXJzcGFjZSBpcyBgbWFkdmlzZV9jb2xsYXBzZWAuIFNvLCB0aGUgaW5pdGlhbCBmb2N1cyBpcyBjb3JyZWN0LiBUaG9zZSBmb3VyIGFyZSB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGVtcGhhc2l6ZS5cblxuT2theSwgYWxsIHNldC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzUzLCJPdXRwdXRUb2tlbnMiOjE3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNzoxNi42NzY0MjA2NjRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY2NDQ5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29sbGFwc2VfZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zaW5nbGVfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBjb2xsYXBzZV9maWxlKCkgYnkgYWNxdWlyaW5nIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZCgpIGFjcm9zcyBmb2xpbyBhbGxvY2F0aW9uIGFuZCB0aGUgcGFnZSBzY2FubmluZyBsb29wLCBhbmQgc3dpdGNoaW5nIHRoZSByZWFkYWhlYWQgbWVjaGFuaXNtIHRvIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoaXMgY2hhbmdlcyBzeW5jaHJvbml6YXRpb24gaW52YXJpYW50cywgbG9jayBvcmRlcmluZyAoaW52YWxpZGF0ZV9sb2NrIHZzIGZvbGlvIGxvY2ssIHRydW5jYXRlLCBhbmQgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGFsbG9jYXRpb24pLCBhbmQgcmVhZGFoZWFkIGJvdW5kaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbGxhcHNlX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NjYW5fZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xsYXBzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gY29sbGFwc2VfZmlsZSgpIGJ5IGFjcXVpcmluZyBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKSBhY3Jvc3MgZm9saW8gYWxsb2NhdGlvbiBhbmQgdGhlIHBhZ2Ugc2Nhbm5pbmcgbG9vcCwgYW5kIHN3aXRjaGluZyB0aGUgcmVhZGFoZWFkIG1lY2hhbmlzbSB0byBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLiBUaGlzIGNoYW5nZXMgc3luY2hyb25pemF0aW9uIGludmFyaWFudHMsIGxvY2sgb3JkZXJpbmcgKGludmFsaWRhdGVfbG9jayB2cyBmb2xpbyBsb2NrLCB0cnVuY2F0ZSwgYW5kIG1lbW9yeSByZWNsYWltIGR1cmluZyBhbGxvY2F0aW9uKSwgYW5kIHJlYWRhaGVhZCBib3VuZGluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciB0aGUga2h1Z2VwYWdlZCBkYWVtb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM3OjE2Ljc5MzA3NDYyM1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMTcyMjE3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNzoxNi43OTM1MTE4NjNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MjAxNjc3Njg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0va2h1Z2VwYWdlZC5jIHRvIGFkanVzdCBsb2NraW5nIG9yZGVyIGluIGNvbGxhcHNlX2ZpbGUoKSBieSBhY3F1aXJpbmcgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKCkgcHJpb3IgdG8gdGFraW5nIGZvbGlvIGxvY2tzLCBhbmQgaW52b2tlcyBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpIGluc3RlYWQgb2YgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBhbmQgcGFnZSBjYWNoZSByZWFkYWhlYWQgYm91bmRzLiBUaGUgcmVhZGFoZWFkX2NvbnRyb2wgc3RydWN0dXJlIChyYWN0bCkgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgREVGSU5FX1JFQURBSEVBRCAoQzk5IGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGVuc3VyaW5nIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBtb2RpZmllZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGRlYnVnIGtlcm5lbHMgKEtBU0FOIGJ1aWxkcyksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViOWQyMTE2NWE3MWZlM2FlN2I2MzBiMWExNmY1ZmNkM2QxNGJlYTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozNTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xuaW5kZXggMTFmZjk4ZDU1Yzc2ZS4uNjkwY2NiY2RmNTkzOCAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuKysrIGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjI2Nyw2ICsyMjY3LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFZNX1dBUk5fT05fT05DRSghaXNfc2htZW0gXHUwMDI2XHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcbiBcdFZNX1dBUk5fT05fT05DRShzdGFydCBcdTAwMjYgKEhQQUdFX1BNRF9OUiAtIDEpKTtcbiBcbitcdC8qXG4rXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcbitcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbitcdCAqL1xuK1x0aWYgKCFpc19zaG1lbSlcbitcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xuK1xuIFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFx1MDAyNm5ld19mb2xpbywgbW0sIGNjLCBIUEFHRV9QTURfT1JERVIpO1xuIFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTIzMzcsMTAgKzIzNDQsMjAgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuIFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4rXHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4rXHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4rXHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4rXG4gXHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuLVx0XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4tXHRcdFx0XHRcdFx0XHQgIGZpbGUsIGluZGV4LFxuLVx0XHRcdFx0XHRcdFx0ICBlbmQgLSBpbmRleCk7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cbitcdFx0XHRcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXG4rXHRcdFx0XHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAoaW5kZXggXHUwMDNjIGVvZilcbitcdFx0XHRcdFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXHUwMDI2cmFjdGwsXG4rXHRcdFx0XHRcdFx0bWluKGVuZCwgZW9mKSAtIGluZGV4LCAwKTtcbiBcdFx0XHRcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cbiBcdFx0XHRcdGxydV9hZGRfZHJhaW4oKTtcbiBcdFx0XHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKG1hcHBpbmcsIGluZGV4KTtcbkBAIC0yNjcyLDYgKzI2ODksOCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcbiBcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xuIG91dDpcbitcdGlmICghaXNfc2htZW0pXG4rXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG4gXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XG4gXHRyZXR1cm4gcmVzdWx0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MTYuNzkzNTEyNzgzWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwOTIxNDA0MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUga2h1Z2VwYWdlZCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYG1tL2todWdlcGFnZWQuY2AgYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgZGVhbHMgd2l0aCB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQncyB3aGVyZSBhIGxvdCBvZiBjb21wbGV4IG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgdGVuZCB0byBvY2N1ci4gIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIG9yZGVyaW5nIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy5cblxuTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgZmlsZSBtYXBwaW5nIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiBhbmQgaGFuZGxpbmcgb2YgdGhlIGBpbnZhbGlkYXRlX2xvY2tgLiAgVGhlIGludHJvZHVjdGlvbiBvZiBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCBhbmQgYGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkYCBhbG9uZyB3aXRoIHRoZSBgREVGSU5FX1JFQURBSEVBRGAgbWFjcm8gY2F0Y2hlcyBteSBleWUgaW1tZWRpYXRlbHkuIFRoaXMgc3VnZ2VzdHMgdGhleSBhcmUgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIHJlYWRhaGVhZCBsb2dpYywgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBidXQgYXMgd2UgYWxsIGtub3cgdGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBjYW4gb2Z0ZW4gaW50cm9kdWNlIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgaXNzdWVzLlxuXG5UaGUgY29tbWVudCBhYm91dCB0YWtpbmcgYGludmFsaWRhdGVfbG9ja2AgYmVmb3JlIGFueSBmb2xpbyBsb2NrIGlzIGNydWNpYWwuICBUaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgbG9ja2luZyBvcmRlciwgcG90ZW50aWFsbHkgdG8gcHJldmVudCBkZWFkbG9ja3Mgb3IgaW1wcm92ZSBjb25jdXJyZW5jeS4gVGhlIG9sZCBsb2NraW5nIG9yZGVyIGlzIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLiBXYXMgdGhlcmUgYSBrbm93biBpc3N1ZSB0aGF0IGxlZCB0byB0aGlzIHJlb3JkZXJpbmc/XG5cblRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIHNlZW1zIGltcG9ydGFudCBhcyBhIHJlcGxhY2VtZW50IGZvciBhIHByZXZpb3VzIHJlYWRhaGVhZCBjYWxsLiBUaGUgbm90ZSBhYm91dCBFT0YgbWFrZXMgbWUgdGhpbmsgdGhlIG9sZCBiZWhhdmlvciBjb3VsZCBoYXZlIGNhdXNlZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgY29tbWVudCBhYm91dCBpbnZhbGlkYXRlX2xvY2sgYmVpbmcgaGVsZCBhYm92ZSBpcyBhbHNvIGltcG9ydGFudC5cblxuT3ZlcmFsbCwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZmFpcmx5IHRhcmdldGVkIGNoYW5nZSwgYW5kIG5vdCBhIG1hc3NpdmUgcmVmYWN0b3IuIEJ1dCwgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgYSBzZWVtaW5nbHkgc21hbGwgY2hhbmdlIGNhbiBoYXZlIGZhci1yZWFjaGluZyBjb25zZXF1ZW5jZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBuZXcgcmVhZGFoZWFkIG1lY2hhbmlzbSBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIG1lbW9yeSBzYWZldHkgaXNzdWVzLiAgSSdsbCB3YW50IHRvIGluc3BlY3QgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGhvdyBgaW52YWxpZGF0ZV9sb2NrYCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gbG9ja2luZyBhbmQgdGhlIHJlYWRhaGVhZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBLTVNBTiB0byByZXZlYWwgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJIHNob3VsZCB1c2UgZ3JlcHBlciBvciByZWFkLWZpbGUgb24gYG1tL2todWdlcGFnZWQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgY29kZS4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGBpZiAoIWlzX3NobWVtKWAgYmxvY2ssIHRvIHNlZSBob3cgdGhlIG5ldyBsb2NraW5nIGFuZCByZWFkYWhlYWQgZnVuY3Rpb25zIGFyZSB1c2VkLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgSSBnZXQgZnJvbSB0aGVzZSBjaGVja3MsIEknbGwgYmUgYWJsZSB0byB0ZWxsIGlmIEtNU0FOIHNob3VsZCBiZSBhcHBsaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MjcuNzE0OTIyNDQxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MzAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI2MDpcXHRcXG4yMjYxOlxcdFxcdC8qXFxuMjI2MjpcXHRcXHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxcbjIyNjM6XFx0XFx0ICpcXG4yMjY0OlxcdFxcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xcbjIyNjU6XFx0XFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxcbjIyNjY6XFx0XFx0ICovXFxuMjI2NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcXG4yMjY4OlxcdFxcdFZNX1dBUk5fT05fT05DRShzdGFydCBcXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XFxuMjI2OTpcXHRcXG4yMjcwOlxcdFxcdC8qXFxuMjI3MTpcXHRcXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcXG4yMjcyOlxcdFxcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cXG4yMjczOlxcdFxcdCAqL1xcbjIyNzQ6XFx0XFx0aWYgKCFpc19zaG1lbSlcXG4yMjc1OlxcdFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4yMjc2OlxcdFxcbjIyNzc6XFx0XFx0cmVzdWx0ID0gYWxsb2NfY2hhcmdlX2ZvbGlvKFxcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcXG4yMjc4OlxcdFxcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxcbjIyNzk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI4MDpcXHRcXG4yMjgxOlxcdFxcdG1hcHBpbmdfc2V0X3VwZGF0ZShcXHUwMDI2eGFzLCBtYXBwaW5nKTtcXG4yMjgyOlxcdFxcbjIyODM6XFx0XFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XFxuMjI4NDpcXHRcXHRpZiAoaXNfc2htZW0pXFxuMjI4NTpcXHRcXHRcXHRfX2ZvbGlvX3NldF9zd2FwYmFja2VkKG5ld19mb2xpbyk7XFxuMjI4NjpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZWluZGV4ID0gc3RhcnQ7XFxuMjI4NzpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xcbjIyODg6XFx0XFxuMjI4OTpcXHRcXHQvKlxcbjIyOTA6XFx0XFx0ICogRW5zdXJlIHdlIGhhdmUgc2xvdHMgZm9yIGFsbCB0aGUgcGFnZXMgaW4gdGhlIHJhbmdlLiAgVGhpcyBpc1xcbjIyOTE6XFx0XFx0ICogYWxtb3N0IGNlcnRhaW5seSBhIG5vLW9wIGJlY2F1c2UgbW9zdCBvZiB0aGUgcGFnZXMgbXVzdCBiZSBwcmVzZW50XFxuMjI5MjpcXHRcXHQgKi9cXG4yMjkzOlxcdFxcdGRvIHtcXG4yMjk0OlxcdFxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMjk1OlxcdFxcdFxcdHhhc19jcmVhdGVfcmFuZ2UoXFx1MDAyNnhhcyk7XFxuMjI5NjpcXHRcXHRcXHRpZiAoIXhhc19lcnJvcihcXHUwMDI2eGFzKSlcXG4yMjk3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIyOTg6XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjI5OTpcXHRcXHRcXHRpZiAoIXhhc19ub21lbShcXHUwMDI2eGFzLCBHRlBfS0VSTkVMKSkge1xcbjIzMDA6XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjIzMDE6XFx0XFx0XFx0XFx0Z290byByb2xsYmFjaztcXG4yMzAyOlxcdFxcdFxcdH1cXG4yMzAzOlxcdFxcdH0gd2hpbGUgKDEpO1xcbjIzMDQ6XFx0XFxuMjMwNTpcXHRcXHRmb3IgKGluZGV4ID0gc3RhcnQ7IGluZGV4IFxcdTAwM2MgZW5kOykge1xcbjIzMDY6XFx0XFx0XFx0eGFzX3NldChcXHUwMDI2eGFzLCBpbmRleCk7XFxuMjMwNzpcXHRcXHRcXHRmb2xpbyA9IHhhc19sb2FkKFxcdTAwMjZ4YXMpO1xcbjIzMDg6XFx0XFxuMjMwOTpcXHRcXHRcXHRWTV9CVUdfT04oaW5kZXggIT0geGFzLnhhX2luZGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MjcuNzE1MzA4MjcyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3NTY4ODkxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGtodWdlcGFnZWQuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGh1Z2VwYWdlcywgYW5kIHRoZSBkaXNjdXNzaW9uIGhhcyBkcmlmdGVkIHRvd2FyZHMgcG90ZW50aWFsIGlzc3Vlcywgb3IgcGVyaGFwcyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgdGhpbmsgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IHRoaXMgZGVlcCBkaXZlIGlzIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgbWlnaHQgYmUgZ29pbmcgb24sIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDIzMzAtMjM4MC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgc29tZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLCBhbmQgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IG1pc21hbmFnaW5nLCBodWdlcGFnZXMgaW4gYSBzcGVjaWZpYyBzY2VuYXJpby4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0IHRob3NlIGxpbmVzIGFyZSBhY3R1YWxseSAqZG9pbmcqIHRvIGdldCBhIHByb3BlciBoYW5kbGUgb24gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MjkuNDcyMjAxNDQ2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMzMDpcXHRcXHRcXHRcXHRcXHQvKiBzd2FwIGluIG9yIGluc3RhbnRpYXRlIGZhbGxvY2F0ZWQgcGFnZSAqL1xcbjIzMzE6XFx0XFx0XFx0XFx0XFx0aWYgKHNobWVtX2dldF9mb2xpbyhtYXBwaW5nLVxcdTAwM2Vob3N0LCBpbmRleCwgMCxcXG4yMzMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmb2xpbywgU0dQX05PQUxMT0MpKSB7XFxuMjMzMzpcXHRcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxuMjMzNDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHhhX3VubG9ja2VkO1xcbjIzMzU6XFx0XFx0XFx0XFx0XFx0fVxcbjIzMzY6XFx0XFx0XFx0XFx0XFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xcbjIzMzc6XFx0XFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbjIzMzg6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbjIzMzk6XFx0XFx0XFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4yMzQwOlxcdFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIzNDE6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4yMzQyOlxcdFxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xcbjIzNDM6XFx0XFx0XFx0XFx0XFx0Z290byB4YV9sb2NrZWQ7XFxuMjM0NDpcXHRcXHRcXHRcXHR9XFxuMjM0NTpcXHRcXHRcXHR9IGVsc2Uge1xcdC8qICFpc19zaG1lbSAqL1xcbjIzNDY6XFx0XFx0XFx0XFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHtcXG4yMzQ3OlxcdFxcdFxcdFxcdFxcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFxcdTAwMjZmaWxlLVxcdTAwM2VmX3JhLFxcbjIzNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBtYXBwaW5nLCBpbmRleCk7XFxuMjM0OTpcXHRcXHRcXHRcXHRcXHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVxcdTAwM2Vob3N0KSxcXG4yMzUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBQQUdFX1NJWkUpO1xcbjIzNTE6XFx0XFxuMjM1MjpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzUzOlxcdFxcdFxcdFxcdFxcdC8qXFxuMjM1NDpcXHRcXHRcXHRcXHRcXHQgKiBpbnZhbGlkYXRlX2xvY2sgaGVsZCBhYm92ZTsgZG9uJ3QgcmV0YWtlIGl0LlxcbjIzNTU6XFx0XFx0XFx0XFx0XFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcXG4yMzU2OlxcdFxcdFxcdFxcdFxcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXFxuMjM1NzpcXHRcXHRcXHRcXHRcXHQgKi9cXG4yMzU4OlxcdFxcdFxcdFxcdFxcdGlmIChpbmRleCBcXHUwMDNjIGVvZilcXG4yMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFxcdTAwMjZyYWN0bCxcXG4yMzYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XFxuMjM2MTpcXHRcXHRcXHRcXHRcXHQvKiBkcmFpbiBscnUgY2FjaGUgdG8gaGVscCBmb2xpb19pc29sYXRlX2xydSgpICovXFxuMjM2MjpcXHRcXHRcXHRcXHRcXHRscnVfYWRkX2RyYWluKCk7XFxuMjM2MzpcXHRcXHRcXHRcXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7XFxuMjM2NDpcXHRcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbjIzNjU6XFx0XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjIzNjY6XFx0XFx0XFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG4yMzY3OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzY4OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcXG4yMzY5OlxcdFxcdFxcdFxcdFxcdC8qXFxuMjM3MDpcXHRcXHRcXHRcXHRcXHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJ3RcXG4yMzcxOlxcdFxcdFxcdFxcdFxcdCAqIGJlZW4gZmx1c2hlZCBzaW5jZSBmaXJzdCB3cml0ZS5cXG4yMzcyOlxcdFxcdFxcdFxcdFxcdCAqXFxuMjM3MzpcXHRcXHRcXHRcXHRcXHQgKiBUcmlnZ2VyIGFzeW5jIGZsdXNoIGZvciByZWFkLW9ubHkgZmlsZXMgYW5kXFxuMjM3NDpcXHRcXHRcXHRcXHRcXHQgKiBob3BlIHRoZSB3cml0ZWJhY2sgaXMgZG9uZSB3aGVuIGtodWdlcGFnZWRcXG4yMzc1OlxcdFxcdFxcdFxcdFxcdCAqIHJldmlzaXRzIHRoaXMgcGFnZS4gV3JpdGFibGUgZmlsZXMgY2FuIGhhdmVcXG4yMzc2OlxcdFxcdFxcdFxcdFxcdCAqIHRoZWlyIGZvbGlvcyBkaXJ0eSBhdCBhbnkgdGltZTsgYmxpbmRseVxcbjIzNzc6XFx0XFx0XFx0XFx0XFx0ICogZmx1c2hpbmcgdGhlbSB3b3VsZCBjYXVzZSB1bmRlc2lyYWJsZVxcbjIzNzg6XFx0XFx0XFx0XFx0XFx0ICogc3lzdGVtLXdpZGUgd3JpdGViYWNrLlxcbjIzNzk6XFx0XFx0XFx0XFx0XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MjkuNDcyNTEwMTc2WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MDg5MjA4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIGBjb2xsYXBzZV9maWxlYCBhcm91bmQgdGhlIGBvdXQ6YCBJbmRpY2F0b3IqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIG9iamVjdGl2ZSBoZXJlIGlzIGNsZWFybHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYmVoYXZlcyBuZWFyIHRoZSBgb3V0OmAgbWFya2VyIHdpdGhpbiB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgaG9saXN0aWMgdmlldywgbm90IGp1c3QgaXNvbGF0ZSB0aGUgc25pcHBldC4gSSdtIHRoaW5raW5nLCBcIndoYXQncyB0aGUgY29udGV4dD9cIiBXaGF0J3MgaGFwcGVuaW5nICpiZWZvcmUqIHRoYXQgYG91dDpgIGxhYmVsLCBhbmQgd2hhdCBmb2xsb3dzPyBVbmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoYXQgcG9pbnQgaXMgY3JpdGljYWwuIElzIGl0IGEgY29uZGl0aW9uYWw/IEEgbG9vcD8gV2hhdCBhcmUgdGhlIHZhcmlhYmxlcyBpbiBzY29wZSBhdCB0aGF0IGxvY2F0aW9uPyBBcmUgdGhlcmUgc2lkZSBlZmZlY3RzIGJlaW5nIG1hbmFnZWQ/XG5cbkknbSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGl0LCB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBJcyB0aGlzIGEgZmlsZSBoYW5kbGUsIGEgc3RyaW5nLCBhIGxpc3QsIGEgZGljdGlvbmFyeT8gSXMgaXQgZ2VuZXJhdGluZyBzb21lIHNvcnQgb2Ygb3V0cHV0IGZpbGU/IFdoYXQncyB0aGUgb3ZlcmFyY2hpbmcgcHVycG9zZSBvZiBgY29sbGFwc2VfZmlsZWA/IEFtIEkgbG9va2luZyBhdCBmaWxlIEkvTyBvcGVyYXRpb25zLCBkYXRhIHRyYW5zZm9ybWF0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbk15IG1pbmQgaXMgYWxzbyBjaGVja2luZyBmb3IgdGhlIGVkZ2UgY2FzZXMuIEVycm9yIGhhbmRsaW5nPyBEYXRhIHZhbGlkYXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgbHVya2luZyBuZWFyIHRoYXQgYG91dDpgIGluZGljYXRvciB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBidWdzPyBJdCdzIGVzc2VudGlhbCB0byB0cmFjZSB0aGUgcG9zc2libGUgcGF0aHMgb2YgZXhlY3V0aW9uIHRocm91Z2ggdGhhdCBhcmVhIG9mIHRoZSBjb2RlLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBleGVjdXRpb24gcHJvZmlsZSBjZW50ZXJlZCBhcm91bmQgdGhlIGBvdXQ6YCBsYWJlbCB0byBidWlsZCBhbiBhY2N1cmF0ZSBtZW50YWwgbW9kZWwgZm9yIHRoZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MzIuMjgxNDMzMjA1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY3MDpcXHRcXG4yNjcxOlxcdHJvbGxiYWNrOlxcbjI2NzI6XFx0XFx0LyogU29tZXRoaW5nIHdlbnQgd3Jvbmc6IHJvbGwgYmFjayBwYWdlIGNhY2hlIGNoYW5nZXMgKi9cXG4yNjczOlxcdFxcdGlmIChucl9ub25lKSB7XFxuMjY3NDpcXHRcXHRcXHR4YXNfbG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjY3NTpcXHRcXHRcXHRtYXBwaW5nLVxcdTAwM2VucnBhZ2VzIC09IG5yX25vbmU7XFxuMjY3NjpcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yNjc3OlxcdFxcdFxcdHNobWVtX3VuY2hhcmdlKG1hcHBpbmctXFx1MDAzZWhvc3QsIG5yX25vbmUpO1xcbjI2Nzg6XFx0XFx0fVxcbjI2Nzk6XFx0XFxuMjY4MDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXFx1MDAyNnBhZ2VsaXN0LCBscnUpIHtcXG4yNjgxOlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4yNjgyOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMjY4MzpcXHRcXHRcXHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XFxuMjY4NDpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjI2ODU6XFx0XFx0fVxcbjI2ODY6XFx0XFxuMjY4NzpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBOVUxMO1xcbjI2ODg6XFx0XFxuMjY4OTpcXHRcXHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcXG4yNjkwOlxcdFxcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xcbjI2OTE6XFx0b3V0OlxcbjI2OTI6XFx0XFx0aWYgKCFpc19zaG1lbSlcXG4yNjkzOlxcdFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbjI2OTQ6XFx0XFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbjI2OTU6XFx0XFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xcbjI2OTY6XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4yNjk3OlxcdH1cXG4yNjk4OlxcdFxcbjI2OTk6XFx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbjI3MDA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCxcXG4yNzAxOlxcdFxcdFxcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4yNzAyOlxcdHtcXG4yNzAzOlxcdFxcdGNvbnN0IHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lID0gY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShjYywgTlVMTCwgSFBBR0VfUE1EX09SREVSKTtcXG4yNzA0OlxcdFxcdGNvbnN0IHVuc2lnbmVkIGludCBtYXhfcHRlc19zd2FwID0gY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChjYywgSFBBR0VfUE1EX09SREVSKTtcXG4yNzA1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xcbjI3MDY6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuMjcwNzpcXHRcXHRYQV9TVEFURSh4YXMsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBzdGFydCk7XFxuMjcwODpcXHRcXHRpbnQgcHJlc2VudCwgc3dhcDtcXG4yNzA5OlxcdFxcdGludCBub2RlID0gTlVNQV9OT19OT0RFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNzozMi4yODE1NzI2MzRaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTUzODQzNDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtodWdlcGFnZWQuYyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIG1vZGlmeWluZyBgY29sbGFwc2VfZmlsZWAgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaGFuZ2UuIEl0J3MgdG91Y2hpbmcgdGhlIGZpbGUgbWFwcGluZyBpbnZhbGlkYXRpb24gbG9jayBhbmQgdGhlIHJlYWQtYWhlYWQgbWVjaGFuaXNtLlxuXG5UaGUga2V5IGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKWAgbG9jay4gIEJlZm9yZSwgdGhpcyBsb2NrIHdhcyB0YWtlbiB3aXRoaW4gYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgLCBidXQgb25seSAqYWZ0ZXIqIGFjcXVpcmluZyBmb2xpbyBsb2NrcyAoZm9yIGAhaXNfc2htZW1gKS4gVGhlIHBhdGNoIG5vdyB0YWtlcyB0aGUgc2hhcmVkIGludmFsaWRhdGlvbiBsb2NrICpiZWZvcmUqIGZvbGlvIGxvY2sgYWNxdWlzaXRpb24sIGFuZCBob2xkcyBpdCBmb3IgdGhlIGVudGlyZSBjb2xsYXBzZSBvcGVyYXRpb24uICBUaGlzIGlzIGEgY2xhc3NpYyBkZWFkbG9jayBhdm9pZGFuY2Ugc3RyYXRlZ3kg4oCTIHRoZSBkcmVhZGVkIGxvY2sgaW52ZXJzaW9uLlxuXG5UaGUgb3JpZ2luYWwgY29kZSdzIGFwcHJvYWNoIG9mIGdyYWJiaW5nIHRoZSBmb2xpbyBsb2NrcywgdGhlbiBjYWxsaW5nIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCwgY291bGQgY3JlYXRlIGEgZGVhZGxvY2sgc2NlbmFyaW8uICBgY29sbGFwc2VfZmlsZWAgcG90ZW50aWFsbHkgd291bGQgYmUgd2FpdGluZyBvbiB0aGUgZm9saW8gbG9ja3Mgd2hpbGUgdHJ1bmNhdGUsIGhvbGRpbmcgdGhlIGludmFsaWRhdGUgbG9jaywgd2FpdGVkIG9uIHRoZSBgY29sbGFwc2VfZmlsZWAgdG8gcmVsZWFzZSBmb2xpbyBsb2NrcyB3aGljaCB3b3VsZCB0aGVuIG1ha2UgdGhlIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBmdW5jdGlvbiB0cnkgdG8gdGFrZSB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAuIFRoaXMgc2VxdWVuY2UgaXMgYSByZWNpcGUgZm9yIGxvY2sgaW52ZXJzaW9uIGFuZCwgbW9yZSBjb25jZXJuaW5nLCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2tkZXAgd2FybmluZ3MuXG5cblRoZSBmaXg/ICBTaGlmdCB0aGUgaW52YWxpZGF0aW9uIGxvY2sgYWNxdWlzaXRpb24gdXAtZnJvbnQuIEFuZCB0aGF0IG1ha2VzIHRoZSBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgY2FsbCBwcm9ibGVtYXRpYy4gSXQncyBiZWVuIHJlcGxhY2VkIHdpdGggYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCwgd2hpY2ggZG9lc24ndCBpbnRlcm5hbGx5IHRyeSB0byBncmFiIHRoZSBzaGFyZWQgaW52YWxpZGF0aW9uIGxvY2suIEl0IHNlZW1zIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgKmV4cGVjdHMqIHRoZSBpbnZhbGlkYXRpb24gbG9jayB0byBhbHJlYWR5IGJlIGhlbGQsIG9yIGl0IHNpbXBseSBkb2Vzbid0IGdyYWIgaXQgYXQgYWxsLlxuXG5JIGFsc28gbm90aWNlIHRoZSBhZGRpdGlvbiBvZiBgREVGSU5FX1JFQURBSEVBRGAgYW5kIHRoZSBFT0YgY2hlY2s6IGBpZiAoaW5kZXggXHUwMDNjIGVvZilgLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgY2xhbXAgdGhlIHJlYWQtYWhlYWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gU28sIHRoZXkndmUgYWRkZWQgdGhpcyBleHBsaWNpdCBjbGFtcCB0byBlbnN1cmUgd2UgZG9uJ3QgcmVhZCBwYXN0IHRoZSBmaWxlIHNpemUuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC5cbk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBleHBhbnNpb24gb2YgYERFRklORV9SRUFEQUhFQURgIGluIG1vcmUgZGV0YWlsLiBMZXQncyBzZWUgd2hhdCB0aGF0IG1hY3JvIGlzIGFjdHVhbGx5IGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MzcuODIwMDEwMDEyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU0Mzk4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBERUZJTkVfUkVBREFIRUFEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZW1hcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTE0MDg9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MjAtXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQyMTojZGVmaW5lIERFRklORV9SRUFEQUhFQUQocmFjdGwsIGYsIHIsIG0sIGkpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MjItXFx0c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHJhY3RsID0ge1xcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6MzguMzU1NDU3OTY1WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNTY5MTY1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFBhZ2VtYXAgSGVhZGVyKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvciBpbnZlc3RpZ2F0ZSBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgcGFnZSBjYWNoZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTS4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMTQyMC4gSSdtIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMsIG9yIGF0IGxlYXN0IHRoZSByZWxldmFudCBkZWNsYXJhdGlvbnMsIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHBhZ2UgZmxhZ3MsIGxvY2tpbmcgbWVjaGFuaXNtcywgb3IgcG9zc2libHkgdGhlIGxpbmthZ2UgYmV0d2VlbiBwYWdlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBpbm9kZXMuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTk1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6NDAuNjEyMzc4MTgxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDE1OlxcdFxcdHVuc2lnbmVkIGludCBfYmF0Y2hfY291bnQ7XFxuMTQxNjpcXHRcXHRib29sIGRyb3BiZWhpbmQ7XFxuMTQxNzpcXHRcXHRib29sIF93b3JraW5nc2V0O1xcbjE0MTg6XFx0XFx0dW5zaWduZWQgbG9uZyBfcGZsYWdzO1xcbjE0MTk6XFx0fTtcXG4xNDIwOlxcdFxcbjE0MjE6XFx0I2RlZmluZSBERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmLCByLCBtLCBpKVxcdFxcdFxcdFxcdFxcXFxcXG4xNDIyOlxcdFxcdHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCByYWN0bCA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuMTQyMzpcXHRcXHRcXHQuZmlsZSA9IGYsXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjE0MjQ6XFx0XFx0XFx0Lm1hcHBpbmcgPSBtLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xNDI1OlxcdFxcdFxcdC5yYSA9IHIsXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjE0MjY6XFx0XFx0XFx0Ll9pbmRleCA9IGksXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjE0Mjc6XFx0XFx0fVxcbjE0Mjg6XFx0XFxuMTQyOTpcXHQjZGVmaW5lIFZNX1JFQURBSEVBRF9QQUdFU1xcdChTWl8xMjhLIC8gUEFHRV9TSVpFKVxcbjE0MzA6XFx0XFxuMTQzMTpcXHR2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqLFxcbjE0MzI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19yZWFkLCB1bnNpZ25lZCBsb25nIGxvb2thaGVhZF9jb3VudCk7XFxuMTQzMzpcXHR2b2lkIHBhZ2VfY2FjaGVfc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKiwgdW5zaWduZWQgbG9uZyByZXFfY291bnQpO1xcbjE0MzQ6XFx0dm9pZCBwYWdlX2NhY2hlX2FzeW5jX3JhKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqLCBzdHJ1Y3QgZm9saW8gKixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6NDAuNjEyNTM3MTgxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4MTk3NzE5MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IGtodWdlcGFnZWQgUmVhZGFoZWFkIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBERUZJTkVfUkVBREFIRUFEYCBtYWNybyB1c2VzIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCBpcyBzdGFuZGFyZCBDOyBhbnkgdW5zcGVjaWZpZWQgZmllbGRzIHdpbGwgYmUgemVyb2VkIG91dC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBmb3IgYW55IHBvdGVudGlhbCBLTVNBTiBpbXBsaWNhdGlvbnMuXG5cbk5vdywgdGhlIG1haW4gcG9pbnQ6IHRoaXMgcGF0Y2ggaXMgKm5vdCogYSBLTVNBTiBjb25jZXJuLiBUaGUgdXBzdHJlYW0ga2VybmVsIGFscmVhZHkgaGFzIEtBU0FOLCBMT0NLREVQLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLiBLTVNBTiBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZSBwYXRjaCBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgKm9ubHkqIEtNU0FOIGNhbiBkZXRlY3QuIFRoZSBndWlkZWxpbmVzIGFyZSBjcnlzdGFsIGNsZWFyOiBkb24ndCB3YXN0ZSByZXNvdXJjZXMgcnVubmluZyBLTVNBTiBpZiBLQVNBTiBvciBvdGhlciB0b29scyBjYXRjaCB0aGUgaXNzdWVzLlxuXG5J4oCZbSBsb29raW5nIGF0IHRoZXNlIGNyaXRpY2FsIGRpc3RpbmN0aW9uczpcblxuKiAgIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgbG9ja2luZyBkZWFkbG9jayBiZXR3ZWVuIGB0cnVuY2F0ZWAgYW5kIGBraHVnZXBhZ2VkYCByZWFkYWhlYWQuIFRoZSBwcm9ibGVtPyAgYGNvbGxhcHNlX2ZpbGVgIHVzZWQgdG8gYWNxdWlyZSBmb2xpbyBsb2NrcyAqYmVmb3JlKiBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCwgd2hpY2ggYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIHRoZW4gdGFrZXMsIGxlYWRpbmcgdG8gYW4gQUJCQSBkZWFkbG9jay4gVGhpcyBwYXRjaCBzaW1wbHkgcmV2ZXJzZXMgdGhlIGxvY2tpbmcgb3JkZXIgYW5kIHJlcGxhY2VzIHRoZSBjYWxsIHRvIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3aXRoIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAuIFRoYXQncyBhIGNsYXNzaWMgbG9ja2luZyBoaWVyYXJjaHkgYnVnLlxuXG5Ob3csIHRvIHNlZSBpZiBLTVNBTiBpcyBuZWVkZWQsIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgcG90ZW50aWFsIEtNU0FOIHRyaWdnZXJzOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4gYGNvbGxhcHNlX2ZpbGVgIGlzIGludGVybmFsIHRvIHRoZSBraHVnZXBhZ2VkIG1lbW9yeSBtYW5hZ2VtZW50LlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWM/KiogIE5vcGUuIGBpc19zaG1lbWAgaXMgYSBwYXJhbWV0ZXIsIGBuZXdfZm9saW9gIGdldHMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCwgYGVvZmAgaXMgZGVyaXZlZCBmcm9tIGBpX3NpemVfcmVhZCguLi4pYCwgYW5kIHRoZSBgcmFjdGxgIGlzICpwcm9wZXJseSogaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycy5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiAgTm8sIGBzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGxgIGlzIGluaXRpYWxpemVkIGFuZCB3aWxsIG5vdCBoYXZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjQuICAqKkJvdW5kcyBjaGVja3MsIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIERlZmluaXRlbHkgbm90LiBUaGlzIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgZm9yIHJlYWRhaGVhZCBpbiB0aGUgcGFnZSBjYWNoZTsgbm8gYm91bmRzIGNoZWNrcyBhcmUgaW52b2x2ZWQuXG5cblRoaXMgZml4IGZvY3VzZXMgb24gKipsb2NraW5nIG9yZGVyKiouICBMT0NLREVQIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOIGJ1aWxkcyB3aWxsIGVhc2lseSBwaWNrIHVwIGFueSBsb2NraW5nIGlzc3VlcyBoZXJlLlxuXG5BcyBhIHF1aWNrIGNoZWNrLCBJIGRvdWJsZS1jaGVja2VkIHRoZSBgb3V0OmAgbGFiZWwuIGBhbGxvY19jaGFyZ2VfZm9saW9gIHNldHMgYG5ld19mb2xpb2AgdG8gTlVMTCBvbiBmYWlsdXJlIGFuZCB0aGUgdHJhY2UgY2FsbCBpcyBoYW5kbGVkIGNvcnJlY3RseSwgbm8gcHJvYmxlbSB0aGVyZS4gYERFRklORV9SRUFEQUhFQURgIGVuc3VyZXMgYHJhY3RsYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gRXZlcnl0aGluZyBsb29rcyBjb21wbGV0ZWx5IHN0YW5kYXJkIGFuZCBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gSXQncyB0aW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1OSwiT3V0cHV0VG9rZW5zIjoxOTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6Mzc6NTguODEwMjU5NjE0WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS9raHVnZXBhZ2VkLmMgdG8gYWRqdXN0IGxvY2tpbmcgb3JkZXIgaW4gY29sbGFwc2VfZmlsZSgpIGJ5IGFjcXVpcmluZyBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQoKSBwcmlvciB0byB0YWtpbmcgZm9saW8gbG9ja3MsIGFuZCBpbnZva2VzIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkgaW5zdGVhZCBvZiBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggZmlsZSB0cnVuY2F0aW9uLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGFuZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCBib3VuZHMuIFRoZSByZWFkYWhlYWRfY29udHJvbCBzdHJ1Y3R1cmUgKHJhY3RsKSBpcyBpbml0aWFsaXplZCB1c2luZyBERUZJTkVfUkVBREFIRUFEIChDOTkgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZW5zdXJpbmcgYWxsIHVubWVudGlvbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIGludHJvZHVjZWQsIG1vZGlmaWVkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgZGVidWcga2VybmVscyAoS0FTQU4gYnVpbGRzKSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0va2h1Z2VwYWdlZC5jIHRvIGFkanVzdCBsb2NraW5nIG9yZGVyIGluIGNvbGxhcHNlX2ZpbGUoKSBieSBhY3F1aXJpbmcgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKCkgcHJpb3IgdG8gdGFraW5nIGZvbGlvIGxvY2tzLCBhbmQgaW52b2tlcyBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpIGluc3RlYWQgb2YgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBhbmQgcGFnZSBjYWNoZSByZWFkYWhlYWQgYm91bmRzLiBUaGUgcmVhZGFoZWFkX2NvbnRyb2wgc3RydWN0dXJlIChyYWN0bCkgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgREVGSU5FX1JFQURBSEVBRCAoQzk5IGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGVuc3VyaW5nIGFsbCB1bm1lbnRpb25lZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyBpbnRyb2R1Y2VkLCBtb2RpZmllZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGRlYnVnIGtlcm5lbHMgKEtBU0FOIGJ1aWxkcyksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx64gp[1] Phase: Succeeded StartedAt: 2026-09-13 10:38:10 +0000 UTC FinishedAt: 2026-09-13 10:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 10:38:10 +0000 UTC FinishedAt: 2026-09-13 10:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2] Phase: Succeeded StartedAt: 2026-09-13 10:38:10 +0000 UTC FinishedAt: 2026-09-13 14:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 10:38:10 +0000 UTC FinishedAt: 2026-09-13 14:36:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 10:38:10 +0000 UTC FinishedAt: 2026-09-13 10:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 10:38:10 +0000 UTC FinishedAt: 2026-09-13 10:38:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowx64gp/series-workflowx64gp-convert-artifact-1562735104/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 10:38:21 +0000 UTC FinishedAt: 2026-09-13 10:59:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 10:38:21 +0000 UTC FinishedAt: 2026-09-13 10:59:37 +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:*dc0dfb34-3278-455f-b7a0-dc8f9767a0b6,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-workflowx64gp/series-workflowx64gp-convert-artifact-1562735104/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": "11562a68-7314-43da-b7f6-4c39e7c12178", "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-workflowx64gp/series-workflowx64gp-build-action-993180870/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:38:21 +0000 UTC FinishedAt: 2026-09-13 10:59:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dc0dfb34-3278-455f-b7a0-dc8f9767a0b6,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-workflowx64gp/series-workflowx64gp-convert-artifact-1562735104/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": "11562a68-7314-43da-b7f6-4c39e7c12178", "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-workflowx64gp/series-workflowx64gp-build-action-993180870/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 10:59:37 +0000 UTC FinishedAt: 2026-09-13 10:59:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 10:59:37 +0000 UTC FinishedAt: 2026-09-13 10:59:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 10:59:37 +0000 UTC FinishedAt: 2026-09-13 10:59:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 10:59:37 +0000 UTC FinishedAt: 2026-09-13 10:59:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowx64gp/series-workflowx64gp-convert-artifact-2664193447/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 10:59:57 +0000 UTC FinishedAt: 2026-09-13 11:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 10:59:57 +0000 UTC FinishedAt: 2026-09-13 11:01:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*11562a68-7314-43da-b7f6-4c39e7c12178,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-workflowx64gp/series-workflowx64gp-build-action-993180870/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-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 11:01:58 +0000 UTC FinishedAt: 2026-09-13 11:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 11:01:58 +0000 UTC FinishedAt: 2026-09-13 11:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 11:01:58 +0000 UTC FinishedAt: 2026-09-13 11:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 11:01:58 +0000 UTC FinishedAt: 2026-09-13 11:25:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dc0dfb34-3278-455f-b7a0-dc8f9767a0b6,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-workflowx64gp/series-workflowx64gp-convert-artifact-2664193447/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": "a01006b4-3915-4906-93a8-525ba29ba6d9", "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-workflowx64gp/series-workflowx64gp-build-action-4011642667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 11:01:58 +0000 UTC FinishedAt: 2026-09-13 11:25:03 +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:*dc0dfb34-3278-455f-b7a0-dc8f9767a0b6,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-workflowx64gp/series-workflowx64gp-convert-artifact-2664193447/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": "a01006b4-3915-4906-93a8-525ba29ba6d9", "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-workflowx64gp/series-workflowx64gp-build-action-4011642667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 11:25:30 +0000 UTC FinishedAt: 2026-09-13 11:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 11:25:30 +0000 UTC FinishedAt: 2026-09-13 11:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 11:25:30 +0000 UTC FinishedAt: 2026-09-13 11:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 11:25:30 +0000 UTC FinishedAt: 2026-09-13 11:27:18 +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:*a01006b4-3915-4906-93a8-525ba29ba6d9,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-workflowx64gp/series-workflowx64gp-build-action-4011642667/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-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 11:27:30 +0000 UTC FinishedAt: 2026-09-13 14:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 11:27:30 +0000 UTC FinishedAt: 2026-09-13 14:36:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},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:*11562a68-7314-43da-b7f6-4c39e7c12178,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a01006b4-3915-4906-93a8-525ba29ba6d9,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-workflowx64gp/series-workflowx64gp-build-action-993180870/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-workflowx64gp/series-workflowx64gp-build-action-4011642667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 11:27:30 +0000 UTC FinishedAt: 2026-09-13 11:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 11:27:30 +0000 UTC FinishedAt: 2026-09-13 11:27:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},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-workflowx64gp/series-workflowx64gp-convert-artifact-113514752/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 11:27:30 +0000 UTC FinishedAt: 2026-09-13 11:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 11:27:30 +0000 UTC FinishedAt: 2026-09-13 11:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 11:27:30 +0000 UTC FinishedAt: 2026-09-13 11:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 11:27:42 +0000 UTC FinishedAt: 2026-09-13 14:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx64gp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"22120d40-dffd-489e-8a5c-b1c77b68a852","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 11:27:42 +0000 UTC FinishedAt: 2026-09-13 14:36:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*11562a68-7314-43da-b7f6-4c39e7c12178,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a01006b4-3915-4906-93a8-525ba29ba6d9,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-workflowx64gp/series-workflowx64gp-build-action-993180870/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-workflowx64gp/series-workflowx64gp-build-action-4011642667/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-workflowx64gp/series-workflowx64gp-convert-artifact-113514752/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,}