Name: series-workflow79h74 Phase: Succeeded StartedAt: 2026-09-08 03:36:01 +0000 UTC FinishedAt: 2026-09-08 07:38:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[0] Phase: Succeeded StartedAt: 2026-09-08 03:36:01 +0000 UTC FinishedAt: 2026-09-08 03:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 03:36:01 +0000 UTC FinishedAt: 2026-09-08 03:54:42 +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": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "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": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "ada7dc67-7517-4d40-b6ce-1ce8d976a58b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHRoZSBtaXNzaW5nIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBjYWxscyB0byB0aGUgUENQIGZhc3QgcGF0aCBvZiB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgKS5cblxuS01TQU4gdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0dXMgb2YgcGFnZSBhbGxvY2F0aW9ucyBieSBtYXJraW5nIG5vbi1gX19HRlBfWkVST2AgcGFnZXMgd2l0aCB1bmluaXRpYWxpemVkIHNoYWRvdyBhbmQgY3JlYXRpbmcgYWxsb2NhdGlvbiBvcmlnaW5zLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZWAgLyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgKSBieXBhc3NlZCBLTVNBTiB0cmFja2luZywgbGVhdmluZyBLTVNBTiBibGluZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3JpZ2luYXRpbmcgZnJvbSBidWxrLWFsbG9jYXRlZCBwYWdlcyAod2hpY2ggYXJlIHdpZGVseSB1c2VkIGFjcm9zcyB2bWFsbG9jLCBwYWdlIHBvb2wgLyBuZXR3b3JrIGRyaXZlcnMsIHNwbGljZSwgYnRyZnMsIGZ1c2UsIGFuZCBicGYpLlxuXG5TdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIG9ubHkgbW9uaXRvciBtZW1vcnkgYWNjZXNzaWJpbGl0eSAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhbmQgY2Fubm90IGRldGVjdCByZWFkcyBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBqdXN0aWZpZWQgdG8gdmFsaWRhdGUgdGhlIEtNU0FOIGhvb2sgYW5kIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIGV4cG9zZWQgYWNyb3NzIGFsbCBidWxrIHBhZ2UgYWxsb2NhdGlvbiBjYWxsIHNpdGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIHByb3Blcmx5IGludm9rZSB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgYW5kIGttc2FuX2FsbG9jX3BhZ2UoKSBmb3IgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgcGVyLWNwdSBwYWdlIGFsbG9jYXRvci4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtNU0FOIHRyYWNraW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDE3OTQzZjY2NDY1ZThhZGI2M2NmYjJmMWM5NTdlNzBhOWUyNmUyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4wMmJhMTlmNmRiYjU5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01MjgwLDYgJiM0Mzs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4mIzQzO1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuJiM0MztcdFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApO1xuIFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIHByb3Blcmx5IGludm9rZSB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgYW5kIGttc2FuX2FsbG9jX3BhZ2UoKSBmb3IgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgcGVyLWNwdSBwYWdlIGFsbG9jYXRvci4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtNU0FOIHRyYWNraW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE3OTQzZjY2NDY1ZThhZGI2M2NmYjJmMWM5NTdlNzBhOWUyNmUyZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMTJmYWM5MDg0YzQ4My4uMDJiYTE5ZjZkYmI1OSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTI4MCw2ICYjNDM7NTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCQlwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7CiAJCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7CiYjNDM7CQl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpOwomIzQzOwkJa21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApOwogCQlwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkmIzM5O2QgdGhpbmsgaXQgdGhyb3VnaDoKCioqQW5hbHl6aW5nIGEgUGFnZSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbi4gSSByZW1lbWJlciB0aGF0IGZ1bmN0aW9uLiBJdCYjMzk7cyByZWxhdGVkIHRvIGJ1bGsgcGFnZSBhbGxvY2F0aW9uLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYSBvciBwYXJ0IG9mIHNvbWUgb3B0aW1pemF0aW9uLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIHNlZSB0aGUgY29kZSwgYW5kIHF1aWNrbHkuIEluc3RlYWQgb2YganVzdCBzdGFyaW5nIGJsaW5kbHksIEkmIzM5O2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCB0aGF0IGNvZGUgdXAgb24gbXkgc2NyZWVuLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTI4MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY2h1bmsgb2YgdGhlIGNvbnRleHQgLSB3aGF0IGNhbWUgYmVmb3JlLCBhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIHRoaXMgc3BlY2lmaWMgcmVnaW9uIG9mIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBhcm91bmQgaXQgdG9vLCBpbiBjYXNlIHRoaXMgaW1wYWN0cyBhbm90aGVyIGFzcGVjdCBvZiB0aGUga2VybmVsLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IHRoZSBjaGFuZ2VzIHRoYXQgYXJlIGJlaW5nIG1hZGUgYW5kIHdoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI1MDpcdFx0ICovXG41MjUxOlx0XHRpZiAodW5saWtlbHkoIXpvbmUpKVxuNTI1MjpcdFx0XHRnb3RvIGZhaWxlZDtcbjUyNTM6XHRcbjUyNTQ6XHRcdC8qIHNwaW5fdHJ5bG9jayBtYXkgZmFpbCBkdWUgdG8gYSBwYXJhbGxlbCBkcmFpbiBvciBJUlEgcmVlbnRyYW5jeS4gKi9cbjUyNTU6XHRcdHBjcCA9IHBjcF9zcGluX3RyeWxvY2soem9uZS1cdTAwM2VwZXJfY3B1X3BhZ2VzZXQpO1xuNTI1NjpcdFx0aWYgKCFwY3ApXG41MjU3Olx0XHRcdGdvdG8gZmFpbGVkO1xuNTI1ODpcdFxuNTI1OTpcdFx0LyogQXR0ZW1wdCB0aGUgYmF0Y2ggYWxsb2NhdGlvbiAqL1xuNTI2MDpcdFx0cGNwX2xpc3QgPSBcdTAwMjZwY3AtXHUwMDNlbGlzdHNbb3JkZXJfdG9fcGluZGV4KGFjLm1pZ3JhdGV0eXBlLCAwKV07XG41MjYxOlx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcykge1xuNTI2MjpcdFxuNTI2MzpcdFx0XHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXG41MjY0Olx0XHRcdGlmIChwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pIHtcbjUyNjU6XHRcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTI2NjpcdFx0XHRcdGNvbnRpbnVlO1xuNTI2NzpcdFx0XHR9XG41MjY4Olx0XG41MjY5Olx0XHRcdHBhZ2UgPSBfX3JtcXVldWVfcGNwbGlzdCh6b25lLCAwLCBhYy5taWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsXG41MjcwOlx0XHRcdFx0XHRcdFx0XHRcdHBjcCwgcGNwX2xpc3QpO1xuNTI3MTpcdFx0XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG41MjcyOlx0XHRcdFx0LyogVHJ5IGFuZCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSAqL1xuNTI3MzpcdFx0XHRcdGlmICghbnJfYWNjb3VudCkge1xuNTI3NDpcdFx0XHRcdFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XG41Mjc1Olx0XHRcdFx0XHRnb3RvIGZhaWxlZDtcbjUyNzY6XHRcdFx0XHR9XG41Mjc3Olx0XHRcdFx0YnJlYWs7XG41Mjc4Olx0XHRcdH1cbjUyNzk6XHRcdFx0bnJfYWNjb3VudCYjNDM7JiM0Mzs7XG41MjgwOlx0XG41MjgxOlx0XHRcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcbjUyODI6XHRcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbjUyODM6XHRcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbjUyODQ6XHRcdFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApO1xuNTI4NTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUyODY6XHRcdH1cbjUyODc6XHRcbjUyODg6XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI4OTpcdFxuNTI5MDpcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcbjUyOTE6XHRcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XG41MjkyOlx0XG41MjkzOlx0b3V0OlxuNTI5NDpcdFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcbjUyOTU6XHRcbjUyOTY6XHRmYWlsZWQ6XG41Mjk3Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG41Mjk4Olx0XHRpZiAocGFnZSlcbjUyOTk6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41MzAwOlx0XHRnb3RvIG91dDtcbjUzMDE6XHR9XG41MzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xuNTMwMzpcdFxuNTMwNDpcdC8qXG41MzA1Olx0ICogZnJlZV9wYWdlc19idWxrIC0gRnJlZSBhbiBhcnJheSBvZiBvcmRlci0wIHBhZ2VzXG41MzA2Olx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcbjUzMDc6XHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XG41MzA4Olx0ICpcbjUzMDk6XHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBBbGxvY2F0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IHRoZXkmIzM5O3ZlIGFkZGVkIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgIGNhbGxzIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBidWxrIHBhZ2UgYWxsb2NhdGlvbi4gCgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgdGhlc2UgYWRkaXRpb25zIGFyZSBpc29sYXRlZCB0byB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLCBvciBpZiB0aGV5JiMzOTtyZSBwYXJ0IG9mIGEgYnJvYWRlciBwYXR0ZXJuIHdpdGhpbiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGsqYCBmYW1pbHkuIEkgd2FudCB0byBjaGVjayBgYWxsb2NfcGFnZXNfYnVsa19hcnJheV9tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYW55IG90aGVyIHZhcmlhdGlvbnMgdG8gc2VlIHRoZSBzY29wZS4gQXJlIHRoZXkgY29uc2lzdGVudGx5IGJlaW5nIHVzZWQ/IE15IG5leHQgc3RlcCBpcyB0byBzZWFyY2ggZm9yIGBhbGxvY19wYWdlc19idWxrYCBhY3Jvc3MgYG1tL3BhZ2VfYWxsb2MuY2AsIG9yIHBvdGVudGlhbGx5IHRoZSB3aWRlciBjb2RlYmFzZSwgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhcmUgYmVpbmcgaW50ZWdyYXRlZCBhbmQgd2hlcmUgZWxzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGVtcGxveWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxubW0vcGFnZV9hbGxvYy5jLTUxNDEtICogQGdmcDogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvblxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xubW0vcGFnZV9hbGxvYy5jOjUxNjA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTMwMS19XG5tbS9wYWdlX2FsbG9jLmM6NTMwMjpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzkxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBCdWxrIFBhZ2UgQWxsb2NhdGlvbiBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGVzZSBidWxrIHBhZ2UgYWxsb2NhdGlvbiBmdW5jdGlvbnMg4oCTIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBpdHMgc2libGluZ3MgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19hcnJheWAgYW5kIGBhbGxvY19wYWdlc19idWxrX2xpc3RgLiBJIGtub3cgdGhleSYjMzk7cmUgc3ByaW5rbGVkIHRocm91Z2hvdXQgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBrZXJuZWwsIHRoaW5ncyBsaWtlIGRyaXZlcnMsIG5ldHdvcmsgc3Vic3lzdGVtcywgYW5kIGZpbGVzeXN0ZW1zIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgKndobyogaXMgdXNpbmcgdGhlc2UgYW5kICpob3cqLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGZpcmUgdXAgYSBgZ3JlcGAgYWNyb3NzIHRoZSBjb2RlYmFzZS4gSSB3YW50IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGFsbCB0aGUgY2FsbGVycyBvZiBgYWxsb2NfcGFnZXNfYnVsa2Ag4oCTIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbGwgdmFyaWFudHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJyb2FkIHN0cm9rZXMgb2Ygd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBhbmQgd2hhdCB0aGUgY29tbW9uIHBhdHRlcm5zIGFyZSBpbiB0aGVpciB1c2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSBiZWZvcmUgSSBkZWx2ZSBmdXJ0aGVyIGludG8gc3BlY2lmaWMgaW5zdGFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNC1cdCAqXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA1Olx0ICogTm90ZTogYWxsb2NfcGFnZXNfYnVsayBuZWVkcyB0aGUgYXJyYXkgdG8gYmUgemVyb2VkLCBhcyBpdCBhc3N1bWVzXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVx0ICogYW55IG5vbi16ZXJvIHNsb3QgYWxyZWFkeSBjb250YWlucyBhIHZhbGlkIGFsbG9jYXRpb24uXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cdG1lbXNldChwYWdlcywgMCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJfc2Vncyk7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA5Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjEwLVx0aWYgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfc2Vncylcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM9MzE9aW50IGZ3X2lzb19idWZmZXJfYWxsb2Moc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgaW50IHBhZ2VfY291bnQpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQxLVx0Ly8gY29udmVuaWVuY2UgdG8gbWFwIHRoZW0gaW50byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdXNlciBwcm9jZXNzLlxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIgfCBfX0dGUF9aRVJPLFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQzLVx0XHRcdFx0XHRcdCAgICAgIHBhZ2VfY291bnQsIHBhZ2VfYXJyYXkpO1xuLS1cbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jPTg0OD1zdGF0aWMgaW50IGFyX2NvbnRleHRfaW5pdChzdHJ1Y3QgYXJfY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfb2hjaSAqb2hjaSxcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXHQvLyBhZGRyZXNzIHJhbmdlIGluIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYzo4NjU6XHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY2LVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI2LVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIGJvLVx1MDAzZXBnbnIsIGJvLVx1MDAzZXBhZ2VzKTtcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI4LVx0LypcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5Olx0ICogYWxsb2NfcGFnZXNfYnVsaygpIGRvZXMgbm90IHRyeSB2ZXJ5IGhhcmQgdG8gZ2V0IHBhZ2VzIHVuZGVyIG1lbW9yeVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MzAtXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ2Nj1zdGF0aWMgdm9pZCBmcmVlX3BhZ2VfbGlzdCh1MzIgbnBhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNDY5LVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjQ3MDpcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNDcxLVx0Zm9yIChpID0gbnBhZ2VzIC0gMTsgaSBcdTAwM2U9IDA7IGktLSlcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDk2PXN0YXRpYyBpbnQgbWx4NXZmX2FkZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKipwYWdlX2xpc3QsIHVuc2lnbmVkIGludCBucGFnZXMpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwNi1cdGZvciAoOzspIHtcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XHRcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBucGFnZXMgLSBkb25lLFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cdFx0XHRcdFx0ICAqcGFnZV9saXN0ICYjNDM7IGRvbmUpO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTc4LVx0ZG8ge1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjc5Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy04MC1cdFx0XHRcdFx0ICBwYWdlX2xpc3QpO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz0xMTA9c3RhdGljIHZvaWQgdmlydGlvdmZfZnJlZV9kYXRhX2J1ZmZlcihzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtMTEzLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjExNDpcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtMTE1LVx0Zm9yX2VhY2hfc2d0YWJsZV9wYWdlKFx1MDAyNmJ1Zi1cdTAwM2V0YWJsZS5zZ3QsIFx1MDAyNnNnX2l0ZXIsIDApXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmM9Njg0PWludCBidHJmc19hbGxvY19wYWdlX2FycmF5KHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCBnZnBfdCBnZnApXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmM6NjkxOlx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkyLVx0XHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XG4tLVxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxuLS1cbmZzL2Vyb2ZzL3p1dGlsLmMtODktXHRcdFx0bGFzdCA9IGo7XG5mcy9lcm9mcy96dXRpbC5jOjkwOlx0XHRcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XG5mcy9lcm9mcy96dXRpbC5jLTkxLVx0XHRcdGlmIChsYXN0ID09IGopXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcbi0tXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDMtXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcbmZzL2Z1c2UvcmVhZGRpci5jLTM0NS1cdGlmICghbnJfYWxsb2MpXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYz0xMzI2PWFsbG9jX2luaXRfZGlyX2RlbGVnKHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9maWxlICpmcClcbi0tXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXG5mcy9uZnNkL25mczRzdGF0ZS5jOjEzMzg6XHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXHUwMDNlbmNuX3BhZ2VzKTtcbmZzL25mc2QvbmZzNHN0YXRlLmMtMTMzOS1cdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcbi0tXG5mcy9zcGxpY2UuYz0zMTg9c3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuLS1cbmZzL3NwbGljZS5jLTM0MS1cdHBhZ2VzID0gKHN0cnVjdCBwYWdlICoqKShidiAmIzQzOyBucGFnZXMpO1xuZnMvc3BsaWNlLmM6MzQyOlx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XG5mcy9zcGxpY2UuYy0zNDMtXHRpZiAoIW5wYWdlcykge1xuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTItXHRcdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxuaW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXHRcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNTojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2Olx0X19hbGxvY19wYWdlc19idWxrKF9nZnAsIG51bWFfbWVtX2lkKCksIE5VTEwsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjk6YWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnBfdCBnZnAsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cdFx0XHRcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1Olx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBOVUxMLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM4OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsa19ub2RlKC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yNDAtXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy0xOTItXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBOVU1BX05PX05PREUsXG5pb191cmluZy9tZW1tYXAuYy0xOTQtXHRcdFx0XHRcdCAgICAgbXItXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY4PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxua2VybmVsL2JwZi9hcmVuYS5jOjczMzpcdFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cbmtlcm5lbC9icGYvYXJlbmEuYy03MzQtXHRcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jPTM5MT12bV9tYXBfcmFtX3Rlc3Qodm9pZClcbi0tXG5saWIvdGVzdF92bWFsbG9jLmMtNDAzLVxubGliL3Rlc3Rfdm1hbGxvYy5jOjQwNDpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdF92bWFsbG9jLmMtNDA1LVx0aWYgKG5yX2FsbG9jYXRlZCAhPSBtYXBfbnJfcGFnZXMpXG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM9NTE9c3RhdGljIHZvaWQgKl9faW5pdCBpb3Zfa3VuaXRfY3JlYXRlX2J1ZmZlcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXHRcdGxhc3QgPSBnb3Q7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcdFx0Z290ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxuLS1cbm1tL2FsbG9jX3RhZy5jPTc3Nz1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtNzkzLVxubW0vYWxsb2NfdGFnLmM6Nzk0Olx0XHRcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLFxubW0vYWxsb2NfdGFnLmMtNzk1LVx0XHRcdFx0TlVNQV9OT19OT0RFLCBtb3JlX3BhZ2VzIC0gbnIsIG5leHRfcGFnZSAmIzQzOyBucik7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzI3PXN0YXRpYyB2b2lkIF9fX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMpXG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzM4LVxubW0va2FzYW4vc2hhZG93LmM6MzM5OnN0YXRpYyBpbnQgX19fYWxsb2NfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrKVxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDQtXHR3aGlsZSAobnJfcGFnZXMpIHtcbm1tL2thc2FuL3NoYWRvdy5jOjM0NTpcdFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcbm1tL2thc2FuL3NoYWRvdy5jLTM0Ni1cdFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYz0zNTc9c3RhdGljIGludCBfX2thc2FuX3BvcHVsYXRlX3ZtYWxsb2NfZG8odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTM2OS1cdFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XG5tbS9rYXNhbi9zaGFkb3cuYzozNzA6XHRcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcbm1tL2thc2FuL3NoYWRvdy5jLTM3MS1cdFx0aWYgKHJldClcbi0tXG5tbS9tZW1wb2xpY3kuYz0yNTg5PUVYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9wcm9mKTtcbm1tL21lbXBvbGljeS5jLTI1OTAtXG5tbS9tZW1wb2xpY3kuYzoyNTkxOnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNTkyLVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYwNy1cdFx0aWYgKGRlbHRhKSB7XG5tbS9tZW1wb2xpY3kuYzoyNjA4Olx0XHRcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MDktXHRcdFx0XHRcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVx0XHR9IGVsc2Uge1xubW0vbWVtcG9saWN5LmM6MjYxNDpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYyNS1cbm1tL21lbXBvbGljeS5jOjI2MjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MjctXHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjY0LVx0XHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcbm1tL21lbXBvbGljeS5jOjI2NjU6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNjY2LVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjcwMS1cdC8qXG5tbS9tZW1wb2xpY3kuYzoyNzAyOlx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG5tbS9tZW1wb2xpY3kuYy0yNzAzLVx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzI5LVx0XHRcdGJyZWFrO1xubW0vbWVtcG9saWN5LmM6MjczMDpcdFx0bnJfYWxsb2NhdGVkID0gX19hbGxvY19wYWdlc19idWxrKGdmcCwgbm9kZSwgTlVMTCwgbm9kZV9wYWdlcyxcbm1tL21lbXBvbGljeS5jLTI3MzEtXHRcdFx0XHRcdFx0ICBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzQzLVxubW0vbWVtcG9saWN5LmM6Mjc0NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbm1tL21lbXBvbGljeS5jLTI3NDUtXHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzUzLVxubW0vbWVtcG9saWN5LmM6Mjc1NDpcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFx1MDAyNnBvbC1cdTAwM2Vub2Rlcyxcbm1tL21lbXBvbGljeS5jLTI3NTUtXHRcdFx0XHRcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzU3LVx0aWYgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfcGFnZXMpXG5tbS9tZW1wb2xpY3kuYzoyNzU4Olx0XHRucl9hbGxvY2F0ZWQgJiM0Mzs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVx0XHRcdFx0bnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cbm1tL21lbXBvbGljeS5jOjI3NzA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjc3MS1cdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuLS1cbm1tL21lbXBvbGljeS5jLTI3ODAtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc4MTpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnAsIHBvbCxcbm1tL21lbXBvbGljeS5jLTI3ODItXHRcdFx0XHRcdFx0XHQgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODQtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc4NTpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbm1tL21lbXBvbGljeS5jLTI3ODYtXHRcdFx0XHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc4OC1cdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxubW0vbWVtcG9saWN5LmM6Mjc4OTpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjc5MC1cdFx0XHRcdG51bWFfbm9kZV9pZCgpLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIE5PX0lOVEVSTEVBVkVfSU5ERVgsIFx1MDAyNm5pZCk7XG5tbS9tZW1wb2xpY3kuYzoyNzk0Olx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBub2RlbWFzayxcbm1tL21lbXBvbGljeS5jLTI3OTUtXHRcdFx0XHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxMzktLypcbm1tL3BhZ2VfYWxsb2MuYzo1MTQwOiAqIF9fYWxsb2NfcGFnZXNfYnVsayAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIG9yZGVyLTAgcGFnZXMgdG8gYW4gYXJyYXlcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL3BhZ2VfYWxsb2MuYy01MTYxLVx0XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxubW0vcGFnZV9hbGxvYy5jOjUzMDI6RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xubW0vcGFnZV9hbGxvYy5jLTUzMDMtXG4tLVxubW0vc2x1Yi5jPTc0MjY9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03NDcwLSAqXG5tbS9zbHViLmM6NzQ3MTogKiBVbmxpa2UgYWxsb2NfcGFnZXNfYnVsaygpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGZvciBhbHJlYWR5IGFsbG9jYXRlZFxubW0vc2x1Yi5jLTc0NzItICogb2JqZWN0cyBpbiBAcCwgYW5kIHRodXMgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIHplcm8gaXQuXG4tLVxubW0vdm1hbGxvYy5jPTM2NzY9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vdm1hbGxvYy5jLTM3NDMtXHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxubW0vdm1hbGxvYy5jOjM3NDQ6XHRcdFx0XHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXG5tbS92bWFsbG9jLmMtMzc0NS1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4tLVxubW0vdm1hbGxvYy5jLTM3NDctXHRcdFx0ZWxzZVxubW0vdm1hbGxvYy5jOjM3NDg6XHRcdFx0XHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwLCBuaWQsXG5tbS92bWFsbG9jLmMtMzc0OS1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9NjExPXN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzMy1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNDpcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXCYjMzQ7ZW1wdHlcJiMzNDsgZm9yIGFsbG9jX3BhZ2VzX2J1bGsgKi9cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cdG1lbXNldChcdTAwMjZwb29sLVx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM2LVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM3Olx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVx1MDAzZXAubmlkLCBidWxrLFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM4LVx0XHRcdFx0XHQgKHN0cnVjdCBwYWdlICoqKXBvb2wtXHUwMDNlYWxsb2MuY2FjaGUpO1xuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYz02ODc9c3RhdGljIGJvb2wgc3ZjX2ZpbGxfcGFnZXMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVx0Zm9yIChmaWxsZWQgPSAwOyBmaWxsZWQgXHUwMDNjIG5wYWdlczsgZmlsbGVkID0gcmV0KSB7XG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlx0XHRyZXQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cdFx0aWYgKHJldCBcdTAwM2UgZmlsbGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IEFsbG9jYXRpb24gSXNzdWUqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgc2l0dWF0aW9uOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYSBwb3NzaWJsZSBvbWlzc2lvbi4gSXQgc2VlbXMgdGhhdCB0aGUgZmFzdCBwYXRoIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGlzIG1pc3NpbmcgY3J1Y2lhbCBjYWxscyB0byBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCB3aGVuIGl0JiMzOTtzIGFsbG9jYXRpbmcgcGFnZXMgZnJvbSB0aGUgUENQLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIG92ZXJzaWdodCBJIG5lZWQgdG8gYWRkcmVzcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGZ1bmN0aW9uLCB3aGljaCBJIHN1c3BlY3QgaXMgaW52b2x2ZWQgaW4gdGhlIG92ZXJhbGwgYWxsb2NhdGlvbiBwcm9jZXNzLCBhbmQgYWxzbyB0byBjaGVjayBgcG9zdF9hbGxvY19ob29rYCBpbiB0aGUgc2FtZSBmaWxlLCBhcyBpdCBtYXkgYmUgd2hlcmUgdGhvc2UgbWlzc2VkIGNhbGxzIHNob3VsZCBoYXZlIGdvbmUuCgpUbyB1bmRlcnN0YW5kIHRoZSBjb3JyZWN0IHVzYWdlLCBJIG5lZWQgdG8gc2VlIHdoZXJlIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFyZSBhY3R1YWxseSBiZWluZyBjYWxsZWQgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLiBJIG5lZWQgdGhhdCBjb250ZXh0IHRvIHNlZSBob3cgdG8gcHJvcGVybHkgaW50ZWdyYXRlIHRoZW0gaW50byB0aGUgZmFzdC1wYXRoIGxvb3Agb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc28gdGhhdCB0aGUgcGFnZSBhbGxvY2F0aW9uIGlzIGluc3RydW1lbnRlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODQ6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2g6IFdvcnRoRnV6emluZz8qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhcmUgbm93IGNhbGxlZCBpbiBib3RoIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgICphbmQqIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyBJIGtub3cgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGlzIHVzZWQgYnkgYSB0b24gb2Ygc3R1ZmYg4oCTIHNwbGljZSwgYnRyZnMsIHBhZ2VfcG9vbCwgaW9fdXJpbmcsIGZ1c2UsIHRoZSB3b3Jrcy4gU28sIHllYWgsIGl0JiMzOTtzIGRlZmluaXRlbHkgaW4gdGhlIGNyaXRpY2FsIHBhdGguCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY29uc3VsdCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYS4gTWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyBpbiBgbW0vYCBhcmUgZGVmaW5pdGVseSBvbiB0aGUgbGlzdCwgYWxvbmcgd2l0aCBsb2NraW5nLCBCUEYsIHNjaGVkdWxpbmcsIG5ldHdvcmtpbmcsIFZGUywgc3lzY2FsbHMuIFl1cCwgYW55IGxvZ2ljIG1vZHMgdGhlcmUgYXJlIGZhaXIgZ2FtZS4KCkJ1dCB3YWl0LCB3aGF0ICppc24mIzM5O3QqIHdvcnRoIGZ1enppbmc/IERvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlIHN0dWZmLCBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHMgdGhhdCBkb24mIzM5O3QgYWx0ZXIgY29udHJvbCBmbG93LiBCdWlsZCBzeXN0ZW0gY2hhbmdlcyB0b28uCgpOb3csIHRoaXMgcGF0Y2ggYWRkZWQgYSBjb3VwbGUgb2YgdGhpbmdzOiBhIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCB0cmFjZXBvaW50IGFuZCBhIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsLiBUaGF0IGB0cmFjZXBvaW50YCBpcyBwcm9iYWJseSBqdXN0IGxvZ2dpbmcsIGJ1dCB0aGF0IGBrbXNhbl9hbGxvY19wYWdlYC4uLiB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBEb2VzIHRoYXQgaG9vayBpbnRvIEtNU0FOIGFuZCBtZXNzIHdpdGggc2hhZG93IG1lbW9yeSBvciB0aGUgS01TQU4gc3RhdGU/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBga21zYW5fYWxsb2NfcGFnZWAgdG8gYmUgc3VyZS4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rbXNhbi5oPTU3PWJvb2wgX19pbml0IF9fbXVzdF9jaGVjayBrbXNhbl9tZW1ibG9ja19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcbmluY2x1ZGUvbGludXgva21zYW4uaDo2MTogKiBrbXNhbl9hbGxvY19wYWdlKCkgLSBOb3RpZnkgS01TQU4gYWJvdXQgYW4gYWxsb2NfcGFnZXMoKSBjYWxsLlxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYyLSAqIEBwYWdlOiAgc3RydWN0IHBhZ2UgcG9pbnRlciByZXR1cm5lZCBieSBhbGxvY19wYWdlcygpLlxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC02OC0gKi9cbmluY2x1ZGUvbGludXgva21zYW4uaDo2OTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaD0zMTU9c3RhdGljIGlubGluZSB2b2lkIGttc2FuX3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMxOC1cbmluY2x1ZGUvbGludXgva21zYW4uaDozMTk6c3RhdGljIGlubGluZSB2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXHRcdFx0XHQgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xubW0va21zYW4vc2hhZG93LmMtMTcwLVxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODQ6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8ga21zYW5fYWxsb2NfcGFnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCBga21zYW5fYWxsb2NfcGFnZWAgd2l0aGluIGBtbS9rbXNhbi9zaGFkb3cuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQga2luZCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBLTVNBTiBlbXBsb3lpbmcgZm9yIGl0cyBzaGFkb3cgbWVtb3J5PyYjMzQ7IEkga25vdyB0aGUgY29yZSBvZiBLQVNBTi9LTVNBTiByZWxpZXMgb24gc2hhZG93aW5nIHJlZ3VsYXIgbWVtb3J5LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBgYWxsb2NfcGFnZSgpYCBjYWxsLCBvciBhcmUgdGhleSBkb2luZyBzb21ldGhpbmcgY2xldmVyIGxpa2UgYWxsb2NhdGluZyBjb250aWd1b3VzIGJsb2NrcyBhbmQgbWFuYWdpbmcgdGhlbSBpbnRlcm5hbGx5IHRvIG9wdGltaXplIGZvciBhY2Nlc3MgcGF0dGVybnM/IEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGN1c3RvbSBsb2dpYyB0byBhbGlnbiBhbGxvY2F0aW9ucyBmb3IgZWZmaWNpZW50IHNoYWRvdyBtYXBwaW5nLCBvciBwZXJoYXBzIHRoZXkmIzM5O3JlIHRha2luZyBhZHZhbnRhZ2Ugb2Ygc29tZSBOVU1BIGF3YXJlbmVzcyBpZiBpdCYjMzk7cyByZWxldmFudCBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgc2hhZG93IG1hcHBpbmcgaXMgZG9uZSAtIHdoYXQmIzM5O3MgdGhlIGdyYW51bGFyIG1hcHBpbmcgYW5kIGxvb2t1cCBzdHJhdGVneSwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gdmlydHVhbCBhZGRyZXNzIHJlZ2lvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhZ2UgdGFibGUgZW50cmllcy4gVGhlIGdvYWwsIG9mIGNvdXJzZSwgaXMgdG8gbWluaW1pemUgb3ZlcmhlYWQuIFNvIEkmIzM5O20gaW50ZXJlc3RlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFkZW9mZnM6IG1lbW9yeSBmb290cHJpbnQsIGFsbG9jYXRpb24gc3BlZWQsIGFuZCB0aGUgY29tcGxleGl0eSBvZiB0aGUgaW50ZXJuYWwgYm9va2tlZXBpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVndWxhciBgYWxsb2NfcGFnZWAgYW5kIGBmcmVlX3BhZ2VgIHN5c3RlbSBjYWxscyB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGN1c3RvbSBtYW5hZ2VtZW50IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ttc2FuL3NoYWRvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG4gMTcyOlx0e1xuIDE3MzpcdFx0Ym9vbCBpbml0aWFsaXplZCA9IChmbGFncyBcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XG4gMTc0Olx0XHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xuIDE3NTpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDE3NjpcdFx0aW50IHBhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gMTc3Olx0XG4gMTc4Olx0XHRpZiAoIXBhZ2UpXG4gMTc5Olx0XHRcdHJldHVybjtcbiAxODA6XHRcbiAxODE6XHRcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcbiAxODI6XHRcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcbiAxODM6XHRcbiAxODQ6XHRcdGlmIChpbml0aWFsaXplZCkge1xuIDE4NTpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NjpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Mob3JpZ2luKSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NzpcdFx0XHRyZXR1cm47XG4gMTg4Olx0XHR9XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiBaZXJvIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgcnVudGltZSBzaG91bGQgYWxzbyBiZSBpbml0aWFsaXplZC4gKi9cbiAxOTE6XHRcdGlmIChrbXNhbl9pbl9ydW50aW1lKCkpXG4gMTkyOlx0XHRcdHJldHVybjtcbiAxOTM6XHRcbiAxOTQ6XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhzaGFkb3cpLCAtMSwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE5NTpcdFx0a21zYW5fZW50ZXJfcnVudGltZSgpO1xuIDE5NjpcdFx0aGFuZGxlID0ga21zYW5fc2F2ZV9zdGFja193aXRoX2ZsYWdzKGZsYWdzLCAvKmV4dHJhX2JpdHMqLyAwKTtcbiAxOTc6XHRcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbiAxOTg6XHRcdC8qXG4gMTk5Olx0XHQgKiBBZGRyZXNzZXMgYXJlIHBhZ2UtYWxpZ25lZCwgcGFnZXMgYXJlIGNvbnRpZ3VvdXMsIHNvIGl0JiMzOTtzIG9rXG4gMjAwOlx0XHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXG4gMjAxOlx0XHQgKi9cbiAyMDI6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgKiBwYWdlcyAvIHNpemVvZihoYW5kbGUpOyBpJiM0MzsmIzQzOylcbiAyMDM6XHRcdFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiAyMDc6XHR7XG4gMjA4Olx0XHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxuIDIwOTpcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIGJ1bGsgYWxsb2NhdG9yLiBUaGlzIG92ZXJzaWdodCBwb3RlbnRpYWxseSBsZWFkcyB0byBpbmNvbnNpc3RlbnQgS01TQU4gcmVwb3J0cyBkdWUgdG8gaW1wcm9wZXIgc2hhZG93IGFuZCBvcmlnaW4gcGFnZSBpbml0aWFsaXphdGlvbi4gRnVydGhlcm1vcmUsIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBpcyBhZGRlZCBmb3IgdHJhY2luZyB0aGVzZSBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGNyaXRlcmlhLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGFueSBtb2RpZmljYXRpb25zIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCBhcmUgZ2VuZXJhbGx5IGhpZ2gtcHJpb3JpdHkuCgpUaGUgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBhIHViaXF1aXRvdXMgaG90IHBhdGggdGhhdCBzaG91bGQgYmUgYXZvaWRlZC4gVGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IHdhcm5zIGFnYWluc3QgbGlzdGluZyBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3JzLiBIb3dldmVyLCB1cG9uIGluc3BlY3Rpb24sIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgbm90IGEgZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCwgYGttYWxsb2NgLCBvciBga2ZyZWVgLiBJdCYjMzk7cyAqc3BlY2lmaWNhbGx5KiBjYWxsZWQgYnkgc3Vic3lzdGVtcyBsaWtlIGBzcGxpY2VgLCBgaW9fdXJpbmdgLCBgdm1hbGxvY2AsIGFuZCBmaWxlc3lzdGVtcyBsaWtlIGBidHJmc2AuIFRoaXMgbWFrZXMgaXQgYSAqc3BlY2lmaWMqIHN5bWJvbC4gVGhlIGRpZmYgb25seSBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBzb2xpZGlmeWluZyBpdHMgaW1wb3J0YW5jZS4KClJlZ2FyZGluZyBLY29uZmlnIG9wdGlvbnMsIGBrbXNhbl9hbGxvY19wYWdlYCYjMzk7cyBsb2dpYyBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBLTVNBTmAgaXMgZW5hYmxlZCwgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAuIFdoZW4gS01TQU4gaXMgZGlzYWJsZWQsIGl0JiMzOTtzIGp1c3QgYSBuby1vcCBzdGF0aWMgaW5saW5lLiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyBhbHdheXMgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiBLTVNBTiBjb25maWd1cmF0aW9uLiBFdmVuIHdoZW4gS01TQU4gaXMgb2ZmLCBmdXp6aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgdXNlZnVsLCB0aG91Z2ggYEtNU0FOYCBpdHNlbGYgaXMgcmVsZXZhbnQgZm9yIGFjdHVhbCBLTVNBTiBsb2dpYyBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtNU0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2FzYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxNgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipGaW5kaW5nIHRoZSBLTVNBTiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gbG9jYXRlIHRoZSBjb25maWd1cmF0aW9uIGZvciBLTVNBTi4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBmb2N1cyByaWdodCBub3cuIE5vIG5lZWQgZm9yIGFueSBwcmVhbWJsZSBvciBmbHVmZjsgZGlyZWN0bHkgdG8gdGhlIG9iamVjdGl2ZTogZmluZCB0aGUgcmVsZXZhbnQgS01TQU4gY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIHNvIGxldCYjMzk7cyBnZXQgYWZ0ZXIgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLTVNBTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5rbXNhbj01PWNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXG4tLVxubGliL0tjb25maWcua21zYW4tNy1cbmxpYi9LY29uZmlnLmttc2FuOjg6Y29uZmlnIEtNU0FOXG5saWIvS2NvbmZpZy5rbXNhbi05LVx0Ym9vbCBcJiMzNDtLTVNBTjogZGV0ZWN0b3Igb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMgdXNlXCYjMzQ7XG4tLVxubGliL0tjb25maWcua21zYW49MjY9aWYgS01TQU5cbmxpYi9LY29uZmlnLmttc2FuLTI3LVxubGliL0tjb25maWcua21zYW46Mjg6Y29uZmlnIEtNU0FOX0NIRUNLX1BBUkFNX1JFVFZBTFxubGliL0tjb25maWcua21zYW4tMjktXHRib29sIFwmIzM0O0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXCYjMzQ7XG4tLVxubGliL0tjb25maWcua21zYW4tNDEtXG5saWIvS2NvbmZpZy5rbXNhbjo0Mjpjb25maWcgS01TQU5fS1VOSVRfVEVTVFxubGliL0tjb25maWcua21zYW4tNDMtXHR0cmlzdGF0ZSBcJiMzNDtLTVNBTiBpbnRlZ3JhdGlvbiB0ZXN0IHN1aXRlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEtNU0FOIERlcGVuZGVuY2llcyBpbiB0aGUgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIEtNU0FOLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IEtNU0FOJiMzOTtzIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgdG8gYGxpYi9LY29uZmlnLmttc2FuYC4gSSBzdXNwZWN0IHRoaXMgZmlsZSBjb250YWlucyB0aGUgY3J1Y2lhbCBgY29uZmlnYCBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIEtNU0FOIGFuZCBsaWtlbHkgaXRzIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGNvbmRpdGlvbmFscyB0aGVyZSB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBLTVNBTiBjb2RlIGFuZCBpbnN0cnVtZW50YXRpb24gYXJlIGNvbXBpbGVkLCBwb3RlbnRpYWxseSBiYXNlZCBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIG9yIGV2ZW4gY29tcGlsZS10aW1lIGZsYWdzIHRoYXQgbWF5IGJlIHJlbGV2YW50IHRvIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBzdWNoIGFzIGAtZnNhbml0aXplPWttc2FuYC4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBwcm9wZXIgaW50ZWdyYXRpb24sIHRyb3VibGVzaG9vdGluZywgYW5kIG9wdGltaXphdGlvbiBvZiB0aGUgS01TQU4gYnVpbGQgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjdXN0b20ga2VybmVsIGJ1aWxkcyBvciBzcGVjaWFsaXplZCBoYXJkd2FyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IHZhcmlhYmxlcyB0byBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgY2xlYW4gYW5kIGNvcnJlY3QgS01TQU4gYnVpbGQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYEtjb25maWdgIGhhcyB0byB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmttc2FuJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhBVkVfQVJDSF9LTVNBTlxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXG4gICA2Olx0XHRkZWZfYm9vbCAkKGNjLW9wdGlvbiwtZnNhbml0aXplPWtlcm5lbC1tZW1vcnkpXG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIEtNU0FOXG4gICA5Olx0XHRib29sIFwmIzM0O0tNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcJiMzNDtcbiAgMTA6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tNU0FOIFx1MDAyNlx1MDAyNiBIQVZFX0tNU0FOX0NPTVBJTEVSXG4gIDExOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgIUtBU0FOIFx1MDAyNlx1MDAyNiAhS0NTQU5cbiAgMTI6XHRcdGRlcGVuZHMgb24gIVBSRUVNUFRfUlRcbiAgMTM6XHRcdHNlbGVjdCBTVEFDS0RFUE9UXG4gIDE0Olx0XHRzZWxlY3QgU1RBQ0tERVBPVF9BTFdBWVNfSU5JVFxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgKEtNU0FOKSBpcyBhIGR5bmFtaWMgZGV0ZWN0b3Igb2YgdXNlcyBvZlxuICAxNzpcdFx0ICB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiB0aGUga2VybmVsLiBJdCBpcyBiYXNlZCBvbiBjb21waWxlclxuICAxODpcdFx0ICBpbnN0cnVtZW50YXRpb24gcHJvdmlkZWQgYnkgQ2xhbmcgYW5kIHRodXMgcmVxdWlyZXMgQ2xhbmcgdG8gYnVpbGQuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIEFuIGltcG9ydGFudCBub3RlIGlzIHRoYXQgS01TQU4gaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aW9uIHVzZSxcbiAgMjE6XHRcdCAgYmVjYXVzZSBpdCBkcmFzdGljYWxseSBpbmNyZWFzZXMga2VybmVsIG1lbW9yeSBmb290cHJpbnQgYW5kIHNsb3dzXG4gIDIyOlx0XHQgIHRoZSB3aG9sZSBzeXN0ZW0gZG93bi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21zYW4ucnN0XHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gIDI1Olx0XG4gIDI2Olx0aWYgS01TQU5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgS01TQU5fQ0hFQ0tfUEFSQU1fUkVUVkFMXG4gIDI5Olx0XHRib29sIFwmIzM0O0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXCYjMzQ7XG4gIDMwOlx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1OTIKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG9wdGltYWwgZnV6emluZyBjb25maWd1cmF0aW9uIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBJIHNlZSB0aGF0IGBLTVNBTmAgaXMgZmxhZ2dlZCBhcyBhIHJlbGV2YW50IGNvbmZpZy4gQnV0IEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEFmdGVyIGFsbCwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBjb3JlIGtlcm5lbCBjb2RlIGFuZCBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkuIEVuYWJsaW5nIGBLTVNBTmAgY2xlYXJseSBhY3RpdmF0ZXMgdGhlIG5ldyBga21zYW5fYWxsb2NfcGFnZSgpYCBwYXRoLCB3aGljaCBpcyBpbXBvcnRhbnQsIGJ1dCBpcyBpdCB0aGUgKm9ubHkqIHBhdGggdG8gY29uc2lkZXI/CgpBbHJpZ2h0LCBuZXh0LCBgRm9jdXNTeW1ib2xzYC4gTGV0IG1lIGNvbmZpcm06IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgKmlzKiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHRoYXQmIzM5O3MgY29ycmVjdC4gTm93LCB3aGF0IGFyZSB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIGNhbGxlcnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgc2VlIGEgbGlzdDogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYGNvcHlfc3BsaWNlX3JlYWRgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYC4gRm9jdXNpbmcgZGlyZWN0bHkgb24gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBzaG91bGQgaW5kZWVkIGJlIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhpcyBidWxrIGFsbG9jYXRpb24gcGF0aC4KCk5vdywgbGV0JiMzOTtzIGNhcmVmdWxseSByZXZpZXcgdGhlIGluc3RydWN0aW9ucyBwcm92aWRlZCB0byBlbnN1cmUgSSBhbSBpbnRlcnByZXRpbmcgdGhpbmdzIGNvcnJlY3RseToKCiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4gRXhjZWxsZW50LiBUaGlzIGNvbmZpcm1zIG15IGludHVpdGlvbjsgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCB0aGVyZSYjMzk7cyBiZWVuIGEgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGBLTVNBTmAgaW5zdHJ1bWVudGF0aW9uIGFuZCBhIHRyYWNlcG9pbnQuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDtdYC4gQ29uZmlybWVkLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7S01TQU4mIzM0O11gIChvciBlbXB0eS9LTVNBTikuIFllcywgYEtNU0FOYCBpcyBuZWNlc3NhcnksIG9yIGFuIGVtcHR5IGNvbmZpZywgd2hpY2gsIGFzIEkgdW5kZXJzdGFuZCwgd2lsbCB1c2UgS01TQU4gdG8gZXhlcmNpc2UgYGttc2FuX2FsbG9jX3BhZ2VgLgoqICAgYFJlYXNvbmluZ2A6IFRoaXMgbWFrZXMgc2Vuc2UuIFRoZSByZWFzb25pbmcgZXhwbGFpbnMgdGhlIGNvbnRleHQgY2xlYXJseTogd2UgYXJlIGZ1enppbmcgZHVlIHRvIHRoZSBjb3JlIE1NIHN1YnN5c3RlbSBtb2RpZmljYXRpb24gd2l0aCBgS01TQU5gIGluc3RydW1lbnRhdGlvbiwgdGFyZ2V0aW5nIHRoZSBidWxrIHBhZ2UgYWxsb2NhdGlvbiBwYXRoLgoKT2theSwgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgZXZlcnl0aGluZy4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLiBJIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0YXJnZXQsIHRoZSBjb25maWd1cmF0aW9uLCBhbmQgdGhlIHJhdGlvbmFsZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIHByb3Blcmx5IGludm9rZSB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgYW5kIGttc2FuX2FsbG9jX3BhZ2UoKSBmb3IgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgcGVyLWNwdSBwYWdlIGFsbG9jYXRvci4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtNU0FOIHRyYWNraW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIHByb3Blcmx5IGludm9rZSB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgYW5kIGttc2FuX2FsbG9jX3BhZ2UoKSBmb3IgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgcGVyLWNwdSBwYWdlIGFsbG9jYXRvci4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtNU0FOIHRyYWNraW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXG5cbktNU0FOIHRyYWNrcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHBhZ2UgYWxsb2NhdGlvbnMgYnkgbWFya2luZyBub24tYF9fR0ZQX1pFUk9gIHBhZ2VzIHdpdGggdW5pbml0aWFsaXplZCBzaGFkb3cgYW5kIGNyZWF0aW5nIGFsbG9jYXRpb24gb3JpZ2lucy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrYCAvIGBhbGxvY19wYWdlc19idWxrX25vZGVgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCkgYnlwYXNzZWQgS01TQU4gdHJhY2tpbmcsIGxlYXZpbmcgS01TQU4gYmxpbmQgdG8gdW5pbml0aWFsaXplZCByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yaWdpbmF0aW5nIGZyb20gYnVsay1hbGxvY2F0ZWQgcGFnZXMgKHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBhY3Jvc3Mgdm1hbGxvYywgcGFnZSBwb29sIC8gbmV0d29yayBkcml2ZXJzLCBzcGxpY2UsIGJ0cmZzLCBmdXNlLCBhbmQgYnBmKS5cblxuU3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiBvbmx5IG1vbml0b3IgbWVtb3J5IGFjY2Vzc2liaWxpdHkgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYW5kIGNhbm5vdCBkZXRlY3QgcmVhZHMgb3IgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMganVzdGlmaWVkIHRvIHZhbGlkYXRlIHRoZSBLTVNBTiBob29rIGFuZCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBleHBvc2VkIGFjcm9zcyBhbGwgYnVsayBwYWdlIGFsbG9jYXRpb24gY2FsbCBzaXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE3OTQzZjY2NDY1ZThhZGI2M2NmYjJmMWM5NTdlNzBhOWUyNmUyZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMTJmYWM5MDg0YzQ4My4uMDJiYTE5ZjZkYmI1OSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTI4MCw2ICYjNDM7NTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCQlwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7CiAJCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7CiYjNDM7CQl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpOwomIzQzOwkJa21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApOwogCQlwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgZGVkaWNhdGluZyBzb21lIEtNU0FOIGZ1enppbmcgdGltZSB0byBpdC4gSSBzZWUgdGhleSYjMzk7dmUgYWRkZWQgYSBmZXcgbGluZXMgdG8gYG1tL3BhZ2VfYWxsb2MuY2AgYXJvdW5kIGxpbmUgNTI4MC4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBhIG5ldyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhIGJpdCBiZXR0ZXIgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCB0aGF0IGFyZWEgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgaW4gYnVsaywgd2hpY2ggY291bGQgYmUgYSBob3Qgc3BvdCBmb3IgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBUaGUgYWRkaXRpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHRoZSBrZXkgdGhpbmcsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2hlY2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLCBwZXJoYXBzPyBPciBpcyBpdCBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZD8gSWYgaXQmIzM5O3MgYSBuZXcgY2hlY2ssIHRoZW4gdGhhdCBtYWtlcyBpdCBpbnRlcmVzdGluZyB0byB0ZXN0LiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoaXMgcGF0aCB3aXRoIEtNU0FOIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjYwOlx0XHRwY3BfbGlzdCA9IFx1MDAyNnBjcC1cdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcbjUyNjE6XHRcdHdoaWxlIChucl9wb3B1bGF0ZWQgXHUwMDNjIG5yX3BhZ2VzKSB7XG41MjYyOlx0XG41MjYzOlx0XHRcdC8qIFNraXAgZXhpc3RpbmcgcGFnZXMgKi9cbjUyNjQ6XHRcdFx0aWYgKHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSkge1xuNTI2NTpcdFx0XHRcdG5yX3BvcHVsYXRlZCYjNDM7JiM0Mzs7XG41MjY2Olx0XHRcdFx0Y29udGludWU7XG41MjY3Olx0XHRcdH1cbjUyNjg6XHRcbjUyNjk6XHRcdFx0cGFnZSA9IF9fcm1xdWV1ZV9wY3BsaXN0KHpvbmUsIDAsIGFjLm1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyxcbjUyNzA6XHRcdFx0XHRcdFx0XHRcdFx0cGNwLCBwY3BfbGlzdCk7XG41MjcxOlx0XHRcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcbjUyNzI6XHRcdFx0XHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXG41MjczOlx0XHRcdFx0aWYgKCFucl9hY2NvdW50KSB7XG41Mjc0Olx0XHRcdFx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbjUyNzU6XHRcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTI3NjpcdFx0XHRcdH1cbjUyNzc6XHRcdFx0XHRicmVhaztcbjUyNzg6XHRcdFx0fVxuNTI3OTpcdFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbjUyODA6XHRcbjUyODE6XHRcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuNTI4MjpcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuNTI4MzpcdFx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuNTI4NDpcdFx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XG41Mjg1Olx0XHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuNTI4NjpcdFx0fVxuNTI4NzpcdFxuNTI4ODpcdFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XG41Mjg5Olx0XG41MjkwOlx0XHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xuNTI5MTpcdFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcbjUyOTI6XHRcbjUyOTM6XHRvdXQ6XG41Mjk0Olx0XHRyZXR1cm4gbnJfcG9wdWxhdGVkO1xuNTI5NTpcdFxuNTI5NjpcdGZhaWxlZDpcbjUyOTc6XHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcbjUyOTg6XHRcdGlmIChwYWdlKVxuNTI5OTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUzMDA6XHRcdGdvdG8gb3V0O1xuNTMwMTpcdH1cbjUzMDI6XHRFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG41MzAzOlx0XG41MzA0Olx0LypcbjUzMDU6XHQgKiBmcmVlX3BhZ2VzX2J1bGsgLSBGcmVlIGFuIGFycmF5IG9mIG9yZGVyLTAgcGFnZXNcbjUzMDY6XHQgKiBAcGFnZV9hcnJheTogQXJyYXkgb2YgcGFnZXMgdG8gZnJlZVxuNTMwNzpcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcbjUzMDg6XHQgKlxuNTMwOTpcdCAqIEZyZWUgdGhlIG9yZGVyLTAgcGFnZXMuIEFkamFjZW50IGVudHJpZXMgd2hvc2UgUEZOcyBmb3JtIGEgY29udGlndW91c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVsayBQYWdlIEFsbG9jYXRvciBJc3N1ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGdhcCBpbiB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciYjMzk7cyBmYXN0IHBhdGggd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKWAgZnVuY3Rpb24gYW5kIHRoZSBgdHJhY2VfbW1fcGFnZV9hbGxvYyguLi4pYCBjYWxscywgd2hpY2ggYXJlIGNydWNpYWwgZm9yIG1lbW9yeSBzYWZldHkgYW5kIHRyYWNpbmcsIHdlcmUgb21pdHRlZCB3aGVuIGhhbmRsaW5nIHBhZ2VzIHJldHJpZXZlZCBmcm9tIHRoZSBwZXItQ1BVIHBhZ2UgbGlzdCAodGhlIFBDUCBsaXN0KS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGhvdyBkb2VzIHRoaXMgYWZmZWN0IHRoZSBLTVNBTiBiZWhhdmlvcj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnNlcXVlbmNlcyB0aGVyZSBhcmUgd2hlbiBga21zYW5fYWxsb2NfcGFnZWAgKmlzKiBjYWxsZWQgdmVyc3VzIHdoZW4gaXQgKmlzbiYjMzk7dCouIFRoZSBLTVNBTiBpbnRlZ3JhdGlvbiBpcyBjcml0aWNhbCwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdmVyaWZ5IGhvdyB0aGlzIG92ZXJzaWdodCBjaGFuZ2VzIHRoZSBleHBlY3RlZCBtZW1vcnkgYmVoYXZpb3IuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYXNzZXNzIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rbXNhbi5oPTU3PWJvb2wgX19pbml0IF9fbXVzdF9jaGVjayBrbXNhbl9tZW1ibG9ja19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcbmluY2x1ZGUvbGludXgva21zYW4uaDo2MTogKiBrbXNhbl9hbGxvY19wYWdlKCkgLSBOb3RpZnkgS01TQU4gYWJvdXQgYW4gYWxsb2NfcGFnZXMoKSBjYWxsLlxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYyLSAqIEBwYWdlOiAgc3RydWN0IHBhZ2UgcG9pbnRlciByZXR1cm5lZCBieSBhbGxvY19wYWdlcygpLlxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC02OC0gKi9cbmluY2x1ZGUvbGludXgva21zYW4uaDo2OTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaD0zMTU9c3RhdGljIGlubGluZSB2b2lkIGttc2FuX3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMxOC1cbmluY2x1ZGUvbGludXgva21zYW4uaDozMTk6c3RhdGljIGlubGluZSB2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXHRcdFx0XHQgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xubW0va21zYW4vc2hhZG93LmMtMTcwLVxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODQ6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTE2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgU2hhZG93IFJBTSDigJMgTGluZSAxNzEqKgoKT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBpc3N1ZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9rbXNhbi9zaGFkb3cuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzEuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgc29tZXRoaW5nIGlzIGFtaXNzIGluIHRoZSBzaGFkb3cgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCB0aGF0IHNlY3Rpb24gc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBwb3RlbnRpYWxseSBhbiBpc3N1ZSB3aXRoIGhvdyBLTVNBTiBpcyBtYXBwaW5nIG9yIGludGVyYWN0aW5nIHdpdGggdGhlIHNoYWRvdyBtZW1vcnkgcmVnaW9ucy4gTWF5YmUgYSByYWNlIGNvbmRpdGlvbiwgYSBtaXNjYWxjdWxhdGlvbiBpbiB0aGUgb2Zmc2V0LCBvciBhIHByb2JsZW0gd2l0aCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIHNoYWRvdyBSQU0gbWFwcGluZz8gTGV0JiMzOTtzIGNoZWNrIHRoZXJlIGFuZCBzZWUgaWYgbXkgaHVuY2ggaG9sZHMgYW55IHdhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ttc2FuL3NoYWRvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG4gMTcyOlx0e1xuIDE3MzpcdFx0Ym9vbCBpbml0aWFsaXplZCA9IChmbGFncyBcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XG4gMTc0Olx0XHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xuIDE3NTpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDE3NjpcdFx0aW50IHBhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gMTc3Olx0XG4gMTc4Olx0XHRpZiAoIXBhZ2UpXG4gMTc5Olx0XHRcdHJldHVybjtcbiAxODA6XHRcbiAxODE6XHRcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcbiAxODI6XHRcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcbiAxODM6XHRcbiAxODQ6XHRcdGlmIChpbml0aWFsaXplZCkge1xuIDE4NTpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NjpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Mob3JpZ2luKSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NzpcdFx0XHRyZXR1cm47XG4gMTg4Olx0XHR9XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiBaZXJvIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgcnVudGltZSBzaG91bGQgYWxzbyBiZSBpbml0aWFsaXplZC4gKi9cbiAxOTE6XHRcdGlmIChrbXNhbl9pbl9ydW50aW1lKCkpXG4gMTkyOlx0XHRcdHJldHVybjtcbiAxOTM6XHRcbiAxOTQ6XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhzaGFkb3cpLCAtMSwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE5NTpcdFx0a21zYW5fZW50ZXJfcnVudGltZSgpO1xuIDE5NjpcdFx0aGFuZGxlID0ga21zYW5fc2F2ZV9zdGFja193aXRoX2ZsYWdzKGZsYWdzLCAvKmV4dHJhX2JpdHMqLyAwKTtcbiAxOTc6XHRcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbiAxOTg6XHRcdC8qXG4gMTk5Olx0XHQgKiBBZGRyZXNzZXMgYXJlIHBhZ2UtYWxpZ25lZCwgcGFnZXMgYXJlIGNvbnRpZ3VvdXMsIHNvIGl0JiMzOTtzIG9rXG4gMjAwOlx0XHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXG4gMjAxOlx0XHQgKi9cbiAyMDI6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgKiBwYWdlcyAvIHNpemVvZihoYW5kbGUpOyBpJiM0MzsmIzQzOylcbiAyMDM6XHRcdFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiAyMDc6XHR7XG4gMjA4Olx0XHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxuIDIwOTpcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIE5lZWRzIENvbnNpZGVyYXRpb24gZm9yIEJ1bGsgUGFnZSBBbGxvY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBjcnVjaWFsIG92ZXJzaWdodCBpbiBob3cgS01TQU4gaGFuZGxlcyBidWxrIHBhZ2UgYWxsb2NhdGlvbnMgdmlhIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFByZXZpb3VzbHksIGBrbXNhbl9hbGxvY19wYWdlKClgIHdhcyBtaXNzaW5nIGZyb20gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgcGF0aCwgbWVhbmluZyBLTVNBTiBjb3VsZG4mIzM5O3QgcHJvcGVybHkgdHJhY2sgdGhlIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBwYWdlcyBhbGxvY2F0ZWQgaW4gYnVsay4gVGhpcyBtZWFudCB0aGF0IG1lbW9yeSBhbGxvY2F0ZWQgd2l0aG91dCBgX19HRlBfWkVST2AgdmlhIGBhbGxvY19wYWdlc19idWxrYCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIHN0YWxlIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aGF0IEtNU0FOIHdvdWxkbiYjMzk7dCBjYXRjaC4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBpcyBiZWluZyBhZGRlZCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaXQuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IEtNU0FOIHdpbGwgbm93IGFjdGl2ZWx5IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBwYWdlcyBhbGxvY2F0ZWQgdGhyb3VnaCB0aGUgYnVsayBwYWdlIGFsbG9jYXRvci4gVGhpcyBpcyBhIGdhbWUtY2hhbmdlciBiZWNhdXNlIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgIOKAkyB0aGluZ3MgbGlrZSBuZXR3b3JrIGRyaXZlcnMsIHBhZ2UgY2FjaGUgcmVhZGFoZWFkLCBhbmQgb3RoZXIgY3JpdGljYWwgY29tcG9uZW50cyDigJMgY2FuIG5vdyBiZSBzY3J1dGluaXplZCBmb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmZyb20qIGJ1bGstYWxsb2NhdGVkIHBhZ2VzLiBBbmQgaWYgdGhleSBzZW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBLTVNBTiB3aWxsIGNhdGNoIGl0LgoKQnV0Li4uIGRvIHdlIGFjdHVhbGx5IG5lZWQgS01TQU4gZm9yIHRoaXM/IExldCBtZSBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTj10cnVlYC4gSSBuZWVkIHRvIGFzayBteXNlbGYsIGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgb3IgbW9kaWZ5aW5nIGFueSBvZiB0aGUgZm9sbG93aW5nPwoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQuCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuCjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpBbmQsIGNyaXRpY2FsbHksIGlzIHRoaXMgYSAqS01TQU4tc3BlY2lmaWMqIGlzc3VlPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBzdGFuZGFyZCBLQVNBTiBjb3ZlcnMgYSBsb3QuIElmIGEgYnVnIGNvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycywgdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4uIEtNU0FOIGlzIGV4cGVuc2l2ZSwgYW5kIGl0IGhhcyB0byBleHBvc2UgdGhpbmdzIHRoYXQgd291bGQgbm90IGJlIGV4cG9zZWQgYnkgdGhlIG90aGVyIGRldGVjdG9ycy4KCk9rYXksIGJhY2sgdG8gdGhlIHByb2JsZW0uIEJ5IGFkZGluZyBga21zYW5fYWxsb2NfcGFnZSgpYCwgd2UgYXJlICplbmFibGluZyogS01TQU4gdG8gcHJvcGVybHkgcG9pc29uIGFuZCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSAqZHVyaW5nKiBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBLTVNBTiAqY291bGRuJiMzOTt0KiBkbyB0aGlzIGJlZm9yZS4gSXQgd2FzIGEgYmxpbmQgc3BvdC4KClNwZWNpZmljYWxseSwgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKWAgaXMgZGVzaWduZWQgdG8gbWFyayB0aGUgcGFnZSBzaGFkb3cgYXMgdW5pbml0aWFsaXplZCAoYC0xYCkgaWYgYF9fR0ZQX1pFUk9gIGlzICpub3QqIHNldC4gTm93LCB3aGVuIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3BhZ2VzX2J1bGtgLCBhY3Jvc3MgdGhlIGtlcm5lbCAobmV0d29ya2luZywgY3J5cHRvLCBldGMuKSwgS01TQU4gY2FuIGRldGVjdCB0aGlzLiBUaGlzICpkaXJlY3RseSogaW1wYWN0cyBLTVNBTiYjMzk7cyBpbnN0cnVtZW50YXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2UgYWxsb2NhdGlvbikuIFRoaXMgbm93IGVuYWJsZXMgdXMgdG8gZGV0ZWN0IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBwYWdlcy4KCldhaXQsIGlzIGl0IGp1c3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgY2hhbmdlPyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgZGlmZmVyZW50IGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYWxzbyB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa19hcnJheWAgYW5kIGBhbGxvY19wYWdlc19idWxrX2xpc3RgIGFyZSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtYWtlIGEgY2FsbCBvbiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NjUKCQkJCQkJCW91dHB1dDogMjc3CgkJCQkJCQl0aG91Z2h0czogMTM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBCdWxrIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgc2FmZXR5LCBwYXJ0aWN1bGFybHkgd2l0aCBLTVNBTi4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGUgcGF0Y2ggZG9lczogaXQmIzM5O3MgYWRkaW5nIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgdXNlZCBFVkVSWVdIRVJFIOKAkyBgdm1hbGxvY2AsIG5ldHdvcmsgcGFnZSBwb29scywgYHNwbGljZWAsIGZpbGVzeXN0ZW1zLCBCUEYsIGBpb191cmluZ2AsIFJQQywgeW91IG5hbWUgaXQuIFRoZSBzaWduaWZpY2FudCB0aGluZyBpcyB0aGF0LCAqYmVmb3JlKiB0aGlzIHBhdGNoLCBpZiBwYWdlcyB3ZXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBQQ1AgbGlzdCDigJMgdGhlIGZhc3QgcGF0aCDigJMgS01TQU4mIzM5O3MgaW5pdGlhbGl6YXRpb24gdHJhY2tpbmcgd2FzIHNraXBwZWQuIFRoaXMgbWVhbnMgS01TQU4gd2FzIGNvbXBsZXRlbHkgYmxpbmQgdG8gdW5pbml0aWFsaXplZCBwYWdlcyBhbGxvY2F0ZWQgdmlhIGBhbGxvY19wYWdlc19idWxrYC4KClNvLCB0aGUga2V5IGhlcmUgaXMgdGhhdCBieSBhZGRpbmcgdGhpcyBob29rLCBwYWdlcyBhbGxvY2F0ZWQgd2l0aG91dCBgX19HRlBfWkVST2Agd2lsbCBiZSBtYXJrZWQgYXMgdW5pbml0aWFsaXplZC4gQ29udmVyc2VseSwgcGFnZXMgYWxsb2NhdGVkIHdpdGggYF9fR0ZQX1pFUk9gIHdpbGwgYmUgbWFya2VkIGFzIGluaXRpYWxpemVkLiBOb3csIGFueSBjb2RlIHJlYWRpbmcgZnJvbSB0aGVzZSBwYWdlcyAqYmVmb3JlKiBpbml0aWFsaXppbmcgdGhlbSwgb3IgbGVha2luZyB0aG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzIHRvIHVzZXIgc3BhY2UsIHdpbGwgdHJpZ2dlciBLTVNBTi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBMT1Qgb2YgcG90ZW50aWFsIGNvZGUgcGF0aHMgbm93IGJlaW5nIHNjcnV0aW5pemVkLCB0aGluZ3MgbGlrZSBgY29weV9zcGxpY2VfcmVhZGAsIGBmdXNlX3JlYWRkaXJgLCBuZXR3b3JrIHJlY2VpdmUgaGFuZGxpbmcsIGB2bWFsbG9jYCwgQnRyZnMsIEJQRiBhcmVuYSwgYGlvX3VyaW5nYCwgZXRjLiBUaGlzIGVuYWJsZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgYWNyb3NzICphbGwqIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBDb3VsZCBLQVNBTiBjYXRjaCB0aGlzPyBOby4gS0FTQU4gaXMgZ3JlYXQgYXQgZGV0ZWN0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZXMsIGV0Yy4gSXQgZm9jdXNlcyBvbiBtZW1vcnkgdmFsaWRpdHksIG5vdCBpbml0aWFsaXphdGlvbiBzdGF0ZS4gS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIEkgaGF2ZSB0byBiZSBjcnlzdGFsIGNsZWFyIG9uIHRoaXMgYmVjYXVzZSBvZiB0aGUgS01TQU4gcnVsZXMgYW5kIGNyaXRlcmlhLiBXZSYjMzk7cmUgb25seSBqdXN0aWZpZWQgaW4gcnVubmluZyBhIEtNU0FOIHNlc3Npb24gaWYgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBkb24mIzM5O3QgY2F0Y2ggdGhlIHByb2JsZW0uCgpMZXQmIzM5O3MgY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIEtNU0FOIGNyaXRlcmlhOiB3ZSBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgb25seSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KCkluIHRoaXMgY2FzZSwgaXQmIzM5O3MgbW9zdCByZWxldmFudCB0byBpdGVtIDM6IHRoaXMgcGF0Y2ggKmRpcmVjdGx5KiBhZGRyZXNzZXMgbWlzc2luZyBLTVNBTiBob29rcyBpbiB0aGUgY29yZSBidWxrIHBhZ2UgYWxsb2NhdG9yLiBXZSBhcmUgZXhwbGljaXRseSBjaGFuZ2luZyBob3cgS01TQU4gdHJhY2tzIGluaXRpYWxpemF0aW9uIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNjZW5hcmlvIEtNU0FOIGlzIGRlc2lnbmVkIGZvciBiZWNhdXNlIHRoaXMgd2lsbCBjb3ZlciBhbGwgY29kZSBwYXRocyB0aGF0IHVzZSBgYWxsb2NfcGFnZXNfYnVsa2AuIFdlIGhhdmUgYSBjbGVhciBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCB3aGljaCBLQVNBTiBjYW5ub3QgY2F0Y2guCgpTbywgaXMgdGhlcmUgKmFueSogYW1iaWd1aXR5PyBObywgS0FTQU4gZG9lcyBub3QgdHJhY2sgaW5pdGlhbGl6YXRpb24sIG9ubHkgdmFsaWRpdHkuIEJlZm9yZSB0aGlzLCBLTVNBTiB3YXMgYmxpbmQgdG8gYnVsay1hbGxvY2F0ZWQgcGFnZXMuIFdpdGggdGhpcyBwYXRjaCwgd2UmIzM5O3JlIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbiBmb3IgZXZlcnkgc2luZ2xlIGBhbGxvY19wYWdlc19idWxrYCBhbGxvY2F0aW9uLiBUaGlzIGlzIGEgc29saWQganVzdGlmaWNhdGlvbiBmb3IgYE5lZWRzS01TQU49dHJ1ZWAuCgpUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj10cnVlYC4gTXkgcmVhc29uaW5nIGlzOgoxLiBUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGhvb2tzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4KMi4gS01TQU4gd2lsbCBub3cgdHJhY2sgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIHRoZXNlIHBhZ2VzIGFuZCBmbGFnIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGRvZXMgbm90IGRvIHRoaXMuIFdpdGhvdXQgdGhpcyBwYXRjaCwgS01TQU4gd2FzIGJsaW5kIHRvIGJ1bGsgYWxsb2NhdGlvbnMuIFRoaXMgYWxsb3dzIHVzIHRvIHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyBpbiB0aGUga2VybmVsLgozLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXG5cbktNU0FOIHRyYWNrcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHBhZ2UgYWxsb2NhdGlvbnMgYnkgbWFya2luZyBub24tYF9fR0ZQX1pFUk9gIHBhZ2VzIHdpdGggdW5pbml0aWFsaXplZCBzaGFkb3cgYW5kIGNyZWF0aW5nIGFsbG9jYXRpb24gb3JpZ2lucy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrYCAvIGBhbGxvY19wYWdlc19idWxrX25vZGVgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCkgYnlwYXNzZWQgS01TQU4gdHJhY2tpbmcsIGxlYXZpbmcgS01TQU4gYmxpbmQgdG8gdW5pbml0aWFsaXplZCByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yaWdpbmF0aW5nIGZyb20gYnVsay1hbGxvY2F0ZWQgcGFnZXMgKHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBhY3Jvc3Mgdm1hbGxvYywgcGFnZSBwb29sIC8gbmV0d29yayBkcml2ZXJzLCBzcGxpY2UsIGJ0cmZzLCBmdXNlLCBhbmQgYnBmKS5cblxuU3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiBvbmx5IG1vbml0b3IgbWVtb3J5IGFjY2Vzc2liaWxpdHkgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYW5kIGNhbm5vdCBkZXRlY3QgcmVhZHMgb3IgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMganVzdGlmaWVkIHRvIHZhbGlkYXRlIHRoZSBLTVNBTiBob29rIGFuZCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBleHBvc2VkIGFjcm9zcyBhbGwgYnVsayBwYWdlIGFsbG9jYXRpb24gY2FsbCBzaXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXG5cbktNU0FOIHRyYWNrcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHBhZ2UgYWxsb2NhdGlvbnMgYnkgbWFya2luZyBub24tYF9fR0ZQX1pFUk9gIHBhZ2VzIHdpdGggdW5pbml0aWFsaXplZCBzaGFkb3cgYW5kIGNyZWF0aW5nIGFsbG9jYXRpb24gb3JpZ2lucy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrYCAvIGBhbGxvY19wYWdlc19idWxrX25vZGVgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCkgYnlwYXNzZWQgS01TQU4gdHJhY2tpbmcsIGxlYXZpbmcgS01TQU4gYmxpbmQgdG8gdW5pbml0aWFsaXplZCByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yaWdpbmF0aW5nIGZyb20gYnVsay1hbGxvY2F0ZWQgcGFnZXMgKHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBhY3Jvc3Mgdm1hbGxvYywgcGFnZSBwb29sIC8gbmV0d29yayBkcml2ZXJzLCBzcGxpY2UsIGJ0cmZzLCBmdXNlLCBhbmQgYnBmKS5cblxuU3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiBvbmx5IG1vbml0b3IgbWVtb3J5IGFjY2Vzc2liaWxpdHkgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYW5kIGNhbm5vdCBkZXRlY3QgcmVhZHMgb3IgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMganVzdGlmaWVkIHRvIHZhbGlkYXRlIHRoZSBLTVNBTiBob29rIGFuZCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBleHBvc2VkIGFjcm9zcyBhbGwgYnVsayBwYWdlIGFsbG9jYXRpb24gY2FsbCBzaXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzoxNC42Njc2OTQ5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1OTUwNDk4NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktNU0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdGhlIG1pc3NpbmcgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGNhbGxzIHRvIHRoZSBQQ1AgZmFzdCBwYXRoIG9mIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yIChgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWApLlxcblxcbktNU0FOIHRyYWNrcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHBhZ2UgYWxsb2NhdGlvbnMgYnkgbWFya2luZyBub24tYF9fR0ZQX1pFUk9gIHBhZ2VzIHdpdGggdW5pbml0aWFsaXplZCBzaGFkb3cgYW5kIGNyZWF0aW5nIGFsbG9jYXRpb24gb3JpZ2lucy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrYCAvIGBhbGxvY19wYWdlc19idWxrX25vZGVgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCkgYnlwYXNzZWQgS01TQU4gdHJhY2tpbmcsIGxlYXZpbmcgS01TQU4gYmxpbmQgdG8gdW5pbml0aWFsaXplZCByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yaWdpbmF0aW5nIGZyb20gYnVsay1hbGxvY2F0ZWQgcGFnZXMgKHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBhY3Jvc3Mgdm1hbGxvYywgcGFnZSBwb29sIC8gbmV0d29yayBkcml2ZXJzLCBzcGxpY2UsIGJ0cmZzLCBmdXNlLCBhbmQgYnBmKS5cXG5cXG5TdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIG9ubHkgbW9uaXRvciBtZW1vcnkgYWNjZXNzaWJpbGl0eSAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhbmQgY2Fubm90IGRldGVjdCByZWFkcyBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBqdXN0aWZpZWQgdG8gdmFsaWRhdGUgdGhlIEtNU0FOIGhvb2sgYW5kIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIGV4cG9zZWQgYWNyb3NzIGFsbCBidWxrIHBhZ2UgYWxsb2NhdGlvbiBjYWxsIHNpdGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBhbGxvY19wYWdlc19idWxrX25vcHJvZiBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gcHJvcGVybHkgaW52b2tlIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBhbmQga21zYW5fYWxsb2NfcGFnZSgpIGZvciBwYWdlcyBhbGxvY2F0ZWQgdmlhIHRoZSBwZXItY3B1IHBhZ2UgYWxsb2NhdG9yLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS01TQU4gdHJhY2tpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjE0LjY2NzcwMzU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMwMzExNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMTc5NDNmNjY0NjVlOGFkYjYzY2ZiMmYxYzk1N2U3MGE5ZTI2ZTJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggMTJmYWM5MDg0YzQ4My4uMDJiYTE5ZjZkYmI1OSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtNTI4MCw2ICs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbiBcXG4gXFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbiBcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xcbitcXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbitcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XFxuIFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MTUuMjQxNTE4MTIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTU1Mjk3NDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBhbGxvY19wYWdlc19idWxrX25vcHJvZiBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gcHJvcGVybHkgaW52b2tlIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBhbmQga21zYW5fYWxsb2NfcGFnZSgpIGZvciBwYWdlcyBhbGxvY2F0ZWQgdmlhIHRoZSBwZXItY3B1IHBhZ2UgYWxsb2NhdG9yLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS01TQU4gdHJhY2tpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDE3OTQzZjY2NDY1ZThhZGI2M2NmYjJmMWM5NTdlNzBhOWUyNmUyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjAyYmExOWY2ZGJiNTkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyODAsNiArNTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcbiBcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuK1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuK1x0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjE1LjI0MTUxOTM2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzODIxMzU5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJJ2QgdGhpbmsgaXQgdGhyb3VnaDpcblxuKipBbmFseXppbmcgYSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBgbW0vcGFnZV9hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHRoYXQgZnVuY3Rpb24uIEl0J3MgcmVsYXRlZCB0byBidWxrIHBhZ2UgYWxsb2NhdGlvbiwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCdzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYSBvciBwYXJ0IG9mIHNvbWUgb3B0aW1pemF0aW9uLlxuXG5Ob3csIEknbGwgbmVlZCB0byBzZWUgdGhlIGNvZGUsIGFuZCBxdWlja2x5LiBJbnN0ZWFkIG9mIGp1c3Qgc3RhcmluZyBibGluZGx5LCBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCB0aGF0IGNvZGUgdXAgb24gbXkgc2NyZWVuLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTI4MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY2h1bmsgb2YgdGhlIGNvbnRleHQgLSB3aGF0IGNhbWUgYmVmb3JlLCBhbmQgd2hhdCdzIGNoYW5nZWQgaW4gdGhpcyBzcGVjaWZpYyByZWdpb24gb2YgY29kZS4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgYXJvdW5kIGl0IHRvbywgaW4gY2FzZSB0aGlzIGltcGFjdHMgYW5vdGhlciBhc3BlY3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgY2hhbmdlcyB0aGF0IGFyZSBiZWluZyBtYWRlIGFuZCB3aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjIxLjYyMzY1NzM3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTI1MDpcXHRcXHQgKi9cXG41MjUxOlxcdFxcdGlmICh1bmxpa2VseSghem9uZSkpXFxuNTI1MjpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41MjUzOlxcdFxcbjUyNTQ6XFx0XFx0Lyogc3Bpbl90cnlsb2NrIG1heSBmYWlsIGR1ZSB0byBhIHBhcmFsbGVsIGRyYWluIG9yIElSUSByZWVudHJhbmN5LiAqL1xcbjUyNTU6XFx0XFx0cGNwID0gcGNwX3NwaW5fdHJ5bG9jayh6b25lLVxcdTAwM2VwZXJfY3B1X3BhZ2VzZXQpO1xcbjUyNTY6XFx0XFx0aWYgKCFwY3ApXFxuNTI1NzpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41MjU4OlxcdFxcbjUyNTk6XFx0XFx0LyogQXR0ZW1wdCB0aGUgYmF0Y2ggYWxsb2NhdGlvbiAqL1xcbjUyNjA6XFx0XFx0cGNwX2xpc3QgPSBcXHUwMDI2cGNwLVxcdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcXG41MjYxOlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjUyNjI6XFx0XFxuNTI2MzpcXHRcXHRcXHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXFxuNTI2NDpcXHRcXHRcXHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XFxuNTI2NTpcXHRcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MjY2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUyNjc6XFx0XFx0XFx0fVxcbjUyNjg6XFx0XFxuNTI2OTpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxcbjUyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGNwLCBwY3BfbGlzdCk7XFxuNTI3MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuNTI3MjpcXHRcXHRcXHRcXHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXFxuNTI3MzpcXHRcXHRcXHRcXHRpZiAoIW5yX2FjY291bnQpIHtcXG41Mjc0OlxcdFxcdFxcdFxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyNzU6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTI3NjpcXHRcXHRcXHRcXHR9XFxuNTI3NzpcXHRcXHRcXHRcXHRicmVhaztcXG41Mjc4OlxcdFxcdFxcdH1cXG41Mjc5OlxcdFxcdFxcdG5yX2FjY291bnQrKztcXG41MjgwOlxcdFxcbjUyODE6XFx0XFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbjUyODI6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41MjgzOlxcdFxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxuNTI4NDpcXHRcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XFxuNTI4NTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTI4NjpcXHRcXHR9XFxuNTI4NzpcXHRcXG41Mjg4OlxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyODk6XFx0XFxuNTI5MDpcXHRcXHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xcbjUyOTE6XFx0XFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcXG41MjkyOlxcdFxcbjUyOTM6XFx0b3V0OlxcbjUyOTQ6XFx0XFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcXG41Mjk1OlxcdFxcbjUyOTY6XFx0ZmFpbGVkOlxcbjUyOTc6XFx0XFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xcbjUyOTg6XFx0XFx0aWYgKHBhZ2UpXFxuNTI5OTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTMwMDpcXHRcXHRnb3RvIG91dDtcXG41MzAxOlxcdH1cXG41MzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG41MzAzOlxcdFxcbjUzMDQ6XFx0LypcXG41MzA1OlxcdCAqIGZyZWVfcGFnZXNfYnVsayAtIEZyZWUgYW4gYXJyYXkgb2Ygb3JkZXItMCBwYWdlc1xcbjUzMDY6XFx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcXG41MzA3OlxcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcXG41MzA4OlxcdCAqXFxuNTMwOTpcXHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MjEuNjIzOTQ5MTQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTc5MjE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgQWxsb2NhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoYXQgdGhleSd2ZSBhZGRlZCBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxscyB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgYnVsayBwYWdlIGFsbG9jYXRpb24uIFxuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgdGhlc2UgYWRkaXRpb25zIGFyZSBpc29sYXRlZCB0byB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLCBvciBpZiB0aGV5J3JlIHBhcnQgb2YgYSBicm9hZGVyIHBhdHRlcm4gd2l0aGluIHRoZSBgYWxsb2NfcGFnZXNfYnVsaypgIGZhbWlseS4gSSB3YW50IHRvIGNoZWNrIGBhbGxvY19wYWdlc19idWxrX2FycmF5X21lbXBvbGljeV9ub3Byb2ZgIGFuZCBhbnkgb3RoZXIgdmFyaWF0aW9ucyB0byBzZWUgdGhlIHNjb3BlLiBBcmUgdGhleSBjb25zaXN0ZW50bHkgYmVpbmcgdXNlZD8gTXkgbmV4dCBzdGVwIGlzIHRvIHNlYXJjaCBmb3IgYGFsbG9jX3BhZ2VzX2J1bGtgIGFjcm9zcyBgbW0vcGFnZV9hbGxvYy5jYCwgb3IgcG90ZW50aWFsbHkgdGhlIHdpZGVyIGNvZGViYXNlLCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFyZSBiZWluZyBpbnRlZ3JhdGVkIGFuZCB3aGVyZSBlbHNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzoyMy44NzM3NDU2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyMzYyNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MjMuOTgwOTk1NjEzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0NzcxODk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEJ1bGsgUGFnZSBBbGxvY2F0aW9uIFVzYWdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBidWxrIHBhZ2UgYWxsb2NhdGlvbiBmdW5jdGlvbnMg4oCTIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBpdHMgc2libGluZ3MgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19hcnJheWAgYW5kIGBhbGxvY19wYWdlc19idWxrX2xpc3RgLiBJIGtub3cgdGhleSdyZSBzcHJpbmtsZWQgdGhyb3VnaG91dCBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGtlcm5lbCwgdGhpbmdzIGxpa2UgZHJpdmVycywgbmV0d29yayBzdWJzeXN0ZW1zLCBhbmQgZmlsZXN5c3RlbXMgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiAqd2hvKiBpcyB1c2luZyB0aGVzZSBhbmQgKmhvdyouIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlyZSB1cCBhIGBncmVwYCBhY3Jvc3MgdGhlIGNvZGViYXNlLiBJIHdhbnQgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgYWxsIHRoZSBjYWxsZXJzIG9mIGBhbGxvY19wYWdlc19idWxrYCDigJMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFsbCB2YXJpYW50cy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWQgc3Ryb2tlcyBvZiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGFuZCB3aGF0IHRoZSBjb21tb24gcGF0dGVybnMgYXJlIGluIHRoZWlyIHVzZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFuZHNjYXBlIGJlZm9yZSBJIGRlbHZlIGZ1cnRoZXIgaW50byBzcGVjaWZpYyBpbnN0YW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzoyNS44Mjg3MTgxNThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2ODE3MzQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNC1cXHQgKlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDU6XFx0ICogTm90ZTogYWxsb2NfcGFnZXNfYnVsayBuZWVkcyB0aGUgYXJyYXkgdG8gYmUgemVyb2VkLCBhcyBpdCBhc3N1bWVzXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cXHQgKiBhbnkgbm9uLXplcm8gc2xvdCBhbHJlYWR5IGNvbnRhaW5zIGEgdmFsaWQgYWxsb2NhdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXFx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA5OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTAtXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3NlZ3MpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM9MzE9aW50IGZ3X2lzb19idWZmZXJfYWxsb2Moc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgaW50IHBhZ2VfY291bnQpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDEtXFx0Ly8gY29udmVuaWVuY2UgdG8gbWFwIHRoZW0gaW50byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdXNlciBwcm9jZXNzLlxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiB8IF9fR0ZQX1pFUk8sXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfY291bnQsIHBhZ2VfYXJyYXkpO1xcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM9ODQ4PXN0YXRpYyBpbnQgYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLFxcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVxcdC8vIGFkZHJlc3MgcmFuZ2UgaW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS5cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYzo4NjU6XFx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjYtXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI2LVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgYm8tXFx1MDAzZXBnbnIsIGJvLVxcdTAwM2VwYWdlcyk7XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjgtXFx0LypcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcXHQgKiBhbGxvY19wYWdlc19idWxrKCkgZG9lcyBub3QgdHJ5IHZlcnkgaGFyZCB0byBnZXQgcGFnZXMgdW5kZXIgbWVtb3J5XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MzAtXFx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ2Nj1zdGF0aWMgdm9pZCBmcmVlX3BhZ2VfbGlzdCh1MzIgbnBhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NjktXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjQ3MDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NzEtXFx0Zm9yIChpID0gbnBhZ2VzIC0gMTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDk2PXN0YXRpYyBpbnQgbWx4NXZmX2FkZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKipwYWdlX2xpc3QsIHVuc2lnbmVkIGludCBucGFnZXMpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA2LVxcdGZvciAoOzspIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3OlxcdFxcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBucGFnZXMgLSBkb25lLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXFx0XFx0XFx0XFx0XFx0ICAqcGFnZV9saXN0ICsgZG9uZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTc4LVxcdGRvIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6Nzk6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTgwLVxcdFxcdFxcdFxcdFxcdCAgcGFnZV9saXN0KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz0xMTA9c3RhdGljIHZvaWQgdmlydGlvdmZfZnJlZV9kYXRhX2J1ZmZlcihzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTMtXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjExNDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTUtXFx0Zm9yX2VhY2hfc2d0YWJsZV9wYWdlKFxcdTAwMjZidWYtXFx1MDAzZXRhYmxlLnNndCwgXFx1MDAyNnNnX2l0ZXIsIDApXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xcbi0tXFxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxcbi0tXFxuZnMvZXJvZnMvenV0aWwuYy04OS1cXHRcXHRcXHRsYXN0ID0gajtcXG5mcy9lcm9mcy96dXRpbC5jOjkwOlxcdFxcdFxcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XFxuZnMvZXJvZnMvenV0aWwuYy05MS1cXHRcXHRcXHRpZiAobGFzdCA9PSBqKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XFx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVxcdGlmICghbnJfYWxsb2MpXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxcbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXFx1MDAzZW5jbl9wYWdlcyk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVxcdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcXG4tLVxcbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5mcy9zcGxpY2UuYy0zNDEtXFx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICsgbnBhZ2VzKTtcXG5mcy9zcGxpY2UuYzozNDI6XFx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XFxuZnMvc3BsaWNlLmMtMzQzLVxcdGlmICghbnBhZ2VzKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMi1cXHRcXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIxNj12b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxOS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI1OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcXHRfX2FsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyOTphbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIE5VTEwsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzg6I2RlZmluZSBhbGxvY19wYWdlc19idWxrX25vZGUoLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MC1cXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xOTItXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIE5VTUFfTk9fTk9ERSxcXG5pb191cmluZy9tZW1tYXAuYy0xOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBtci1cXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzMzOlxcdFxcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNC1cXHRcXHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jPTM5MT12bV9tYXBfcmFtX3Rlc3Qodm9pZClcXG4tLVxcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDMtXFxubGliL3Rlc3Rfdm1hbGxvYy5jOjQwNDpcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDUtXFx0aWYgKG5yX2FsbG9jYXRlZCAhPSBtYXBfbnJfcGFnZXMpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz01MT1zdGF0aWMgdm9pZCAqX19pbml0IGlvdl9rdW5pdF9jcmVhdGVfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVxcdFxcdGxhc3QgPSBnb3Q7XFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XFx0XFx0Z290ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTc3Nz1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy03OTMtXFxubW0vYWxsb2NfdGFnLmM6Nzk0OlxcdFxcdFxcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLFxcbm1tL2FsbG9jX3RhZy5jLTc5NS1cXHRcXHRcXHRcXHROVU1BX05PX05PREUsIG1vcmVfcGFnZXMgLSBuciwgbmV4dF9wYWdlICsgbnIpO1xcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9MzI3PXN0YXRpYyB2b2lkIF9fX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zMzgtXFxubW0va2FzYW4vc2hhZG93LmM6MzM5OnN0YXRpYyBpbnQgX19fYWxsb2NfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrKVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDQtXFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxubW0va2FzYW4vc2hhZG93LmM6MzQ1OlxcdFxcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XFxubW0va2FzYW4vc2hhZG93LmMtMzQ2LVxcdFxcdGlmICghbnJfcG9wdWxhdGVkKSB7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zNTc9c3RhdGljIGludCBfX2thc2FuX3BvcHVsYXRlX3ZtYWxsb2NfZG8odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMzY5LVxcdFxcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xcbm1tL2thc2FuL3NoYWRvdy5jOjM3MDpcXHRcXHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XFxubW0va2FzYW4vc2hhZG93LmMtMzcxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNTg5PUVYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9wcm9mKTtcXG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxcbm1tL21lbXBvbGljeS5jOjI1OTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNTkyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MDctXFx0XFx0aWYgKGRlbHRhKSB7XFxubW0vbWVtcG9saWN5LmM6MjYwODpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYwOS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtcG9saWN5LmM6MjYxNDpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYxNS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjI1LVxcbm1tL21lbXBvbGljeS5jOjI2MjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2NjQtXFx0XFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XFxubW0vbWVtcG9saWN5LmM6MjY2NTpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI2NjYtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MDEtXFx0LypcXG5tbS9tZW1wb2xpY3kuYzoyNzAyOlxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbm1tL21lbXBvbGljeS5jLTI3MDMtXFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MjktXFx0XFx0XFx0YnJlYWs7XFxubW0vbWVtcG9saWN5LmM6MjczMDpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI3MzEtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NDMtXFxubW0vbWVtcG9saWN5LmM6Mjc0NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTMtXFxubW0vbWVtcG9saWN5LmM6Mjc1NDpcXHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcXHUwMDI2cG9sLVxcdTAwM2Vub2RlcyxcXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVxcdFxcdFxcdFxcdFxcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTctXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKVxcbm1tL21lbXBvbGljeS5jOjI3NTg6XFx0XFx0bnJfYWxsb2NhdGVkICs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMjc1OS1cXHRcXHRcXHRcXHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NjktICovXFxubW0vbWVtcG9saWN5LmM6Mjc3MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc3MS1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODE6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnAsIHBvbCxcXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODU6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVxcdFxcdFxcdFxcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODgtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxcbm1tL21lbXBvbGljeS5jOjI3ODk6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3OTAtXFx0XFx0XFx0XFx0bnVtYV9ub2RlX2lkKCksIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxcbm1tL3BhZ2VfYWxsb2MuYzo1MTQwOiAqIF9fYWxsb2NfcGFnZXNfYnVsayAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIG9yZGVyLTAgcGFnZXMgdG8gYW4gYXJyYXlcXG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cXG5tbS9wYWdlX2FsbG9jLmM6NTMwMjpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTUzMDMtXFxuLS1cXG5tbS9zbHViLmM9NzQyNj1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzQ3MC0gKlxcbm1tL3NsdWIuYzo3NDcxOiAqIFVubGlrZSBhbGxvY19wYWdlc19idWxrKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGFscmVhZHkgYWxsb2NhdGVkXFxubW0vc2x1Yi5jLTc0NzItICogb2JqZWN0cyBpbiBAcCwgYW5kIHRodXMgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIHplcm8gaXQuXFxuLS1cXG5tbS92bWFsbG9jLmM9MzY3Nj12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNzQzLVxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcXHUwMDI2XFx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxcbm1tL3ZtYWxsb2MuYzozNzQ0OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcXG5tbS92bWFsbG9jLmMtMzc0NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDctXFx0XFx0XFx0ZWxzZVxcbm1tL3ZtYWxsb2MuYzozNzQ4OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcXG5tbS92bWFsbG9jLmMtMzc0OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NjExPXN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjMzLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNDpcXHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFxcXCJlbXB0eVxcXCIgZm9yIGFsbG9jX3BhZ2VzX2J1bGsgKi9cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXFx0bWVtc2V0KFxcdTAwMjZwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzYtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM3OlxcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cXHUwMDNlcC5uaWQsIGJ1bGssXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM4LVxcdFxcdFxcdFxcdFxcdCAoc3RydWN0IHBhZ2UgKiopcG9vbC1cXHUwMDNlYWxsb2MuY2FjaGUpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jPTY4Nz1zdGF0aWMgYm9vbCBzdmNfZmlsbF9wYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cXHRmb3IgKGZpbGxlZCA9IDA7IGZpbGxlZCBcXHUwMDNjIG5wYWdlczsgZmlsbGVkID0gcmV0KSB7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcXHRcXHRyZXQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXFx0XFx0aWYgKHJldCBcXHUwMDNlIGZpbGxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MjguNTk2ODk5NTU3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMTk5NTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBBbGxvY2F0aW9uIElzc3VlKipcblxuT2theSwgaGVyZSdzIHRoZSBzaXR1YXRpb246IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhIHBvc3NpYmxlIG9taXNzaW9uLiBJdCBzZWVtcyB0aGF0IHRoZSBmYXN0IHBhdGggd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgaXMgbWlzc2luZyBjcnVjaWFsIGNhbGxzIHRvIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIHdoZW4gaXQncyBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUC4gVGhhdCdzIGEgcG90ZW50aWFsIG92ZXJzaWdodCBJIG5lZWQgdG8gYWRkcmVzcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBpbnZvbHZlZCBpbiB0aGUgb3ZlcmFsbCBhbGxvY2F0aW9uIHByb2Nlc3MsIGFuZCBhbHNvIHRvIGNoZWNrIGBwb3N0X2FsbG9jX2hvb2tgIGluIHRoZSBzYW1lIGZpbGUsIGFzIGl0IG1heSBiZSB3aGVyZSB0aG9zZSBtaXNzZWQgY2FsbHMgc2hvdWxkIGhhdmUgZ29uZS5cblxuVG8gdW5kZXJzdGFuZCB0aGUgY29ycmVjdCB1c2FnZSwgSSBuZWVkIHRvIHNlZSB3aGVyZSBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhcmUgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gSSBuZWVkIHRoYXQgY29udGV4dCB0byBzZWUgaG93IHRvIHByb3Blcmx5IGludGVncmF0ZSB0aGVtIGludG8gdGhlIGZhc3QtcGF0aCBsb29wIG9mIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHNvIHRoYXQgdGhlIHBhZ2UgYWxsb2NhdGlvbiBpcyBpbnN0cnVtZW50ZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzozMC44MDg5MDIzNjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzk3Njk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0OlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTI4NS1cXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXFxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XFxubW0vcGFnZV9hbGxvYy5jLTUzNzItICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3JcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MjpcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzozMS4xNDI4OTk2MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzMDYyODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2g6IFdvcnRoRnV6emluZz8qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGttc2FuX2FsbG9jX3BhZ2VgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYXJlIG5vdyBjYWxsZWQgaW4gYm90aCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCAqYW5kKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKj8gSSBrbm93IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGBtbS9wYWdlX2FsbG9jLmNgLCBpcyB1c2VkIGJ5IGEgdG9uIG9mIHN0dWZmIOKAkyBzcGxpY2UsIGJ0cmZzLCBwYWdlX3Bvb2wsIGlvX3VyaW5nLCBmdXNlLCB0aGUgd29ya3MuIFNvLCB5ZWFoLCBpdCdzIGRlZmluaXRlbHkgaW4gdGhlIGNyaXRpY2FsIHBhdGguXG5cbkFscmlnaHQsIGxldCdzIGNvbnN1bHQgdGhlIFwiV29ydGhGdXp6aW5nXCIgY3JpdGVyaWEuIE1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgaW4gYG1tL2AgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QsIGFsb25nIHdpdGggbG9ja2luZywgQlBGLCBzY2hlZHVsaW5nLCBuZXR3b3JraW5nLCBWRlMsIHN5c2NhbGxzLiBZdXAsIGFueSBsb2dpYyBtb2RzIHRoZXJlIGFyZSBmYWlyIGdhbWUuXG5cbkJ1dCB3YWl0LCB3aGF0ICppc24ndCogd29ydGggZnV6emluZz8gRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHVzZXItc3BhY2Ugc3R1ZmYsIGRlY29yYXRpdmUgbG9nZ2luZyBvciB0cmFjZXBvaW50cyB0aGF0IGRvbid0IGFsdGVyIGNvbnRyb2wgZmxvdy4gQnVpbGQgc3lzdGVtIGNoYW5nZXMgdG9vLlxuXG5Ob3csIHRoaXMgcGF0Y2ggYWRkZWQgYSBjb3VwbGUgb2YgdGhpbmdzOiBhIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCB0cmFjZXBvaW50IGFuZCBhIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsLiBUaGF0IGB0cmFjZXBvaW50YCBpcyBwcm9iYWJseSBqdXN0IGxvZ2dpbmcsIGJ1dCB0aGF0IGBrbXNhbl9hbGxvY19wYWdlYC4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIERvZXMgdGhhdCBob29rIGludG8gS01TQU4gYW5kIG1lc3Mgd2l0aCBzaGFkb3cgbWVtb3J5IG9yIHRoZSBLTVNBTiBzdGF0ZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlYCB0byBiZSBzdXJlLiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MzQuNTczNTMyNzk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI0OTU4MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttc2FuX2FsbG9jX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rbXNhbi5oPTU3PWJvb2wgX19pbml0IF9fbXVzdF9jaGVjayBrbXNhbl9tZW1ibG9ja19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYwLS8qKlxcbmluY2x1ZGUvbGludXgva21zYW4uaDo2MTogKiBrbXNhbl9hbGxvY19wYWdlKCkgLSBOb3RpZnkgS01TQU4gYWJvdXQgYW4gYWxsb2NfcGFnZXMoKSBjYWxsLlxcbmluY2x1ZGUvbGludXgva21zYW4uaC02Mi0gKiBAcGFnZTogIHN0cnVjdCBwYWdlIHBvaW50ZXIgcmV0dXJuZWQgYnkgYWxsb2NfcGFnZXMoKS5cXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC02OC0gKi9cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6Njk6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNzAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl90YXNrX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMxOC1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6MzE5OnN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMyMC1cXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9rbXNhbi9zaGFkb3cuYz0xNjk9RVhQT1JUX1NZTUJPTChrbXNhbl9jb3B5X3BhZ2VfbWV0YSk7XFxubW0va21zYW4vc2hhZG93LmMtMTcwLVxcbm1tL2ttc2FuL3NoYWRvdy5jOjE3MTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXFxubW0va21zYW4vc2hhZG93LmMtMTcyLXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxubW0vcGFnZV9hbGxvYy5jOjUyODQ6XFx0XFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzNzAtICpcXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcXG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NDYxLVxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjM2Ljc5ODUwMDczNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc4NTI1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGttc2FuX2FsbG9jX3BhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IGBrbXNhbl9hbGxvY19wYWdlYCB3aXRoaW4gYG1tL2ttc2FuL3NoYWRvdy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBraW5kIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIEtNU0FOIGVtcGxveWluZyBmb3IgaXRzIHNoYWRvdyBtZW1vcnk/XCIgSSBrbm93IHRoZSBjb3JlIG9mIEtBU0FOL0tNU0FOIHJlbGllcyBvbiBzaGFkb3dpbmcgcmVndWxhciBtZW1vcnksIHNvIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwuIElzIGl0IGEgc3RyYWlnaHRmb3J3YXJkIGBhbGxvY19wYWdlKClgIGNhbGwsIG9yIGFyZSB0aGV5IGRvaW5nIHNvbWV0aGluZyBjbGV2ZXIgbGlrZSBhbGxvY2F0aW5nIGNvbnRpZ3VvdXMgYmxvY2tzIGFuZCBtYW5hZ2luZyB0aGVtIGludGVybmFsbHkgdG8gb3B0aW1pemUgZm9yIGFjY2VzcyBwYXR0ZXJucz8gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY3VzdG9tIGxvZ2ljIHRvIGFsaWduIGFsbG9jYXRpb25zIGZvciBlZmZpY2llbnQgc2hhZG93IG1hcHBpbmcsIG9yIHBlcmhhcHMgdGhleSdyZSB0YWtpbmcgYWR2YW50YWdlIG9mIHNvbWUgTlVNQSBhd2FyZW5lc3MgaWYgaXQncyByZWxldmFudCBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBzaGFkb3cgbWFwcGluZyBpcyBkb25lIC0gd2hhdCdzIHRoZSBncmFudWxhciBtYXBwaW5nIGFuZCBsb29rdXAgc3RyYXRlZ3ksIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIHZpcnR1YWwgYWRkcmVzcyByZWdpb25zLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIHRhYmxlIGVudHJpZXMuIFRoZSBnb2FsLCBvZiBjb3Vyc2UsIGlzIHRvIG1pbmltaXplIG92ZXJoZWFkLiBTbyBJJ20gaW50ZXJlc3RlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFkZW9mZnM6IG1lbW9yeSBmb290cHJpbnQsIGFsbG9jYXRpb24gc3BlZWQsIGFuZCB0aGUgY29tcGxleGl0eSBvZiB0aGUgaW50ZXJuYWwgYm9va2tlZXBpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVndWxhciBgYWxsb2NfcGFnZWAgYW5kIGBmcmVlX3BhZ2VgIHN5c3RlbSBjYWxscyB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGN1c3RvbSBtYW5hZ2VtZW50IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjM5LjA3NzAyODcwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rbXNhbi9zaGFkb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFxuIDE3MTpcXHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXFxuIDE3MjpcXHR7XFxuIDE3MzpcXHRcXHRib29sIGluaXRpYWxpemVkID0gKGZsYWdzIFxcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XFxuIDE3NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xcbiAxNzU6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiAxNzY6XFx0XFx0aW50IHBhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0aWYgKCFwYWdlKVxcbiAxNzk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRzaGFkb3cgPSBzaGFkb3dfcGFnZV9mb3IocGFnZSk7XFxuIDE4MjpcXHRcXHRvcmlnaW4gPSBvcmlnaW5fcGFnZV9mb3IocGFnZSk7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdGlmIChpbml0aWFsaXplZCkge1xcbiAxODU6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg2OlxcdFxcdFxcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhvcmlnaW4pLCAwLCBQQUdFX1NJWkUgKiBwYWdlcyk7XFxuIDE4NzpcXHRcXHRcXHRyZXR1cm47XFxuIDE4ODpcXHRcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdC8qIFplcm8gcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBydW50aW1lIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLiAqL1xcbiAxOTE6XFx0XFx0aWYgKGttc2FuX2luX3J1bnRpbWUoKSlcXG4gMTkyOlxcdFxcdFxcdHJldHVybjtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIC0xLCBQQUdFX1NJWkUgKiBwYWdlcyk7XFxuIDE5NTpcXHRcXHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XFxuIDE5NjpcXHRcXHRoYW5kbGUgPSBrbXNhbl9zYXZlX3N0YWNrX3dpdGhfZmxhZ3MoZmxhZ3MsIC8qZXh0cmFfYml0cyovIDApO1xcbiAxOTc6XFx0XFx0a21zYW5fbGVhdmVfcnVudGltZSgpO1xcbiAxOTg6XFx0XFx0LypcXG4gMTk5OlxcdFxcdCAqIEFkZHJlc3NlcyBhcmUgcGFnZS1hbGlnbmVkLCBwYWdlcyBhcmUgY29udGlndW91cywgc28gaXQncyBva1xcbiAyMDA6XFx0XFx0ICogdG8ganVzdCBmaWxsIHRoZSBvcmlnaW4gcGFnZXMgd2l0aCBAaGFuZGxlLlxcbiAyMDE6XFx0XFx0ICovXFxuIDIwMjpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFBBR0VfU0laRSAqIHBhZ2VzIC8gc2l6ZW9mKGhhbmRsZSk7IGkrKylcXG4gMjAzOlxcdFxcdFxcdCgoZGVwb3Rfc3RhY2tfaGFuZGxlX3QgKilwYWdlX2FkZHJlc3Mob3JpZ2luKSlbaV0gPSBoYW5kbGU7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdHZvaWQga21zYW5fZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIDIwNzpcXHR7XFxuIDIwODpcXHRcXHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxcbiAyMDk6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzozOS4wNzcxMTU1MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU1OTYyOTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2FzIG1pc3NpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIGNhbGxzIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmcm9tIHRoZSBidWxrIGFsbG9jYXRvci4gVGhpcyBvdmVyc2lnaHQgcG90ZW50aWFsbHkgbGVhZHMgdG8gaW5jb25zaXN0ZW50IEtNU0FOIHJlcG9ydHMgZHVlIHRvIGltcHJvcGVyIHNoYWRvdyBhbmQgb3JpZ2luIHBhZ2UgaW5pdGlhbGl6YXRpb24uIEZ1cnRoZXJtb3JlLCBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgaXMgYWRkZWQgZm9yIHRyYWNpbmcgdGhlc2UgYnVsayBwYWdlIGFsbG9jYXRpb25zLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIGNyaXRlcmlhLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGFueSBtb2RpZmljYXRpb25zIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCBhcmUgZ2VuZXJhbGx5IGhpZ2gtcHJpb3JpdHkuXG5cblRoZSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgdWJpcXVpdG91cyBob3QgcGF0aCB0aGF0IHNob3VsZCBiZSBhdm9pZGVkLiBUaGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgd2FybnMgYWdhaW5zdCBsaXN0aW5nIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvcnMuIEhvd2V2ZXIsIHVwb24gaW5zcGVjdGlvbiwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBub3QgYSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3IgbGlrZSBgX19hbGxvY19wYWdlc19ub3Byb2ZgLCBga21hbGxvY2AsIG9yIGBrZnJlZWAuIEl0J3MgKnNwZWNpZmljYWxseSogY2FsbGVkIGJ5IHN1YnN5c3RlbXMgbGlrZSBgc3BsaWNlYCwgYGlvX3VyaW5nYCwgYHZtYWxsb2NgLCBhbmQgZmlsZXN5c3RlbXMgbGlrZSBgYnRyZnNgLiBUaGlzIG1ha2VzIGl0IGEgKnNwZWNpZmljKiBzeW1ib2wuIFRoZSBkaWZmIG9ubHkgbW9kaWZpZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc29saWRpZnlpbmcgaXRzIGltcG9ydGFuY2UuXG5cblJlZ2FyZGluZyBLY29uZmlnIG9wdGlvbnMsIGBrbXNhbl9hbGxvY19wYWdlYCdzIGxvZ2ljIGlzIG9ubHkgYWN0aXZlIHdoZW4gYEtNU0FOYCBpcyBlbmFibGVkLCB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLiBXaGVuIEtNU0FOIGlzIGRpc2FibGVkLCBpdCdzIGp1c3QgYSBuby1vcCBzdGF0aWMgaW5saW5lLiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyBhbHdheXMgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiBLTVNBTiBjb25maWd1cmF0aW9uLiBFdmVuIHdoZW4gS01TQU4gaXMgb2ZmLCBmdXp6aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgdXNlZnVsLCB0aG91Z2ggYEtNU0FOYCBpdHNlbGYgaXMgcmVsZXZhbnQgZm9yIGFjdHVhbCBLTVNBTiBsb2dpYyBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTkzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjQ0LjYzNjc1NDQxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNzM3NjM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS01TQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2FzYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjQ0Ljc5MDUwNjU5OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTY2NzgwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRmluZGluZyB0aGUgS01TQU4gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gbG9jYXRlIHRoZSBjb25maWd1cmF0aW9uIGZvciBLTVNBTi4gVGhhdCdzIHRoZSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdy4gTm8gbmVlZCBmb3IgYW55IHByZWFtYmxlIG9yIGZsdWZmOyBkaXJlY3RseSB0byB0aGUgb2JqZWN0aXZlOiBmaW5kIHRoZSByZWxldmFudCBLTVNBTiBjb25maWd1cmF0aW9uLiBJdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBzbyBsZXQncyBnZXQgYWZ0ZXIgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTE2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1Mzo0Ny43NTcyOTA4ODlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODIwMTY4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtNU0FOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmttc2FuPTU9Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTctXFxubGliL0tjb25maWcua21zYW46ODpjb25maWcgS01TQU5cXG5saWIvS2NvbmZpZy5rbXNhbi05LVxcdGJvb2wgXFxcIktNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbj0yNj1pZiBLTVNBTlxcbmxpYi9LY29uZmlnLmttc2FuLTI3LVxcbmxpYi9LY29uZmlnLmttc2FuOjI4OmNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcXG5saWIvS2NvbmZpZy5rbXNhbi0yOS1cXHRib29sIFxcXCJDaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uc1xcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTQxLVxcbmxpYi9LY29uZmlnLmttc2FuOjQyOmNvbmZpZyBLTVNBTl9LVU5JVF9URVNUXFxubGliL0tjb25maWcua21zYW4tNDMtXFx0dHJpc3RhdGUgXFxcIktNU0FOIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6NDkuNzM5MzE2NDkzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzA1MTg4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgS01TQU4gRGVwZW5kZW5jaWVzIGluIHRoZSBLY29uZmlnKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZvciBLTVNBTi4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBLTVNBTidzIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHRvIGBsaWIvS2NvbmZpZy5rbXNhbmAuIEkgc3VzcGVjdCB0aGlzIGZpbGUgY29udGFpbnMgdGhlIGNydWNpYWwgYGNvbmZpZ2Agb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiBLTVNBTiBhbmQgbGlrZWx5IGl0cyBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJIGFudGljaXBhdGUgZmluZGluZyBjb25kaXRpb25hbHMgdGhlcmUgdGhhdCBkZXRlcm1pbmUgd2hlbiB0aGUgS01TQU4gY29kZSBhbmQgaW5zdHJ1bWVudGF0aW9uIGFyZSBjb21waWxlZCwgcG90ZW50aWFsbHkgYmFzZWQgb24gb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhcmNoaXRlY3R1cmUgc3BlY2lmaWNzLCBvciBldmVuIGNvbXBpbGUtdGltZSBmbGFncyB0aGF0IG1heSBiZSByZWxldmFudCB0byB0ZXN0aW5nIGVudmlyb25tZW50cywgc3VjaCBhcyBgLWZzYW5pdGl6ZT1rbXNhbmAuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGludGltYXRlbHkgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIGludGVncmF0aW9uLCB0cm91Ymxlc2hvb3RpbmcsIGFuZCBvcHRpbWl6YXRpb24gb2YgdGhlIEtNU0FOIGJ1aWxkIHByb2Nlc3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY3VzdG9tIGtlcm5lbCBidWlsZHMgb3Igc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIEknbSBsb29raW5nIGZvciB0aGUga2V5IHZhcmlhYmxlcyB0byBlbnN1cmUgSSdtIGdldHRpbmcgYSBjbGVhbiBhbmQgY29ycmVjdCBLTVNBTiBidWlsZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGBLY29uZmlnYCBoYXMgdG8gdGVsbCB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1Mzo1Mi4yMDk4NDAyMzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcua21zYW5cIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBIQVZFX0FSQ0hfS01TQU5cXG4gICAzOlxcdFxcdGJvb2xcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcXG4gICA2OlxcdFxcdGRlZl9ib29sICQoY2Mtb3B0aW9uLC1mc2FuaXRpemU9a2VybmVsLW1lbW9yeSlcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIEtNU0FOXFxuICAgOTpcXHRcXHRib29sIFxcXCJLTVNBTjogZGV0ZWN0b3Igb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMgdXNlXFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfS01TQU4gXFx1MDAyNlxcdTAwMjYgSEFWRV9LTVNBTl9DT01QSUxFUlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgIUtBU0FOIFxcdTAwMjZcXHUwMDI2ICFLQ1NBTlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiAhUFJFRU1QVF9SVFxcbiAgMTM6XFx0XFx0c2VsZWN0IFNUQUNLREVQT1RcXG4gIDE0OlxcdFxcdHNlbGVjdCBTVEFDS0RFUE9UX0FMV0FZU19JTklUXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIEtlcm5lbE1lbW9yeVNhbml0aXplciAoS01TQU4pIGlzIGEgZHluYW1pYyBkZXRlY3RvciBvZiB1c2VzIG9mXFxuICAxNzpcXHRcXHQgIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIHRoZSBrZXJuZWwuIEl0IGlzIGJhc2VkIG9uIGNvbXBpbGVyXFxuICAxODpcXHRcXHQgIGluc3RydW1lbnRhdGlvbiBwcm92aWRlZCBieSBDbGFuZyBhbmQgdGh1cyByZXF1aXJlcyBDbGFuZyB0byBidWlsZC5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBBbiBpbXBvcnRhbnQgbm90ZSBpcyB0aGF0IEtNU0FOIGlzIG5vdCBpbnRlbmRlZCBmb3IgcHJvZHVjdGlvbiB1c2UsXFxuICAyMTpcXHRcXHQgIGJlY2F1c2UgaXQgZHJhc3RpY2FsbHkgaW5jcmVhc2VzIGtlcm5lbCBtZW1vcnkgZm9vdHByaW50IGFuZCBzbG93c1xcbiAgMjI6XFx0XFx0ICB0aGUgd2hvbGUgc3lzdGVtIGRvd24uXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttc2FuLnJzdFxcdTAwM2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0aWYgS01TQU5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIEtNU0FOX0NIRUNLX1BBUkFNX1JFVFZBTFxcbiAgMjk6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnNcXFwiXFxuICAzMDpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6NTIuMjA5OTI3NTU1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0ODA0OTQwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG9wdGltYWwgZnV6emluZyBjb25maWd1cmF0aW9uIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBJIHNlZSB0aGF0IGBLTVNBTmAgaXMgZmxhZ2dlZCBhcyBhIHJlbGV2YW50IGNvbmZpZy4gQnV0IEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgKnN0cmljdGx5KiByZXF1aXJlZCBmb3IgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gQWZ0ZXIgYWxsLCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGNvcmUga2VybmVsIGNvZGUgYW5kIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseS4gRW5hYmxpbmcgYEtNU0FOYCBjbGVhcmx5IGFjdGl2YXRlcyB0aGUgbmV3IGBrbXNhbl9hbGxvY19wYWdlKClgIHBhdGgsIHdoaWNoIGlzIGltcG9ydGFudCwgYnV0IGlzIGl0IHRoZSAqb25seSogcGF0aCB0byBjb25zaWRlcj9cblxuQWxyaWdodCwgbmV4dCwgYEZvY3VzU3ltYm9sc2AuIExldCBtZSBjb25maXJtOiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgICppcyogdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCB0aGF0J3MgY29ycmVjdC4gTm93LCB3aGF0IGFyZSB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIGNhbGxlcnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgc2VlIGEgbGlzdDogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYGNvcHlfc3BsaWNlX3JlYWRgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYC4gRm9jdXNpbmcgZGlyZWN0bHkgb24gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBzaG91bGQgaW5kZWVkIGJlIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhpcyBidWxrIGFsbG9jYXRpb24gcGF0aC5cblxuTm93LCBsZXQncyBjYXJlZnVsbHkgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgcHJvdmlkZWQgdG8gZW5zdXJlIEkgYW0gaW50ZXJwcmV0aW5nIHRoaW5ncyBjb3JyZWN0bHk6XG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4gRXhjZWxsZW50LiBUaGlzIGNvbmZpcm1zIG15IGludHVpdGlvbjsgd2UncmUgZGVhbGluZyB3aXRoIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIHRoZXJlJ3MgYmVlbiBhIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgS01TQU5gIGluc3RydW1lbnRhdGlvbiBhbmQgYSB0cmFjZXBvaW50LiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIl1gLiBDb25maXJtZWQuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiS01TQU5cIl1gIChvciBlbXB0eS9LTVNBTikuIFllcywgYEtNU0FOYCBpcyBuZWNlc3NhcnksIG9yIGFuIGVtcHR5IGNvbmZpZywgd2hpY2gsIGFzIEkgdW5kZXJzdGFuZCwgd2lsbCB1c2UgS01TQU4gdG8gZXhlcmNpc2UgYGttc2FuX2FsbG9jX3BhZ2VgLlxuKiAgIGBSZWFzb25pbmdgOiBUaGlzIG1ha2VzIHNlbnNlLiBUaGUgcmVhc29uaW5nIGV4cGxhaW5zIHRoZSBjb250ZXh0IGNsZWFybHk6IHdlIGFyZSBmdXp6aW5nIGR1ZSB0byB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gbW9kaWZpY2F0aW9uIHdpdGggYEtNU0FOYCBpbnN0cnVtZW50YXRpb24sIHRhcmdldGluZyB0aGUgYnVsayBwYWdlIGFsbG9jYXRpb24gcGF0aC5cblxuT2theSwgSSd2ZSBkb3VibGUtY2hlY2tlZCBldmVyeXRoaW5nLiBJJ20gcmVhZHkgdG8gcHJvY2VlZC4gSSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGFyZ2V0LCB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHRoZSByYXRpb25hbGUuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5MiwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1Mzo1Ni42OTA0MjY1MjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwNTcyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktNU0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBwcm9wZXJseSBpbnZva2UgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGFuZCBrbXNhbl9hbGxvY19wYWdlKCkgZm9yIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIHBlci1jcHUgcGFnZSBhbGxvY2F0b3IuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLTVNBTiB0cmFja2luZyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBhbGxvY19wYWdlc19idWxrX25vcHJvZiBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gcHJvcGVybHkgaW52b2tlIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBhbmQga21zYW5fYWxsb2NfcGFnZSgpIGZvciBwYWdlcyBhbGxvY2F0ZWQgdmlhIHRoZSBwZXItY3B1IHBhZ2UgYWxsb2NhdG9yLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS01TQU4gdHJhY2tpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjU2Ljc5NDQ5OTI4OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4MjM2ODEzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1Mzo1Ni43OTUxODk5ODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzgyMjk4NDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXFxuXFxuS01TQU4gdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0dXMgb2YgcGFnZSBhbGxvY2F0aW9ucyBieSBtYXJraW5nIG5vbi1gX19HRlBfWkVST2AgcGFnZXMgd2l0aCB1bmluaXRpYWxpemVkIHNoYWRvdyBhbmQgY3JlYXRpbmcgYWxsb2NhdGlvbiBvcmlnaW5zLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZWAgLyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgKSBieXBhc3NlZCBLTVNBTiB0cmFja2luZywgbGVhdmluZyBLTVNBTiBibGluZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3JpZ2luYXRpbmcgZnJvbSBidWxrLWFsbG9jYXRlZCBwYWdlcyAod2hpY2ggYXJlIHdpZGVseSB1c2VkIGFjcm9zcyB2bWFsbG9jLCBwYWdlIHBvb2wgLyBuZXR3b3JrIGRyaXZlcnMsIHNwbGljZSwgYnRyZnMsIGZ1c2UsIGFuZCBicGYpLlxcblxcblN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4gb25seSBtb25pdG9yIG1lbW9yeSBhY2Nlc3NpYmlsaXR5IChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFuZCBjYW5ub3QgZGV0ZWN0IHJlYWRzIG9yIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIGp1c3RpZmllZCB0byB2YWxpZGF0ZSB0aGUgS01TQU4gaG9vayBhbmQgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgZXhwb3NlZCBhY3Jvc3MgYWxsIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGNhbGwgc2l0ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTc5NDNmNjY0NjVlOGFkYjYzY2ZiMmYxYzk1N2U3MGE5ZTI2ZTJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMzo1MzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uMDJiYTE5ZjZkYmI1OSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTI4MCw2ICs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4rXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG4rXHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcbiBcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6NTYuNzk1MTkxMzk4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNzMxMjU3OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIEtNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBkZWRpY2F0aW5nIHNvbWUgS01TQU4gZnV6emluZyB0aW1lIHRvIGl0LiBJIHNlZSB0aGV5J3ZlIGFkZGVkIGEgZmV3IGxpbmVzIHRvIGBtbS9wYWdlX2FsbG9jLmNgIGFyb3VuZCBsaW5lIDUyODAuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIG5ldyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgYml0IGJldHRlciB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QuXG5cbkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBhcm91bmQgdGhhdCBhcmVhIGluIGBtbS9wYWdlX2FsbG9jLmNgIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgaW4gYnVsaywgd2hpY2ggY291bGQgYmUgYSBob3Qgc3BvdCBmb3IgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBUaGUgYWRkaXRpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHRoZSBrZXkgdGhpbmcsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2hlY2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLCBwZXJoYXBzPyBPciBpcyBpdCBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZD8gSWYgaXQncyBhIG5ldyBjaGVjaywgdGhlbiB0aGF0IG1ha2VzIGl0IGludGVyZXN0aW5nIHRvIHRlc3QuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhpcyBwYXRoIHdpdGggS01TQU4gZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjA3LjUyNjQ1NDU0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0XFx0cGNwX2xpc3QgPSBcXHUwMDI2cGNwLVxcdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcXG41MjYxOlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjUyNjI6XFx0XFxuNTI2MzpcXHRcXHRcXHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXFxuNTI2NDpcXHRcXHRcXHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XFxuNTI2NTpcXHRcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MjY2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUyNjc6XFx0XFx0XFx0fVxcbjUyNjg6XFx0XFxuNTI2OTpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxcbjUyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGNwLCBwY3BfbGlzdCk7XFxuNTI3MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuNTI3MjpcXHRcXHRcXHRcXHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXFxuNTI3MzpcXHRcXHRcXHRcXHRpZiAoIW5yX2FjY291bnQpIHtcXG41Mjc0OlxcdFxcdFxcdFxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyNzU6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTI3NjpcXHRcXHRcXHRcXHR9XFxuNTI3NzpcXHRcXHRcXHRcXHRicmVhaztcXG41Mjc4OlxcdFxcdFxcdH1cXG41Mjc5OlxcdFxcdFxcdG5yX2FjY291bnQrKztcXG41MjgwOlxcdFxcbjUyODE6XFx0XFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbjUyODI6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41MjgzOlxcdFxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxuNTI4NDpcXHRcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XFxuNTI4NTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTI4NjpcXHRcXHR9XFxuNTI4NzpcXHRcXG41Mjg4OlxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyODk6XFx0XFxuNTI5MDpcXHRcXHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xcbjUyOTE6XFx0XFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcXG41MjkyOlxcdFxcbjUyOTM6XFx0b3V0OlxcbjUyOTQ6XFx0XFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcXG41Mjk1OlxcdFxcbjUyOTY6XFx0ZmFpbGVkOlxcbjUyOTc6XFx0XFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xcbjUyOTg6XFx0XFx0aWYgKHBhZ2UpXFxuNTI5OTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTMwMDpcXHRcXHRnb3RvIG91dDtcXG41MzAxOlxcdH1cXG41MzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG41MzAzOlxcdFxcbjUzMDQ6XFx0LypcXG41MzA1OlxcdCAqIGZyZWVfcGFnZXNfYnVsayAtIEZyZWUgYW4gYXJyYXkgb2Ygb3JkZXItMCBwYWdlc1xcbjUzMDY6XFx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcXG41MzA3OlxcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcXG41MzA4OlxcdCAqXFxuNTMwOTpcXHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTQ6MDcuNTI3MzA3NjAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTA4MzE5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWxrIFBhZ2UgQWxsb2NhdG9yIElzc3VlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBJJ3ZlIGlkZW50aWZpZWQgYSBwb3RlbnRpYWwgZ2FwIGluIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yJ3MgZmFzdCBwYXRoIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdGhlIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIGZ1bmN0aW9uIGFuZCB0aGUgYHRyYWNlX21tX3BhZ2VfYWxsb2MoLi4uKWAgY2FsbHMsIHdoaWNoIGFyZSBjcnVjaWFsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCB0cmFjaW5nLCB3ZXJlIG9taXR0ZWQgd2hlbiBoYW5kbGluZyBwYWdlcyByZXRyaWV2ZWQgZnJvbSB0aGUgcGVyLUNQVSBwYWdlIGxpc3QgKHRoZSBQQ1AgbGlzdCkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBob3cgZG9lcyB0aGlzIGFmZmVjdCB0aGUgS01TQU4gYmVoYXZpb3I/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25zZXF1ZW5jZXMgdGhlcmUgYXJlIHdoZW4gYGttc2FuX2FsbG9jX3BhZ2VgICppcyogY2FsbGVkIHZlcnN1cyB3aGVuIGl0ICppc24ndCouIFRoZSBLTVNBTiBpbnRlZ3JhdGlvbiBpcyBjcml0aWNhbCwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdmVyaWZ5IGhvdyB0aGlzIG92ZXJzaWdodCBjaGFuZ2VzIHRoZSBleHBlY3RlZCBtZW1vcnkgYmVoYXZpb3IuIEl0J3MgdGltZSB0byBkaXZlIGludG8gYGttc2FuX2FsbG9jX3BhZ2VgIGFuZCBhc3Nlc3MgdGhlIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjA5LjczODE0NDgxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1ODMwNjU0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva21zYW4uaD01Nz1ib29sIF9faW5pdCBfX211c3RfY2hlY2sga21zYW5fbWVtYmxvY2tfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6NjE6ICoga21zYW5fYWxsb2NfcGFnZSgpIC0gTm90aWZ5IEtNU0FOIGFib3V0IGFuIGFsbG9jX3BhZ2VzKCkgY2FsbC5cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjgtICovXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMTgtXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGZsYWdzKVxcbi0tXFxubW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cXG5tbS9rbXNhbi9zaGFkb3cuYzoxNzE6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0OlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTI4NS1cXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXFxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XFxubW0vcGFnZV9hbGxvYy5jLTUzNzItICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3JcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MjpcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1NDoxMS42OTY0NjM0NzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4MzgxNjUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU2hhZG93IFJBTSDigJMgTGluZSAxNzEqKlxuXG5Pa2F5LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzIGlzc3VlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgbW0va21zYW4vc2hhZG93LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTcxLiBNeSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHNvbWV0aGluZyBpcyBhbWlzcyBpbiB0aGUgc2hhZG93IG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgdGhhdCBzZWN0aW9uIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEknbSBhc3N1bWluZyB0aGVyZSdzIHBvdGVudGlhbGx5IGFuIGlzc3VlIHdpdGggaG93IEtNU0FOIGlzIG1hcHBpbmcgb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc2hhZG93IG1lbW9yeSByZWdpb25zLiBNYXliZSBhIHJhY2UgY29uZGl0aW9uLCBhIG1pc2NhbGN1bGF0aW9uIGluIHRoZSBvZmZzZXQsIG9yIGEgcHJvYmxlbSB3aXRoIHRoZSBncmFudWxhcml0eSBvZiB0aGUgc2hhZG93IFJBTSBtYXBwaW5nPyBMZXQncyBjaGVjayB0aGVyZSBhbmQgc2VlIGlmIG15IGh1bmNoIGhvbGRzIGFueSB3YXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjEzLjQ4MDI4NDE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcXG4gMTc0OlxcdFxcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XFxuIDE3NTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDE3NjpcXHRcXHRpbnQgcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoIXBhZ2UpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm47XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcXG4gMTgyOlxcdFxcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKGluaXRpYWxpemVkKSB7XFxuIDE4NTpcXHRcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xcbiAxODY6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg3OlxcdFxcdFxcdHJldHVybjtcXG4gMTg4OlxcdFxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXFxuIDE5MTpcXHRcXHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcXG4gMTk2OlxcdFxcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XFxuIDE5NzpcXHRcXHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XFxuIDE5ODpcXHRcXHQvKlxcbiAxOTk6XFx0XFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCdzIG9rXFxuIDIwMDpcXHRcXHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXFxuIDIwMTpcXHRcXHQgKi9cXG4gMjAyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSsrKVxcbiAyMDM6XFx0XFx0XFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcXG4gMjA0OlxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMjA3OlxcdHtcXG4gMjA4OlxcdFxcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjEzLjQ4MDM4NDIxMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjgwNTE0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIE5lZWRzIENvbnNpZGVyYXRpb24gZm9yIEJ1bGsgUGFnZSBBbGxvY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgY3J1Y2lhbCBvdmVyc2lnaHQgaW4gaG93IEtNU0FOIGhhbmRsZXMgYnVsayBwYWdlIGFsbG9jYXRpb25zIHZpYSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBQcmV2aW91c2x5LCBga21zYW5fYWxsb2NfcGFnZSgpYCB3YXMgbWlzc2luZyBmcm9tIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHBhdGgsIG1lYW5pbmcgS01TQU4gY291bGRuJ3QgcHJvcGVybHkgdHJhY2sgdGhlIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBwYWdlcyBhbGxvY2F0ZWQgaW4gYnVsay4gVGhpcyBtZWFudCB0aGF0IG1lbW9yeSBhbGxvY2F0ZWQgd2l0aG91dCBgX19HRlBfWkVST2AgdmlhIGBhbGxvY19wYWdlc19idWxrYCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIHN0YWxlIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aGF0IEtNU0FOIHdvdWxkbid0IGNhdGNoLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKWAgaXMgYmVpbmcgYWRkZWQsIGFuZCB0aGF0J3MgdGhlIGNvcmUgb2YgaXQuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IEtNU0FOIHdpbGwgbm93IGFjdGl2ZWx5IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBwYWdlcyBhbGxvY2F0ZWQgdGhyb3VnaCB0aGUgYnVsayBwYWdlIGFsbG9jYXRvci4gVGhpcyBpcyBhIGdhbWUtY2hhbmdlciBiZWNhdXNlIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgIOKAkyB0aGluZ3MgbGlrZSBuZXR3b3JrIGRyaXZlcnMsIHBhZ2UgY2FjaGUgcmVhZGFoZWFkLCBhbmQgb3RoZXIgY3JpdGljYWwgY29tcG9uZW50cyDigJMgY2FuIG5vdyBiZSBzY3J1dGluaXplZCBmb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmZyb20qIGJ1bGstYWxsb2NhdGVkIHBhZ2VzLiBBbmQgaWYgdGhleSBzZW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBLTVNBTiB3aWxsIGNhdGNoIGl0LlxuXG5CdXQuLi4gZG8gd2UgYWN0dWFsbHkgbmVlZCBLTVNBTiBmb3IgdGhpcz8gTGV0IG1lIGdvIHRocm91Z2ggdGhlIGNyaXRlcmlhIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgLiBJIG5lZWQgdG8gYXNrIG15c2VsZiwgaXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgYW55IG9mIHRoZSBmb2xsb3dpbmc/XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci5cbjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkFuZCwgY3JpdGljYWxseSwgaXMgdGhpcyBhICpLTVNBTi1zcGVjaWZpYyogaXNzdWU/IEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHN0YW5kYXJkIEtBU0FOIGNvdmVycyBhIGxvdC4gSWYgYSBidWcgY291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCB0aGVyZSdzIG5vIG5lZWQgZm9yIEtNU0FOLiBLTVNBTiBpcyBleHBlbnNpdmUsIGFuZCBpdCBoYXMgdG8gZXhwb3NlIHRoaW5ncyB0aGF0IHdvdWxkIG5vdCBiZSBleHBvc2VkIGJ5IHRoZSBvdGhlciBkZXRlY3RvcnMuXG5cbk9rYXksIGJhY2sgdG8gdGhlIHByb2JsZW0uIEJ5IGFkZGluZyBga21zYW5fYWxsb2NfcGFnZSgpYCwgd2UgYXJlICplbmFibGluZyogS01TQU4gdG8gcHJvcGVybHkgcG9pc29uIGFuZCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSAqZHVyaW5nKiBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBLTVNBTiAqY291bGRuJ3QqIGRvIHRoaXMgYmVmb3JlLiBJdCB3YXMgYSBibGluZCBzcG90LlxuXG5TcGVjaWZpY2FsbHksIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIGlzIGRlc2lnbmVkIHRvIG1hcmsgdGhlIHBhZ2Ugc2hhZG93IGFzIHVuaW5pdGlhbGl6ZWQgKGAtMWApIGlmIGBfX0dGUF9aRVJPYCBpcyAqbm90KiBzZXQuIE5vdywgd2hlbiBwYWdlcyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19wYWdlc19idWxrYCwgYWNyb3NzIHRoZSBrZXJuZWwgKG5ldHdvcmtpbmcsIGNyeXB0bywgZXRjLiksIEtNU0FOIGNhbiBkZXRlY3QgdGhpcy4gVGhpcyAqZGlyZWN0bHkqIGltcGFjdHMgS01TQU4ncyBpbnN0cnVtZW50YXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2UgYWxsb2NhdGlvbikuIFRoaXMgbm93IGVuYWJsZXMgdXMgdG8gZGV0ZWN0IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBwYWdlcy5cblxuV2FpdCwgaXMgaXQganVzdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZyBjaGFuZ2U/IEkgbmVlZCB0byBsb29rIGF0IHRoZSBkaWZmZXJlbnQgY2FsbGVycyBvZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBhbHNvIHdoZXJlIGBhbGxvY19wYWdlc19idWxrX2FycmF5YCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbGlzdGAgYXJlIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIG1ha2UgYSBjYWxsIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTQ6MjAuMTYwOTAyNzg2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQyNDEyODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVxcdCAqXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcXHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfc2VncylcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlxcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXFx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cXHUwMDNlcGduciwgYm8tXFx1MDAzZXBhZ2VzKTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cXHQvKlxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5OlxcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cXHRcXHRcXHRcXHRcXHQgICpwYWdlX2xpc3QgKyBkb25lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXFx0ZG8ge1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcXHRcXHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXFx0XFx0XFx0XFx0XFx0ICBwYWdlX2xpc3QpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0OlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXFx1MDAyNmJ1Zi1cXHUwMDNldGFibGUuc2d0LCBcXHUwMDI2c2dfaXRlciwgMClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcXHRcXHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jLTg5LVxcdFxcdFxcdGxhc3QgPSBqO1xcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XFx0XFx0XFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcXG5mcy9lcm9mcy96dXRpbC5jLTkxLVxcdFxcdFxcdGlmIChsYXN0ID09IGopXFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxcbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcXHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXFx0aWYgKCFucl9hbGxvYylcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXFxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4OlxcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cXHUwMDNlbmNuX3BhZ2VzKTtcXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXFx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xcbi0tXFxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmZzL3NwbGljZS5jLTM0MS1cXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgKyBucGFnZXMpO1xcbmZzL3NwbGljZS5jOjM0MjpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcXG5mcy9zcGxpY2UuYy0zNDMtXFx0aWYgKCFucGFnZXMpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cXHRcXHRcXHRcXHRcXHQgICAgIG1yLVxcdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XFx0XFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVxcdFxcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XFxuLS1cXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXFx0XFx0bGFzdCA9IGdvdDtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcXHRcXHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTc5My1cXG5tbS9hbGxvY190YWcuYzo3OTQ6XFx0XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxubW0vYWxsb2NfdGFnLmMtNzk1LVxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgKyBucik7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXFxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cXHR3aGlsZSAobnJfcGFnZXMpIHtcXG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XFx0XFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXFx0XFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXFx0XFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XFxubW0va2FzYW4vc2hhZG93LmM6MzcwOlxcdFxcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xcbm1tL21lbXBvbGljeS5jLTI1OTAtXFxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI1OTItXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYwNy1cXHRcXHRpZiAoZGVsdGEpIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjA4OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MTMtXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjE0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MjUtXFxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MjctXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2NC1cXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG5tbS9tZW1wb2xpY3kuYzoyNjY1OlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcwMS1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjI3MDI6XFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxubW0vbWVtcG9saWN5LmMtMjcwMy1cXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcyOS1cXHRcXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyNzMwOlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjczMS1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc0My1cXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbm1tL21lbXBvbGljeS5jLTI3NDUtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1My1cXG5tbS9tZW1wb2xpY3kuYzoyNzU0OlxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbm1tL21lbXBvbGljeS5jLTI3NTUtXFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1Ny1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxubW0vbWVtcG9saWN5LmM6Mjc1ODpcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4MTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbm1tL21lbXBvbGljeS5jLTI3ODItXFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODQtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4NTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3ODYtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxubW0vbWVtcG9saWN5LmM6Mjc4OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVxcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoyNzk0OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXFxubW0vbWVtcG9saWN5LmMtMjc5NS1cXHRcXHRcXHRcXHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG4tLVxcbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDcwLSAqXFxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDMtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3NDQ6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzc0Ny1cXHRcXHRcXHRlbHNlXFxubW0vdm1hbGxvYy5jOjM3NDg6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0OlxcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXFxcImVtcHR5XFxcIiBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cXHRtZW1zZXQoXFx1MDAyNnBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XFx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVxcdTAwM2VwLm5pZCwgYnVsayxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXFx0XFx0XFx0XFx0XFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVxcdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFxcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlxcdFxcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgZmlsbGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1NDoyMi4wMDMzMjkyMDVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYxNDgxNjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBCdWxrIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBzYWZldHksIHBhcnRpY3VsYXJseSB3aXRoIEtNU0FOLiBGaXJzdCwgbGV0J3MgbmFpbCBkb3duIHdoYXQgdGhlIHBhdGNoIGRvZXM6IGl0J3MgYWRkaW5nIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgdXNlZCBFVkVSWVdIRVJFIOKAkyBgdm1hbGxvY2AsIG5ldHdvcmsgcGFnZSBwb29scywgYHNwbGljZWAsIGZpbGVzeXN0ZW1zLCBCUEYsIGBpb191cmluZ2AsIFJQQywgeW91IG5hbWUgaXQuIFRoZSBzaWduaWZpY2FudCB0aGluZyBpcyB0aGF0LCAqYmVmb3JlKiB0aGlzIHBhdGNoLCBpZiBwYWdlcyB3ZXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBQQ1AgbGlzdCDigJMgdGhlIGZhc3QgcGF0aCDigJMgS01TQU4ncyBpbml0aWFsaXphdGlvbiB0cmFja2luZyB3YXMgc2tpcHBlZC4gVGhpcyBtZWFucyBLTVNBTiB3YXMgY29tcGxldGVseSBibGluZCB0byB1bmluaXRpYWxpemVkIHBhZ2VzIGFsbG9jYXRlZCB2aWEgYGFsbG9jX3BhZ2VzX2J1bGtgLlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHRoYXQgYnkgYWRkaW5nIHRoaXMgaG9vaywgcGFnZXMgYWxsb2NhdGVkIHdpdGhvdXQgYF9fR0ZQX1pFUk9gIHdpbGwgYmUgbWFya2VkIGFzIHVuaW5pdGlhbGl6ZWQuIENvbnZlcnNlbHksIHBhZ2VzIGFsbG9jYXRlZCB3aXRoIGBfX0dGUF9aRVJPYCB3aWxsIGJlIG1hcmtlZCBhcyBpbml0aWFsaXplZC4gTm93LCBhbnkgY29kZSByZWFkaW5nIGZyb20gdGhlc2UgcGFnZXMgKmJlZm9yZSogaW5pdGlhbGl6aW5nIHRoZW0sIG9yIGxlYWtpbmcgdGhvc2UgdW5pbml0aWFsaXplZCBieXRlcyB0byB1c2VyIHNwYWNlLCB3aWxsIHRyaWdnZXIgS01TQU4uIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBMT1Qgb2YgcG90ZW50aWFsIGNvZGUgcGF0aHMgbm93IGJlaW5nIHNjcnV0aW5pemVkLCB0aGluZ3MgbGlrZSBgY29weV9zcGxpY2VfcmVhZGAsIGBmdXNlX3JlYWRkaXJgLCBuZXR3b3JrIHJlY2VpdmUgaGFuZGxpbmcsIGB2bWFsbG9jYCwgQnRyZnMsIEJQRiBhcmVuYSwgYGlvX3VyaW5nYCwgZXRjLiBUaGlzIGVuYWJsZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgYWNyb3NzICphbGwqIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IENvdWxkIEtBU0FOIGNhdGNoIHRoaXM/IE5vLiBLQVNBTiBpcyBncmVhdCBhdCBkZXRlY3Rpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlcywgZXRjLiBJdCBmb2N1c2VzIG9uIG1lbW9yeSB2YWxpZGl0eSwgbm90IGluaXRpYWxpemF0aW9uIHN0YXRlLiBLTVNBTiBzcGVjaWZpY2FsbHkgdGFyZ2V0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gSSBoYXZlIHRvIGJlIGNyeXN0YWwgY2xlYXIgb24gdGhpcyBiZWNhdXNlIG9mIHRoZSBLTVNBTiBydWxlcyBhbmQgY3JpdGVyaWEuIFdlJ3JlIG9ubHkganVzdGlmaWVkIGluIHJ1bm5pbmcgYSBLTVNBTiBzZXNzaW9uIGlmIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgZG9uJ3QgY2F0Y2ggdGhlIHByb2JsZW0uXG5cbkxldCdzIGNhcmVmdWxseSBleGFtaW5lIHRoZSBLTVNBTiBjcml0ZXJpYTogd2Ugc2V0IGBOZWVkc0tNU0FOPXRydWVgIG9ubHkgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYiBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5JbiB0aGlzIGNhc2UsIGl0J3MgbW9zdCByZWxldmFudCB0byBpdGVtIDM6IHRoaXMgcGF0Y2ggKmRpcmVjdGx5KiBhZGRyZXNzZXMgbWlzc2luZyBLTVNBTiBob29rcyBpbiB0aGUgY29yZSBidWxrIHBhZ2UgYWxsb2NhdG9yLiBXZSBhcmUgZXhwbGljaXRseSBjaGFuZ2luZyBob3cgS01TQU4gdHJhY2tzIGluaXRpYWxpemF0aW9uIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNjZW5hcmlvIEtNU0FOIGlzIGRlc2lnbmVkIGZvciBiZWNhdXNlIHRoaXMgd2lsbCBjb3ZlciBhbGwgY29kZSBwYXRocyB0aGF0IHVzZSBgYWxsb2NfcGFnZXNfYnVsa2AuIFdlIGhhdmUgYSBjbGVhciBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCB3aGljaCBLQVNBTiBjYW5ub3QgY2F0Y2guXG5cblNvLCBpcyB0aGVyZSAqYW55KiBhbWJpZ3VpdHk/IE5vLCBLQVNBTiBkb2VzIG5vdCB0cmFjayBpbml0aWFsaXphdGlvbiwgb25seSB2YWxpZGl0eS4gQmVmb3JlIHRoaXMsIEtNU0FOIHdhcyBibGluZCB0byBidWxrLWFsbG9jYXRlZCBwYWdlcy4gV2l0aCB0aGlzIHBhdGNoLCB3ZSdyZSBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24gZm9yIGV2ZXJ5IHNpbmdsZSBgYWxsb2NfcGFnZXNfYnVsa2AgYWxsb2NhdGlvbi4gVGhpcyBpcyBhIHNvbGlkIGp1c3RpZmljYXRpb24gZm9yIGBOZWVkc0tNU0FOPXRydWVgLlxuXG5UaGVyZWZvcmUsIEknbSBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgLiBNeSByZWFzb25pbmcgaXM6XG4xLiBUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGhvb2tzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC5cbjIuIEtNU0FOIHdpbGwgbm93IHRyYWNrIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGVzZSBwYWdlcyBhbmQgZmxhZyB1bmluaXRpYWxpemVkIHJlYWRzLiBLQVNBTiBkb2VzIG5vdCBkbyB0aGlzLiBXaXRob3V0IHRoaXMgcGF0Y2gsIEtNU0FOIHdhcyBibGluZCB0byBidWxrIGFsbG9jYXRpb25zLiBUaGlzIGFsbG93cyB1cyB0byB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgbGVha3MgaW4gdGhlIGtlcm5lbC5cbjMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgd2FycmFudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2NSwiT3V0cHV0VG9rZW5zIjoyNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjMwLjYxODE0ODk5N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXFxuXFxuS01TQU4gdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0dXMgb2YgcGFnZSBhbGxvY2F0aW9ucyBieSBtYXJraW5nIG5vbi1gX19HRlBfWkVST2AgcGFnZXMgd2l0aCB1bmluaXRpYWxpemVkIHNoYWRvdyBhbmQgY3JlYXRpbmcgYWxsb2NhdGlvbiBvcmlnaW5zLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZWAgLyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgKSBieXBhc3NlZCBLTVNBTiB0cmFja2luZywgbGVhdmluZyBLTVNBTiBibGluZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3JpZ2luYXRpbmcgZnJvbSBidWxrLWFsbG9jYXRlZCBwYWdlcyAod2hpY2ggYXJlIHdpZGVseSB1c2VkIGFjcm9zcyB2bWFsbG9jLCBwYWdlIHBvb2wgLyBuZXR3b3JrIGRyaXZlcnMsIHNwbGljZSwgYnRyZnMsIGZ1c2UsIGFuZCBicGYpLlxcblxcblN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4gb25seSBtb25pdG9yIG1lbW9yeSBhY2Nlc3NpYmlsaXR5IChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFuZCBjYW5ub3QgZGV0ZWN0IHJlYWRzIG9yIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIGp1c3RpZmllZCB0byB2YWxpZGF0ZSB0aGUgS01TQU4gaG9vayBhbmQgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgZXhwb3NlZCBhY3Jvc3MgYWxsIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGNhbGwgc2l0ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHRoZSBtaXNzaW5nIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBjYWxscyB0byB0aGUgUENQIGZhc3QgcGF0aCBvZiB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgKS5cXG5cXG5LTVNBTiB0cmFja3MgdGhlIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBwYWdlIGFsbG9jYXRpb25zIGJ5IG1hcmtpbmcgbm9uLWBfX0dGUF9aRVJPYCBwYWdlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgc2hhZG93IGFuZCBjcmVhdGluZyBhbGxvY2F0aW9uIG9yaWdpbnMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBwYWdlcyBhbGxvY2F0ZWQgdmlhIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yIChgYWxsb2NfcGFnZXNfYnVsa2AgLyBgYWxsb2NfcGFnZXNfYnVsa19ub2RlYCAvIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWApIGJ5cGFzc2VkIEtNU0FOIHRyYWNraW5nLCBsZWF2aW5nIEtNU0FOIGJsaW5kIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBvcmlnaW5hdGluZyBmcm9tIGJ1bGstYWxsb2NhdGVkIHBhZ2VzICh3aGljaCBhcmUgd2lkZWx5IHVzZWQgYWNyb3NzIHZtYWxsb2MsIHBhZ2UgcG9vbCAvIG5ldHdvcmsgZHJpdmVycywgc3BsaWNlLCBidHJmcywgZnVzZSwgYW5kIGJwZikuXFxuXFxuU3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiBvbmx5IG1vbml0b3IgbWVtb3J5IGFjY2Vzc2liaWxpdHkgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYW5kIGNhbm5vdCBkZXRlY3QgcmVhZHMgb3IgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMganVzdGlmaWVkIHRvIHZhbGlkYXRlIHRoZSBLTVNBTiBob29rIGFuZCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBleHBvc2VkIGFjcm9zcyBhbGwgYnVsayBwYWdlIGFsbG9jYXRpb24gY2FsbCBzaXRlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow79h74[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 03:36:01 +0000 UTC FinishedAt: 2026-09-08 03:54:32 +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": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "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": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "ada7dc67-7517-4d40-b6ce-1ce8d976a58b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHRoZSBtaXNzaW5nIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBjYWxscyB0byB0aGUgUENQIGZhc3QgcGF0aCBvZiB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgKS5cblxuS01TQU4gdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0dXMgb2YgcGFnZSBhbGxvY2F0aW9ucyBieSBtYXJraW5nIG5vbi1gX19HRlBfWkVST2AgcGFnZXMgd2l0aCB1bmluaXRpYWxpemVkIHNoYWRvdyBhbmQgY3JlYXRpbmcgYWxsb2NhdGlvbiBvcmlnaW5zLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZWAgLyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgKSBieXBhc3NlZCBLTVNBTiB0cmFja2luZywgbGVhdmluZyBLTVNBTiBibGluZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3JpZ2luYXRpbmcgZnJvbSBidWxrLWFsbG9jYXRlZCBwYWdlcyAod2hpY2ggYXJlIHdpZGVseSB1c2VkIGFjcm9zcyB2bWFsbG9jLCBwYWdlIHBvb2wgLyBuZXR3b3JrIGRyaXZlcnMsIHNwbGljZSwgYnRyZnMsIGZ1c2UsIGFuZCBicGYpLlxuXG5TdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIG9ubHkgbW9uaXRvciBtZW1vcnkgYWNjZXNzaWJpbGl0eSAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhbmQgY2Fubm90IGRldGVjdCByZWFkcyBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBqdXN0aWZpZWQgdG8gdmFsaWRhdGUgdGhlIEtNU0FOIGhvb2sgYW5kIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIGV4cG9zZWQgYWNyb3NzIGFsbCBidWxrIHBhZ2UgYWxsb2NhdGlvbiBjYWxsIHNpdGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIHByb3Blcmx5IGludm9rZSB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgYW5kIGttc2FuX2FsbG9jX3BhZ2UoKSBmb3IgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgcGVyLWNwdSBwYWdlIGFsbG9jYXRvci4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtNU0FOIHRyYWNraW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDE3OTQzZjY2NDY1ZThhZGI2M2NmYjJmMWM5NTdlNzBhOWUyNmUyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4wMmJhMTlmNmRiYjU5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01MjgwLDYgJiM0Mzs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4mIzQzO1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuJiM0MztcdFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApO1xuIFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIHByb3Blcmx5IGludm9rZSB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgYW5kIGttc2FuX2FsbG9jX3BhZ2UoKSBmb3IgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgcGVyLWNwdSBwYWdlIGFsbG9jYXRvci4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtNU0FOIHRyYWNraW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE3OTQzZjY2NDY1ZThhZGI2M2NmYjJmMWM5NTdlNzBhOWUyNmUyZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMTJmYWM5MDg0YzQ4My4uMDJiYTE5ZjZkYmI1OSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTI4MCw2ICYjNDM7NTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCQlwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7CiAJCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7CiYjNDM7CQl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpOwomIzQzOwkJa21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApOwogCQlwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkmIzM5O2QgdGhpbmsgaXQgdGhyb3VnaDoKCioqQW5hbHl6aW5nIGEgUGFnZSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbi4gSSByZW1lbWJlciB0aGF0IGZ1bmN0aW9uLiBJdCYjMzk7cyByZWxhdGVkIHRvIGJ1bGsgcGFnZSBhbGxvY2F0aW9uLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYSBvciBwYXJ0IG9mIHNvbWUgb3B0aW1pemF0aW9uLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIHNlZSB0aGUgY29kZSwgYW5kIHF1aWNrbHkuIEluc3RlYWQgb2YganVzdCBzdGFyaW5nIGJsaW5kbHksIEkmIzM5O2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCB0aGF0IGNvZGUgdXAgb24gbXkgc2NyZWVuLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTI4MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY2h1bmsgb2YgdGhlIGNvbnRleHQgLSB3aGF0IGNhbWUgYmVmb3JlLCBhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIHRoaXMgc3BlY2lmaWMgcmVnaW9uIG9mIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBhcm91bmQgaXQgdG9vLCBpbiBjYXNlIHRoaXMgaW1wYWN0cyBhbm90aGVyIGFzcGVjdCBvZiB0aGUga2VybmVsLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IHRoZSBjaGFuZ2VzIHRoYXQgYXJlIGJlaW5nIG1hZGUgYW5kIHdoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI1MDpcdFx0ICovXG41MjUxOlx0XHRpZiAodW5saWtlbHkoIXpvbmUpKVxuNTI1MjpcdFx0XHRnb3RvIGZhaWxlZDtcbjUyNTM6XHRcbjUyNTQ6XHRcdC8qIHNwaW5fdHJ5bG9jayBtYXkgZmFpbCBkdWUgdG8gYSBwYXJhbGxlbCBkcmFpbiBvciBJUlEgcmVlbnRyYW5jeS4gKi9cbjUyNTU6XHRcdHBjcCA9IHBjcF9zcGluX3RyeWxvY2soem9uZS1cdTAwM2VwZXJfY3B1X3BhZ2VzZXQpO1xuNTI1NjpcdFx0aWYgKCFwY3ApXG41MjU3Olx0XHRcdGdvdG8gZmFpbGVkO1xuNTI1ODpcdFxuNTI1OTpcdFx0LyogQXR0ZW1wdCB0aGUgYmF0Y2ggYWxsb2NhdGlvbiAqL1xuNTI2MDpcdFx0cGNwX2xpc3QgPSBcdTAwMjZwY3AtXHUwMDNlbGlzdHNbb3JkZXJfdG9fcGluZGV4KGFjLm1pZ3JhdGV0eXBlLCAwKV07XG41MjYxOlx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcykge1xuNTI2MjpcdFxuNTI2MzpcdFx0XHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXG41MjY0Olx0XHRcdGlmIChwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pIHtcbjUyNjU6XHRcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTI2NjpcdFx0XHRcdGNvbnRpbnVlO1xuNTI2NzpcdFx0XHR9XG41MjY4Olx0XG41MjY5Olx0XHRcdHBhZ2UgPSBfX3JtcXVldWVfcGNwbGlzdCh6b25lLCAwLCBhYy5taWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsXG41MjcwOlx0XHRcdFx0XHRcdFx0XHRcdHBjcCwgcGNwX2xpc3QpO1xuNTI3MTpcdFx0XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG41MjcyOlx0XHRcdFx0LyogVHJ5IGFuZCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSAqL1xuNTI3MzpcdFx0XHRcdGlmICghbnJfYWNjb3VudCkge1xuNTI3NDpcdFx0XHRcdFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XG41Mjc1Olx0XHRcdFx0XHRnb3RvIGZhaWxlZDtcbjUyNzY6XHRcdFx0XHR9XG41Mjc3Olx0XHRcdFx0YnJlYWs7XG41Mjc4Olx0XHRcdH1cbjUyNzk6XHRcdFx0bnJfYWNjb3VudCYjNDM7JiM0Mzs7XG41MjgwOlx0XG41MjgxOlx0XHRcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcbjUyODI6XHRcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbjUyODM6XHRcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbjUyODQ6XHRcdFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApO1xuNTI4NTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUyODY6XHRcdH1cbjUyODc6XHRcbjUyODg6XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI4OTpcdFxuNTI5MDpcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcbjUyOTE6XHRcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XG41MjkyOlx0XG41MjkzOlx0b3V0OlxuNTI5NDpcdFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcbjUyOTU6XHRcbjUyOTY6XHRmYWlsZWQ6XG41Mjk3Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG41Mjk4Olx0XHRpZiAocGFnZSlcbjUyOTk6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41MzAwOlx0XHRnb3RvIG91dDtcbjUzMDE6XHR9XG41MzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xuNTMwMzpcdFxuNTMwNDpcdC8qXG41MzA1Olx0ICogZnJlZV9wYWdlc19idWxrIC0gRnJlZSBhbiBhcnJheSBvZiBvcmRlci0wIHBhZ2VzXG41MzA2Olx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcbjUzMDc6XHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XG41MzA4Olx0ICpcbjUzMDk6XHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBBbGxvY2F0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IHRoZXkmIzM5O3ZlIGFkZGVkIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgIGNhbGxzIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBidWxrIHBhZ2UgYWxsb2NhdGlvbi4gCgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgdGhlc2UgYWRkaXRpb25zIGFyZSBpc29sYXRlZCB0byB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLCBvciBpZiB0aGV5JiMzOTtyZSBwYXJ0IG9mIGEgYnJvYWRlciBwYXR0ZXJuIHdpdGhpbiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGsqYCBmYW1pbHkuIEkgd2FudCB0byBjaGVjayBgYWxsb2NfcGFnZXNfYnVsa19hcnJheV9tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYW55IG90aGVyIHZhcmlhdGlvbnMgdG8gc2VlIHRoZSBzY29wZS4gQXJlIHRoZXkgY29uc2lzdGVudGx5IGJlaW5nIHVzZWQ/IE15IG5leHQgc3RlcCBpcyB0byBzZWFyY2ggZm9yIGBhbGxvY19wYWdlc19idWxrYCBhY3Jvc3MgYG1tL3BhZ2VfYWxsb2MuY2AsIG9yIHBvdGVudGlhbGx5IHRoZSB3aWRlciBjb2RlYmFzZSwgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhcmUgYmVpbmcgaW50ZWdyYXRlZCBhbmQgd2hlcmUgZWxzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGVtcGxveWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxubW0vcGFnZV9hbGxvYy5jLTUxNDEtICogQGdmcDogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvblxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xubW0vcGFnZV9hbGxvYy5jOjUxNjA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTMwMS19XG5tbS9wYWdlX2FsbG9jLmM6NTMwMjpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzkxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBCdWxrIFBhZ2UgQWxsb2NhdGlvbiBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGVzZSBidWxrIHBhZ2UgYWxsb2NhdGlvbiBmdW5jdGlvbnMg4oCTIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBpdHMgc2libGluZ3MgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19hcnJheWAgYW5kIGBhbGxvY19wYWdlc19idWxrX2xpc3RgLiBJIGtub3cgdGhleSYjMzk7cmUgc3ByaW5rbGVkIHRocm91Z2hvdXQgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBrZXJuZWwsIHRoaW5ncyBsaWtlIGRyaXZlcnMsIG5ldHdvcmsgc3Vic3lzdGVtcywgYW5kIGZpbGVzeXN0ZW1zIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgKndobyogaXMgdXNpbmcgdGhlc2UgYW5kICpob3cqLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGZpcmUgdXAgYSBgZ3JlcGAgYWNyb3NzIHRoZSBjb2RlYmFzZS4gSSB3YW50IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGFsbCB0aGUgY2FsbGVycyBvZiBgYWxsb2NfcGFnZXNfYnVsa2Ag4oCTIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbGwgdmFyaWFudHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJyb2FkIHN0cm9rZXMgb2Ygd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBhbmQgd2hhdCB0aGUgY29tbW9uIHBhdHRlcm5zIGFyZSBpbiB0aGVpciB1c2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSBiZWZvcmUgSSBkZWx2ZSBmdXJ0aGVyIGludG8gc3BlY2lmaWMgaW5zdGFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNC1cdCAqXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA1Olx0ICogTm90ZTogYWxsb2NfcGFnZXNfYnVsayBuZWVkcyB0aGUgYXJyYXkgdG8gYmUgemVyb2VkLCBhcyBpdCBhc3N1bWVzXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVx0ICogYW55IG5vbi16ZXJvIHNsb3QgYWxyZWFkeSBjb250YWlucyBhIHZhbGlkIGFsbG9jYXRpb24uXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cdG1lbXNldChwYWdlcywgMCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJfc2Vncyk7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA5Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjEwLVx0aWYgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfc2Vncylcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM9MzE9aW50IGZ3X2lzb19idWZmZXJfYWxsb2Moc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgaW50IHBhZ2VfY291bnQpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQxLVx0Ly8gY29udmVuaWVuY2UgdG8gbWFwIHRoZW0gaW50byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdXNlciBwcm9jZXNzLlxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIgfCBfX0dGUF9aRVJPLFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQzLVx0XHRcdFx0XHRcdCAgICAgIHBhZ2VfY291bnQsIHBhZ2VfYXJyYXkpO1xuLS1cbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jPTg0OD1zdGF0aWMgaW50IGFyX2NvbnRleHRfaW5pdChzdHJ1Y3QgYXJfY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfb2hjaSAqb2hjaSxcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXHQvLyBhZGRyZXNzIHJhbmdlIGluIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYzo4NjU6XHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY2LVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI2LVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIGJvLVx1MDAzZXBnbnIsIGJvLVx1MDAzZXBhZ2VzKTtcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI4LVx0LypcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5Olx0ICogYWxsb2NfcGFnZXNfYnVsaygpIGRvZXMgbm90IHRyeSB2ZXJ5IGhhcmQgdG8gZ2V0IHBhZ2VzIHVuZGVyIG1lbW9yeVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MzAtXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ2Nj1zdGF0aWMgdm9pZCBmcmVlX3BhZ2VfbGlzdCh1MzIgbnBhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNDY5LVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjQ3MDpcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNDcxLVx0Zm9yIChpID0gbnBhZ2VzIC0gMTsgaSBcdTAwM2U9IDA7IGktLSlcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDk2PXN0YXRpYyBpbnQgbWx4NXZmX2FkZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKipwYWdlX2xpc3QsIHVuc2lnbmVkIGludCBucGFnZXMpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwNi1cdGZvciAoOzspIHtcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XHRcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBucGFnZXMgLSBkb25lLFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cdFx0XHRcdFx0ICAqcGFnZV9saXN0ICYjNDM7IGRvbmUpO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTc4LVx0ZG8ge1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjc5Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy04MC1cdFx0XHRcdFx0ICBwYWdlX2xpc3QpO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz0xMTA9c3RhdGljIHZvaWQgdmlydGlvdmZfZnJlZV9kYXRhX2J1ZmZlcihzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtMTEzLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjExNDpcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtMTE1LVx0Zm9yX2VhY2hfc2d0YWJsZV9wYWdlKFx1MDAyNmJ1Zi1cdTAwM2V0YWJsZS5zZ3QsIFx1MDAyNnNnX2l0ZXIsIDApXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmM9Njg0PWludCBidHJmc19hbGxvY19wYWdlX2FycmF5KHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCBnZnBfdCBnZnApXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmM6NjkxOlx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkyLVx0XHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XG4tLVxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxuLS1cbmZzL2Vyb2ZzL3p1dGlsLmMtODktXHRcdFx0bGFzdCA9IGo7XG5mcy9lcm9mcy96dXRpbC5jOjkwOlx0XHRcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XG5mcy9lcm9mcy96dXRpbC5jLTkxLVx0XHRcdGlmIChsYXN0ID09IGopXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcbi0tXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDMtXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcbmZzL2Z1c2UvcmVhZGRpci5jLTM0NS1cdGlmICghbnJfYWxsb2MpXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYz0xMzI2PWFsbG9jX2luaXRfZGlyX2RlbGVnKHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9maWxlICpmcClcbi0tXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXG5mcy9uZnNkL25mczRzdGF0ZS5jOjEzMzg6XHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXHUwMDNlbmNuX3BhZ2VzKTtcbmZzL25mc2QvbmZzNHN0YXRlLmMtMTMzOS1cdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcbi0tXG5mcy9zcGxpY2UuYz0zMTg9c3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuLS1cbmZzL3NwbGljZS5jLTM0MS1cdHBhZ2VzID0gKHN0cnVjdCBwYWdlICoqKShidiAmIzQzOyBucGFnZXMpO1xuZnMvc3BsaWNlLmM6MzQyOlx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XG5mcy9zcGxpY2UuYy0zNDMtXHRpZiAoIW5wYWdlcykge1xuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTItXHRcdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxuaW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXHRcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNTojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2Olx0X19hbGxvY19wYWdlc19idWxrKF9nZnAsIG51bWFfbWVtX2lkKCksIE5VTEwsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjk6YWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnBfdCBnZnAsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cdFx0XHRcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1Olx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBOVUxMLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM4OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsa19ub2RlKC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yNDAtXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy0xOTItXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBOVU1BX05PX05PREUsXG5pb191cmluZy9tZW1tYXAuYy0xOTQtXHRcdFx0XHRcdCAgICAgbXItXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY4PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxua2VybmVsL2JwZi9hcmVuYS5jOjczMzpcdFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cbmtlcm5lbC9icGYvYXJlbmEuYy03MzQtXHRcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jPTM5MT12bV9tYXBfcmFtX3Rlc3Qodm9pZClcbi0tXG5saWIvdGVzdF92bWFsbG9jLmMtNDAzLVxubGliL3Rlc3Rfdm1hbGxvYy5jOjQwNDpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdF92bWFsbG9jLmMtNDA1LVx0aWYgKG5yX2FsbG9jYXRlZCAhPSBtYXBfbnJfcGFnZXMpXG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM9NTE9c3RhdGljIHZvaWQgKl9faW5pdCBpb3Zfa3VuaXRfY3JlYXRlX2J1ZmZlcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXHRcdGxhc3QgPSBnb3Q7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcdFx0Z290ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxuLS1cbm1tL2FsbG9jX3RhZy5jPTc3Nz1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtNzkzLVxubW0vYWxsb2NfdGFnLmM6Nzk0Olx0XHRcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLFxubW0vYWxsb2NfdGFnLmMtNzk1LVx0XHRcdFx0TlVNQV9OT19OT0RFLCBtb3JlX3BhZ2VzIC0gbnIsIG5leHRfcGFnZSAmIzQzOyBucik7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzI3PXN0YXRpYyB2b2lkIF9fX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMpXG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzM4LVxubW0va2FzYW4vc2hhZG93LmM6MzM5OnN0YXRpYyBpbnQgX19fYWxsb2NfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrKVxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDQtXHR3aGlsZSAobnJfcGFnZXMpIHtcbm1tL2thc2FuL3NoYWRvdy5jOjM0NTpcdFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcbm1tL2thc2FuL3NoYWRvdy5jLTM0Ni1cdFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYz0zNTc9c3RhdGljIGludCBfX2thc2FuX3BvcHVsYXRlX3ZtYWxsb2NfZG8odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTM2OS1cdFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XG5tbS9rYXNhbi9zaGFkb3cuYzozNzA6XHRcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcbm1tL2thc2FuL3NoYWRvdy5jLTM3MS1cdFx0aWYgKHJldClcbi0tXG5tbS9tZW1wb2xpY3kuYz0yNTg5PUVYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9wcm9mKTtcbm1tL21lbXBvbGljeS5jLTI1OTAtXG5tbS9tZW1wb2xpY3kuYzoyNTkxOnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNTkyLVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYwNy1cdFx0aWYgKGRlbHRhKSB7XG5tbS9tZW1wb2xpY3kuYzoyNjA4Olx0XHRcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MDktXHRcdFx0XHRcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVx0XHR9IGVsc2Uge1xubW0vbWVtcG9saWN5LmM6MjYxNDpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYyNS1cbm1tL21lbXBvbGljeS5jOjI2MjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MjctXHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjY0LVx0XHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcbm1tL21lbXBvbGljeS5jOjI2NjU6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNjY2LVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjcwMS1cdC8qXG5tbS9tZW1wb2xpY3kuYzoyNzAyOlx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG5tbS9tZW1wb2xpY3kuYy0yNzAzLVx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzI5LVx0XHRcdGJyZWFrO1xubW0vbWVtcG9saWN5LmM6MjczMDpcdFx0bnJfYWxsb2NhdGVkID0gX19hbGxvY19wYWdlc19idWxrKGdmcCwgbm9kZSwgTlVMTCwgbm9kZV9wYWdlcyxcbm1tL21lbXBvbGljeS5jLTI3MzEtXHRcdFx0XHRcdFx0ICBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzQzLVxubW0vbWVtcG9saWN5LmM6Mjc0NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbm1tL21lbXBvbGljeS5jLTI3NDUtXHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzUzLVxubW0vbWVtcG9saWN5LmM6Mjc1NDpcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFx1MDAyNnBvbC1cdTAwM2Vub2Rlcyxcbm1tL21lbXBvbGljeS5jLTI3NTUtXHRcdFx0XHRcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzU3LVx0aWYgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfcGFnZXMpXG5tbS9tZW1wb2xpY3kuYzoyNzU4Olx0XHRucl9hbGxvY2F0ZWQgJiM0Mzs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVx0XHRcdFx0bnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cbm1tL21lbXBvbGljeS5jOjI3NzA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjc3MS1cdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuLS1cbm1tL21lbXBvbGljeS5jLTI3ODAtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc4MTpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnAsIHBvbCxcbm1tL21lbXBvbGljeS5jLTI3ODItXHRcdFx0XHRcdFx0XHQgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODQtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc4NTpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbm1tL21lbXBvbGljeS5jLTI3ODYtXHRcdFx0XHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc4OC1cdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxubW0vbWVtcG9saWN5LmM6Mjc4OTpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjc5MC1cdFx0XHRcdG51bWFfbm9kZV9pZCgpLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIE5PX0lOVEVSTEVBVkVfSU5ERVgsIFx1MDAyNm5pZCk7XG5tbS9tZW1wb2xpY3kuYzoyNzk0Olx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBub2RlbWFzayxcbm1tL21lbXBvbGljeS5jLTI3OTUtXHRcdFx0XHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxMzktLypcbm1tL3BhZ2VfYWxsb2MuYzo1MTQwOiAqIF9fYWxsb2NfcGFnZXNfYnVsayAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIG9yZGVyLTAgcGFnZXMgdG8gYW4gYXJyYXlcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL3BhZ2VfYWxsb2MuYy01MTYxLVx0XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxubW0vcGFnZV9hbGxvYy5jOjUzMDI6RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xubW0vcGFnZV9hbGxvYy5jLTUzMDMtXG4tLVxubW0vc2x1Yi5jPTc0MjY9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03NDcwLSAqXG5tbS9zbHViLmM6NzQ3MTogKiBVbmxpa2UgYWxsb2NfcGFnZXNfYnVsaygpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGZvciBhbHJlYWR5IGFsbG9jYXRlZFxubW0vc2x1Yi5jLTc0NzItICogb2JqZWN0cyBpbiBAcCwgYW5kIHRodXMgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIHplcm8gaXQuXG4tLVxubW0vdm1hbGxvYy5jPTM2NzY9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vdm1hbGxvYy5jLTM3NDMtXHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxubW0vdm1hbGxvYy5jOjM3NDQ6XHRcdFx0XHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXG5tbS92bWFsbG9jLmMtMzc0NS1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4tLVxubW0vdm1hbGxvYy5jLTM3NDctXHRcdFx0ZWxzZVxubW0vdm1hbGxvYy5jOjM3NDg6XHRcdFx0XHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwLCBuaWQsXG5tbS92bWFsbG9jLmMtMzc0OS1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9NjExPXN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzMy1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNDpcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXCYjMzQ7ZW1wdHlcJiMzNDsgZm9yIGFsbG9jX3BhZ2VzX2J1bGsgKi9cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cdG1lbXNldChcdTAwMjZwb29sLVx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM2LVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM3Olx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVx1MDAzZXAubmlkLCBidWxrLFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM4LVx0XHRcdFx0XHQgKHN0cnVjdCBwYWdlICoqKXBvb2wtXHUwMDNlYWxsb2MuY2FjaGUpO1xuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYz02ODc9c3RhdGljIGJvb2wgc3ZjX2ZpbGxfcGFnZXMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVx0Zm9yIChmaWxsZWQgPSAwOyBmaWxsZWQgXHUwMDNjIG5wYWdlczsgZmlsbGVkID0gcmV0KSB7XG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlx0XHRyZXQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cdFx0aWYgKHJldCBcdTAwM2UgZmlsbGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IEFsbG9jYXRpb24gSXNzdWUqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgc2l0dWF0aW9uOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYSBwb3NzaWJsZSBvbWlzc2lvbi4gSXQgc2VlbXMgdGhhdCB0aGUgZmFzdCBwYXRoIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGlzIG1pc3NpbmcgY3J1Y2lhbCBjYWxscyB0byBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCB3aGVuIGl0JiMzOTtzIGFsbG9jYXRpbmcgcGFnZXMgZnJvbSB0aGUgUENQLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIG92ZXJzaWdodCBJIG5lZWQgdG8gYWRkcmVzcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGZ1bmN0aW9uLCB3aGljaCBJIHN1c3BlY3QgaXMgaW52b2x2ZWQgaW4gdGhlIG92ZXJhbGwgYWxsb2NhdGlvbiBwcm9jZXNzLCBhbmQgYWxzbyB0byBjaGVjayBgcG9zdF9hbGxvY19ob29rYCBpbiB0aGUgc2FtZSBmaWxlLCBhcyBpdCBtYXkgYmUgd2hlcmUgdGhvc2UgbWlzc2VkIGNhbGxzIHNob3VsZCBoYXZlIGdvbmUuCgpUbyB1bmRlcnN0YW5kIHRoZSBjb3JyZWN0IHVzYWdlLCBJIG5lZWQgdG8gc2VlIHdoZXJlIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFyZSBhY3R1YWxseSBiZWluZyBjYWxsZWQgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLiBJIG5lZWQgdGhhdCBjb250ZXh0IHRvIHNlZSBob3cgdG8gcHJvcGVybHkgaW50ZWdyYXRlIHRoZW0gaW50byB0aGUgZmFzdC1wYXRoIGxvb3Agb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc28gdGhhdCB0aGUgcGFnZSBhbGxvY2F0aW9uIGlzIGluc3RydW1lbnRlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODQ6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2g6IFdvcnRoRnV6emluZz8qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhcmUgbm93IGNhbGxlZCBpbiBib3RoIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgICphbmQqIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyBJIGtub3cgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGlzIHVzZWQgYnkgYSB0b24gb2Ygc3R1ZmYg4oCTIHNwbGljZSwgYnRyZnMsIHBhZ2VfcG9vbCwgaW9fdXJpbmcsIGZ1c2UsIHRoZSB3b3Jrcy4gU28sIHllYWgsIGl0JiMzOTtzIGRlZmluaXRlbHkgaW4gdGhlIGNyaXRpY2FsIHBhdGguCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY29uc3VsdCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYS4gTWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyBpbiBgbW0vYCBhcmUgZGVmaW5pdGVseSBvbiB0aGUgbGlzdCwgYWxvbmcgd2l0aCBsb2NraW5nLCBCUEYsIHNjaGVkdWxpbmcsIG5ldHdvcmtpbmcsIFZGUywgc3lzY2FsbHMuIFl1cCwgYW55IGxvZ2ljIG1vZHMgdGhlcmUgYXJlIGZhaXIgZ2FtZS4KCkJ1dCB3YWl0LCB3aGF0ICppc24mIzM5O3QqIHdvcnRoIGZ1enppbmc/IERvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlIHN0dWZmLCBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHMgdGhhdCBkb24mIzM5O3QgYWx0ZXIgY29udHJvbCBmbG93LiBCdWlsZCBzeXN0ZW0gY2hhbmdlcyB0b28uCgpOb3csIHRoaXMgcGF0Y2ggYWRkZWQgYSBjb3VwbGUgb2YgdGhpbmdzOiBhIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCB0cmFjZXBvaW50IGFuZCBhIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsLiBUaGF0IGB0cmFjZXBvaW50YCBpcyBwcm9iYWJseSBqdXN0IGxvZ2dpbmcsIGJ1dCB0aGF0IGBrbXNhbl9hbGxvY19wYWdlYC4uLiB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBEb2VzIHRoYXQgaG9vayBpbnRvIEtNU0FOIGFuZCBtZXNzIHdpdGggc2hhZG93IG1lbW9yeSBvciB0aGUgS01TQU4gc3RhdGU/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBga21zYW5fYWxsb2NfcGFnZWAgdG8gYmUgc3VyZS4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rbXNhbi5oPTU3PWJvb2wgX19pbml0IF9fbXVzdF9jaGVjayBrbXNhbl9tZW1ibG9ja19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcbmluY2x1ZGUvbGludXgva21zYW4uaDo2MTogKiBrbXNhbl9hbGxvY19wYWdlKCkgLSBOb3RpZnkgS01TQU4gYWJvdXQgYW4gYWxsb2NfcGFnZXMoKSBjYWxsLlxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYyLSAqIEBwYWdlOiAgc3RydWN0IHBhZ2UgcG9pbnRlciByZXR1cm5lZCBieSBhbGxvY19wYWdlcygpLlxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC02OC0gKi9cbmluY2x1ZGUvbGludXgva21zYW4uaDo2OTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaD0zMTU9c3RhdGljIGlubGluZSB2b2lkIGttc2FuX3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMxOC1cbmluY2x1ZGUvbGludXgva21zYW4uaDozMTk6c3RhdGljIGlubGluZSB2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXHRcdFx0XHQgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xubW0va21zYW4vc2hhZG93LmMtMTcwLVxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODQ6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8ga21zYW5fYWxsb2NfcGFnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCBga21zYW5fYWxsb2NfcGFnZWAgd2l0aGluIGBtbS9rbXNhbi9zaGFkb3cuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQga2luZCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBLTVNBTiBlbXBsb3lpbmcgZm9yIGl0cyBzaGFkb3cgbWVtb3J5PyYjMzQ7IEkga25vdyB0aGUgY29yZSBvZiBLQVNBTi9LTVNBTiByZWxpZXMgb24gc2hhZG93aW5nIHJlZ3VsYXIgbWVtb3J5LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBgYWxsb2NfcGFnZSgpYCBjYWxsLCBvciBhcmUgdGhleSBkb2luZyBzb21ldGhpbmcgY2xldmVyIGxpa2UgYWxsb2NhdGluZyBjb250aWd1b3VzIGJsb2NrcyBhbmQgbWFuYWdpbmcgdGhlbSBpbnRlcm5hbGx5IHRvIG9wdGltaXplIGZvciBhY2Nlc3MgcGF0dGVybnM/IEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGN1c3RvbSBsb2dpYyB0byBhbGlnbiBhbGxvY2F0aW9ucyBmb3IgZWZmaWNpZW50IHNoYWRvdyBtYXBwaW5nLCBvciBwZXJoYXBzIHRoZXkmIzM5O3JlIHRha2luZyBhZHZhbnRhZ2Ugb2Ygc29tZSBOVU1BIGF3YXJlbmVzcyBpZiBpdCYjMzk7cyByZWxldmFudCBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgc2hhZG93IG1hcHBpbmcgaXMgZG9uZSAtIHdoYXQmIzM5O3MgdGhlIGdyYW51bGFyIG1hcHBpbmcgYW5kIGxvb2t1cCBzdHJhdGVneSwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gdmlydHVhbCBhZGRyZXNzIHJlZ2lvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhZ2UgdGFibGUgZW50cmllcy4gVGhlIGdvYWwsIG9mIGNvdXJzZSwgaXMgdG8gbWluaW1pemUgb3ZlcmhlYWQuIFNvIEkmIzM5O20gaW50ZXJlc3RlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFkZW9mZnM6IG1lbW9yeSBmb290cHJpbnQsIGFsbG9jYXRpb24gc3BlZWQsIGFuZCB0aGUgY29tcGxleGl0eSBvZiB0aGUgaW50ZXJuYWwgYm9va2tlZXBpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVndWxhciBgYWxsb2NfcGFnZWAgYW5kIGBmcmVlX3BhZ2VgIHN5c3RlbSBjYWxscyB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGN1c3RvbSBtYW5hZ2VtZW50IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ttc2FuL3NoYWRvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG4gMTcyOlx0e1xuIDE3MzpcdFx0Ym9vbCBpbml0aWFsaXplZCA9IChmbGFncyBcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XG4gMTc0Olx0XHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xuIDE3NTpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDE3NjpcdFx0aW50IHBhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gMTc3Olx0XG4gMTc4Olx0XHRpZiAoIXBhZ2UpXG4gMTc5Olx0XHRcdHJldHVybjtcbiAxODA6XHRcbiAxODE6XHRcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcbiAxODI6XHRcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcbiAxODM6XHRcbiAxODQ6XHRcdGlmIChpbml0aWFsaXplZCkge1xuIDE4NTpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NjpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Mob3JpZ2luKSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NzpcdFx0XHRyZXR1cm47XG4gMTg4Olx0XHR9XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiBaZXJvIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgcnVudGltZSBzaG91bGQgYWxzbyBiZSBpbml0aWFsaXplZC4gKi9cbiAxOTE6XHRcdGlmIChrbXNhbl9pbl9ydW50aW1lKCkpXG4gMTkyOlx0XHRcdHJldHVybjtcbiAxOTM6XHRcbiAxOTQ6XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhzaGFkb3cpLCAtMSwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE5NTpcdFx0a21zYW5fZW50ZXJfcnVudGltZSgpO1xuIDE5NjpcdFx0aGFuZGxlID0ga21zYW5fc2F2ZV9zdGFja193aXRoX2ZsYWdzKGZsYWdzLCAvKmV4dHJhX2JpdHMqLyAwKTtcbiAxOTc6XHRcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbiAxOTg6XHRcdC8qXG4gMTk5Olx0XHQgKiBBZGRyZXNzZXMgYXJlIHBhZ2UtYWxpZ25lZCwgcGFnZXMgYXJlIGNvbnRpZ3VvdXMsIHNvIGl0JiMzOTtzIG9rXG4gMjAwOlx0XHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXG4gMjAxOlx0XHQgKi9cbiAyMDI6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgKiBwYWdlcyAvIHNpemVvZihoYW5kbGUpOyBpJiM0MzsmIzQzOylcbiAyMDM6XHRcdFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiAyMDc6XHR7XG4gMjA4Olx0XHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxuIDIwOTpcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIGJ1bGsgYWxsb2NhdG9yLiBUaGlzIG92ZXJzaWdodCBwb3RlbnRpYWxseSBsZWFkcyB0byBpbmNvbnNpc3RlbnQgS01TQU4gcmVwb3J0cyBkdWUgdG8gaW1wcm9wZXIgc2hhZG93IGFuZCBvcmlnaW4gcGFnZSBpbml0aWFsaXphdGlvbi4gRnVydGhlcm1vcmUsIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBpcyBhZGRlZCBmb3IgdHJhY2luZyB0aGVzZSBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGNyaXRlcmlhLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGFueSBtb2RpZmljYXRpb25zIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCBhcmUgZ2VuZXJhbGx5IGhpZ2gtcHJpb3JpdHkuCgpUaGUgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBhIHViaXF1aXRvdXMgaG90IHBhdGggdGhhdCBzaG91bGQgYmUgYXZvaWRlZC4gVGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IHdhcm5zIGFnYWluc3QgbGlzdGluZyBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3JzLiBIb3dldmVyLCB1cG9uIGluc3BlY3Rpb24sIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgbm90IGEgZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCwgYGttYWxsb2NgLCBvciBga2ZyZWVgLiBJdCYjMzk7cyAqc3BlY2lmaWNhbGx5KiBjYWxsZWQgYnkgc3Vic3lzdGVtcyBsaWtlIGBzcGxpY2VgLCBgaW9fdXJpbmdgLCBgdm1hbGxvY2AsIGFuZCBmaWxlc3lzdGVtcyBsaWtlIGBidHJmc2AuIFRoaXMgbWFrZXMgaXQgYSAqc3BlY2lmaWMqIHN5bWJvbC4gVGhlIGRpZmYgb25seSBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBzb2xpZGlmeWluZyBpdHMgaW1wb3J0YW5jZS4KClJlZ2FyZGluZyBLY29uZmlnIG9wdGlvbnMsIGBrbXNhbl9hbGxvY19wYWdlYCYjMzk7cyBsb2dpYyBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBLTVNBTmAgaXMgZW5hYmxlZCwgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAuIFdoZW4gS01TQU4gaXMgZGlzYWJsZWQsIGl0JiMzOTtzIGp1c3QgYSBuby1vcCBzdGF0aWMgaW5saW5lLiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyBhbHdheXMgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiBLTVNBTiBjb25maWd1cmF0aW9uLiBFdmVuIHdoZW4gS01TQU4gaXMgb2ZmLCBmdXp6aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgdXNlZnVsLCB0aG91Z2ggYEtNU0FOYCBpdHNlbGYgaXMgcmVsZXZhbnQgZm9yIGFjdHVhbCBLTVNBTiBsb2dpYyBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtNU0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2FzYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxNgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipGaW5kaW5nIHRoZSBLTVNBTiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gbG9jYXRlIHRoZSBjb25maWd1cmF0aW9uIGZvciBLTVNBTi4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBmb2N1cyByaWdodCBub3cuIE5vIG5lZWQgZm9yIGFueSBwcmVhbWJsZSBvciBmbHVmZjsgZGlyZWN0bHkgdG8gdGhlIG9iamVjdGl2ZTogZmluZCB0aGUgcmVsZXZhbnQgS01TQU4gY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIHNvIGxldCYjMzk7cyBnZXQgYWZ0ZXIgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLTVNBTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5rbXNhbj01PWNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXG4tLVxubGliL0tjb25maWcua21zYW4tNy1cbmxpYi9LY29uZmlnLmttc2FuOjg6Y29uZmlnIEtNU0FOXG5saWIvS2NvbmZpZy5rbXNhbi05LVx0Ym9vbCBcJiMzNDtLTVNBTjogZGV0ZWN0b3Igb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMgdXNlXCYjMzQ7XG4tLVxubGliL0tjb25maWcua21zYW49MjY9aWYgS01TQU5cbmxpYi9LY29uZmlnLmttc2FuLTI3LVxubGliL0tjb25maWcua21zYW46Mjg6Y29uZmlnIEtNU0FOX0NIRUNLX1BBUkFNX1JFVFZBTFxubGliL0tjb25maWcua21zYW4tMjktXHRib29sIFwmIzM0O0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXCYjMzQ7XG4tLVxubGliL0tjb25maWcua21zYW4tNDEtXG5saWIvS2NvbmZpZy5rbXNhbjo0Mjpjb25maWcgS01TQU5fS1VOSVRfVEVTVFxubGliL0tjb25maWcua21zYW4tNDMtXHR0cmlzdGF0ZSBcJiMzNDtLTVNBTiBpbnRlZ3JhdGlvbiB0ZXN0IHN1aXRlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEtNU0FOIERlcGVuZGVuY2llcyBpbiB0aGUgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIEtNU0FOLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IEtNU0FOJiMzOTtzIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgdG8gYGxpYi9LY29uZmlnLmttc2FuYC4gSSBzdXNwZWN0IHRoaXMgZmlsZSBjb250YWlucyB0aGUgY3J1Y2lhbCBgY29uZmlnYCBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIEtNU0FOIGFuZCBsaWtlbHkgaXRzIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGNvbmRpdGlvbmFscyB0aGVyZSB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBLTVNBTiBjb2RlIGFuZCBpbnN0cnVtZW50YXRpb24gYXJlIGNvbXBpbGVkLCBwb3RlbnRpYWxseSBiYXNlZCBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIG9yIGV2ZW4gY29tcGlsZS10aW1lIGZsYWdzIHRoYXQgbWF5IGJlIHJlbGV2YW50IHRvIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBzdWNoIGFzIGAtZnNhbml0aXplPWttc2FuYC4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBwcm9wZXIgaW50ZWdyYXRpb24sIHRyb3VibGVzaG9vdGluZywgYW5kIG9wdGltaXphdGlvbiBvZiB0aGUgS01TQU4gYnVpbGQgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjdXN0b20ga2VybmVsIGJ1aWxkcyBvciBzcGVjaWFsaXplZCBoYXJkd2FyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IHZhcmlhYmxlcyB0byBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgY2xlYW4gYW5kIGNvcnJlY3QgS01TQU4gYnVpbGQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYEtjb25maWdgIGhhcyB0byB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmttc2FuJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhBVkVfQVJDSF9LTVNBTlxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXG4gICA2Olx0XHRkZWZfYm9vbCAkKGNjLW9wdGlvbiwtZnNhbml0aXplPWtlcm5lbC1tZW1vcnkpXG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIEtNU0FOXG4gICA5Olx0XHRib29sIFwmIzM0O0tNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcJiMzNDtcbiAgMTA6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tNU0FOIFx1MDAyNlx1MDAyNiBIQVZFX0tNU0FOX0NPTVBJTEVSXG4gIDExOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgIUtBU0FOIFx1MDAyNlx1MDAyNiAhS0NTQU5cbiAgMTI6XHRcdGRlcGVuZHMgb24gIVBSRUVNUFRfUlRcbiAgMTM6XHRcdHNlbGVjdCBTVEFDS0RFUE9UXG4gIDE0Olx0XHRzZWxlY3QgU1RBQ0tERVBPVF9BTFdBWVNfSU5JVFxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgKEtNU0FOKSBpcyBhIGR5bmFtaWMgZGV0ZWN0b3Igb2YgdXNlcyBvZlxuICAxNzpcdFx0ICB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiB0aGUga2VybmVsLiBJdCBpcyBiYXNlZCBvbiBjb21waWxlclxuICAxODpcdFx0ICBpbnN0cnVtZW50YXRpb24gcHJvdmlkZWQgYnkgQ2xhbmcgYW5kIHRodXMgcmVxdWlyZXMgQ2xhbmcgdG8gYnVpbGQuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIEFuIGltcG9ydGFudCBub3RlIGlzIHRoYXQgS01TQU4gaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aW9uIHVzZSxcbiAgMjE6XHRcdCAgYmVjYXVzZSBpdCBkcmFzdGljYWxseSBpbmNyZWFzZXMga2VybmVsIG1lbW9yeSBmb290cHJpbnQgYW5kIHNsb3dzXG4gIDIyOlx0XHQgIHRoZSB3aG9sZSBzeXN0ZW0gZG93bi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21zYW4ucnN0XHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gIDI1Olx0XG4gIDI2Olx0aWYgS01TQU5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgS01TQU5fQ0hFQ0tfUEFSQU1fUkVUVkFMXG4gIDI5Olx0XHRib29sIFwmIzM0O0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXCYjMzQ7XG4gIDMwOlx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1OTIKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG9wdGltYWwgZnV6emluZyBjb25maWd1cmF0aW9uIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBJIHNlZSB0aGF0IGBLTVNBTmAgaXMgZmxhZ2dlZCBhcyBhIHJlbGV2YW50IGNvbmZpZy4gQnV0IEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEFmdGVyIGFsbCwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBjb3JlIGtlcm5lbCBjb2RlIGFuZCBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkuIEVuYWJsaW5nIGBLTVNBTmAgY2xlYXJseSBhY3RpdmF0ZXMgdGhlIG5ldyBga21zYW5fYWxsb2NfcGFnZSgpYCBwYXRoLCB3aGljaCBpcyBpbXBvcnRhbnQsIGJ1dCBpcyBpdCB0aGUgKm9ubHkqIHBhdGggdG8gY29uc2lkZXI/CgpBbHJpZ2h0LCBuZXh0LCBgRm9jdXNTeW1ib2xzYC4gTGV0IG1lIGNvbmZpcm06IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgKmlzKiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHRoYXQmIzM5O3MgY29ycmVjdC4gTm93LCB3aGF0IGFyZSB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIGNhbGxlcnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgc2VlIGEgbGlzdDogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYGNvcHlfc3BsaWNlX3JlYWRgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYC4gRm9jdXNpbmcgZGlyZWN0bHkgb24gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBzaG91bGQgaW5kZWVkIGJlIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhpcyBidWxrIGFsbG9jYXRpb24gcGF0aC4KCk5vdywgbGV0JiMzOTtzIGNhcmVmdWxseSByZXZpZXcgdGhlIGluc3RydWN0aW9ucyBwcm92aWRlZCB0byBlbnN1cmUgSSBhbSBpbnRlcnByZXRpbmcgdGhpbmdzIGNvcnJlY3RseToKCiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4gRXhjZWxsZW50LiBUaGlzIGNvbmZpcm1zIG15IGludHVpdGlvbjsgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCB0aGVyZSYjMzk7cyBiZWVuIGEgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGBLTVNBTmAgaW5zdHJ1bWVudGF0aW9uIGFuZCBhIHRyYWNlcG9pbnQuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDtdYC4gQ29uZmlybWVkLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7S01TQU4mIzM0O11gIChvciBlbXB0eS9LTVNBTikuIFllcywgYEtNU0FOYCBpcyBuZWNlc3NhcnksIG9yIGFuIGVtcHR5IGNvbmZpZywgd2hpY2gsIGFzIEkgdW5kZXJzdGFuZCwgd2lsbCB1c2UgS01TQU4gdG8gZXhlcmNpc2UgYGttc2FuX2FsbG9jX3BhZ2VgLgoqICAgYFJlYXNvbmluZ2A6IFRoaXMgbWFrZXMgc2Vuc2UuIFRoZSByZWFzb25pbmcgZXhwbGFpbnMgdGhlIGNvbnRleHQgY2xlYXJseTogd2UgYXJlIGZ1enppbmcgZHVlIHRvIHRoZSBjb3JlIE1NIHN1YnN5c3RlbSBtb2RpZmljYXRpb24gd2l0aCBgS01TQU5gIGluc3RydW1lbnRhdGlvbiwgdGFyZ2V0aW5nIHRoZSBidWxrIHBhZ2UgYWxsb2NhdGlvbiBwYXRoLgoKT2theSwgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgZXZlcnl0aGluZy4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLiBJIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0YXJnZXQsIHRoZSBjb25maWd1cmF0aW9uLCBhbmQgdGhlIHJhdGlvbmFsZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIHByb3Blcmx5IGludm9rZSB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgYW5kIGttc2FuX2FsbG9jX3BhZ2UoKSBmb3IgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgcGVyLWNwdSBwYWdlIGFsbG9jYXRvci4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtNU0FOIHRyYWNraW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIHByb3Blcmx5IGludm9rZSB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgYW5kIGttc2FuX2FsbG9jX3BhZ2UoKSBmb3IgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgcGVyLWNwdSBwYWdlIGFsbG9jYXRvci4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtNU0FOIHRyYWNraW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXG5cbktNU0FOIHRyYWNrcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHBhZ2UgYWxsb2NhdGlvbnMgYnkgbWFya2luZyBub24tYF9fR0ZQX1pFUk9gIHBhZ2VzIHdpdGggdW5pbml0aWFsaXplZCBzaGFkb3cgYW5kIGNyZWF0aW5nIGFsbG9jYXRpb24gb3JpZ2lucy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrYCAvIGBhbGxvY19wYWdlc19idWxrX25vZGVgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCkgYnlwYXNzZWQgS01TQU4gdHJhY2tpbmcsIGxlYXZpbmcgS01TQU4gYmxpbmQgdG8gdW5pbml0aWFsaXplZCByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yaWdpbmF0aW5nIGZyb20gYnVsay1hbGxvY2F0ZWQgcGFnZXMgKHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBhY3Jvc3Mgdm1hbGxvYywgcGFnZSBwb29sIC8gbmV0d29yayBkcml2ZXJzLCBzcGxpY2UsIGJ0cmZzLCBmdXNlLCBhbmQgYnBmKS5cblxuU3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiBvbmx5IG1vbml0b3IgbWVtb3J5IGFjY2Vzc2liaWxpdHkgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYW5kIGNhbm5vdCBkZXRlY3QgcmVhZHMgb3IgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMganVzdGlmaWVkIHRvIHZhbGlkYXRlIHRoZSBLTVNBTiBob29rIGFuZCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBleHBvc2VkIGFjcm9zcyBhbGwgYnVsayBwYWdlIGFsbG9jYXRpb24gY2FsbCBzaXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE3OTQzZjY2NDY1ZThhZGI2M2NmYjJmMWM5NTdlNzBhOWUyNmUyZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMTJmYWM5MDg0YzQ4My4uMDJiYTE5ZjZkYmI1OSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTI4MCw2ICYjNDM7NTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCQlwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7CiAJCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7CiYjNDM7CQl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpOwomIzQzOwkJa21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApOwogCQlwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgZGVkaWNhdGluZyBzb21lIEtNU0FOIGZ1enppbmcgdGltZSB0byBpdC4gSSBzZWUgdGhleSYjMzk7dmUgYWRkZWQgYSBmZXcgbGluZXMgdG8gYG1tL3BhZ2VfYWxsb2MuY2AgYXJvdW5kIGxpbmUgNTI4MC4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBhIG5ldyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhIGJpdCBiZXR0ZXIgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCB0aGF0IGFyZWEgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgaW4gYnVsaywgd2hpY2ggY291bGQgYmUgYSBob3Qgc3BvdCBmb3IgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBUaGUgYWRkaXRpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHRoZSBrZXkgdGhpbmcsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2hlY2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLCBwZXJoYXBzPyBPciBpcyBpdCBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZD8gSWYgaXQmIzM5O3MgYSBuZXcgY2hlY2ssIHRoZW4gdGhhdCBtYWtlcyBpdCBpbnRlcmVzdGluZyB0byB0ZXN0LiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoaXMgcGF0aCB3aXRoIEtNU0FOIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjYwOlx0XHRwY3BfbGlzdCA9IFx1MDAyNnBjcC1cdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcbjUyNjE6XHRcdHdoaWxlIChucl9wb3B1bGF0ZWQgXHUwMDNjIG5yX3BhZ2VzKSB7XG41MjYyOlx0XG41MjYzOlx0XHRcdC8qIFNraXAgZXhpc3RpbmcgcGFnZXMgKi9cbjUyNjQ6XHRcdFx0aWYgKHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSkge1xuNTI2NTpcdFx0XHRcdG5yX3BvcHVsYXRlZCYjNDM7JiM0Mzs7XG41MjY2Olx0XHRcdFx0Y29udGludWU7XG41MjY3Olx0XHRcdH1cbjUyNjg6XHRcbjUyNjk6XHRcdFx0cGFnZSA9IF9fcm1xdWV1ZV9wY3BsaXN0KHpvbmUsIDAsIGFjLm1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyxcbjUyNzA6XHRcdFx0XHRcdFx0XHRcdFx0cGNwLCBwY3BfbGlzdCk7XG41MjcxOlx0XHRcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcbjUyNzI6XHRcdFx0XHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXG41MjczOlx0XHRcdFx0aWYgKCFucl9hY2NvdW50KSB7XG41Mjc0Olx0XHRcdFx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbjUyNzU6XHRcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTI3NjpcdFx0XHRcdH1cbjUyNzc6XHRcdFx0XHRicmVhaztcbjUyNzg6XHRcdFx0fVxuNTI3OTpcdFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbjUyODA6XHRcbjUyODE6XHRcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuNTI4MjpcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuNTI4MzpcdFx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuNTI4NDpcdFx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XG41Mjg1Olx0XHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuNTI4NjpcdFx0fVxuNTI4NzpcdFxuNTI4ODpcdFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XG41Mjg5Olx0XG41MjkwOlx0XHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xuNTI5MTpcdFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcbjUyOTI6XHRcbjUyOTM6XHRvdXQ6XG41Mjk0Olx0XHRyZXR1cm4gbnJfcG9wdWxhdGVkO1xuNTI5NTpcdFxuNTI5NjpcdGZhaWxlZDpcbjUyOTc6XHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcbjUyOTg6XHRcdGlmIChwYWdlKVxuNTI5OTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUzMDA6XHRcdGdvdG8gb3V0O1xuNTMwMTpcdH1cbjUzMDI6XHRFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG41MzAzOlx0XG41MzA0Olx0LypcbjUzMDU6XHQgKiBmcmVlX3BhZ2VzX2J1bGsgLSBGcmVlIGFuIGFycmF5IG9mIG9yZGVyLTAgcGFnZXNcbjUzMDY6XHQgKiBAcGFnZV9hcnJheTogQXJyYXkgb2YgcGFnZXMgdG8gZnJlZVxuNTMwNzpcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcbjUzMDg6XHQgKlxuNTMwOTpcdCAqIEZyZWUgdGhlIG9yZGVyLTAgcGFnZXMuIEFkamFjZW50IGVudHJpZXMgd2hvc2UgUEZOcyBmb3JtIGEgY29udGlndW91c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVsayBQYWdlIEFsbG9jYXRvciBJc3N1ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGdhcCBpbiB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciYjMzk7cyBmYXN0IHBhdGggd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKWAgZnVuY3Rpb24gYW5kIHRoZSBgdHJhY2VfbW1fcGFnZV9hbGxvYyguLi4pYCBjYWxscywgd2hpY2ggYXJlIGNydWNpYWwgZm9yIG1lbW9yeSBzYWZldHkgYW5kIHRyYWNpbmcsIHdlcmUgb21pdHRlZCB3aGVuIGhhbmRsaW5nIHBhZ2VzIHJldHJpZXZlZCBmcm9tIHRoZSBwZXItQ1BVIHBhZ2UgbGlzdCAodGhlIFBDUCBsaXN0KS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGhvdyBkb2VzIHRoaXMgYWZmZWN0IHRoZSBLTVNBTiBiZWhhdmlvcj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnNlcXVlbmNlcyB0aGVyZSBhcmUgd2hlbiBga21zYW5fYWxsb2NfcGFnZWAgKmlzKiBjYWxsZWQgdmVyc3VzIHdoZW4gaXQgKmlzbiYjMzk7dCouIFRoZSBLTVNBTiBpbnRlZ3JhdGlvbiBpcyBjcml0aWNhbCwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdmVyaWZ5IGhvdyB0aGlzIG92ZXJzaWdodCBjaGFuZ2VzIHRoZSBleHBlY3RlZCBtZW1vcnkgYmVoYXZpb3IuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYXNzZXNzIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rbXNhbi5oPTU3PWJvb2wgX19pbml0IF9fbXVzdF9jaGVjayBrbXNhbl9tZW1ibG9ja19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcbmluY2x1ZGUvbGludXgva21zYW4uaDo2MTogKiBrbXNhbl9hbGxvY19wYWdlKCkgLSBOb3RpZnkgS01TQU4gYWJvdXQgYW4gYWxsb2NfcGFnZXMoKSBjYWxsLlxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYyLSAqIEBwYWdlOiAgc3RydWN0IHBhZ2UgcG9pbnRlciByZXR1cm5lZCBieSBhbGxvY19wYWdlcygpLlxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC02OC0gKi9cbmluY2x1ZGUvbGludXgva21zYW4uaDo2OTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaD0zMTU9c3RhdGljIGlubGluZSB2b2lkIGttc2FuX3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMxOC1cbmluY2x1ZGUvbGludXgva21zYW4uaDozMTk6c3RhdGljIGlubGluZSB2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXHRcdFx0XHQgICAgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xubW0va21zYW4vc2hhZG93LmMtMTcwLVxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODQ6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTE2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgU2hhZG93IFJBTSDigJMgTGluZSAxNzEqKgoKT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBpc3N1ZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9rbXNhbi9zaGFkb3cuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzEuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgc29tZXRoaW5nIGlzIGFtaXNzIGluIHRoZSBzaGFkb3cgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCB0aGF0IHNlY3Rpb24gc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBwb3RlbnRpYWxseSBhbiBpc3N1ZSB3aXRoIGhvdyBLTVNBTiBpcyBtYXBwaW5nIG9yIGludGVyYWN0aW5nIHdpdGggdGhlIHNoYWRvdyBtZW1vcnkgcmVnaW9ucy4gTWF5YmUgYSByYWNlIGNvbmRpdGlvbiwgYSBtaXNjYWxjdWxhdGlvbiBpbiB0aGUgb2Zmc2V0LCBvciBhIHByb2JsZW0gd2l0aCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIHNoYWRvdyBSQU0gbWFwcGluZz8gTGV0JiMzOTtzIGNoZWNrIHRoZXJlIGFuZCBzZWUgaWYgbXkgaHVuY2ggaG9sZHMgYW55IHdhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ttc2FuL3NoYWRvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG4gMTcyOlx0e1xuIDE3MzpcdFx0Ym9vbCBpbml0aWFsaXplZCA9IChmbGFncyBcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XG4gMTc0Olx0XHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xuIDE3NTpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDE3NjpcdFx0aW50IHBhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gMTc3Olx0XG4gMTc4Olx0XHRpZiAoIXBhZ2UpXG4gMTc5Olx0XHRcdHJldHVybjtcbiAxODA6XHRcbiAxODE6XHRcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcbiAxODI6XHRcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcbiAxODM6XHRcbiAxODQ6XHRcdGlmIChpbml0aWFsaXplZCkge1xuIDE4NTpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NjpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Mob3JpZ2luKSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NzpcdFx0XHRyZXR1cm47XG4gMTg4Olx0XHR9XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiBaZXJvIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgcnVudGltZSBzaG91bGQgYWxzbyBiZSBpbml0aWFsaXplZC4gKi9cbiAxOTE6XHRcdGlmIChrbXNhbl9pbl9ydW50aW1lKCkpXG4gMTkyOlx0XHRcdHJldHVybjtcbiAxOTM6XHRcbiAxOTQ6XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhzaGFkb3cpLCAtMSwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE5NTpcdFx0a21zYW5fZW50ZXJfcnVudGltZSgpO1xuIDE5NjpcdFx0aGFuZGxlID0ga21zYW5fc2F2ZV9zdGFja193aXRoX2ZsYWdzKGZsYWdzLCAvKmV4dHJhX2JpdHMqLyAwKTtcbiAxOTc6XHRcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbiAxOTg6XHRcdC8qXG4gMTk5Olx0XHQgKiBBZGRyZXNzZXMgYXJlIHBhZ2UtYWxpZ25lZCwgcGFnZXMgYXJlIGNvbnRpZ3VvdXMsIHNvIGl0JiMzOTtzIG9rXG4gMjAwOlx0XHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXG4gMjAxOlx0XHQgKi9cbiAyMDI6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgKiBwYWdlcyAvIHNpemVvZihoYW5kbGUpOyBpJiM0MzsmIzQzOylcbiAyMDM6XHRcdFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiAyMDc6XHR7XG4gMjA4Olx0XHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxuIDIwOTpcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIE5lZWRzIENvbnNpZGVyYXRpb24gZm9yIEJ1bGsgUGFnZSBBbGxvY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBjcnVjaWFsIG92ZXJzaWdodCBpbiBob3cgS01TQU4gaGFuZGxlcyBidWxrIHBhZ2UgYWxsb2NhdGlvbnMgdmlhIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFByZXZpb3VzbHksIGBrbXNhbl9hbGxvY19wYWdlKClgIHdhcyBtaXNzaW5nIGZyb20gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgcGF0aCwgbWVhbmluZyBLTVNBTiBjb3VsZG4mIzM5O3QgcHJvcGVybHkgdHJhY2sgdGhlIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBwYWdlcyBhbGxvY2F0ZWQgaW4gYnVsay4gVGhpcyBtZWFudCB0aGF0IG1lbW9yeSBhbGxvY2F0ZWQgd2l0aG91dCBgX19HRlBfWkVST2AgdmlhIGBhbGxvY19wYWdlc19idWxrYCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIHN0YWxlIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aGF0IEtNU0FOIHdvdWxkbiYjMzk7dCBjYXRjaC4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBpcyBiZWluZyBhZGRlZCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaXQuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IEtNU0FOIHdpbGwgbm93IGFjdGl2ZWx5IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBwYWdlcyBhbGxvY2F0ZWQgdGhyb3VnaCB0aGUgYnVsayBwYWdlIGFsbG9jYXRvci4gVGhpcyBpcyBhIGdhbWUtY2hhbmdlciBiZWNhdXNlIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgIOKAkyB0aGluZ3MgbGlrZSBuZXR3b3JrIGRyaXZlcnMsIHBhZ2UgY2FjaGUgcmVhZGFoZWFkLCBhbmQgb3RoZXIgY3JpdGljYWwgY29tcG9uZW50cyDigJMgY2FuIG5vdyBiZSBzY3J1dGluaXplZCBmb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmZyb20qIGJ1bGstYWxsb2NhdGVkIHBhZ2VzLiBBbmQgaWYgdGhleSBzZW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBLTVNBTiB3aWxsIGNhdGNoIGl0LgoKQnV0Li4uIGRvIHdlIGFjdHVhbGx5IG5lZWQgS01TQU4gZm9yIHRoaXM/IExldCBtZSBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTj10cnVlYC4gSSBuZWVkIHRvIGFzayBteXNlbGYsIGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgb3IgbW9kaWZ5aW5nIGFueSBvZiB0aGUgZm9sbG93aW5nPwoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQuCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuCjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpBbmQsIGNyaXRpY2FsbHksIGlzIHRoaXMgYSAqS01TQU4tc3BlY2lmaWMqIGlzc3VlPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBzdGFuZGFyZCBLQVNBTiBjb3ZlcnMgYSBsb3QuIElmIGEgYnVnIGNvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycywgdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4uIEtNU0FOIGlzIGV4cGVuc2l2ZSwgYW5kIGl0IGhhcyB0byBleHBvc2UgdGhpbmdzIHRoYXQgd291bGQgbm90IGJlIGV4cG9zZWQgYnkgdGhlIG90aGVyIGRldGVjdG9ycy4KCk9rYXksIGJhY2sgdG8gdGhlIHByb2JsZW0uIEJ5IGFkZGluZyBga21zYW5fYWxsb2NfcGFnZSgpYCwgd2UgYXJlICplbmFibGluZyogS01TQU4gdG8gcHJvcGVybHkgcG9pc29uIGFuZCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSAqZHVyaW5nKiBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBLTVNBTiAqY291bGRuJiMzOTt0KiBkbyB0aGlzIGJlZm9yZS4gSXQgd2FzIGEgYmxpbmQgc3BvdC4KClNwZWNpZmljYWxseSwgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKWAgaXMgZGVzaWduZWQgdG8gbWFyayB0aGUgcGFnZSBzaGFkb3cgYXMgdW5pbml0aWFsaXplZCAoYC0xYCkgaWYgYF9fR0ZQX1pFUk9gIGlzICpub3QqIHNldC4gTm93LCB3aGVuIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3BhZ2VzX2J1bGtgLCBhY3Jvc3MgdGhlIGtlcm5lbCAobmV0d29ya2luZywgY3J5cHRvLCBldGMuKSwgS01TQU4gY2FuIGRldGVjdCB0aGlzLiBUaGlzICpkaXJlY3RseSogaW1wYWN0cyBLTVNBTiYjMzk7cyBpbnN0cnVtZW50YXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2UgYWxsb2NhdGlvbikuIFRoaXMgbm93IGVuYWJsZXMgdXMgdG8gZGV0ZWN0IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBwYWdlcy4KCldhaXQsIGlzIGl0IGp1c3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgY2hhbmdlPyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgZGlmZmVyZW50IGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYWxzbyB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa19hcnJheWAgYW5kIGBhbGxvY19wYWdlc19idWxrX2xpc3RgIGFyZSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtYWtlIGEgY2FsbCBvbiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NjUKCQkJCQkJCW91dHB1dDogMjc3CgkJCQkJCQl0aG91Z2h0czogMTM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBCdWxrIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgc2FmZXR5LCBwYXJ0aWN1bGFybHkgd2l0aCBLTVNBTi4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGUgcGF0Y2ggZG9lczogaXQmIzM5O3MgYWRkaW5nIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgdXNlZCBFVkVSWVdIRVJFIOKAkyBgdm1hbGxvY2AsIG5ldHdvcmsgcGFnZSBwb29scywgYHNwbGljZWAsIGZpbGVzeXN0ZW1zLCBCUEYsIGBpb191cmluZ2AsIFJQQywgeW91IG5hbWUgaXQuIFRoZSBzaWduaWZpY2FudCB0aGluZyBpcyB0aGF0LCAqYmVmb3JlKiB0aGlzIHBhdGNoLCBpZiBwYWdlcyB3ZXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBQQ1AgbGlzdCDigJMgdGhlIGZhc3QgcGF0aCDigJMgS01TQU4mIzM5O3MgaW5pdGlhbGl6YXRpb24gdHJhY2tpbmcgd2FzIHNraXBwZWQuIFRoaXMgbWVhbnMgS01TQU4gd2FzIGNvbXBsZXRlbHkgYmxpbmQgdG8gdW5pbml0aWFsaXplZCBwYWdlcyBhbGxvY2F0ZWQgdmlhIGBhbGxvY19wYWdlc19idWxrYC4KClNvLCB0aGUga2V5IGhlcmUgaXMgdGhhdCBieSBhZGRpbmcgdGhpcyBob29rLCBwYWdlcyBhbGxvY2F0ZWQgd2l0aG91dCBgX19HRlBfWkVST2Agd2lsbCBiZSBtYXJrZWQgYXMgdW5pbml0aWFsaXplZC4gQ29udmVyc2VseSwgcGFnZXMgYWxsb2NhdGVkIHdpdGggYF9fR0ZQX1pFUk9gIHdpbGwgYmUgbWFya2VkIGFzIGluaXRpYWxpemVkLiBOb3csIGFueSBjb2RlIHJlYWRpbmcgZnJvbSB0aGVzZSBwYWdlcyAqYmVmb3JlKiBpbml0aWFsaXppbmcgdGhlbSwgb3IgbGVha2luZyB0aG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzIHRvIHVzZXIgc3BhY2UsIHdpbGwgdHJpZ2dlciBLTVNBTi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBMT1Qgb2YgcG90ZW50aWFsIGNvZGUgcGF0aHMgbm93IGJlaW5nIHNjcnV0aW5pemVkLCB0aGluZ3MgbGlrZSBgY29weV9zcGxpY2VfcmVhZGAsIGBmdXNlX3JlYWRkaXJgLCBuZXR3b3JrIHJlY2VpdmUgaGFuZGxpbmcsIGB2bWFsbG9jYCwgQnRyZnMsIEJQRiBhcmVuYSwgYGlvX3VyaW5nYCwgZXRjLiBUaGlzIGVuYWJsZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgYWNyb3NzICphbGwqIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBDb3VsZCBLQVNBTiBjYXRjaCB0aGlzPyBOby4gS0FTQU4gaXMgZ3JlYXQgYXQgZGV0ZWN0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZXMsIGV0Yy4gSXQgZm9jdXNlcyBvbiBtZW1vcnkgdmFsaWRpdHksIG5vdCBpbml0aWFsaXphdGlvbiBzdGF0ZS4gS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIEkgaGF2ZSB0byBiZSBjcnlzdGFsIGNsZWFyIG9uIHRoaXMgYmVjYXVzZSBvZiB0aGUgS01TQU4gcnVsZXMgYW5kIGNyaXRlcmlhLiBXZSYjMzk7cmUgb25seSBqdXN0aWZpZWQgaW4gcnVubmluZyBhIEtNU0FOIHNlc3Npb24gaWYgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBkb24mIzM5O3QgY2F0Y2ggdGhlIHByb2JsZW0uCgpMZXQmIzM5O3MgY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIEtNU0FOIGNyaXRlcmlhOiB3ZSBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgb25seSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KCkluIHRoaXMgY2FzZSwgaXQmIzM5O3MgbW9zdCByZWxldmFudCB0byBpdGVtIDM6IHRoaXMgcGF0Y2ggKmRpcmVjdGx5KiBhZGRyZXNzZXMgbWlzc2luZyBLTVNBTiBob29rcyBpbiB0aGUgY29yZSBidWxrIHBhZ2UgYWxsb2NhdG9yLiBXZSBhcmUgZXhwbGljaXRseSBjaGFuZ2luZyBob3cgS01TQU4gdHJhY2tzIGluaXRpYWxpemF0aW9uIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNjZW5hcmlvIEtNU0FOIGlzIGRlc2lnbmVkIGZvciBiZWNhdXNlIHRoaXMgd2lsbCBjb3ZlciBhbGwgY29kZSBwYXRocyB0aGF0IHVzZSBgYWxsb2NfcGFnZXNfYnVsa2AuIFdlIGhhdmUgYSBjbGVhciBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCB3aGljaCBLQVNBTiBjYW5ub3QgY2F0Y2guCgpTbywgaXMgdGhlcmUgKmFueSogYW1iaWd1aXR5PyBObywgS0FTQU4gZG9lcyBub3QgdHJhY2sgaW5pdGlhbGl6YXRpb24sIG9ubHkgdmFsaWRpdHkuIEJlZm9yZSB0aGlzLCBLTVNBTiB3YXMgYmxpbmQgdG8gYnVsay1hbGxvY2F0ZWQgcGFnZXMuIFdpdGggdGhpcyBwYXRjaCwgd2UmIzM5O3JlIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbiBmb3IgZXZlcnkgc2luZ2xlIGBhbGxvY19wYWdlc19idWxrYCBhbGxvY2F0aW9uLiBUaGlzIGlzIGEgc29saWQganVzdGlmaWNhdGlvbiBmb3IgYE5lZWRzS01TQU49dHJ1ZWAuCgpUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj10cnVlYC4gTXkgcmVhc29uaW5nIGlzOgoxLiBUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGhvb2tzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4KMi4gS01TQU4gd2lsbCBub3cgdHJhY2sgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIHRoZXNlIHBhZ2VzIGFuZCBmbGFnIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGRvZXMgbm90IGRvIHRoaXMuIFdpdGhvdXQgdGhpcyBwYXRjaCwgS01TQU4gd2FzIGJsaW5kIHRvIGJ1bGsgYWxsb2NhdGlvbnMuIFRoaXMgYWxsb3dzIHVzIHRvIHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyBpbiB0aGUga2VybmVsLgozLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXG5cbktNU0FOIHRyYWNrcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHBhZ2UgYWxsb2NhdGlvbnMgYnkgbWFya2luZyBub24tYF9fR0ZQX1pFUk9gIHBhZ2VzIHdpdGggdW5pbml0aWFsaXplZCBzaGFkb3cgYW5kIGNyZWF0aW5nIGFsbG9jYXRpb24gb3JpZ2lucy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrYCAvIGBhbGxvY19wYWdlc19idWxrX25vZGVgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCkgYnlwYXNzZWQgS01TQU4gdHJhY2tpbmcsIGxlYXZpbmcgS01TQU4gYmxpbmQgdG8gdW5pbml0aWFsaXplZCByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yaWdpbmF0aW5nIGZyb20gYnVsay1hbGxvY2F0ZWQgcGFnZXMgKHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBhY3Jvc3Mgdm1hbGxvYywgcGFnZSBwb29sIC8gbmV0d29yayBkcml2ZXJzLCBzcGxpY2UsIGJ0cmZzLCBmdXNlLCBhbmQgYnBmKS5cblxuU3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiBvbmx5IG1vbml0b3IgbWVtb3J5IGFjY2Vzc2liaWxpdHkgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYW5kIGNhbm5vdCBkZXRlY3QgcmVhZHMgb3IgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMganVzdGlmaWVkIHRvIHZhbGlkYXRlIHRoZSBLTVNBTiBob29rIGFuZCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBleHBvc2VkIGFjcm9zcyBhbGwgYnVsayBwYWdlIGFsbG9jYXRpb24gY2FsbCBzaXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXG5cbktNU0FOIHRyYWNrcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHBhZ2UgYWxsb2NhdGlvbnMgYnkgbWFya2luZyBub24tYF9fR0ZQX1pFUk9gIHBhZ2VzIHdpdGggdW5pbml0aWFsaXplZCBzaGFkb3cgYW5kIGNyZWF0aW5nIGFsbG9jYXRpb24gb3JpZ2lucy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrYCAvIGBhbGxvY19wYWdlc19idWxrX25vZGVgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCkgYnlwYXNzZWQgS01TQU4gdHJhY2tpbmcsIGxlYXZpbmcgS01TQU4gYmxpbmQgdG8gdW5pbml0aWFsaXplZCByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yaWdpbmF0aW5nIGZyb20gYnVsay1hbGxvY2F0ZWQgcGFnZXMgKHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBhY3Jvc3Mgdm1hbGxvYywgcGFnZSBwb29sIC8gbmV0d29yayBkcml2ZXJzLCBzcGxpY2UsIGJ0cmZzLCBmdXNlLCBhbmQgYnBmKS5cblxuU3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiBvbmx5IG1vbml0b3IgbWVtb3J5IGFjY2Vzc2liaWxpdHkgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYW5kIGNhbm5vdCBkZXRlY3QgcmVhZHMgb3IgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMganVzdGlmaWVkIHRvIHZhbGlkYXRlIHRoZSBLTVNBTiBob29rIGFuZCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBleHBvc2VkIGFjcm9zcyBhbGwgYnVsayBwYWdlIGFsbG9jYXRpb24gY2FsbCBzaXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzoxNC42Njc2OTQ5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1OTUwNDk4NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktNU0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdGhlIG1pc3NpbmcgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGNhbGxzIHRvIHRoZSBQQ1AgZmFzdCBwYXRoIG9mIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yIChgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWApLlxcblxcbktNU0FOIHRyYWNrcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdHVzIG9mIHBhZ2UgYWxsb2NhdGlvbnMgYnkgbWFya2luZyBub24tYF9fR0ZQX1pFUk9gIHBhZ2VzIHdpdGggdW5pbml0aWFsaXplZCBzaGFkb3cgYW5kIGNyZWF0aW5nIGFsbG9jYXRpb24gb3JpZ2lucy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrYCAvIGBhbGxvY19wYWdlc19idWxrX25vZGVgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCkgYnlwYXNzZWQgS01TQU4gdHJhY2tpbmcsIGxlYXZpbmcgS01TQU4gYmxpbmQgdG8gdW5pbml0aWFsaXplZCByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIG9yaWdpbmF0aW5nIGZyb20gYnVsay1hbGxvY2F0ZWQgcGFnZXMgKHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBhY3Jvc3Mgdm1hbGxvYywgcGFnZSBwb29sIC8gbmV0d29yayBkcml2ZXJzLCBzcGxpY2UsIGJ0cmZzLCBmdXNlLCBhbmQgYnBmKS5cXG5cXG5TdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIG9ubHkgbW9uaXRvciBtZW1vcnkgYWNjZXNzaWJpbGl0eSAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhbmQgY2Fubm90IGRldGVjdCByZWFkcyBvciBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBqdXN0aWZpZWQgdG8gdmFsaWRhdGUgdGhlIEtNU0FOIGhvb2sgYW5kIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIGV4cG9zZWQgYWNyb3NzIGFsbCBidWxrIHBhZ2UgYWxsb2NhdGlvbiBjYWxsIHNpdGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBhbGxvY19wYWdlc19idWxrX25vcHJvZiBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gcHJvcGVybHkgaW52b2tlIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBhbmQga21zYW5fYWxsb2NfcGFnZSgpIGZvciBwYWdlcyBhbGxvY2F0ZWQgdmlhIHRoZSBwZXItY3B1IHBhZ2UgYWxsb2NhdG9yLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS01TQU4gdHJhY2tpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjE0LjY2NzcwMzU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMwMzExNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMTc5NDNmNjY0NjVlOGFkYjYzY2ZiMmYxYzk1N2U3MGE5ZTI2ZTJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggMTJmYWM5MDg0YzQ4My4uMDJiYTE5ZjZkYmI1OSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtNTI4MCw2ICs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbiBcXG4gXFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbiBcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xcbitcXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbitcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XFxuIFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MTUuMjQxNTE4MTIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTU1Mjk3NDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBhbGxvY19wYWdlc19idWxrX25vcHJvZiBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gcHJvcGVybHkgaW52b2tlIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBhbmQga21zYW5fYWxsb2NfcGFnZSgpIGZvciBwYWdlcyBhbGxvY2F0ZWQgdmlhIHRoZSBwZXItY3B1IHBhZ2UgYWxsb2NhdG9yLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS01TQU4gdHJhY2tpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDE3OTQzZjY2NDY1ZThhZGI2M2NmYjJmMWM5NTdlNzBhOWUyNmUyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDM6NTM6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjAyYmExOWY2ZGJiNTkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyODAsNiArNTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcbiBcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuK1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuK1x0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjE1LjI0MTUxOTM2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzODIxMzU5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJJ2QgdGhpbmsgaXQgdGhyb3VnaDpcblxuKipBbmFseXppbmcgYSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBgbW0vcGFnZV9hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHRoYXQgZnVuY3Rpb24uIEl0J3MgcmVsYXRlZCB0byBidWxrIHBhZ2UgYWxsb2NhdGlvbiwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCdzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYSBvciBwYXJ0IG9mIHNvbWUgb3B0aW1pemF0aW9uLlxuXG5Ob3csIEknbGwgbmVlZCB0byBzZWUgdGhlIGNvZGUsIGFuZCBxdWlja2x5LiBJbnN0ZWFkIG9mIGp1c3Qgc3RhcmluZyBibGluZGx5LCBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCB0aGF0IGNvZGUgdXAgb24gbXkgc2NyZWVuLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTI4MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY2h1bmsgb2YgdGhlIGNvbnRleHQgLSB3aGF0IGNhbWUgYmVmb3JlLCBhbmQgd2hhdCdzIGNoYW5nZWQgaW4gdGhpcyBzcGVjaWZpYyByZWdpb24gb2YgY29kZS4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgYXJvdW5kIGl0IHRvbywgaW4gY2FzZSB0aGlzIGltcGFjdHMgYW5vdGhlciBhc3BlY3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgY2hhbmdlcyB0aGF0IGFyZSBiZWluZyBtYWRlIGFuZCB3aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjIxLjYyMzY1NzM3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTI1MDpcXHRcXHQgKi9cXG41MjUxOlxcdFxcdGlmICh1bmxpa2VseSghem9uZSkpXFxuNTI1MjpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41MjUzOlxcdFxcbjUyNTQ6XFx0XFx0Lyogc3Bpbl90cnlsb2NrIG1heSBmYWlsIGR1ZSB0byBhIHBhcmFsbGVsIGRyYWluIG9yIElSUSByZWVudHJhbmN5LiAqL1xcbjUyNTU6XFx0XFx0cGNwID0gcGNwX3NwaW5fdHJ5bG9jayh6b25lLVxcdTAwM2VwZXJfY3B1X3BhZ2VzZXQpO1xcbjUyNTY6XFx0XFx0aWYgKCFwY3ApXFxuNTI1NzpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41MjU4OlxcdFxcbjUyNTk6XFx0XFx0LyogQXR0ZW1wdCB0aGUgYmF0Y2ggYWxsb2NhdGlvbiAqL1xcbjUyNjA6XFx0XFx0cGNwX2xpc3QgPSBcXHUwMDI2cGNwLVxcdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcXG41MjYxOlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjUyNjI6XFx0XFxuNTI2MzpcXHRcXHRcXHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXFxuNTI2NDpcXHRcXHRcXHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XFxuNTI2NTpcXHRcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MjY2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUyNjc6XFx0XFx0XFx0fVxcbjUyNjg6XFx0XFxuNTI2OTpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxcbjUyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGNwLCBwY3BfbGlzdCk7XFxuNTI3MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuNTI3MjpcXHRcXHRcXHRcXHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXFxuNTI3MzpcXHRcXHRcXHRcXHRpZiAoIW5yX2FjY291bnQpIHtcXG41Mjc0OlxcdFxcdFxcdFxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyNzU6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTI3NjpcXHRcXHRcXHRcXHR9XFxuNTI3NzpcXHRcXHRcXHRcXHRicmVhaztcXG41Mjc4OlxcdFxcdFxcdH1cXG41Mjc5OlxcdFxcdFxcdG5yX2FjY291bnQrKztcXG41MjgwOlxcdFxcbjUyODE6XFx0XFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbjUyODI6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41MjgzOlxcdFxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxuNTI4NDpcXHRcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XFxuNTI4NTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTI4NjpcXHRcXHR9XFxuNTI4NzpcXHRcXG41Mjg4OlxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyODk6XFx0XFxuNTI5MDpcXHRcXHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xcbjUyOTE6XFx0XFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcXG41MjkyOlxcdFxcbjUyOTM6XFx0b3V0OlxcbjUyOTQ6XFx0XFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcXG41Mjk1OlxcdFxcbjUyOTY6XFx0ZmFpbGVkOlxcbjUyOTc6XFx0XFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xcbjUyOTg6XFx0XFx0aWYgKHBhZ2UpXFxuNTI5OTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTMwMDpcXHRcXHRnb3RvIG91dDtcXG41MzAxOlxcdH1cXG41MzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG41MzAzOlxcdFxcbjUzMDQ6XFx0LypcXG41MzA1OlxcdCAqIGZyZWVfcGFnZXNfYnVsayAtIEZyZWUgYW4gYXJyYXkgb2Ygb3JkZXItMCBwYWdlc1xcbjUzMDY6XFx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcXG41MzA3OlxcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcXG41MzA4OlxcdCAqXFxuNTMwOTpcXHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MjEuNjIzOTQ5MTQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTc5MjE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgQWxsb2NhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoYXQgdGhleSd2ZSBhZGRlZCBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxscyB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgYnVsayBwYWdlIGFsbG9jYXRpb24uIFxuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgdGhlc2UgYWRkaXRpb25zIGFyZSBpc29sYXRlZCB0byB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLCBvciBpZiB0aGV5J3JlIHBhcnQgb2YgYSBicm9hZGVyIHBhdHRlcm4gd2l0aGluIHRoZSBgYWxsb2NfcGFnZXNfYnVsaypgIGZhbWlseS4gSSB3YW50IHRvIGNoZWNrIGBhbGxvY19wYWdlc19idWxrX2FycmF5X21lbXBvbGljeV9ub3Byb2ZgIGFuZCBhbnkgb3RoZXIgdmFyaWF0aW9ucyB0byBzZWUgdGhlIHNjb3BlLiBBcmUgdGhleSBjb25zaXN0ZW50bHkgYmVpbmcgdXNlZD8gTXkgbmV4dCBzdGVwIGlzIHRvIHNlYXJjaCBmb3IgYGFsbG9jX3BhZ2VzX2J1bGtgIGFjcm9zcyBgbW0vcGFnZV9hbGxvYy5jYCwgb3IgcG90ZW50aWFsbHkgdGhlIHdpZGVyIGNvZGViYXNlLCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFyZSBiZWluZyBpbnRlZ3JhdGVkIGFuZCB3aGVyZSBlbHNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzoyMy44NzM3NDU2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyMzYyNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MjMuOTgwOTk1NjEzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0NzcxODk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEJ1bGsgUGFnZSBBbGxvY2F0aW9uIFVzYWdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBidWxrIHBhZ2UgYWxsb2NhdGlvbiBmdW5jdGlvbnMg4oCTIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBpdHMgc2libGluZ3MgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19hcnJheWAgYW5kIGBhbGxvY19wYWdlc19idWxrX2xpc3RgLiBJIGtub3cgdGhleSdyZSBzcHJpbmtsZWQgdGhyb3VnaG91dCBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGtlcm5lbCwgdGhpbmdzIGxpa2UgZHJpdmVycywgbmV0d29yayBzdWJzeXN0ZW1zLCBhbmQgZmlsZXN5c3RlbXMgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiAqd2hvKiBpcyB1c2luZyB0aGVzZSBhbmQgKmhvdyouIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlyZSB1cCBhIGBncmVwYCBhY3Jvc3MgdGhlIGNvZGViYXNlLiBJIHdhbnQgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgYWxsIHRoZSBjYWxsZXJzIG9mIGBhbGxvY19wYWdlc19idWxrYCDigJMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFsbCB2YXJpYW50cy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWQgc3Ryb2tlcyBvZiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGFuZCB3aGF0IHRoZSBjb21tb24gcGF0dGVybnMgYXJlIGluIHRoZWlyIHVzZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFuZHNjYXBlIGJlZm9yZSBJIGRlbHZlIGZ1cnRoZXIgaW50byBzcGVjaWZpYyBpbnN0YW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzoyNS44Mjg3MTgxNThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2ODE3MzQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNC1cXHQgKlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDU6XFx0ICogTm90ZTogYWxsb2NfcGFnZXNfYnVsayBuZWVkcyB0aGUgYXJyYXkgdG8gYmUgemVyb2VkLCBhcyBpdCBhc3N1bWVzXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cXHQgKiBhbnkgbm9uLXplcm8gc2xvdCBhbHJlYWR5IGNvbnRhaW5zIGEgdmFsaWQgYWxsb2NhdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXFx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA5OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTAtXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3NlZ3MpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM9MzE9aW50IGZ3X2lzb19idWZmZXJfYWxsb2Moc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgaW50IHBhZ2VfY291bnQpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDEtXFx0Ly8gY29udmVuaWVuY2UgdG8gbWFwIHRoZW0gaW50byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdXNlciBwcm9jZXNzLlxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiB8IF9fR0ZQX1pFUk8sXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfY291bnQsIHBhZ2VfYXJyYXkpO1xcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM9ODQ4PXN0YXRpYyBpbnQgYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLFxcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVxcdC8vIGFkZHJlc3MgcmFuZ2UgaW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS5cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYzo4NjU6XFx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjYtXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI2LVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgYm8tXFx1MDAzZXBnbnIsIGJvLVxcdTAwM2VwYWdlcyk7XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjgtXFx0LypcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcXHQgKiBhbGxvY19wYWdlc19idWxrKCkgZG9lcyBub3QgdHJ5IHZlcnkgaGFyZCB0byBnZXQgcGFnZXMgdW5kZXIgbWVtb3J5XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MzAtXFx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ2Nj1zdGF0aWMgdm9pZCBmcmVlX3BhZ2VfbGlzdCh1MzIgbnBhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NjktXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjQ3MDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NzEtXFx0Zm9yIChpID0gbnBhZ2VzIC0gMTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDk2PXN0YXRpYyBpbnQgbWx4NXZmX2FkZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKipwYWdlX2xpc3QsIHVuc2lnbmVkIGludCBucGFnZXMpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA2LVxcdGZvciAoOzspIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3OlxcdFxcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBucGFnZXMgLSBkb25lLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXFx0XFx0XFx0XFx0XFx0ICAqcGFnZV9saXN0ICsgZG9uZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTc4LVxcdGRvIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6Nzk6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTgwLVxcdFxcdFxcdFxcdFxcdCAgcGFnZV9saXN0KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz0xMTA9c3RhdGljIHZvaWQgdmlydGlvdmZfZnJlZV9kYXRhX2J1ZmZlcihzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTMtXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjExNDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTUtXFx0Zm9yX2VhY2hfc2d0YWJsZV9wYWdlKFxcdTAwMjZidWYtXFx1MDAzZXRhYmxlLnNndCwgXFx1MDAyNnNnX2l0ZXIsIDApXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xcbi0tXFxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxcbi0tXFxuZnMvZXJvZnMvenV0aWwuYy04OS1cXHRcXHRcXHRsYXN0ID0gajtcXG5mcy9lcm9mcy96dXRpbC5jOjkwOlxcdFxcdFxcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XFxuZnMvZXJvZnMvenV0aWwuYy05MS1cXHRcXHRcXHRpZiAobGFzdCA9PSBqKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XFx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVxcdGlmICghbnJfYWxsb2MpXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxcbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXFx1MDAzZW5jbl9wYWdlcyk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVxcdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcXG4tLVxcbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5mcy9zcGxpY2UuYy0zNDEtXFx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICsgbnBhZ2VzKTtcXG5mcy9zcGxpY2UuYzozNDI6XFx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XFxuZnMvc3BsaWNlLmMtMzQzLVxcdGlmICghbnBhZ2VzKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMi1cXHRcXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIxNj12b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxOS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI1OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcXHRfX2FsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyOTphbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIE5VTEwsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzg6I2RlZmluZSBhbGxvY19wYWdlc19idWxrX25vZGUoLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MC1cXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xOTItXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIE5VTUFfTk9fTk9ERSxcXG5pb191cmluZy9tZW1tYXAuYy0xOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBtci1cXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzMzOlxcdFxcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNC1cXHRcXHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jPTM5MT12bV9tYXBfcmFtX3Rlc3Qodm9pZClcXG4tLVxcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDMtXFxubGliL3Rlc3Rfdm1hbGxvYy5jOjQwNDpcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDUtXFx0aWYgKG5yX2FsbG9jYXRlZCAhPSBtYXBfbnJfcGFnZXMpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz01MT1zdGF0aWMgdm9pZCAqX19pbml0IGlvdl9rdW5pdF9jcmVhdGVfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVxcdFxcdGxhc3QgPSBnb3Q7XFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XFx0XFx0Z290ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTc3Nz1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy03OTMtXFxubW0vYWxsb2NfdGFnLmM6Nzk0OlxcdFxcdFxcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLFxcbm1tL2FsbG9jX3RhZy5jLTc5NS1cXHRcXHRcXHRcXHROVU1BX05PX05PREUsIG1vcmVfcGFnZXMgLSBuciwgbmV4dF9wYWdlICsgbnIpO1xcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9MzI3PXN0YXRpYyB2b2lkIF9fX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zMzgtXFxubW0va2FzYW4vc2hhZG93LmM6MzM5OnN0YXRpYyBpbnQgX19fYWxsb2NfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrKVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDQtXFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxubW0va2FzYW4vc2hhZG93LmM6MzQ1OlxcdFxcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XFxubW0va2FzYW4vc2hhZG93LmMtMzQ2LVxcdFxcdGlmICghbnJfcG9wdWxhdGVkKSB7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zNTc9c3RhdGljIGludCBfX2thc2FuX3BvcHVsYXRlX3ZtYWxsb2NfZG8odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMzY5LVxcdFxcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xcbm1tL2thc2FuL3NoYWRvdy5jOjM3MDpcXHRcXHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XFxubW0va2FzYW4vc2hhZG93LmMtMzcxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNTg5PUVYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9wcm9mKTtcXG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxcbm1tL21lbXBvbGljeS5jOjI1OTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNTkyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MDctXFx0XFx0aWYgKGRlbHRhKSB7XFxubW0vbWVtcG9saWN5LmM6MjYwODpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYwOS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtcG9saWN5LmM6MjYxNDpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYxNS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjI1LVxcbm1tL21lbXBvbGljeS5jOjI2MjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2NjQtXFx0XFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XFxubW0vbWVtcG9saWN5LmM6MjY2NTpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI2NjYtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MDEtXFx0LypcXG5tbS9tZW1wb2xpY3kuYzoyNzAyOlxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbm1tL21lbXBvbGljeS5jLTI3MDMtXFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MjktXFx0XFx0XFx0YnJlYWs7XFxubW0vbWVtcG9saWN5LmM6MjczMDpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI3MzEtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NDMtXFxubW0vbWVtcG9saWN5LmM6Mjc0NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTMtXFxubW0vbWVtcG9saWN5LmM6Mjc1NDpcXHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcXHUwMDI2cG9sLVxcdTAwM2Vub2RlcyxcXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVxcdFxcdFxcdFxcdFxcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTctXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKVxcbm1tL21lbXBvbGljeS5jOjI3NTg6XFx0XFx0bnJfYWxsb2NhdGVkICs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMjc1OS1cXHRcXHRcXHRcXHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NjktICovXFxubW0vbWVtcG9saWN5LmM6Mjc3MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc3MS1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODE6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnAsIHBvbCxcXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODU6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVxcdFxcdFxcdFxcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODgtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxcbm1tL21lbXBvbGljeS5jOjI3ODk6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3OTAtXFx0XFx0XFx0XFx0bnVtYV9ub2RlX2lkKCksIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxcbm1tL3BhZ2VfYWxsb2MuYzo1MTQwOiAqIF9fYWxsb2NfcGFnZXNfYnVsayAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIG9yZGVyLTAgcGFnZXMgdG8gYW4gYXJyYXlcXG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cXG5tbS9wYWdlX2FsbG9jLmM6NTMwMjpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTUzMDMtXFxuLS1cXG5tbS9zbHViLmM9NzQyNj1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzQ3MC0gKlxcbm1tL3NsdWIuYzo3NDcxOiAqIFVubGlrZSBhbGxvY19wYWdlc19idWxrKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGFscmVhZHkgYWxsb2NhdGVkXFxubW0vc2x1Yi5jLTc0NzItICogb2JqZWN0cyBpbiBAcCwgYW5kIHRodXMgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIHplcm8gaXQuXFxuLS1cXG5tbS92bWFsbG9jLmM9MzY3Nj12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNzQzLVxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcXHUwMDI2XFx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxcbm1tL3ZtYWxsb2MuYzozNzQ0OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcXG5tbS92bWFsbG9jLmMtMzc0NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDctXFx0XFx0XFx0ZWxzZVxcbm1tL3ZtYWxsb2MuYzozNzQ4OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcXG5tbS92bWFsbG9jLmMtMzc0OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NjExPXN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjMzLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNDpcXHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFxcXCJlbXB0eVxcXCIgZm9yIGFsbG9jX3BhZ2VzX2J1bGsgKi9cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXFx0bWVtc2V0KFxcdTAwMjZwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzYtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM3OlxcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cXHUwMDNlcC5uaWQsIGJ1bGssXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM4LVxcdFxcdFxcdFxcdFxcdCAoc3RydWN0IHBhZ2UgKiopcG9vbC1cXHUwMDNlYWxsb2MuY2FjaGUpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jPTY4Nz1zdGF0aWMgYm9vbCBzdmNfZmlsbF9wYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cXHRmb3IgKGZpbGxlZCA9IDA7IGZpbGxlZCBcXHUwMDNjIG5wYWdlczsgZmlsbGVkID0gcmV0KSB7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcXHRcXHRyZXQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXFx0XFx0aWYgKHJldCBcXHUwMDNlIGZpbGxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MjguNTk2ODk5NTU3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMTk5NTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBBbGxvY2F0aW9uIElzc3VlKipcblxuT2theSwgaGVyZSdzIHRoZSBzaXR1YXRpb246IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhIHBvc3NpYmxlIG9taXNzaW9uLiBJdCBzZWVtcyB0aGF0IHRoZSBmYXN0IHBhdGggd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgaXMgbWlzc2luZyBjcnVjaWFsIGNhbGxzIHRvIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIHdoZW4gaXQncyBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUC4gVGhhdCdzIGEgcG90ZW50aWFsIG92ZXJzaWdodCBJIG5lZWQgdG8gYWRkcmVzcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBpbnZvbHZlZCBpbiB0aGUgb3ZlcmFsbCBhbGxvY2F0aW9uIHByb2Nlc3MsIGFuZCBhbHNvIHRvIGNoZWNrIGBwb3N0X2FsbG9jX2hvb2tgIGluIHRoZSBzYW1lIGZpbGUsIGFzIGl0IG1heSBiZSB3aGVyZSB0aG9zZSBtaXNzZWQgY2FsbHMgc2hvdWxkIGhhdmUgZ29uZS5cblxuVG8gdW5kZXJzdGFuZCB0aGUgY29ycmVjdCB1c2FnZSwgSSBuZWVkIHRvIHNlZSB3aGVyZSBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhcmUgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gSSBuZWVkIHRoYXQgY29udGV4dCB0byBzZWUgaG93IHRvIHByb3Blcmx5IGludGVncmF0ZSB0aGVtIGludG8gdGhlIGZhc3QtcGF0aCBsb29wIG9mIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHNvIHRoYXQgdGhlIHBhZ2UgYWxsb2NhdGlvbiBpcyBpbnN0cnVtZW50ZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzozMC44MDg5MDIzNjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzk3Njk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0OlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTI4NS1cXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXFxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XFxubW0vcGFnZV9hbGxvYy5jLTUzNzItICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3JcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MjpcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzozMS4xNDI4OTk2MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzMDYyODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2g6IFdvcnRoRnV6emluZz8qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGttc2FuX2FsbG9jX3BhZ2VgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYXJlIG5vdyBjYWxsZWQgaW4gYm90aCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCAqYW5kKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKj8gSSBrbm93IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGBtbS9wYWdlX2FsbG9jLmNgLCBpcyB1c2VkIGJ5IGEgdG9uIG9mIHN0dWZmIOKAkyBzcGxpY2UsIGJ0cmZzLCBwYWdlX3Bvb2wsIGlvX3VyaW5nLCBmdXNlLCB0aGUgd29ya3MuIFNvLCB5ZWFoLCBpdCdzIGRlZmluaXRlbHkgaW4gdGhlIGNyaXRpY2FsIHBhdGguXG5cbkFscmlnaHQsIGxldCdzIGNvbnN1bHQgdGhlIFwiV29ydGhGdXp6aW5nXCIgY3JpdGVyaWEuIE1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgaW4gYG1tL2AgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QsIGFsb25nIHdpdGggbG9ja2luZywgQlBGLCBzY2hlZHVsaW5nLCBuZXR3b3JraW5nLCBWRlMsIHN5c2NhbGxzLiBZdXAsIGFueSBsb2dpYyBtb2RzIHRoZXJlIGFyZSBmYWlyIGdhbWUuXG5cbkJ1dCB3YWl0LCB3aGF0ICppc24ndCogd29ydGggZnV6emluZz8gRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHVzZXItc3BhY2Ugc3R1ZmYsIGRlY29yYXRpdmUgbG9nZ2luZyBvciB0cmFjZXBvaW50cyB0aGF0IGRvbid0IGFsdGVyIGNvbnRyb2wgZmxvdy4gQnVpbGQgc3lzdGVtIGNoYW5nZXMgdG9vLlxuXG5Ob3csIHRoaXMgcGF0Y2ggYWRkZWQgYSBjb3VwbGUgb2YgdGhpbmdzOiBhIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCB0cmFjZXBvaW50IGFuZCBhIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsLiBUaGF0IGB0cmFjZXBvaW50YCBpcyBwcm9iYWJseSBqdXN0IGxvZ2dpbmcsIGJ1dCB0aGF0IGBrbXNhbl9hbGxvY19wYWdlYC4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIERvZXMgdGhhdCBob29rIGludG8gS01TQU4gYW5kIG1lc3Mgd2l0aCBzaGFkb3cgbWVtb3J5IG9yIHRoZSBLTVNBTiBzdGF0ZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlYCB0byBiZSBzdXJlLiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6MzQuNTczNTMyNzk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI0OTU4MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttc2FuX2FsbG9jX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rbXNhbi5oPTU3PWJvb2wgX19pbml0IF9fbXVzdF9jaGVjayBrbXNhbl9tZW1ibG9ja19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYwLS8qKlxcbmluY2x1ZGUvbGludXgva21zYW4uaDo2MTogKiBrbXNhbl9hbGxvY19wYWdlKCkgLSBOb3RpZnkgS01TQU4gYWJvdXQgYW4gYWxsb2NfcGFnZXMoKSBjYWxsLlxcbmluY2x1ZGUvbGludXgva21zYW4uaC02Mi0gKiBAcGFnZTogIHN0cnVjdCBwYWdlIHBvaW50ZXIgcmV0dXJuZWQgYnkgYWxsb2NfcGFnZXMoKS5cXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC02OC0gKi9cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6Njk6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNzAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl90YXNrX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMxOC1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6MzE5OnN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMyMC1cXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9rbXNhbi9zaGFkb3cuYz0xNjk9RVhQT1JUX1NZTUJPTChrbXNhbl9jb3B5X3BhZ2VfbWV0YSk7XFxubW0va21zYW4vc2hhZG93LmMtMTcwLVxcbm1tL2ttc2FuL3NoYWRvdy5jOjE3MTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXFxubW0va21zYW4vc2hhZG93LmMtMTcyLXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxubW0vcGFnZV9hbGxvYy5jOjUyODQ6XFx0XFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzNzAtICpcXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcXG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NDYxLVxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjM2Ljc5ODUwMDczNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc4NTI1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGttc2FuX2FsbG9jX3BhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IGBrbXNhbl9hbGxvY19wYWdlYCB3aXRoaW4gYG1tL2ttc2FuL3NoYWRvdy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBraW5kIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIEtNU0FOIGVtcGxveWluZyBmb3IgaXRzIHNoYWRvdyBtZW1vcnk/XCIgSSBrbm93IHRoZSBjb3JlIG9mIEtBU0FOL0tNU0FOIHJlbGllcyBvbiBzaGFkb3dpbmcgcmVndWxhciBtZW1vcnksIHNvIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwuIElzIGl0IGEgc3RyYWlnaHRmb3J3YXJkIGBhbGxvY19wYWdlKClgIGNhbGwsIG9yIGFyZSB0aGV5IGRvaW5nIHNvbWV0aGluZyBjbGV2ZXIgbGlrZSBhbGxvY2F0aW5nIGNvbnRpZ3VvdXMgYmxvY2tzIGFuZCBtYW5hZ2luZyB0aGVtIGludGVybmFsbHkgdG8gb3B0aW1pemUgZm9yIGFjY2VzcyBwYXR0ZXJucz8gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY3VzdG9tIGxvZ2ljIHRvIGFsaWduIGFsbG9jYXRpb25zIGZvciBlZmZpY2llbnQgc2hhZG93IG1hcHBpbmcsIG9yIHBlcmhhcHMgdGhleSdyZSB0YWtpbmcgYWR2YW50YWdlIG9mIHNvbWUgTlVNQSBhd2FyZW5lc3MgaWYgaXQncyByZWxldmFudCBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBzaGFkb3cgbWFwcGluZyBpcyBkb25lIC0gd2hhdCdzIHRoZSBncmFudWxhciBtYXBwaW5nIGFuZCBsb29rdXAgc3RyYXRlZ3ksIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIHZpcnR1YWwgYWRkcmVzcyByZWdpb25zLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIHRhYmxlIGVudHJpZXMuIFRoZSBnb2FsLCBvZiBjb3Vyc2UsIGlzIHRvIG1pbmltaXplIG92ZXJoZWFkLiBTbyBJJ20gaW50ZXJlc3RlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFkZW9mZnM6IG1lbW9yeSBmb290cHJpbnQsIGFsbG9jYXRpb24gc3BlZWQsIGFuZCB0aGUgY29tcGxleGl0eSBvZiB0aGUgaW50ZXJuYWwgYm9va2tlZXBpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVndWxhciBgYWxsb2NfcGFnZWAgYW5kIGBmcmVlX3BhZ2VgIHN5c3RlbSBjYWxscyB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGN1c3RvbSBtYW5hZ2VtZW50IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjM5LjA3NzAyODcwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rbXNhbi9zaGFkb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFxuIDE3MTpcXHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXFxuIDE3MjpcXHR7XFxuIDE3MzpcXHRcXHRib29sIGluaXRpYWxpemVkID0gKGZsYWdzIFxcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XFxuIDE3NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xcbiAxNzU6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiAxNzY6XFx0XFx0aW50IHBhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0aWYgKCFwYWdlKVxcbiAxNzk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRzaGFkb3cgPSBzaGFkb3dfcGFnZV9mb3IocGFnZSk7XFxuIDE4MjpcXHRcXHRvcmlnaW4gPSBvcmlnaW5fcGFnZV9mb3IocGFnZSk7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdGlmIChpbml0aWFsaXplZCkge1xcbiAxODU6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg2OlxcdFxcdFxcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhvcmlnaW4pLCAwLCBQQUdFX1NJWkUgKiBwYWdlcyk7XFxuIDE4NzpcXHRcXHRcXHRyZXR1cm47XFxuIDE4ODpcXHRcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdC8qIFplcm8gcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBydW50aW1lIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLiAqL1xcbiAxOTE6XFx0XFx0aWYgKGttc2FuX2luX3J1bnRpbWUoKSlcXG4gMTkyOlxcdFxcdFxcdHJldHVybjtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIC0xLCBQQUdFX1NJWkUgKiBwYWdlcyk7XFxuIDE5NTpcXHRcXHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XFxuIDE5NjpcXHRcXHRoYW5kbGUgPSBrbXNhbl9zYXZlX3N0YWNrX3dpdGhfZmxhZ3MoZmxhZ3MsIC8qZXh0cmFfYml0cyovIDApO1xcbiAxOTc6XFx0XFx0a21zYW5fbGVhdmVfcnVudGltZSgpO1xcbiAxOTg6XFx0XFx0LypcXG4gMTk5OlxcdFxcdCAqIEFkZHJlc3NlcyBhcmUgcGFnZS1hbGlnbmVkLCBwYWdlcyBhcmUgY29udGlndW91cywgc28gaXQncyBva1xcbiAyMDA6XFx0XFx0ICogdG8ganVzdCBmaWxsIHRoZSBvcmlnaW4gcGFnZXMgd2l0aCBAaGFuZGxlLlxcbiAyMDE6XFx0XFx0ICovXFxuIDIwMjpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFBBR0VfU0laRSAqIHBhZ2VzIC8gc2l6ZW9mKGhhbmRsZSk7IGkrKylcXG4gMjAzOlxcdFxcdFxcdCgoZGVwb3Rfc3RhY2tfaGFuZGxlX3QgKilwYWdlX2FkZHJlc3Mob3JpZ2luKSlbaV0gPSBoYW5kbGU7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdHZvaWQga21zYW5fZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIDIwNzpcXHR7XFxuIDIwODpcXHRcXHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxcbiAyMDk6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1MzozOS4wNzcxMTU1MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU1OTYyOTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2FzIG1pc3NpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIGNhbGxzIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmcm9tIHRoZSBidWxrIGFsbG9jYXRvci4gVGhpcyBvdmVyc2lnaHQgcG90ZW50aWFsbHkgbGVhZHMgdG8gaW5jb25zaXN0ZW50IEtNU0FOIHJlcG9ydHMgZHVlIHRvIGltcHJvcGVyIHNoYWRvdyBhbmQgb3JpZ2luIHBhZ2UgaW5pdGlhbGl6YXRpb24uIEZ1cnRoZXJtb3JlLCBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgaXMgYWRkZWQgZm9yIHRyYWNpbmcgdGhlc2UgYnVsayBwYWdlIGFsbG9jYXRpb25zLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIGNyaXRlcmlhLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGFueSBtb2RpZmljYXRpb25zIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCBhcmUgZ2VuZXJhbGx5IGhpZ2gtcHJpb3JpdHkuXG5cblRoZSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgdWJpcXVpdG91cyBob3QgcGF0aCB0aGF0IHNob3VsZCBiZSBhdm9pZGVkLiBUaGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgd2FybnMgYWdhaW5zdCBsaXN0aW5nIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvcnMuIEhvd2V2ZXIsIHVwb24gaW5zcGVjdGlvbiwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBub3QgYSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3IgbGlrZSBgX19hbGxvY19wYWdlc19ub3Byb2ZgLCBga21hbGxvY2AsIG9yIGBrZnJlZWAuIEl0J3MgKnNwZWNpZmljYWxseSogY2FsbGVkIGJ5IHN1YnN5c3RlbXMgbGlrZSBgc3BsaWNlYCwgYGlvX3VyaW5nYCwgYHZtYWxsb2NgLCBhbmQgZmlsZXN5c3RlbXMgbGlrZSBgYnRyZnNgLiBUaGlzIG1ha2VzIGl0IGEgKnNwZWNpZmljKiBzeW1ib2wuIFRoZSBkaWZmIG9ubHkgbW9kaWZpZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc29saWRpZnlpbmcgaXRzIGltcG9ydGFuY2UuXG5cblJlZ2FyZGluZyBLY29uZmlnIG9wdGlvbnMsIGBrbXNhbl9hbGxvY19wYWdlYCdzIGxvZ2ljIGlzIG9ubHkgYWN0aXZlIHdoZW4gYEtNU0FOYCBpcyBlbmFibGVkLCB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLiBXaGVuIEtNU0FOIGlzIGRpc2FibGVkLCBpdCdzIGp1c3QgYSBuby1vcCBzdGF0aWMgaW5saW5lLiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyBhbHdheXMgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiBLTVNBTiBjb25maWd1cmF0aW9uLiBFdmVuIHdoZW4gS01TQU4gaXMgb2ZmLCBmdXp6aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgdXNlZnVsLCB0aG91Z2ggYEtNU0FOYCBpdHNlbGYgaXMgcmVsZXZhbnQgZm9yIGFjdHVhbCBLTVNBTiBsb2dpYyBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTkzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjQ0LjYzNjc1NDQxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNzM3NjM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS01TQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2FzYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjQ0Ljc5MDUwNjU5OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTY2NzgwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRmluZGluZyB0aGUgS01TQU4gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gbG9jYXRlIHRoZSBjb25maWd1cmF0aW9uIGZvciBLTVNBTi4gVGhhdCdzIHRoZSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdy4gTm8gbmVlZCBmb3IgYW55IHByZWFtYmxlIG9yIGZsdWZmOyBkaXJlY3RseSB0byB0aGUgb2JqZWN0aXZlOiBmaW5kIHRoZSByZWxldmFudCBLTVNBTiBjb25maWd1cmF0aW9uLiBJdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBzbyBsZXQncyBnZXQgYWZ0ZXIgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTE2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1Mzo0Ny43NTcyOTA4ODlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODIwMTY4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtNU0FOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmttc2FuPTU9Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTctXFxubGliL0tjb25maWcua21zYW46ODpjb25maWcgS01TQU5cXG5saWIvS2NvbmZpZy5rbXNhbi05LVxcdGJvb2wgXFxcIktNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbj0yNj1pZiBLTVNBTlxcbmxpYi9LY29uZmlnLmttc2FuLTI3LVxcbmxpYi9LY29uZmlnLmttc2FuOjI4OmNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcXG5saWIvS2NvbmZpZy5rbXNhbi0yOS1cXHRib29sIFxcXCJDaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uc1xcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTQxLVxcbmxpYi9LY29uZmlnLmttc2FuOjQyOmNvbmZpZyBLTVNBTl9LVU5JVF9URVNUXFxubGliL0tjb25maWcua21zYW4tNDMtXFx0dHJpc3RhdGUgXFxcIktNU0FOIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6NDkuNzM5MzE2NDkzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzA1MTg4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgS01TQU4gRGVwZW5kZW5jaWVzIGluIHRoZSBLY29uZmlnKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZvciBLTVNBTi4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBLTVNBTidzIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHRvIGBsaWIvS2NvbmZpZy5rbXNhbmAuIEkgc3VzcGVjdCB0aGlzIGZpbGUgY29udGFpbnMgdGhlIGNydWNpYWwgYGNvbmZpZ2Agb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiBLTVNBTiBhbmQgbGlrZWx5IGl0cyBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJIGFudGljaXBhdGUgZmluZGluZyBjb25kaXRpb25hbHMgdGhlcmUgdGhhdCBkZXRlcm1pbmUgd2hlbiB0aGUgS01TQU4gY29kZSBhbmQgaW5zdHJ1bWVudGF0aW9uIGFyZSBjb21waWxlZCwgcG90ZW50aWFsbHkgYmFzZWQgb24gb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhcmNoaXRlY3R1cmUgc3BlY2lmaWNzLCBvciBldmVuIGNvbXBpbGUtdGltZSBmbGFncyB0aGF0IG1heSBiZSByZWxldmFudCB0byB0ZXN0aW5nIGVudmlyb25tZW50cywgc3VjaCBhcyBgLWZzYW5pdGl6ZT1rbXNhbmAuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGludGltYXRlbHkgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIGludGVncmF0aW9uLCB0cm91Ymxlc2hvb3RpbmcsIGFuZCBvcHRpbWl6YXRpb24gb2YgdGhlIEtNU0FOIGJ1aWxkIHByb2Nlc3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY3VzdG9tIGtlcm5lbCBidWlsZHMgb3Igc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIEknbSBsb29raW5nIGZvciB0aGUga2V5IHZhcmlhYmxlcyB0byBlbnN1cmUgSSdtIGdldHRpbmcgYSBjbGVhbiBhbmQgY29ycmVjdCBLTVNBTiBidWlsZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGBLY29uZmlnYCBoYXMgdG8gdGVsbCB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1Mzo1Mi4yMDk4NDAyMzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcua21zYW5cIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBIQVZFX0FSQ0hfS01TQU5cXG4gICAzOlxcdFxcdGJvb2xcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcXG4gICA2OlxcdFxcdGRlZl9ib29sICQoY2Mtb3B0aW9uLC1mc2FuaXRpemU9a2VybmVsLW1lbW9yeSlcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIEtNU0FOXFxuICAgOTpcXHRcXHRib29sIFxcXCJLTVNBTjogZGV0ZWN0b3Igb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMgdXNlXFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfS01TQU4gXFx1MDAyNlxcdTAwMjYgSEFWRV9LTVNBTl9DT01QSUxFUlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgIUtBU0FOIFxcdTAwMjZcXHUwMDI2ICFLQ1NBTlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiAhUFJFRU1QVF9SVFxcbiAgMTM6XFx0XFx0c2VsZWN0IFNUQUNLREVQT1RcXG4gIDE0OlxcdFxcdHNlbGVjdCBTVEFDS0RFUE9UX0FMV0FZU19JTklUXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIEtlcm5lbE1lbW9yeVNhbml0aXplciAoS01TQU4pIGlzIGEgZHluYW1pYyBkZXRlY3RvciBvZiB1c2VzIG9mXFxuICAxNzpcXHRcXHQgIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIHRoZSBrZXJuZWwuIEl0IGlzIGJhc2VkIG9uIGNvbXBpbGVyXFxuICAxODpcXHRcXHQgIGluc3RydW1lbnRhdGlvbiBwcm92aWRlZCBieSBDbGFuZyBhbmQgdGh1cyByZXF1aXJlcyBDbGFuZyB0byBidWlsZC5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBBbiBpbXBvcnRhbnQgbm90ZSBpcyB0aGF0IEtNU0FOIGlzIG5vdCBpbnRlbmRlZCBmb3IgcHJvZHVjdGlvbiB1c2UsXFxuICAyMTpcXHRcXHQgIGJlY2F1c2UgaXQgZHJhc3RpY2FsbHkgaW5jcmVhc2VzIGtlcm5lbCBtZW1vcnkgZm9vdHByaW50IGFuZCBzbG93c1xcbiAgMjI6XFx0XFx0ICB0aGUgd2hvbGUgc3lzdGVtIGRvd24uXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2ttc2FuLnJzdFxcdTAwM2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0aWYgS01TQU5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIEtNU0FOX0NIRUNLX1BBUkFNX1JFVFZBTFxcbiAgMjk6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnNcXFwiXFxuICAzMDpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6NTIuMjA5OTI3NTU1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0ODA0OTQwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG9wdGltYWwgZnV6emluZyBjb25maWd1cmF0aW9uIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBJIHNlZSB0aGF0IGBLTVNBTmAgaXMgZmxhZ2dlZCBhcyBhIHJlbGV2YW50IGNvbmZpZy4gQnV0IEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgKnN0cmljdGx5KiByZXF1aXJlZCBmb3IgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gQWZ0ZXIgYWxsLCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGNvcmUga2VybmVsIGNvZGUgYW5kIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseS4gRW5hYmxpbmcgYEtNU0FOYCBjbGVhcmx5IGFjdGl2YXRlcyB0aGUgbmV3IGBrbXNhbl9hbGxvY19wYWdlKClgIHBhdGgsIHdoaWNoIGlzIGltcG9ydGFudCwgYnV0IGlzIGl0IHRoZSAqb25seSogcGF0aCB0byBjb25zaWRlcj9cblxuQWxyaWdodCwgbmV4dCwgYEZvY3VzU3ltYm9sc2AuIExldCBtZSBjb25maXJtOiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgICppcyogdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCB0aGF0J3MgY29ycmVjdC4gTm93LCB3aGF0IGFyZSB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIGNhbGxlcnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgc2VlIGEgbGlzdDogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYGNvcHlfc3BsaWNlX3JlYWRgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYC4gRm9jdXNpbmcgZGlyZWN0bHkgb24gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBzaG91bGQgaW5kZWVkIGJlIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhpcyBidWxrIGFsbG9jYXRpb24gcGF0aC5cblxuTm93LCBsZXQncyBjYXJlZnVsbHkgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgcHJvdmlkZWQgdG8gZW5zdXJlIEkgYW0gaW50ZXJwcmV0aW5nIHRoaW5ncyBjb3JyZWN0bHk6XG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4gRXhjZWxsZW50LiBUaGlzIGNvbmZpcm1zIG15IGludHVpdGlvbjsgd2UncmUgZGVhbGluZyB3aXRoIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIHRoZXJlJ3MgYmVlbiBhIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgS01TQU5gIGluc3RydW1lbnRhdGlvbiBhbmQgYSB0cmFjZXBvaW50LiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIl1gLiBDb25maXJtZWQuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiS01TQU5cIl1gIChvciBlbXB0eS9LTVNBTikuIFllcywgYEtNU0FOYCBpcyBuZWNlc3NhcnksIG9yIGFuIGVtcHR5IGNvbmZpZywgd2hpY2gsIGFzIEkgdW5kZXJzdGFuZCwgd2lsbCB1c2UgS01TQU4gdG8gZXhlcmNpc2UgYGttc2FuX2FsbG9jX3BhZ2VgLlxuKiAgIGBSZWFzb25pbmdgOiBUaGlzIG1ha2VzIHNlbnNlLiBUaGUgcmVhc29uaW5nIGV4cGxhaW5zIHRoZSBjb250ZXh0IGNsZWFybHk6IHdlIGFyZSBmdXp6aW5nIGR1ZSB0byB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gbW9kaWZpY2F0aW9uIHdpdGggYEtNU0FOYCBpbnN0cnVtZW50YXRpb24sIHRhcmdldGluZyB0aGUgYnVsayBwYWdlIGFsbG9jYXRpb24gcGF0aC5cblxuT2theSwgSSd2ZSBkb3VibGUtY2hlY2tlZCBldmVyeXRoaW5nLiBJJ20gcmVhZHkgdG8gcHJvY2VlZC4gSSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGFyZ2V0LCB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHRoZSByYXRpb25hbGUuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5MiwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1Mzo1Ni42OTA0MjY1MjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwNTcyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktNU0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBwcm9wZXJseSBpbnZva2UgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGFuZCBrbXNhbl9hbGxvY19wYWdlKCkgZm9yIHBhZ2VzIGFsbG9jYXRlZCB2aWEgdGhlIHBlci1jcHUgcGFnZSBhbGxvY2F0b3IuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLTVNBTiB0cmFja2luZyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBhbGxvY19wYWdlc19idWxrX25vcHJvZiBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gcHJvcGVybHkgaW52b2tlIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBhbmQga21zYW5fYWxsb2NfcGFnZSgpIGZvciBwYWdlcyBhbGxvY2F0ZWQgdmlhIHRoZSBwZXItY3B1IHBhZ2UgYWxsb2NhdG9yLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS01TQU4gdHJhY2tpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjUzOjU2Ljc5NDQ5OTI4OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4MjM2ODEzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1Mzo1Ni43OTUxODk5ODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzgyMjk4NDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXFxuXFxuS01TQU4gdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0dXMgb2YgcGFnZSBhbGxvY2F0aW9ucyBieSBtYXJraW5nIG5vbi1gX19HRlBfWkVST2AgcGFnZXMgd2l0aCB1bmluaXRpYWxpemVkIHNoYWRvdyBhbmQgY3JlYXRpbmcgYWxsb2NhdGlvbiBvcmlnaW5zLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZWAgLyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgKSBieXBhc3NlZCBLTVNBTiB0cmFja2luZywgbGVhdmluZyBLTVNBTiBibGluZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3JpZ2luYXRpbmcgZnJvbSBidWxrLWFsbG9jYXRlZCBwYWdlcyAod2hpY2ggYXJlIHdpZGVseSB1c2VkIGFjcm9zcyB2bWFsbG9jLCBwYWdlIHBvb2wgLyBuZXR3b3JrIGRyaXZlcnMsIHNwbGljZSwgYnRyZnMsIGZ1c2UsIGFuZCBicGYpLlxcblxcblN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4gb25seSBtb25pdG9yIG1lbW9yeSBhY2Nlc3NpYmlsaXR5IChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFuZCBjYW5ub3QgZGV0ZWN0IHJlYWRzIG9yIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIGp1c3RpZmllZCB0byB2YWxpZGF0ZSB0aGUgS01TQU4gaG9vayBhbmQgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgZXhwb3NlZCBhY3Jvc3MgYWxsIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGNhbGwgc2l0ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTc5NDNmNjY0NjVlOGFkYjYzY2ZiMmYxYzk1N2U3MGE5ZTI2ZTJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMzo1MzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uMDJiYTE5ZjZkYmI1OSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTI4MCw2ICs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4rXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG4rXHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcbiBcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTM6NTYuNzk1MTkxMzk4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNzMxMjU3OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIEtNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBkZWRpY2F0aW5nIHNvbWUgS01TQU4gZnV6emluZyB0aW1lIHRvIGl0LiBJIHNlZSB0aGV5J3ZlIGFkZGVkIGEgZmV3IGxpbmVzIHRvIGBtbS9wYWdlX2FsbG9jLmNgIGFyb3VuZCBsaW5lIDUyODAuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIG5ldyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgYml0IGJldHRlciB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QuXG5cbkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBhcm91bmQgdGhhdCBhcmVhIGluIGBtbS9wYWdlX2FsbG9jLmNgIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgaW4gYnVsaywgd2hpY2ggY291bGQgYmUgYSBob3Qgc3BvdCBmb3IgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBUaGUgYWRkaXRpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHRoZSBrZXkgdGhpbmcsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2hlY2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLCBwZXJoYXBzPyBPciBpcyBpdCBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZD8gSWYgaXQncyBhIG5ldyBjaGVjaywgdGhlbiB0aGF0IG1ha2VzIGl0IGludGVyZXN0aW5nIHRvIHRlc3QuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhpcyBwYXRoIHdpdGggS01TQU4gZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjA3LjUyNjQ1NDU0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0XFx0cGNwX2xpc3QgPSBcXHUwMDI2cGNwLVxcdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcXG41MjYxOlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjUyNjI6XFx0XFxuNTI2MzpcXHRcXHRcXHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXFxuNTI2NDpcXHRcXHRcXHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XFxuNTI2NTpcXHRcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MjY2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUyNjc6XFx0XFx0XFx0fVxcbjUyNjg6XFx0XFxuNTI2OTpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxcbjUyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGNwLCBwY3BfbGlzdCk7XFxuNTI3MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuNTI3MjpcXHRcXHRcXHRcXHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXFxuNTI3MzpcXHRcXHRcXHRcXHRpZiAoIW5yX2FjY291bnQpIHtcXG41Mjc0OlxcdFxcdFxcdFxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyNzU6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTI3NjpcXHRcXHRcXHRcXHR9XFxuNTI3NzpcXHRcXHRcXHRcXHRicmVhaztcXG41Mjc4OlxcdFxcdFxcdH1cXG41Mjc5OlxcdFxcdFxcdG5yX2FjY291bnQrKztcXG41MjgwOlxcdFxcbjUyODE6XFx0XFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbjUyODI6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41MjgzOlxcdFxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxuNTI4NDpcXHRcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCk7XFxuNTI4NTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTI4NjpcXHRcXHR9XFxuNTI4NzpcXHRcXG41Mjg4OlxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyODk6XFx0XFxuNTI5MDpcXHRcXHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xcbjUyOTE6XFx0XFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcXG41MjkyOlxcdFxcbjUyOTM6XFx0b3V0OlxcbjUyOTQ6XFx0XFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcXG41Mjk1OlxcdFxcbjUyOTY6XFx0ZmFpbGVkOlxcbjUyOTc6XFx0XFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xcbjUyOTg6XFx0XFx0aWYgKHBhZ2UpXFxuNTI5OTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTMwMDpcXHRcXHRnb3RvIG91dDtcXG41MzAxOlxcdH1cXG41MzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG41MzAzOlxcdFxcbjUzMDQ6XFx0LypcXG41MzA1OlxcdCAqIGZyZWVfcGFnZXNfYnVsayAtIEZyZWUgYW4gYXJyYXkgb2Ygb3JkZXItMCBwYWdlc1xcbjUzMDY6XFx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcXG41MzA3OlxcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcXG41MzA4OlxcdCAqXFxuNTMwOTpcXHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTQ6MDcuNTI3MzA3NjAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTA4MzE5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWxrIFBhZ2UgQWxsb2NhdG9yIElzc3VlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBJJ3ZlIGlkZW50aWZpZWQgYSBwb3RlbnRpYWwgZ2FwIGluIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yJ3MgZmFzdCBwYXRoIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdGhlIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIGZ1bmN0aW9uIGFuZCB0aGUgYHRyYWNlX21tX3BhZ2VfYWxsb2MoLi4uKWAgY2FsbHMsIHdoaWNoIGFyZSBjcnVjaWFsIGZvciBtZW1vcnkgc2FmZXR5IGFuZCB0cmFjaW5nLCB3ZXJlIG9taXR0ZWQgd2hlbiBoYW5kbGluZyBwYWdlcyByZXRyaWV2ZWQgZnJvbSB0aGUgcGVyLUNQVSBwYWdlIGxpc3QgKHRoZSBQQ1AgbGlzdCkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBob3cgZG9lcyB0aGlzIGFmZmVjdCB0aGUgS01TQU4gYmVoYXZpb3I/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25zZXF1ZW5jZXMgdGhlcmUgYXJlIHdoZW4gYGttc2FuX2FsbG9jX3BhZ2VgICppcyogY2FsbGVkIHZlcnN1cyB3aGVuIGl0ICppc24ndCouIFRoZSBLTVNBTiBpbnRlZ3JhdGlvbiBpcyBjcml0aWNhbCwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdmVyaWZ5IGhvdyB0aGlzIG92ZXJzaWdodCBjaGFuZ2VzIHRoZSBleHBlY3RlZCBtZW1vcnkgYmVoYXZpb3IuIEl0J3MgdGltZSB0byBkaXZlIGludG8gYGttc2FuX2FsbG9jX3BhZ2VgIGFuZCBhc3Nlc3MgdGhlIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjA5LjczODE0NDgxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1ODMwNjU0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva21zYW4uaD01Nz1ib29sIF9faW5pdCBfX211c3RfY2hlY2sga21zYW5fbWVtYmxvY2tfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6NjE6ICoga21zYW5fYWxsb2NfcGFnZSgpIC0gTm90aWZ5IEtNU0FOIGFib3V0IGFuIGFsbG9jX3BhZ2VzKCkgY2FsbC5cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjgtICovXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMTgtXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGZsYWdzKVxcbi0tXFxubW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cXG5tbS9rbXNhbi9zaGFkb3cuYzoxNzE6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0OlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTI4NS1cXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXFxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XFxubW0vcGFnZV9hbGxvYy5jLTUzNzItICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3JcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MjpcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1NDoxMS42OTY0NjM0NzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4MzgxNjUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU2hhZG93IFJBTSDigJMgTGluZSAxNzEqKlxuXG5Pa2F5LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzIGlzc3VlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgbW0va21zYW4vc2hhZG93LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTcxLiBNeSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHNvbWV0aGluZyBpcyBhbWlzcyBpbiB0aGUgc2hhZG93IG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgdGhhdCBzZWN0aW9uIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEknbSBhc3N1bWluZyB0aGVyZSdzIHBvdGVudGlhbGx5IGFuIGlzc3VlIHdpdGggaG93IEtNU0FOIGlzIG1hcHBpbmcgb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc2hhZG93IG1lbW9yeSByZWdpb25zLiBNYXliZSBhIHJhY2UgY29uZGl0aW9uLCBhIG1pc2NhbGN1bGF0aW9uIGluIHRoZSBvZmZzZXQsIG9yIGEgcHJvYmxlbSB3aXRoIHRoZSBncmFudWxhcml0eSBvZiB0aGUgc2hhZG93IFJBTSBtYXBwaW5nPyBMZXQncyBjaGVjayB0aGVyZSBhbmQgc2VlIGlmIG15IGh1bmNoIGhvbGRzIGFueSB3YXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjEzLjQ4MDI4NDE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcXG4gMTc0OlxcdFxcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XFxuIDE3NTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDE3NjpcXHRcXHRpbnQgcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoIXBhZ2UpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm47XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcXG4gMTgyOlxcdFxcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKGluaXRpYWxpemVkKSB7XFxuIDE4NTpcXHRcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xcbiAxODY6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg3OlxcdFxcdFxcdHJldHVybjtcXG4gMTg4OlxcdFxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXFxuIDE5MTpcXHRcXHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcXG4gMTk2OlxcdFxcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XFxuIDE5NzpcXHRcXHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XFxuIDE5ODpcXHRcXHQvKlxcbiAxOTk6XFx0XFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCdzIG9rXFxuIDIwMDpcXHRcXHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXFxuIDIwMTpcXHRcXHQgKi9cXG4gMjAyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSsrKVxcbiAyMDM6XFx0XFx0XFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcXG4gMjA0OlxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMjA3OlxcdHtcXG4gMjA4OlxcdFxcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjEzLjQ4MDM4NDIxMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjgwNTE0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIE5lZWRzIENvbnNpZGVyYXRpb24gZm9yIEJ1bGsgUGFnZSBBbGxvY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgY3J1Y2lhbCBvdmVyc2lnaHQgaW4gaG93IEtNU0FOIGhhbmRsZXMgYnVsayBwYWdlIGFsbG9jYXRpb25zIHZpYSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBQcmV2aW91c2x5LCBga21zYW5fYWxsb2NfcGFnZSgpYCB3YXMgbWlzc2luZyBmcm9tIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHBhdGgsIG1lYW5pbmcgS01TQU4gY291bGRuJ3QgcHJvcGVybHkgdHJhY2sgdGhlIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBwYWdlcyBhbGxvY2F0ZWQgaW4gYnVsay4gVGhpcyBtZWFudCB0aGF0IG1lbW9yeSBhbGxvY2F0ZWQgd2l0aG91dCBgX19HRlBfWkVST2AgdmlhIGBhbGxvY19wYWdlc19idWxrYCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIHN0YWxlIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aGF0IEtNU0FOIHdvdWxkbid0IGNhdGNoLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwKWAgaXMgYmVpbmcgYWRkZWQsIGFuZCB0aGF0J3MgdGhlIGNvcmUgb2YgaXQuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IEtNU0FOIHdpbGwgbm93IGFjdGl2ZWx5IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBwYWdlcyBhbGxvY2F0ZWQgdGhyb3VnaCB0aGUgYnVsayBwYWdlIGFsbG9jYXRvci4gVGhpcyBpcyBhIGdhbWUtY2hhbmdlciBiZWNhdXNlIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgIOKAkyB0aGluZ3MgbGlrZSBuZXR3b3JrIGRyaXZlcnMsIHBhZ2UgY2FjaGUgcmVhZGFoZWFkLCBhbmQgb3RoZXIgY3JpdGljYWwgY29tcG9uZW50cyDigJMgY2FuIG5vdyBiZSBzY3J1dGluaXplZCBmb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmZyb20qIGJ1bGstYWxsb2NhdGVkIHBhZ2VzLiBBbmQgaWYgdGhleSBzZW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBLTVNBTiB3aWxsIGNhdGNoIGl0LlxuXG5CdXQuLi4gZG8gd2UgYWN0dWFsbHkgbmVlZCBLTVNBTiBmb3IgdGhpcz8gTGV0IG1lIGdvIHRocm91Z2ggdGhlIGNyaXRlcmlhIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgLiBJIG5lZWQgdG8gYXNrIG15c2VsZiwgaXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgYW55IG9mIHRoZSBmb2xsb3dpbmc/XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci5cbjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkFuZCwgY3JpdGljYWxseSwgaXMgdGhpcyBhICpLTVNBTi1zcGVjaWZpYyogaXNzdWU/IEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHN0YW5kYXJkIEtBU0FOIGNvdmVycyBhIGxvdC4gSWYgYSBidWcgY291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCB0aGVyZSdzIG5vIG5lZWQgZm9yIEtNU0FOLiBLTVNBTiBpcyBleHBlbnNpdmUsIGFuZCBpdCBoYXMgdG8gZXhwb3NlIHRoaW5ncyB0aGF0IHdvdWxkIG5vdCBiZSBleHBvc2VkIGJ5IHRoZSBvdGhlciBkZXRlY3RvcnMuXG5cbk9rYXksIGJhY2sgdG8gdGhlIHByb2JsZW0uIEJ5IGFkZGluZyBga21zYW5fYWxsb2NfcGFnZSgpYCwgd2UgYXJlICplbmFibGluZyogS01TQU4gdG8gcHJvcGVybHkgcG9pc29uIGFuZCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSAqZHVyaW5nKiBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBLTVNBTiAqY291bGRuJ3QqIGRvIHRoaXMgYmVmb3JlLiBJdCB3YXMgYSBibGluZCBzcG90LlxuXG5TcGVjaWZpY2FsbHksIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIGlzIGRlc2lnbmVkIHRvIG1hcmsgdGhlIHBhZ2Ugc2hhZG93IGFzIHVuaW5pdGlhbGl6ZWQgKGAtMWApIGlmIGBfX0dGUF9aRVJPYCBpcyAqbm90KiBzZXQuIE5vdywgd2hlbiBwYWdlcyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19wYWdlc19idWxrYCwgYWNyb3NzIHRoZSBrZXJuZWwgKG5ldHdvcmtpbmcsIGNyeXB0bywgZXRjLiksIEtNU0FOIGNhbiBkZXRlY3QgdGhpcy4gVGhpcyAqZGlyZWN0bHkqIGltcGFjdHMgS01TQU4ncyBpbnN0cnVtZW50YXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2UgYWxsb2NhdGlvbikuIFRoaXMgbm93IGVuYWJsZXMgdXMgdG8gZGV0ZWN0IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBwYWdlcy5cblxuV2FpdCwgaXMgaXQganVzdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZyBjaGFuZ2U/IEkgbmVlZCB0byBsb29rIGF0IHRoZSBkaWZmZXJlbnQgY2FsbGVycyBvZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBhbHNvIHdoZXJlIGBhbGxvY19wYWdlc19idWxrX2FycmF5YCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbGlzdGAgYXJlIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIG1ha2UgYSBjYWxsIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDM6NTQ6MjAuMTYwOTAyNzg2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQyNDEyODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVxcdCAqXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcXHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfc2VncylcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlxcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXFx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cXHUwMDNlcGduciwgYm8tXFx1MDAzZXBhZ2VzKTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cXHQvKlxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5OlxcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cXHRcXHRcXHRcXHRcXHQgICpwYWdlX2xpc3QgKyBkb25lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXFx0ZG8ge1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcXHRcXHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXFx0XFx0XFx0XFx0XFx0ICBwYWdlX2xpc3QpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0OlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXFx1MDAyNmJ1Zi1cXHUwMDNldGFibGUuc2d0LCBcXHUwMDI2c2dfaXRlciwgMClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcXHRcXHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jLTg5LVxcdFxcdFxcdGxhc3QgPSBqO1xcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XFx0XFx0XFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcXG5mcy9lcm9mcy96dXRpbC5jLTkxLVxcdFxcdFxcdGlmIChsYXN0ID09IGopXFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxcbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcXHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXFx0aWYgKCFucl9hbGxvYylcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXFxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4OlxcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cXHUwMDNlbmNuX3BhZ2VzKTtcXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXFx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xcbi0tXFxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmZzL3NwbGljZS5jLTM0MS1cXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgKyBucGFnZXMpO1xcbmZzL3NwbGljZS5jOjM0MjpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcXG5mcy9zcGxpY2UuYy0zNDMtXFx0aWYgKCFucGFnZXMpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cXHRcXHRcXHRcXHRcXHQgICAgIG1yLVxcdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XFx0XFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVxcdFxcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XFxuLS1cXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXFx0XFx0bGFzdCA9IGdvdDtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcXHRcXHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTc5My1cXG5tbS9hbGxvY190YWcuYzo3OTQ6XFx0XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxubW0vYWxsb2NfdGFnLmMtNzk1LVxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgKyBucik7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXFxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cXHR3aGlsZSAobnJfcGFnZXMpIHtcXG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XFx0XFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXFx0XFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXFx0XFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XFxubW0va2FzYW4vc2hhZG93LmM6MzcwOlxcdFxcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xcbm1tL21lbXBvbGljeS5jLTI1OTAtXFxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI1OTItXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYwNy1cXHRcXHRpZiAoZGVsdGEpIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjA4OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MTMtXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjE0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MjUtXFxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MjctXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2NC1cXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG5tbS9tZW1wb2xpY3kuYzoyNjY1OlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcwMS1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjI3MDI6XFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxubW0vbWVtcG9saWN5LmMtMjcwMy1cXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcyOS1cXHRcXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyNzMwOlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjczMS1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc0My1cXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbm1tL21lbXBvbGljeS5jLTI3NDUtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1My1cXG5tbS9tZW1wb2xpY3kuYzoyNzU0OlxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbm1tL21lbXBvbGljeS5jLTI3NTUtXFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1Ny1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxubW0vbWVtcG9saWN5LmM6Mjc1ODpcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4MTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbm1tL21lbXBvbGljeS5jLTI3ODItXFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODQtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4NTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3ODYtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxubW0vbWVtcG9saWN5LmM6Mjc4OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVxcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoyNzk0OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXFxubW0vbWVtcG9saWN5LmMtMjc5NS1cXHRcXHRcXHRcXHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG4tLVxcbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDcwLSAqXFxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDMtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3NDQ6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzc0Ny1cXHRcXHRcXHRlbHNlXFxubW0vdm1hbGxvYy5jOjM3NDg6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0OlxcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXFxcImVtcHR5XFxcIiBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cXHRtZW1zZXQoXFx1MDAyNnBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XFx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVxcdTAwM2VwLm5pZCwgYnVsayxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXFx0XFx0XFx0XFx0XFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVxcdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFxcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlxcdFxcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgZmlsbGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMzo1NDoyMi4wMDMzMjkyMDVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYxNDgxNjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBCdWxrIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBzYWZldHksIHBhcnRpY3VsYXJseSB3aXRoIEtNU0FOLiBGaXJzdCwgbGV0J3MgbmFpbCBkb3duIHdoYXQgdGhlIHBhdGNoIGRvZXM6IGl0J3MgYWRkaW5nIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgdXNlZCBFVkVSWVdIRVJFIOKAkyBgdm1hbGxvY2AsIG5ldHdvcmsgcGFnZSBwb29scywgYHNwbGljZWAsIGZpbGVzeXN0ZW1zLCBCUEYsIGBpb191cmluZ2AsIFJQQywgeW91IG5hbWUgaXQuIFRoZSBzaWduaWZpY2FudCB0aGluZyBpcyB0aGF0LCAqYmVmb3JlKiB0aGlzIHBhdGNoLCBpZiBwYWdlcyB3ZXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBQQ1AgbGlzdCDigJMgdGhlIGZhc3QgcGF0aCDigJMgS01TQU4ncyBpbml0aWFsaXphdGlvbiB0cmFja2luZyB3YXMgc2tpcHBlZC4gVGhpcyBtZWFucyBLTVNBTiB3YXMgY29tcGxldGVseSBibGluZCB0byB1bmluaXRpYWxpemVkIHBhZ2VzIGFsbG9jYXRlZCB2aWEgYGFsbG9jX3BhZ2VzX2J1bGtgLlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHRoYXQgYnkgYWRkaW5nIHRoaXMgaG9vaywgcGFnZXMgYWxsb2NhdGVkIHdpdGhvdXQgYF9fR0ZQX1pFUk9gIHdpbGwgYmUgbWFya2VkIGFzIHVuaW5pdGlhbGl6ZWQuIENvbnZlcnNlbHksIHBhZ2VzIGFsbG9jYXRlZCB3aXRoIGBfX0dGUF9aRVJPYCB3aWxsIGJlIG1hcmtlZCBhcyBpbml0aWFsaXplZC4gTm93LCBhbnkgY29kZSByZWFkaW5nIGZyb20gdGhlc2UgcGFnZXMgKmJlZm9yZSogaW5pdGlhbGl6aW5nIHRoZW0sIG9yIGxlYWtpbmcgdGhvc2UgdW5pbml0aWFsaXplZCBieXRlcyB0byB1c2VyIHNwYWNlLCB3aWxsIHRyaWdnZXIgS01TQU4uIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBMT1Qgb2YgcG90ZW50aWFsIGNvZGUgcGF0aHMgbm93IGJlaW5nIHNjcnV0aW5pemVkLCB0aGluZ3MgbGlrZSBgY29weV9zcGxpY2VfcmVhZGAsIGBmdXNlX3JlYWRkaXJgLCBuZXR3b3JrIHJlY2VpdmUgaGFuZGxpbmcsIGB2bWFsbG9jYCwgQnRyZnMsIEJQRiBhcmVuYSwgYGlvX3VyaW5nYCwgZXRjLiBUaGlzIGVuYWJsZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcgYWNyb3NzICphbGwqIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IENvdWxkIEtBU0FOIGNhdGNoIHRoaXM/IE5vLiBLQVNBTiBpcyBncmVhdCBhdCBkZXRlY3Rpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlcywgZXRjLiBJdCBmb2N1c2VzIG9uIG1lbW9yeSB2YWxpZGl0eSwgbm90IGluaXRpYWxpemF0aW9uIHN0YXRlLiBLTVNBTiBzcGVjaWZpY2FsbHkgdGFyZ2V0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gSSBoYXZlIHRvIGJlIGNyeXN0YWwgY2xlYXIgb24gdGhpcyBiZWNhdXNlIG9mIHRoZSBLTVNBTiBydWxlcyBhbmQgY3JpdGVyaWEuIFdlJ3JlIG9ubHkganVzdGlmaWVkIGluIHJ1bm5pbmcgYSBLTVNBTiBzZXNzaW9uIGlmIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgZG9uJ3QgY2F0Y2ggdGhlIHByb2JsZW0uXG5cbkxldCdzIGNhcmVmdWxseSBleGFtaW5lIHRoZSBLTVNBTiBjcml0ZXJpYTogd2Ugc2V0IGBOZWVkc0tNU0FOPXRydWVgIG9ubHkgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYiBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5JbiB0aGlzIGNhc2UsIGl0J3MgbW9zdCByZWxldmFudCB0byBpdGVtIDM6IHRoaXMgcGF0Y2ggKmRpcmVjdGx5KiBhZGRyZXNzZXMgbWlzc2luZyBLTVNBTiBob29rcyBpbiB0aGUgY29yZSBidWxrIHBhZ2UgYWxsb2NhdG9yLiBXZSBhcmUgZXhwbGljaXRseSBjaGFuZ2luZyBob3cgS01TQU4gdHJhY2tzIGluaXRpYWxpemF0aW9uIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNjZW5hcmlvIEtNU0FOIGlzIGRlc2lnbmVkIGZvciBiZWNhdXNlIHRoaXMgd2lsbCBjb3ZlciBhbGwgY29kZSBwYXRocyB0aGF0IHVzZSBgYWxsb2NfcGFnZXNfYnVsa2AuIFdlIGhhdmUgYSBjbGVhciBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCB3aGljaCBLQVNBTiBjYW5ub3QgY2F0Y2guXG5cblNvLCBpcyB0aGVyZSAqYW55KiBhbWJpZ3VpdHk/IE5vLCBLQVNBTiBkb2VzIG5vdCB0cmFjayBpbml0aWFsaXphdGlvbiwgb25seSB2YWxpZGl0eS4gQmVmb3JlIHRoaXMsIEtNU0FOIHdhcyBibGluZCB0byBidWxrLWFsbG9jYXRlZCBwYWdlcy4gV2l0aCB0aGlzIHBhdGNoLCB3ZSdyZSBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24gZm9yIGV2ZXJ5IHNpbmdsZSBgYWxsb2NfcGFnZXNfYnVsa2AgYWxsb2NhdGlvbi4gVGhpcyBpcyBhIHNvbGlkIGp1c3RpZmljYXRpb24gZm9yIGBOZWVkc0tNU0FOPXRydWVgLlxuXG5UaGVyZWZvcmUsIEknbSBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgLiBNeSByZWFzb25pbmcgaXM6XG4xLiBUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGhvb2tzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC5cbjIuIEtNU0FOIHdpbGwgbm93IHRyYWNrIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGVzZSBwYWdlcyBhbmQgZmxhZyB1bmluaXRpYWxpemVkIHJlYWRzLiBLQVNBTiBkb2VzIG5vdCBkbyB0aGlzLiBXaXRob3V0IHRoaXMgcGF0Y2gsIEtNU0FOIHdhcyBibGluZCB0byBidWxrIGFsbG9jYXRpb25zLiBUaGlzIGFsbG93cyB1cyB0byB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgbGVha3MgaW4gdGhlIGtlcm5lbC5cbjMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgd2FycmFudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2NSwiT3V0cHV0VG9rZW5zIjoyNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAzOjU0OjMwLjYxODE0ODk5N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnApYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gdGhlIFBDUCBmYXN0IHBhdGggb2YgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IgKGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCkuXFxuXFxuS01TQU4gdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0dXMgb2YgcGFnZSBhbGxvY2F0aW9ucyBieSBtYXJraW5nIG5vbi1gX19HRlBfWkVST2AgcGFnZXMgd2l0aCB1bmluaXRpYWxpemVkIHNoYWRvdyBhbmQgY3JlYXRpbmcgYWxsb2NhdGlvbiBvcmlnaW5zLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgcGFnZXMgYWxsb2NhdGVkIHZpYSB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtgIC8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZWAgLyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lgKSBieXBhc3NlZCBLTVNBTiB0cmFja2luZywgbGVhdmluZyBLTVNBTiBibGluZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb3JpZ2luYXRpbmcgZnJvbSBidWxrLWFsbG9jYXRlZCBwYWdlcyAod2hpY2ggYXJlIHdpZGVseSB1c2VkIGFjcm9zcyB2bWFsbG9jLCBwYWdlIHBvb2wgLyBuZXR3b3JrIGRyaXZlcnMsIHNwbGljZSwgYnRyZnMsIGZ1c2UsIGFuZCBicGYpLlxcblxcblN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4gb25seSBtb25pdG9yIG1lbW9yeSBhY2Nlc3NpYmlsaXR5IChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFuZCBjYW5ub3QgZGV0ZWN0IHJlYWRzIG9yIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIGp1c3RpZmllZCB0byB2YWxpZGF0ZSB0aGUgS01TQU4gaG9vayBhbmQgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgZXhwb3NlZCBhY3Jvc3MgYWxsIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGNhbGwgc2l0ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHRoZSBtaXNzaW5nIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcClgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBjYWxscyB0byB0aGUgUENQIGZhc3QgcGF0aCBvZiB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciAoYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgKS5cXG5cXG5LTVNBTiB0cmFja3MgdGhlIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBwYWdlIGFsbG9jYXRpb25zIGJ5IG1hcmtpbmcgbm9uLWBfX0dGUF9aRVJPYCBwYWdlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgc2hhZG93IGFuZCBjcmVhdGluZyBhbGxvY2F0aW9uIG9yaWdpbnMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBwYWdlcyBhbGxvY2F0ZWQgdmlhIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yIChgYWxsb2NfcGFnZXNfYnVsa2AgLyBgYWxsb2NfcGFnZXNfYnVsa19ub2RlYCAvIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWApIGJ5cGFzc2VkIEtNU0FOIHRyYWNraW5nLCBsZWF2aW5nIEtNU0FOIGJsaW5kIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBvcmlnaW5hdGluZyBmcm9tIGJ1bGstYWxsb2NhdGVkIHBhZ2VzICh3aGljaCBhcmUgd2lkZWx5IHVzZWQgYWNyb3NzIHZtYWxsb2MsIHBhZ2UgcG9vbCAvIG5ldHdvcmsgZHJpdmVycywgc3BsaWNlLCBidHJmcywgZnVzZSwgYW5kIGJwZikuXFxuXFxuU3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiBvbmx5IG1vbml0b3IgbWVtb3J5IGFjY2Vzc2liaWxpdHkgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYW5kIGNhbm5vdCBkZXRlY3QgcmVhZHMgb3IgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMganVzdGlmaWVkIHRvIHZhbGlkYXRlIHRoZSBLTVNBTiBob29rIGFuZCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBleHBvc2VkIGFjcm9zcyBhbGwgYnVsayBwYWdlIGFsbG9jYXRpb24gY2FsbCBzaXRlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow79h74[1] Phase: Succeeded StartedAt: 2026-09-08 03:54:42 +0000 UTC FinishedAt: 2026-09-08 03:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 03:54:42 +0000 UTC FinishedAt: 2026-09-08 03:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2] Phase: Succeeded StartedAt: 2026-09-08 03:54:42 +0000 UTC FinishedAt: 2026-09-08 07:38:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 03:54:42 +0000 UTC FinishedAt: 2026-09-08 07:38:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 03:54:42 +0000 UTC FinishedAt: 2026-09-08 03:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 03:54:42 +0000 UTC FinishedAt: 2026-09-08 03:54:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"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-workflow79h74/series-workflow79h74-convert-artifact-674903886/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 03:54:52 +0000 UTC FinishedAt: 2026-09-08 04:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 03:54:52 +0000 UTC FinishedAt: 2026-09-08 04:12:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d6738721-255b-45b1-939c-11bf1e28a87e,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-workflow79h74/series-workflow79h74-convert-artifact-674903886/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": "d0306291-9be6-4ab7-8154-ca8a7046be20", "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-workflow79h74/series-workflow79h74-build-action-2436931508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 03:54:52 +0000 UTC FinishedAt: 2026-09-08 04:12:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d6738721-255b-45b1-939c-11bf1e28a87e,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-workflow79h74/series-workflow79h74-convert-artifact-674903886/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": "d0306291-9be6-4ab7-8154-ca8a7046be20", "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-workflow79h74/series-workflow79h74-build-action-2436931508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:12:21 +0000 UTC FinishedAt: 2026-09-08 04:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:12:21 +0000 UTC FinishedAt: 2026-09-08 04:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:12:21 +0000 UTC FinishedAt: 2026-09-08 04:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:12:21 +0000 UTC FinishedAt: 2026-09-08 04:12:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-workflow79h74/series-workflow79h74-convert-artifact-1833635649/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:12:31 +0000 UTC FinishedAt: 2026-09-08 04:14:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:12:31 +0000 UTC FinishedAt: 2026-09-08 04:14:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d0306291-9be6-4ab7-8154-ca8a7046be20,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-workflow79h74/series-workflow79h74-build-action-2436931508/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-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:14:55 +0000 UTC FinishedAt: 2026-09-08 04:14:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:14:55 +0000 UTC FinishedAt: 2026-09-08 04:14:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:14:55 +0000 UTC FinishedAt: 2026-09-08 04:33:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:14:55 +0000 UTC FinishedAt: 2026-09-08 04:33:28 +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:*d6738721-255b-45b1-939c-11bf1e28a87e,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-workflow79h74/series-workflow79h74-convert-artifact-1833635649/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": "cb0c3407-22e6-4c3a-b526-e236c9d1d87f", "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-workflow79h74/series-workflow79h74-build-action-321726669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:14:55 +0000 UTC FinishedAt: 2026-09-08 04:33:18 +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:*d6738721-255b-45b1-939c-11bf1e28a87e,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-workflow79h74/series-workflow79h74-convert-artifact-1833635649/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": "cb0c3407-22e6-4c3a-b526-e236c9d1d87f", "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-workflow79h74/series-workflow79h74-build-action-321726669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:33:28 +0000 UTC FinishedAt: 2026-09-08 04:33:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:33:28 +0000 UTC FinishedAt: 2026-09-08 04:33:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:33:28 +0000 UTC FinishedAt: 2026-09-08 04:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:33:28 +0000 UTC FinishedAt: 2026-09-08 04:35:23 +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:*cb0c3407-22e6-4c3a-b526-e236c9d1d87f,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-workflow79h74/series-workflow79h74-build-action-321726669/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-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:35:33 +0000 UTC FinishedAt: 2026-09-08 07:38:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:35:33 +0000 UTC FinishedAt: 2026-09-08 07:38:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"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:*d0306291-9be6-4ab7-8154-ca8a7046be20,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb0c3407-22e6-4c3a-b526-e236c9d1d87f,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-workflow79h74/series-workflow79h74-build-action-2436931508/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-workflow79h74/series-workflow79h74-build-action-321726669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:35:33 +0000 UTC FinishedAt: 2026-09-08 04:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:35:33 +0000 UTC FinishedAt: 2026-09-08 04:35:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"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-workflow79h74/series-workflow79h74-convert-artifact-3064899798/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:35:33 +0000 UTC FinishedAt: 2026-09-08 04:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:35:33 +0000 UTC FinishedAt: 2026-09-08 04:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:35:33 +0000 UTC FinishedAt: 2026-09-08 04:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:35:43 +0000 UTC FinishedAt: 2026-09-08 07:38:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow79h74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"ada7dc67-7517-4d40-b6ce-1ce8d976a58b","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-08 04:35:43 +0000 UTC FinishedAt: 2026-09-08 07:38:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d0306291-9be6-4ab7-8154-ca8a7046be20,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb0c3407-22e6-4c3a-b526-e236c9d1d87f,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-workflow79h74/series-workflow79h74-build-action-2436931508/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-workflow79h74/series-workflow79h74-build-action-321726669/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-workflow79h74/series-workflow79h74-convert-artifact-3064899798/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,}