Name: series-workflowclfw6 Phase: Succeeded StartedAt: 2026-09-14 02:53:50 +0000 UTC FinishedAt: 2026-09-14 07:01:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[0] Phase: Succeeded StartedAt: 2026-09-14 02:53:50 +0000 UTC FinishedAt: 2026-09-14 03:17:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 02:53:50 +0000 UTC FinishedAt: 2026-09-14 03:17:18 +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": "7b52401510368ef2aaa598b9abd619f66d8c8feb", "config_name": "upstream-apparmor-kasan.config", "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": "7b52401510368ef2aaa598b9abd619f66d8c8feb", "config_name": "upstream-apparmor-kasan.config", "series_id": "e2183235-764c-4e86-b0f3-566e13981cd3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof", "alloc_pages_bulk_mempolicy_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "7b52401510368ef2aaa598b9abd619f66d8c8feb", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuVGhpcyBjaGFuZ2UgbWFuaXB1bGF0ZXMgR0ZQIGFsbG9jYXRpb24gZmxhZyBiaXRzIG9uIGEgc2NhbGFyIGBnZnBfdGAgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcHJldmVudGVkIG9yIGluZmx1ZW5jZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIGZpbGVzeXN0ZW0vSU8gcmVjbGFpbSByZWN1cnNpb24gYW5kIGxvY2tpbmcgZGVhZGxvY2tzICh3aGljaCBhcmUgdHJhY2tlZCBieSBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBhcHBseSBjdXJyZW50X2dmcF9jb250ZXh0KCkgdG8gdGhlIEdGUCBmbGFncywgZW5mb3JjaW5nIHNjb3BlZCBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoZS5nLiwgUEZfTUVNQUxMT0NfTk9GUywgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfUElOKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm0gYnVsayBwYWdlIGFsbG9jYXRpb24gKHN1Y2ggYXMgY29weV9zcGxpY2VfcmVhZCwgYnRyZnMgcGFnZSBhbGxvY2F0aW9uLCBvciB2bWFsbG9jKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgYWxsb2NhdGlvbiBhbm9tYWxpZXMgYXJlIHRyaWdnZXJlZCB1bmRlciBjb25zdHJhaW5lZCBjb250ZXh0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAxZmQ0ZGIyNDdiNzkwY2JkYTc1ZWM0YWNkMzU1NTdkNjEwOTIzN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMzoxNDoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyMDcsNiAmIzQzOzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbiYjNDM7XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG4gXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBhcHBseSBjdXJyZW50X2dmcF9jb250ZXh0KCkgdG8gdGhlIEdGUCBmbGFncywgZW5mb3JjaW5nIHNjb3BlZCBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoZS5nLiwgUEZfTUVNQUxMT0NfTk9GUywgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfUElOKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm0gYnVsayBwYWdlIGFsbG9jYXRpb24gKHN1Y2ggYXMgY29weV9zcGxpY2VfcmVhZCwgYnRyZnMgcGFnZSBhbGxvY2F0aW9uLCBvciB2bWFsbG9jKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgYWxsb2NhdGlvbiBhbm9tYWxpZXMgYXJlIHRyaWdnZXJlZCB1bmRlciBjb25zdHJhaW5lZCBjb250ZXh0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxZmQ0ZGIyNDdiNzkwY2JkYTc1ZWM0YWNkMzU1NTdkNjEwOTIzN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwMzoxNDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01MjA3LDYgJiM0Mzs1MjA3LDcgQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLAogCiAJLyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi8KIAlnZnAgJmFtcDs9IGdmcF9hbGxvd2VkX21hc2s7CiYjNDM7CWdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTsKIAlpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgJmFtcDthYywgJmFtcDtnZnAsICZhbXA7YWxsb2NfZmxhZ3MpKQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODczCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBkaWZmIGZvciBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IHRoaXMgY2hhbmdlIGhhcyBvbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiB0aGV5JiMzOTt2ZSBhZGRlZCBgZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO2AgcmlnaHQgYmVmb3JlIHRoZSBjYWxsIHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYC4gIFRoaXMgbGluZSBpcyBpbnNlcnRlZCB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uCgpNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZXkmIzM5O3JlIHRyeWluZyB0byByZWZpbmUgdGhlIGBnZnBgIGZsYWdzLCBwcm9iYWJseSBiYXNlZCBvbiBzb21lIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIEdpdmVuIHRoZSBuYW1pbmcsIGBjdXJyZW50X2dmcF9jb250ZXh0YCBsaWtlbHkgcmV0cmlldmVzIHNvbWUgcmVsZXZhbnQgY29udGV4dCDigJMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgY3VycmVudCBwcm9jZXNzIG9yIHRhc2sg4oCTIGFuZCB1c2VzIGl0IHRvIHBvdGVudGlhbGx5IG1vZGlmeSB0aGUgYGdmcGAgZmxhZ3MuIFRoaXMgY291bGQgYmUgYWJvdXQgdGhpbmdzIGxpa2UgTlVNQSBhZmZpbml0eSwgb3IgbWVtb3J5IGFsbG9jYXRpb24gcG9saWNpZXMsIG9yIG90aGVyIHN5c3RlbS1sZXZlbCByZXN0cmljdGlvbnMuICBUaGUgdXNlIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YCBzdWdnZXN0cyB0aGV5IGFyZSB0YWtpbmcgaW50byBjb25zaWRlcmF0aW9uIHRoZSBjdXJyZW50IHRhc2smIzM5O3Mgc3RhdGUuCgpJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjdXJyZW50X2dmcF9jb250ZXh0YCBkb2VzIGluIGRldGFpbC4gQSBkZWVwZXIgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBnZnBgIGZsYWdzLCBpcyByZXF1aXJlZCB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGFjdC4gSSBhbHNvIHNob3VsZCBiZSBhd2FyZSB0aGF0IGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBjb3VsZCBiZSBhbHRlcmVkIGJhc2VkIG9uIHRoaXMgbmV3IGBnZnBgIHZhbHVlLiBJcyBpdCBhIHNlY3VyaXR5IGZpeD8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBncmVwcGVyIHNlYXJjaCBmb3IgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIHdpbGwgYmUgbXkgbmV4dCBzdGVwLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTE5NTpcdFxuNTE5NjpcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuNTE5NzpcdFx0LypcbjUxOTg6XHRcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXG41MTk5Olx0XHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXG41MjAwOlx0XHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXG41MjAxOlx0XHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCYjMzk7bGwgaGF2ZVxuNTIwMjpcdFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cbjUyMDM6XHRcdCAqL1xuNTIwNDpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuNTIwNTpcdFx0XHRnb3RvIGZhaWxlZDtcbjUyMDY6XHQjZW5kaWZcbjUyMDc6XHRcbjUyMDg6XHRcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXG41MjA5Olx0XHRnZnAgXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xuNTIxMDpcdFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xuNTIxMTpcdFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbjUyMTI6XHRcdFx0Z290byBvdXQ7XG41MjEzOlx0XG41MjE0Olx0XHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xuNTIxNTpcdFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xuNTIxNjpcdFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XG41MjE3Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWFyaztcbjUyMTg6XHRcbjUyMTk6XHRcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NQVVNFVCkgXHUwMDI2XHUwMDI2XG41MjIwOlx0XHRcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkpIHtcbjUyMjE6XHRcdFx0XHRjb250aW51ZTtcbjUyMjI6XHRcdFx0fVxuNTIyMzpcdFxuNTIyNDpcdFx0XHRpZiAobnJfb25saW5lX25vZGVzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiB6b25lICE9IHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpIFx1MDAyNlx1MDAyNlxuNTIyNTpcdFx0XHQgICAgem9uZV90b19uaWQoem9uZSkgIT0gem9uZWxpc3Rfbm9kZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpKSB7XG41MjI2Olx0XHRcdFx0Z290byBmYWlsZWQ7XG41MjI3Olx0XHRcdH1cbjUyMjg6XHRcbjUyMjk6XHRcdFx0Y29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKTtcbjUyMzA6XHRyZXRyeV90aGlzX3pvbmU6XG41MjMxOlx0XHRcdG1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgJiM0MzsgbnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQ7XG41MjMyOlx0XHRcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxuNTIzMzpcdFx0XHRcdFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxuNTIzNDpcdFx0XHRcdFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjEwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gdGhpcy4gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhpcyBjbGVhcmx5IGludm9sdmVzIGJ1bGsgYWxsb2NhdGlvbiB3aXRob3V0IHByb2ZpbGluZyBvdmVyaGVhZC4gR29vZCB0byBrbm93LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuJiMzNDsgVGhlIGtleSBxdWVzdGlvbiBoZXJlIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY3VycmVudCBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0LiBUaGF04oCZcyB3aGVyZSBgY3VycmVudF9nZnBfY29udGV4dGAgY29tZXMgaW4uIEkgc3VzcGVjdCBpdCBob2xkcyB0aGUgZmxhZ3MgZ292ZXJuaW5nIGhvdyB0aGUgcGFnZXMgYXJlIGFsbG9jYXRlZCAoZS5nLiwgd2hldGhlciB0byB3YWl0LCB3aGF0IE5VTUEgbm9kZSB0byBwcmVmZXIsIGV0Yy4pLgoKTXkgbmV4dCBzdGVwIGlzIGxvZ2ljYWwuIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgY3VycmVudF9nZnBfY29udGV4dGAgaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoaXMgZnVuY3Rpb24uIFNvLCBJJiMzOTttIGdvaW5nIHRvIGZpcmUgdXAgYSBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2ggdG9vbCB0byBxdWlja2x5IGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBhbmQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29udHJvbCBmbG93IHdpdGhpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB0aG9zZSB1c2UgY2FzZXMgd2lsbCBpbGx1bWluYXRlIGhvdyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIG1ha2VzIHVzZSBvZiwgYW5kIGxpa2VseSBvdmVycmlkZXMsIHRoZSBkZWZhdWx0IGFsbG9jYXRpb24gc2V0dGluZ3MsIGFuZCBwb3RlbnRpYWxseSBwcm92aWRlIGNydWNpYWwgaW5zaWdodCBpbnRvIGhvdyB0aGUgb3B0aW1pemF0aW9uIGlzIGFjY29tcGxpc2hlZC4gVGhlIGNvbnRleHQgZmxhZ3MgYXJlIGNyaXRpY2FsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N1cnJlbnRfZ2ZwX2NvbnRleHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzL2ZpbGUuYz01MTI9c3RhdGljIGJvb2wgbmZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25mcy9maWxlLmMtNTE3LVx0aWYgKGZvbGlvX3Rlc3RfcHJpdmF0ZShmb2xpbykpIHtcbmZzL25mcy9maWxlLmM6NTE4Olx0XHRpZiAoKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKSBcdTAwMjYgR0ZQX0tFUk5FTCkgIT0gR0ZQX0tFUk5FTCB8fFxuZnMvbmZzL2ZpbGUuYy01MTktXHRcdCAgICBjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkpXG4tLVxuZnMvbmZzL2ludGVybmFsLmg9Njk2PXN0YXRpYyBpbmxpbmUgZ2ZwX3QgbmZzX2lvX2dmcF9tYXNrKHZvaWQpXG5mcy9uZnMvaW50ZXJuYWwuaC02OTcte1xuZnMvbmZzL2ludGVybmFsLmg6Njk4Olx0Z2ZwX3QgcmV0ID0gY3VycmVudF9nZnBfY29udGV4dChHRlBfS0VSTkVMKTtcbmZzL25mcy9pbnRlcm5hbC5oLTY5OS1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl92Zm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ3LSAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI0ODpzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9Mjg3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1hbGxvY19yZXRyeV93YWl0KGdmcF90IGdmcF9mbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjkzLVx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6Mjk0Olx0Z2ZwX2ZsYWdzID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI5NS1cdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfZmxhZ3MpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDE0NT1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXG5tbS9odWdlX21lbW9yeS5jOjQyMTU6XHRcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQobWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmMtNDIxNi1cdFx0XHRcdFx0XHRcdEdGUF9SRUNMQUlNX01BU0spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNzUyPWFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zNzg0LVxubW0vcGFnZV9hbGxvYy5jOjM3ODU6LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDM4Mz12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcbm1tL3BhZ2VfYWxsb2MuYzo0Mzg1Olx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDAwPXZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xubW0vcGFnZV9hbGxvYy5jOjQ0MDI6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjA5LVx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbm1tL3BhZ2VfYWxsb2MuYzo1MjEwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTUyMTEtXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MTktXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo1NDIwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0MjEtXHRhbGxvY19nZnAgPSBnZnA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MzEyLVxubW0vcGFnZV9hbGxvYy5jOjczMTM6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTczMTQtXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcdTAwMjZjYy5nZnBfbWFzaykpXG4tLVxubW0vcGVyY3B1LmM9MTczNT12b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxuLS1cbm1tL3BlcmNwdS5jLTE3NDktXG5tbS9wZXJjcHUuYzoxNzUwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGVyY3B1LmMtMTc1MS1cdC8qXG4tLVxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02Nzc0LVx0XHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXG5tbS92bXNjYW4uYzo2Nzc1Olx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTY3NzYtXHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbi0tXG5tbS92bXNjYW4uYz02ODU1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjg2NS1cdFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jOjY4NjY6XHRcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxubW0vdm1zY2FuLmMtNjg2Ny1cdFx0XHRcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcdTAwMjYgfkdGUF9SRUNMQUlNX01BU0spLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4NzY9dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS92bXNjYW4uYy03ODgyLVx0XHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXG5tbS92bXNjYW4uYzo3ODgzOlx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTc4ODQtXHRcdC5vcmRlciA9IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jPTc5NTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMzUtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcbm1tL3Ztc2Nhbi5jOjgwMzY6XHRcdFx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTgwMzctXHRcdFx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaD04OD1pbnQgc2NucHJpbnRmX3BhZChjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqIGZtdCwgLi4uKTtcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTkzLVxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaDo5NDojZGVmaW5lIGN1cnJlbnRfZ2ZwX2NvbnRleHQoaykgMFxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaC05NS0jZGVmaW5lIHN5bmNocm9uaXplX3JjdSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIEkgc2VlIGl0IHN0YXJ0cyBieSBtYXNzYWdpbmcgdGhlIGBnZnBgIGZsYWdzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1hc2tpbmcgdGhlIGFsbG9jYXRpb24gZmxhZ3Mgd2l0aCBgZ2ZwX2FsbG93ZWRfbWFza2AgYW5kIHRoZW4gY2FsbHMgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAuIFRoYXQgZnVuY3Rpb24gY2FsbCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IHNlZW1zIGxpa2UgYSBwaXZvdGFsIHBpZWNlLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBjb250ZXh0IGlzIGFjdHVhbGx5IGJlaW5nIGhhbmRsZWQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHJpZ2h0IGF3YXkuIFRoYXQgc2hvdWxkIGJlIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAyNDguIFRpbWUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBkZWNpc2lvbnMgYXJlIG1hZGUgd2l0aGluIHRoZSBzY2hlZHVsZXImIzM5O3MgcHVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0fVxuIDI0MTpcdFxuIDI0MjpcdC8qXG4gMjQzOlx0ICogQXBwbGllcyBwZXItdGFzayBnZnAgY29udGV4dCB0byB0aGUgZ2l2ZW4gYWxsb2NhdGlvbiBmbGFncy5cbiAyNDQ6XHQgKiBQRl9NRU1BTExPQ19OT0lPIGltcGxpZXMgR0ZQX05PSU9cbiAyNDU6XHQgKiBQRl9NRU1BTExPQ19OT0ZTIGltcGxpZXMgR0ZQX05PRlNcbiAyNDY6XHQgKiBQRl9NRU1BTExPQ19QSU4gIGltcGxpZXMgIUdGUF9NT1ZBQkxFXG4gMjQ3Olx0ICovXG4gMjQ4Olx0c3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF90IGZsYWdzKVxuIDI0OTpcdHtcbiAyNTA6XHRcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VmbGFncyk7XG4gMjUxOlx0XG4gMjUyOlx0XHRpZiAodW5saWtlbHkocGZsYWdzIFx1MDAyNiAoUEZfTUVNQUxMT0NfTk9JTyB8IFBGX01FTUFMTE9DX05PRlMgfCBQRl9NRU1BTExPQ19QSU4pKSkge1xuIDI1MzpcdFx0XHQvKlxuIDI1NDpcdFx0XHQgKiBOT0lPIGltcGxpZXMgYm90aCBOT0lPIGFuZCBOT0ZTIGFuZCBpdCBpcyBhIHdlYWtlciBjb250ZXh0XG4gMjU1Olx0XHRcdCAqIHNvIGFsd2F5cyBtYWtlIHN1cmUgaXQgbWFrZXMgcHJlY2VkZW5jZVxuIDI1NjpcdFx0XHQgKi9cbiAyNTc6XHRcdFx0aWYgKHBmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0NfTk9JTylcbiAyNTg6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH4oX19HRlBfSU8gfCBfX0dGUF9GUyk7XG4gMjU5Olx0XHRcdGVsc2UgaWYgKHBmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0NfTk9GUylcbiAyNjA6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH5fX0dGUF9GUztcbiAyNjE6XHRcbiAyNjI6XHRcdFx0aWYgKHBmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0NfUElOKVxuIDI2MzpcdFx0XHRcdGZsYWdzIFx1MDAyNj0gfl9fR0ZQX01PVkFCTEU7XG4gMjY0Olx0XHR9XG4gMjY1Olx0XHRyZXR1cm4gZmxhZ3M7XG4gMjY2Olx0fVxuIDI2NzpcdFxuIDI2ODpcdCNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIDI2OTpcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApO1xuIDI3MDpcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApO1xuIDI3MTpcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzayk7XG4gMjcyOlx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKTtcbiAyNzM6XHQjZWxzZVxuIDI3NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKSB7IH1cbiAyNzU6XHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCkgeyB9XG4gMjc2Olx0c3RhdGljIGlubGluZSB2b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaykgeyB9XG4gMjc3Olx0c3RhdGljIGlubGluZSB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzaykgeyB9XG4gMjc4Olx0I2VuZGlmXG4gMjc5Olx0XG4gMjgwOlx0LyogQW55IG1lbW9yeS1hbGxvY2F0aW9uIHJldHJ5IGxvb3Agc2hvdWxkIHVzZVxuIDI4MTpcdCAqIG1lbWFsbG9jX3JldHJ5X3dhaXQoKSwgYW5kIHBhc3MgdGhlIGZsYWdzIGZvciB0aGUgbW9zdFxuIDI4MjpcdCAqIGNvbnN0cmFpbmVkIGFsbG9jYXRpb24gYXR0ZW1wdCB0aGF0IG1pZ2h0IGhhdmUgZmFpbGVkLlxuIDI4MzpcdCAqIFRoaXMgcHJvdmlkZXMgdXNlZnVsIGRvY3VtZW50YXRpb24gb2Ygd2hlcmUgbG9vcHMgYXJlLFxuIDI4NDpcdCAqIGFuZCBhIGNlbnRyYWwgcGxhY2UgdG8gZmluZSB0dW5lIHRoZSB3YWl0aW5nIGFzIHRoZSBNTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhpcyBpcyBhIGNydWNpYWwgcGllY2Ugb2YgY29kZSBmb3IgZGVhbGluZyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIHdoZW4gdGhlIHN5c3RlbSBpcyB1bmRlciBzb21lIGtpbmQgb2Ygc3RyZXNzLCBwZXJoYXBzIGR1cmluZyBlYXJseSBib290IG9yIGluIHJlc3BvbnNlIHRvIGEgY3JpdGljYWwgZXZlbnQgd2hlcmUgcHJvZmlsaW5nIGlzIGVpdGhlciBpbXByYWN0aWNhbCBvciBkZXRyaW1lbnRhbC4gVGhlICYjMzQ7ZnJvemVuJiMzNDsgcGFydCBpbXBsaWVzIHRoZXNlIHBhZ2VzIGFyZSBwcm9iYWJseSBtYW5hZ2VkIGRpZmZlcmVudGx5LCBwb3NzaWJseSBieXBhc3Npbmcgc29tZSBvZiB0aGUgbm9ybWFsIGJvb2trZWVwaW5nIGFuZCBhY2NvdW50aW5nIG92ZXJoZWFkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhcmVmdWxseSBvcHRpbWl6ZWQsIHBvdGVudGlhbGx5IHJlbHlpbmcgb24gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgb3IgbWVtb3J5IGxheW91dCBhc3N1bXB0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBidWRkeSBhbGxvY2F0b3Igb3IgYW55IG90aGVyIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIHBvaW50cyBhbmQgaG93IG1lbW9yeSBjb3JydXB0aW9uIGlzIGF2b2lkZWQuIEtub3dpbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbWVjaGFuaXNtcyB3aWxsIGFsc28gYmUgdml0YWwuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGNyaXRpY2FsIHBhZ2UgYWxsb2NhdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQxMDpcdFx0fVxuNTQxMTpcdFxuNTQxMjpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjU0MTM6XHRcdC8qXG41NDE0Olx0XHQgKiBBcHBseSBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cy4gVGhpcyBpcyBtYWlubHkgYWJvdXQgR0ZQX05PRlNcbjU0MTU6XHRcdCAqIHJlc3AuIEdGUF9OT0lPIHdoaWNoIGhhcyB0byBiZSBpbmhlcml0ZWQgZm9yIGFsbCBhbGxvY2F0aW9uIHJlcXVlc3RzXG41NDE2Olx0XHQgKiBmcm9tIGEgcGFydGljdWxhciBjb250ZXh0IHdoaWNoIGhhcyBiZWVuIG1hcmtlZCBieVxuNTQxNzpcdFx0ICogbWVtYWxsb2Nfbm97ZnMsaW99X3tzYXZlLHJlc3RvcmV9LiBBbmQgUEZfTUVNQUxMT0NfUElOIHdoaWNoIGVuc3VyZXNcbjU0MTg6XHRcdCAqIG1vdmFibGUgem9uZXMgYXJlIG5vdCB1c2VkIGR1cmluZyBhbGxvY2F0aW9uLlxuNTQxOTpcdFx0ICovXG41NDIwOlx0XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG41NDIxOlx0XHRhbGxvY19nZnAgPSBnZnA7XG41NDIyOlx0XHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLFxuNTQyMzpcdFx0XHRcdFx1MDAyNmFsbG9jX2dmcCwgXHUwMDI2ZmFzdHBhdGhfYWxsb2NfZmxhZ3MpKVxuNTQyNDpcdFx0XHRyZXR1cm4gTlVMTDtcbjU0MjU6XHRcbjU0MjY6XHRcdGlmICghKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spKSB7XG41NDI3Olx0XHRcdC8qXG41NDI4Olx0XHRcdCAqIEZvcmJpZCB0aGUgZmlyc3QgcGFzcyBmcm9tIGZhbGxpbmcgYmFjayB0byB0eXBlcyB0aGF0XG41NDI5Olx0XHRcdCAqIGZyYWdtZW50IG1lbW9yeSB1bnRpbCBhbGwgbG9jYWwgem9uZXMgYXJlIGNvbnNpZGVyZWQuXG41NDMwOlx0XHRcdCAqL1xuNTQzMTpcdFx0XHRmYXN0cGF0aF9hbGxvY19mbGFncyB8PSBhbGxvY19mbGFnc19ub2ZyYWdtZW50KFxuNTQzMjpcdFx0XHRcdHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCBnZnApO1xuNTQzMzpcdFx0fVxuNTQzNDpcdFx0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwLCBvcmRlcikgXHUwMDI2IEFMTE9DX0hJR0hBVE9NSUM7XG41NDM1Olx0XG41NDM2Olx0XHQvKiBGaXJzdCBhbGxvY2F0aW9uIGF0dGVtcHQgKG9yLCBmb3Igbm9sb2NrLCBvbmx5IGF0dGVtcHQpICovXG41NDM3Olx0XHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChhbGxvY19nZnAsIG9yZGVyLCBmYXN0cGF0aF9hbGxvY19mbGFncywgXHUwMDI2YWMpO1xuNTQzODpcdFx0aWYgKGxpa2VseShwYWdlKSB8fCAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSykpXG41NDM5Olx0XHRcdGdvdG8gb3V0O1xuNTQ0MDpcdFxuNTQ0MTpcdFx0YWxsb2NfZ2ZwID0gZ2ZwO1xuNTQ0MjpcdFx0YWMuc3ByZWFkX2RpcnR5X3BhZ2VzID0gZmFsc2U7XG41NDQzOlx0XG41NDQ0Olx0XHQvKlxuNTQ0NTpcdFx0ICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgbm9kZW1hc2sgaWYgaXQgd2FzIHBvdGVudGlhbGx5IHJlcGxhY2VkIHdpdGhcbjU0NDY6XHRcdCAqIFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCB0byBvcHRpbWl6ZSB0aGUgZmFzdC1wYXRoIGF0dGVtcHQuXG41NDQ3Olx0XHQgKi9cbjU0NDg6XHRcdGFjLm5vZGVtYXNrID0gbm9kZW1hc2s7XG41NDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDaGFuZ2UgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSByZWNlbnQgY2hhbmdlIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEl0IGFwcGVhcnMgdGhhdCBhIGNydWNpYWwgbGluZSBoYXMgYmVlbiBhZGRlZDogYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuICBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgZnVuY3Rpb24gZGlkbiYjMzk7dCBpbmNsdWRlIHRoaXMgY2FsbCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhZGRpdGlvbi4gIFRoaXMgZnVuY3Rpb24gaXMgd2l0aGluIHRoZSBwYWdlIGFsbG9jYXRvciwgc28gaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IuICBUaGUgR0ZQIGZsYWdzIGFyZSBhdCBwbGF5IGhlcmUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIG1lbW9yeS4KClRoZSBjb3JlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFkZGl0aW9uPyBUbyBmaWd1cmUgdGhhdCBvdXQsIEkgbmVlZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBhbGxvY19wYWdlc19idWxrYCBhbmQgaXRzIHZhcmlhbnRzIChgYWxsb2NfcGFnZXNfYnVsa19hcnJheWAsIGBhbGxvY19wYWdlc19idWxrX2xpc3RgLCBhbmQgdGhlIG1vZGlmaWVkIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmApIGFyZSBiZWluZyAqdXNlZCouICBXaGF0IHBhcnRzIG9mIHRoZSBrZXJuZWwgcmVseSBvbiB0aGlzIGZ1bmN0aW9uYWxpdHk/ICBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gc2VlIGhvdyB0aGlzIGNoYW5nZSBwcm9wYWdhdGVzIGFuZCB3aGF0IHN5c3RlbXMgYXJlIG5vdyBhZmZlY3RlZCBieSB0aGlzIGNvbnRleHR1YWwgY2hhbmdlLiBUaW1lIHRvIGZpbmQgdGhlIGNhbGxlcnMgb2YgdGhvc2UgZnVuY3Rpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAxOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAyLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29tbWl0IGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmF0aW9uYWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgYGdpdCBsb2dgLCBidXQgSSBkb24mIzM5O3QgaGF2ZSB0aGF0IHRvb2wgaGFuZHkgZGlyZWN0bHkuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBkb2VzIHRoZSBwYXRjaCBpdHNlbGYgdGVsbCBtZT8gQWgsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzICp3aHkqPyBXaHkgYXJlIHRoZXkgZG9pbmcgdGhpcz8KClJpZ2h0LCBpdCYjMzk7cyBoaXR0aW5nIG1lIG5vdy4gVGhlIGlzc3VlIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXNuJiMzOTt0IHJlc3BlY3RpbmcgdGhlIHRhc2sgZmxhZ3MhIEZsYWdzIGxpa2UgYFBGX01FTUFMTE9DX05PSU9gLCBgUEZfTUVNQUxMT0NfTk9GU2AsIGFuZCBgUEZfTUVNQUxMT0NfUElOYCBhcmUgaW1wb3J0YW50IGNvbnN0cmFpbnRzLiBUaGUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZTsgaXQgbGlrZWx5IGFwcGxpZXMgdGhlIHRhc2stc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMsIGVmZmVjdGl2ZWx5IGVuZm9yY2luZyB0aG9zZSBgUEZfKmAgZmxhZ3MuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtLiBMZXQgbWUganVzdCBnbGFuY2UgYXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBzZWUgaWYgdGhhdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGlzIHN1cHBvc2VkIHRvIHRha2UgZWZmZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTA5MDpcdFxuNTA5MTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG41MDkyOlx0XHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcbjUwOTM6XHRcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBnZnBfdCAqYWxsb2NfZ2ZwLFxuNTA5NDpcdFx0XHR1bnNpZ25lZCBpbnQgKmFsbG9jX2ZsYWdzKVxuNTA5NTpcdHtcbjUwOTY6XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKGdmcF9tYXNrKTtcbjUwOTc6XHRcdGFjLVx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XG41MDk4Olx0XHRhYy1cdTAwM2Vub2RlbWFzayA9IG5vZGVtYXNrO1xuNTA5OTpcdFx0YWMtXHUwMDNlbWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spO1xuNTEwMDpcdFxuNTEwMTpcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpKSB7XG41MTAyOlx0XHRcdCphbGxvY19nZnAgfD0gX19HRlBfSEFSRFdBTEw7XG41MTAzOlx0XHRcdC8qXG41MTA0Olx0XHRcdCAqIFdoZW4gd2UgYXJlIGluIHRoZSBpbnRlcnJ1cHQgY29udGV4dCwgaXQgaXMgaXJyZWxldmFudFxuNTEwNTpcdFx0XHQgKiB0byB0aGUgY3VycmVudCB0YXNrIGNvbnRleHQuIEl0IG1lYW5zIHRoYXQgYW55IG5vZGUgb2suXG41MTA2Olx0XHRcdCAqL1xuNTEwNzpcdFx0XHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiAhYWMtXHUwMDNlbm9kZW1hc2spXG41MTA4Olx0XHRcdFx0YWMtXHUwMDNlbm9kZW1hc2sgPSBcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG41MTA5Olx0XHRcdGVsc2VcbjUxMTA6XHRcdFx0XHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfQ1BVU0VUO1xuNTExMTpcdFx0fVxuNTExMjpcdFxuNTExMzpcdFx0bWlnaHRfYWxsb2MoZ2ZwX21hc2spO1xuNTExNDpcdFxuNTExNTpcdFx0LypcbjUxMTY6XHRcdCAqIERvbiYjMzk7dCBpbnZva2Ugc2hvdWxkX2ZhaWwgbG9naWMsIHNpbmNlIGl0IG1heSBjYWxsXG41MTE3Olx0XHQgKiBnZXRfcmFuZG9tX3UzMigpIGFuZCBwcmludGsoKSB3aGljaCBuZWVkIHRvIHNwaW5fbG9jay5cbjUxMTg6XHRcdCAqL1xuNTExOTpcdFx0aWYgKCEoKmFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spIFx1MDAyNlx1MDAyNlxuNTEyMDpcdFx0ICAgIHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSlcbjUxMjE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNTEyMjpcdFxuNTEyMzpcdFx0KmFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XG41MTI0Olx0XG41MTI1Olx0XHQvKiBEaXJ0eSB6b25lIGJhbGFuY2luZyBvbmx5IGRvbmUgaW4gdGhlIGZhc3QgcGF0aCAqL1xuNTEyNjpcdFx0YWMtXHUwMDNlc3ByZWFkX2RpcnR5X3BhZ2VzID0gKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9XUklURSk7XG41MTI3Olx0XG41MTI4Olx0XHQvKlxuNTEyOTpcdFx0ICogVGhlIHByZWZlcnJlZCB6b25lIGlzIHVzZWQgZm9yIHN0YXRpc3RpY3MgYnV0IGNydWNpYWxseSBpdCBpc1xuNTEzMDpcdFx0ICogYWxzbyB1c2VkIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHpvbmVsaXN0IGl0ZXJhdG9yLiBJdFxuNTEzMTpcdFx0ICogbWF5IGdldCByZXNldCBmb3IgYWxsb2NhdGlvbnMgdGhhdCBpZ25vcmUgbWVtb3J5IHBvbGljaWVzLlxuNTEzMjpcdFx0ICovXG41MTMzOlx0XHRhYy1cdTAwM2VwcmVmZXJyZWRfem9uZXJlZiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KGFjLVx1MDAzZXpvbmVsaXN0LFxuNTEzNDpcdFx0XHRcdFx0XHRhYy1cdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGFjLVx1MDAzZW5vZGVtYXNrKTtcbjUxMzU6XHRcbjUxMzY6XHRcdHJldHVybiB0cnVlO1xuNTEzNzpcdH1cbjUxMzg6XHRcbjUxMzk6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI4NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBgcHJlcGFyZV9hbGxvY19wYWdlc2AqKgoKT2theSwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCBgcHJlcGFyZV9hbGxvY19wYWdlc2AgaXMgYWN0dWFsbHkgY2FsbGluZy4gQWgsIGxpbmUgNTEyMzogaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzZXR0aW5nIGAqYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtgLiBOb3csIEkgcmVjYWxsIHRoYXQgZ3JlcCByZXN1bHQgZnJvbSBlYXJsaWVyLCB0aGF0IGxpbmUgMzc4NSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBtZW50aW9uczogJiMzNDsvKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqLyYjMzQ7LiBBbmQgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGhlcmUgaXMgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gYGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylgISBPa2F5LCB0aGF0IHJpbmdzIGEgYmVsbC4gTm93IGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gYW5kIHRoZSBwdXJwb3NlIG9mIGBhbGxvY19mbGFnc19jbWFgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCYjMzk7cyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzc4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzg0Olx0XG4zNzg1Olx0LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cbjM3ODY6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2spXG4zNzg3Olx0e1xuMzc4ODpcdCNpZmRlZiBDT05GSUdfQ01BXG4zNzg5Olx0XHRpZiAoZ2ZwX21pZ3JhdGV0eXBlKGdmcF9tYXNrKSA9PSBNSUdSQVRFX01PVkFCTEUpXG4zNzkwOlx0XHRcdHJldHVybiBBTExPQ19DTUE7XG4zNzkxOlx0I2VuZGlmXG4zNzkyOlx0XHRyZXR1cm4gQUxMT0NfREVGQVVMVDtcbjM3OTM6XHR9XG4zNzk0Olx0XG4zNzk1Olx0LypcbjM3OTY6XHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0IGdvZXMgdGhyb3VnaCB0aGUgem9uZWxpc3QgdHJ5aW5nIHRvIGFsbG9jYXRlXG4zNzk3Olx0ICogYSBwYWdlLlxuMzc5ODpcdCAqL1xuMzc5OTpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqXG4zODAwOlx0Z2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgYWxsb2NfZmxhZ3MsXG4zODAxOlx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuMzgwMjpcdHtcbjM4MDM6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgV29ydGhGdXp6aW5nIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBUaGUgY29tbWVudCBvbiBgYWxsb2NfZmxhZ3NfY21hYCBpcyBrZXk6ICYjMzQ7TXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAsIHdoaWNoIGNhbiBjaGFuZ2UgYGdmcF9tYXNrYC4mIzM0OyBUaGlzIGxpbmtzIGRpcmVjdGx5IHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzKClgIGFuZCBob3cgYGFsbG9jX2ZsYWdzX2NtYWAgaXMgdXNlZCB3aXRoaW4gaXQsIGFuZCB0aGF0IGZ1bmN0aW9uIHRoZW4gY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSSYjMzk7bSBhbHNvIHNlZWluZyBgbWlnaHRfYWxsb2MoZ2ZwX21hc2spYCBiZWluZyBjYWxsZWQgaW4gYHByZXBhcmVfYWxsb2NfcGFnZXMoKWAuIE15IG1haW4gY29uY2VybiBpcywgaWYgYFBGX01FTUFMTE9DX05PRlNgIGlzIHNldCBvbiB0aGUgY3VycmVudCBwcm9jZXNzIGFuZCBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgY2FsbGVkIHdpdGggYEdGUF9LRVJORUxgICh3aGljaCBpbmNsdWRlcyBgX19HRlBfRlNgKSwgdGhlbiBgbWlnaHRfYWxsb2MoR0ZQX0tFUk5FTClgIGNvdWxkIGNhdXNlIGEgbG9ja2RlcCBvciBmc19yZWNsYWltIHdhcm5pbmcgaWYgYGdmcGAgaXNuJiMzOTt0IHByb3Blcmx5IHN0cmlwcGVkIG9mIGBfX0dGUF9GU2AgZmlyc3QuIE9yIG1heWJlLCBpdCYjMzk7cyBhIENNQSBpc3N1ZSB3aXRoIGBQRl9NRU1BTExPQ19QSU5gIHdoZXJlIGZsYWdzIGFyZSBiZWluZyBpbXByb3Blcmx5IG1hc2tlZC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHNvbWV0aGluZyB0byBmdXp6LiBMZXQmIzM5O3Mgc2VlLi4uIGlzIHRoaXMgY2hhbmdlIHJlYWNoYWJsZT8gWWVzLCBtbS9wYWdlX2FsbG9jLmMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzbyB0aGF0JiMzOTtzIGEgY2hlY2sgbWFyay4KCklzIGl0IHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYS4gU2luY2UgdGhpcyBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHRoZSBhbnN3ZXIgaXMgKnVuZXF1aXZvY2FsbHkqIFlFUy4gQWNjb3JkaW5nIHRvIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGNyaXRlcmlhLCBhbnkgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhcmUgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCB0aGlzIGlzIGNvcmUgc3Vic3lzdGVtIGNvZGUgKG1tL3BhZ2VfYWxsb2MuYykgdGhhdCBpcyBjYWxsZWQgaW4gbm9ybWFsIG9wZXJhdGlvbiAoYnRyZnMsIGZ1c2UsIHBhZ2VfcG9vbCwgZXRjLikuIGBXb3J0aEZ1enppbmdgIE1VU1QgQkUgVFJVRS4KCk5vdywgaG93IHNob3VsZCBJIGRpcmVjdCB0aGUgZnV6emVyIHRvIG1heGltaXplIGVmZmVjdGl2ZW5lc3M/CgpUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gcHJldmVudCBkaWx1dGlvbi4gSSBuZWVkIHRvIGF2b2lkICYjMzQ7dWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzJiMzNDsgbGlrZSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLiBCdXQgd2FpdCwgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBjb25zaWRlcmVkIGEgdWJpcXVpdG91cyBhbGxvY2F0b3I/IEkgbmVlZCB0byBhbmFseXplIHRoaXMgdmVyeSBjYXJlZnVsbHkuIExldCYjMzk7cyByZS1yZWFkIHRob3NlIGluc3RydWN0aW9uczogJiMzNDtEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycy4uLikuJiMzNDsgTXkgaW5pdGlhbCB0aG91Z2h0LCBpcyB0aGF0IHRoZSBhbGxvY2F0b3JzICphcmUqIHByZXR0eSBtdWNoIHViaXF1aXRvdXMsIHNvIHRoZSBpbnN0cnVjdGlvbnMgd291bGQgc3VnZ2VzdCB0byBpZ25vcmUgdGhlbS4gSG93ZXZlciwgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhICpnZW5lcmFsKiBtZW1vcnkgYWxsb2NhdG9yLCBvciBpcyBpdCBhIG1vcmUgc3BlY2lmaWMgb25lPyBXaGF0IGNhbGxzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmA/CgpPa2F5LCBmcm9tIHRoZSBncmVwIHJlc3VsdHMsIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBieTogY29weV9zcGxpY2VfcmVhZCBpbiBmcy9zcGxpY2UuYywgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSwgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZiwgYXJlbmFfYWxsb2NfcGFnZXMsIHNldmVyYWwgbW0vbWVtcG9saWN5LmMgZnVuY3Rpb25zLCBhbmQgYSBmZXcgb3RoZXJzIGZyb20gZHJpdmVycyBhbmQgbmV0d29ya2luZy4gT2theSwgbGV0JiMzOTtzIHN0b3AgZm9yIGEgbW9tZW50LiBJcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGNhbGxlZCBieSBhbG1vc3QgKmV2ZXJ5KiBwcm9ncmFtPyBOTyEgU3RhbmRhcmQgYWxsb2NhdGlvbiBwYXRocyBub3JtYWxseSB1c2Uga21hbGxvYyBvciB2bWFsbG9jIG9yIHNpbmdsZS1wYWdlIGFsbG9jYXRpb25zIChfX2FsbG9jX3BhZ2VzX25vcHJvZikuIEl0IGxvb2tzIGxpa2UgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBmYWlybHkgc3BlY2lmaWMuIFRoZXJlZm9yZSwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyAqbm90KiBhICYjMzQ7Z2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbi4mIzM0OwpOb3cgSSBuZWVkIHRvIHJlLWNoZWNrIHRoZSB2bWFsbG9jIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzczNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzM1Olx0XHRcdFx0ICovXG4zNzM2Olx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCA9IG1pbigxMDBVTCwgbnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQpO1xuMzczNzpcdFxuMzczODpcdFx0XHRcdC8qIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBjb25zaWRlciBtZW1wb2xpY3ksIHdlIGNhbiYjMzk7dFxuMzczOTpcdFx0XHRcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXG4zNzQwOlx0XHRcdFx0ICogb3RoZXJ3aXNlIG1lbW9yeSBtYXkgYmUgYWxsb2NhdGVkIGluIG9ubHkgb25lIG5vZGUsXG4zNzQxOlx0XHRcdFx0ICogYnV0IG1lbXBvbGljeSB3YW50cyB0byBhbGxvYyBtZW1vcnkgYnkgaW50ZXJsZWF2aW5nLlxuMzc0MjpcdFx0XHRcdCAqL1xuMzc0MzpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbjM3NDQ6XHRcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbjM3NDU6XHRcdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4zNzQ2Olx0XHRcdFx0XHRcdFx0XHRwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQpO1xuMzc0NzpcdFx0XHRcdGVsc2VcbjM3NDg6XHRcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcbjM3NDk6XHRcdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4zNzUwOlx0XHRcdFx0XHRcdFx0XHRwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQpO1xuMzc1MTpcdFxuMzc1MjpcdFx0XHRcdGZvciAoaSA9IG5yX2FsbG9jYXRlZDsgaSBcdTAwM2MgbnJfYWxsb2NhdGVkICYjNDM7IG5yOyBpJiM0MzsmIzQzOylcbjM3NTM6XHRcdFx0XHRcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlc1tpXSwgTlJfVk1BTExPQywgMSk7XG4zNzU0Olx0XG4zNzU1Olx0XHRcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBucjtcbjM3NTY6XHRcbjM3NTc6XHRcdFx0XHQvKlxuMzc1ODpcdFx0XHRcdCAqIElmIHplcm8gb3IgcGFnZXMgd2VyZSBvYnRhaW5lZCBwYXJ0bHksXG4zNzU5Olx0XHRcdFx0ICogZmFsbGJhY2sgdG8gYSBzaW5nbGUgcGFnZSBhbGxvY2F0b3IuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTI1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB2bWFsbG9jIEFsbG9jYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB2bWFsbG9jYCBpcyBhbGxvY2F0aW5nIHBhZ2VzLCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtbS92bWFsbG9jLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGB2bV9hcmVhX2FsbG9jX3BhZ2VzKClgIGlzIGJlaW5nIHVzZWQuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHVzaW5nIGVpdGhlciBgYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZmAgb3IgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggYWxsb2NhdGluZyBtdWx0aXBsZSBwYWdlcyBhdCBvbmNlLCBsaWtlbHkgdG8gb3B0aW1pemUgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBmb3IgYSBsYXJnZSBgdm1hbGxvY2AgcmVnaW9uLgoKTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cC4gSXMgYF9fdm1hbGxvY19ub2RlX3JhbmdlYCBjYWxsaW5nIHRoaXMgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGZ1bmN0aW9uPyBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGluIGEgdm1hbGxvYyBjYWxsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gY29uZmlybSB0aGF0IGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZWAgaXMgaW5kZWVkIGludm9raW5nIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCB0byBhbGxvY2F0ZSB0aGUgdW5kZXJseWluZyBwYWdlcy4gTGV0IG1lIGdvIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bV9hcmVhX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zNjc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xubW0vdm1hbGxvYy5jOjM2NzY6dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG5tbS92bWFsbG9jLmMtMzY3Ny1cdFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuLS1cbm1tL3ZtYWxsb2MuYz0zODczPXN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3ZtYWxsb2MuYy0zOTIxLVx0ICovXG5tbS92bWFsbG9jLmM6MzkyMjpcdGFyZWEtXHUwMDNlbnJfcGFnZXMgPSB2bV9hcmVhX2FsbG9jX3BhZ2VzKFxubW0vdm1hbGxvYy5jLTM5MjMtXHRcdFx0dm1hbGxvY19nZnBfYWRqdXN0KGdmcF9tYXNrLCBwYWdlX29yZGVyKSwgbm9kZSxcbi0tXG5tbS92bWFsbG9jLmMtMzkzMS1cdFx0Lypcbm1tL3ZtYWxsb2MuYzozOTMyOlx0XHQgKiB2bV9hcmVhX2FsbG9jX3BhZ2VzKCkgY2FuIGZhaWwgZHVlIHRvIGluc3VmZmljaWVudCBtZW1vcnkgYnV0XG5tbS92bWFsbG9jLmMtMzkzMy1cdFx0ICogYWxzbzotXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTQwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2FzIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggd2FzIG1vZGlmeWluZy4gIFJpZ2h0LCBpdCBpcy4gIGB2bWFsbG9jYCBjYWxscyBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIHdoaWNoIHRoZW4gY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgIGFuZCAqdGhhdCogY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBJcyB0aGlzIGZ1bmN0aW9uIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGBGb2N1c1N5bWJvbGAgaW4gZnV6emluZz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjcml0ZXJpYS4KClRoZSBkb2N1bWVudGF0aW9uIHdhcm5zIGFnYWluc3QgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMmIzM0OyBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuICBJcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgICp1YmlxdWl0b3VzKj8gSXQmIzM5O3MgY2FsbGVkIHdoZW4gYHZtYWxsb2NgIGlzIHVzZWQuICBga21hbGxvY2AgaXMgc3VwZXIgY29tbW9uLCBidXQgYHZtYWxsb2NgIGlzIHVzZWQgYSBkZWNlbnQgYW1vdW50IHRvby4gIElzIGl0ICpnZW5lcmljKiBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCB1YmlxdWl0b3VzPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LgoKTm93LCBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIG5vdCB1YmlxdWl0b3VzLCBJIG1pZ2h0IGhhdmUgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGEgRm9jdXNTeW1ib2whCgpUaGUgcGF0Y2ggYWRkcyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gV2hhdCYjMzk7cyBgY3VycmVudF9nZnBfY29udGV4dGAgZG9pbmc/IEl0JiMzOTtzIHNldHRpbmcgYFBGX01FTUFMTE9DX05PSU9gLCBgUEZfTUVNQUxMT0NfTk9GU2AsIGFuZCBgUEZfTUVNQUxMT0NfUElOYC4gIGBQRl9NRU1BTExPQ19OT0ZTYCBpcyB1c2VkIGR1cmluZyBmcyBvcGVyYXRpb25zL3RyYW5zYWN0aW9ucyBsaWtlIGJ0cmZzLCBleHQ0LCBhbmQgeGZzLiBgUEZfTUVNQUxMT0NfTk9JT2AgaXMgZm9yIHRoZSBibG9jayBsYXllci4gYFBGX01FTUFMTE9DX1BJTmAgaGFzIG1lIHRoaW5raW5nIHVzZXIgcGFnZXMsIHNvIHdoYXQgY29udGV4dCBpcyB0aGF0PyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYFBGX01FTUFMTE9DX1BJTmAgaXMgdXNlZC4gVGhpcyBjb3VsZCBiZSB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIHNwZWNpZmljYWxseSBpbXBvcnRhbnQgdG8gdGVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEZfTUVNQUxMT0NfUElOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQuaD0xNzkwPWV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xODIzLSNkZWZpbmUgUEZfTUNFX0VBUkxZXHRcdDB4MDgwMDAwMDAgICAgICAvKiBFYXJseSBraWxsIGZvciBtY2UgcHJvY2VzcyBwb2xpY3kgKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxODI0OiNkZWZpbmUgUEZfTUVNQUxMT0NfUElOXHRcdDB4MTAwMDAwMDBcdC8qIEFsbG9jYXRpb25zIGNvbnN0cmFpbmVkIHRvIHpvbmVzIHdoaWNoIGFsbG93IGxvbmcgdGVybSBwaW5uaW5nLlxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE4MjUtXHRcdFx0XHRcdFx0ICogU2VlIG1lbWFsbG9jX3Bpbl9zYXZlKCkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl92Zm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ1LSAqIFBGX01FTUFMTE9DX05PRlMgaW1wbGllcyBHRlBfTk9GU1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI0NjogKiBQRl9NRU1BTExPQ19QSU4gIGltcGxpZXMgIUdGUF9NT1ZBQkxFXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ3LSAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTI0OD1zdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI1MS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNTI6XHRpZiAodW5saWtlbHkocGZsYWdzIFx1MDAyNiAoUEZfTUVNQUxMT0NfTk9JTyB8IFBGX01FTUFMTE9DX05PRlMgfCBQRl9NRU1BTExPQ19QSU4pKSkge1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI1My1cdFx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjYxLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI2MjpcdFx0aWYgKHBmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0NfUElOKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI2My1cdFx0XHRmbGFncyBcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00NTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2NfcGluX3NhdmUodm9pZClcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NTYte1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ1NzpcdHJldHVybiBtZW1hbGxvY19mbGFnc19zYXZlKFBGX01FTUFMTE9DX1BJTik7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDU4LX1cbi0tXG5tbS9odWdldGxiLmM9MTI1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMjU1LVx0c3RydWN0IGZvbGlvICpmb2xpbztcbm1tL2h1Z2V0bGIuYzoxMjU2Olx0Ym9vbCBwaW4gPSAhIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQ19QSU4pO1xubW0vaHVnZXRsYi5jLTEyNTctXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzODQ9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQxNi1cdCAqIGZyb20gYSBwYXJ0aWN1bGFyIGNvbnRleHQgd2hpY2ggaGFzIGJlZW4gbWFya2VkIGJ5XG5tbS9wYWdlX2FsbG9jLmM6NTQxNzpcdCAqIG1lbWFsbG9jX25ve2ZzLGlvfV97c2F2ZSxyZXN0b3JlfS4gQW5kIFBGX01FTUFMTE9DX1BJTiB3aGljaCBlbnN1cmVzXG5tbS9wYWdlX2FsbG9jLmMtNTQxOC1cdCAqIG1vdmFibGUgem9uZXMgYXJlIG5vdCB1c2VkIGR1cmluZyBhbGxvY2F0aW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcxMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtZW1hbGxvY19waW5fc2F2ZWAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIGNvbnRleHQgb2YgYG1lbWFsbG9jX3Bpbl9zYXZlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/JiMzNDsgVG8gZ2V0IGEgZ3Jhc3Agb24gaXRzIHJvbGUsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGRlc2lnbiBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgaXRzIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbHMg4oCTIGxpa2VseSBhIGNvbWJpbmF0aW9uIG9mIGdyZXAgb3IgYW4gSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbmFsaXR5LCBjb3VwbGVkIHdpdGggY29kZSBuYXZpZ2F0aW9uIOKAkyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMgd2hlcmUgYG1lbWFsbG9jX3Bpbl9zYXZlYCBpcyBjYWxsZWQuIFRoYXQgY2FsbCBncmFwaCBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYWxsb2NfcGluX3NhdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC5oPTE3OTA9ZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE4MjQtI2RlZmluZSBQRl9NRU1BTExPQ19QSU5cdFx0MHgxMDAwMDAwMFx0LyogQWxsb2NhdGlvbnMgY29uc3RyYWluZWQgdG8gem9uZXMgd2hpY2ggYWxsb3cgbG9uZyB0ZXJtIHBpbm5pbmcuXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTgyNTpcdFx0XHRcdFx0XHQgKiBTZWUgbWVtYWxsb2NfcGluX3NhdmUoKSAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE4MjYtI2RlZmluZSBQRl9CTE9DS19UU1x0XHQweDIwMDAwMDAwXHQvKiBwbHVnIGhhcyB0cyB0aGF0IG5lZWRzIHVwZGF0aW5nICovXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ0MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NDUtLyoqXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDQ2OiAqIG1lbWFsbG9jX3Bpbl9zYXZlIC0gTWFya3MgaW1wbGljaXQgfl9fR0ZQX01PVkFCTEUgc2NvcGUuXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDQ3LSAqXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ1NC0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0NTU6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2NfcGluX3NhdmUodm9pZClcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NTYte1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NjMtICpcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0NjQ6ICogRW5kcyB0aGUgaW1wbGljaXQgfl9fR0ZQX01PVkFCTEUgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19waW5fc2F2ZSBmdW5jdGlvbi5cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NjUtICogQWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBmbGFncyBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHBhaXJpbmdcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0NjY6ICogbWVtYWxsb2NfcGluX3NhdmUgY2FsbC5cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NjctICovXG4tLVxubW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBfX2d1cF9sb25ndGVybV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vZ3VwLmMtMjQ3My1cbm1tL2d1cC5jOjI0NzQ6XHRmbGFncyA9IG1lbWFsbG9jX3Bpbl9zYXZlKCk7XG5tbS9ndXAuYy0yNDc1LVx0ZG8ge1xuLS1cbm1tL2d1cC5jPTM0MzY9bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLS1cbm1tL2d1cC5jLTM0NjQtXG5tbS9ndXAuYzozNDY1Olx0ZmxhZ3MgPSBtZW1hbGxvY19waW5fc2F2ZSgpO1xubW0vZ3VwLmMtMzQ2Ni1cdGRvIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBEZXRlcm1pbmF0aW9uOiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgRm9jdXNTeW1ib2xzIGxpc3QsIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbiBpcyBpbiB0aGlzIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiAgVGhlIGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzaywgaXMgdGhpcyBhICYjMzQ7Z2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yJiMzNDsgd2Ugc2hvdWxkIGF2b2lkIGxpc3Rpbmc/ICBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIGhlcmUuIGBrbWFsbG9jX25vcHJvZmAsIGBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZmAsIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAsIGBhbGxvY19wYWdlc2Ag4oCTIHRob3NlIGFyZSB0aGUgZ2VuZXJpYyBhbGxvY2F0b3JzIHRoYXQgKmV2ZXJ5KiBzeXNjYWxsIHRvdWNoZXMuIFRoZXnigJlyZSBjYWxsZWQgb24gYWxtb3N0IGV2ZXJ5IHNpbmdsZSBvcGVuLCByZWFkLCB3cml0ZSwgc29ja2V0LCBmb3JrLCBleGVjLCBldGMuCgpCdXQgZG9lcyBldmVyeSBwcm9ncmFtIGNhbGwgYGFsbG9jX3BhZ2VzX2J1bGtgPyBObywgdGhhdOKAmXMgdGhlIGNyaXRpY2FsIGRpc3RpbmN0aW9uLiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzICpub3QqIHViaXF1aXRvdXMgaW4gdGhlIHdheSB0aG9zZSBvdGhlciBmdW5jdGlvbnMgYXJlLiBJdCYjMzk7cyB1c2VkIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIEkga25vdyB0aGF0IGB2bWFsbG9jYCBpcyBjYWxsZWQgZmFyIGxlc3MgZnJlcXVlbnRseSBhbmQgaXMgb25seSB1c2VkIGZvciB2ZXJ5IGxhcmdlIGFsbG9jYXRpb25zLCBsaWtlIGJwZiBwcm9nIGFsbG9jLCBjZXJ0YWluIG1vZHVsZXMsIGxhcmdlIGlvY3RsIGJ1ZmZlcnMsIGV0Yy4gIE1vc3Qgc3lzY2FsbHMgZG9uJiMzOTt0IGNhbGwgYHZtYWxsb2NgLiBJdCBpcyB0aGUgc2FtZSB3aXRoIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuCgpOb3csIGRvZXMgc3l6a2FsbGVyIGhpdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIG1vc3QgcHJvZ3JhbXM/IE5vLiBJdCYjMzk7cyBvbmx5IHV0aWxpemVkIGluIHBhcnRpY3VsYXIgc3Vic3lzdGVtcyBhbmQgZmVhdHVyZXMuIEkgc2VlIGl0IHNwZWNpZmljYWxseSBpbXBsZW1lbnRlZCBieSBmdW5jdGlvbnMgbGlrZToKKiAgIGB2bWFsbG9jYCAoZm9yIHZtYWxsb2MgbWVtb3J5KQoqICAgcGFnZSBwb29sIChpbiBuZXR3b3JrIGRyaXZlcnMpCiogICBidHJmcyAoYGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXlgKQoqICAgc3BsaWNlIChgY29weV9zcGxpY2VfcmVhZGApCiogICBmdXNlIChgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZmApCiogICBicGYgYXJlbmEgKGBhcmVuYV9hbGxvY19wYWdlc2ApCiogICBpb191cmluZyAoYGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlc2ApCiogICBzdmNfZmlsbF9wYWdlcyAoc3VucnBjKQoKVGhlIGNoYW5nZSBpcyBkaXJlY3RseSB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gVGhlIHByb21wdCBzYXlzOiAmIzM0O0xpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCYjMzQ7LiBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGRvZXMgaW4gdGhpcyBkaWZmLiBUaGUgaW5zdHJ1Y3Rpb24mIzM5O3MgY2F1dGlvbiBhYm91dCB1YmlxdWl0b3VzIGFsbG9jYXRvcnMgZG9lc24mIzM5O3QgYXBwbHkgYmVjYXVzZSB0aGlzIGlzbiYjMzk7dCBhICpnZW5lcmFsKiBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCBvciBga21hbGxvY2AuCgpUaGUgcXVlc3Rpb24gYmVjb21lcywgaXMgaXQgYSAqZGlyZWN0KiBlbnRyeXBvaW50IG9mIHRoZSBtb2RpZmllZCBsb2dpYz8gWWVzLCBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gd2hlcmUgdGhlIGNoYW5nZSByZXNpZGVzLiBDb25zaWRlcmluZyB0aGUgZXhwbGljaXQgY2hhbmdlIGlzIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLCBpdCYjMzk7cyBhIG5vbi1pbmxpbmUsIGV4cG9ydGVkIHN5bWJvbCBhbmQgYSBkaXJlY3QgZW50cnlwb2ludC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGFyb3VuZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIGFueSBDT05GSUcgb3B0aW9ucyBvciBndWFyZHMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIGluY2x1c2lvbi4gR2l2ZW4gdGhlIGV2aWRlbmNlLCBJIGNvbmNsdWRlIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqaXMqIGEgcmVsZXZhbnQgYW5kIGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNTA6XHQgKiBOb3RlIHRoYXQgb25seSB0aGUgZWxlbWVudHMgaW4gQHBhZ2VfYXJyYXkgdGhhdCB3ZXJlIGNsZWFyZWQgdG8gJU5VTEwgb25cbjUxNTE6XHQgKiBlbnRyeSBhcmUgcG9wdWxhdGVkIHdpdGggbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBAbnJfcGFnZXMgaXMgdGhlIG1heGltdW1cbjUxNTI6XHQgKiBudW1iZXIgb2YgcGFnZXMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgYXJyYXkuXG41MTUzOlx0ICpcbjUxNTQ6XHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gQHBhZ2VfYXJyYXksIGluY2x1ZGluZyBvbmVzIGFscmVhZHlcbjUxNTU6XHQgKiBhbGxvY2F0ZWQgb24gZW50cnkuICBUaGlzIGNhbiBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQgaW4gQG5yX3BhZ2VzLFxuNTE1NjpcdCAqIGJ1dCBhbGwgZW1wdHkgc2xvdHMgYXJlIGZpbGxlZCBmcm9tIHRoZSBiZWdpbm5pbmcuICBJLmUuLCBpZiBhbGwgc2xvdHMgaW5cbjUxNTc6XHQgKiBAcGFnZV9hcnJheSB3ZXJlIHNldCB0byAlTlVMTCBvbiBlbnRyeSwgdGhlIHNsb3RzIGZyb20gMCB0byB0aGUgcmV0dXJuIHZhbHVlXG41MTU4Olx0ICogLSAxIHdpbGwgYmUgZmlsbGVkLlxuNTE1OTpcdCAqL1xuNTE2MDpcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbjUxNjE6XHRcdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuNTE2MjpcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbjUxNjM6XHR7XG41MTY0Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjUxNjU6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuNTE2NjpcdFx0c3RydWN0IHpvbmVyZWYgKno7XG41MTY3Olx0XHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xuNTE2ODpcdFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XG41MTY5Olx0XHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcbjUxNzA6XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcbjUxNzE6XHRcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcbjUxNzI6XHRcbjUxNzM6XHRcdC8qXG41MTc0Olx0XHQgKiBTa2lwIHBvcHVsYXRlZCBhcnJheSBlbGVtZW50cyB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2VzIG5lZWRcbjUxNzU6XHRcdCAqIHRvIGJlIGFsbG9jYXRlZCBiZWZvcmUgZGlzYWJsaW5nIElSUXMuXG41MTc2Olx0XHQgKi9cbjUxNzc6XHRcdHdoaWxlIChucl9wb3B1bGF0ZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiBwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pXG41MTc4Olx0XHRcdG5yX3BvcHVsYXRlZCYjNDM7JiM0Mzs7XG41MTc5Olx0XG41MTgwOlx0XHQvKiBObyBwYWdlcyByZXF1ZXN0ZWQ/ICovXG41MTgxOlx0XHRpZiAodW5saWtlbHkobnJfcGFnZXMgXHUwMDNjPSAwKSlcbjUxODI6XHRcdFx0Z290byBvdXQ7XG41MTgzOlx0XG41MTg0Olx0XHQvKiBBbHJlYWR5IHBvcHVsYXRlZCBhcnJheT8gKi9cbjUxODU6XHRcdGlmICh1bmxpa2VseShucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAwKSlcbjUxODY6XHRcdFx0Z290byBvdXQ7XG41MTg3Olx0XG41MTg4Olx0XHQvKiBCdWxrIGFsbG9jYXRvciBkb2VzIG5vdCBzdXBwb3J0IG1lbWNnIGFjY291bnRpbmcuICovXG41MTg5Olx0XHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgKGdmcCBcdTAwMjYgX19HRlBfQUNDT1VOVCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTA2CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDE4MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgYXNpZGUgZnJvbSB0aGUgb3B0aW9uYWwgYENPTkZJR19QQUdFX09XTkVSYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgaXMgYSBydW50aW1lIGNoZWNrIHZpYSBgcGFnZV9vd25lcl9pbml0ZWRgIGZvciB0aGUgYHBhZ2Vfb3duZXI9b25gIGJvb3QgcGFyYW1ldGVyIGFuZCBkb2VzbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGF0aW9uIG9yIGdlbmVyYWwgYXZhaWxhYmlsaXR5IG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGUgY29kZSBpcyBhbHdheXMgcHJlc2VudCBpbiB0aGUga2VybmVsIGltYWdlLiBJIHJlYWxpemUgdGhlIGBDT05GSUdfUEFHRV9PV05FUmAgY2hlY2sgZWFybHkgcmV0dXJucyBpZiBlbmFibGVkIGFuZCB0aGUgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBza2lwcGluZyB0aGUgYnVsayBhbGxvY2F0aW9uLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtZWFuIGl0JiMzOTtzIG5vdCBwcmVzZW50LgoKVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGZ1enppbmcgaXMgd2FycmFudGVkLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRvIHJlLWV2YWx1YXRlIHRoZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZ2AuIFRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBhbmQgSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiBpdHMgR0ZQIGZsYWdzIGFuZCB0aGUgY3VycmVudCB0YXNrJiMzOTtzIGFsbG9jYXRpb24gY29udGV4dCB2aWEgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgY2hhbmdlIGNvdWxkIGludHJvZHVjZSBpc3N1ZXMgcmVsYXRlZCB0byByZWdyZXNzaW9ucywgbG9ja2RlcCBvciBmc19yZWNsYWltIHZpb2xhdGlvbnMsIG9yIGludmFyaWFudCBpc3N1ZXMgd2hlbiBjb25zdHJhaW5lZCBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZC4KCkkgaW1tZWRpYXRlbHkgcnVsZSBvdXQgYWxsIHRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhJiMzNDsgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIGlzIG5vdCBkb2N1bWVudGF0aW9uLCBidWlsZCBzeXN0ZW0gY2hhbmdlLCBvciBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlLiBJdCYjMzk7cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBpcyB1c2VkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIG9wZXJhdGlvbnMgKHNwbGljZSwgYnRyZnMsIHZtYWxsb2MsIGV0Yy4pLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGJhc2VkIG9uIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYHRydWVgLgoKTm93LCByZWdhcmRpbmcgYEZvY3VzU3ltYm9sc2AsIEkgaGF2ZSB0byBiZSBwcmVjaXNlLiBBbHRob3VnaCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgY29yZSBmdW5jdGlvbiwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIG90aGVyIGVudHJ5IHBvaW50cyBjYWxsIHRoaXMgYW5kIHdoZXRoZXIgZnV6emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGhhcyBicm9hZCBpbXBsaWNhdGlvbnMuIEkgcmVhbGl6ZSBpdCYjMzk7cyBub3QgYXMgdWJpcXVpdG91cyBhcyBvdGhlciBtbSBmdW5jdGlvbnMgbGlrZSBga2ZyZWVgIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuCgpgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGNhbGxlZCBieSBhIHJlbGF0aXZlbHkgbGltaXRlZCBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgdGhhdCBpdCBpcyBOT1QgY2FsbGVkIGJ5IG5lYXJseSBldmVyeSBzeXNjYWxsLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZnVuY3Rpb24gaXRzZWxmIGFuZCBpdHMgZGlyZWN0IGNhbGxzLiBJIGRldGVybWluZSB0aGF0IHRoZSBtb3N0IGltcG9ydGFudCBGb2N1c1N5bWJvbHMgc2hvdWxkIGJlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLiBUaGVzZSBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY29kZSBjaGFuZ2VzIGFuZCBhcmUgc3BlY2lmaWMgdG8gYnVsayBwYWdlIGFsbG9jYXRpb25zLgoKU2luY2UgSSBoYXZlbiYjMzk7dCBpZGVudGlmaWVkIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucywgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdC4KClRoZSByZWFzb25pbmcgaXMgdGhlcmVmb3JlOgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gaW50ZWdyYXRlIEdGUCBmbGFncyB0aGF0IG1hdGNoIHRoZSBjdXJyZW50IHRhc2smIzM5O3MgYWxsb2NhdGlvbiBjb250ZXh0IHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBmdW5jdGlvbiBmYWxscyB1bmRlciB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGRpc2NvdmVyIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgaW52YXJpYW50IGlzc3VlcyB3aGVuIHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIChzdWNoIGFzIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgYXJlIGFwcGxpZWQuIEkgYW0gbGlzdGluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhcyB0aGUgYEZvY3VzU3ltYm9sc2AuIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGxpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gYXBwbHkgY3VycmVudF9nZnBfY29udGV4dCgpIHRvIHRoZSBHRlAgZmxhZ3MsIGVuZm9yY2luZyBzY29wZWQgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMgKGUuZy4sIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX1BJTikuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG9wZXJhdGlvbnMgdGhhdCBwZXJmb3JtIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIChzdWNoIGFzIGNvcHlfc3BsaWNlX3JlYWQsIGJ0cmZzIHBhZ2UgYWxsb2NhdGlvbiwgb3Igdm1hbGxvYykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbG9ja2RlcC9mc19yZWNsYWltIHZpb2xhdGlvbnMsIG9yIGFsbG9jYXRpb24gYW5vbWFsaWVzIGFyZSB0cmlnZ2VyZWQgdW5kZXIgY29uc3RyYWluZWQgY29udGV4dHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIGFwcGx5IGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB0byB0aGUgR0ZQIGZsYWdzLCBlbmZvcmNpbmcgc2NvcGVkIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIChlLmcuLCBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19QSU4pLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBvcGVyYXRpb25zIHRoYXQgcGVyZm9ybSBidWxrIHBhZ2UgYWxsb2NhdGlvbiAoc3VjaCBhcyBjb3B5X3NwbGljZV9yZWFkLCBidHJmcyBwYWdlIGFsbG9jYXRpb24sIG9yIHZtYWxsb2MpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIGxvY2tkZXAvZnNfcmVjbGFpbSB2aW9sYXRpb25zLCBvciBhbGxvY2F0aW9uIGFub21hbGllcyBhcmUgdHJpZ2dlcmVkIHVuZGVyIGNvbnN0cmFpbmVkIGNvbnRleHRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuVGhpcyBjaGFuZ2UgbWFuaXB1bGF0ZXMgR0ZQIGFsbG9jYXRpb24gZmxhZyBiaXRzIG9uIGEgc2NhbGFyIGBnZnBfdGAgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcHJldmVudGVkIG9yIGluZmx1ZW5jZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIGZpbGVzeXN0ZW0vSU8gcmVjbGFpbSByZWN1cnNpb24gYW5kIGxvY2tpbmcgZGVhZGxvY2tzICh3aGljaCBhcmUgdHJhY2tlZCBieSBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDFmZDRkYjI0N2I3OTBjYmRhNzVlYzRhY2QzNTU1N2Q2MTA5MjM3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDAzOjE0OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTUyMDcsNiAmIzQzOzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsCiAKIAkvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqLwogCWdmcCAmYW1wOz0gZ2ZwX2FsbG93ZWRfbWFzazsKJiM0MzsJZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApOwogCWlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCAmYW1wO2FjLCAmYW1wO2dmcCwgJmFtcDthbGxvY19mbGFncykpCiAJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNpbXBsZSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX2FsbG9jLmNgLiBJdCYjMzk7cyBpbmNyZWRpYmx5IHN0cmFpZ2h0Zm9yd2FyZCwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljIG9yIGEgc21hbGwsIHRhcmdldGVkIG9wdGltaXphdGlvbi4gVGhlIGRpZmYgc2hvd3MgYSBzaW5nbGUgbGluZSBhZGRlZDogYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIHJpZ2h0IGFmdGVyIHRoZSBgZ2ZwYCBmbGFnIGlzIG1hc2tlZCBhbmQgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIHByZXBhcmF0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgY3VycmVudF9nZnBfY29udGV4dCgpYCBkb2VzLCBidXQgSSBhbHJlYWR5IGhhdmUgYW4gaWRlYS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBpcyByZWxhdGVkIHRvIHBvdGVudGlhbGx5IG1vZGlmeWluZyB0aGUgYGdmcGAgZmxhZ3MgYmFzZWQgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGFsbG9jYXRpb24gaXMgaGFwcGVuaW5nLiBUaGUgY29tbWVudCBkaXJlY3RseSBhYm92ZSB0aGlzIGxpbmUgbWVudGlvbnMgdGhhdCBgQUxMT0NfTk9GUkFHTUVOVGAgY2FuIGJlIHNldCwgaGludGluZyBhdCBmcmFnbWVudGF0aW9uIGNvbmNlcm5zLiBUaGUgcHJlc2VuY2Ugb2YgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgdGhlIGdpdmVuIGBnZnBgIGZsYWdzIHRvIGJlc3Qgb3B0aW1pemUgZm9yIHRoZSBjdXJyZW50IHRhc2smIzM5O3MgbmVlZHMuIEkgc2hvdWxkIHJldmlldyB0aGF0IGZ1bmN0aW9uLgoKVGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCAqYmVmb3JlKiB0aGUgYWxsb2NhdGlvbiBwcmVwYXJhdGlvbi4gVGhpcyBtYWtlcyBtZSBzdXNwZWN0IHRoZSBtb2RpZmljYXRpb24gb2YgYGdmcGAgaXMgaW50ZW5kZWQgdG8gaW5mbHVlbmNlIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyAqc2V0IHVwKiBieSBgcHJlcGFyZV9hbGxvY19wYWdlcygpYC4gUGVyaGFwcyB0aGUgY29udGV4dCBoZWxwcyBkZWNpZGUgb24gbm9kZSBzZWxlY3Rpb24gb3Igb3RoZXIgdHVuaW5nIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBhdHRlbXB0cyBldmVuIGJlZ2luLiBHaXZlbiB3aGVyZSBpdCBpcywgaXQmIzM5O3Mgbm90IGxpa2VseSB0byBiZSBzb21ldGhpbmcgdGhhdCBkeW5hbWljYWxseSBjaGFuZ2VzICpkdXJpbmcqIGFsbG9jYXRpb247IHRoZSBhbGxvY2F0aW9uIGF0dGVtcHQgZWl0aGVyIGdldHMgc3RhcnRlZCwgYW5kIHRoZW4gYXR0ZW1wdHMgaGFwcGVuLCBvciB3ZSBmYWlsIGVhcmx5LiBJJiMzOTttIGd1ZXNzaW5nIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlzIGNoYW5naW5nLCBmb3IgaW5zdGFuY2UsIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gc2hvdWxkIGFsbG93IGZyYWdtZW50YXRpb24gb3Igbm90IGJhc2VkIG9uIHRoZSBwcm9jZXNzIHR5cGUuCgpPdmVyYWxsLCBpdCYjMzk7cyBhIG1pbm9yIGNoYW5nZSwgYnV0IGl0IGNvdWxkIGhhdmUgYSBub3RpY2VhYmxlIGltcGFjdCBpZiB0aGUgY29udGV4dCBpcyBzaWduaWZpY2FudGx5IGluZmx1ZW5jaW5nIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGludG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhhdCBmbGFnIGdldHMgc2V0IGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHRoZW4gZGV0ZXJtaW5lIGhvdyB0aGlzIGNoYW5nZSBpcyBnb2luZyB0byBpbXBhY3QgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTk1Olx0XG41MTk2Olx0I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG41MTk3Olx0XHQvKlxuNTE5ODpcdFx0ICogUEFHRV9PV05FUiBtYXkgcmVjdXJzZSBpbnRvIHRoZSBhbGxvY2F0b3IgdG8gYWxsb2NhdGUgc3BhY2UgdG9cbjUxOTk6XHRcdCAqIHNhdmUgdGhlIHN0YWNrIHdpdGggcGFnZXNldHMubG9jayBoZWxkLiBSZWxlYXNpbmcvcmVhY3F1aXJpbmdcbjUyMDA6XHRcdCAqIHJlbW92ZXMgbXVjaCBvZiB0aGUgcGVyZm9ybWFuY2UgYmVuZWZpdCBvZiBidWxrIGFsbG9jYXRpb24gc29cbjUyMDE6XHRcdCAqIGZvcmNlIHRoZSBjYWxsZXIgdG8gYWxsb2NhdGUgb25lIHBhZ2UgYXQgYSB0aW1lIGFzIGl0JiMzOTtsbCBoYXZlXG41MjAyOlx0XHQgKiBzaW1pbGFyIHBlcmZvcm1hbmNlIHRvIGFkZGVkIGNvbXBsZXhpdHkgdG8gdGhlIGJ1bGsgYWxsb2NhdG9yLlxuNTIwMzpcdFx0ICovXG41MjA0Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG41MjA1Olx0XHRcdGdvdG8gZmFpbGVkO1xuNTIwNjpcdCNlbmRpZlxuNTIwNzpcdFxuNTIwODpcdFx0LyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi9cbjUyMDk6XHRcdGdmcCBcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XG41MjEwOlx0XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG41MjExOlx0XHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuNTIxMjpcdFx0XHRnb3RvIG91dDtcbjUyMTM6XHRcbjUyMTQ6XHRcdC8qIEZpbmQgYW4gYWxsb3dlZCBsb2NhbCB6b25lIHRoYXQgbWVldHMgdGhlIGxvdyB3YXRlcm1hcmsuICovXG41MjE1Olx0XHR6ID0gYWMucHJlZmVycmVkX3pvbmVyZWY7XG41MjE2Olx0XHRmb3JfbmV4dF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIGFjLmhpZ2hlc3Rfem9uZWlkeCwgYWMubm9kZW1hc2spIHtcbjUyMTc6XHRcdFx0dW5zaWduZWQgbG9uZyBtYXJrO1xuNTIxODpcdFxuNTIxOTpcdFx0XHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXHUwMDI2XHUwMDI2IChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcdTAwMjZcdTAwMjZcbjUyMjA6XHRcdFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xuNTIyMTpcdFx0XHRcdGNvbnRpbnVlO1xuNTIyMjpcdFx0XHR9XG41MjIzOlx0XG41MjI0Olx0XHRcdGlmIChucl9vbmxpbmVfbm9kZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXHUwMDI2XHUwMDI2XG41MjI1Olx0XHRcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcbjUyMjY6XHRcdFx0XHRnb3RvIGZhaWxlZDtcbjUyMjc6XHRcdFx0fVxuNTIyODpcdFxuNTIyOTpcdFx0XHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xuNTIzMDpcdHJldHJ5X3RoaXNfem9uZTpcbjUyMzE6XHRcdFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19XTUFSS19NQVNLKSAmIzQzOyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcbjUyMzI6XHRcdFx0aWYgKHpvbmVfd2F0ZXJtYXJrX2Zhc3Qoem9uZSwgMCwgIG1hcmssXG41MjMzOlx0XHRcdFx0XHR6b25lbGlzdF96b25lX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZiksXG41MjM0Olx0XHRcdFx0XHRhbGxvY19mbGFncywgZ2ZwKSkge1xuNTIzNTpcdFx0XHRcdGJyZWFrO1xuNTIzNjpcdFx0XHR9XG41MjM3Olx0XG41MjM4Olx0XHRcdGlmIChjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpKVxuNTIzOTpcdFx0XHRcdGdvdG8gcmV0cnlfdGhpc196b25lO1xuNTI0MDpcdFxuNTI0MTpcdFx0XHQvKiBUcnkgYWdhaW4gaWYgem9uZSBoYXMgZGVmZXJyZWQgcGFnZXMgKi9cbjUyNDI6XHRcdFx0aWYgKGRlZmVycmVkX3BhZ2VzX2VuYWJsZWQoKSkge1xuNTI0MzpcdFx0XHRcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIDApKVxuNTI0NDpcdFx0XHRcdFx0Z290byByZXRyeV90aGlzX3pvbmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBjdXJyZW50X2dmcF9jb250ZXh0YCBhbmQgaXRzIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIGl0cyBkZWZpbml0aW9uIGFuZCB3aGF0IGl0IGFjdHVhbGx5ICpkb2VzKiBhdCB0aGUgbG93ZXN0IGxldmVsLiBVbmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgaXMga2V5LiBBZnRlciB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgb3RoZXIgYWxsb2NhdG9ycywgYm90aCB3aXRoaW4gdGhlIGV4aXN0aW5nIHN5c3RlbSBhbmQgcGVyaGFwcyBldmVuIHNvbWUgZXh0ZXJuYWwgb25lcyBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIGxldmVyYWdlIHRoaXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGludGVncmF0ZSBpdCBpbnRvIHRoZWlyIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBkZXNpZ24gcGF0dGVybnMgYmVpbmcgdXNlZC4gVGhlIGdvYWwgaXMgdG8gZ2FpbiBhIHN0cm9uZyB1bmRlcnN0YW5kaW5nIG9mIGJlc3QgcHJhY3RpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdXJyZW50X2dmcF9jb250ZXh0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDE0NT1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXG5tbS9odWdlX21lbW9yeS5jOjQyMTU6XHRcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQobWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmMtNDIxNi1cdFx0XHRcdFx0XHRcdEdGUF9SRUNMQUlNX01BU0spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNzUyPWFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zNzg0LVxubW0vcGFnZV9hbGxvYy5jOjM3ODU6LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDM4Mz12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcbm1tL3BhZ2VfYWxsb2MuYzo0Mzg1Olx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDAwPXZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xubW0vcGFnZV9hbGxvYy5jOjQ0MDI6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjA5LVx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbm1tL3BhZ2VfYWxsb2MuYzo1MjEwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTUyMTEtXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MTktXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo1NDIwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0MjEtXHRhbGxvY19nZnAgPSBnZnA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MzEyLVxubW0vcGFnZV9hbGxvYy5jOjczMTM6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTczMTQtXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcdTAwMjZjYy5nZnBfbWFzaykpXG4tLVxubW0vcGVyY3B1LmM9MTczNT12b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxuLS1cbm1tL3BlcmNwdS5jLTE3NDktXG5tbS9wZXJjcHUuYzoxNzUwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGVyY3B1LmMtMTc1MS1cdC8qXG4tLVxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02Nzc0LVx0XHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXG5tbS92bXNjYW4uYzo2Nzc1Olx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTY3NzYtXHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbi0tXG5tbS92bXNjYW4uYz02ODU1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjg2NS1cdFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jOjY4NjY6XHRcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxubW0vdm1zY2FuLmMtNjg2Ny1cdFx0XHRcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcdTAwMjYgfkdGUF9SRUNMQUlNX01BU0spLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4NzY9dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS92bXNjYW4uYy03ODgyLVx0XHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXG5tbS92bXNjYW4uYzo3ODgzOlx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTc4ODQtXHRcdC5vcmRlciA9IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jPTc5NTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMzUtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcbm1tL3Ztc2Nhbi5jOjgwMzY6XHRcdFx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTgwMzctXHRcdFx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBjdXJyZW50X2dmcF9jb250ZXh0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBNeSBpbW1lZGlhdGUgaW1wdWxzZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YC4gSSBuZWVkIHRvIHN0YXJ0IHdpdGggdGhlIGZ1bmRhbWVudGFsIGRlZmluaXRpb24uIEnigJltIHRoaW5raW5nLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIEkga25vdyBjb250ZXh0IGlzICpjcml0aWNhbCouIFRoaXMgaXMgKnRoZSogcGxhY2UgdG8gc3RhcnQuIFdoYXQgZG9lcyB0aGlzIHRlcm0gYWN0dWFsbHkgKm1lYW4qIGluIHRoaXMgc3BlY2lmaWMgc2V0dGluZz8gV2hhdCBpcyBpdCBpbnRlbmRlZCB0byByZXByZXNlbnQ/IElzIGl0IGEgY2xhc3MsIGEgdmFyaWFibGUsIGEgZnVuY3Rpb24sIGEgbW9kdWxlLi4uIHRoaXMgaXMga2V5LiBLbm93aW5nIHRoZSBkYXRhIHR5cGUvc3RydWN0dXJlLCBob3cgaXQmIzM5O3MgdXNlZCwgaG93IGl0JiMzOTtzIGRlZmluZWQsIHdpbGwgYmUgdGhlIGJhc2lzIGZvciBldmVyeXRoaW5nIGVsc2UuIEkmIzM5O2xsIG5lZWQgdG8ga25vdy4gV2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGxvb2tpbmcgZm9yIGFuIGFjdHVhbCBjb2RlIGRlZmluaXRpb24gb3IgZG9jdW1lbnRhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHJvbGUuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTIxNT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fdmZvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0Ny0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNDg6c3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF90IGZsYWdzKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCBEZXRhaWxzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgbW9yZSBkZWVwbHkgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGFyb3VuZCBsaW5lIDI0OC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBwcm9jZXNzIG1lbW9yeSBtYW5hZ2VtZW50IHRoZXJlLCBvciBhdCBsZWFzdCBhIGtleSBkYXRhIHN0cnVjdHVyZSBvciBmdW5jdGlvbiBkZWZpbml0aW9uIHRoYXQgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGFyZWEsIHNvIGxldCYjMzk7cyBnZXQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdH1cbiAyNDE6XHRcbiAyNDI6XHQvKlxuIDI0MzpcdCAqIEFwcGxpZXMgcGVyLXRhc2sgZ2ZwIGNvbnRleHQgdG8gdGhlIGdpdmVuIGFsbG9jYXRpb24gZmxhZ3MuXG4gMjQ0Olx0ICogUEZfTUVNQUxMT0NfTk9JTyBpbXBsaWVzIEdGUF9OT0lPXG4gMjQ1Olx0ICogUEZfTUVNQUxMT0NfTk9GUyBpbXBsaWVzIEdGUF9OT0ZTXG4gMjQ2Olx0ICogUEZfTUVNQUxMT0NfUElOICBpbXBsaWVzICFHRlBfTU9WQUJMRVxuIDI0NzpcdCAqL1xuIDI0ODpcdHN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcbiAyNDk6XHR7XG4gMjUwOlx0XHR1bnNpZ25lZCBpbnQgcGZsYWdzID0gUkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlZmxhZ3MpO1xuIDI1MTpcdFxuIDI1MjpcdFx0aWYgKHVubGlrZWx5KHBmbGFncyBcdTAwMjYgKFBGX01FTUFMTE9DX05PSU8gfCBQRl9NRU1BTExPQ19OT0ZTIHwgUEZfTUVNQUxMT0NfUElOKSkpIHtcbiAyNTM6XHRcdFx0LypcbiAyNTQ6XHRcdFx0ICogTk9JTyBpbXBsaWVzIGJvdGggTk9JTyBhbmQgTk9GUyBhbmQgaXQgaXMgYSB3ZWFrZXIgY29udGV4dFxuIDI1NTpcdFx0XHQgKiBzbyBhbHdheXMgbWFrZSBzdXJlIGl0IG1ha2VzIHByZWNlZGVuY2VcbiAyNTY6XHRcdFx0ICovXG4gMjU3Olx0XHRcdGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX05PSU8pXG4gMjU4Olx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpO1xuIDI1OTpcdFx0XHRlbHNlIGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX05PRlMpXG4gMjYwOlx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+X19HRlBfRlM7XG4gMjYxOlx0XG4gMjYyOlx0XHRcdGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX1BJTilcbiAyNjM6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xuIDI2NDpcdFx0fVxuIDI2NTpcdFx0cmV0dXJuIGZsYWdzO1xuIDI2NjpcdH1cbiAyNjc6XHRcbiAyNjg6XHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAyNjk6XHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKTtcbiAyNzA6XHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKTtcbiAyNzE6XHRleHRlcm4gdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spO1xuIDI3MjpcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzayk7XG4gMjczOlx0I2Vsc2VcbiAyNzQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCkgeyB9XG4gMjc1Olx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxuIDI3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxuIDI3NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxuIDI3ODpcdCNlbmRpZlxuIDI3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkzCgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDY2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgbWlzc2luZyBhIGNydWNpYWwgY2FsbCB0byBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgbWFza2luZyBvdXQgY2VydGFpbiBHRlAgZmxhZ3MsIHNwZWNpZmljYWxseSBgX19HRlBfSU9gLCBgX19HRlBfRlNgLCBhbmQgYF9fR0ZQX01PVkFCTEVgLCBiYXNlZCBvbiB0aGUgY3VycmVudCB0YXNrJiMzOTtzIGZsYWdzLiBUaGluayBvZiBmdW5jdGlvbnMgbGlrZSBgbWVtYWxsb2Nfbm9pb19zYXZlKClgIGFuZCBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIOKAkyB0aGV5IHNldCB0aGVzZSBmbGFncy4KClRoZSBwcm9ibGVtPyBXaXRob3V0IHRoYXQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGNhbGwsIGlmIGNvZGUgcnVubmluZyB1bmRlciBgUEZfTUVNQUxMT0NfTk9GU2Agb3IgYFBGX01FTUFMTE9DX05PSU9gIGNhbGxlZCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCB0aGUgR0ZQIG1hc2sgY291bGQgc3RpbGwgaGF2ZSBgX19HRlBfRlNgIG9yIGBfX0dGUF9JT2AgZW5hYmxlZC4gVGhpcyBvcGVucyB0aGUgZG9vciB0byBwb3RlbnRpYWwgbG9ja2RlcCB3YXJuaW5ncyBvciBldmVuIGRlYWRsb2NrcywgZXNwZWNpYWxseSBpZiBmaWxlc3lzdGVtIG9yIElPIHJlY2xhaW0gaXMgdHJpZ2dlcmVkIHJlY3Vyc2l2ZWx5LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVlIHRvIGluY29ycmVjdCBHRlAgZmxhZyBwcm9wYWdhdGlvbi4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBhbnN3ZXIsIGFzIEkgc2VlIGl0LCBpcyBhIGRlZmluaXRpdmUgJiMzNDtuby4mIzM0OyBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nOgoKMS4gIGBnZnBgIGlzIGp1c3QgYSBzaW1wbGUgcHJpbWl0aXZlIOKAkyBhbiBgdW5zaWduZWQgaW50YCBvciBgZ2ZwX3RgLiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBoZXJlLgoyLiAgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgICpvbmx5KiBjbGVhcnMgZmxhZ3MgYmFzZWQgb24gYGN1cnJlbnQtJmd0O2ZsYWdzYC4gSXQgZG9lc24mIzM5O3QgbW9kaWZ5IHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBgZ2ZwYCBpbiBhbnkgd2F5LCBzaGFwZSBvciBmb3JtLgozLiAgVGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIGFueSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXNuJiMzOTt0IGNvcHkgYW55dGhpbmcgdG8gdXNlcnNwYWNlLCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSBtZW1vcnkgd2l0aG91dCB6ZXJvaW5nLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBpc3N1ZXMgd2l0aCBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGJ1ZmZlciBib3VuZHMuIEV2ZXJ5dGhpbmcgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYXMgaXQgc2hvdWxkLgo0LiAgSWYgdGhlcmUgYXJlIGFueSBkZWFkbG9ja3Mgb3IgcmVjbGFpbSBpc3N1ZXMsIHRob3NlIGFyZSBzdHJpY3RseSBsb2NraW5nIG9yIHJlY2xhaW0gYnVncywgd2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAuCgpHaXZlbiBhbGwgb2YgdGhpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBLTVNBTiBpcyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5IGhlcmUuIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG5lZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha3MuCgpBbmQgdGhhdCBicmluZ3MgbWUgdG8gYSBjcnVjaWFsIHBvaW50IGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgYWxyZWFkeSBpbmNvcnBvcmF0ZSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlJiMzOTtzIG5vIHBvaW50IGluIHJ1bm5pbmcgS01TQU4gaWYgdGhlIHBvdGVudGlhbCBidWcgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciB0aGUgb3RoZXIgc3RhbmRhcmQgdG9vbHMuIEtNU0FOIGlzIGZvciBjYXRjaGluZyB0aGluZ3MgKm5vdCogY2F1Z2h0IGJ5IEtBU0FOLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY3JpdGVyaWEuIFRvIHJlaXRlcmF0ZToKCiogICBUaGUgY29kZSBjaGFuZ2VzIHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIGFyZSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuIFllcywgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBsb2NraW5nLgoqICAgQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLiBZZXMsIHRoaXMgaXMgY29ycmVjdC4KKiAgIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQ29ycmVjdCwgYXMgZXhwbGFpbmVkIGFib3ZlLgoKVGhlcmVmb3JlLCBpdCBpcyBjbGVhciB0aGF0IEkgd2lsbCBpbnZva2UgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIHByb3ZpZGUgdGhlIGFib3ZlIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuVGhpcyBjaGFuZ2UgbWFuaXB1bGF0ZXMgR0ZQIGFsbG9jYXRpb24gZmxhZyBiaXRzIG9uIGEgc2NhbGFyIGBnZnBfdGAgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcHJldmVudGVkIG9yIGluZmx1ZW5jZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIGZpbGVzeXN0ZW0vSU8gcmVjbGFpbSByZWN1cnNpb24gYW5kIGxvY2tpbmcgZGVhZGxvY2tzICh3aGljaCBhcmUgdHJhY2tlZCBieSBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuVGhpcyBjaGFuZ2UgbWFuaXB1bGF0ZXMgR0ZQIGFsbG9jYXRpb24gZmxhZyBiaXRzIG9uIGEgc2NhbGFyIGBnZnBfdGAgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcHJldmVudGVkIG9yIGluZmx1ZW5jZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIGZpbGVzeXN0ZW0vSU8gcmVjbGFpbSByZWN1cnNpb24gYW5kIGxvY2tpbmcgZGVhZGxvY2tzICh3aGljaCBhcmUgdHJhY2tlZCBieSBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNDoxOS44MzA0NDc3ODhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0MjY3ODg4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIixcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cXG5cXG5UaGlzIGNoYW5nZSBtYW5pcHVsYXRlcyBHRlAgYWxsb2NhdGlvbiBmbGFnIGJpdHMgb24gYSBzY2FsYXIgYGdmcF90YCB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGhlYXAvc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBwcmV2ZW50ZWQgb3IgaW5mbHVlbmNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gZmlsZXN5c3RlbS9JTyByZWNsYWltIHJlY3Vyc2lvbiBhbmQgbG9ja2luZyBkZWFkbG9ja3MgKHdoaWNoIGFyZSB0cmFja2VkIGJ5IExPQ0tERVApLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gYXBwbHkgY3VycmVudF9nZnBfY29udGV4dCgpIHRvIHRoZSBHRlAgZmxhZ3MsIGVuZm9yY2luZyBzY29wZWQgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMgKGUuZy4sIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX1BJTikuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG9wZXJhdGlvbnMgdGhhdCBwZXJmb3JtIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIChzdWNoIGFzIGNvcHlfc3BsaWNlX3JlYWQsIGJ0cmZzIHBhZ2UgYWxsb2NhdGlvbiwgb3Igdm1hbGxvYykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbG9ja2RlcC9mc19yZWNsYWltIHZpb2xhdGlvbnMsIG9yIGFsbG9jYXRpb24gYW5vbWFsaWVzIGFyZSB0cmlnZ2VyZWQgdW5kZXIgY29uc3RyYWluZWQgY29udGV4dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE0OjE5LjgzMDQ1NzQ4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMjY2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDFmZDRkYjI0N2I3OTBjYmRhNzVlYzRhY2QzNTU1N2Q2MTA5MjM3ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMzoxNDoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC01MjA3LDYgKzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcbiBcXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xcbiBcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG4rXFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbiBcXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXFx1MDAyNmFjLCBcXHUwMDI2Z2ZwLCBcXHUwMDI2YWxsb2NfZmxhZ3MpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE0OjIwLjQyMzQxOTE0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA3NDkyMDI1ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBhcHBseSBjdXJyZW50X2dmcF9jb250ZXh0KCkgdG8gdGhlIEdGUCBmbGFncywgZW5mb3JjaW5nIHNjb3BlZCBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoZS5nLiwgUEZfTUVNQUxMT0NfTk9GUywgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfUElOKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm0gYnVsayBwYWdlIGFsbG9jYXRpb24gKHN1Y2ggYXMgY29weV9zcGxpY2VfcmVhZCwgYnRyZnMgcGFnZSBhbGxvY2F0aW9uLCBvciB2bWFsbG9jKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgYWxsb2NhdGlvbiBhbm9tYWxpZXMgYXJlIHRyaWdnZXJlZCB1bmRlciBjb25zdHJhaW5lZCBjb250ZXh0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMWZkNGRiMjQ3Yjc5MGNiZGE3NWVjNGFjZDM1NTU3ZDYxMDkyMzdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDM6MTQ6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyMDcsNiArNTIwNyw3IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcbiBcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXG4gXHRnZnAgXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xuK1x0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xuIFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNDoyMC40MjM0MjEwMTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODMzNTk3MjU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGRpZmYgZm9yIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgdGhpcyBjaGFuZ2UgaGFzIG9uIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXRoLiBMZXQncyBzZWUuLi4gdGhleSd2ZSBhZGRlZCBgZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO2AgcmlnaHQgYmVmb3JlIHRoZSBjYWxsIHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYC4gIFRoaXMgbGluZSBpcyBpbnNlcnRlZCB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhleSdyZSB0cnlpbmcgdG8gcmVmaW5lIHRoZSBgZ2ZwYCBmbGFncywgcHJvYmFibHkgYmFzZWQgb24gc29tZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiBHaXZlbiB0aGUgbmFtaW5nLCBgY3VycmVudF9nZnBfY29udGV4dGAgbGlrZWx5IHJldHJpZXZlcyBzb21lIHJlbGV2YW50IGNvbnRleHQg4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyBvciB0YXNrIOKAkyBhbmQgdXNlcyBpdCB0byBwb3RlbnRpYWxseSBtb2RpZnkgdGhlIGBnZnBgIGZsYWdzLiBUaGlzIGNvdWxkIGJlIGFib3V0IHRoaW5ncyBsaWtlIE5VTUEgYWZmaW5pdHksIG9yIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljaWVzLCBvciBvdGhlciBzeXN0ZW0tbGV2ZWwgcmVzdHJpY3Rpb25zLiAgVGhlIHVzZSBvZiBgY3VycmVudF9nZnBfY29udGV4dGAgc3VnZ2VzdHMgdGhleSBhcmUgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiB0aGUgY3VycmVudCB0YXNrJ3Mgc3RhdGUuXG5cbkknZCB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBgY3VycmVudF9nZnBfY29udGV4dGAgZG9lcyBpbiBkZXRhaWwuIEEgZGVlcGVyIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgZ2ZwYCBmbGFncywgaXMgcmVxdWlyZWQgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBhY3QuIEkgYWxzbyBzaG91bGQgYmUgYXdhcmUgdGhhdCBgcHJlcGFyZV9hbGxvY19wYWdlc2AgY291bGQgYmUgYWx0ZXJlZCBiYXNlZCBvbiB0aGlzIG5ldyBgZ2ZwYCB2YWx1ZS4gSXMgaXQgYSBzZWN1cml0eSBmaXg/IFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZ3JlcHBlciBzZWFyY2ggZm9yIGBjdXJyZW50X2dmcF9jb250ZXh0YCB3aWxsIGJlIG15IG5leHQgc3RlcCwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNDo0OC43NTkzOTY1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDI4NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxOTU6XFx0XFxuNTE5NjpcXHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG41MTk3OlxcdFxcdC8qXFxuNTE5ODpcXHRcXHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xcbjUxOTk6XFx0XFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xcbjUyMDA6XFx0XFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xcbjUyMDE6XFx0XFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQnbGwgaGF2ZVxcbjUyMDI6XFx0XFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cXG41MjAzOlxcdFxcdCAqL1xcbjUyMDQ6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG41MjA1OlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMDY6XFx0I2VuZGlmXFxuNTIwNzpcXHRcXG41MjA4OlxcdFxcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXFxuNTIwOTpcXHRcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG41MjEwOlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG41MjExOlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuNTIxMjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjEzOlxcdFxcbjUyMTQ6XFx0XFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cXG41MjE1OlxcdFxcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcXG41MjE2OlxcdFxcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xcbjUyMTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrO1xcbjUyMTg6XFx0XFxuNTIxOTpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjA6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xcbjUyMjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTIyMjpcXHRcXHRcXHR9XFxuNTIyMzpcXHRcXG41MjI0OlxcdFxcdFxcdGlmIChucl9vbmxpbmVfbm9kZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXFx1MDAyNlxcdTAwMjZcXG41MjI1OlxcdFxcdFxcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcXG41MjI2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMjc6XFx0XFx0XFx0fVxcbjUyMjg6XFx0XFxuNTIyOTpcXHRcXHRcXHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xcbjUyMzA6XFx0cmV0cnlfdGhpc196b25lOlxcbjUyMzE6XFx0XFx0XFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgKyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcXG41MjMyOlxcdFxcdFxcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxcbjUyMzM6XFx0XFx0XFx0XFx0XFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxcbjUyMzQ6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTQ6NDguNzYxNDA3OTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDU5OTU0MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoaXMuIEknbSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgdGhpcyBjbGVhcmx5IGludm9sdmVzIGJ1bGsgYWxsb2NhdGlvbiB3aXRob3V0IHByb2ZpbGluZyBvdmVyaGVhZC4gR29vZCB0byBrbm93LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuXCIgVGhlIGtleSBxdWVzdGlvbiBoZXJlIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY3VycmVudCBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0LiBUaGF04oCZcyB3aGVyZSBgY3VycmVudF9nZnBfY29udGV4dGAgY29tZXMgaW4uIEkgc3VzcGVjdCBpdCBob2xkcyB0aGUgZmxhZ3MgZ292ZXJuaW5nIGhvdyB0aGUgcGFnZXMgYXJlIGFsbG9jYXRlZCAoZS5nLiwgd2hldGhlciB0byB3YWl0LCB3aGF0IE5VTUEgbm9kZSB0byBwcmVmZXIsIGV0Yy4pLlxuXG5NeSBuZXh0IHN0ZXAgaXMgbG9naWNhbC4gSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGBjdXJyZW50X2dmcF9jb250ZXh0YCBpcyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhpcyBmdW5jdGlvbi4gU28sIEknbSBnb2luZyB0byBmaXJlIHVwIGEgYGdyZXBgIG9yIHNpbWlsYXIgc2VhcmNoIHRvb2wgdG8gcXVpY2tseSBsb2NhdGUgYWxsIGluc3RhbmNlcyBvZiBgY3VycmVudF9nZnBfY29udGV4dGAuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgY3JpdGljYWwgaW5mb3JtYXRpb24gYW5kIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEtub3dpbmcgdGhvc2UgdXNlIGNhc2VzIHdpbGwgaWxsdW1pbmF0ZSBob3cgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBtYWtlcyB1c2Ugb2YsIGFuZCBsaWtlbHkgb3ZlcnJpZGVzLCB0aGUgZGVmYXVsdCBhbGxvY2F0aW9uIHNldHRpbmdzLCBhbmQgcG90ZW50aWFsbHkgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHQgaW50byBob3cgdGhlIG9wdGltaXphdGlvbiBpcyBhY2NvbXBsaXNoZWQuIFRoZSBjb250ZXh0IGZsYWdzIGFyZSBjcml0aWNhbCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDIxMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTQ6NTMuMzYwOTU1NTU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODk5MzYzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF9nZnBfY29udGV4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnMvZmlsZS5jPTUxMj1zdGF0aWMgYm9vbCBuZnNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5mcy9uZnMvZmlsZS5jLTUxNy1cXHRpZiAoZm9saW9fdGVzdF9wcml2YXRlKGZvbGlvKSkge1xcbmZzL25mcy9maWxlLmM6NTE4OlxcdFxcdGlmICgoY3VycmVudF9nZnBfY29udGV4dChnZnApIFxcdTAwMjYgR0ZQX0tFUk5FTCkgIT0gR0ZQX0tFUk5FTCB8fFxcbmZzL25mcy9maWxlLmMtNTE5LVxcdFxcdCAgICBjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkpXFxuLS1cXG5mcy9uZnMvaW50ZXJuYWwuaD02OTY9c3RhdGljIGlubGluZSBnZnBfdCBuZnNfaW9fZ2ZwX21hc2sodm9pZClcXG5mcy9uZnMvaW50ZXJuYWwuaC02OTcte1xcbmZzL25mcy9pbnRlcm5hbC5oOjY5ODpcXHRnZnBfdCByZXQgPSBjdXJyZW50X2dmcF9jb250ZXh0KEdGUF9LRVJORUwpO1xcbmZzL25mcy9pbnRlcm5hbC5oLTY5OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMTU9c3RhdGljIGlubGluZSBib29sIGluX3Zmb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MjQ4OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yODc9c3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX3JldHJ5X3dhaXQoZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI5My1cXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6Mjk0OlxcdGdmcF9mbGFncyA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjk1LVxcdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQxNDU9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXFxubW0vaHVnZV9tZW1vcnkuYzo0MjE1OlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQobWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYy00MjE2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdEdGUF9SRUNMQUlNX01BU0spO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTM3NTI9YWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzc4NC1cXG5tbS9wYWdlX2FsbG9jLmM6Mzc4NTovKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xcbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzgzPXZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcXG5tbS9wYWdlX2FsbG9jLmM6NDM4NTpcXHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0MDA9dm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spXFxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xcbm1tL3BhZ2VfYWxsb2MuYzo0NDAyOlxcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTIwOS1cXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG5tbS9wYWdlX2FsbG9jLmM6NTIxMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTUyMTEtXFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxOS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTQyMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0MjEtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTczMTItXFxubW0vcGFnZV9hbGxvYy5jOjczMTM6XFx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzMxNC1cXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcXHUwMDI2Y2MuZ2ZwX21hc2spKVxcbi0tXFxubW0vcGVyY3B1LmM9MTczNT12b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxcbi0tXFxubW0vcGVyY3B1LmMtMTc0OS1cXG5tbS9wZXJjcHUuYzoxNzUwOlxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG5tbS9wZXJjcHUuYy0xNzUxLVxcdC8qXFxuLS1cXG5tbS92bXNjYW4uYz02NzY5PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc3NC1cXHRcXHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXFxubW0vdm1zY2FuLmM6Njc3NTpcXHRcXHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcXG5tbS92bXNjYW4uYy02Nzc2LVxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NTU9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NjUtXFx0XFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcXG5tbS92bXNjYW4uYzo2ODY2OlxcdFxcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcXG5tbS92bXNjYW4uYy02ODY3LVxcdFxcdFxcdFxcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NzY9dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODItXFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxcbm1tL3Ztc2Nhbi5jOjc4ODM6XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtNzg4NC1cXHRcXHQub3JkZXIgPSBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc5NTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbi0tXFxubW0vdm1zY2FuLmMtODAzNS1cXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbm1tL3Ztc2Nhbi5jOjgwMzY6XFx0XFx0XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtODAzNy1cXHRcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oPTg4PWludCBzY25wcmludGZfcGFkKGNoYXIgKiBidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICogZm10LCAuLi4pO1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaC05My1cXG50b29scy9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjk0OiNkZWZpbmUgY3VycmVudF9nZnBfY29udGV4dChrKSAwXFxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaC05NS0jZGVmaW5lIHN5bmNocm9uaXplX3JjdSgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE0OjU1Ljk1MDg5ODU3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NDQyNDUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIEkgc2VlIGl0IHN0YXJ0cyBieSBtYXNzYWdpbmcgdGhlIGBnZnBgIGZsYWdzLiBTcGVjaWZpY2FsbHksIGl0J3MgbWFza2luZyB0aGUgYWxsb2NhdGlvbiBmbGFncyB3aXRoIGBnZnBfYWxsb3dlZF9tYXNrYCBhbmQgdGhlbiBjYWxscyBgY3VycmVudF9nZnBfY29udGV4dCgpYC4gVGhhdCBmdW5jdGlvbiBjYWxsIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgc2VlbXMgbGlrZSBhIHBpdm90YWwgcGllY2UsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIGNvbnRleHQgaXMgYWN0dWFsbHkgYmVpbmcgaGFuZGxlZC4gTGV0J3Mgc2VlLi4uIEknbGwgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHJpZ2h0IGF3YXkuIFRoYXQgc2hvdWxkIGJlIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAyNDguIFRpbWUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBkZWNpc2lvbnMgYXJlIG1hZGUgd2l0aGluIHRoZSBzY2hlZHVsZXIncyBwdXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE0OjU4LjU5NTE0NjUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvbW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHQvKlxcbiAyNDM6XFx0ICogQXBwbGllcyBwZXItdGFzayBnZnAgY29udGV4dCB0byB0aGUgZ2l2ZW4gYWxsb2NhdGlvbiBmbGFncy5cXG4gMjQ0OlxcdCAqIFBGX01FTUFMTE9DX05PSU8gaW1wbGllcyBHRlBfTk9JT1xcbiAyNDU6XFx0ICogUEZfTUVNQUxMT0NfTk9GUyBpbXBsaWVzIEdGUF9OT0ZTXFxuIDI0NjpcXHQgKiBQRl9NRU1BTExPQ19QSU4gIGltcGxpZXMgIUdGUF9NT1ZBQkxFXFxuIDI0NzpcXHQgKi9cXG4gMjQ4OlxcdHN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBSRUFEX09OQ0UoY3VycmVudC1cXHUwMDNlZmxhZ3MpO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRcXHRpZiAodW5saWtlbHkocGZsYWdzIFxcdTAwMjYgKFBGX01FTUFMTE9DX05PSU8gfCBQRl9NRU1BTExPQ19OT0ZTIHwgUEZfTUVNQUxMT0NfUElOKSkpIHtcXG4gMjUzOlxcdFxcdFxcdC8qXFxuIDI1NDpcXHRcXHRcXHQgKiBOT0lPIGltcGxpZXMgYm90aCBOT0lPIGFuZCBOT0ZTIGFuZCBpdCBpcyBhIHdlYWtlciBjb250ZXh0XFxuIDI1NTpcXHRcXHRcXHQgKiBzbyBhbHdheXMgbWFrZSBzdXJlIGl0IG1ha2VzIHByZWNlZGVuY2VcXG4gMjU2OlxcdFxcdFxcdCAqL1xcbiAyNTc6XFx0XFx0XFx0aWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX05PSU8pXFxuIDI1ODpcXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpO1xcbiAyNTk6XFx0XFx0XFx0ZWxzZSBpZiAocGZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfTk9GUylcXG4gMjYwOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5fX0dGUF9GUztcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0aWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX1BJTilcXG4gMjYzOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xcbiAyNjQ6XFx0XFx0fVxcbiAyNjU6XFx0XFx0cmV0dXJuIGZsYWdzO1xcbiAyNjY6XFx0fVxcbiAyNjc6XFx0XFxuIDI2ODpcXHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gMjY5OlxcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApO1xcbiAyNzA6XFx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCk7XFxuIDI3MTpcXHRleHRlcm4gdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spO1xcbiAyNzI6XFx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKTtcXG4gMjczOlxcdCNlbHNlXFxuIDI3NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCkgeyB9XFxuIDI3NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCkgeyB9XFxuIDI3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKSB7IH1cXG4gMjc3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxcbiAyNzg6XFx0I2VuZGlmXFxuIDI3OTpcXHRcXG4gMjgwOlxcdC8qIEFueSBtZW1vcnktYWxsb2NhdGlvbiByZXRyeSBsb29wIHNob3VsZCB1c2VcXG4gMjgxOlxcdCAqIG1lbWFsbG9jX3JldHJ5X3dhaXQoKSwgYW5kIHBhc3MgdGhlIGZsYWdzIGZvciB0aGUgbW9zdFxcbiAyODI6XFx0ICogY29uc3RyYWluZWQgYWxsb2NhdGlvbiBhdHRlbXB0IHRoYXQgbWlnaHQgaGF2ZSBmYWlsZWQuXFxuIDI4MzpcXHQgKiBUaGlzIHByb3ZpZGVzIHVzZWZ1bCBkb2N1bWVudGF0aW9uIG9mIHdoZXJlIGxvb3BzIGFyZSxcXG4gMjg0OlxcdCAqIGFuZCBhIGNlbnRyYWwgcGxhY2UgdG8gZmluZSB0dW5lIHRoZSB3YWl0aW5nIGFzIHRoZSBNTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNDo1OC41OTUzMDUwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwNzk0NTY3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiBjb2RlIGZvciBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gd2hlbiB0aGUgc3lzdGVtIGlzIHVuZGVyIHNvbWUga2luZCBvZiBzdHJlc3MsIHBlcmhhcHMgZHVyaW5nIGVhcmx5IGJvb3Qgb3IgaW4gcmVzcG9uc2UgdG8gYSBjcml0aWNhbCBldmVudCB3aGVyZSBwcm9maWxpbmcgaXMgZWl0aGVyIGltcHJhY3RpY2FsIG9yIGRldHJpbWVudGFsLiBUaGUgXCJmcm96ZW5cIiBwYXJ0IGltcGxpZXMgdGhlc2UgcGFnZXMgYXJlIHByb2JhYmx5IG1hbmFnZWQgZGlmZmVyZW50bHksIHBvc3NpYmx5IGJ5cGFzc2luZyBzb21lIG9mIHRoZSBub3JtYWwgYm9va2tlZXBpbmcgYW5kIGFjY291bnRpbmcgb3ZlcmhlYWQuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBjYXJlZnVsbHkgb3B0aW1pemVkLCBwb3RlbnRpYWxseSByZWx5aW5nIG9uIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIG1lbW9yeSBsYXlvdXQgYXNzdW1wdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBidWRkeSBhbGxvY2F0b3Igb3IgYW55IG90aGVyIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gcG9pbnRzIGFuZCBob3cgbWVtb3J5IGNvcnJ1cHRpb24gaXMgYXZvaWRlZC4gS25vd2luZyBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBtZWNoYW5pc21zIHdpbGwgYWxzbyBiZSB2aXRhbC4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY3JpdGljYWwgcGFnZSBhbGxvY2F0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE1OjAxLjY3NDc2NjUyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTA6XFx0XFx0fVxcbjU0MTE6XFx0XFxuNTQxMjpcXHRcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG41NDEzOlxcdFxcdC8qXFxuNTQxNDpcXHRcXHQgKiBBcHBseSBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cy4gVGhpcyBpcyBtYWlubHkgYWJvdXQgR0ZQX05PRlNcXG41NDE1OlxcdFxcdCAqIHJlc3AuIEdGUF9OT0lPIHdoaWNoIGhhcyB0byBiZSBpbmhlcml0ZWQgZm9yIGFsbCBhbGxvY2F0aW9uIHJlcXVlc3RzXFxuNTQxNjpcXHRcXHQgKiBmcm9tIGEgcGFydGljdWxhciBjb250ZXh0IHdoaWNoIGhhcyBiZWVuIG1hcmtlZCBieVxcbjU0MTc6XFx0XFx0ICogbWVtYWxsb2Nfbm97ZnMsaW99X3tzYXZlLHJlc3RvcmV9LiBBbmQgUEZfTUVNQUxMT0NfUElOIHdoaWNoIGVuc3VyZXNcXG41NDE4OlxcdFxcdCAqIG1vdmFibGUgem9uZXMgYXJlIG5vdCB1c2VkIGR1cmluZyBhbGxvY2F0aW9uLlxcbjU0MTk6XFx0XFx0ICovXFxuNTQyMDpcXHRcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxuNTQyMTpcXHRcXHRhbGxvY19nZnAgPSBnZnA7XFxuNTQyMjpcXHRcXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYyxcXG41NDIzOlxcdFxcdFxcdFxcdFxcdTAwMjZhbGxvY19nZnAsIFxcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXFxuNTQyNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG41NDI1OlxcdFxcbjU0MjY6XFx0XFx0aWYgKCEoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0xPQ0spKSB7XFxuNTQyNzpcXHRcXHRcXHQvKlxcbjU0Mjg6XFx0XFx0XFx0ICogRm9yYmlkIHRoZSBmaXJzdCBwYXNzIGZyb20gZmFsbGluZyBiYWNrIHRvIHR5cGVzIHRoYXRcXG41NDI5OlxcdFxcdFxcdCAqIGZyYWdtZW50IG1lbW9yeSB1bnRpbCBhbGwgbG9jYWwgem9uZXMgYXJlIGNvbnNpZGVyZWQuXFxuNTQzMDpcXHRcXHRcXHQgKi9cXG41NDMxOlxcdFxcdFxcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoXFxuNTQzMjpcXHRcXHRcXHRcXHR6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgZ2ZwKTtcXG41NDMzOlxcdFxcdH1cXG41NDM0OlxcdFxcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcCwgb3JkZXIpIFxcdTAwMjYgQUxMT0NfSElHSEFUT01JQztcXG41NDM1OlxcdFxcbjU0MzY6XFx0XFx0LyogRmlyc3QgYWxsb2NhdGlvbiBhdHRlbXB0IChvciwgZm9yIG5vbG9jaywgb25seSBhdHRlbXB0KSAqL1xcbjU0Mzc6XFx0XFx0cGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoYWxsb2NfZ2ZwLCBvcmRlciwgZmFzdHBhdGhfYWxsb2NfZmxhZ3MsIFxcdTAwMjZhYyk7XFxuNTQzODpcXHRcXHRpZiAobGlrZWx5KHBhZ2UpIHx8IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PTE9DSykpXFxuNTQzOTpcXHRcXHRcXHRnb3RvIG91dDtcXG41NDQwOlxcdFxcbjU0NDE6XFx0XFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbjU0NDI6XFx0XFx0YWMuc3ByZWFkX2RpcnR5X3BhZ2VzID0gZmFsc2U7XFxuNTQ0MzpcXHRcXG41NDQ0OlxcdFxcdC8qXFxuNTQ0NTpcXHRcXHQgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBub2RlbWFzayBpZiBpdCB3YXMgcG90ZW50aWFsbHkgcmVwbGFjZWQgd2l0aFxcbjU0NDY6XFx0XFx0ICogXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCB0byBvcHRpbWl6ZSB0aGUgZmFzdC1wYXRoIGF0dGVtcHQuXFxuNTQ0NzpcXHRcXHQgKi9cXG41NDQ4OlxcdFxcdGFjLm5vZGVtYXNrID0gbm9kZW1hc2s7XFxuNTQ0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MDEuNjc1MjkxMTE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1NTk2OTE3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGFuZ2UgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSByZWNlbnQgY2hhbmdlIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEl0IGFwcGVhcnMgdGhhdCBhIGNydWNpYWwgbGluZSBoYXMgYmVlbiBhZGRlZDogYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuICBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgZnVuY3Rpb24gZGlkbid0IGluY2x1ZGUgdGhpcyBjYWxsLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFkZGl0aW9uLiAgVGhpcyBmdW5jdGlvbiBpcyB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdG9yLCBzbyBpdCBoYXMgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gIFRoZSBHRlAgZmxhZ3MgYXJlIGF0IHBsYXkgaGVyZSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgbWVtb3J5LlxuXG5UaGUgY29yZSBxdWVzdGlvbiBub3cgaXMsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhZGRpdGlvbj8gVG8gZmlndXJlIHRoYXQgb3V0LCBJIG5lZWQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa2AgYW5kIGl0cyB2YXJpYW50cyAoYGFsbG9jX3BhZ2VzX2J1bGtfYXJyYXlgLCBgYWxsb2NfcGFnZXNfYnVsa19saXN0YCwgYW5kIHRoZSBtb2RpZmllZCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKSBhcmUgYmVpbmcgKnVzZWQqLiAgV2hhdCBwYXJ0cyBvZiB0aGUga2VybmVsIHJlbHkgb24gdGhpcyBmdW5jdGlvbmFsaXR5PyAgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSBob3cgdGhpcyBjaGFuZ2UgcHJvcGFnYXRlcyBhbmQgd2hhdCBzeXN0ZW1zIGFyZSBub3cgYWZmZWN0ZWQgYnkgdGhpcyBjb250ZXh0dWFsIGNoYW5nZS4gVGltZSB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIHRob3NlIGZ1bmN0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODYyNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE1OjA0LjIzNDk4NTc2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTAxMDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNC1cXHQgKlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDU6XFx0ICogTm90ZTogYWxsb2NfcGFnZXNfYnVsayBuZWVkcyB0aGUgYXJyYXkgdG8gYmUgemVyb2VkLCBhcyBpdCBhc3N1bWVzXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cXHQgKiBhbnkgbm9uLXplcm8gc2xvdCBhbHJlYWR5IGNvbnRhaW5zIGEgdmFsaWQgYWxsb2NhdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXFx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA5OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTAtXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3NlZ3MpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM9MzE9aW50IGZ3X2lzb19idWZmZXJfYWxsb2Moc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgaW50IHBhZ2VfY291bnQpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDEtXFx0Ly8gY29udmVuaWVuY2UgdG8gbWFwIHRoZW0gaW50byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdXNlciBwcm9jZXNzLlxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiB8IF9fR0ZQX1pFUk8sXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfY291bnQsIHBhZ2VfYXJyYXkpO1xcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM9ODQ4PXN0YXRpYyBpbnQgYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLFxcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVxcdC8vIGFkZHJlc3MgcmFuZ2UgaW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS5cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYzo4NjU6XFx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjYtXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI2LVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgYm8tXFx1MDAzZXBnbnIsIGJvLVxcdTAwM2VwYWdlcyk7XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjgtXFx0LypcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcXHQgKiBhbGxvY19wYWdlc19idWxrKCkgZG9lcyBub3QgdHJ5IHZlcnkgaGFyZCB0byBnZXQgcGFnZXMgdW5kZXIgbWVtb3J5XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MzAtXFx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ2Nj1zdGF0aWMgdm9pZCBmcmVlX3BhZ2VfbGlzdCh1MzIgbnBhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NjktXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjQ3MDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NzEtXFx0Zm9yIChpID0gbnBhZ2VzIC0gMTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDk2PXN0YXRpYyBpbnQgbWx4NXZmX2FkZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKipwYWdlX2xpc3QsIHVuc2lnbmVkIGludCBucGFnZXMpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA2LVxcdGZvciAoOzspIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3OlxcdFxcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBucGFnZXMgLSBkb25lLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXFx0XFx0XFx0XFx0XFx0ICAqcGFnZV9saXN0ICsgZG9uZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTc4LVxcdGRvIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6Nzk6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTgwLVxcdFxcdFxcdFxcdFxcdCAgcGFnZV9saXN0KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz0xMTA9c3RhdGljIHZvaWQgdmlydGlvdmZfZnJlZV9kYXRhX2J1ZmZlcihzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTMtXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjExNDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTUtXFx0Zm9yX2VhY2hfc2d0YWJsZV9wYWdlKFxcdTAwMjZidWYtXFx1MDAzZXRhYmxlLnNndCwgXFx1MDAyNnNnX2l0ZXIsIDApXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xcbi0tXFxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxcbi0tXFxuZnMvZXJvZnMvenV0aWwuYy04OS1cXHRcXHRcXHRsYXN0ID0gajtcXG5mcy9lcm9mcy96dXRpbC5jOjkwOlxcdFxcdFxcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XFxuZnMvZXJvZnMvenV0aWwuYy05MS1cXHRcXHRcXHRpZiAobGFzdCA9PSBqKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XFx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVxcdGlmICghbnJfYWxsb2MpXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxcbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXFx1MDAzZW5jbl9wYWdlcyk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVxcdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcXG4tLVxcbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5mcy9zcGxpY2UuYy0zNDEtXFx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICsgbnBhZ2VzKTtcXG5mcy9zcGxpY2UuYzozNDI6XFx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XFxuZnMvc3BsaWNlLmMtMzQzLVxcdGlmICghbnBhZ2VzKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMi1cXHRcXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIxNj12b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxOS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI1OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcXHRfX2FsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyOTphbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIE5VTEwsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzg6I2RlZmluZSBhbGxvY19wYWdlc19idWxrX25vZGUoLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MC1cXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xOTItXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIE5VTUFfTk9fTk9ERSxcXG5pb191cmluZy9tZW1tYXAuYy0xOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBtci1cXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzMzOlxcdFxcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNC1cXHRcXHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jPTM5MT12bV9tYXBfcmFtX3Rlc3Qodm9pZClcXG4tLVxcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDMtXFxubGliL3Rlc3Rfdm1hbGxvYy5jOjQwNDpcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDUtXFx0aWYgKG5yX2FsbG9jYXRlZCAhPSBtYXBfbnJfcGFnZXMpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz01MT1zdGF0aWMgdm9pZCAqX19pbml0IGlvdl9rdW5pdF9jcmVhdGVfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVxcdFxcdGxhc3QgPSBnb3Q7XFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XFx0XFx0Z290ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTc3Nz1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy03OTMtXFxubW0vYWxsb2NfdGFnLmM6Nzk0OlxcdFxcdFxcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLFxcbm1tL2FsbG9jX3RhZy5jLTc5NS1cXHRcXHRcXHRcXHROVU1BX05PX05PREUsIG1vcmVfcGFnZXMgLSBuciwgbmV4dF9wYWdlICsgbnIpO1xcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9MzI3PXN0YXRpYyB2b2lkIF9fX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zMzgtXFxubW0va2FzYW4vc2hhZG93LmM6MzM5OnN0YXRpYyBpbnQgX19fYWxsb2NfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrKVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDQtXFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxubW0va2FzYW4vc2hhZG93LmM6MzQ1OlxcdFxcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XFxubW0va2FzYW4vc2hhZG93LmMtMzQ2LVxcdFxcdGlmICghbnJfcG9wdWxhdGVkKSB7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zNTc9c3RhdGljIGludCBfX2thc2FuX3BvcHVsYXRlX3ZtYWxsb2NfZG8odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMzY5LVxcdFxcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xcbm1tL2thc2FuL3NoYWRvdy5jOjM3MDpcXHRcXHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XFxubW0va2FzYW4vc2hhZG93LmMtMzcxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNTg5PUVYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9wcm9mKTtcXG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxcbm1tL21lbXBvbGljeS5jOjI1OTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNTkyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MDctXFx0XFx0aWYgKGRlbHRhKSB7XFxubW0vbWVtcG9saWN5LmM6MjYwODpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYwOS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtcG9saWN5LmM6MjYxNDpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYxNS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjI1LVxcbm1tL21lbXBvbGljeS5jOjI2MjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2NjQtXFx0XFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XFxubW0vbWVtcG9saWN5LmM6MjY2NTpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI2NjYtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MDEtXFx0LypcXG5tbS9tZW1wb2xpY3kuYzoyNzAyOlxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbm1tL21lbXBvbGljeS5jLTI3MDMtXFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MjktXFx0XFx0XFx0YnJlYWs7XFxubW0vbWVtcG9saWN5LmM6MjczMDpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI3MzEtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NDMtXFxubW0vbWVtcG9saWN5LmM6Mjc0NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTMtXFxubW0vbWVtcG9saWN5LmM6Mjc1NDpcXHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcXHUwMDI2cG9sLVxcdTAwM2Vub2RlcyxcXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVxcdFxcdFxcdFxcdFxcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTctXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKVxcbm1tL21lbXBvbGljeS5jOjI3NTg6XFx0XFx0bnJfYWxsb2NhdGVkICs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMjc1OS1cXHRcXHRcXHRcXHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NjktICovXFxubW0vbWVtcG9saWN5LmM6Mjc3MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc3MS1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODE6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnAsIHBvbCxcXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODU6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVxcdFxcdFxcdFxcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODgtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxcbm1tL21lbXBvbGljeS5jOjI3ODk6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3OTAtXFx0XFx0XFx0XFx0bnVtYV9ub2RlX2lkKCksIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxcbm1tL3BhZ2VfYWxsb2MuYzo1MTQwOiAqIF9fYWxsb2NfcGFnZXNfYnVsayAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIG9yZGVyLTAgcGFnZXMgdG8gYW4gYXJyYXlcXG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NTMwMTpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTUzMDItXFxuLS1cXG5tbS9zbHViLmM9NzQyNj1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzQ3MC0gKlxcbm1tL3NsdWIuYzo3NDcxOiAqIFVubGlrZSBhbGxvY19wYWdlc19idWxrKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGFscmVhZHkgYWxsb2NhdGVkXFxubW0vc2x1Yi5jLTc0NzItICogb2JqZWN0cyBpbiBAcCwgYW5kIHRodXMgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIHplcm8gaXQuXFxuLS1cXG5tbS92bWFsbG9jLmM9MzY3Nj12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNzQzLVxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcXHUwMDI2XFx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxcbm1tL3ZtYWxsb2MuYzozNzQ0OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcXG5tbS92bWFsbG9jLmMtMzc0NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDctXFx0XFx0XFx0ZWxzZVxcbm1tL3ZtYWxsb2MuYzozNzQ4OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcXG5tbS92bWFsbG9jLmMtMzc0OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NjExPXN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjMzLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNDpcXHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFxcXCJlbXB0eVxcXCIgZm9yIGFsbG9jX3BhZ2VzX2J1bGsgKi9cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXFx0bWVtc2V0KFxcdTAwMjZwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzYtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM3OlxcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cXHUwMDNlcC5uaWQsIGJ1bGssXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM4LVxcdFxcdFxcdFxcdFxcdCAoc3RydWN0IHBhZ2UgKiopcG9vbC1cXHUwMDNlYWxsb2MuY2FjaGUpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jPTY4Nz1zdGF0aWMgYm9vbCBzdmNfZmlsbF9wYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cXHRmb3IgKGZpbGxlZCA9IDA7IGZpbGxlZCBcXHUwMDNjIG5wYWdlczsgZmlsbGVkID0gcmV0KSB7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcXHRcXHRyZXQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXFx0XFx0aWYgKHJldCBcXHUwMDNlIGZpbGxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MDYuNDgwMDA0NTQ2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzNTgzMzQ1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbW1pdCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJhdGlvbmFsZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIGBnaXQgbG9nYCwgYnV0IEkgZG9uJ3QgaGF2ZSB0aGF0IHRvb2wgaGFuZHkgZGlyZWN0bHkuIExldCdzIHNlZS4uLiB3aGF0IGRvZXMgdGhlIHBhdGNoIGl0c2VsZiB0ZWxsIG1lPyBBaCwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGBnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7YCB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cyAqd2h5Kj8gV2h5IGFyZSB0aGV5IGRvaW5nIHRoaXM/XG5cblJpZ2h0LCBpdCdzIGhpdHRpbmcgbWUgbm93LiBUaGUgaXNzdWUgaXMgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdhc24ndCByZXNwZWN0aW5nIHRoZSB0YXNrIGZsYWdzISBGbGFncyBsaWtlIGBQRl9NRU1BTExPQ19OT0lPYCwgYFBGX01FTUFMTE9DX05PRlNgLCBhbmQgYFBGX01FTUFMTE9DX1BJTmAgYXJlIGltcG9ydGFudCBjb25zdHJhaW50cy4gVGhlIGBjdXJyZW50X2dmcF9jb250ZXh0YCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmU7IGl0IGxpa2VseSBhcHBsaWVzIHRoZSB0YXNrLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzLCBlZmZlY3RpdmVseSBlbmZvcmNpbmcgdGhvc2UgYFBGXypgIGZsYWdzLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0uIExldCBtZSBqdXN0IGdsYW5jZSBhdCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgcHJlcGFyZV9hbGxvY19wYWdlc2AgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gc2VlIGlmIHRoYXQncyB0aGUgcG9pbnQgd2hlcmUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGlzIHN1cHBvc2VkIHRvIHRha2UgZWZmZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgwMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNTowOS44MzgzNDE3MjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDkwOlxcdFxcbjUwOTE6XFx0c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG41MDkyOlxcdFxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcXG41MDkzOlxcdFxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgZ2ZwX3QgKmFsbG9jX2dmcCxcXG41MDk0OlxcdFxcdFxcdHVuc2lnbmVkIGludCAqYWxsb2NfZmxhZ3MpXFxuNTA5NTpcXHR7XFxuNTA5NjpcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spO1xcbjUwOTc6XFx0XFx0YWMtXFx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XFxuNTA5ODpcXHRcXHRhYy1cXHUwMDNlbm9kZW1hc2sgPSBub2RlbWFzaztcXG41MDk5OlxcdFxcdGFjLVxcdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XFxuNTEwMDpcXHRcXG41MTAxOlxcdFxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSkge1xcbjUxMDI6XFx0XFx0XFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcXG41MTAzOlxcdFxcdFxcdC8qXFxuNTEwNDpcXHRcXHRcXHQgKiBXaGVuIHdlIGFyZSBpbiB0aGUgaW50ZXJydXB0IGNvbnRleHQsIGl0IGlzIGlycmVsZXZhbnRcXG41MTA1OlxcdFxcdFxcdCAqIHRvIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dC4gSXQgbWVhbnMgdGhhdCBhbnkgbm9kZSBvay5cXG41MTA2OlxcdFxcdFxcdCAqL1xcbjUxMDc6XFx0XFx0XFx0aWYgKGluX3Rhc2soKSBcXHUwMDI2XFx1MDAyNiAhYWMtXFx1MDAzZW5vZGVtYXNrKVxcbjUxMDg6XFx0XFx0XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG41MTA5OlxcdFxcdFxcdGVsc2VcXG41MTEwOlxcdFxcdFxcdFxcdCphbGxvY19mbGFncyB8PSBBTExPQ19DUFVTRVQ7XFxuNTExMTpcXHRcXHR9XFxuNTExMjpcXHRcXG41MTEzOlxcdFxcdG1pZ2h0X2FsbG9jKGdmcF9tYXNrKTtcXG41MTE0OlxcdFxcbjUxMTU6XFx0XFx0LypcXG41MTE2OlxcdFxcdCAqIERvbid0IGludm9rZSBzaG91bGRfZmFpbCBsb2dpYywgc2luY2UgaXQgbWF5IGNhbGxcXG41MTE3OlxcdFxcdCAqIGdldF9yYW5kb21fdTMyKCkgYW5kIHByaW50aygpIHdoaWNoIG5lZWQgdG8gc3Bpbl9sb2NrLlxcbjUxMTg6XFx0XFx0ICovXFxuNTExOTpcXHRcXHRpZiAoISgqYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0xPQ0spIFxcdTAwMjZcXHUwMDI2XFxuNTEyMDpcXHRcXHQgICAgc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZShnZnBfbWFzaywgb3JkZXIpKVxcbjUxMjE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjUxMjI6XFx0XFxuNTEyMzpcXHRcXHQqYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtcXG41MTI0OlxcdFxcbjUxMjU6XFx0XFx0LyogRGlydHkgem9uZSBiYWxhbmNpbmcgb25seSBkb25lIGluIHRoZSBmYXN0IHBhdGggKi9cXG41MTI2OlxcdFxcdGFjLVxcdTAwM2VzcHJlYWRfZGlydHlfcGFnZXMgPSAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9XUklURSk7XFxuNTEyNzpcXHRcXG41MTI4OlxcdFxcdC8qXFxuNTEyOTpcXHRcXHQgKiBUaGUgcHJlZmVycmVkIHpvbmUgaXMgdXNlZCBmb3Igc3RhdGlzdGljcyBidXQgY3J1Y2lhbGx5IGl0IGlzXFxuNTEzMDpcXHRcXHQgKiBhbHNvIHVzZWQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgem9uZWxpc3QgaXRlcmF0b3IuIEl0XFxuNTEzMTpcXHRcXHQgKiBtYXkgZ2V0IHJlc2V0IGZvciBhbGxvY2F0aW9ucyB0aGF0IGlnbm9yZSBtZW1vcnkgcG9saWNpZXMuXFxuNTEzMjpcXHRcXHQgKi9cXG41MTMzOlxcdFxcdGFjLVxcdTAwM2VwcmVmZXJyZWRfem9uZXJlZiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KGFjLVxcdTAwM2V6b25lbGlzdCxcXG41MTM0OlxcdFxcdFxcdFxcdFxcdFxcdGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGFjLVxcdTAwM2Vub2RlbWFzayk7XFxuNTEzNTpcXHRcXG41MTM2OlxcdFxcdHJldHVybiB0cnVlO1xcbjUxMzc6XFx0fVxcbjUxMzg6XFx0XFxuNTEzOTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNTowOS44Mzg3NjQxNDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjAzNzMzMzUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBgcHJlcGFyZV9hbGxvY19wYWdlc2AqKlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxpbmcuIEFoLCBsaW5lIDUxMjM6IGl0IGxvb2tzIGxpa2UgaXQncyBzZXR0aW5nIGAqYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtgLiBOb3csIEkgcmVjYWxsIHRoYXQgZ3JlcCByZXN1bHQgZnJvbSBlYXJsaWVyLCB0aGF0IGxpbmUgMzc4NSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBtZW50aW9uczogXCIvKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1wiLiBBbmQgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGhlcmUgaXMgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gYGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylgISBPa2F5LCB0aGF0IHJpbmdzIGEgYmVsbC4gTm93IGl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBhbmQgdGhlIHB1cnBvc2Ugb2YgYGFsbG9jX2ZsYWdzX2NtYWAuIExldCdzIHNlZSB3aGF0IHRoYXQncyBhbGwgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MTUuODc2MTAwNjY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5Mjc3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc4NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc4NDpcXHRcXG4zNzg1OlxcdC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovXFxuMzc4NjpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2spXFxuMzc4NzpcXHR7XFxuMzc4ODpcXHQjaWZkZWYgQ09ORklHX0NNQVxcbjM3ODk6XFx0XFx0aWYgKGdmcF9taWdyYXRldHlwZShnZnBfbWFzaykgPT0gTUlHUkFURV9NT1ZBQkxFKVxcbjM3OTA6XFx0XFx0XFx0cmV0dXJuIEFMTE9DX0NNQTtcXG4zNzkxOlxcdCNlbmRpZlxcbjM3OTI6XFx0XFx0cmV0dXJuIEFMTE9DX0RFRkFVTFQ7XFxuMzc5MzpcXHR9XFxuMzc5NDpcXHRcXG4zNzk1OlxcdC8qXFxuMzc5NjpcXHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0IGdvZXMgdGhyb3VnaCB0aGUgem9uZWxpc3QgdHJ5aW5nIHRvIGFsbG9jYXRlXFxuMzc5NzpcXHQgKiBhIHBhZ2UuXFxuMzc5ODpcXHQgKi9cXG4zNzk5OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqXFxuMzgwMDpcXHRnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBhbGxvY19mbGFncyxcXG4zODAxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcXG4zODAyOlxcdHtcXG4zODAzOlxcdFxcdHN0cnVjdCB6b25lcmVmICp6O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNToxNS44NzY5OTgxMDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODk3NTM1NTQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBXb3J0aEZ1enppbmcgZm9yIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBUaGUgY29tbWVudCBvbiBgYWxsb2NfZmxhZ3NfY21hYCBpcyBrZXk6IFwiTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAsIHdoaWNoIGNhbiBjaGFuZ2UgYGdmcF9tYXNrYC5cIiBUaGlzIGxpbmtzIGRpcmVjdGx5IHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzKClgIGFuZCBob3cgYGFsbG9jX2ZsYWdzX2NtYWAgaXMgdXNlZCB3aXRoaW4gaXQsIGFuZCB0aGF0IGZ1bmN0aW9uIHRoZW4gY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSSdtIGFsc28gc2VlaW5nIGBtaWdodF9hbGxvYyhnZnBfbWFzaylgIGJlaW5nIGNhbGxlZCBpbiBgcHJlcGFyZV9hbGxvY19wYWdlcygpYC4gTXkgbWFpbiBjb25jZXJuIGlzLCBpZiBgUEZfTUVNQUxMT0NfTk9GU2AgaXMgc2V0IG9uIHRoZSBjdXJyZW50IHByb2Nlc3MgYW5kIGBhbGxvY19wYWdlc19idWxrYCBpcyBjYWxsZWQgd2l0aCBgR0ZQX0tFUk5FTGAgKHdoaWNoIGluY2x1ZGVzIGBfX0dGUF9GU2ApLCB0aGVuIGBtaWdodF9hbGxvYyhHRlBfS0VSTkVMKWAgY291bGQgY2F1c2UgYSBsb2NrZGVwIG9yIGZzX3JlY2xhaW0gd2FybmluZyBpZiBgZ2ZwYCBpc24ndCBwcm9wZXJseSBzdHJpcHBlZCBvZiBgX19HRlBfRlNgIGZpcnN0LiBPciBtYXliZSwgaXQncyBhIENNQSBpc3N1ZSB3aXRoIGBQRl9NRU1BTExPQ19QSU5gIHdoZXJlIGZsYWdzIGFyZSBiZWluZyBpbXByb3Blcmx5IG1hc2tlZC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgc29tZXRoaW5nIHRvIGZ1enouIExldCdzIHNlZS4uLiBpcyB0aGlzIGNoYW5nZSByZWFjaGFibGU/IFllcywgbW0vcGFnZV9hbGxvYy5jIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc28gdGhhdCdzIGEgY2hlY2sgbWFyay5cblxuSXMgaXQgd29ydGggZnV6emluZz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWEuIFNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCB0aGUgYW5zd2VyIGlzICp1bmVxdWl2b2NhbGx5KiBZRVMuIEFjY29yZGluZyB0byB0aGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYSwgYW55IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYXJlIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBhbmQgdGhpcyBpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIChtbS9wYWdlX2FsbG9jLmMpIHRoYXQgaXMgY2FsbGVkIGluIG5vcm1hbCBvcGVyYXRpb24gKGJ0cmZzLCBmdXNlLCBwYWdlX3Bvb2wsIGV0Yy4pLiBgV29ydGhGdXp6aW5nYCBNVVNUIEJFIFRSVUUuXG5cbk5vdywgaG93IHNob3VsZCBJIGRpcmVjdCB0aGUgZnV6emVyIHRvIG1heGltaXplIGVmZmVjdGl2ZW5lc3M/XG5cblRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBwcmV2ZW50IGRpbHV0aW9uLiBJIG5lZWQgdG8gYXZvaWQgXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuIEJ1dCB3YWl0LCBpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGNvbnNpZGVyZWQgYSB1YmlxdWl0b3VzIGFsbG9jYXRvcj8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyB2ZXJ5IGNhcmVmdWxseS4gTGV0J3MgcmUtcmVhZCB0aG9zZSBpbnN0cnVjdGlvbnM6IFwiRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMuLi4pLlwiIE15IGluaXRpYWwgdGhvdWdodCwgaXMgdGhhdCB0aGUgYWxsb2NhdG9ycyAqYXJlKiBwcmV0dHkgbXVjaCB1YmlxdWl0b3VzLCBzbyB0aGUgaW5zdHJ1Y3Rpb25zIHdvdWxkIHN1Z2dlc3QgdG8gaWdub3JlIHRoZW0uIEhvd2V2ZXIsIGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYSAqZ2VuZXJhbCogbWVtb3J5IGFsbG9jYXRvciwgb3IgaXMgaXQgYSBtb3JlIHNwZWNpZmljIG9uZT8gV2hhdCBjYWxscyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgP1xuXG5Pa2F5LCBmcm9tIHRoZSBncmVwIHJlc3VsdHMsIEkgc2VlIGl0J3MgY2FsbGVkIGJ5OiBjb3B5X3NwbGljZV9yZWFkIGluIGZzL3NwbGljZS5jLCBidHJmc19hbGxvY19wYWdlX2FycmF5LCBmdXNlX3JlYWRkaXJfYWxsb2NfYnVmLCBhcmVuYV9hbGxvY19wYWdlcywgc2V2ZXJhbCBtbS9tZW1wb2xpY3kuYyBmdW5jdGlvbnMsIGFuZCBhIGZldyBvdGhlcnMgZnJvbSBkcml2ZXJzIGFuZCBuZXR3b3JraW5nLiBPa2F5LCBsZXQncyBzdG9wIGZvciBhIG1vbWVudC4gSXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBjYWxsZWQgYnkgYWxtb3N0ICpldmVyeSogcHJvZ3JhbT8gTk8hIFN0YW5kYXJkIGFsbG9jYXRpb24gcGF0aHMgbm9ybWFsbHkgdXNlIGttYWxsb2Mgb3Igdm1hbGxvYyBvciBzaW5nbGUtcGFnZSBhbGxvY2F0aW9ucyAoX19hbGxvY19wYWdlc19ub3Byb2YpLiBJdCBsb29rcyBsaWtlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgZmFpcmx5IHNwZWNpZmljLiBUaGVyZWZvcmUsIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgKm5vdCogYSBcImdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb24uXCJcbk5vdyBJIG5lZWQgdG8gcmUtY2hlY2sgdGhlIHZtYWxsb2MgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MjQuODUyMzU3ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzM1OlxcdFxcdFxcdFxcdCAqL1xcbjM3MzY6XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCA9IG1pbigxMDBVTCwgbnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQpO1xcbjM3Mzc6XFx0XFxuMzczODpcXHRcXHRcXHRcXHQvKiBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgY29uc2lkZXIgbWVtcG9saWN5LCB3ZSBjYW4ndFxcbjM3Mzk6XFx0XFx0XFx0XFx0ICogd3JvbmdseSB1c2UgbmVhcmVzdCBub2RlIHdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSxcXG4zNzQwOlxcdFxcdFxcdFxcdCAqIG90aGVyd2lzZSBtZW1vcnkgbWF5IGJlIGFsbG9jYXRlZCBpbiBvbmx5IG9uZSBub2RlLFxcbjM3NDE6XFx0XFx0XFx0XFx0ICogYnV0IG1lbXBvbGljeSB3YW50cyB0byBhbGxvYyBtZW1vcnkgYnkgaW50ZXJsZWF2aW5nLlxcbjM3NDI6XFx0XFx0XFx0XFx0ICovXFxuMzc0MzpcXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcXG4zNzQ0OlxcdFxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcXG4zNzQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuMzc0NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwYWdlcyArIG5yX2FsbG9jYXRlZCk7XFxuMzc0NzpcXHRcXHRcXHRcXHRlbHNlXFxuMzc0ODpcXHRcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwLCBuaWQsXFxuMzc0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbjM3NTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGFnZXMgKyBucl9hbGxvY2F0ZWQpO1xcbjM3NTE6XFx0XFxuMzc1MjpcXHRcXHRcXHRcXHRmb3IgKGkgPSBucl9hbGxvY2F0ZWQ7IGkgXFx1MDAzYyBucl9hbGxvY2F0ZWQgKyBucjsgaSsrKVxcbjM3NTM6XFx0XFx0XFx0XFx0XFx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2VzW2ldLCBOUl9WTUFMTE9DLCAxKTtcXG4zNzU0OlxcdFxcbjM3NTU6XFx0XFx0XFx0XFx0bnJfYWxsb2NhdGVkICs9IG5yO1xcbjM3NTY6XFx0XFxuMzc1NzpcXHRcXHRcXHRcXHQvKlxcbjM3NTg6XFx0XFx0XFx0XFx0ICogSWYgemVybyBvciBwYWdlcyB3ZXJlIG9idGFpbmVkIHBhcnRseSxcXG4zNzU5OlxcdFxcdFxcdFxcdCAqIGZhbGxiYWNrIHRvIGEgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNToyNC44NTI2NDgzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODIyODMwNjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHZtYWxsb2MgQWxsb2NhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdm1hbGxvY2AgaXMgYWxsb2NhdGluZyBwYWdlcywgc28gSSdtIGRpdmluZyBpbnRvIGBtbS92bWFsbG9jLmNgLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBob3cgYHZtX2FyZWFfYWxsb2NfcGFnZXMoKWAgaXMgYmVpbmcgdXNlZC4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgaXQncyB1c2luZyBlaXRoZXIgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgIG9yIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgZGVhbCB3aXRoIGFsbG9jYXRpbmcgbXVsdGlwbGUgcGFnZXMgYXQgb25jZSwgbGlrZWx5IHRvIG9wdGltaXplIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIGEgbGFyZ2UgYHZtYWxsb2NgIHJlZ2lvbi5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cC4gSXMgYF9fdm1hbGxvY19ub2RlX3JhbmdlYCBjYWxsaW5nIHRoaXMgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGZ1bmN0aW9uPyBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGluIGEgdm1hbGxvYyBjYWxsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gY29uZmlybSB0aGF0IGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZWAgaXMgaW5kZWVkIGludm9raW5nIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCB0byBhbGxvY2F0ZSB0aGUgdW5kZXJseWluZyBwYWdlcy4gTGV0IG1lIGdvIGNoZWNrIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkyNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MjcuNjc1NDgyMTYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEyOTQ3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1fYXJlYV9hbGxvY19wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTM2NzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXFxubW0vdm1hbGxvYy5jOjM2NzY6dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxubW0vdm1hbGxvYy5jLTM2NzctXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbi0tXFxubW0vdm1hbGxvYy5jPTM4NzM9c3RhdGljIHZvaWQgKl9fdm1hbGxvY19hcmVhX25vZGUoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bWFsbG9jLmMtMzkyMS1cXHQgKi9cXG5tbS92bWFsbG9jLmM6MzkyMjpcXHRhcmVhLVxcdTAwM2Vucl9wYWdlcyA9IHZtX2FyZWFfYWxsb2NfcGFnZXMoXFxubW0vdm1hbGxvYy5jLTM5MjMtXFx0XFx0XFx0dm1hbGxvY19nZnBfYWRqdXN0KGdmcF9tYXNrLCBwYWdlX29yZGVyKSwgbm9kZSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTMxLVxcdFxcdC8qXFxubW0vdm1hbGxvYy5jOjM5MzI6XFx0XFx0ICogdm1fYXJlYV9hbGxvY19wYWdlcygpIGNhbiBmYWlsIGR1ZSB0byBpbnN1ZmZpY2llbnQgbWVtb3J5IGJ1dFxcbm1tL3ZtYWxsb2MuYy0zOTMzLVxcdFxcdCAqIGFsc286LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNToyNy45MzY3ODE5MzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAzNTgyNDI2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2FzIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggd2FzIG1vZGlmeWluZy4gIFJpZ2h0LCBpdCBpcy4gIGB2bWFsbG9jYCBjYWxscyBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIHdoaWNoIHRoZW4gY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgIGFuZCAqdGhhdCogY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBJcyB0aGlzIGZ1bmN0aW9uIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGBGb2N1c1N5bWJvbGAgaW4gZnV6emluZz8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLlxuXG5UaGUgZG9jdW1lbnRhdGlvbiB3YXJucyBhZ2FpbnN0IFwidWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzXCIgbGlrZSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLiAgSXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdWJpcXVpdG91cyo/IEl0J3MgY2FsbGVkIHdoZW4gYHZtYWxsb2NgIGlzIHVzZWQuICBga21hbGxvY2AgaXMgc3VwZXIgY29tbW9uLCBidXQgYHZtYWxsb2NgIGlzIHVzZWQgYSBkZWNlbnQgYW1vdW50IHRvby4gIElzIGl0ICpnZW5lcmljKiBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCB1YmlxdWl0b3VzPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuXG5cbk5vdywgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBub3QgdWJpcXVpdG91cywgSSBtaWdodCBoYXZlIGEgc29saWQgY2FuZGlkYXRlIGZvciBhIEZvY3VzU3ltYm9sIVxuXG5UaGUgcGF0Y2ggYWRkcyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gV2hhdCdzIGBjdXJyZW50X2dmcF9jb250ZXh0YCBkb2luZz8gSXQncyBzZXR0aW5nIGBQRl9NRU1BTExPQ19OT0lPYCwgYFBGX01FTUFMTE9DX05PRlNgLCBhbmQgYFBGX01FTUFMTE9DX1BJTmAuICBgUEZfTUVNQUxMT0NfTk9GU2AgaXMgdXNlZCBkdXJpbmcgZnMgb3BlcmF0aW9ucy90cmFuc2FjdGlvbnMgbGlrZSBidHJmcywgZXh0NCwgYW5kIHhmcy4gYFBGX01FTUFMTE9DX05PSU9gIGlzIGZvciB0aGUgYmxvY2sgbGF5ZXIuIGBQRl9NRU1BTExPQ19QSU5gIGhhcyBtZSB0aGlua2luZyB1c2VyIHBhZ2VzLCBzbyB3aGF0IGNvbnRleHQgaXMgdGhhdD8gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBQRl9NRU1BTExPQ19QSU5gIGlzIHVzZWQuIFRoaXMgY291bGQgYmUgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBzcGVjaWZpY2FsbHkgaW1wb3J0YW50IHRvIHRlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTQwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE1OjM4LjI5NTAyNzc3M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzcwNTYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQRl9NRU1BTExPQ19QSU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC5oPTE3OTA9ZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTgyMy0jZGVmaW5lIFBGX01DRV9FQVJMWVxcdFxcdDB4MDgwMDAwMDAgICAgICAvKiBFYXJseSBraWxsIGZvciBtY2UgcHJvY2VzcyBwb2xpY3kgKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTgyNDojZGVmaW5lIFBGX01FTUFMTE9DX1BJTlxcdFxcdDB4MTAwMDAwMDBcXHQvKiBBbGxvY2F0aW9ucyBjb25zdHJhaW5lZCB0byB6b25lcyB3aGljaCBhbGxvdyBsb25nIHRlcm0gcGlubmluZy5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTgyNS1cXHRcXHRcXHRcXHRcXHRcXHQgKiBTZWUgbWVtYWxsb2NfcGluX3NhdmUoKSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTIxNT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fdmZvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ1LSAqIFBGX01FTUFMTE9DX05PRlMgaW1wbGllcyBHRlBfTk9GU1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNDY6ICogUEZfTUVNQUxMT0NfUElOICBpbXBsaWVzICFHRlBfTU9WQUJMRVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDctICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTI0OD1zdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjUxLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNTI6XFx0aWYgKHVubGlrZWx5KHBmbGFncyBcXHUwMDI2IChQRl9NRU1BTExPQ19OT0lPIHwgUEZfTUVNQUxMT0NfTk9GUyB8IFBGX01FTUFMTE9DX1BJTikpKSB7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI1My1cXHRcXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI2MS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MjYyOlxcdFxcdGlmIChwZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQ19QSU4pXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI2My1cXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00NTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2NfcGluX3NhdmUodm9pZClcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDU2LXtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDU3OlxcdHJldHVybiBtZW1hbGxvY19mbGFnc19zYXZlKFBGX01FTUFMTE9DX1BJTik7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ1OC19XFxuLS1cXG5tbS9odWdldGxiLmM9MTI1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEyNTUtXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG5tbS9odWdldGxiLmM6MTI1NjpcXHRib29sIHBpbiA9ICEhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfUElOKTtcXG5tbS9odWdldGxiLmMtMTI1Ny1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxNi1cXHQgKiBmcm9tIGEgcGFydGljdWxhciBjb250ZXh0IHdoaWNoIGhhcyBiZWVuIG1hcmtlZCBieVxcbm1tL3BhZ2VfYWxsb2MuYzo1NDE3OlxcdCAqIG1lbWFsbG9jX25ve2ZzLGlvfV97c2F2ZSxyZXN0b3JlfS4gQW5kIFBGX01FTUFMTE9DX1BJTiB3aGljaCBlbnN1cmVzXFxubW0vcGFnZV9hbGxvYy5jLTU0MTgtXFx0ICogbW92YWJsZSB6b25lcyBhcmUgbm90IHVzZWQgZHVyaW5nIGFsbG9jYXRpb24uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE1OjM5Ljk2ODc0MDU5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTYyMTgwOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbWVtYWxsb2NfcGluX3NhdmVgIENhbGwgU2l0ZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgY29udGV4dCBvZiBgbWVtYWxsb2NfcGluX3NhdmVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBleGFjdGx5IGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD9cIiBUbyBnZXQgYSBncmFzcCBvbiBpdHMgcm9sZSwgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgZGVzaWduIGludGVudCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgYmVoYXZpb3IuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzIOKAkyBsaWtlbHkgYSBjb21iaW5hdGlvbiBvZiBncmVwIG9yIGFuIElERSdzIHNlYXJjaCBmdW5jdGlvbmFsaXR5LCBjb3VwbGVkIHdpdGggY29kZSBuYXZpZ2F0aW9uIOKAkyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMgd2hlcmUgYG1lbWFsbG9jX3Bpbl9zYXZlYCBpcyBjYWxsZWQuIFRoYXQgY2FsbCBncmFwaCBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNTo0MS45MzA5MjQyNDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODgxMjMxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtYWxsb2NfcGluX3NhdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC5oPTE3OTA9ZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTgyNC0jZGVmaW5lIFBGX01FTUFMTE9DX1BJTlxcdFxcdDB4MTAwMDAwMDBcXHQvKiBBbGxvY2F0aW9ucyBjb25zdHJhaW5lZCB0byB6b25lcyB3aGljaCBhbGxvdyBsb25nIHRlcm0gcGlubmluZy5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTgyNTpcXHRcXHRcXHRcXHRcXHRcXHQgKiBTZWUgbWVtYWxsb2NfcGluX3NhdmUoKSAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xODI2LSNkZWZpbmUgUEZfQkxPQ0tfVFNcXHRcXHQweDIwMDAwMDAwXFx0LyogcGx1ZyBoYXMgdHMgdGhhdCBuZWVkcyB1cGRhdGluZyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ0MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ0NS0vKipcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDQ2OiAqIG1lbWFsbG9jX3Bpbl9zYXZlIC0gTWFya3MgaW1wbGljaXQgfl9fR0ZQX01PVkFCTEUgc2NvcGUuXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ0Ny0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ1NC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDU1OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1lbWFsbG9jX3Bpbl9zYXZlKHZvaWQpXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ1Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDYzLSAqXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ2NDogKiBFbmRzIHRoZSBpbXBsaWNpdCB+X19HRlBfTU9WQUJMRSBzY29wZSBzdGFydGVkIGJ5IG1lbWFsbG9jX3Bpbl9zYXZlIGZ1bmN0aW9uLlxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NjUtICogQWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBmbGFncyBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHBhaXJpbmdcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDY2OiAqIG1lbWFsbG9jX3Bpbl9zYXZlIGNhbGwuXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ2Ny0gKi9cXG4tLVxcbm1tL2d1cC5jPTI0NjA9c3RhdGljIGxvbmcgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vZ3VwLmMtMjQ3My1cXG5tbS9ndXAuYzoyNDc0OlxcdGZsYWdzID0gbWVtYWxsb2NfcGluX3NhdmUoKTtcXG5tbS9ndXAuYy0yNDc1LVxcdGRvIHtcXG4tLVxcbm1tL2d1cC5jPTM0MzY9bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxubW0vZ3VwLmMtMzQ2NC1cXG5tbS9ndXAuYzozNDY1OlxcdGZsYWdzID0gbWVtYWxsb2NfcGluX3NhdmUoKTtcXG5tbS9ndXAuYy0zNDY2LVxcdGRvIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6NDMuNTE5MDU2NDk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2ODg2MDY4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIERldGVybWluYXRpb246IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgRm9jdXNTeW1ib2xzIGxpc3QsIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbiBpcyBpbiB0aGlzIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiAgVGhlIGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzaywgaXMgdGhpcyBhIFwiZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yXCIgd2Ugc2hvdWxkIGF2b2lkIGxpc3Rpbmc/ICBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIGhlcmUuIGBrbWFsbG9jX25vcHJvZmAsIGBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZmAsIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAsIGBhbGxvY19wYWdlc2Ag4oCTIHRob3NlIGFyZSB0aGUgZ2VuZXJpYyBhbGxvY2F0b3JzIHRoYXQgKmV2ZXJ5KiBzeXNjYWxsIHRvdWNoZXMuIFRoZXnigJlyZSBjYWxsZWQgb24gYWxtb3N0IGV2ZXJ5IHNpbmdsZSBvcGVuLCByZWFkLCB3cml0ZSwgc29ja2V0LCBmb3JrLCBleGVjLCBldGMuXG5cbkJ1dCBkb2VzIGV2ZXJ5IHByb2dyYW0gY2FsbCBgYWxsb2NfcGFnZXNfYnVsa2A/IE5vLCB0aGF04oCZcyB0aGUgY3JpdGljYWwgZGlzdGluY3Rpb24uIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgKm5vdCogdWJpcXVpdG91cyBpbiB0aGUgd2F5IHRob3NlIG90aGVyIGZ1bmN0aW9ucyBhcmUuIEl0J3MgdXNlZCBmb3IgYnVsayBwYWdlIGFsbG9jYXRpb25zLiBJIGtub3cgdGhhdCBgdm1hbGxvY2AgaXMgY2FsbGVkIGZhciBsZXNzIGZyZXF1ZW50bHkgYW5kIGlzIG9ubHkgdXNlZCBmb3IgdmVyeSBsYXJnZSBhbGxvY2F0aW9ucywgbGlrZSBicGYgcHJvZyBhbGxvYywgY2VydGFpbiBtb2R1bGVzLCBsYXJnZSBpb2N0bCBidWZmZXJzLCBldGMuICBNb3N0IHN5c2NhbGxzIGRvbid0IGNhbGwgYHZtYWxsb2NgLiBJdCBpcyB0aGUgc2FtZSB3aXRoIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuXG5cbk5vdywgZG9lcyBzeXprYWxsZXIgaGl0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gbW9zdCBwcm9ncmFtcz8gTm8uIEl0J3Mgb25seSB1dGlsaXplZCBpbiBwYXJ0aWN1bGFyIHN1YnN5c3RlbXMgYW5kIGZlYXR1cmVzLiBJIHNlZSBpdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50ZWQgYnkgZnVuY3Rpb25zIGxpa2U6XG4qICAgYHZtYWxsb2NgIChmb3Igdm1hbGxvYyBtZW1vcnkpXG4qICAgcGFnZSBwb29sIChpbiBuZXR3b3JrIGRyaXZlcnMpXG4qICAgYnRyZnMgKGBidHJmc19hbGxvY19wYWdlX2FycmF5YClcbiogICBzcGxpY2UgKGBjb3B5X3NwbGljZV9yZWFkYClcbiogICBmdXNlIChgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZmApXG4qICAgYnBmIGFyZW5hIChgYXJlbmFfYWxsb2NfcGFnZXNgKVxuKiAgIGlvX3VyaW5nIChgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYClcbiogICBzdmNfZmlsbF9wYWdlcyAoc3VucnBjKVxuXG5UaGUgY2hhbmdlIGlzIGRpcmVjdGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUgcHJvbXB0IHNheXM6IFwiTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkXCIuIFRoYXQncyBleGFjdGx5IHdoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBkb2VzIGluIHRoaXMgZGlmZi4gVGhlIGluc3RydWN0aW9uJ3MgY2F1dGlvbiBhYm91dCB1YmlxdWl0b3VzIGFsbG9jYXRvcnMgZG9lc24ndCBhcHBseSBiZWNhdXNlIHRoaXMgaXNuJ3QgYSAqZ2VuZXJhbCogbWVtb3J5IGFsbG9jYXRvciBsaWtlIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgb3IgYGttYWxsb2NgLlxuXG5UaGUgcXVlc3Rpb24gYmVjb21lcywgaXMgaXQgYSAqZGlyZWN0KiBlbnRyeXBvaW50IG9mIHRoZSBtb2RpZmllZCBsb2dpYz8gWWVzLCBpdCdzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB3aGVyZSB0aGUgY2hhbmdlIHJlc2lkZXMuIENvbnNpZGVyaW5nIHRoZSBleHBsaWNpdCBjaGFuZ2UgaXMgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAsIGl0J3MgYSBub24taW5saW5lLCBleHBvcnRlZCBzeW1ib2wgYW5kIGEgZGlyZWN0IGVudHJ5cG9pbnQuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgYXJvdW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0byBjaGVjayBmb3IgYW55IENPTkZJRyBvcHRpb25zIG9yIGd1YXJkcyB0aGF0IG1pZ2h0IGFmZmVjdCBpdHMgaW5jbHVzaW9uLiBHaXZlbiB0aGUgZXZpZGVuY2UsIEkgY29uY2x1ZGUgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgICppcyogYSByZWxldmFudCBhbmQgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUxOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6NTMuMjA3NjY2NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTUwOlxcdCAqIE5vdGUgdGhhdCBvbmx5IHRoZSBlbGVtZW50cyBpbiBAcGFnZV9hcnJheSB0aGF0IHdlcmUgY2xlYXJlZCB0byAlTlVMTCBvblxcbjUxNTE6XFx0ICogZW50cnkgYXJlIHBvcHVsYXRlZCB3aXRoIG5ld2x5IGFsbG9jYXRlZCBwYWdlcy4gQG5yX3BhZ2VzIGlzIHRoZSBtYXhpbXVtXFxuNTE1MjpcXHQgKiBudW1iZXIgb2YgcGFnZXMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgYXJyYXkuXFxuNTE1MzpcXHQgKlxcbjUxNTQ6XFx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIEBwYWdlX2FycmF5LCBpbmNsdWRpbmcgb25lcyBhbHJlYWR5XFxuNTE1NTpcXHQgKiBhbGxvY2F0ZWQgb24gZW50cnkuICBUaGlzIGNhbiBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQgaW4gQG5yX3BhZ2VzLFxcbjUxNTY6XFx0ICogYnV0IGFsbCBlbXB0eSBzbG90cyBhcmUgZmlsbGVkIGZyb20gdGhlIGJlZ2lubmluZy4gIEkuZS4sIGlmIGFsbCBzbG90cyBpblxcbjUxNTc6XFx0ICogQHBhZ2VfYXJyYXkgd2VyZSBzZXQgdG8gJU5VTEwgb24gZW50cnksIHRoZSBzbG90cyBmcm9tIDAgdG8gdGhlIHJldHVybiB2YWx1ZVxcbjUxNTg6XFx0ICogLSAxIHdpbGwgYmUgZmlsbGVkLlxcbjUxNTk6XFx0ICovXFxuNTE2MDpcXHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuNTE2MTpcXHRcXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbjUxNjI6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbjUxNjM6XFx0e1xcbjUxNjQ6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNTE2NTpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG41MTY2OlxcdFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbjUxNjc6XFx0XFx0c3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDtcXG41MTY4OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnBjcF9saXN0O1xcbjUxNjk6XFx0XFx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWM7XFxuNTE3MDpcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19XTUFSS19MT1c7XFxuNTE3MTpcXHRcXHRpbnQgbnJfcG9wdWxhdGVkID0gMCwgbnJfYWNjb3VudCA9IDA7XFxuNTE3MjpcXHRcXG41MTczOlxcdFxcdC8qXFxuNTE3NDpcXHRcXHQgKiBTa2lwIHBvcHVsYXRlZCBhcnJheSBlbGVtZW50cyB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2VzIG5lZWRcXG41MTc1OlxcdFxcdCAqIHRvIGJlIGFsbG9jYXRlZCBiZWZvcmUgZGlzYWJsaW5nIElSUXMuXFxuNTE3NjpcXHRcXHQgKi9cXG41MTc3OlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcyBcXHUwMDI2XFx1MDAyNiBwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pXFxuNTE3ODpcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MTc5OlxcdFxcbjUxODA6XFx0XFx0LyogTm8gcGFnZXMgcmVxdWVzdGVkPyAqL1xcbjUxODE6XFx0XFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIFxcdTAwM2M9IDApKVxcbjUxODI6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTE4MzpcXHRcXG41MTg0OlxcdFxcdC8qIEFscmVhZHkgcG9wdWxhdGVkIGFycmF5PyAqL1xcbjUxODU6XFx0XFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkID09IDApKVxcbjUxODY6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTE4NzpcXHRcXG41MTg4OlxcdFxcdC8qIEJ1bGsgYWxsb2NhdG9yIGRvZXMgbm90IHN1cHBvcnQgbWVtY2cgYWNjb3VudGluZy4gKi9cXG41MTg5OlxcdFxcdGlmIChtZW1jZ19rbWVtX29ubGluZSgpIFxcdTAwMjZcXHUwMDI2IChnZnAgXFx1MDAyNiBfX0dGUF9BQ0NPVU5UKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6NTMuMjA4Mjk5MDIxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NzA3MTAyNjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGRvZXNuJ3QgaGF2ZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGFzaWRlIGZyb20gdGhlIG9wdGlvbmFsIGBDT05GSUdfUEFHRV9PV05FUmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGlzIGEgcnVudGltZSBjaGVjayB2aWEgYHBhZ2Vfb3duZXJfaW5pdGVkYCBmb3IgdGhlIGBwYWdlX293bmVyPW9uYCBib290IHBhcmFtZXRlciBhbmQgZG9lc24ndCBhZmZlY3QgdGhlIGNvbXBpbGF0aW9uIG9yIGdlbmVyYWwgYXZhaWxhYmlsaXR5IG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGUgY29kZSBpcyBhbHdheXMgcHJlc2VudCBpbiB0aGUga2VybmVsIGltYWdlLiBJIHJlYWxpemUgdGhlIGBDT05GSUdfUEFHRV9PV05FUmAgY2hlY2sgZWFybHkgcmV0dXJucyBpZiBlbmFibGVkIGFuZCB0aGUgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBza2lwcGluZyB0aGUgYnVsayBhbGxvY2F0aW9uLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4gaXQncyBub3QgcHJlc2VudC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGZ1enppbmcgaXMgd2FycmFudGVkLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRvIHJlLWV2YWx1YXRlIHRoZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZ2AuIFRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBJIGtub3cgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIEknbSBmb2N1c2luZyBvbiBpdHMgR0ZQIGZsYWdzIGFuZCB0aGUgY3VycmVudCB0YXNrJ3MgYWxsb2NhdGlvbiBjb250ZXh0IHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBjaGFuZ2UgY291bGQgaW50cm9kdWNlIGlzc3VlcyByZWxhdGVkIHRvIHJlZ3Jlc3Npb25zLCBsb2NrZGVwIG9yIGZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgaW52YXJpYW50IGlzc3VlcyB3aGVuIGNvbnN0cmFpbmVkIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkLlxuXG5JIGltbWVkaWF0ZWx5IHJ1bGUgb3V0IGFsbCB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYVwiIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBub3QgZG9jdW1lbnRhdGlvbiwgYnVpbGQgc3lzdGVtIGNoYW5nZSwgb3IgaGFyZHdhcmUtc3BlY2lmaWMgY29kZS4gSXQncyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBpcyB1c2VkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIG9wZXJhdGlvbnMgKHNwbGljZSwgYnRyZnMsIHZtYWxsb2MsIGV0Yy4pLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGJhc2VkIG9uIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYHRydWVgLlxuXG5Ob3csIHJlZ2FyZGluZyBgRm9jdXNTeW1ib2xzYCwgSSBoYXZlIHRvIGJlIHByZWNpc2UuIEFsdGhvdWdoIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggb3RoZXIgZW50cnkgcG9pbnRzIGNhbGwgdGhpcyBhbmQgd2hldGhlciBmdXp6aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaGFzIGJyb2FkIGltcGxpY2F0aW9ucy4gSSByZWFsaXplIGl0J3Mgbm90IGFzIHViaXF1aXRvdXMgYXMgb3RoZXIgbW0gZnVuY3Rpb25zIGxpa2UgYGtmcmVlYCBvciBgX19hbGxvY19wYWdlc19ub3Byb2ZgLlxuXG5gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGNhbGxlZCBieSBhIHJlbGF0aXZlbHkgbGltaXRlZCBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgdGhhdCBpdCBpcyBOT1QgY2FsbGVkIGJ5IG5lYXJseSBldmVyeSBzeXNjYWxsLCBJJ2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbiBpdHNlbGYgYW5kIGl0cyBkaXJlY3QgY2FsbHMuIEkgZGV0ZXJtaW5lIHRoYXQgdGhlIG1vc3QgaW1wb3J0YW50IEZvY3VzU3ltYm9scyBzaG91bGQgYmUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoZXNlIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjb2RlIGNoYW5nZXMgYW5kIGFyZSBzcGVjaWZpYyB0byBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuXG5cblNpbmNlIEkgaGF2ZW4ndCBpZGVudGlmaWVkIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucywgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdC5cblxuVGhlIHJlYXNvbmluZyBpcyB0aGVyZWZvcmU6XG5cblRoZSBwYXRjaCBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIGludGVncmF0ZSBHRlAgZmxhZ3MgdGhhdCBtYXRjaCB0aGUgY3VycmVudCB0YXNrJ3MgYWxsb2NhdGlvbiBjb250ZXh0IHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBmdW5jdGlvbiBmYWxscyB1bmRlciB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGRpc2NvdmVyIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgaW52YXJpYW50IGlzc3VlcyB3aGVuIHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIChzdWNoIGFzIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgYXJlIGFwcGxpZWQuIEkgYW0gbGlzdGluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhcyB0aGUgYEZvY3VzU3ltYm9sc2AuIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGxpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTA2LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNjowNy45MTU0MDY3NzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBhcHBseSBjdXJyZW50X2dmcF9jb250ZXh0KCkgdG8gdGhlIEdGUCBmbGFncywgZW5mb3JjaW5nIHNjb3BlZCBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoZS5nLiwgUEZfTUVNQUxMT0NfTk9GUywgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfUElOKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm0gYnVsayBwYWdlIGFsbG9jYXRpb24gKHN1Y2ggYXMgY29weV9zcGxpY2VfcmVhZCwgYnRyZnMgcGFnZSBhbGxvY2F0aW9uLCBvciB2bWFsbG9jKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgYWxsb2NhdGlvbiBhbm9tYWxpZXMgYXJlIHRyaWdnZXJlZCB1bmRlciBjb25zdHJhaW5lZCBjb250ZXh0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gYXBwbHkgY3VycmVudF9nZnBfY29udGV4dCgpIHRvIHRoZSBHRlAgZmxhZ3MsIGVuZm9yY2luZyBzY29wZWQgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMgKGUuZy4sIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX1BJTikuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG9wZXJhdGlvbnMgdGhhdCBwZXJmb3JtIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIChzdWNoIGFzIGNvcHlfc3BsaWNlX3JlYWQsIGJ0cmZzIHBhZ2UgYWxsb2NhdGlvbiwgb3Igdm1hbGxvYykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbG9ja2RlcC9mc19yZWNsYWltIHZpb2xhdGlvbnMsIG9yIGFsbG9jYXRpb24gYW5vbWFsaWVzIGFyZSB0cmlnZ2VyZWQgdW5kZXIgY29uc3RyYWluZWQgY29udGV4dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjA3LjkxNTQ0NzY0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNDE3NzgxNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNjowNy45MTU5MjA5NDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODM0MTMwMDUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cXG5cXG5UaGlzIGNoYW5nZSBtYW5pcHVsYXRlcyBHRlAgYWxsb2NhdGlvbiBmbGFnIGJpdHMgb24gYSBzY2FsYXIgYGdmcF90YCB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGhlYXAvc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBwcmV2ZW50ZWQgb3IgaW5mbHVlbmNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gZmlsZXN5c3RlbS9JTyByZWNsYWltIHJlY3Vyc2lvbiBhbmQgbG9ja2luZyBkZWFkbG9ja3MgKHdoaWNoIGFyZSB0cmFja2VkIGJ5IExPQ0tERVApLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDFmZDRkYjI0N2I3OTBjYmRhNzVlYzRhY2QzNTU1N2Q2MTA5MjM3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDAzOjE0OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01MjA3LDYgKzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbitcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbiBcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTY6MDcuOTE1OTIxOTc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MTUwNDY3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2ltcGxlIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX2FsbG9jLmNgLiBJdCdzIGluY3JlZGlibHkgc3RyYWlnaHRmb3J3YXJkLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0J3MgYWRkcmVzc2luZyBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYyBvciBhIHNtYWxsLCB0YXJnZXRlZCBvcHRpbWl6YXRpb24uIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGxpbmUgYWRkZWQ6IGBnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7YCByaWdodCBhZnRlciB0aGUgYGdmcGAgZmxhZyBpcyBtYXNrZWQgYW5kIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBwcmVwYXJhdGlvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgY3VycmVudF9nZnBfY29udGV4dCgpYCBkb2VzLCBidXQgSSBhbHJlYWR5IGhhdmUgYW4gaWRlYS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBpcyByZWxhdGVkIHRvIHBvdGVudGlhbGx5IG1vZGlmeWluZyB0aGUgYGdmcGAgZmxhZ3MgYmFzZWQgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGFsbG9jYXRpb24gaXMgaGFwcGVuaW5nLiBUaGUgY29tbWVudCBkaXJlY3RseSBhYm92ZSB0aGlzIGxpbmUgbWVudGlvbnMgdGhhdCBgQUxMT0NfTk9GUkFHTUVOVGAgY2FuIGJlIHNldCwgaGludGluZyBhdCBmcmFnbWVudGF0aW9uIGNvbmNlcm5zLiBUaGUgcHJlc2VuY2Ugb2YgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgdGhlIGdpdmVuIGBnZnBgIGZsYWdzIHRvIGJlc3Qgb3B0aW1pemUgZm9yIHRoZSBjdXJyZW50IHRhc2sncyBuZWVkcy4gSSBzaG91bGQgcmV2aWV3IHRoYXQgZnVuY3Rpb24uXG5cblRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgKmJlZm9yZSogdGhlIGFsbG9jYXRpb24gcHJlcGFyYXRpb24uIFRoaXMgbWFrZXMgbWUgc3VzcGVjdCB0aGUgbW9kaWZpY2F0aW9uIG9mIGBnZnBgIGlzIGludGVuZGVkIHRvIGluZmx1ZW5jZSBob3cgdGhlIGFsbG9jYXRpb24gaXMgKnNldCB1cCogYnkgYHByZXBhcmVfYWxsb2NfcGFnZXMoKWAuIFBlcmhhcHMgdGhlIGNvbnRleHQgaGVscHMgZGVjaWRlIG9uIG5vZGUgc2VsZWN0aW9uIG9yIG90aGVyIHR1bmluZyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gYXR0ZW1wdHMgZXZlbiBiZWdpbi4gR2l2ZW4gd2hlcmUgaXQgaXMsIGl0J3Mgbm90IGxpa2VseSB0byBiZSBzb21ldGhpbmcgdGhhdCBkeW5hbWljYWxseSBjaGFuZ2VzICpkdXJpbmcqIGFsbG9jYXRpb247IHRoZSBhbGxvY2F0aW9uIGF0dGVtcHQgZWl0aGVyIGdldHMgc3RhcnRlZCwgYW5kIHRoZW4gYXR0ZW1wdHMgaGFwcGVuLCBvciB3ZSBmYWlsIGVhcmx5LiBJJ20gZ3Vlc3NpbmcgdGhlIGNvbnRleHQgZnVuY3Rpb24gaXMgY2hhbmdpbmcsIGZvciBpbnN0YW5jZSwgd2hldGhlciB0aGUgYWxsb2NhdGlvbiBzaG91bGQgYWxsb3cgZnJhZ21lbnRhdGlvbiBvciBub3QgYmFzZWQgb24gdGhlIHByb2Nlc3MgdHlwZS5cblxuT3ZlcmFsbCwgaXQncyBhIG1pbm9yIGNoYW5nZSwgYnV0IGl0IGNvdWxkIGhhdmUgYSBub3RpY2VhYmxlIGltcGFjdCBpZiB0aGUgY29udGV4dCBpcyBzaWduaWZpY2FudGx5IGluZmx1ZW5jaW5nIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGludG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCB3b3Jrcy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGF0IGZsYWcgZ2V0cyBzZXQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgdGhlbiBkZXRlcm1pbmUgaG93IHRoaXMgY2hhbmdlIGlzIGdvaW5nIHRvIGltcGFjdCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjEzLjUzMDk3Mjc0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzQxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxOTU6XFx0XFxuNTE5NjpcXHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG41MTk3OlxcdFxcdC8qXFxuNTE5ODpcXHRcXHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xcbjUxOTk6XFx0XFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xcbjUyMDA6XFx0XFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xcbjUyMDE6XFx0XFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQnbGwgaGF2ZVxcbjUyMDI6XFx0XFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cXG41MjAzOlxcdFxcdCAqL1xcbjUyMDQ6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG41MjA1OlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMDY6XFx0I2VuZGlmXFxuNTIwNzpcXHRcXG41MjA4OlxcdFxcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXFxuNTIwOTpcXHRcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG41MjEwOlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG41MjExOlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuNTIxMjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjEzOlxcdFxcbjUyMTQ6XFx0XFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cXG41MjE1OlxcdFxcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcXG41MjE2OlxcdFxcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xcbjUyMTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrO1xcbjUyMTg6XFx0XFxuNTIxOTpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjA6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xcbjUyMjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTIyMjpcXHRcXHRcXHR9XFxuNTIyMzpcXHRcXG41MjI0OlxcdFxcdFxcdGlmIChucl9vbmxpbmVfbm9kZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXFx1MDAyNlxcdTAwMjZcXG41MjI1OlxcdFxcdFxcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcXG41MjI2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMjc6XFx0XFx0XFx0fVxcbjUyMjg6XFx0XFxuNTIyOTpcXHRcXHRcXHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xcbjUyMzA6XFx0cmV0cnlfdGhpc196b25lOlxcbjUyMzE6XFx0XFx0XFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgKyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcXG41MjMyOlxcdFxcdFxcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxcbjUyMzM6XFx0XFx0XFx0XFx0XFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxcbjUyMzQ6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcXG41MjM1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUyMzY6XFx0XFx0XFx0fVxcbjUyMzc6XFx0XFxuNTIzODpcXHRcXHRcXHRpZiAoY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKSlcXG41MjM5OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnlfdGhpc196b25lO1xcbjUyNDA6XFx0XFxuNTI0MTpcXHRcXHRcXHQvKiBUcnkgYWdhaW4gaWYgem9uZSBoYXMgZGVmZXJyZWQgcGFnZXMgKi9cXG41MjQyOlxcdFxcdFxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcXG41MjQzOlxcdFxcdFxcdFxcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIDApKVxcbjUyNDQ6XFx0XFx0XFx0XFx0XFx0Z290byByZXRyeV90aGlzX3pvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjEzLjUzMTI1MDMzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDAxODU3MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBjdXJyZW50X2dmcF9jb250ZXh0YCBhbmQgaXRzIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgY3VycmVudF9nZnBfY29udGV4dGAuIEknbSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgaW50byBpdHMgZGVmaW5pdGlvbiBhbmQgd2hhdCBpdCBhY3R1YWxseSAqZG9lcyogYXQgdGhlIGxvd2VzdCBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIGlzIGtleS4gQWZ0ZXIgdGhhdCwgSSdsbCBuZWVkIHRvIHNlZSBob3cgb3RoZXIgYWxsb2NhdG9ycywgYm90aCB3aXRoaW4gdGhlIGV4aXN0aW5nIHN5c3RlbSBhbmQgcGVyaGFwcyBldmVuIHNvbWUgZXh0ZXJuYWwgb25lcyBJJ20gZmFtaWxpYXIgd2l0aCwgbGV2ZXJhZ2UgdGhpcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSBpbnRlZ3JhdGUgaXQgaW50byB0aGVpciBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgb3IgZGVzaWduIHBhdHRlcm5zIGJlaW5nIHVzZWQuIFRoZSBnb2FsIGlzIHRvIGdhaW4gYSBzdHJvbmcgdW5kZXJzdGFuZGluZyBvZiBiZXN0IHByYWN0aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTY6MTUuNTMzMTEwOTYzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMyNzQ3OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF9nZnBfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MTQ1PXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjE0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDIxNTpcXHRcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykgXFx1MDAyNlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDIxNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRHRlBfUkVDTEFJTV9NQVNLKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zNzUyPWFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTM3ODQtXFxubW0vcGFnZV9hbGxvYy5jOjM3ODU6LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cXG5tbS9wYWdlX2FsbG9jLmMtMzc4Ni1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDM4Mz12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcXG5tbS9wYWdlX2FsbG9jLmMtNDM4NC17XFxubW0vcGFnZV9hbGxvYy5jOjQzODU6XFx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNDM4Ni1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDAwPXZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKVxcbm1tL3BhZ2VfYWxsb2MuYy00NDAxLXtcXG5tbS9wYWdlX2FsbG9jLmM6NDQwMjpcXHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy00NDAzLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUyMDktXFx0Z2ZwIFxcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XFxubW0vcGFnZV9hbGxvYy5jOjUyMTA6XFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01MjExLVxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM4ND1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU0MTktXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjU0MjA6XFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDIxLVxcdGFsbG9jX2dmcCA9IGdmcDtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03Mjg0PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MzEyLVxcbm1tL3BhZ2VfYWxsb2MuYzo3MzEzOlxcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTczMTQtXFx0aWYgKF9fYWxsb2NfY29udGlnX3ZlcmlmeV9nZnBfbWFzayhnZnBfbWFzaywgKGdmcF90ICopXFx1MDAyNmNjLmdmcF9tYXNrKSlcXG4tLVxcbm1tL3BlcmNwdS5jPTE3MzU9dm9pZCBfX3BlcmNwdSAqcGNwdV9hbGxvY19ub3Byb2Yoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCxcXG4tLVxcbm1tL3BlcmNwdS5jLTE3NDktXFxubW0vcGVyY3B1LmM6MTc1MDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGVyY3B1LmMtMTc1MS1cXHQvKlxcbi0tXFxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NzQtXFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBTV0FQX0NMVVNURVJfTUFYLFxcbm1tL3Ztc2Nhbi5jOjY3NzU6XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtNjc3Ni1cXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxuLS1cXG5tbS92bXNjYW4uYz02ODU1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODY1LVxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmM6Njg2NjpcXHRcXHQuZ2ZwX21hc2sgPSAoY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzaykgXFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKSB8XFxubW0vdm1zY2FuLmMtNjg2Ny1cXHRcXHRcXHRcXHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXFx1MDAyNiB+R0ZQX1JFQ0xBSU1fTUFTSyksXFxuLS1cXG5tbS92bXNjYW4uYz03ODc2PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03ODgyLVxcdFxcdC5ucl90b19yZWNsYWltID0gbWF4KG5yX3BhZ2VzLCBTV0FQX0NMVVNURVJfTUFYKSxcXG5tbS92bXNjYW4uYzo3ODgzOlxcdFxcdC5nZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spLFxcbm1tL3Ztc2Nhbi5jLTc4ODQtXFx0XFx0Lm9yZGVyID0gb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYz03OTU4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMzUtXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcXG5tbS92bXNjYW4uYzo4MDM2OlxcdFxcdFxcdFxcdC5nZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spLFxcbm1tL3Ztc2Nhbi5jLTgwMzctXFx0XFx0XFx0XFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNjoxNS44MTYzOTMxODVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzUyODk1Nzc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgY3VycmVudF9nZnBfY29udGV4dGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMuIE15IGltbWVkaWF0ZSBpbXB1bHNlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLiBJIG5lZWQgdG8gc3RhcnQgd2l0aCB0aGUgZnVuZGFtZW50YWwgZGVmaW5pdGlvbi4gSeKAmW0gdGhpbmtpbmcsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSBrbm93IGNvbnRleHQgaXMgKmNyaXRpY2FsKi4gVGhpcyBpcyAqdGhlKiBwbGFjZSB0byBzdGFydC4gV2hhdCBkb2VzIHRoaXMgdGVybSBhY3R1YWxseSAqbWVhbiogaW4gdGhpcyBzcGVjaWZpYyBzZXR0aW5nPyBXaGF0IGlzIGl0IGludGVuZGVkIHRvIHJlcHJlc2VudD8gSXMgaXQgYSBjbGFzcywgYSB2YXJpYWJsZSwgYSBmdW5jdGlvbiwgYSBtb2R1bGUuLi4gdGhpcyBpcyBrZXkuIEtub3dpbmcgdGhlIGRhdGEgdHlwZS9zdHJ1Y3R1cmUsIGhvdyBpdCdzIHVzZWQsIGhvdyBpdCdzIGRlZmluZWQsIHdpbGwgYmUgdGhlIGJhc2lzIGZvciBldmVyeXRoaW5nIGVsc2UuIEknbGwgbmVlZCB0byBrbm93LiBXaGVyZSBpcyB0aGlzIGRlZmluZWQ/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBsb29raW5nIGZvciBhbiBhY3R1YWwgY29kZSBkZWZpbml0aW9uIG9yIGRvY3VtZW50YXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHJvbGUuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjc3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTY6MjMuMzQ1MzUyOTU2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5ODk5NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl92Zm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDctICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI0ODpzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjI0LjkxNTI2MTUyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY5NTE0MzQ2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IERldGFpbHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIG1vcmUgZGVlcGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgYXJvdW5kIGxpbmUgMjQ4LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gcHJvY2VzcyBtZW1vcnkgbWFuYWdlbWVudCB0aGVyZSwgb3IgYXQgbGVhc3QgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbiB0aGF0IHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgbXkgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhcmVhLCBzbyBsZXQncyBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTYzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjMxLjg2NjY5OTE1NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0LypcXG4gMjQzOlxcdCAqIEFwcGxpZXMgcGVyLXRhc2sgZ2ZwIGNvbnRleHQgdG8gdGhlIGdpdmVuIGFsbG9jYXRpb24gZmxhZ3MuXFxuIDI0NDpcXHQgKiBQRl9NRU1BTExPQ19OT0lPIGltcGxpZXMgR0ZQX05PSU9cXG4gMjQ1OlxcdCAqIFBGX01FTUFMTE9DX05PRlMgaW1wbGllcyBHRlBfTk9GU1xcbiAyNDY6XFx0ICogUEZfTUVNQUxMT0NfUElOICBpbXBsaWVzICFHRlBfTU9WQUJMRVxcbiAyNDc6XFx0ICovXFxuIDI0ODpcXHRzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXFxuIDI0OTpcXHR7XFxuIDI1MDpcXHRcXHR1bnNpZ25lZCBpbnQgcGZsYWdzID0gUkVBRF9PTkNFKGN1cnJlbnQtXFx1MDAzZWZsYWdzKTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0aWYgKHVubGlrZWx5KHBmbGFncyBcXHUwMDI2IChQRl9NRU1BTExPQ19OT0lPIHwgUEZfTUVNQUxMT0NfTk9GUyB8IFBGX01FTUFMTE9DX1BJTikpKSB7XFxuIDI1MzpcXHRcXHRcXHQvKlxcbiAyNTQ6XFx0XFx0XFx0ICogTk9JTyBpbXBsaWVzIGJvdGggTk9JTyBhbmQgTk9GUyBhbmQgaXQgaXMgYSB3ZWFrZXIgY29udGV4dFxcbiAyNTU6XFx0XFx0XFx0ICogc28gYWx3YXlzIG1ha2Ugc3VyZSBpdCBtYWtlcyBwcmVjZWRlbmNlXFxuIDI1NjpcXHRcXHRcXHQgKi9cXG4gMjU3OlxcdFxcdFxcdGlmIChwZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQ19OT0lPKVxcbiAyNTg6XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKTtcXG4gMjU5OlxcdFxcdFxcdGVsc2UgaWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX05PRlMpXFxuIDI2MDpcXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+X19HRlBfRlM7XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdFxcdGlmIChwZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQ19QSU4pXFxuIDI2MzpcXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcXG4gMjY0OlxcdFxcdH1cXG4gMjY1OlxcdFxcdHJldHVybiBmbGFncztcXG4gMjY2OlxcdH1cXG4gMjY3OlxcdFxcbiAyNjg6XFx0I2lmZGVmIENPTkZJR19MT0NLREVQXFxuIDI2OTpcXHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKTtcXG4gMjcwOlxcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApO1xcbiAyNzE6XFx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKTtcXG4gMjcyOlxcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzayk7XFxuIDI3MzpcXHQjZWxzZVxcbiAyNzQ6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxcbiAyNzU6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxcbiAyNzY6XFx0c3RhdGljIGlubGluZSB2b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaykgeyB9XFxuIDI3NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKSB7IH1cXG4gMjc4OlxcdCNlbmRpZlxcbiAyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjMxLjg2Njc4Mzk5NloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDM5MDM5ODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSBicmVha2Rvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgbWlzc2luZyBhIGNydWNpYWwgY2FsbCB0byBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgbWFza2luZyBvdXQgY2VydGFpbiBHRlAgZmxhZ3MsIHNwZWNpZmljYWxseSBgX19HRlBfSU9gLCBgX19HRlBfRlNgLCBhbmQgYF9fR0ZQX01PVkFCTEVgLCBiYXNlZCBvbiB0aGUgY3VycmVudCB0YXNrJ3MgZmxhZ3MuIFRoaW5rIG9mIGZ1bmN0aW9ucyBsaWtlIGBtZW1hbGxvY19ub2lvX3NhdmUoKWAgYW5kIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAg4oCTIHRoZXkgc2V0IHRoZXNlIGZsYWdzLlxuXG5UaGUgcHJvYmxlbT8gV2l0aG91dCB0aGF0IGBjdXJyZW50X2dmcF9jb250ZXh0YCBjYWxsLCBpZiBjb2RlIHJ1bm5pbmcgdW5kZXIgYFBGX01FTUFMTE9DX05PRlNgIG9yIGBQRl9NRU1BTExPQ19OT0lPYCBjYWxsZWQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgdGhlIEdGUCBtYXNrIGNvdWxkIHN0aWxsIGhhdmUgYF9fR0ZQX0ZTYCBvciBgX19HRlBfSU9gIGVuYWJsZWQuIFRoaXMgb3BlbnMgdGhlIGRvb3IgdG8gcG90ZW50aWFsIGxvY2tkZXAgd2FybmluZ3Mgb3IgZXZlbiBkZWFkbG9ja3MsIGVzcGVjaWFsbHkgaWYgZmlsZXN5c3RlbSBvciBJTyByZWNsYWltIGlzIHRyaWdnZXJlZCByZWN1cnNpdmVseS4gVGhhdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVlIHRvIGluY29ycmVjdCBHRlAgZmxhZyBwcm9wYWdhdGlvbi5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGEgZGVmaW5pdGl2ZSBcIm5vLlwiIExldCdzIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZzpcblxuMS4gIGBnZnBgIGlzIGp1c3QgYSBzaW1wbGUgcHJpbWl0aXZlIOKAkyBhbiBgdW5zaWduZWQgaW50YCBvciBgZ2ZwX3RgLiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBoZXJlLlxuMi4gIGBjdXJyZW50X2dmcF9jb250ZXh0YCAqb25seSogY2xlYXJzIGZsYWdzIGJhc2VkIG9uIGBjdXJyZW50LVx1MDAzZWZsYWdzYC4gSXQgZG9lc24ndCBtb2RpZnkgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGBnZnBgIGluIGFueSB3YXksIHNoYXBlIG9yIGZvcm0uXG4zLiAgVGhlIHBhdGNoIGRvZXNuJ3QgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lc24ndCBjb3B5IGFueXRoaW5nIHRvIHVzZXJzcGFjZSwgZG9lc24ndCBhbGxvY2F0ZSBtZW1vcnkgd2l0aG91dCB6ZXJvaW5nLCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IGlzc3VlcyB3aXRoIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgYnVmZmVyIGJvdW5kcy4gRXZlcnl0aGluZyBpcyBiZWluZyBpbml0aWFsaXplZCBhcyBpdCBzaG91bGQuXG40LiAgSWYgdGhlcmUgYXJlIGFueSBkZWFkbG9ja3Mgb3IgcmVjbGFpbSBpc3N1ZXMsIHRob3NlIGFyZSBzdHJpY3RseSBsb2NraW5nIG9yIHJlY2xhaW0gYnVncywgd2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeSBoZXJlLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG5lZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha3MuXG5cbkFuZCB0aGF0IGJyaW5ncyBtZSB0byBhIGNydWNpYWwgcG9pbnQgYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhbHJlYWR5IGluY29ycG9yYXRlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUncyBubyBwb2ludCBpbiBydW5uaW5nIEtNU0FOIGlmIHRoZSBwb3RlbnRpYWwgYnVnIGlzIHNvbWV0aGluZyB0aGF0J3MgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciB0aGUgb3RoZXIgc3RhbmRhcmQgdG9vbHMuIEtNU0FOIGlzIGZvciBjYXRjaGluZyB0aGluZ3MgKm5vdCogY2F1Z2h0IGJ5IEtBU0FOLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGNyaXRlcmlhLiBUbyByZWl0ZXJhdGU6XG5cbiogICBUaGUgY29kZSBjaGFuZ2VzIHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIGFyZSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuIFllcywgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBsb2NraW5nLlxuKiAgIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4gWWVzLCB0aGlzIGlzIGNvcnJlY3QuXG4qICAgVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBDb3JyZWN0LCBhcyBleHBsYWluZWQgYWJvdmUuXG5cblRoZXJlZm9yZSwgaXQgaXMgY2xlYXIgdGhhdCBJIHdpbGwgaW52b2tlIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTjogZmFsc2VgIGFuZCBwcm92aWRlIHRoZSBhYm92ZSByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTMsIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTY6NTYuMjU3MjAxNzQ2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO2AgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLiBUaGlzIGVuc3VyZXMgdGhhdCB0YXNrLWxldmVsIGFsbG9jYXRpb24gcmVzdHJpY3Rpb25zIChzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gc2V0IGJ5IG1lbWFsbG9jIHNjb3BlcykgYXJlIHByb3Blcmx5IHJlc3BlY3RlZCB3aGVuIHBlcmZvcm1pbmcgYnVsayBwYWdlIGFsbG9jYXRpb25zLlxcblxcblRoaXMgY2hhbmdlIG1hbmlwdWxhdGVzIEdGUCBhbGxvY2F0aW9uIGZsYWcgYml0cyBvbiBhIHNjYWxhciBgZ2ZwX3RgIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaGVhcC9zdGFjayBidWZmZXJzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHByZXZlbnRlZCBvciBpbmZsdWVuY2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBmaWxlc3lzdGVtL0lPIHJlY2xhaW0gcmVjdXJzaW9uIGFuZCBsb2NraW5nIGRlYWRsb2NrcyAod2hpY2ggYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO2AgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLiBUaGlzIGVuc3VyZXMgdGhhdCB0YXNrLWxldmVsIGFsbG9jYXRpb24gcmVzdHJpY3Rpb25zIChzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gc2V0IGJ5IG1lbWFsbG9jIHNjb3BlcykgYXJlIHByb3Blcmx5IHJlc3BlY3RlZCB3aGVuIHBlcmZvcm1pbmcgYnVsayBwYWdlIGFsbG9jYXRpb25zLlxcblxcblRoaXMgY2hhbmdlIG1hbmlwdWxhdGVzIEdGUCBhbGxvY2F0aW9uIGZsYWcgYml0cyBvbiBhIHNjYWxhciBgZ2ZwX3RgIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaGVhcC9zdGFjayBidWZmZXJzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHByZXZlbnRlZCBvciBpbmZsdWVuY2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBmaWxlc3lzdGVtL0lPIHJlY2xhaW0gcmVjdXJzaW9uIGFuZCBsb2NraW5nIGRlYWRsb2NrcyAod2hpY2ggYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowclfw6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 02:53:50 +0000 UTC FinishedAt: 2026-09-14 03:16:57 +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": "7b52401510368ef2aaa598b9abd619f66d8c8feb", "config_name": "upstream-apparmor-kasan.config", "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": "7b52401510368ef2aaa598b9abd619f66d8c8feb", "config_name": "upstream-apparmor-kasan.config", "series_id": "e2183235-764c-4e86-b0f3-566e13981cd3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof", "alloc_pages_bulk_mempolicy_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "7b52401510368ef2aaa598b9abd619f66d8c8feb", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuVGhpcyBjaGFuZ2UgbWFuaXB1bGF0ZXMgR0ZQIGFsbG9jYXRpb24gZmxhZyBiaXRzIG9uIGEgc2NhbGFyIGBnZnBfdGAgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcHJldmVudGVkIG9yIGluZmx1ZW5jZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIGZpbGVzeXN0ZW0vSU8gcmVjbGFpbSByZWN1cnNpb24gYW5kIGxvY2tpbmcgZGVhZGxvY2tzICh3aGljaCBhcmUgdHJhY2tlZCBieSBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBhcHBseSBjdXJyZW50X2dmcF9jb250ZXh0KCkgdG8gdGhlIEdGUCBmbGFncywgZW5mb3JjaW5nIHNjb3BlZCBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoZS5nLiwgUEZfTUVNQUxMT0NfTk9GUywgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfUElOKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm0gYnVsayBwYWdlIGFsbG9jYXRpb24gKHN1Y2ggYXMgY29weV9zcGxpY2VfcmVhZCwgYnRyZnMgcGFnZSBhbGxvY2F0aW9uLCBvciB2bWFsbG9jKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgYWxsb2NhdGlvbiBhbm9tYWxpZXMgYXJlIHRyaWdnZXJlZCB1bmRlciBjb25zdHJhaW5lZCBjb250ZXh0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAxZmQ0ZGIyNDdiNzkwY2JkYTc1ZWM0YWNkMzU1NTdkNjEwOTIzN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMzoxNDoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyMDcsNiAmIzQzOzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbiYjNDM7XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG4gXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBhcHBseSBjdXJyZW50X2dmcF9jb250ZXh0KCkgdG8gdGhlIEdGUCBmbGFncywgZW5mb3JjaW5nIHNjb3BlZCBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoZS5nLiwgUEZfTUVNQUxMT0NfTk9GUywgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfUElOKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm0gYnVsayBwYWdlIGFsbG9jYXRpb24gKHN1Y2ggYXMgY29weV9zcGxpY2VfcmVhZCwgYnRyZnMgcGFnZSBhbGxvY2F0aW9uLCBvciB2bWFsbG9jKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgYWxsb2NhdGlvbiBhbm9tYWxpZXMgYXJlIHRyaWdnZXJlZCB1bmRlciBjb25zdHJhaW5lZCBjb250ZXh0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxZmQ0ZGIyNDdiNzkwY2JkYTc1ZWM0YWNkMzU1NTdkNjEwOTIzN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwMzoxNDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01MjA3LDYgJiM0Mzs1MjA3LDcgQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLAogCiAJLyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi8KIAlnZnAgJmFtcDs9IGdmcF9hbGxvd2VkX21hc2s7CiYjNDM7CWdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTsKIAlpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgJmFtcDthYywgJmFtcDtnZnAsICZhbXA7YWxsb2NfZmxhZ3MpKQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODczCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBkaWZmIGZvciBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IHRoaXMgY2hhbmdlIGhhcyBvbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiB0aGV5JiMzOTt2ZSBhZGRlZCBgZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO2AgcmlnaHQgYmVmb3JlIHRoZSBjYWxsIHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYC4gIFRoaXMgbGluZSBpcyBpbnNlcnRlZCB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uCgpNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZXkmIzM5O3JlIHRyeWluZyB0byByZWZpbmUgdGhlIGBnZnBgIGZsYWdzLCBwcm9iYWJseSBiYXNlZCBvbiBzb21lIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIEdpdmVuIHRoZSBuYW1pbmcsIGBjdXJyZW50X2dmcF9jb250ZXh0YCBsaWtlbHkgcmV0cmlldmVzIHNvbWUgcmVsZXZhbnQgY29udGV4dCDigJMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgY3VycmVudCBwcm9jZXNzIG9yIHRhc2sg4oCTIGFuZCB1c2VzIGl0IHRvIHBvdGVudGlhbGx5IG1vZGlmeSB0aGUgYGdmcGAgZmxhZ3MuIFRoaXMgY291bGQgYmUgYWJvdXQgdGhpbmdzIGxpa2UgTlVNQSBhZmZpbml0eSwgb3IgbWVtb3J5IGFsbG9jYXRpb24gcG9saWNpZXMsIG9yIG90aGVyIHN5c3RlbS1sZXZlbCByZXN0cmljdGlvbnMuICBUaGUgdXNlIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YCBzdWdnZXN0cyB0aGV5IGFyZSB0YWtpbmcgaW50byBjb25zaWRlcmF0aW9uIHRoZSBjdXJyZW50IHRhc2smIzM5O3Mgc3RhdGUuCgpJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjdXJyZW50X2dmcF9jb250ZXh0YCBkb2VzIGluIGRldGFpbC4gQSBkZWVwZXIgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBnZnBgIGZsYWdzLCBpcyByZXF1aXJlZCB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGFjdC4gSSBhbHNvIHNob3VsZCBiZSBhd2FyZSB0aGF0IGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBjb3VsZCBiZSBhbHRlcmVkIGJhc2VkIG9uIHRoaXMgbmV3IGBnZnBgIHZhbHVlLiBJcyBpdCBhIHNlY3VyaXR5IGZpeD8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBncmVwcGVyIHNlYXJjaCBmb3IgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIHdpbGwgYmUgbXkgbmV4dCBzdGVwLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTE5NTpcdFxuNTE5NjpcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuNTE5NzpcdFx0LypcbjUxOTg6XHRcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXG41MTk5Olx0XHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXG41MjAwOlx0XHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXG41MjAxOlx0XHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCYjMzk7bGwgaGF2ZVxuNTIwMjpcdFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cbjUyMDM6XHRcdCAqL1xuNTIwNDpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuNTIwNTpcdFx0XHRnb3RvIGZhaWxlZDtcbjUyMDY6XHQjZW5kaWZcbjUyMDc6XHRcbjUyMDg6XHRcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXG41MjA5Olx0XHRnZnAgXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xuNTIxMDpcdFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xuNTIxMTpcdFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbjUyMTI6XHRcdFx0Z290byBvdXQ7XG41MjEzOlx0XG41MjE0Olx0XHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xuNTIxNTpcdFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xuNTIxNjpcdFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XG41MjE3Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWFyaztcbjUyMTg6XHRcbjUyMTk6XHRcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NQVVNFVCkgXHUwMDI2XHUwMDI2XG41MjIwOlx0XHRcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkpIHtcbjUyMjE6XHRcdFx0XHRjb250aW51ZTtcbjUyMjI6XHRcdFx0fVxuNTIyMzpcdFxuNTIyNDpcdFx0XHRpZiAobnJfb25saW5lX25vZGVzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiB6b25lICE9IHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpIFx1MDAyNlx1MDAyNlxuNTIyNTpcdFx0XHQgICAgem9uZV90b19uaWQoem9uZSkgIT0gem9uZWxpc3Rfbm9kZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpKSB7XG41MjI2Olx0XHRcdFx0Z290byBmYWlsZWQ7XG41MjI3Olx0XHRcdH1cbjUyMjg6XHRcbjUyMjk6XHRcdFx0Y29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKTtcbjUyMzA6XHRyZXRyeV90aGlzX3pvbmU6XG41MjMxOlx0XHRcdG1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgJiM0MzsgbnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQ7XG41MjMyOlx0XHRcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxuNTIzMzpcdFx0XHRcdFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxuNTIzNDpcdFx0XHRcdFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjEwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gdGhpcy4gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhpcyBjbGVhcmx5IGludm9sdmVzIGJ1bGsgYWxsb2NhdGlvbiB3aXRob3V0IHByb2ZpbGluZyBvdmVyaGVhZC4gR29vZCB0byBrbm93LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuJiMzNDsgVGhlIGtleSBxdWVzdGlvbiBoZXJlIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY3VycmVudCBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0LiBUaGF04oCZcyB3aGVyZSBgY3VycmVudF9nZnBfY29udGV4dGAgY29tZXMgaW4uIEkgc3VzcGVjdCBpdCBob2xkcyB0aGUgZmxhZ3MgZ292ZXJuaW5nIGhvdyB0aGUgcGFnZXMgYXJlIGFsbG9jYXRlZCAoZS5nLiwgd2hldGhlciB0byB3YWl0LCB3aGF0IE5VTUEgbm9kZSB0byBwcmVmZXIsIGV0Yy4pLgoKTXkgbmV4dCBzdGVwIGlzIGxvZ2ljYWwuIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgY3VycmVudF9nZnBfY29udGV4dGAgaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoaXMgZnVuY3Rpb24uIFNvLCBJJiMzOTttIGdvaW5nIHRvIGZpcmUgdXAgYSBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2ggdG9vbCB0byBxdWlja2x5IGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBhbmQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29udHJvbCBmbG93IHdpdGhpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB0aG9zZSB1c2UgY2FzZXMgd2lsbCBpbGx1bWluYXRlIGhvdyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIG1ha2VzIHVzZSBvZiwgYW5kIGxpa2VseSBvdmVycmlkZXMsIHRoZSBkZWZhdWx0IGFsbG9jYXRpb24gc2V0dGluZ3MsIGFuZCBwb3RlbnRpYWxseSBwcm92aWRlIGNydWNpYWwgaW5zaWdodCBpbnRvIGhvdyB0aGUgb3B0aW1pemF0aW9uIGlzIGFjY29tcGxpc2hlZC4gVGhlIGNvbnRleHQgZmxhZ3MgYXJlIGNyaXRpY2FsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N1cnJlbnRfZ2ZwX2NvbnRleHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzL2ZpbGUuYz01MTI9c3RhdGljIGJvb2wgbmZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25mcy9maWxlLmMtNTE3LVx0aWYgKGZvbGlvX3Rlc3RfcHJpdmF0ZShmb2xpbykpIHtcbmZzL25mcy9maWxlLmM6NTE4Olx0XHRpZiAoKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKSBcdTAwMjYgR0ZQX0tFUk5FTCkgIT0gR0ZQX0tFUk5FTCB8fFxuZnMvbmZzL2ZpbGUuYy01MTktXHRcdCAgICBjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkpXG4tLVxuZnMvbmZzL2ludGVybmFsLmg9Njk2PXN0YXRpYyBpbmxpbmUgZ2ZwX3QgbmZzX2lvX2dmcF9tYXNrKHZvaWQpXG5mcy9uZnMvaW50ZXJuYWwuaC02OTcte1xuZnMvbmZzL2ludGVybmFsLmg6Njk4Olx0Z2ZwX3QgcmV0ID0gY3VycmVudF9nZnBfY29udGV4dChHRlBfS0VSTkVMKTtcbmZzL25mcy9pbnRlcm5hbC5oLTY5OS1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl92Zm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ3LSAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI0ODpzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9Mjg3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1hbGxvY19yZXRyeV93YWl0KGdmcF90IGdmcF9mbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjkzLVx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6Mjk0Olx0Z2ZwX2ZsYWdzID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI5NS1cdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfZmxhZ3MpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDE0NT1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXG5tbS9odWdlX21lbW9yeS5jOjQyMTU6XHRcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQobWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmMtNDIxNi1cdFx0XHRcdFx0XHRcdEdGUF9SRUNMQUlNX01BU0spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNzUyPWFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zNzg0LVxubW0vcGFnZV9hbGxvYy5jOjM3ODU6LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDM4Mz12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcbm1tL3BhZ2VfYWxsb2MuYzo0Mzg1Olx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDAwPXZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xubW0vcGFnZV9hbGxvYy5jOjQ0MDI6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjA5LVx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbm1tL3BhZ2VfYWxsb2MuYzo1MjEwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTUyMTEtXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MTktXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo1NDIwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0MjEtXHRhbGxvY19nZnAgPSBnZnA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MzEyLVxubW0vcGFnZV9hbGxvYy5jOjczMTM6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTczMTQtXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcdTAwMjZjYy5nZnBfbWFzaykpXG4tLVxubW0vcGVyY3B1LmM9MTczNT12b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxuLS1cbm1tL3BlcmNwdS5jLTE3NDktXG5tbS9wZXJjcHUuYzoxNzUwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGVyY3B1LmMtMTc1MS1cdC8qXG4tLVxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02Nzc0LVx0XHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXG5tbS92bXNjYW4uYzo2Nzc1Olx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTY3NzYtXHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbi0tXG5tbS92bXNjYW4uYz02ODU1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjg2NS1cdFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jOjY4NjY6XHRcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxubW0vdm1zY2FuLmMtNjg2Ny1cdFx0XHRcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcdTAwMjYgfkdGUF9SRUNMQUlNX01BU0spLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4NzY9dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS92bXNjYW4uYy03ODgyLVx0XHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXG5tbS92bXNjYW4uYzo3ODgzOlx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTc4ODQtXHRcdC5vcmRlciA9IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jPTc5NTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMzUtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcbm1tL3Ztc2Nhbi5jOjgwMzY6XHRcdFx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTgwMzctXHRcdFx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaD04OD1pbnQgc2NucHJpbnRmX3BhZChjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqIGZtdCwgLi4uKTtcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTkzLVxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaDo5NDojZGVmaW5lIGN1cnJlbnRfZ2ZwX2NvbnRleHQoaykgMFxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaC05NS0jZGVmaW5lIHN5bmNocm9uaXplX3JjdSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIEkgc2VlIGl0IHN0YXJ0cyBieSBtYXNzYWdpbmcgdGhlIGBnZnBgIGZsYWdzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1hc2tpbmcgdGhlIGFsbG9jYXRpb24gZmxhZ3Mgd2l0aCBgZ2ZwX2FsbG93ZWRfbWFza2AgYW5kIHRoZW4gY2FsbHMgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAuIFRoYXQgZnVuY3Rpb24gY2FsbCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IHNlZW1zIGxpa2UgYSBwaXZvdGFsIHBpZWNlLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBjb250ZXh0IGlzIGFjdHVhbGx5IGJlaW5nIGhhbmRsZWQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHJpZ2h0IGF3YXkuIFRoYXQgc2hvdWxkIGJlIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAyNDguIFRpbWUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBkZWNpc2lvbnMgYXJlIG1hZGUgd2l0aGluIHRoZSBzY2hlZHVsZXImIzM5O3MgcHVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0fVxuIDI0MTpcdFxuIDI0MjpcdC8qXG4gMjQzOlx0ICogQXBwbGllcyBwZXItdGFzayBnZnAgY29udGV4dCB0byB0aGUgZ2l2ZW4gYWxsb2NhdGlvbiBmbGFncy5cbiAyNDQ6XHQgKiBQRl9NRU1BTExPQ19OT0lPIGltcGxpZXMgR0ZQX05PSU9cbiAyNDU6XHQgKiBQRl9NRU1BTExPQ19OT0ZTIGltcGxpZXMgR0ZQX05PRlNcbiAyNDY6XHQgKiBQRl9NRU1BTExPQ19QSU4gIGltcGxpZXMgIUdGUF9NT1ZBQkxFXG4gMjQ3Olx0ICovXG4gMjQ4Olx0c3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF90IGZsYWdzKVxuIDI0OTpcdHtcbiAyNTA6XHRcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VmbGFncyk7XG4gMjUxOlx0XG4gMjUyOlx0XHRpZiAodW5saWtlbHkocGZsYWdzIFx1MDAyNiAoUEZfTUVNQUxMT0NfTk9JTyB8IFBGX01FTUFMTE9DX05PRlMgfCBQRl9NRU1BTExPQ19QSU4pKSkge1xuIDI1MzpcdFx0XHQvKlxuIDI1NDpcdFx0XHQgKiBOT0lPIGltcGxpZXMgYm90aCBOT0lPIGFuZCBOT0ZTIGFuZCBpdCBpcyBhIHdlYWtlciBjb250ZXh0XG4gMjU1Olx0XHRcdCAqIHNvIGFsd2F5cyBtYWtlIHN1cmUgaXQgbWFrZXMgcHJlY2VkZW5jZVxuIDI1NjpcdFx0XHQgKi9cbiAyNTc6XHRcdFx0aWYgKHBmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0NfTk9JTylcbiAyNTg6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH4oX19HRlBfSU8gfCBfX0dGUF9GUyk7XG4gMjU5Olx0XHRcdGVsc2UgaWYgKHBmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0NfTk9GUylcbiAyNjA6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH5fX0dGUF9GUztcbiAyNjE6XHRcbiAyNjI6XHRcdFx0aWYgKHBmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0NfUElOKVxuIDI2MzpcdFx0XHRcdGZsYWdzIFx1MDAyNj0gfl9fR0ZQX01PVkFCTEU7XG4gMjY0Olx0XHR9XG4gMjY1Olx0XHRyZXR1cm4gZmxhZ3M7XG4gMjY2Olx0fVxuIDI2NzpcdFxuIDI2ODpcdCNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIDI2OTpcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApO1xuIDI3MDpcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApO1xuIDI3MTpcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzayk7XG4gMjcyOlx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKTtcbiAyNzM6XHQjZWxzZVxuIDI3NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKSB7IH1cbiAyNzU6XHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCkgeyB9XG4gMjc2Olx0c3RhdGljIGlubGluZSB2b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaykgeyB9XG4gMjc3Olx0c3RhdGljIGlubGluZSB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzaykgeyB9XG4gMjc4Olx0I2VuZGlmXG4gMjc5Olx0XG4gMjgwOlx0LyogQW55IG1lbW9yeS1hbGxvY2F0aW9uIHJldHJ5IGxvb3Agc2hvdWxkIHVzZVxuIDI4MTpcdCAqIG1lbWFsbG9jX3JldHJ5X3dhaXQoKSwgYW5kIHBhc3MgdGhlIGZsYWdzIGZvciB0aGUgbW9zdFxuIDI4MjpcdCAqIGNvbnN0cmFpbmVkIGFsbG9jYXRpb24gYXR0ZW1wdCB0aGF0IG1pZ2h0IGhhdmUgZmFpbGVkLlxuIDI4MzpcdCAqIFRoaXMgcHJvdmlkZXMgdXNlZnVsIGRvY3VtZW50YXRpb24gb2Ygd2hlcmUgbG9vcHMgYXJlLFxuIDI4NDpcdCAqIGFuZCBhIGNlbnRyYWwgcGxhY2UgdG8gZmluZSB0dW5lIHRoZSB3YWl0aW5nIGFzIHRoZSBNTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhpcyBpcyBhIGNydWNpYWwgcGllY2Ugb2YgY29kZSBmb3IgZGVhbGluZyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIHdoZW4gdGhlIHN5c3RlbSBpcyB1bmRlciBzb21lIGtpbmQgb2Ygc3RyZXNzLCBwZXJoYXBzIGR1cmluZyBlYXJseSBib290IG9yIGluIHJlc3BvbnNlIHRvIGEgY3JpdGljYWwgZXZlbnQgd2hlcmUgcHJvZmlsaW5nIGlzIGVpdGhlciBpbXByYWN0aWNhbCBvciBkZXRyaW1lbnRhbC4gVGhlICYjMzQ7ZnJvemVuJiMzNDsgcGFydCBpbXBsaWVzIHRoZXNlIHBhZ2VzIGFyZSBwcm9iYWJseSBtYW5hZ2VkIGRpZmZlcmVudGx5LCBwb3NzaWJseSBieXBhc3Npbmcgc29tZSBvZiB0aGUgbm9ybWFsIGJvb2trZWVwaW5nIGFuZCBhY2NvdW50aW5nIG92ZXJoZWFkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhcmVmdWxseSBvcHRpbWl6ZWQsIHBvdGVudGlhbGx5IHJlbHlpbmcgb24gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgb3IgbWVtb3J5IGxheW91dCBhc3N1bXB0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBidWRkeSBhbGxvY2F0b3Igb3IgYW55IG90aGVyIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIHBvaW50cyBhbmQgaG93IG1lbW9yeSBjb3JydXB0aW9uIGlzIGF2b2lkZWQuIEtub3dpbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbWVjaGFuaXNtcyB3aWxsIGFsc28gYmUgdml0YWwuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGNyaXRpY2FsIHBhZ2UgYWxsb2NhdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQxMDpcdFx0fVxuNTQxMTpcdFxuNTQxMjpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjU0MTM6XHRcdC8qXG41NDE0Olx0XHQgKiBBcHBseSBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cy4gVGhpcyBpcyBtYWlubHkgYWJvdXQgR0ZQX05PRlNcbjU0MTU6XHRcdCAqIHJlc3AuIEdGUF9OT0lPIHdoaWNoIGhhcyB0byBiZSBpbmhlcml0ZWQgZm9yIGFsbCBhbGxvY2F0aW9uIHJlcXVlc3RzXG41NDE2Olx0XHQgKiBmcm9tIGEgcGFydGljdWxhciBjb250ZXh0IHdoaWNoIGhhcyBiZWVuIG1hcmtlZCBieVxuNTQxNzpcdFx0ICogbWVtYWxsb2Nfbm97ZnMsaW99X3tzYXZlLHJlc3RvcmV9LiBBbmQgUEZfTUVNQUxMT0NfUElOIHdoaWNoIGVuc3VyZXNcbjU0MTg6XHRcdCAqIG1vdmFibGUgem9uZXMgYXJlIG5vdCB1c2VkIGR1cmluZyBhbGxvY2F0aW9uLlxuNTQxOTpcdFx0ICovXG41NDIwOlx0XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG41NDIxOlx0XHRhbGxvY19nZnAgPSBnZnA7XG41NDIyOlx0XHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLFxuNTQyMzpcdFx0XHRcdFx1MDAyNmFsbG9jX2dmcCwgXHUwMDI2ZmFzdHBhdGhfYWxsb2NfZmxhZ3MpKVxuNTQyNDpcdFx0XHRyZXR1cm4gTlVMTDtcbjU0MjU6XHRcbjU0MjY6XHRcdGlmICghKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spKSB7XG41NDI3Olx0XHRcdC8qXG41NDI4Olx0XHRcdCAqIEZvcmJpZCB0aGUgZmlyc3QgcGFzcyBmcm9tIGZhbGxpbmcgYmFjayB0byB0eXBlcyB0aGF0XG41NDI5Olx0XHRcdCAqIGZyYWdtZW50IG1lbW9yeSB1bnRpbCBhbGwgbG9jYWwgem9uZXMgYXJlIGNvbnNpZGVyZWQuXG41NDMwOlx0XHRcdCAqL1xuNTQzMTpcdFx0XHRmYXN0cGF0aF9hbGxvY19mbGFncyB8PSBhbGxvY19mbGFnc19ub2ZyYWdtZW50KFxuNTQzMjpcdFx0XHRcdHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCBnZnApO1xuNTQzMzpcdFx0fVxuNTQzNDpcdFx0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwLCBvcmRlcikgXHUwMDI2IEFMTE9DX0hJR0hBVE9NSUM7XG41NDM1Olx0XG41NDM2Olx0XHQvKiBGaXJzdCBhbGxvY2F0aW9uIGF0dGVtcHQgKG9yLCBmb3Igbm9sb2NrLCBvbmx5IGF0dGVtcHQpICovXG41NDM3Olx0XHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChhbGxvY19nZnAsIG9yZGVyLCBmYXN0cGF0aF9hbGxvY19mbGFncywgXHUwMDI2YWMpO1xuNTQzODpcdFx0aWYgKGxpa2VseShwYWdlKSB8fCAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSykpXG41NDM5Olx0XHRcdGdvdG8gb3V0O1xuNTQ0MDpcdFxuNTQ0MTpcdFx0YWxsb2NfZ2ZwID0gZ2ZwO1xuNTQ0MjpcdFx0YWMuc3ByZWFkX2RpcnR5X3BhZ2VzID0gZmFsc2U7XG41NDQzOlx0XG41NDQ0Olx0XHQvKlxuNTQ0NTpcdFx0ICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgbm9kZW1hc2sgaWYgaXQgd2FzIHBvdGVudGlhbGx5IHJlcGxhY2VkIHdpdGhcbjU0NDY6XHRcdCAqIFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCB0byBvcHRpbWl6ZSB0aGUgZmFzdC1wYXRoIGF0dGVtcHQuXG41NDQ3Olx0XHQgKi9cbjU0NDg6XHRcdGFjLm5vZGVtYXNrID0gbm9kZW1hc2s7XG41NDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDaGFuZ2UgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSByZWNlbnQgY2hhbmdlIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEl0IGFwcGVhcnMgdGhhdCBhIGNydWNpYWwgbGluZSBoYXMgYmVlbiBhZGRlZDogYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuICBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgZnVuY3Rpb24gZGlkbiYjMzk7dCBpbmNsdWRlIHRoaXMgY2FsbCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhZGRpdGlvbi4gIFRoaXMgZnVuY3Rpb24gaXMgd2l0aGluIHRoZSBwYWdlIGFsbG9jYXRvciwgc28gaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IuICBUaGUgR0ZQIGZsYWdzIGFyZSBhdCBwbGF5IGhlcmUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIG1lbW9yeS4KClRoZSBjb3JlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFkZGl0aW9uPyBUbyBmaWd1cmUgdGhhdCBvdXQsIEkgbmVlZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBhbGxvY19wYWdlc19idWxrYCBhbmQgaXRzIHZhcmlhbnRzIChgYWxsb2NfcGFnZXNfYnVsa19hcnJheWAsIGBhbGxvY19wYWdlc19idWxrX2xpc3RgLCBhbmQgdGhlIG1vZGlmaWVkIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmApIGFyZSBiZWluZyAqdXNlZCouICBXaGF0IHBhcnRzIG9mIHRoZSBrZXJuZWwgcmVseSBvbiB0aGlzIGZ1bmN0aW9uYWxpdHk/ICBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gc2VlIGhvdyB0aGlzIGNoYW5nZSBwcm9wYWdhdGVzIGFuZCB3aGF0IHN5c3RlbXMgYXJlIG5vdyBhZmZlY3RlZCBieSB0aGlzIGNvbnRleHR1YWwgY2hhbmdlLiBUaW1lIHRvIGZpbmQgdGhlIGNhbGxlcnMgb2YgdGhvc2UgZnVuY3Rpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAxOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAyLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29tbWl0IGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmF0aW9uYWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgYGdpdCBsb2dgLCBidXQgSSBkb24mIzM5O3QgaGF2ZSB0aGF0IHRvb2wgaGFuZHkgZGlyZWN0bHkuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBkb2VzIHRoZSBwYXRjaCBpdHNlbGYgdGVsbCBtZT8gQWgsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzICp3aHkqPyBXaHkgYXJlIHRoZXkgZG9pbmcgdGhpcz8KClJpZ2h0LCBpdCYjMzk7cyBoaXR0aW5nIG1lIG5vdy4gVGhlIGlzc3VlIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXNuJiMzOTt0IHJlc3BlY3RpbmcgdGhlIHRhc2sgZmxhZ3MhIEZsYWdzIGxpa2UgYFBGX01FTUFMTE9DX05PSU9gLCBgUEZfTUVNQUxMT0NfTk9GU2AsIGFuZCBgUEZfTUVNQUxMT0NfUElOYCBhcmUgaW1wb3J0YW50IGNvbnN0cmFpbnRzLiBUaGUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZTsgaXQgbGlrZWx5IGFwcGxpZXMgdGhlIHRhc2stc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMsIGVmZmVjdGl2ZWx5IGVuZm9yY2luZyB0aG9zZSBgUEZfKmAgZmxhZ3MuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtLiBMZXQgbWUganVzdCBnbGFuY2UgYXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBzZWUgaWYgdGhhdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGlzIHN1cHBvc2VkIHRvIHRha2UgZWZmZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTA5MDpcdFxuNTA5MTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG41MDkyOlx0XHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcbjUwOTM6XHRcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBnZnBfdCAqYWxsb2NfZ2ZwLFxuNTA5NDpcdFx0XHR1bnNpZ25lZCBpbnQgKmFsbG9jX2ZsYWdzKVxuNTA5NTpcdHtcbjUwOTY6XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKGdmcF9tYXNrKTtcbjUwOTc6XHRcdGFjLVx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XG41MDk4Olx0XHRhYy1cdTAwM2Vub2RlbWFzayA9IG5vZGVtYXNrO1xuNTA5OTpcdFx0YWMtXHUwMDNlbWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spO1xuNTEwMDpcdFxuNTEwMTpcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpKSB7XG41MTAyOlx0XHRcdCphbGxvY19nZnAgfD0gX19HRlBfSEFSRFdBTEw7XG41MTAzOlx0XHRcdC8qXG41MTA0Olx0XHRcdCAqIFdoZW4gd2UgYXJlIGluIHRoZSBpbnRlcnJ1cHQgY29udGV4dCwgaXQgaXMgaXJyZWxldmFudFxuNTEwNTpcdFx0XHQgKiB0byB0aGUgY3VycmVudCB0YXNrIGNvbnRleHQuIEl0IG1lYW5zIHRoYXQgYW55IG5vZGUgb2suXG41MTA2Olx0XHRcdCAqL1xuNTEwNzpcdFx0XHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiAhYWMtXHUwMDNlbm9kZW1hc2spXG41MTA4Olx0XHRcdFx0YWMtXHUwMDNlbm9kZW1hc2sgPSBcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG41MTA5Olx0XHRcdGVsc2VcbjUxMTA6XHRcdFx0XHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfQ1BVU0VUO1xuNTExMTpcdFx0fVxuNTExMjpcdFxuNTExMzpcdFx0bWlnaHRfYWxsb2MoZ2ZwX21hc2spO1xuNTExNDpcdFxuNTExNTpcdFx0LypcbjUxMTY6XHRcdCAqIERvbiYjMzk7dCBpbnZva2Ugc2hvdWxkX2ZhaWwgbG9naWMsIHNpbmNlIGl0IG1heSBjYWxsXG41MTE3Olx0XHQgKiBnZXRfcmFuZG9tX3UzMigpIGFuZCBwcmludGsoKSB3aGljaCBuZWVkIHRvIHNwaW5fbG9jay5cbjUxMTg6XHRcdCAqL1xuNTExOTpcdFx0aWYgKCEoKmFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spIFx1MDAyNlx1MDAyNlxuNTEyMDpcdFx0ICAgIHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSlcbjUxMjE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNTEyMjpcdFxuNTEyMzpcdFx0KmFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XG41MTI0Olx0XG41MTI1Olx0XHQvKiBEaXJ0eSB6b25lIGJhbGFuY2luZyBvbmx5IGRvbmUgaW4gdGhlIGZhc3QgcGF0aCAqL1xuNTEyNjpcdFx0YWMtXHUwMDNlc3ByZWFkX2RpcnR5X3BhZ2VzID0gKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9XUklURSk7XG41MTI3Olx0XG41MTI4Olx0XHQvKlxuNTEyOTpcdFx0ICogVGhlIHByZWZlcnJlZCB6b25lIGlzIHVzZWQgZm9yIHN0YXRpc3RpY3MgYnV0IGNydWNpYWxseSBpdCBpc1xuNTEzMDpcdFx0ICogYWxzbyB1c2VkIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHpvbmVsaXN0IGl0ZXJhdG9yLiBJdFxuNTEzMTpcdFx0ICogbWF5IGdldCByZXNldCBmb3IgYWxsb2NhdGlvbnMgdGhhdCBpZ25vcmUgbWVtb3J5IHBvbGljaWVzLlxuNTEzMjpcdFx0ICovXG41MTMzOlx0XHRhYy1cdTAwM2VwcmVmZXJyZWRfem9uZXJlZiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KGFjLVx1MDAzZXpvbmVsaXN0LFxuNTEzNDpcdFx0XHRcdFx0XHRhYy1cdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGFjLVx1MDAzZW5vZGVtYXNrKTtcbjUxMzU6XHRcbjUxMzY6XHRcdHJldHVybiB0cnVlO1xuNTEzNzpcdH1cbjUxMzg6XHRcbjUxMzk6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI4NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBgcHJlcGFyZV9hbGxvY19wYWdlc2AqKgoKT2theSwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCBgcHJlcGFyZV9hbGxvY19wYWdlc2AgaXMgYWN0dWFsbHkgY2FsbGluZy4gQWgsIGxpbmUgNTEyMzogaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzZXR0aW5nIGAqYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtgLiBOb3csIEkgcmVjYWxsIHRoYXQgZ3JlcCByZXN1bHQgZnJvbSBlYXJsaWVyLCB0aGF0IGxpbmUgMzc4NSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBtZW50aW9uczogJiMzNDsvKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqLyYjMzQ7LiBBbmQgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGhlcmUgaXMgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gYGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylgISBPa2F5LCB0aGF0IHJpbmdzIGEgYmVsbC4gTm93IGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gYW5kIHRoZSBwdXJwb3NlIG9mIGBhbGxvY19mbGFnc19jbWFgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCYjMzk7cyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzc4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzg0Olx0XG4zNzg1Olx0LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cbjM3ODY6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2spXG4zNzg3Olx0e1xuMzc4ODpcdCNpZmRlZiBDT05GSUdfQ01BXG4zNzg5Olx0XHRpZiAoZ2ZwX21pZ3JhdGV0eXBlKGdmcF9tYXNrKSA9PSBNSUdSQVRFX01PVkFCTEUpXG4zNzkwOlx0XHRcdHJldHVybiBBTExPQ19DTUE7XG4zNzkxOlx0I2VuZGlmXG4zNzkyOlx0XHRyZXR1cm4gQUxMT0NfREVGQVVMVDtcbjM3OTM6XHR9XG4zNzk0Olx0XG4zNzk1Olx0LypcbjM3OTY6XHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0IGdvZXMgdGhyb3VnaCB0aGUgem9uZWxpc3QgdHJ5aW5nIHRvIGFsbG9jYXRlXG4zNzk3Olx0ICogYSBwYWdlLlxuMzc5ODpcdCAqL1xuMzc5OTpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqXG4zODAwOlx0Z2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgYWxsb2NfZmxhZ3MsXG4zODAxOlx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuMzgwMjpcdHtcbjM4MDM6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgV29ydGhGdXp6aW5nIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBUaGUgY29tbWVudCBvbiBgYWxsb2NfZmxhZ3NfY21hYCBpcyBrZXk6ICYjMzQ7TXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAsIHdoaWNoIGNhbiBjaGFuZ2UgYGdmcF9tYXNrYC4mIzM0OyBUaGlzIGxpbmtzIGRpcmVjdGx5IHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzKClgIGFuZCBob3cgYGFsbG9jX2ZsYWdzX2NtYWAgaXMgdXNlZCB3aXRoaW4gaXQsIGFuZCB0aGF0IGZ1bmN0aW9uIHRoZW4gY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSSYjMzk7bSBhbHNvIHNlZWluZyBgbWlnaHRfYWxsb2MoZ2ZwX21hc2spYCBiZWluZyBjYWxsZWQgaW4gYHByZXBhcmVfYWxsb2NfcGFnZXMoKWAuIE15IG1haW4gY29uY2VybiBpcywgaWYgYFBGX01FTUFMTE9DX05PRlNgIGlzIHNldCBvbiB0aGUgY3VycmVudCBwcm9jZXNzIGFuZCBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgY2FsbGVkIHdpdGggYEdGUF9LRVJORUxgICh3aGljaCBpbmNsdWRlcyBgX19HRlBfRlNgKSwgdGhlbiBgbWlnaHRfYWxsb2MoR0ZQX0tFUk5FTClgIGNvdWxkIGNhdXNlIGEgbG9ja2RlcCBvciBmc19yZWNsYWltIHdhcm5pbmcgaWYgYGdmcGAgaXNuJiMzOTt0IHByb3Blcmx5IHN0cmlwcGVkIG9mIGBfX0dGUF9GU2AgZmlyc3QuIE9yIG1heWJlLCBpdCYjMzk7cyBhIENNQSBpc3N1ZSB3aXRoIGBQRl9NRU1BTExPQ19QSU5gIHdoZXJlIGZsYWdzIGFyZSBiZWluZyBpbXByb3Blcmx5IG1hc2tlZC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHNvbWV0aGluZyB0byBmdXp6LiBMZXQmIzM5O3Mgc2VlLi4uIGlzIHRoaXMgY2hhbmdlIHJlYWNoYWJsZT8gWWVzLCBtbS9wYWdlX2FsbG9jLmMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzbyB0aGF0JiMzOTtzIGEgY2hlY2sgbWFyay4KCklzIGl0IHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYS4gU2luY2UgdGhpcyBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHRoZSBhbnN3ZXIgaXMgKnVuZXF1aXZvY2FsbHkqIFlFUy4gQWNjb3JkaW5nIHRvIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGNyaXRlcmlhLCBhbnkgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhcmUgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCB0aGlzIGlzIGNvcmUgc3Vic3lzdGVtIGNvZGUgKG1tL3BhZ2VfYWxsb2MuYykgdGhhdCBpcyBjYWxsZWQgaW4gbm9ybWFsIG9wZXJhdGlvbiAoYnRyZnMsIGZ1c2UsIHBhZ2VfcG9vbCwgZXRjLikuIGBXb3J0aEZ1enppbmdgIE1VU1QgQkUgVFJVRS4KCk5vdywgaG93IHNob3VsZCBJIGRpcmVjdCB0aGUgZnV6emVyIHRvIG1heGltaXplIGVmZmVjdGl2ZW5lc3M/CgpUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gcHJldmVudCBkaWx1dGlvbi4gSSBuZWVkIHRvIGF2b2lkICYjMzQ7dWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzJiMzNDsgbGlrZSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLiBCdXQgd2FpdCwgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBjb25zaWRlcmVkIGEgdWJpcXVpdG91cyBhbGxvY2F0b3I/IEkgbmVlZCB0byBhbmFseXplIHRoaXMgdmVyeSBjYXJlZnVsbHkuIExldCYjMzk7cyByZS1yZWFkIHRob3NlIGluc3RydWN0aW9uczogJiMzNDtEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycy4uLikuJiMzNDsgTXkgaW5pdGlhbCB0aG91Z2h0LCBpcyB0aGF0IHRoZSBhbGxvY2F0b3JzICphcmUqIHByZXR0eSBtdWNoIHViaXF1aXRvdXMsIHNvIHRoZSBpbnN0cnVjdGlvbnMgd291bGQgc3VnZ2VzdCB0byBpZ25vcmUgdGhlbS4gSG93ZXZlciwgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhICpnZW5lcmFsKiBtZW1vcnkgYWxsb2NhdG9yLCBvciBpcyBpdCBhIG1vcmUgc3BlY2lmaWMgb25lPyBXaGF0IGNhbGxzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmA/CgpPa2F5LCBmcm9tIHRoZSBncmVwIHJlc3VsdHMsIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBieTogY29weV9zcGxpY2VfcmVhZCBpbiBmcy9zcGxpY2UuYywgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSwgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZiwgYXJlbmFfYWxsb2NfcGFnZXMsIHNldmVyYWwgbW0vbWVtcG9saWN5LmMgZnVuY3Rpb25zLCBhbmQgYSBmZXcgb3RoZXJzIGZyb20gZHJpdmVycyBhbmQgbmV0d29ya2luZy4gT2theSwgbGV0JiMzOTtzIHN0b3AgZm9yIGEgbW9tZW50LiBJcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGNhbGxlZCBieSBhbG1vc3QgKmV2ZXJ5KiBwcm9ncmFtPyBOTyEgU3RhbmRhcmQgYWxsb2NhdGlvbiBwYXRocyBub3JtYWxseSB1c2Uga21hbGxvYyBvciB2bWFsbG9jIG9yIHNpbmdsZS1wYWdlIGFsbG9jYXRpb25zIChfX2FsbG9jX3BhZ2VzX25vcHJvZikuIEl0IGxvb2tzIGxpa2UgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBmYWlybHkgc3BlY2lmaWMuIFRoZXJlZm9yZSwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyAqbm90KiBhICYjMzQ7Z2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbi4mIzM0OwpOb3cgSSBuZWVkIHRvIHJlLWNoZWNrIHRoZSB2bWFsbG9jIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzczNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzM1Olx0XHRcdFx0ICovXG4zNzM2Olx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCA9IG1pbigxMDBVTCwgbnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQpO1xuMzczNzpcdFxuMzczODpcdFx0XHRcdC8qIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBjb25zaWRlciBtZW1wb2xpY3ksIHdlIGNhbiYjMzk7dFxuMzczOTpcdFx0XHRcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXG4zNzQwOlx0XHRcdFx0ICogb3RoZXJ3aXNlIG1lbW9yeSBtYXkgYmUgYWxsb2NhdGVkIGluIG9ubHkgb25lIG5vZGUsXG4zNzQxOlx0XHRcdFx0ICogYnV0IG1lbXBvbGljeSB3YW50cyB0byBhbGxvYyBtZW1vcnkgYnkgaW50ZXJsZWF2aW5nLlxuMzc0MjpcdFx0XHRcdCAqL1xuMzc0MzpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbjM3NDQ6XHRcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbjM3NDU6XHRcdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4zNzQ2Olx0XHRcdFx0XHRcdFx0XHRwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQpO1xuMzc0NzpcdFx0XHRcdGVsc2VcbjM3NDg6XHRcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcbjM3NDk6XHRcdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4zNzUwOlx0XHRcdFx0XHRcdFx0XHRwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQpO1xuMzc1MTpcdFxuMzc1MjpcdFx0XHRcdGZvciAoaSA9IG5yX2FsbG9jYXRlZDsgaSBcdTAwM2MgbnJfYWxsb2NhdGVkICYjNDM7IG5yOyBpJiM0MzsmIzQzOylcbjM3NTM6XHRcdFx0XHRcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlc1tpXSwgTlJfVk1BTExPQywgMSk7XG4zNzU0Olx0XG4zNzU1Olx0XHRcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBucjtcbjM3NTY6XHRcbjM3NTc6XHRcdFx0XHQvKlxuMzc1ODpcdFx0XHRcdCAqIElmIHplcm8gb3IgcGFnZXMgd2VyZSBvYnRhaW5lZCBwYXJ0bHksXG4zNzU5Olx0XHRcdFx0ICogZmFsbGJhY2sgdG8gYSBzaW5nbGUgcGFnZSBhbGxvY2F0b3IuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTI1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB2bWFsbG9jIEFsbG9jYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB2bWFsbG9jYCBpcyBhbGxvY2F0aW5nIHBhZ2VzLCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtbS92bWFsbG9jLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGB2bV9hcmVhX2FsbG9jX3BhZ2VzKClgIGlzIGJlaW5nIHVzZWQuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHVzaW5nIGVpdGhlciBgYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZmAgb3IgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggYWxsb2NhdGluZyBtdWx0aXBsZSBwYWdlcyBhdCBvbmNlLCBsaWtlbHkgdG8gb3B0aW1pemUgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBmb3IgYSBsYXJnZSBgdm1hbGxvY2AgcmVnaW9uLgoKTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cC4gSXMgYF9fdm1hbGxvY19ub2RlX3JhbmdlYCBjYWxsaW5nIHRoaXMgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGZ1bmN0aW9uPyBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGluIGEgdm1hbGxvYyBjYWxsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gY29uZmlybSB0aGF0IGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZWAgaXMgaW5kZWVkIGludm9raW5nIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCB0byBhbGxvY2F0ZSB0aGUgdW5kZXJseWluZyBwYWdlcy4gTGV0IG1lIGdvIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bV9hcmVhX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zNjc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xubW0vdm1hbGxvYy5jOjM2NzY6dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG5tbS92bWFsbG9jLmMtMzY3Ny1cdFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuLS1cbm1tL3ZtYWxsb2MuYz0zODczPXN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3ZtYWxsb2MuYy0zOTIxLVx0ICovXG5tbS92bWFsbG9jLmM6MzkyMjpcdGFyZWEtXHUwMDNlbnJfcGFnZXMgPSB2bV9hcmVhX2FsbG9jX3BhZ2VzKFxubW0vdm1hbGxvYy5jLTM5MjMtXHRcdFx0dm1hbGxvY19nZnBfYWRqdXN0KGdmcF9tYXNrLCBwYWdlX29yZGVyKSwgbm9kZSxcbi0tXG5tbS92bWFsbG9jLmMtMzkzMS1cdFx0Lypcbm1tL3ZtYWxsb2MuYzozOTMyOlx0XHQgKiB2bV9hcmVhX2FsbG9jX3BhZ2VzKCkgY2FuIGZhaWwgZHVlIHRvIGluc3VmZmljaWVudCBtZW1vcnkgYnV0XG5tbS92bWFsbG9jLmMtMzkzMy1cdFx0ICogYWxzbzotXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTQwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2FzIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggd2FzIG1vZGlmeWluZy4gIFJpZ2h0LCBpdCBpcy4gIGB2bWFsbG9jYCBjYWxscyBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIHdoaWNoIHRoZW4gY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgIGFuZCAqdGhhdCogY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBJcyB0aGlzIGZ1bmN0aW9uIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGBGb2N1c1N5bWJvbGAgaW4gZnV6emluZz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjcml0ZXJpYS4KClRoZSBkb2N1bWVudGF0aW9uIHdhcm5zIGFnYWluc3QgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMmIzM0OyBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuICBJcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgICp1YmlxdWl0b3VzKj8gSXQmIzM5O3MgY2FsbGVkIHdoZW4gYHZtYWxsb2NgIGlzIHVzZWQuICBga21hbGxvY2AgaXMgc3VwZXIgY29tbW9uLCBidXQgYHZtYWxsb2NgIGlzIHVzZWQgYSBkZWNlbnQgYW1vdW50IHRvby4gIElzIGl0ICpnZW5lcmljKiBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCB1YmlxdWl0b3VzPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LgoKTm93LCBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIG5vdCB1YmlxdWl0b3VzLCBJIG1pZ2h0IGhhdmUgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGEgRm9jdXNTeW1ib2whCgpUaGUgcGF0Y2ggYWRkcyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gV2hhdCYjMzk7cyBgY3VycmVudF9nZnBfY29udGV4dGAgZG9pbmc/IEl0JiMzOTtzIHNldHRpbmcgYFBGX01FTUFMTE9DX05PSU9gLCBgUEZfTUVNQUxMT0NfTk9GU2AsIGFuZCBgUEZfTUVNQUxMT0NfUElOYC4gIGBQRl9NRU1BTExPQ19OT0ZTYCBpcyB1c2VkIGR1cmluZyBmcyBvcGVyYXRpb25zL3RyYW5zYWN0aW9ucyBsaWtlIGJ0cmZzLCBleHQ0LCBhbmQgeGZzLiBgUEZfTUVNQUxMT0NfTk9JT2AgaXMgZm9yIHRoZSBibG9jayBsYXllci4gYFBGX01FTUFMTE9DX1BJTmAgaGFzIG1lIHRoaW5raW5nIHVzZXIgcGFnZXMsIHNvIHdoYXQgY29udGV4dCBpcyB0aGF0PyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYFBGX01FTUFMTE9DX1BJTmAgaXMgdXNlZC4gVGhpcyBjb3VsZCBiZSB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIHNwZWNpZmljYWxseSBpbXBvcnRhbnQgdG8gdGVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEZfTUVNQUxMT0NfUElOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQuaD0xNzkwPWV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xODIzLSNkZWZpbmUgUEZfTUNFX0VBUkxZXHRcdDB4MDgwMDAwMDAgICAgICAvKiBFYXJseSBraWxsIGZvciBtY2UgcHJvY2VzcyBwb2xpY3kgKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxODI0OiNkZWZpbmUgUEZfTUVNQUxMT0NfUElOXHRcdDB4MTAwMDAwMDBcdC8qIEFsbG9jYXRpb25zIGNvbnN0cmFpbmVkIHRvIHpvbmVzIHdoaWNoIGFsbG93IGxvbmcgdGVybSBwaW5uaW5nLlxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE4MjUtXHRcdFx0XHRcdFx0ICogU2VlIG1lbWFsbG9jX3Bpbl9zYXZlKCkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl92Zm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ1LSAqIFBGX01FTUFMTE9DX05PRlMgaW1wbGllcyBHRlBfTk9GU1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI0NjogKiBQRl9NRU1BTExPQ19QSU4gIGltcGxpZXMgIUdGUF9NT1ZBQkxFXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ3LSAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTI0OD1zdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI1MS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNTI6XHRpZiAodW5saWtlbHkocGZsYWdzIFx1MDAyNiAoUEZfTUVNQUxMT0NfTk9JTyB8IFBGX01FTUFMTE9DX05PRlMgfCBQRl9NRU1BTExPQ19QSU4pKSkge1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI1My1cdFx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjYxLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI2MjpcdFx0aWYgKHBmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0NfUElOKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI2My1cdFx0XHRmbGFncyBcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00NTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2NfcGluX3NhdmUodm9pZClcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NTYte1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ1NzpcdHJldHVybiBtZW1hbGxvY19mbGFnc19zYXZlKFBGX01FTUFMTE9DX1BJTik7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDU4LX1cbi0tXG5tbS9odWdldGxiLmM9MTI1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMjU1LVx0c3RydWN0IGZvbGlvICpmb2xpbztcbm1tL2h1Z2V0bGIuYzoxMjU2Olx0Ym9vbCBwaW4gPSAhIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQ19QSU4pO1xubW0vaHVnZXRsYi5jLTEyNTctXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzODQ9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQxNi1cdCAqIGZyb20gYSBwYXJ0aWN1bGFyIGNvbnRleHQgd2hpY2ggaGFzIGJlZW4gbWFya2VkIGJ5XG5tbS9wYWdlX2FsbG9jLmM6NTQxNzpcdCAqIG1lbWFsbG9jX25ve2ZzLGlvfV97c2F2ZSxyZXN0b3JlfS4gQW5kIFBGX01FTUFMTE9DX1BJTiB3aGljaCBlbnN1cmVzXG5tbS9wYWdlX2FsbG9jLmMtNTQxOC1cdCAqIG1vdmFibGUgem9uZXMgYXJlIG5vdCB1c2VkIGR1cmluZyBhbGxvY2F0aW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcxMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtZW1hbGxvY19waW5fc2F2ZWAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIGNvbnRleHQgb2YgYG1lbWFsbG9jX3Bpbl9zYXZlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/JiMzNDsgVG8gZ2V0IGEgZ3Jhc3Agb24gaXRzIHJvbGUsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGRlc2lnbiBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgaXRzIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbHMg4oCTIGxpa2VseSBhIGNvbWJpbmF0aW9uIG9mIGdyZXAgb3IgYW4gSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbmFsaXR5LCBjb3VwbGVkIHdpdGggY29kZSBuYXZpZ2F0aW9uIOKAkyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMgd2hlcmUgYG1lbWFsbG9jX3Bpbl9zYXZlYCBpcyBjYWxsZWQuIFRoYXQgY2FsbCBncmFwaCBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYWxsb2NfcGluX3NhdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC5oPTE3OTA9ZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE4MjQtI2RlZmluZSBQRl9NRU1BTExPQ19QSU5cdFx0MHgxMDAwMDAwMFx0LyogQWxsb2NhdGlvbnMgY29uc3RyYWluZWQgdG8gem9uZXMgd2hpY2ggYWxsb3cgbG9uZyB0ZXJtIHBpbm5pbmcuXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTgyNTpcdFx0XHRcdFx0XHQgKiBTZWUgbWVtYWxsb2NfcGluX3NhdmUoKSAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE4MjYtI2RlZmluZSBQRl9CTE9DS19UU1x0XHQweDIwMDAwMDAwXHQvKiBwbHVnIGhhcyB0cyB0aGF0IG5lZWRzIHVwZGF0aW5nICovXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ0MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NDUtLyoqXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDQ2OiAqIG1lbWFsbG9jX3Bpbl9zYXZlIC0gTWFya3MgaW1wbGljaXQgfl9fR0ZQX01PVkFCTEUgc2NvcGUuXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDQ3LSAqXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ1NC0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0NTU6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2NfcGluX3NhdmUodm9pZClcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NTYte1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NjMtICpcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0NjQ6ICogRW5kcyB0aGUgaW1wbGljaXQgfl9fR0ZQX01PVkFCTEUgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19waW5fc2F2ZSBmdW5jdGlvbi5cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NjUtICogQWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBmbGFncyBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHBhaXJpbmdcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0NjY6ICogbWVtYWxsb2NfcGluX3NhdmUgY2FsbC5cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NjctICovXG4tLVxubW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBfX2d1cF9sb25ndGVybV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vZ3VwLmMtMjQ3My1cbm1tL2d1cC5jOjI0NzQ6XHRmbGFncyA9IG1lbWFsbG9jX3Bpbl9zYXZlKCk7XG5tbS9ndXAuYy0yNDc1LVx0ZG8ge1xuLS1cbm1tL2d1cC5jPTM0MzY9bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLS1cbm1tL2d1cC5jLTM0NjQtXG5tbS9ndXAuYzozNDY1Olx0ZmxhZ3MgPSBtZW1hbGxvY19waW5fc2F2ZSgpO1xubW0vZ3VwLmMtMzQ2Ni1cdGRvIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBEZXRlcm1pbmF0aW9uOiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgRm9jdXNTeW1ib2xzIGxpc3QsIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbiBpcyBpbiB0aGlzIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiAgVGhlIGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzaywgaXMgdGhpcyBhICYjMzQ7Z2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yJiMzNDsgd2Ugc2hvdWxkIGF2b2lkIGxpc3Rpbmc/ICBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIGhlcmUuIGBrbWFsbG9jX25vcHJvZmAsIGBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZmAsIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAsIGBhbGxvY19wYWdlc2Ag4oCTIHRob3NlIGFyZSB0aGUgZ2VuZXJpYyBhbGxvY2F0b3JzIHRoYXQgKmV2ZXJ5KiBzeXNjYWxsIHRvdWNoZXMuIFRoZXnigJlyZSBjYWxsZWQgb24gYWxtb3N0IGV2ZXJ5IHNpbmdsZSBvcGVuLCByZWFkLCB3cml0ZSwgc29ja2V0LCBmb3JrLCBleGVjLCBldGMuCgpCdXQgZG9lcyBldmVyeSBwcm9ncmFtIGNhbGwgYGFsbG9jX3BhZ2VzX2J1bGtgPyBObywgdGhhdOKAmXMgdGhlIGNyaXRpY2FsIGRpc3RpbmN0aW9uLiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzICpub3QqIHViaXF1aXRvdXMgaW4gdGhlIHdheSB0aG9zZSBvdGhlciBmdW5jdGlvbnMgYXJlLiBJdCYjMzk7cyB1c2VkIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIEkga25vdyB0aGF0IGB2bWFsbG9jYCBpcyBjYWxsZWQgZmFyIGxlc3MgZnJlcXVlbnRseSBhbmQgaXMgb25seSB1c2VkIGZvciB2ZXJ5IGxhcmdlIGFsbG9jYXRpb25zLCBsaWtlIGJwZiBwcm9nIGFsbG9jLCBjZXJ0YWluIG1vZHVsZXMsIGxhcmdlIGlvY3RsIGJ1ZmZlcnMsIGV0Yy4gIE1vc3Qgc3lzY2FsbHMgZG9uJiMzOTt0IGNhbGwgYHZtYWxsb2NgLiBJdCBpcyB0aGUgc2FtZSB3aXRoIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuCgpOb3csIGRvZXMgc3l6a2FsbGVyIGhpdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIG1vc3QgcHJvZ3JhbXM/IE5vLiBJdCYjMzk7cyBvbmx5IHV0aWxpemVkIGluIHBhcnRpY3VsYXIgc3Vic3lzdGVtcyBhbmQgZmVhdHVyZXMuIEkgc2VlIGl0IHNwZWNpZmljYWxseSBpbXBsZW1lbnRlZCBieSBmdW5jdGlvbnMgbGlrZToKKiAgIGB2bWFsbG9jYCAoZm9yIHZtYWxsb2MgbWVtb3J5KQoqICAgcGFnZSBwb29sIChpbiBuZXR3b3JrIGRyaXZlcnMpCiogICBidHJmcyAoYGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXlgKQoqICAgc3BsaWNlIChgY29weV9zcGxpY2VfcmVhZGApCiogICBmdXNlIChgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZmApCiogICBicGYgYXJlbmEgKGBhcmVuYV9hbGxvY19wYWdlc2ApCiogICBpb191cmluZyAoYGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlc2ApCiogICBzdmNfZmlsbF9wYWdlcyAoc3VucnBjKQoKVGhlIGNoYW5nZSBpcyBkaXJlY3RseSB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gVGhlIHByb21wdCBzYXlzOiAmIzM0O0xpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCYjMzQ7LiBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGRvZXMgaW4gdGhpcyBkaWZmLiBUaGUgaW5zdHJ1Y3Rpb24mIzM5O3MgY2F1dGlvbiBhYm91dCB1YmlxdWl0b3VzIGFsbG9jYXRvcnMgZG9lc24mIzM5O3QgYXBwbHkgYmVjYXVzZSB0aGlzIGlzbiYjMzk7dCBhICpnZW5lcmFsKiBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCBvciBga21hbGxvY2AuCgpUaGUgcXVlc3Rpb24gYmVjb21lcywgaXMgaXQgYSAqZGlyZWN0KiBlbnRyeXBvaW50IG9mIHRoZSBtb2RpZmllZCBsb2dpYz8gWWVzLCBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gd2hlcmUgdGhlIGNoYW5nZSByZXNpZGVzLiBDb25zaWRlcmluZyB0aGUgZXhwbGljaXQgY2hhbmdlIGlzIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLCBpdCYjMzk7cyBhIG5vbi1pbmxpbmUsIGV4cG9ydGVkIHN5bWJvbCBhbmQgYSBkaXJlY3QgZW50cnlwb2ludC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGFyb3VuZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIGFueSBDT05GSUcgb3B0aW9ucyBvciBndWFyZHMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIGluY2x1c2lvbi4gR2l2ZW4gdGhlIGV2aWRlbmNlLCBJIGNvbmNsdWRlIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqaXMqIGEgcmVsZXZhbnQgYW5kIGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNTA6XHQgKiBOb3RlIHRoYXQgb25seSB0aGUgZWxlbWVudHMgaW4gQHBhZ2VfYXJyYXkgdGhhdCB3ZXJlIGNsZWFyZWQgdG8gJU5VTEwgb25cbjUxNTE6XHQgKiBlbnRyeSBhcmUgcG9wdWxhdGVkIHdpdGggbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBAbnJfcGFnZXMgaXMgdGhlIG1heGltdW1cbjUxNTI6XHQgKiBudW1iZXIgb2YgcGFnZXMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgYXJyYXkuXG41MTUzOlx0ICpcbjUxNTQ6XHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gQHBhZ2VfYXJyYXksIGluY2x1ZGluZyBvbmVzIGFscmVhZHlcbjUxNTU6XHQgKiBhbGxvY2F0ZWQgb24gZW50cnkuICBUaGlzIGNhbiBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQgaW4gQG5yX3BhZ2VzLFxuNTE1NjpcdCAqIGJ1dCBhbGwgZW1wdHkgc2xvdHMgYXJlIGZpbGxlZCBmcm9tIHRoZSBiZWdpbm5pbmcuICBJLmUuLCBpZiBhbGwgc2xvdHMgaW5cbjUxNTc6XHQgKiBAcGFnZV9hcnJheSB3ZXJlIHNldCB0byAlTlVMTCBvbiBlbnRyeSwgdGhlIHNsb3RzIGZyb20gMCB0byB0aGUgcmV0dXJuIHZhbHVlXG41MTU4Olx0ICogLSAxIHdpbGwgYmUgZmlsbGVkLlxuNTE1OTpcdCAqL1xuNTE2MDpcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbjUxNjE6XHRcdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuNTE2MjpcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbjUxNjM6XHR7XG41MTY0Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjUxNjU6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuNTE2NjpcdFx0c3RydWN0IHpvbmVyZWYgKno7XG41MTY3Olx0XHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xuNTE2ODpcdFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XG41MTY5Olx0XHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcbjUxNzA6XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcbjUxNzE6XHRcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcbjUxNzI6XHRcbjUxNzM6XHRcdC8qXG41MTc0Olx0XHQgKiBTa2lwIHBvcHVsYXRlZCBhcnJheSBlbGVtZW50cyB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2VzIG5lZWRcbjUxNzU6XHRcdCAqIHRvIGJlIGFsbG9jYXRlZCBiZWZvcmUgZGlzYWJsaW5nIElSUXMuXG41MTc2Olx0XHQgKi9cbjUxNzc6XHRcdHdoaWxlIChucl9wb3B1bGF0ZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiBwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pXG41MTc4Olx0XHRcdG5yX3BvcHVsYXRlZCYjNDM7JiM0Mzs7XG41MTc5Olx0XG41MTgwOlx0XHQvKiBObyBwYWdlcyByZXF1ZXN0ZWQ/ICovXG41MTgxOlx0XHRpZiAodW5saWtlbHkobnJfcGFnZXMgXHUwMDNjPSAwKSlcbjUxODI6XHRcdFx0Z290byBvdXQ7XG41MTgzOlx0XG41MTg0Olx0XHQvKiBBbHJlYWR5IHBvcHVsYXRlZCBhcnJheT8gKi9cbjUxODU6XHRcdGlmICh1bmxpa2VseShucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAwKSlcbjUxODY6XHRcdFx0Z290byBvdXQ7XG41MTg3Olx0XG41MTg4Olx0XHQvKiBCdWxrIGFsbG9jYXRvciBkb2VzIG5vdCBzdXBwb3J0IG1lbWNnIGFjY291bnRpbmcuICovXG41MTg5Olx0XHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgKGdmcCBcdTAwMjYgX19HRlBfQUNDT1VOVCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTA2CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDE4MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgYXNpZGUgZnJvbSB0aGUgb3B0aW9uYWwgYENPTkZJR19QQUdFX09XTkVSYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgaXMgYSBydW50aW1lIGNoZWNrIHZpYSBgcGFnZV9vd25lcl9pbml0ZWRgIGZvciB0aGUgYHBhZ2Vfb3duZXI9b25gIGJvb3QgcGFyYW1ldGVyIGFuZCBkb2VzbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGF0aW9uIG9yIGdlbmVyYWwgYXZhaWxhYmlsaXR5IG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGUgY29kZSBpcyBhbHdheXMgcHJlc2VudCBpbiB0aGUga2VybmVsIGltYWdlLiBJIHJlYWxpemUgdGhlIGBDT05GSUdfUEFHRV9PV05FUmAgY2hlY2sgZWFybHkgcmV0dXJucyBpZiBlbmFibGVkIGFuZCB0aGUgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBza2lwcGluZyB0aGUgYnVsayBhbGxvY2F0aW9uLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtZWFuIGl0JiMzOTtzIG5vdCBwcmVzZW50LgoKVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGZ1enppbmcgaXMgd2FycmFudGVkLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRvIHJlLWV2YWx1YXRlIHRoZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZ2AuIFRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBhbmQgSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiBpdHMgR0ZQIGZsYWdzIGFuZCB0aGUgY3VycmVudCB0YXNrJiMzOTtzIGFsbG9jYXRpb24gY29udGV4dCB2aWEgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgY2hhbmdlIGNvdWxkIGludHJvZHVjZSBpc3N1ZXMgcmVsYXRlZCB0byByZWdyZXNzaW9ucywgbG9ja2RlcCBvciBmc19yZWNsYWltIHZpb2xhdGlvbnMsIG9yIGludmFyaWFudCBpc3N1ZXMgd2hlbiBjb25zdHJhaW5lZCBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZC4KCkkgaW1tZWRpYXRlbHkgcnVsZSBvdXQgYWxsIHRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhJiMzNDsgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIGlzIG5vdCBkb2N1bWVudGF0aW9uLCBidWlsZCBzeXN0ZW0gY2hhbmdlLCBvciBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlLiBJdCYjMzk7cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBpcyB1c2VkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIG9wZXJhdGlvbnMgKHNwbGljZSwgYnRyZnMsIHZtYWxsb2MsIGV0Yy4pLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGJhc2VkIG9uIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYHRydWVgLgoKTm93LCByZWdhcmRpbmcgYEZvY3VzU3ltYm9sc2AsIEkgaGF2ZSB0byBiZSBwcmVjaXNlLiBBbHRob3VnaCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgY29yZSBmdW5jdGlvbiwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIG90aGVyIGVudHJ5IHBvaW50cyBjYWxsIHRoaXMgYW5kIHdoZXRoZXIgZnV6emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGhhcyBicm9hZCBpbXBsaWNhdGlvbnMuIEkgcmVhbGl6ZSBpdCYjMzk7cyBub3QgYXMgdWJpcXVpdG91cyBhcyBvdGhlciBtbSBmdW5jdGlvbnMgbGlrZSBga2ZyZWVgIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAuCgpgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGNhbGxlZCBieSBhIHJlbGF0aXZlbHkgbGltaXRlZCBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgdGhhdCBpdCBpcyBOT1QgY2FsbGVkIGJ5IG5lYXJseSBldmVyeSBzeXNjYWxsLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZnVuY3Rpb24gaXRzZWxmIGFuZCBpdHMgZGlyZWN0IGNhbGxzLiBJIGRldGVybWluZSB0aGF0IHRoZSBtb3N0IGltcG9ydGFudCBGb2N1c1N5bWJvbHMgc2hvdWxkIGJlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLiBUaGVzZSBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY29kZSBjaGFuZ2VzIGFuZCBhcmUgc3BlY2lmaWMgdG8gYnVsayBwYWdlIGFsbG9jYXRpb25zLgoKU2luY2UgSSBoYXZlbiYjMzk7dCBpZGVudGlmaWVkIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucywgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdC4KClRoZSByZWFzb25pbmcgaXMgdGhlcmVmb3JlOgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gaW50ZWdyYXRlIEdGUCBmbGFncyB0aGF0IG1hdGNoIHRoZSBjdXJyZW50IHRhc2smIzM5O3MgYWxsb2NhdGlvbiBjb250ZXh0IHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBmdW5jdGlvbiBmYWxscyB1bmRlciB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGRpc2NvdmVyIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgaW52YXJpYW50IGlzc3VlcyB3aGVuIHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIChzdWNoIGFzIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgYXJlIGFwcGxpZWQuIEkgYW0gbGlzdGluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhcyB0aGUgYEZvY3VzU3ltYm9sc2AuIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGxpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gYXBwbHkgY3VycmVudF9nZnBfY29udGV4dCgpIHRvIHRoZSBHRlAgZmxhZ3MsIGVuZm9yY2luZyBzY29wZWQgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMgKGUuZy4sIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX1BJTikuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG9wZXJhdGlvbnMgdGhhdCBwZXJmb3JtIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIChzdWNoIGFzIGNvcHlfc3BsaWNlX3JlYWQsIGJ0cmZzIHBhZ2UgYWxsb2NhdGlvbiwgb3Igdm1hbGxvYykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbG9ja2RlcC9mc19yZWNsYWltIHZpb2xhdGlvbnMsIG9yIGFsbG9jYXRpb24gYW5vbWFsaWVzIGFyZSB0cmlnZ2VyZWQgdW5kZXIgY29uc3RyYWluZWQgY29udGV4dHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIGFwcGx5IGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB0byB0aGUgR0ZQIGZsYWdzLCBlbmZvcmNpbmcgc2NvcGVkIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIChlLmcuLCBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19QSU4pLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBvcGVyYXRpb25zIHRoYXQgcGVyZm9ybSBidWxrIHBhZ2UgYWxsb2NhdGlvbiAoc3VjaCBhcyBjb3B5X3NwbGljZV9yZWFkLCBidHJmcyBwYWdlIGFsbG9jYXRpb24sIG9yIHZtYWxsb2MpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIGxvY2tkZXAvZnNfcmVjbGFpbSB2aW9sYXRpb25zLCBvciBhbGxvY2F0aW9uIGFub21hbGllcyBhcmUgdHJpZ2dlcmVkIHVuZGVyIGNvbnN0cmFpbmVkIGNvbnRleHRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuVGhpcyBjaGFuZ2UgbWFuaXB1bGF0ZXMgR0ZQIGFsbG9jYXRpb24gZmxhZyBiaXRzIG9uIGEgc2NhbGFyIGBnZnBfdGAgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcHJldmVudGVkIG9yIGluZmx1ZW5jZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIGZpbGVzeXN0ZW0vSU8gcmVjbGFpbSByZWN1cnNpb24gYW5kIGxvY2tpbmcgZGVhZGxvY2tzICh3aGljaCBhcmUgdHJhY2tlZCBieSBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDFmZDRkYjI0N2I3OTBjYmRhNzVlYzRhY2QzNTU1N2Q2MTA5MjM3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDAzOjE0OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTUyMDcsNiAmIzQzOzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsCiAKIAkvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqLwogCWdmcCAmYW1wOz0gZ2ZwX2FsbG93ZWRfbWFzazsKJiM0MzsJZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApOwogCWlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCAmYW1wO2FjLCAmYW1wO2dmcCwgJmFtcDthbGxvY19mbGFncykpCiAJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNpbXBsZSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX2FsbG9jLmNgLiBJdCYjMzk7cyBpbmNyZWRpYmx5IHN0cmFpZ2h0Zm9yd2FyZCwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljIG9yIGEgc21hbGwsIHRhcmdldGVkIG9wdGltaXphdGlvbi4gVGhlIGRpZmYgc2hvd3MgYSBzaW5nbGUgbGluZSBhZGRlZDogYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIHJpZ2h0IGFmdGVyIHRoZSBgZ2ZwYCBmbGFnIGlzIG1hc2tlZCBhbmQgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIHByZXBhcmF0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgY3VycmVudF9nZnBfY29udGV4dCgpYCBkb2VzLCBidXQgSSBhbHJlYWR5IGhhdmUgYW4gaWRlYS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBpcyByZWxhdGVkIHRvIHBvdGVudGlhbGx5IG1vZGlmeWluZyB0aGUgYGdmcGAgZmxhZ3MgYmFzZWQgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGFsbG9jYXRpb24gaXMgaGFwcGVuaW5nLiBUaGUgY29tbWVudCBkaXJlY3RseSBhYm92ZSB0aGlzIGxpbmUgbWVudGlvbnMgdGhhdCBgQUxMT0NfTk9GUkFHTUVOVGAgY2FuIGJlIHNldCwgaGludGluZyBhdCBmcmFnbWVudGF0aW9uIGNvbmNlcm5zLiBUaGUgcHJlc2VuY2Ugb2YgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgdGhlIGdpdmVuIGBnZnBgIGZsYWdzIHRvIGJlc3Qgb3B0aW1pemUgZm9yIHRoZSBjdXJyZW50IHRhc2smIzM5O3MgbmVlZHMuIEkgc2hvdWxkIHJldmlldyB0aGF0IGZ1bmN0aW9uLgoKVGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCAqYmVmb3JlKiB0aGUgYWxsb2NhdGlvbiBwcmVwYXJhdGlvbi4gVGhpcyBtYWtlcyBtZSBzdXNwZWN0IHRoZSBtb2RpZmljYXRpb24gb2YgYGdmcGAgaXMgaW50ZW5kZWQgdG8gaW5mbHVlbmNlIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyAqc2V0IHVwKiBieSBgcHJlcGFyZV9hbGxvY19wYWdlcygpYC4gUGVyaGFwcyB0aGUgY29udGV4dCBoZWxwcyBkZWNpZGUgb24gbm9kZSBzZWxlY3Rpb24gb3Igb3RoZXIgdHVuaW5nIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBhdHRlbXB0cyBldmVuIGJlZ2luLiBHaXZlbiB3aGVyZSBpdCBpcywgaXQmIzM5O3Mgbm90IGxpa2VseSB0byBiZSBzb21ldGhpbmcgdGhhdCBkeW5hbWljYWxseSBjaGFuZ2VzICpkdXJpbmcqIGFsbG9jYXRpb247IHRoZSBhbGxvY2F0aW9uIGF0dGVtcHQgZWl0aGVyIGdldHMgc3RhcnRlZCwgYW5kIHRoZW4gYXR0ZW1wdHMgaGFwcGVuLCBvciB3ZSBmYWlsIGVhcmx5LiBJJiMzOTttIGd1ZXNzaW5nIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlzIGNoYW5naW5nLCBmb3IgaW5zdGFuY2UsIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gc2hvdWxkIGFsbG93IGZyYWdtZW50YXRpb24gb3Igbm90IGJhc2VkIG9uIHRoZSBwcm9jZXNzIHR5cGUuCgpPdmVyYWxsLCBpdCYjMzk7cyBhIG1pbm9yIGNoYW5nZSwgYnV0IGl0IGNvdWxkIGhhdmUgYSBub3RpY2VhYmxlIGltcGFjdCBpZiB0aGUgY29udGV4dCBpcyBzaWduaWZpY2FudGx5IGluZmx1ZW5jaW5nIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGludG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhhdCBmbGFnIGdldHMgc2V0IGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHRoZW4gZGV0ZXJtaW5lIGhvdyB0aGlzIGNoYW5nZSBpcyBnb2luZyB0byBpbXBhY3QgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTk1Olx0XG41MTk2Olx0I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG41MTk3Olx0XHQvKlxuNTE5ODpcdFx0ICogUEFHRV9PV05FUiBtYXkgcmVjdXJzZSBpbnRvIHRoZSBhbGxvY2F0b3IgdG8gYWxsb2NhdGUgc3BhY2UgdG9cbjUxOTk6XHRcdCAqIHNhdmUgdGhlIHN0YWNrIHdpdGggcGFnZXNldHMubG9jayBoZWxkLiBSZWxlYXNpbmcvcmVhY3F1aXJpbmdcbjUyMDA6XHRcdCAqIHJlbW92ZXMgbXVjaCBvZiB0aGUgcGVyZm9ybWFuY2UgYmVuZWZpdCBvZiBidWxrIGFsbG9jYXRpb24gc29cbjUyMDE6XHRcdCAqIGZvcmNlIHRoZSBjYWxsZXIgdG8gYWxsb2NhdGUgb25lIHBhZ2UgYXQgYSB0aW1lIGFzIGl0JiMzOTtsbCBoYXZlXG41MjAyOlx0XHQgKiBzaW1pbGFyIHBlcmZvcm1hbmNlIHRvIGFkZGVkIGNvbXBsZXhpdHkgdG8gdGhlIGJ1bGsgYWxsb2NhdG9yLlxuNTIwMzpcdFx0ICovXG41MjA0Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG41MjA1Olx0XHRcdGdvdG8gZmFpbGVkO1xuNTIwNjpcdCNlbmRpZlxuNTIwNzpcdFxuNTIwODpcdFx0LyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi9cbjUyMDk6XHRcdGdmcCBcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XG41MjEwOlx0XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG41MjExOlx0XHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuNTIxMjpcdFx0XHRnb3RvIG91dDtcbjUyMTM6XHRcbjUyMTQ6XHRcdC8qIEZpbmQgYW4gYWxsb3dlZCBsb2NhbCB6b25lIHRoYXQgbWVldHMgdGhlIGxvdyB3YXRlcm1hcmsuICovXG41MjE1Olx0XHR6ID0gYWMucHJlZmVycmVkX3pvbmVyZWY7XG41MjE2Olx0XHRmb3JfbmV4dF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIGFjLmhpZ2hlc3Rfem9uZWlkeCwgYWMubm9kZW1hc2spIHtcbjUyMTc6XHRcdFx0dW5zaWduZWQgbG9uZyBtYXJrO1xuNTIxODpcdFxuNTIxOTpcdFx0XHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXHUwMDI2XHUwMDI2IChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcdTAwMjZcdTAwMjZcbjUyMjA6XHRcdFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xuNTIyMTpcdFx0XHRcdGNvbnRpbnVlO1xuNTIyMjpcdFx0XHR9XG41MjIzOlx0XG41MjI0Olx0XHRcdGlmIChucl9vbmxpbmVfbm9kZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXHUwMDI2XHUwMDI2XG41MjI1Olx0XHRcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcbjUyMjY6XHRcdFx0XHRnb3RvIGZhaWxlZDtcbjUyMjc6XHRcdFx0fVxuNTIyODpcdFxuNTIyOTpcdFx0XHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xuNTIzMDpcdHJldHJ5X3RoaXNfem9uZTpcbjUyMzE6XHRcdFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19XTUFSS19NQVNLKSAmIzQzOyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcbjUyMzI6XHRcdFx0aWYgKHpvbmVfd2F0ZXJtYXJrX2Zhc3Qoem9uZSwgMCwgIG1hcmssXG41MjMzOlx0XHRcdFx0XHR6b25lbGlzdF96b25lX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZiksXG41MjM0Olx0XHRcdFx0XHRhbGxvY19mbGFncywgZ2ZwKSkge1xuNTIzNTpcdFx0XHRcdGJyZWFrO1xuNTIzNjpcdFx0XHR9XG41MjM3Olx0XG41MjM4Olx0XHRcdGlmIChjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpKVxuNTIzOTpcdFx0XHRcdGdvdG8gcmV0cnlfdGhpc196b25lO1xuNTI0MDpcdFxuNTI0MTpcdFx0XHQvKiBUcnkgYWdhaW4gaWYgem9uZSBoYXMgZGVmZXJyZWQgcGFnZXMgKi9cbjUyNDI6XHRcdFx0aWYgKGRlZmVycmVkX3BhZ2VzX2VuYWJsZWQoKSkge1xuNTI0MzpcdFx0XHRcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIDApKVxuNTI0NDpcdFx0XHRcdFx0Z290byByZXRyeV90aGlzX3pvbmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBjdXJyZW50X2dmcF9jb250ZXh0YCBhbmQgaXRzIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIGl0cyBkZWZpbml0aW9uIGFuZCB3aGF0IGl0IGFjdHVhbGx5ICpkb2VzKiBhdCB0aGUgbG93ZXN0IGxldmVsLiBVbmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgaXMga2V5LiBBZnRlciB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgb3RoZXIgYWxsb2NhdG9ycywgYm90aCB3aXRoaW4gdGhlIGV4aXN0aW5nIHN5c3RlbSBhbmQgcGVyaGFwcyBldmVuIHNvbWUgZXh0ZXJuYWwgb25lcyBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIGxldmVyYWdlIHRoaXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGludGVncmF0ZSBpdCBpbnRvIHRoZWlyIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBkZXNpZ24gcGF0dGVybnMgYmVpbmcgdXNlZC4gVGhlIGdvYWwgaXMgdG8gZ2FpbiBhIHN0cm9uZyB1bmRlcnN0YW5kaW5nIG9mIGJlc3QgcHJhY3RpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdXJyZW50X2dmcF9jb250ZXh0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDE0NT1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXG5tbS9odWdlX21lbW9yeS5jOjQyMTU6XHRcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQobWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmMtNDIxNi1cdFx0XHRcdFx0XHRcdEdGUF9SRUNMQUlNX01BU0spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNzUyPWFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zNzg0LVxubW0vcGFnZV9hbGxvYy5jOjM3ODU6LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDM4Mz12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcbm1tL3BhZ2VfYWxsb2MuYzo0Mzg1Olx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDAwPXZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xubW0vcGFnZV9hbGxvYy5jOjQ0MDI6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjA5LVx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbm1tL3BhZ2VfYWxsb2MuYzo1MjEwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTUyMTEtXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MTktXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo1NDIwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0MjEtXHRhbGxvY19nZnAgPSBnZnA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MzEyLVxubW0vcGFnZV9hbGxvYy5jOjczMTM6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTczMTQtXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcdTAwMjZjYy5nZnBfbWFzaykpXG4tLVxubW0vcGVyY3B1LmM9MTczNT12b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxuLS1cbm1tL3BlcmNwdS5jLTE3NDktXG5tbS9wZXJjcHUuYzoxNzUwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGVyY3B1LmMtMTc1MS1cdC8qXG4tLVxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02Nzc0LVx0XHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXG5tbS92bXNjYW4uYzo2Nzc1Olx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTY3NzYtXHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbi0tXG5tbS92bXNjYW4uYz02ODU1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjg2NS1cdFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jOjY4NjY6XHRcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxubW0vdm1zY2FuLmMtNjg2Ny1cdFx0XHRcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcdTAwMjYgfkdGUF9SRUNMQUlNX01BU0spLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4NzY9dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS92bXNjYW4uYy03ODgyLVx0XHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXG5tbS92bXNjYW4uYzo3ODgzOlx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTc4ODQtXHRcdC5vcmRlciA9IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jPTc5NTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMzUtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcbm1tL3Ztc2Nhbi5jOjgwMzY6XHRcdFx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jLTgwMzctXHRcdFx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBjdXJyZW50X2dmcF9jb250ZXh0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBNeSBpbW1lZGlhdGUgaW1wdWxzZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YC4gSSBuZWVkIHRvIHN0YXJ0IHdpdGggdGhlIGZ1bmRhbWVudGFsIGRlZmluaXRpb24uIEnigJltIHRoaW5raW5nLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIEkga25vdyBjb250ZXh0IGlzICpjcml0aWNhbCouIFRoaXMgaXMgKnRoZSogcGxhY2UgdG8gc3RhcnQuIFdoYXQgZG9lcyB0aGlzIHRlcm0gYWN0dWFsbHkgKm1lYW4qIGluIHRoaXMgc3BlY2lmaWMgc2V0dGluZz8gV2hhdCBpcyBpdCBpbnRlbmRlZCB0byByZXByZXNlbnQ/IElzIGl0IGEgY2xhc3MsIGEgdmFyaWFibGUsIGEgZnVuY3Rpb24sIGEgbW9kdWxlLi4uIHRoaXMgaXMga2V5LiBLbm93aW5nIHRoZSBkYXRhIHR5cGUvc3RydWN0dXJlLCBob3cgaXQmIzM5O3MgdXNlZCwgaG93IGl0JiMzOTtzIGRlZmluZWQsIHdpbGwgYmUgdGhlIGJhc2lzIGZvciBldmVyeXRoaW5nIGVsc2UuIEkmIzM5O2xsIG5lZWQgdG8ga25vdy4gV2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGxvb2tpbmcgZm9yIGFuIGFjdHVhbCBjb2RlIGRlZmluaXRpb24gb3IgZG9jdW1lbnRhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHJvbGUuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTIxNT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fdmZvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0Ny0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNDg6c3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF90IGZsYWdzKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCBEZXRhaWxzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgbW9yZSBkZWVwbHkgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGFyb3VuZCBsaW5lIDI0OC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBwcm9jZXNzIG1lbW9yeSBtYW5hZ2VtZW50IHRoZXJlLCBvciBhdCBsZWFzdCBhIGtleSBkYXRhIHN0cnVjdHVyZSBvciBmdW5jdGlvbiBkZWZpbml0aW9uIHRoYXQgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGFyZWEsIHNvIGxldCYjMzk7cyBnZXQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdH1cbiAyNDE6XHRcbiAyNDI6XHQvKlxuIDI0MzpcdCAqIEFwcGxpZXMgcGVyLXRhc2sgZ2ZwIGNvbnRleHQgdG8gdGhlIGdpdmVuIGFsbG9jYXRpb24gZmxhZ3MuXG4gMjQ0Olx0ICogUEZfTUVNQUxMT0NfTk9JTyBpbXBsaWVzIEdGUF9OT0lPXG4gMjQ1Olx0ICogUEZfTUVNQUxMT0NfTk9GUyBpbXBsaWVzIEdGUF9OT0ZTXG4gMjQ2Olx0ICogUEZfTUVNQUxMT0NfUElOICBpbXBsaWVzICFHRlBfTU9WQUJMRVxuIDI0NzpcdCAqL1xuIDI0ODpcdHN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcbiAyNDk6XHR7XG4gMjUwOlx0XHR1bnNpZ25lZCBpbnQgcGZsYWdzID0gUkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlZmxhZ3MpO1xuIDI1MTpcdFxuIDI1MjpcdFx0aWYgKHVubGlrZWx5KHBmbGFncyBcdTAwMjYgKFBGX01FTUFMTE9DX05PSU8gfCBQRl9NRU1BTExPQ19OT0ZTIHwgUEZfTUVNQUxMT0NfUElOKSkpIHtcbiAyNTM6XHRcdFx0LypcbiAyNTQ6XHRcdFx0ICogTk9JTyBpbXBsaWVzIGJvdGggTk9JTyBhbmQgTk9GUyBhbmQgaXQgaXMgYSB3ZWFrZXIgY29udGV4dFxuIDI1NTpcdFx0XHQgKiBzbyBhbHdheXMgbWFrZSBzdXJlIGl0IG1ha2VzIHByZWNlZGVuY2VcbiAyNTY6XHRcdFx0ICovXG4gMjU3Olx0XHRcdGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX05PSU8pXG4gMjU4Olx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpO1xuIDI1OTpcdFx0XHRlbHNlIGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX05PRlMpXG4gMjYwOlx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+X19HRlBfRlM7XG4gMjYxOlx0XG4gMjYyOlx0XHRcdGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX1BJTilcbiAyNjM6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xuIDI2NDpcdFx0fVxuIDI2NTpcdFx0cmV0dXJuIGZsYWdzO1xuIDI2NjpcdH1cbiAyNjc6XHRcbiAyNjg6XHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAyNjk6XHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKTtcbiAyNzA6XHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKTtcbiAyNzE6XHRleHRlcm4gdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spO1xuIDI3MjpcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzayk7XG4gMjczOlx0I2Vsc2VcbiAyNzQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCkgeyB9XG4gMjc1Olx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxuIDI3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxuIDI3NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxuIDI3ODpcdCNlbmRpZlxuIDI3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkzCgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDY2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgbWlzc2luZyBhIGNydWNpYWwgY2FsbCB0byBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgbWFza2luZyBvdXQgY2VydGFpbiBHRlAgZmxhZ3MsIHNwZWNpZmljYWxseSBgX19HRlBfSU9gLCBgX19HRlBfRlNgLCBhbmQgYF9fR0ZQX01PVkFCTEVgLCBiYXNlZCBvbiB0aGUgY3VycmVudCB0YXNrJiMzOTtzIGZsYWdzLiBUaGluayBvZiBmdW5jdGlvbnMgbGlrZSBgbWVtYWxsb2Nfbm9pb19zYXZlKClgIGFuZCBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIOKAkyB0aGV5IHNldCB0aGVzZSBmbGFncy4KClRoZSBwcm9ibGVtPyBXaXRob3V0IHRoYXQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGNhbGwsIGlmIGNvZGUgcnVubmluZyB1bmRlciBgUEZfTUVNQUxMT0NfTk9GU2Agb3IgYFBGX01FTUFMTE9DX05PSU9gIGNhbGxlZCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCB0aGUgR0ZQIG1hc2sgY291bGQgc3RpbGwgaGF2ZSBgX19HRlBfRlNgIG9yIGBfX0dGUF9JT2AgZW5hYmxlZC4gVGhpcyBvcGVucyB0aGUgZG9vciB0byBwb3RlbnRpYWwgbG9ja2RlcCB3YXJuaW5ncyBvciBldmVuIGRlYWRsb2NrcywgZXNwZWNpYWxseSBpZiBmaWxlc3lzdGVtIG9yIElPIHJlY2xhaW0gaXMgdHJpZ2dlcmVkIHJlY3Vyc2l2ZWx5LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVlIHRvIGluY29ycmVjdCBHRlAgZmxhZyBwcm9wYWdhdGlvbi4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBhbnN3ZXIsIGFzIEkgc2VlIGl0LCBpcyBhIGRlZmluaXRpdmUgJiMzNDtuby4mIzM0OyBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nOgoKMS4gIGBnZnBgIGlzIGp1c3QgYSBzaW1wbGUgcHJpbWl0aXZlIOKAkyBhbiBgdW5zaWduZWQgaW50YCBvciBgZ2ZwX3RgLiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBoZXJlLgoyLiAgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgICpvbmx5KiBjbGVhcnMgZmxhZ3MgYmFzZWQgb24gYGN1cnJlbnQtJmd0O2ZsYWdzYC4gSXQgZG9lc24mIzM5O3QgbW9kaWZ5IHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBgZ2ZwYCBpbiBhbnkgd2F5LCBzaGFwZSBvciBmb3JtLgozLiAgVGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIGFueSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXNuJiMzOTt0IGNvcHkgYW55dGhpbmcgdG8gdXNlcnNwYWNlLCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSBtZW1vcnkgd2l0aG91dCB6ZXJvaW5nLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBpc3N1ZXMgd2l0aCBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGJ1ZmZlciBib3VuZHMuIEV2ZXJ5dGhpbmcgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYXMgaXQgc2hvdWxkLgo0LiAgSWYgdGhlcmUgYXJlIGFueSBkZWFkbG9ja3Mgb3IgcmVjbGFpbSBpc3N1ZXMsIHRob3NlIGFyZSBzdHJpY3RseSBsb2NraW5nIG9yIHJlY2xhaW0gYnVncywgd2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAuCgpHaXZlbiBhbGwgb2YgdGhpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBLTVNBTiBpcyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5IGhlcmUuIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG5lZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha3MuCgpBbmQgdGhhdCBicmluZ3MgbWUgdG8gYSBjcnVjaWFsIHBvaW50IGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgYWxyZWFkeSBpbmNvcnBvcmF0ZSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlJiMzOTtzIG5vIHBvaW50IGluIHJ1bm5pbmcgS01TQU4gaWYgdGhlIHBvdGVudGlhbCBidWcgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciB0aGUgb3RoZXIgc3RhbmRhcmQgdG9vbHMuIEtNU0FOIGlzIGZvciBjYXRjaGluZyB0aGluZ3MgKm5vdCogY2F1Z2h0IGJ5IEtBU0FOLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY3JpdGVyaWEuIFRvIHJlaXRlcmF0ZToKCiogICBUaGUgY29kZSBjaGFuZ2VzIHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIGFyZSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuIFllcywgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBsb2NraW5nLgoqICAgQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLiBZZXMsIHRoaXMgaXMgY29ycmVjdC4KKiAgIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQ29ycmVjdCwgYXMgZXhwbGFpbmVkIGFib3ZlLgoKVGhlcmVmb3JlLCBpdCBpcyBjbGVhciB0aGF0IEkgd2lsbCBpbnZva2UgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIHByb3ZpZGUgdGhlIGFib3ZlIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuVGhpcyBjaGFuZ2UgbWFuaXB1bGF0ZXMgR0ZQIGFsbG9jYXRpb24gZmxhZyBiaXRzIG9uIGEgc2NhbGFyIGBnZnBfdGAgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcHJldmVudGVkIG9yIGluZmx1ZW5jZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIGZpbGVzeXN0ZW0vSU8gcmVjbGFpbSByZWN1cnNpb24gYW5kIGxvY2tpbmcgZGVhZGxvY2tzICh3aGljaCBhcmUgdHJhY2tlZCBieSBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cblxuVGhpcyBjaGFuZ2UgbWFuaXB1bGF0ZXMgR0ZQIGFsbG9jYXRpb24gZmxhZyBiaXRzIG9uIGEgc2NhbGFyIGBnZnBfdGAgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcHJldmVudGVkIG9yIGluZmx1ZW5jZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIGZpbGVzeXN0ZW0vSU8gcmVjbGFpbSByZWN1cnNpb24gYW5kIGxvY2tpbmcgZGVhZGxvY2tzICh3aGljaCBhcmUgdHJhY2tlZCBieSBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNDoxOS44MzA0NDc3ODhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0MjY3ODg4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIixcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cXG5cXG5UaGlzIGNoYW5nZSBtYW5pcHVsYXRlcyBHRlAgYWxsb2NhdGlvbiBmbGFnIGJpdHMgb24gYSBzY2FsYXIgYGdmcF90YCB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGhlYXAvc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBwcmV2ZW50ZWQgb3IgaW5mbHVlbmNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gZmlsZXN5c3RlbS9JTyByZWNsYWltIHJlY3Vyc2lvbiBhbmQgbG9ja2luZyBkZWFkbG9ja3MgKHdoaWNoIGFyZSB0cmFja2VkIGJ5IExPQ0tERVApLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gYXBwbHkgY3VycmVudF9nZnBfY29udGV4dCgpIHRvIHRoZSBHRlAgZmxhZ3MsIGVuZm9yY2luZyBzY29wZWQgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMgKGUuZy4sIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX1BJTikuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG9wZXJhdGlvbnMgdGhhdCBwZXJmb3JtIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIChzdWNoIGFzIGNvcHlfc3BsaWNlX3JlYWQsIGJ0cmZzIHBhZ2UgYWxsb2NhdGlvbiwgb3Igdm1hbGxvYykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbG9ja2RlcC9mc19yZWNsYWltIHZpb2xhdGlvbnMsIG9yIGFsbG9jYXRpb24gYW5vbWFsaWVzIGFyZSB0cmlnZ2VyZWQgdW5kZXIgY29uc3RyYWluZWQgY29udGV4dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE0OjE5LjgzMDQ1NzQ4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMjY2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDFmZDRkYjI0N2I3OTBjYmRhNzVlYzRhY2QzNTU1N2Q2MTA5MjM3ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMzoxNDoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC01MjA3LDYgKzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcbiBcXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xcbiBcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG4rXFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbiBcXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXFx1MDAyNmFjLCBcXHUwMDI2Z2ZwLCBcXHUwMDI2YWxsb2NfZmxhZ3MpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE0OjIwLjQyMzQxOTE0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA3NDkyMDI1ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBhcHBseSBjdXJyZW50X2dmcF9jb250ZXh0KCkgdG8gdGhlIEdGUCBmbGFncywgZW5mb3JjaW5nIHNjb3BlZCBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoZS5nLiwgUEZfTUVNQUxMT0NfTk9GUywgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfUElOKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm0gYnVsayBwYWdlIGFsbG9jYXRpb24gKHN1Y2ggYXMgY29weV9zcGxpY2VfcmVhZCwgYnRyZnMgcGFnZSBhbGxvY2F0aW9uLCBvciB2bWFsbG9jKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgYWxsb2NhdGlvbiBhbm9tYWxpZXMgYXJlIHRyaWdnZXJlZCB1bmRlciBjb25zdHJhaW5lZCBjb250ZXh0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMWZkNGRiMjQ3Yjc5MGNiZGE3NWVjNGFjZDM1NTU3ZDYxMDkyMzdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDM6MTQ6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyMDcsNiArNTIwNyw3IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcbiBcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXG4gXHRnZnAgXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xuK1x0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xuIFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNDoyMC40MjM0MjEwMTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODMzNTk3MjU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGRpZmYgZm9yIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgdGhpcyBjaGFuZ2UgaGFzIG9uIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXRoLiBMZXQncyBzZWUuLi4gdGhleSd2ZSBhZGRlZCBgZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO2AgcmlnaHQgYmVmb3JlIHRoZSBjYWxsIHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYC4gIFRoaXMgbGluZSBpcyBpbnNlcnRlZCB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhleSdyZSB0cnlpbmcgdG8gcmVmaW5lIHRoZSBgZ2ZwYCBmbGFncywgcHJvYmFibHkgYmFzZWQgb24gc29tZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiBHaXZlbiB0aGUgbmFtaW5nLCBgY3VycmVudF9nZnBfY29udGV4dGAgbGlrZWx5IHJldHJpZXZlcyBzb21lIHJlbGV2YW50IGNvbnRleHQg4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyBvciB0YXNrIOKAkyBhbmQgdXNlcyBpdCB0byBwb3RlbnRpYWxseSBtb2RpZnkgdGhlIGBnZnBgIGZsYWdzLiBUaGlzIGNvdWxkIGJlIGFib3V0IHRoaW5ncyBsaWtlIE5VTUEgYWZmaW5pdHksIG9yIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljaWVzLCBvciBvdGhlciBzeXN0ZW0tbGV2ZWwgcmVzdHJpY3Rpb25zLiAgVGhlIHVzZSBvZiBgY3VycmVudF9nZnBfY29udGV4dGAgc3VnZ2VzdHMgdGhleSBhcmUgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiB0aGUgY3VycmVudCB0YXNrJ3Mgc3RhdGUuXG5cbkknZCB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBgY3VycmVudF9nZnBfY29udGV4dGAgZG9lcyBpbiBkZXRhaWwuIEEgZGVlcGVyIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgZ2ZwYCBmbGFncywgaXMgcmVxdWlyZWQgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBhY3QuIEkgYWxzbyBzaG91bGQgYmUgYXdhcmUgdGhhdCBgcHJlcGFyZV9hbGxvY19wYWdlc2AgY291bGQgYmUgYWx0ZXJlZCBiYXNlZCBvbiB0aGlzIG5ldyBgZ2ZwYCB2YWx1ZS4gSXMgaXQgYSBzZWN1cml0eSBmaXg/IFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZ3JlcHBlciBzZWFyY2ggZm9yIGBjdXJyZW50X2dmcF9jb250ZXh0YCB3aWxsIGJlIG15IG5leHQgc3RlcCwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNDo0OC43NTkzOTY1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDI4NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxOTU6XFx0XFxuNTE5NjpcXHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG41MTk3OlxcdFxcdC8qXFxuNTE5ODpcXHRcXHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xcbjUxOTk6XFx0XFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xcbjUyMDA6XFx0XFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xcbjUyMDE6XFx0XFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQnbGwgaGF2ZVxcbjUyMDI6XFx0XFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cXG41MjAzOlxcdFxcdCAqL1xcbjUyMDQ6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG41MjA1OlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMDY6XFx0I2VuZGlmXFxuNTIwNzpcXHRcXG41MjA4OlxcdFxcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXFxuNTIwOTpcXHRcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG41MjEwOlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG41MjExOlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuNTIxMjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjEzOlxcdFxcbjUyMTQ6XFx0XFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cXG41MjE1OlxcdFxcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcXG41MjE2OlxcdFxcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xcbjUyMTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrO1xcbjUyMTg6XFx0XFxuNTIxOTpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjA6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xcbjUyMjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTIyMjpcXHRcXHRcXHR9XFxuNTIyMzpcXHRcXG41MjI0OlxcdFxcdFxcdGlmIChucl9vbmxpbmVfbm9kZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXFx1MDAyNlxcdTAwMjZcXG41MjI1OlxcdFxcdFxcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcXG41MjI2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMjc6XFx0XFx0XFx0fVxcbjUyMjg6XFx0XFxuNTIyOTpcXHRcXHRcXHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xcbjUyMzA6XFx0cmV0cnlfdGhpc196b25lOlxcbjUyMzE6XFx0XFx0XFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgKyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcXG41MjMyOlxcdFxcdFxcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxcbjUyMzM6XFx0XFx0XFx0XFx0XFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxcbjUyMzQ6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTQ6NDguNzYxNDA3OTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDU5OTU0MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoaXMuIEknbSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgdGhpcyBjbGVhcmx5IGludm9sdmVzIGJ1bGsgYWxsb2NhdGlvbiB3aXRob3V0IHByb2ZpbGluZyBvdmVyaGVhZC4gR29vZCB0byBrbm93LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuXCIgVGhlIGtleSBxdWVzdGlvbiBoZXJlIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY3VycmVudCBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0LiBUaGF04oCZcyB3aGVyZSBgY3VycmVudF9nZnBfY29udGV4dGAgY29tZXMgaW4uIEkgc3VzcGVjdCBpdCBob2xkcyB0aGUgZmxhZ3MgZ292ZXJuaW5nIGhvdyB0aGUgcGFnZXMgYXJlIGFsbG9jYXRlZCAoZS5nLiwgd2hldGhlciB0byB3YWl0LCB3aGF0IE5VTUEgbm9kZSB0byBwcmVmZXIsIGV0Yy4pLlxuXG5NeSBuZXh0IHN0ZXAgaXMgbG9naWNhbC4gSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGBjdXJyZW50X2dmcF9jb250ZXh0YCBpcyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhpcyBmdW5jdGlvbi4gU28sIEknbSBnb2luZyB0byBmaXJlIHVwIGEgYGdyZXBgIG9yIHNpbWlsYXIgc2VhcmNoIHRvb2wgdG8gcXVpY2tseSBsb2NhdGUgYWxsIGluc3RhbmNlcyBvZiBgY3VycmVudF9nZnBfY29udGV4dGAuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgY3JpdGljYWwgaW5mb3JtYXRpb24gYW5kIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEtub3dpbmcgdGhvc2UgdXNlIGNhc2VzIHdpbGwgaWxsdW1pbmF0ZSBob3cgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBtYWtlcyB1c2Ugb2YsIGFuZCBsaWtlbHkgb3ZlcnJpZGVzLCB0aGUgZGVmYXVsdCBhbGxvY2F0aW9uIHNldHRpbmdzLCBhbmQgcG90ZW50aWFsbHkgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHQgaW50byBob3cgdGhlIG9wdGltaXphdGlvbiBpcyBhY2NvbXBsaXNoZWQuIFRoZSBjb250ZXh0IGZsYWdzIGFyZSBjcml0aWNhbCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDIxMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTQ6NTMuMzYwOTU1NTU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODk5MzYzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF9nZnBfY29udGV4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnMvZmlsZS5jPTUxMj1zdGF0aWMgYm9vbCBuZnNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5mcy9uZnMvZmlsZS5jLTUxNy1cXHRpZiAoZm9saW9fdGVzdF9wcml2YXRlKGZvbGlvKSkge1xcbmZzL25mcy9maWxlLmM6NTE4OlxcdFxcdGlmICgoY3VycmVudF9nZnBfY29udGV4dChnZnApIFxcdTAwMjYgR0ZQX0tFUk5FTCkgIT0gR0ZQX0tFUk5FTCB8fFxcbmZzL25mcy9maWxlLmMtNTE5LVxcdFxcdCAgICBjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkpXFxuLS1cXG5mcy9uZnMvaW50ZXJuYWwuaD02OTY9c3RhdGljIGlubGluZSBnZnBfdCBuZnNfaW9fZ2ZwX21hc2sodm9pZClcXG5mcy9uZnMvaW50ZXJuYWwuaC02OTcte1xcbmZzL25mcy9pbnRlcm5hbC5oOjY5ODpcXHRnZnBfdCByZXQgPSBjdXJyZW50X2dmcF9jb250ZXh0KEdGUF9LRVJORUwpO1xcbmZzL25mcy9pbnRlcm5hbC5oLTY5OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMTU9c3RhdGljIGlubGluZSBib29sIGluX3Zmb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MjQ4OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yODc9c3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX3JldHJ5X3dhaXQoZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI5My1cXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6Mjk0OlxcdGdmcF9mbGFncyA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjk1LVxcdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQxNDU9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXFxubW0vaHVnZV9tZW1vcnkuYzo0MjE1OlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQobWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYy00MjE2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdEdGUF9SRUNMQUlNX01BU0spO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTM3NTI9YWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzc4NC1cXG5tbS9wYWdlX2FsbG9jLmM6Mzc4NTovKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xcbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzgzPXZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcXG5tbS9wYWdlX2FsbG9jLmM6NDM4NTpcXHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0MDA9dm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spXFxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xcbm1tL3BhZ2VfYWxsb2MuYzo0NDAyOlxcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTIwOS1cXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG5tbS9wYWdlX2FsbG9jLmM6NTIxMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTUyMTEtXFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxOS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTQyMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0MjEtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTczMTItXFxubW0vcGFnZV9hbGxvYy5jOjczMTM6XFx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzMxNC1cXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcXHUwMDI2Y2MuZ2ZwX21hc2spKVxcbi0tXFxubW0vcGVyY3B1LmM9MTczNT12b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxcbi0tXFxubW0vcGVyY3B1LmMtMTc0OS1cXG5tbS9wZXJjcHUuYzoxNzUwOlxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG5tbS9wZXJjcHUuYy0xNzUxLVxcdC8qXFxuLS1cXG5tbS92bXNjYW4uYz02NzY5PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc3NC1cXHRcXHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXFxubW0vdm1zY2FuLmM6Njc3NTpcXHRcXHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcXG5tbS92bXNjYW4uYy02Nzc2LVxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NTU9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NjUtXFx0XFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcXG5tbS92bXNjYW4uYzo2ODY2OlxcdFxcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcXG5tbS92bXNjYW4uYy02ODY3LVxcdFxcdFxcdFxcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NzY9dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODItXFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxcbm1tL3Ztc2Nhbi5jOjc4ODM6XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtNzg4NC1cXHRcXHQub3JkZXIgPSBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc5NTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbi0tXFxubW0vdm1zY2FuLmMtODAzNS1cXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbm1tL3Ztc2Nhbi5jOjgwMzY6XFx0XFx0XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtODAzNy1cXHRcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oPTg4PWludCBzY25wcmludGZfcGFkKGNoYXIgKiBidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICogZm10LCAuLi4pO1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaC05My1cXG50b29scy9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjk0OiNkZWZpbmUgY3VycmVudF9nZnBfY29udGV4dChrKSAwXFxudG9vbHMvaW5jbHVkZS9saW51eC9rZXJuZWwuaC05NS0jZGVmaW5lIHN5bmNocm9uaXplX3JjdSgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE0OjU1Ljk1MDg5ODU3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NDQyNDUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIEkgc2VlIGl0IHN0YXJ0cyBieSBtYXNzYWdpbmcgdGhlIGBnZnBgIGZsYWdzLiBTcGVjaWZpY2FsbHksIGl0J3MgbWFza2luZyB0aGUgYWxsb2NhdGlvbiBmbGFncyB3aXRoIGBnZnBfYWxsb3dlZF9tYXNrYCBhbmQgdGhlbiBjYWxscyBgY3VycmVudF9nZnBfY29udGV4dCgpYC4gVGhhdCBmdW5jdGlvbiBjYWxsIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgc2VlbXMgbGlrZSBhIHBpdm90YWwgcGllY2UsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIGNvbnRleHQgaXMgYWN0dWFsbHkgYmVpbmcgaGFuZGxlZC4gTGV0J3Mgc2VlLi4uIEknbGwgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHJpZ2h0IGF3YXkuIFRoYXQgc2hvdWxkIGJlIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAyNDguIFRpbWUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBkZWNpc2lvbnMgYXJlIG1hZGUgd2l0aGluIHRoZSBzY2hlZHVsZXIncyBwdXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE0OjU4LjU5NTE0NjUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvbW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHQvKlxcbiAyNDM6XFx0ICogQXBwbGllcyBwZXItdGFzayBnZnAgY29udGV4dCB0byB0aGUgZ2l2ZW4gYWxsb2NhdGlvbiBmbGFncy5cXG4gMjQ0OlxcdCAqIFBGX01FTUFMTE9DX05PSU8gaW1wbGllcyBHRlBfTk9JT1xcbiAyNDU6XFx0ICogUEZfTUVNQUxMT0NfTk9GUyBpbXBsaWVzIEdGUF9OT0ZTXFxuIDI0NjpcXHQgKiBQRl9NRU1BTExPQ19QSU4gIGltcGxpZXMgIUdGUF9NT1ZBQkxFXFxuIDI0NzpcXHQgKi9cXG4gMjQ4OlxcdHN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBSRUFEX09OQ0UoY3VycmVudC1cXHUwMDNlZmxhZ3MpO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRcXHRpZiAodW5saWtlbHkocGZsYWdzIFxcdTAwMjYgKFBGX01FTUFMTE9DX05PSU8gfCBQRl9NRU1BTExPQ19OT0ZTIHwgUEZfTUVNQUxMT0NfUElOKSkpIHtcXG4gMjUzOlxcdFxcdFxcdC8qXFxuIDI1NDpcXHRcXHRcXHQgKiBOT0lPIGltcGxpZXMgYm90aCBOT0lPIGFuZCBOT0ZTIGFuZCBpdCBpcyBhIHdlYWtlciBjb250ZXh0XFxuIDI1NTpcXHRcXHRcXHQgKiBzbyBhbHdheXMgbWFrZSBzdXJlIGl0IG1ha2VzIHByZWNlZGVuY2VcXG4gMjU2OlxcdFxcdFxcdCAqL1xcbiAyNTc6XFx0XFx0XFx0aWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX05PSU8pXFxuIDI1ODpcXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpO1xcbiAyNTk6XFx0XFx0XFx0ZWxzZSBpZiAocGZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfTk9GUylcXG4gMjYwOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5fX0dGUF9GUztcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0aWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX1BJTilcXG4gMjYzOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xcbiAyNjQ6XFx0XFx0fVxcbiAyNjU6XFx0XFx0cmV0dXJuIGZsYWdzO1xcbiAyNjY6XFx0fVxcbiAyNjc6XFx0XFxuIDI2ODpcXHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gMjY5OlxcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApO1xcbiAyNzA6XFx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCk7XFxuIDI3MTpcXHRleHRlcm4gdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spO1xcbiAyNzI6XFx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKTtcXG4gMjczOlxcdCNlbHNlXFxuIDI3NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCkgeyB9XFxuIDI3NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCkgeyB9XFxuIDI3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKSB7IH1cXG4gMjc3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxcbiAyNzg6XFx0I2VuZGlmXFxuIDI3OTpcXHRcXG4gMjgwOlxcdC8qIEFueSBtZW1vcnktYWxsb2NhdGlvbiByZXRyeSBsb29wIHNob3VsZCB1c2VcXG4gMjgxOlxcdCAqIG1lbWFsbG9jX3JldHJ5X3dhaXQoKSwgYW5kIHBhc3MgdGhlIGZsYWdzIGZvciB0aGUgbW9zdFxcbiAyODI6XFx0ICogY29uc3RyYWluZWQgYWxsb2NhdGlvbiBhdHRlbXB0IHRoYXQgbWlnaHQgaGF2ZSBmYWlsZWQuXFxuIDI4MzpcXHQgKiBUaGlzIHByb3ZpZGVzIHVzZWZ1bCBkb2N1bWVudGF0aW9uIG9mIHdoZXJlIGxvb3BzIGFyZSxcXG4gMjg0OlxcdCAqIGFuZCBhIGNlbnRyYWwgcGxhY2UgdG8gZmluZSB0dW5lIHRoZSB3YWl0aW5nIGFzIHRoZSBNTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNDo1OC41OTUzMDUwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwNzk0NTY3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiBjb2RlIGZvciBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gd2hlbiB0aGUgc3lzdGVtIGlzIHVuZGVyIHNvbWUga2luZCBvZiBzdHJlc3MsIHBlcmhhcHMgZHVyaW5nIGVhcmx5IGJvb3Qgb3IgaW4gcmVzcG9uc2UgdG8gYSBjcml0aWNhbCBldmVudCB3aGVyZSBwcm9maWxpbmcgaXMgZWl0aGVyIGltcHJhY3RpY2FsIG9yIGRldHJpbWVudGFsLiBUaGUgXCJmcm96ZW5cIiBwYXJ0IGltcGxpZXMgdGhlc2UgcGFnZXMgYXJlIHByb2JhYmx5IG1hbmFnZWQgZGlmZmVyZW50bHksIHBvc3NpYmx5IGJ5cGFzc2luZyBzb21lIG9mIHRoZSBub3JtYWwgYm9va2tlZXBpbmcgYW5kIGFjY291bnRpbmcgb3ZlcmhlYWQuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBjYXJlZnVsbHkgb3B0aW1pemVkLCBwb3RlbnRpYWxseSByZWx5aW5nIG9uIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIG1lbW9yeSBsYXlvdXQgYXNzdW1wdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBidWRkeSBhbGxvY2F0b3Igb3IgYW55IG90aGVyIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gcG9pbnRzIGFuZCBob3cgbWVtb3J5IGNvcnJ1cHRpb24gaXMgYXZvaWRlZC4gS25vd2luZyBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBtZWNoYW5pc21zIHdpbGwgYWxzbyBiZSB2aXRhbC4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY3JpdGljYWwgcGFnZSBhbGxvY2F0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE1OjAxLjY3NDc2NjUyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTA6XFx0XFx0fVxcbjU0MTE6XFx0XFxuNTQxMjpcXHRcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG41NDEzOlxcdFxcdC8qXFxuNTQxNDpcXHRcXHQgKiBBcHBseSBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cy4gVGhpcyBpcyBtYWlubHkgYWJvdXQgR0ZQX05PRlNcXG41NDE1OlxcdFxcdCAqIHJlc3AuIEdGUF9OT0lPIHdoaWNoIGhhcyB0byBiZSBpbmhlcml0ZWQgZm9yIGFsbCBhbGxvY2F0aW9uIHJlcXVlc3RzXFxuNTQxNjpcXHRcXHQgKiBmcm9tIGEgcGFydGljdWxhciBjb250ZXh0IHdoaWNoIGhhcyBiZWVuIG1hcmtlZCBieVxcbjU0MTc6XFx0XFx0ICogbWVtYWxsb2Nfbm97ZnMsaW99X3tzYXZlLHJlc3RvcmV9LiBBbmQgUEZfTUVNQUxMT0NfUElOIHdoaWNoIGVuc3VyZXNcXG41NDE4OlxcdFxcdCAqIG1vdmFibGUgem9uZXMgYXJlIG5vdCB1c2VkIGR1cmluZyBhbGxvY2F0aW9uLlxcbjU0MTk6XFx0XFx0ICovXFxuNTQyMDpcXHRcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxuNTQyMTpcXHRcXHRhbGxvY19nZnAgPSBnZnA7XFxuNTQyMjpcXHRcXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYyxcXG41NDIzOlxcdFxcdFxcdFxcdFxcdTAwMjZhbGxvY19nZnAsIFxcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXFxuNTQyNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG41NDI1OlxcdFxcbjU0MjY6XFx0XFx0aWYgKCEoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0xPQ0spKSB7XFxuNTQyNzpcXHRcXHRcXHQvKlxcbjU0Mjg6XFx0XFx0XFx0ICogRm9yYmlkIHRoZSBmaXJzdCBwYXNzIGZyb20gZmFsbGluZyBiYWNrIHRvIHR5cGVzIHRoYXRcXG41NDI5OlxcdFxcdFxcdCAqIGZyYWdtZW50IG1lbW9yeSB1bnRpbCBhbGwgbG9jYWwgem9uZXMgYXJlIGNvbnNpZGVyZWQuXFxuNTQzMDpcXHRcXHRcXHQgKi9cXG41NDMxOlxcdFxcdFxcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoXFxuNTQzMjpcXHRcXHRcXHRcXHR6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgZ2ZwKTtcXG41NDMzOlxcdFxcdH1cXG41NDM0OlxcdFxcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcCwgb3JkZXIpIFxcdTAwMjYgQUxMT0NfSElHSEFUT01JQztcXG41NDM1OlxcdFxcbjU0MzY6XFx0XFx0LyogRmlyc3QgYWxsb2NhdGlvbiBhdHRlbXB0IChvciwgZm9yIG5vbG9jaywgb25seSBhdHRlbXB0KSAqL1xcbjU0Mzc6XFx0XFx0cGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoYWxsb2NfZ2ZwLCBvcmRlciwgZmFzdHBhdGhfYWxsb2NfZmxhZ3MsIFxcdTAwMjZhYyk7XFxuNTQzODpcXHRcXHRpZiAobGlrZWx5KHBhZ2UpIHx8IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PTE9DSykpXFxuNTQzOTpcXHRcXHRcXHRnb3RvIG91dDtcXG41NDQwOlxcdFxcbjU0NDE6XFx0XFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbjU0NDI6XFx0XFx0YWMuc3ByZWFkX2RpcnR5X3BhZ2VzID0gZmFsc2U7XFxuNTQ0MzpcXHRcXG41NDQ0OlxcdFxcdC8qXFxuNTQ0NTpcXHRcXHQgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBub2RlbWFzayBpZiBpdCB3YXMgcG90ZW50aWFsbHkgcmVwbGFjZWQgd2l0aFxcbjU0NDY6XFx0XFx0ICogXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCB0byBvcHRpbWl6ZSB0aGUgZmFzdC1wYXRoIGF0dGVtcHQuXFxuNTQ0NzpcXHRcXHQgKi9cXG41NDQ4OlxcdFxcdGFjLm5vZGVtYXNrID0gbm9kZW1hc2s7XFxuNTQ0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MDEuNjc1MjkxMTE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1NTk2OTE3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGFuZ2UgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSByZWNlbnQgY2hhbmdlIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEl0IGFwcGVhcnMgdGhhdCBhIGNydWNpYWwgbGluZSBoYXMgYmVlbiBhZGRlZDogYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuICBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgZnVuY3Rpb24gZGlkbid0IGluY2x1ZGUgdGhpcyBjYWxsLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFkZGl0aW9uLiAgVGhpcyBmdW5jdGlvbiBpcyB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdG9yLCBzbyBpdCBoYXMgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gIFRoZSBHRlAgZmxhZ3MgYXJlIGF0IHBsYXkgaGVyZSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgbWVtb3J5LlxuXG5UaGUgY29yZSBxdWVzdGlvbiBub3cgaXMsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhZGRpdGlvbj8gVG8gZmlndXJlIHRoYXQgb3V0LCBJIG5lZWQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa2AgYW5kIGl0cyB2YXJpYW50cyAoYGFsbG9jX3BhZ2VzX2J1bGtfYXJyYXlgLCBgYWxsb2NfcGFnZXNfYnVsa19saXN0YCwgYW5kIHRoZSBtb2RpZmllZCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKSBhcmUgYmVpbmcgKnVzZWQqLiAgV2hhdCBwYXJ0cyBvZiB0aGUga2VybmVsIHJlbHkgb24gdGhpcyBmdW5jdGlvbmFsaXR5PyAgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSBob3cgdGhpcyBjaGFuZ2UgcHJvcGFnYXRlcyBhbmQgd2hhdCBzeXN0ZW1zIGFyZSBub3cgYWZmZWN0ZWQgYnkgdGhpcyBjb250ZXh0dWFsIGNoYW5nZS4gVGltZSB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIHRob3NlIGZ1bmN0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODYyNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE1OjA0LjIzNDk4NTc2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTAxMDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNC1cXHQgKlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDU6XFx0ICogTm90ZTogYWxsb2NfcGFnZXNfYnVsayBuZWVkcyB0aGUgYXJyYXkgdG8gYmUgemVyb2VkLCBhcyBpdCBhc3N1bWVzXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cXHQgKiBhbnkgbm9uLXplcm8gc2xvdCBhbHJlYWR5IGNvbnRhaW5zIGEgdmFsaWQgYWxsb2NhdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXFx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA5OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTAtXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3NlZ3MpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM9MzE9aW50IGZ3X2lzb19idWZmZXJfYWxsb2Moc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgaW50IHBhZ2VfY291bnQpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDEtXFx0Ly8gY29udmVuaWVuY2UgdG8gbWFwIHRoZW0gaW50byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdXNlciBwcm9jZXNzLlxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiB8IF9fR0ZQX1pFUk8sXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfY291bnQsIHBhZ2VfYXJyYXkpO1xcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM9ODQ4PXN0YXRpYyBpbnQgYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLFxcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVxcdC8vIGFkZHJlc3MgcmFuZ2UgaW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS5cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYzo4NjU6XFx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjYtXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI2LVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgYm8tXFx1MDAzZXBnbnIsIGJvLVxcdTAwM2VwYWdlcyk7XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjgtXFx0LypcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcXHQgKiBhbGxvY19wYWdlc19idWxrKCkgZG9lcyBub3QgdHJ5IHZlcnkgaGFyZCB0byBnZXQgcGFnZXMgdW5kZXIgbWVtb3J5XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MzAtXFx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ2Nj1zdGF0aWMgdm9pZCBmcmVlX3BhZ2VfbGlzdCh1MzIgbnBhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NjktXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjQ3MDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NzEtXFx0Zm9yIChpID0gbnBhZ2VzIC0gMTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDk2PXN0YXRpYyBpbnQgbWx4NXZmX2FkZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKipwYWdlX2xpc3QsIHVuc2lnbmVkIGludCBucGFnZXMpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA2LVxcdGZvciAoOzspIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3OlxcdFxcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBucGFnZXMgLSBkb25lLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXFx0XFx0XFx0XFx0XFx0ICAqcGFnZV9saXN0ICsgZG9uZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTc4LVxcdGRvIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6Nzk6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTgwLVxcdFxcdFxcdFxcdFxcdCAgcGFnZV9saXN0KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz0xMTA9c3RhdGljIHZvaWQgdmlydGlvdmZfZnJlZV9kYXRhX2J1ZmZlcihzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTMtXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjExNDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTUtXFx0Zm9yX2VhY2hfc2d0YWJsZV9wYWdlKFxcdTAwMjZidWYtXFx1MDAzZXRhYmxlLnNndCwgXFx1MDAyNnNnX2l0ZXIsIDApXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xcbi0tXFxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxcbi0tXFxuZnMvZXJvZnMvenV0aWwuYy04OS1cXHRcXHRcXHRsYXN0ID0gajtcXG5mcy9lcm9mcy96dXRpbC5jOjkwOlxcdFxcdFxcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XFxuZnMvZXJvZnMvenV0aWwuYy05MS1cXHRcXHRcXHRpZiAobGFzdCA9PSBqKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XFx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVxcdGlmICghbnJfYWxsb2MpXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxcbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXFx1MDAzZW5jbl9wYWdlcyk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVxcdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcXG4tLVxcbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5mcy9zcGxpY2UuYy0zNDEtXFx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICsgbnBhZ2VzKTtcXG5mcy9zcGxpY2UuYzozNDI6XFx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XFxuZnMvc3BsaWNlLmMtMzQzLVxcdGlmICghbnBhZ2VzKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMi1cXHRcXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIxNj12b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxOS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI1OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcXHRfX2FsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyOTphbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIE5VTEwsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzg6I2RlZmluZSBhbGxvY19wYWdlc19idWxrX25vZGUoLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MC1cXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xOTItXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIE5VTUFfTk9fTk9ERSxcXG5pb191cmluZy9tZW1tYXAuYy0xOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBtci1cXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzMzOlxcdFxcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNC1cXHRcXHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jPTM5MT12bV9tYXBfcmFtX3Rlc3Qodm9pZClcXG4tLVxcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDMtXFxubGliL3Rlc3Rfdm1hbGxvYy5jOjQwNDpcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDUtXFx0aWYgKG5yX2FsbG9jYXRlZCAhPSBtYXBfbnJfcGFnZXMpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz01MT1zdGF0aWMgdm9pZCAqX19pbml0IGlvdl9rdW5pdF9jcmVhdGVfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVxcdFxcdGxhc3QgPSBnb3Q7XFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XFx0XFx0Z290ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTc3Nz1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy03OTMtXFxubW0vYWxsb2NfdGFnLmM6Nzk0OlxcdFxcdFxcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLFxcbm1tL2FsbG9jX3RhZy5jLTc5NS1cXHRcXHRcXHRcXHROVU1BX05PX05PREUsIG1vcmVfcGFnZXMgLSBuciwgbmV4dF9wYWdlICsgbnIpO1xcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9MzI3PXN0YXRpYyB2b2lkIF9fX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zMzgtXFxubW0va2FzYW4vc2hhZG93LmM6MzM5OnN0YXRpYyBpbnQgX19fYWxsb2NfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrKVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDQtXFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxubW0va2FzYW4vc2hhZG93LmM6MzQ1OlxcdFxcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XFxubW0va2FzYW4vc2hhZG93LmMtMzQ2LVxcdFxcdGlmICghbnJfcG9wdWxhdGVkKSB7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zNTc9c3RhdGljIGludCBfX2thc2FuX3BvcHVsYXRlX3ZtYWxsb2NfZG8odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMzY5LVxcdFxcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xcbm1tL2thc2FuL3NoYWRvdy5jOjM3MDpcXHRcXHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XFxubW0va2FzYW4vc2hhZG93LmMtMzcxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNTg5PUVYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9wcm9mKTtcXG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxcbm1tL21lbXBvbGljeS5jOjI1OTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNTkyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MDctXFx0XFx0aWYgKGRlbHRhKSB7XFxubW0vbWVtcG9saWN5LmM6MjYwODpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYwOS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtcG9saWN5LmM6MjYxNDpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYxNS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjI1LVxcbm1tL21lbXBvbGljeS5jOjI2MjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2NjQtXFx0XFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XFxubW0vbWVtcG9saWN5LmM6MjY2NTpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI2NjYtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MDEtXFx0LypcXG5tbS9tZW1wb2xpY3kuYzoyNzAyOlxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbm1tL21lbXBvbGljeS5jLTI3MDMtXFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MjktXFx0XFx0XFx0YnJlYWs7XFxubW0vbWVtcG9saWN5LmM6MjczMDpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI3MzEtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NDMtXFxubW0vbWVtcG9saWN5LmM6Mjc0NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTMtXFxubW0vbWVtcG9saWN5LmM6Mjc1NDpcXHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcXHUwMDI2cG9sLVxcdTAwM2Vub2RlcyxcXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVxcdFxcdFxcdFxcdFxcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTctXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKVxcbm1tL21lbXBvbGljeS5jOjI3NTg6XFx0XFx0bnJfYWxsb2NhdGVkICs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMjc1OS1cXHRcXHRcXHRcXHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NjktICovXFxubW0vbWVtcG9saWN5LmM6Mjc3MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc3MS1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODE6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnAsIHBvbCxcXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODU6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVxcdFxcdFxcdFxcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODgtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxcbm1tL21lbXBvbGljeS5jOjI3ODk6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3OTAtXFx0XFx0XFx0XFx0bnVtYV9ub2RlX2lkKCksIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxcbm1tL3BhZ2VfYWxsb2MuYzo1MTQwOiAqIF9fYWxsb2NfcGFnZXNfYnVsayAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIG9yZGVyLTAgcGFnZXMgdG8gYW4gYXJyYXlcXG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NTMwMTpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTUzMDItXFxuLS1cXG5tbS9zbHViLmM9NzQyNj1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzQ3MC0gKlxcbm1tL3NsdWIuYzo3NDcxOiAqIFVubGlrZSBhbGxvY19wYWdlc19idWxrKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGFscmVhZHkgYWxsb2NhdGVkXFxubW0vc2x1Yi5jLTc0NzItICogb2JqZWN0cyBpbiBAcCwgYW5kIHRodXMgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIHplcm8gaXQuXFxuLS1cXG5tbS92bWFsbG9jLmM9MzY3Nj12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNzQzLVxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcXHUwMDI2XFx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxcbm1tL3ZtYWxsb2MuYzozNzQ0OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcXG5tbS92bWFsbG9jLmMtMzc0NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDctXFx0XFx0XFx0ZWxzZVxcbm1tL3ZtYWxsb2MuYzozNzQ4OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcXG5tbS92bWFsbG9jLmMtMzc0OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NjExPXN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjMzLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNDpcXHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFxcXCJlbXB0eVxcXCIgZm9yIGFsbG9jX3BhZ2VzX2J1bGsgKi9cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXFx0bWVtc2V0KFxcdTAwMjZwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzYtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM3OlxcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cXHUwMDNlcC5uaWQsIGJ1bGssXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM4LVxcdFxcdFxcdFxcdFxcdCAoc3RydWN0IHBhZ2UgKiopcG9vbC1cXHUwMDNlYWxsb2MuY2FjaGUpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jPTY4Nz1zdGF0aWMgYm9vbCBzdmNfZmlsbF9wYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cXHRmb3IgKGZpbGxlZCA9IDA7IGZpbGxlZCBcXHUwMDNjIG5wYWdlczsgZmlsbGVkID0gcmV0KSB7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcXHRcXHRyZXQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXFx0XFx0aWYgKHJldCBcXHUwMDNlIGZpbGxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MDYuNDgwMDA0NTQ2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzNTgzMzQ1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbW1pdCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJhdGlvbmFsZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIGBnaXQgbG9nYCwgYnV0IEkgZG9uJ3QgaGF2ZSB0aGF0IHRvb2wgaGFuZHkgZGlyZWN0bHkuIExldCdzIHNlZS4uLiB3aGF0IGRvZXMgdGhlIHBhdGNoIGl0c2VsZiB0ZWxsIG1lPyBBaCwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGBnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7YCB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cyAqd2h5Kj8gV2h5IGFyZSB0aGV5IGRvaW5nIHRoaXM/XG5cblJpZ2h0LCBpdCdzIGhpdHRpbmcgbWUgbm93LiBUaGUgaXNzdWUgaXMgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdhc24ndCByZXNwZWN0aW5nIHRoZSB0YXNrIGZsYWdzISBGbGFncyBsaWtlIGBQRl9NRU1BTExPQ19OT0lPYCwgYFBGX01FTUFMTE9DX05PRlNgLCBhbmQgYFBGX01FTUFMTE9DX1BJTmAgYXJlIGltcG9ydGFudCBjb25zdHJhaW50cy4gVGhlIGBjdXJyZW50X2dmcF9jb250ZXh0YCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmU7IGl0IGxpa2VseSBhcHBsaWVzIHRoZSB0YXNrLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzLCBlZmZlY3RpdmVseSBlbmZvcmNpbmcgdGhvc2UgYFBGXypgIGZsYWdzLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0uIExldCBtZSBqdXN0IGdsYW5jZSBhdCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgcHJlcGFyZV9hbGxvY19wYWdlc2AgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gc2VlIGlmIHRoYXQncyB0aGUgcG9pbnQgd2hlcmUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGlzIHN1cHBvc2VkIHRvIHRha2UgZWZmZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgwMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNTowOS44MzgzNDE3MjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDkwOlxcdFxcbjUwOTE6XFx0c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG41MDkyOlxcdFxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzayxcXG41MDkzOlxcdFxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgZ2ZwX3QgKmFsbG9jX2dmcCxcXG41MDk0OlxcdFxcdFxcdHVuc2lnbmVkIGludCAqYWxsb2NfZmxhZ3MpXFxuNTA5NTpcXHR7XFxuNTA5NjpcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spO1xcbjUwOTc6XFx0XFx0YWMtXFx1MDAzZXpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChwcmVmZXJyZWRfbmlkLCBnZnBfbWFzayk7XFxuNTA5ODpcXHRcXHRhYy1cXHUwMDNlbm9kZW1hc2sgPSBub2RlbWFzaztcXG41MDk5OlxcdFxcdGFjLVxcdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XFxuNTEwMDpcXHRcXG41MTAxOlxcdFxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSkge1xcbjUxMDI6XFx0XFx0XFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcXG41MTAzOlxcdFxcdFxcdC8qXFxuNTEwNDpcXHRcXHRcXHQgKiBXaGVuIHdlIGFyZSBpbiB0aGUgaW50ZXJydXB0IGNvbnRleHQsIGl0IGlzIGlycmVsZXZhbnRcXG41MTA1OlxcdFxcdFxcdCAqIHRvIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dC4gSXQgbWVhbnMgdGhhdCBhbnkgbm9kZSBvay5cXG41MTA2OlxcdFxcdFxcdCAqL1xcbjUxMDc6XFx0XFx0XFx0aWYgKGluX3Rhc2soKSBcXHUwMDI2XFx1MDAyNiAhYWMtXFx1MDAzZW5vZGVtYXNrKVxcbjUxMDg6XFx0XFx0XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG41MTA5OlxcdFxcdFxcdGVsc2VcXG41MTEwOlxcdFxcdFxcdFxcdCphbGxvY19mbGFncyB8PSBBTExPQ19DUFVTRVQ7XFxuNTExMTpcXHRcXHR9XFxuNTExMjpcXHRcXG41MTEzOlxcdFxcdG1pZ2h0X2FsbG9jKGdmcF9tYXNrKTtcXG41MTE0OlxcdFxcbjUxMTU6XFx0XFx0LypcXG41MTE2OlxcdFxcdCAqIERvbid0IGludm9rZSBzaG91bGRfZmFpbCBsb2dpYywgc2luY2UgaXQgbWF5IGNhbGxcXG41MTE3OlxcdFxcdCAqIGdldF9yYW5kb21fdTMyKCkgYW5kIHByaW50aygpIHdoaWNoIG5lZWQgdG8gc3Bpbl9sb2NrLlxcbjUxMTg6XFx0XFx0ICovXFxuNTExOTpcXHRcXHRpZiAoISgqYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0xPQ0spIFxcdTAwMjZcXHUwMDI2XFxuNTEyMDpcXHRcXHQgICAgc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZShnZnBfbWFzaywgb3JkZXIpKVxcbjUxMjE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjUxMjI6XFx0XFxuNTEyMzpcXHRcXHQqYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtcXG41MTI0OlxcdFxcbjUxMjU6XFx0XFx0LyogRGlydHkgem9uZSBiYWxhbmNpbmcgb25seSBkb25lIGluIHRoZSBmYXN0IHBhdGggKi9cXG41MTI2OlxcdFxcdGFjLVxcdTAwM2VzcHJlYWRfZGlydHlfcGFnZXMgPSAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9XUklURSk7XFxuNTEyNzpcXHRcXG41MTI4OlxcdFxcdC8qXFxuNTEyOTpcXHRcXHQgKiBUaGUgcHJlZmVycmVkIHpvbmUgaXMgdXNlZCBmb3Igc3RhdGlzdGljcyBidXQgY3J1Y2lhbGx5IGl0IGlzXFxuNTEzMDpcXHRcXHQgKiBhbHNvIHVzZWQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgem9uZWxpc3QgaXRlcmF0b3IuIEl0XFxuNTEzMTpcXHRcXHQgKiBtYXkgZ2V0IHJlc2V0IGZvciBhbGxvY2F0aW9ucyB0aGF0IGlnbm9yZSBtZW1vcnkgcG9saWNpZXMuXFxuNTEzMjpcXHRcXHQgKi9cXG41MTMzOlxcdFxcdGFjLVxcdTAwM2VwcmVmZXJyZWRfem9uZXJlZiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KGFjLVxcdTAwM2V6b25lbGlzdCxcXG41MTM0OlxcdFxcdFxcdFxcdFxcdFxcdGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGFjLVxcdTAwM2Vub2RlbWFzayk7XFxuNTEzNTpcXHRcXG41MTM2OlxcdFxcdHJldHVybiB0cnVlO1xcbjUxMzc6XFx0fVxcbjUxMzg6XFx0XFxuNTEzOTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNTowOS44Mzg3NjQxNDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjAzNzMzMzUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBgcHJlcGFyZV9hbGxvY19wYWdlc2AqKlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxpbmcuIEFoLCBsaW5lIDUxMjM6IGl0IGxvb2tzIGxpa2UgaXQncyBzZXR0aW5nIGAqYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtgLiBOb3csIEkgcmVjYWxsIHRoYXQgZ3JlcCByZXN1bHQgZnJvbSBlYXJsaWVyLCB0aGF0IGxpbmUgMzc4NSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBtZW50aW9uczogXCIvKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1wiLiBBbmQgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGhlcmUgaXMgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gYGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylgISBPa2F5LCB0aGF0IHJpbmdzIGEgYmVsbC4gTm93IGl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBhbmQgdGhlIHB1cnBvc2Ugb2YgYGFsbG9jX2ZsYWdzX2NtYWAuIExldCdzIHNlZSB3aGF0IHRoYXQncyBhbGwgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MTUuODc2MTAwNjY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5Mjc3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc4NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc4NDpcXHRcXG4zNzg1OlxcdC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovXFxuMzc4NjpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2spXFxuMzc4NzpcXHR7XFxuMzc4ODpcXHQjaWZkZWYgQ09ORklHX0NNQVxcbjM3ODk6XFx0XFx0aWYgKGdmcF9taWdyYXRldHlwZShnZnBfbWFzaykgPT0gTUlHUkFURV9NT1ZBQkxFKVxcbjM3OTA6XFx0XFx0XFx0cmV0dXJuIEFMTE9DX0NNQTtcXG4zNzkxOlxcdCNlbmRpZlxcbjM3OTI6XFx0XFx0cmV0dXJuIEFMTE9DX0RFRkFVTFQ7XFxuMzc5MzpcXHR9XFxuMzc5NDpcXHRcXG4zNzk1OlxcdC8qXFxuMzc5NjpcXHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0IGdvZXMgdGhyb3VnaCB0aGUgem9uZWxpc3QgdHJ5aW5nIHRvIGFsbG9jYXRlXFxuMzc5NzpcXHQgKiBhIHBhZ2UuXFxuMzc5ODpcXHQgKi9cXG4zNzk5OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqXFxuMzgwMDpcXHRnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBhbGxvY19mbGFncyxcXG4zODAxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcXG4zODAyOlxcdHtcXG4zODAzOlxcdFxcdHN0cnVjdCB6b25lcmVmICp6O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNToxNS44NzY5OTgxMDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODk3NTM1NTQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBXb3J0aEZ1enppbmcgZm9yIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBUaGUgY29tbWVudCBvbiBgYWxsb2NfZmxhZ3NfY21hYCBpcyBrZXk6IFwiTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAsIHdoaWNoIGNhbiBjaGFuZ2UgYGdmcF9tYXNrYC5cIiBUaGlzIGxpbmtzIGRpcmVjdGx5IHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzKClgIGFuZCBob3cgYGFsbG9jX2ZsYWdzX2NtYWAgaXMgdXNlZCB3aXRoaW4gaXQsIGFuZCB0aGF0IGZ1bmN0aW9uIHRoZW4gY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSSdtIGFsc28gc2VlaW5nIGBtaWdodF9hbGxvYyhnZnBfbWFzaylgIGJlaW5nIGNhbGxlZCBpbiBgcHJlcGFyZV9hbGxvY19wYWdlcygpYC4gTXkgbWFpbiBjb25jZXJuIGlzLCBpZiBgUEZfTUVNQUxMT0NfTk9GU2AgaXMgc2V0IG9uIHRoZSBjdXJyZW50IHByb2Nlc3MgYW5kIGBhbGxvY19wYWdlc19idWxrYCBpcyBjYWxsZWQgd2l0aCBgR0ZQX0tFUk5FTGAgKHdoaWNoIGluY2x1ZGVzIGBfX0dGUF9GU2ApLCB0aGVuIGBtaWdodF9hbGxvYyhHRlBfS0VSTkVMKWAgY291bGQgY2F1c2UgYSBsb2NrZGVwIG9yIGZzX3JlY2xhaW0gd2FybmluZyBpZiBgZ2ZwYCBpc24ndCBwcm9wZXJseSBzdHJpcHBlZCBvZiBgX19HRlBfRlNgIGZpcnN0LiBPciBtYXliZSwgaXQncyBhIENNQSBpc3N1ZSB3aXRoIGBQRl9NRU1BTExPQ19QSU5gIHdoZXJlIGZsYWdzIGFyZSBiZWluZyBpbXByb3Blcmx5IG1hc2tlZC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgc29tZXRoaW5nIHRvIGZ1enouIExldCdzIHNlZS4uLiBpcyB0aGlzIGNoYW5nZSByZWFjaGFibGU/IFllcywgbW0vcGFnZV9hbGxvYy5jIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc28gdGhhdCdzIGEgY2hlY2sgbWFyay5cblxuSXMgaXQgd29ydGggZnV6emluZz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWEuIFNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCB0aGUgYW5zd2VyIGlzICp1bmVxdWl2b2NhbGx5KiBZRVMuIEFjY29yZGluZyB0byB0aGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYSwgYW55IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYXJlIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBhbmQgdGhpcyBpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIChtbS9wYWdlX2FsbG9jLmMpIHRoYXQgaXMgY2FsbGVkIGluIG5vcm1hbCBvcGVyYXRpb24gKGJ0cmZzLCBmdXNlLCBwYWdlX3Bvb2wsIGV0Yy4pLiBgV29ydGhGdXp6aW5nYCBNVVNUIEJFIFRSVUUuXG5cbk5vdywgaG93IHNob3VsZCBJIGRpcmVjdCB0aGUgZnV6emVyIHRvIG1heGltaXplIGVmZmVjdGl2ZW5lc3M/XG5cblRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBwcmV2ZW50IGRpbHV0aW9uLiBJIG5lZWQgdG8gYXZvaWQgXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuIEJ1dCB3YWl0LCBpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGNvbnNpZGVyZWQgYSB1YmlxdWl0b3VzIGFsbG9jYXRvcj8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyB2ZXJ5IGNhcmVmdWxseS4gTGV0J3MgcmUtcmVhZCB0aG9zZSBpbnN0cnVjdGlvbnM6IFwiRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMuLi4pLlwiIE15IGluaXRpYWwgdGhvdWdodCwgaXMgdGhhdCB0aGUgYWxsb2NhdG9ycyAqYXJlKiBwcmV0dHkgbXVjaCB1YmlxdWl0b3VzLCBzbyB0aGUgaW5zdHJ1Y3Rpb25zIHdvdWxkIHN1Z2dlc3QgdG8gaWdub3JlIHRoZW0uIEhvd2V2ZXIsIGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYSAqZ2VuZXJhbCogbWVtb3J5IGFsbG9jYXRvciwgb3IgaXMgaXQgYSBtb3JlIHNwZWNpZmljIG9uZT8gV2hhdCBjYWxscyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgP1xuXG5Pa2F5LCBmcm9tIHRoZSBncmVwIHJlc3VsdHMsIEkgc2VlIGl0J3MgY2FsbGVkIGJ5OiBjb3B5X3NwbGljZV9yZWFkIGluIGZzL3NwbGljZS5jLCBidHJmc19hbGxvY19wYWdlX2FycmF5LCBmdXNlX3JlYWRkaXJfYWxsb2NfYnVmLCBhcmVuYV9hbGxvY19wYWdlcywgc2V2ZXJhbCBtbS9tZW1wb2xpY3kuYyBmdW5jdGlvbnMsIGFuZCBhIGZldyBvdGhlcnMgZnJvbSBkcml2ZXJzIGFuZCBuZXR3b3JraW5nLiBPa2F5LCBsZXQncyBzdG9wIGZvciBhIG1vbWVudC4gSXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBjYWxsZWQgYnkgYWxtb3N0ICpldmVyeSogcHJvZ3JhbT8gTk8hIFN0YW5kYXJkIGFsbG9jYXRpb24gcGF0aHMgbm9ybWFsbHkgdXNlIGttYWxsb2Mgb3Igdm1hbGxvYyBvciBzaW5nbGUtcGFnZSBhbGxvY2F0aW9ucyAoX19hbGxvY19wYWdlc19ub3Byb2YpLiBJdCBsb29rcyBsaWtlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgZmFpcmx5IHNwZWNpZmljLiBUaGVyZWZvcmUsIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgKm5vdCogYSBcImdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb24uXCJcbk5vdyBJIG5lZWQgdG8gcmUtY2hlY2sgdGhlIHZtYWxsb2MgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MjQuODUyMzU3ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzM1OlxcdFxcdFxcdFxcdCAqL1xcbjM3MzY6XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCA9IG1pbigxMDBVTCwgbnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQpO1xcbjM3Mzc6XFx0XFxuMzczODpcXHRcXHRcXHRcXHQvKiBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgY29uc2lkZXIgbWVtcG9saWN5LCB3ZSBjYW4ndFxcbjM3Mzk6XFx0XFx0XFx0XFx0ICogd3JvbmdseSB1c2UgbmVhcmVzdCBub2RlIHdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSxcXG4zNzQwOlxcdFxcdFxcdFxcdCAqIG90aGVyd2lzZSBtZW1vcnkgbWF5IGJlIGFsbG9jYXRlZCBpbiBvbmx5IG9uZSBub2RlLFxcbjM3NDE6XFx0XFx0XFx0XFx0ICogYnV0IG1lbXBvbGljeSB3YW50cyB0byBhbGxvYyBtZW1vcnkgYnkgaW50ZXJsZWF2aW5nLlxcbjM3NDI6XFx0XFx0XFx0XFx0ICovXFxuMzc0MzpcXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcXG4zNzQ0OlxcdFxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcXG4zNzQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuMzc0NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwYWdlcyArIG5yX2FsbG9jYXRlZCk7XFxuMzc0NzpcXHRcXHRcXHRcXHRlbHNlXFxuMzc0ODpcXHRcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwLCBuaWQsXFxuMzc0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbjM3NTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGFnZXMgKyBucl9hbGxvY2F0ZWQpO1xcbjM3NTE6XFx0XFxuMzc1MjpcXHRcXHRcXHRcXHRmb3IgKGkgPSBucl9hbGxvY2F0ZWQ7IGkgXFx1MDAzYyBucl9hbGxvY2F0ZWQgKyBucjsgaSsrKVxcbjM3NTM6XFx0XFx0XFx0XFx0XFx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2VzW2ldLCBOUl9WTUFMTE9DLCAxKTtcXG4zNzU0OlxcdFxcbjM3NTU6XFx0XFx0XFx0XFx0bnJfYWxsb2NhdGVkICs9IG5yO1xcbjM3NTY6XFx0XFxuMzc1NzpcXHRcXHRcXHRcXHQvKlxcbjM3NTg6XFx0XFx0XFx0XFx0ICogSWYgemVybyBvciBwYWdlcyB3ZXJlIG9idGFpbmVkIHBhcnRseSxcXG4zNzU5OlxcdFxcdFxcdFxcdCAqIGZhbGxiYWNrIHRvIGEgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNToyNC44NTI2NDgzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODIyODMwNjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHZtYWxsb2MgQWxsb2NhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdm1hbGxvY2AgaXMgYWxsb2NhdGluZyBwYWdlcywgc28gSSdtIGRpdmluZyBpbnRvIGBtbS92bWFsbG9jLmNgLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBob3cgYHZtX2FyZWFfYWxsb2NfcGFnZXMoKWAgaXMgYmVpbmcgdXNlZC4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgaXQncyB1c2luZyBlaXRoZXIgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgIG9yIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgZGVhbCB3aXRoIGFsbG9jYXRpbmcgbXVsdGlwbGUgcGFnZXMgYXQgb25jZSwgbGlrZWx5IHRvIG9wdGltaXplIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIGEgbGFyZ2UgYHZtYWxsb2NgIHJlZ2lvbi5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cC4gSXMgYF9fdm1hbGxvY19ub2RlX3JhbmdlYCBjYWxsaW5nIHRoaXMgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGZ1bmN0aW9uPyBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGluIGEgdm1hbGxvYyBjYWxsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gY29uZmlybSB0aGF0IGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZWAgaXMgaW5kZWVkIGludm9raW5nIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCB0byBhbGxvY2F0ZSB0aGUgdW5kZXJseWluZyBwYWdlcy4gTGV0IG1lIGdvIGNoZWNrIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkyNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6MjcuNjc1NDgyMTYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEyOTQ3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1fYXJlYV9hbGxvY19wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTM2NzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXFxubW0vdm1hbGxvYy5jOjM2NzY6dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxubW0vdm1hbGxvYy5jLTM2NzctXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbi0tXFxubW0vdm1hbGxvYy5jPTM4NzM9c3RhdGljIHZvaWQgKl9fdm1hbGxvY19hcmVhX25vZGUoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bWFsbG9jLmMtMzkyMS1cXHQgKi9cXG5tbS92bWFsbG9jLmM6MzkyMjpcXHRhcmVhLVxcdTAwM2Vucl9wYWdlcyA9IHZtX2FyZWFfYWxsb2NfcGFnZXMoXFxubW0vdm1hbGxvYy5jLTM5MjMtXFx0XFx0XFx0dm1hbGxvY19nZnBfYWRqdXN0KGdmcF9tYXNrLCBwYWdlX29yZGVyKSwgbm9kZSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTMxLVxcdFxcdC8qXFxubW0vdm1hbGxvYy5jOjM5MzI6XFx0XFx0ICogdm1fYXJlYV9hbGxvY19wYWdlcygpIGNhbiBmYWlsIGR1ZSB0byBpbnN1ZmZpY2llbnQgbWVtb3J5IGJ1dFxcbm1tL3ZtYWxsb2MuYy0zOTMzLVxcdFxcdCAqIGFsc286LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNToyNy45MzY3ODE5MzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAzNTgyNDI2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2FzIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggd2FzIG1vZGlmeWluZy4gIFJpZ2h0LCBpdCBpcy4gIGB2bWFsbG9jYCBjYWxscyBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIHdoaWNoIHRoZW4gY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgIGFuZCAqdGhhdCogY2FsbHMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBJcyB0aGlzIGZ1bmN0aW9uIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGBGb2N1c1N5bWJvbGAgaW4gZnV6emluZz8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLlxuXG5UaGUgZG9jdW1lbnRhdGlvbiB3YXJucyBhZ2FpbnN0IFwidWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzXCIgbGlrZSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLiAgSXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdWJpcXVpdG91cyo/IEl0J3MgY2FsbGVkIHdoZW4gYHZtYWxsb2NgIGlzIHVzZWQuICBga21hbGxvY2AgaXMgc3VwZXIgY29tbW9uLCBidXQgYHZtYWxsb2NgIGlzIHVzZWQgYSBkZWNlbnQgYW1vdW50IHRvby4gIElzIGl0ICpnZW5lcmljKiBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCB1YmlxdWl0b3VzPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuXG5cbk5vdywgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBub3QgdWJpcXVpdG91cywgSSBtaWdodCBoYXZlIGEgc29saWQgY2FuZGlkYXRlIGZvciBhIEZvY3VzU3ltYm9sIVxuXG5UaGUgcGF0Y2ggYWRkcyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gV2hhdCdzIGBjdXJyZW50X2dmcF9jb250ZXh0YCBkb2luZz8gSXQncyBzZXR0aW5nIGBQRl9NRU1BTExPQ19OT0lPYCwgYFBGX01FTUFMTE9DX05PRlNgLCBhbmQgYFBGX01FTUFMTE9DX1BJTmAuICBgUEZfTUVNQUxMT0NfTk9GU2AgaXMgdXNlZCBkdXJpbmcgZnMgb3BlcmF0aW9ucy90cmFuc2FjdGlvbnMgbGlrZSBidHJmcywgZXh0NCwgYW5kIHhmcy4gYFBGX01FTUFMTE9DX05PSU9gIGlzIGZvciB0aGUgYmxvY2sgbGF5ZXIuIGBQRl9NRU1BTExPQ19QSU5gIGhhcyBtZSB0aGlua2luZyB1c2VyIHBhZ2VzLCBzbyB3aGF0IGNvbnRleHQgaXMgdGhhdD8gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBQRl9NRU1BTExPQ19QSU5gIGlzIHVzZWQuIFRoaXMgY291bGQgYmUgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBzcGVjaWZpY2FsbHkgaW1wb3J0YW50IHRvIHRlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTQwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE1OjM4LjI5NTAyNzc3M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzcwNTYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQRl9NRU1BTExPQ19QSU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC5oPTE3OTA9ZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTgyMy0jZGVmaW5lIFBGX01DRV9FQVJMWVxcdFxcdDB4MDgwMDAwMDAgICAgICAvKiBFYXJseSBraWxsIGZvciBtY2UgcHJvY2VzcyBwb2xpY3kgKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTgyNDojZGVmaW5lIFBGX01FTUFMTE9DX1BJTlxcdFxcdDB4MTAwMDAwMDBcXHQvKiBBbGxvY2F0aW9ucyBjb25zdHJhaW5lZCB0byB6b25lcyB3aGljaCBhbGxvdyBsb25nIHRlcm0gcGlubmluZy5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTgyNS1cXHRcXHRcXHRcXHRcXHRcXHQgKiBTZWUgbWVtYWxsb2NfcGluX3NhdmUoKSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTIxNT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fdmZvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ1LSAqIFBGX01FTUFMTE9DX05PRlMgaW1wbGllcyBHRlBfTk9GU1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNDY6ICogUEZfTUVNQUxMT0NfUElOICBpbXBsaWVzICFHRlBfTU9WQUJMRVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDctICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTI0OD1zdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjUxLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNTI6XFx0aWYgKHVubGlrZWx5KHBmbGFncyBcXHUwMDI2IChQRl9NRU1BTExPQ19OT0lPIHwgUEZfTUVNQUxMT0NfTk9GUyB8IFBGX01FTUFMTE9DX1BJTikpKSB7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI1My1cXHRcXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI2MS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MjYyOlxcdFxcdGlmIChwZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQ19QSU4pXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI2My1cXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00NTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2NfcGluX3NhdmUodm9pZClcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDU2LXtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDU3OlxcdHJldHVybiBtZW1hbGxvY19mbGFnc19zYXZlKFBGX01FTUFMTE9DX1BJTik7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ1OC19XFxuLS1cXG5tbS9odWdldGxiLmM9MTI1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEyNTUtXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG5tbS9odWdldGxiLmM6MTI1NjpcXHRib29sIHBpbiA9ICEhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfUElOKTtcXG5tbS9odWdldGxiLmMtMTI1Ny1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxNi1cXHQgKiBmcm9tIGEgcGFydGljdWxhciBjb250ZXh0IHdoaWNoIGhhcyBiZWVuIG1hcmtlZCBieVxcbm1tL3BhZ2VfYWxsb2MuYzo1NDE3OlxcdCAqIG1lbWFsbG9jX25ve2ZzLGlvfV97c2F2ZSxyZXN0b3JlfS4gQW5kIFBGX01FTUFMTE9DX1BJTiB3aGljaCBlbnN1cmVzXFxubW0vcGFnZV9hbGxvYy5jLTU0MTgtXFx0ICogbW92YWJsZSB6b25lcyBhcmUgbm90IHVzZWQgZHVyaW5nIGFsbG9jYXRpb24uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE1OjM5Ljk2ODc0MDU5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTYyMTgwOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbWVtYWxsb2NfcGluX3NhdmVgIENhbGwgU2l0ZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgY29udGV4dCBvZiBgbWVtYWxsb2NfcGluX3NhdmVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBleGFjdGx5IGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD9cIiBUbyBnZXQgYSBncmFzcCBvbiBpdHMgcm9sZSwgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgZGVzaWduIGludGVudCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgYmVoYXZpb3IuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzIOKAkyBsaWtlbHkgYSBjb21iaW5hdGlvbiBvZiBncmVwIG9yIGFuIElERSdzIHNlYXJjaCBmdW5jdGlvbmFsaXR5LCBjb3VwbGVkIHdpdGggY29kZSBuYXZpZ2F0aW9uIOKAkyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMgd2hlcmUgYG1lbWFsbG9jX3Bpbl9zYXZlYCBpcyBjYWxsZWQuIFRoYXQgY2FsbCBncmFwaCBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNTo0MS45MzA5MjQyNDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODgxMjMxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtYWxsb2NfcGluX3NhdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC5oPTE3OTA9ZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTgyNC0jZGVmaW5lIFBGX01FTUFMTE9DX1BJTlxcdFxcdDB4MTAwMDAwMDBcXHQvKiBBbGxvY2F0aW9ucyBjb25zdHJhaW5lZCB0byB6b25lcyB3aGljaCBhbGxvdyBsb25nIHRlcm0gcGlubmluZy5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTgyNTpcXHRcXHRcXHRcXHRcXHRcXHQgKiBTZWUgbWVtYWxsb2NfcGluX3NhdmUoKSAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xODI2LSNkZWZpbmUgUEZfQkxPQ0tfVFNcXHRcXHQweDIwMDAwMDAwXFx0LyogcGx1ZyBoYXMgdHMgdGhhdCBuZWVkcyB1cGRhdGluZyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ0MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ0NS0vKipcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDQ2OiAqIG1lbWFsbG9jX3Bpbl9zYXZlIC0gTWFya3MgaW1wbGljaXQgfl9fR0ZQX01PVkFCTEUgc2NvcGUuXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ0Ny0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ1NC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDU1OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1lbWFsbG9jX3Bpbl9zYXZlKHZvaWQpXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ1Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDYzLSAqXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ2NDogKiBFbmRzIHRoZSBpbXBsaWNpdCB+X19HRlBfTU9WQUJMRSBzY29wZSBzdGFydGVkIGJ5IG1lbWFsbG9jX3Bpbl9zYXZlIGZ1bmN0aW9uLlxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NjUtICogQWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBmbGFncyBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHBhaXJpbmdcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDY2OiAqIG1lbWFsbG9jX3Bpbl9zYXZlIGNhbGwuXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ2Ny0gKi9cXG4tLVxcbm1tL2d1cC5jPTI0NjA9c3RhdGljIGxvbmcgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vZ3VwLmMtMjQ3My1cXG5tbS9ndXAuYzoyNDc0OlxcdGZsYWdzID0gbWVtYWxsb2NfcGluX3NhdmUoKTtcXG5tbS9ndXAuYy0yNDc1LVxcdGRvIHtcXG4tLVxcbm1tL2d1cC5jPTM0MzY9bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxubW0vZ3VwLmMtMzQ2NC1cXG5tbS9ndXAuYzozNDY1OlxcdGZsYWdzID0gbWVtYWxsb2NfcGluX3NhdmUoKTtcXG5tbS9ndXAuYy0zNDY2LVxcdGRvIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6NDMuNTE5MDU2NDk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2ODg2MDY4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIERldGVybWluYXRpb246IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgRm9jdXNTeW1ib2xzIGxpc3QsIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbiBpcyBpbiB0aGlzIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiAgVGhlIGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzaywgaXMgdGhpcyBhIFwiZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yXCIgd2Ugc2hvdWxkIGF2b2lkIGxpc3Rpbmc/ICBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIGhlcmUuIGBrbWFsbG9jX25vcHJvZmAsIGBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZmAsIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAsIGBhbGxvY19wYWdlc2Ag4oCTIHRob3NlIGFyZSB0aGUgZ2VuZXJpYyBhbGxvY2F0b3JzIHRoYXQgKmV2ZXJ5KiBzeXNjYWxsIHRvdWNoZXMuIFRoZXnigJlyZSBjYWxsZWQgb24gYWxtb3N0IGV2ZXJ5IHNpbmdsZSBvcGVuLCByZWFkLCB3cml0ZSwgc29ja2V0LCBmb3JrLCBleGVjLCBldGMuXG5cbkJ1dCBkb2VzIGV2ZXJ5IHByb2dyYW0gY2FsbCBgYWxsb2NfcGFnZXNfYnVsa2A/IE5vLCB0aGF04oCZcyB0aGUgY3JpdGljYWwgZGlzdGluY3Rpb24uIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgKm5vdCogdWJpcXVpdG91cyBpbiB0aGUgd2F5IHRob3NlIG90aGVyIGZ1bmN0aW9ucyBhcmUuIEl0J3MgdXNlZCBmb3IgYnVsayBwYWdlIGFsbG9jYXRpb25zLiBJIGtub3cgdGhhdCBgdm1hbGxvY2AgaXMgY2FsbGVkIGZhciBsZXNzIGZyZXF1ZW50bHkgYW5kIGlzIG9ubHkgdXNlZCBmb3IgdmVyeSBsYXJnZSBhbGxvY2F0aW9ucywgbGlrZSBicGYgcHJvZyBhbGxvYywgY2VydGFpbiBtb2R1bGVzLCBsYXJnZSBpb2N0bCBidWZmZXJzLCBldGMuICBNb3N0IHN5c2NhbGxzIGRvbid0IGNhbGwgYHZtYWxsb2NgLiBJdCBpcyB0aGUgc2FtZSB3aXRoIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuXG5cbk5vdywgZG9lcyBzeXprYWxsZXIgaGl0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gbW9zdCBwcm9ncmFtcz8gTm8uIEl0J3Mgb25seSB1dGlsaXplZCBpbiBwYXJ0aWN1bGFyIHN1YnN5c3RlbXMgYW5kIGZlYXR1cmVzLiBJIHNlZSBpdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50ZWQgYnkgZnVuY3Rpb25zIGxpa2U6XG4qICAgYHZtYWxsb2NgIChmb3Igdm1hbGxvYyBtZW1vcnkpXG4qICAgcGFnZSBwb29sIChpbiBuZXR3b3JrIGRyaXZlcnMpXG4qICAgYnRyZnMgKGBidHJmc19hbGxvY19wYWdlX2FycmF5YClcbiogICBzcGxpY2UgKGBjb3B5X3NwbGljZV9yZWFkYClcbiogICBmdXNlIChgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZmApXG4qICAgYnBmIGFyZW5hIChgYXJlbmFfYWxsb2NfcGFnZXNgKVxuKiAgIGlvX3VyaW5nIChgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYClcbiogICBzdmNfZmlsbF9wYWdlcyAoc3VucnBjKVxuXG5UaGUgY2hhbmdlIGlzIGRpcmVjdGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUgcHJvbXB0IHNheXM6IFwiTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkXCIuIFRoYXQncyBleGFjdGx5IHdoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBkb2VzIGluIHRoaXMgZGlmZi4gVGhlIGluc3RydWN0aW9uJ3MgY2F1dGlvbiBhYm91dCB1YmlxdWl0b3VzIGFsbG9jYXRvcnMgZG9lc24ndCBhcHBseSBiZWNhdXNlIHRoaXMgaXNuJ3QgYSAqZ2VuZXJhbCogbWVtb3J5IGFsbG9jYXRvciBsaWtlIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgb3IgYGttYWxsb2NgLlxuXG5UaGUgcXVlc3Rpb24gYmVjb21lcywgaXMgaXQgYSAqZGlyZWN0KiBlbnRyeXBvaW50IG9mIHRoZSBtb2RpZmllZCBsb2dpYz8gWWVzLCBpdCdzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB3aGVyZSB0aGUgY2hhbmdlIHJlc2lkZXMuIENvbnNpZGVyaW5nIHRoZSBleHBsaWNpdCBjaGFuZ2UgaXMgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAsIGl0J3MgYSBub24taW5saW5lLCBleHBvcnRlZCBzeW1ib2wgYW5kIGEgZGlyZWN0IGVudHJ5cG9pbnQuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgYXJvdW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0byBjaGVjayBmb3IgYW55IENPTkZJRyBvcHRpb25zIG9yIGd1YXJkcyB0aGF0IG1pZ2h0IGFmZmVjdCBpdHMgaW5jbHVzaW9uLiBHaXZlbiB0aGUgZXZpZGVuY2UsIEkgY29uY2x1ZGUgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgICppcyogYSByZWxldmFudCBhbmQgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUxOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6NTMuMjA3NjY2NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTUwOlxcdCAqIE5vdGUgdGhhdCBvbmx5IHRoZSBlbGVtZW50cyBpbiBAcGFnZV9hcnJheSB0aGF0IHdlcmUgY2xlYXJlZCB0byAlTlVMTCBvblxcbjUxNTE6XFx0ICogZW50cnkgYXJlIHBvcHVsYXRlZCB3aXRoIG5ld2x5IGFsbG9jYXRlZCBwYWdlcy4gQG5yX3BhZ2VzIGlzIHRoZSBtYXhpbXVtXFxuNTE1MjpcXHQgKiBudW1iZXIgb2YgcGFnZXMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgYXJyYXkuXFxuNTE1MzpcXHQgKlxcbjUxNTQ6XFx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIEBwYWdlX2FycmF5LCBpbmNsdWRpbmcgb25lcyBhbHJlYWR5XFxuNTE1NTpcXHQgKiBhbGxvY2F0ZWQgb24gZW50cnkuICBUaGlzIGNhbiBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQgaW4gQG5yX3BhZ2VzLFxcbjUxNTY6XFx0ICogYnV0IGFsbCBlbXB0eSBzbG90cyBhcmUgZmlsbGVkIGZyb20gdGhlIGJlZ2lubmluZy4gIEkuZS4sIGlmIGFsbCBzbG90cyBpblxcbjUxNTc6XFx0ICogQHBhZ2VfYXJyYXkgd2VyZSBzZXQgdG8gJU5VTEwgb24gZW50cnksIHRoZSBzbG90cyBmcm9tIDAgdG8gdGhlIHJldHVybiB2YWx1ZVxcbjUxNTg6XFx0ICogLSAxIHdpbGwgYmUgZmlsbGVkLlxcbjUxNTk6XFx0ICovXFxuNTE2MDpcXHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuNTE2MTpcXHRcXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbjUxNjI6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbjUxNjM6XFx0e1xcbjUxNjQ6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNTE2NTpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG41MTY2OlxcdFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbjUxNjc6XFx0XFx0c3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDtcXG41MTY4OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnBjcF9saXN0O1xcbjUxNjk6XFx0XFx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWM7XFxuNTE3MDpcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19XTUFSS19MT1c7XFxuNTE3MTpcXHRcXHRpbnQgbnJfcG9wdWxhdGVkID0gMCwgbnJfYWNjb3VudCA9IDA7XFxuNTE3MjpcXHRcXG41MTczOlxcdFxcdC8qXFxuNTE3NDpcXHRcXHQgKiBTa2lwIHBvcHVsYXRlZCBhcnJheSBlbGVtZW50cyB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2VzIG5lZWRcXG41MTc1OlxcdFxcdCAqIHRvIGJlIGFsbG9jYXRlZCBiZWZvcmUgZGlzYWJsaW5nIElSUXMuXFxuNTE3NjpcXHRcXHQgKi9cXG41MTc3OlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcyBcXHUwMDI2XFx1MDAyNiBwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pXFxuNTE3ODpcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MTc5OlxcdFxcbjUxODA6XFx0XFx0LyogTm8gcGFnZXMgcmVxdWVzdGVkPyAqL1xcbjUxODE6XFx0XFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIFxcdTAwM2M9IDApKVxcbjUxODI6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTE4MzpcXHRcXG41MTg0OlxcdFxcdC8qIEFscmVhZHkgcG9wdWxhdGVkIGFycmF5PyAqL1xcbjUxODU6XFx0XFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkID09IDApKVxcbjUxODY6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTE4NzpcXHRcXG41MTg4OlxcdFxcdC8qIEJ1bGsgYWxsb2NhdG9yIGRvZXMgbm90IHN1cHBvcnQgbWVtY2cgYWNjb3VudGluZy4gKi9cXG41MTg5OlxcdFxcdGlmIChtZW1jZ19rbWVtX29ubGluZSgpIFxcdTAwMjZcXHUwMDI2IChnZnAgXFx1MDAyNiBfX0dGUF9BQ0NPVU5UKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTU6NTMuMjA4Mjk5MDIxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NzA3MTAyNjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGRvZXNuJ3QgaGF2ZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGFzaWRlIGZyb20gdGhlIG9wdGlvbmFsIGBDT05GSUdfUEFHRV9PV05FUmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGlzIGEgcnVudGltZSBjaGVjayB2aWEgYHBhZ2Vfb3duZXJfaW5pdGVkYCBmb3IgdGhlIGBwYWdlX293bmVyPW9uYCBib290IHBhcmFtZXRlciBhbmQgZG9lc24ndCBhZmZlY3QgdGhlIGNvbXBpbGF0aW9uIG9yIGdlbmVyYWwgYXZhaWxhYmlsaXR5IG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGUgY29kZSBpcyBhbHdheXMgcHJlc2VudCBpbiB0aGUga2VybmVsIGltYWdlLiBJIHJlYWxpemUgdGhlIGBDT05GSUdfUEFHRV9PV05FUmAgY2hlY2sgZWFybHkgcmV0dXJucyBpZiBlbmFibGVkIGFuZCB0aGUgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBza2lwcGluZyB0aGUgYnVsayBhbGxvY2F0aW9uLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4gaXQncyBub3QgcHJlc2VudC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGZ1enppbmcgaXMgd2FycmFudGVkLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRvIHJlLWV2YWx1YXRlIHRoZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZ2AuIFRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBJIGtub3cgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIEknbSBmb2N1c2luZyBvbiBpdHMgR0ZQIGZsYWdzIGFuZCB0aGUgY3VycmVudCB0YXNrJ3MgYWxsb2NhdGlvbiBjb250ZXh0IHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBjaGFuZ2UgY291bGQgaW50cm9kdWNlIGlzc3VlcyByZWxhdGVkIHRvIHJlZ3Jlc3Npb25zLCBsb2NrZGVwIG9yIGZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgaW52YXJpYW50IGlzc3VlcyB3aGVuIGNvbnN0cmFpbmVkIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkLlxuXG5JIGltbWVkaWF0ZWx5IHJ1bGUgb3V0IGFsbCB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYVwiIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBub3QgZG9jdW1lbnRhdGlvbiwgYnVpbGQgc3lzdGVtIGNoYW5nZSwgb3IgaGFyZHdhcmUtc3BlY2lmaWMgY29kZS4gSXQncyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBpcyB1c2VkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIG9wZXJhdGlvbnMgKHNwbGljZSwgYnRyZnMsIHZtYWxsb2MsIGV0Yy4pLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGJhc2VkIG9uIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYHRydWVgLlxuXG5Ob3csIHJlZ2FyZGluZyBgRm9jdXNTeW1ib2xzYCwgSSBoYXZlIHRvIGJlIHByZWNpc2UuIEFsdGhvdWdoIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggb3RoZXIgZW50cnkgcG9pbnRzIGNhbGwgdGhpcyBhbmQgd2hldGhlciBmdXp6aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaGFzIGJyb2FkIGltcGxpY2F0aW9ucy4gSSByZWFsaXplIGl0J3Mgbm90IGFzIHViaXF1aXRvdXMgYXMgb3RoZXIgbW0gZnVuY3Rpb25zIGxpa2UgYGtmcmVlYCBvciBgX19hbGxvY19wYWdlc19ub3Byb2ZgLlxuXG5gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGNhbGxlZCBieSBhIHJlbGF0aXZlbHkgbGltaXRlZCBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgdGhhdCBpdCBpcyBOT1QgY2FsbGVkIGJ5IG5lYXJseSBldmVyeSBzeXNjYWxsLCBJJ2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbiBpdHNlbGYgYW5kIGl0cyBkaXJlY3QgY2FsbHMuIEkgZGV0ZXJtaW5lIHRoYXQgdGhlIG1vc3QgaW1wb3J0YW50IEZvY3VzU3ltYm9scyBzaG91bGQgYmUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoZXNlIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjb2RlIGNoYW5nZXMgYW5kIGFyZSBzcGVjaWZpYyB0byBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuXG5cblNpbmNlIEkgaGF2ZW4ndCBpZGVudGlmaWVkIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucywgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdC5cblxuVGhlIHJlYXNvbmluZyBpcyB0aGVyZWZvcmU6XG5cblRoZSBwYXRjaCBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIGludGVncmF0ZSBHRlAgZmxhZ3MgdGhhdCBtYXRjaCB0aGUgY3VycmVudCB0YXNrJ3MgYWxsb2NhdGlvbiBjb250ZXh0IHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBmdW5jdGlvbiBmYWxscyB1bmRlciB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGRpc2NvdmVyIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgaW52YXJpYW50IGlzc3VlcyB3aGVuIHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIChzdWNoIGFzIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgYXJlIGFwcGxpZWQuIEkgYW0gbGlzdGluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhcyB0aGUgYEZvY3VzU3ltYm9sc2AuIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGxpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTA2LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNjowNy45MTU0MDY3NzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBhcHBseSBjdXJyZW50X2dmcF9jb250ZXh0KCkgdG8gdGhlIEdGUCBmbGFncywgZW5mb3JjaW5nIHNjb3BlZCBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoZS5nLiwgUEZfTUVNQUxMT0NfTk9GUywgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfUElOKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm0gYnVsayBwYWdlIGFsbG9jYXRpb24gKHN1Y2ggYXMgY29weV9zcGxpY2VfcmVhZCwgYnRyZnMgcGFnZSBhbGxvY2F0aW9uLCBvciB2bWFsbG9jKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBsb2NrZGVwL2ZzX3JlY2xhaW0gdmlvbGF0aW9ucywgb3IgYWxsb2NhdGlvbiBhbm9tYWxpZXMgYXJlIHRyaWdnZXJlZCB1bmRlciBjb25zdHJhaW5lZCBjb250ZXh0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gYXBwbHkgY3VycmVudF9nZnBfY29udGV4dCgpIHRvIHRoZSBHRlAgZmxhZ3MsIGVuZm9yY2luZyBzY29wZWQgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMgKGUuZy4sIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX1BJTikuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG9wZXJhdGlvbnMgdGhhdCBwZXJmb3JtIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIChzdWNoIGFzIGNvcHlfc3BsaWNlX3JlYWQsIGJ0cmZzIHBhZ2UgYWxsb2NhdGlvbiwgb3Igdm1hbGxvYykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbG9ja2RlcC9mc19yZWNsYWltIHZpb2xhdGlvbnMsIG9yIGFsbG9jYXRpb24gYW5vbWFsaWVzIGFyZSB0cmlnZ2VyZWQgdW5kZXIgY29uc3RyYWluZWQgY29udGV4dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjA3LjkxNTQ0NzY0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNDE3NzgxNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNjowNy45MTU5MjA5NDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODM0MTMwMDUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtgIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGFzay1sZXZlbCBhbGxvY2F0aW9uIHJlc3RyaWN0aW9ucyAoc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIHNldCBieSBtZW1hbGxvYyBzY29wZXMpIGFyZSBwcm9wZXJseSByZXNwZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy5cXG5cXG5UaGlzIGNoYW5nZSBtYW5pcHVsYXRlcyBHRlAgYWxsb2NhdGlvbiBmbGFnIGJpdHMgb24gYSBzY2FsYXIgYGdmcF90YCB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGhlYXAvc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBwcmV2ZW50ZWQgb3IgaW5mbHVlbmNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gZmlsZXN5c3RlbS9JTyByZWNsYWltIHJlY3Vyc2lvbiBhbmQgbG9ja2luZyBkZWFkbG9ja3MgKHdoaWNoIGFyZSB0cmFja2VkIGJ5IExPQ0tERVApLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDFmZDRkYjI0N2I3OTBjYmRhNzVlYzRhY2QzNTU1N2Q2MTA5MjM3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDAzOjE0OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01MjA3LDYgKzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbitcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbiBcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTY6MDcuOTE1OTIxOTc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MTUwNDY3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2ltcGxlIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX2FsbG9jLmNgLiBJdCdzIGluY3JlZGlibHkgc3RyYWlnaHRmb3J3YXJkLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0J3MgYWRkcmVzc2luZyBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYyBvciBhIHNtYWxsLCB0YXJnZXRlZCBvcHRpbWl6YXRpb24uIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGxpbmUgYWRkZWQ6IGBnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7YCByaWdodCBhZnRlciB0aGUgYGdmcGAgZmxhZyBpcyBtYXNrZWQgYW5kIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBwcmVwYXJhdGlvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgY3VycmVudF9nZnBfY29udGV4dCgpYCBkb2VzLCBidXQgSSBhbHJlYWR5IGhhdmUgYW4gaWRlYS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBpcyByZWxhdGVkIHRvIHBvdGVudGlhbGx5IG1vZGlmeWluZyB0aGUgYGdmcGAgZmxhZ3MgYmFzZWQgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIGFsbG9jYXRpb24gaXMgaGFwcGVuaW5nLiBUaGUgY29tbWVudCBkaXJlY3RseSBhYm92ZSB0aGlzIGxpbmUgbWVudGlvbnMgdGhhdCBgQUxMT0NfTk9GUkFHTUVOVGAgY2FuIGJlIHNldCwgaGludGluZyBhdCBmcmFnbWVudGF0aW9uIGNvbmNlcm5zLiBUaGUgcHJlc2VuY2Ugb2YgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgdGhlIGdpdmVuIGBnZnBgIGZsYWdzIHRvIGJlc3Qgb3B0aW1pemUgZm9yIHRoZSBjdXJyZW50IHRhc2sncyBuZWVkcy4gSSBzaG91bGQgcmV2aWV3IHRoYXQgZnVuY3Rpb24uXG5cblRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgKmJlZm9yZSogdGhlIGFsbG9jYXRpb24gcHJlcGFyYXRpb24uIFRoaXMgbWFrZXMgbWUgc3VzcGVjdCB0aGUgbW9kaWZpY2F0aW9uIG9mIGBnZnBgIGlzIGludGVuZGVkIHRvIGluZmx1ZW5jZSBob3cgdGhlIGFsbG9jYXRpb24gaXMgKnNldCB1cCogYnkgYHByZXBhcmVfYWxsb2NfcGFnZXMoKWAuIFBlcmhhcHMgdGhlIGNvbnRleHQgaGVscHMgZGVjaWRlIG9uIG5vZGUgc2VsZWN0aW9uIG9yIG90aGVyIHR1bmluZyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gYXR0ZW1wdHMgZXZlbiBiZWdpbi4gR2l2ZW4gd2hlcmUgaXQgaXMsIGl0J3Mgbm90IGxpa2VseSB0byBiZSBzb21ldGhpbmcgdGhhdCBkeW5hbWljYWxseSBjaGFuZ2VzICpkdXJpbmcqIGFsbG9jYXRpb247IHRoZSBhbGxvY2F0aW9uIGF0dGVtcHQgZWl0aGVyIGdldHMgc3RhcnRlZCwgYW5kIHRoZW4gYXR0ZW1wdHMgaGFwcGVuLCBvciB3ZSBmYWlsIGVhcmx5LiBJJ20gZ3Vlc3NpbmcgdGhlIGNvbnRleHQgZnVuY3Rpb24gaXMgY2hhbmdpbmcsIGZvciBpbnN0YW5jZSwgd2hldGhlciB0aGUgYWxsb2NhdGlvbiBzaG91bGQgYWxsb3cgZnJhZ21lbnRhdGlvbiBvciBub3QgYmFzZWQgb24gdGhlIHByb2Nlc3MgdHlwZS5cblxuT3ZlcmFsbCwgaXQncyBhIG1pbm9yIGNoYW5nZSwgYnV0IGl0IGNvdWxkIGhhdmUgYSBub3RpY2VhYmxlIGltcGFjdCBpZiB0aGUgY29udGV4dCBpcyBzaWduaWZpY2FudGx5IGluZmx1ZW5jaW5nIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGludG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCB3b3Jrcy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGF0IGZsYWcgZ2V0cyBzZXQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgdGhlbiBkZXRlcm1pbmUgaG93IHRoaXMgY2hhbmdlIGlzIGdvaW5nIHRvIGltcGFjdCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjEzLjUzMDk3Mjc0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzQxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxOTU6XFx0XFxuNTE5NjpcXHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG41MTk3OlxcdFxcdC8qXFxuNTE5ODpcXHRcXHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xcbjUxOTk6XFx0XFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xcbjUyMDA6XFx0XFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xcbjUyMDE6XFx0XFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQnbGwgaGF2ZVxcbjUyMDI6XFx0XFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cXG41MjAzOlxcdFxcdCAqL1xcbjUyMDQ6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG41MjA1OlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMDY6XFx0I2VuZGlmXFxuNTIwNzpcXHRcXG41MjA4OlxcdFxcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXFxuNTIwOTpcXHRcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG41MjEwOlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG41MjExOlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuNTIxMjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjEzOlxcdFxcbjUyMTQ6XFx0XFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cXG41MjE1OlxcdFxcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcXG41MjE2OlxcdFxcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xcbjUyMTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrO1xcbjUyMTg6XFx0XFxuNTIxOTpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjA6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xcbjUyMjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTIyMjpcXHRcXHRcXHR9XFxuNTIyMzpcXHRcXG41MjI0OlxcdFxcdFxcdGlmIChucl9vbmxpbmVfbm9kZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXFx1MDAyNlxcdTAwMjZcXG41MjI1OlxcdFxcdFxcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcXG41MjI2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMjc6XFx0XFx0XFx0fVxcbjUyMjg6XFx0XFxuNTIyOTpcXHRcXHRcXHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xcbjUyMzA6XFx0cmV0cnlfdGhpc196b25lOlxcbjUyMzE6XFx0XFx0XFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgKyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcXG41MjMyOlxcdFxcdFxcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxcbjUyMzM6XFx0XFx0XFx0XFx0XFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxcbjUyMzQ6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcXG41MjM1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUyMzY6XFx0XFx0XFx0fVxcbjUyMzc6XFx0XFxuNTIzODpcXHRcXHRcXHRpZiAoY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKSlcXG41MjM5OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnlfdGhpc196b25lO1xcbjUyNDA6XFx0XFxuNTI0MTpcXHRcXHRcXHQvKiBUcnkgYWdhaW4gaWYgem9uZSBoYXMgZGVmZXJyZWQgcGFnZXMgKi9cXG41MjQyOlxcdFxcdFxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcXG41MjQzOlxcdFxcdFxcdFxcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIDApKVxcbjUyNDQ6XFx0XFx0XFx0XFx0XFx0Z290byByZXRyeV90aGlzX3pvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjEzLjUzMTI1MDMzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDAxODU3MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBjdXJyZW50X2dmcF9jb250ZXh0YCBhbmQgaXRzIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgY3VycmVudF9nZnBfY29udGV4dGAuIEknbSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgaW50byBpdHMgZGVmaW5pdGlvbiBhbmQgd2hhdCBpdCBhY3R1YWxseSAqZG9lcyogYXQgdGhlIGxvd2VzdCBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIGlzIGtleS4gQWZ0ZXIgdGhhdCwgSSdsbCBuZWVkIHRvIHNlZSBob3cgb3RoZXIgYWxsb2NhdG9ycywgYm90aCB3aXRoaW4gdGhlIGV4aXN0aW5nIHN5c3RlbSBhbmQgcGVyaGFwcyBldmVuIHNvbWUgZXh0ZXJuYWwgb25lcyBJJ20gZmFtaWxpYXIgd2l0aCwgbGV2ZXJhZ2UgdGhpcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSBpbnRlZ3JhdGUgaXQgaW50byB0aGVpciBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgb3IgZGVzaWduIHBhdHRlcm5zIGJlaW5nIHVzZWQuIFRoZSBnb2FsIGlzIHRvIGdhaW4gYSBzdHJvbmcgdW5kZXJzdGFuZGluZyBvZiBiZXN0IHByYWN0aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTY6MTUuNTMzMTEwOTYzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMyNzQ3OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF9nZnBfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MTQ1PXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjE0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDIxNTpcXHRcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykgXFx1MDAyNlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDIxNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRHRlBfUkVDTEFJTV9NQVNLKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zNzUyPWFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTM3ODQtXFxubW0vcGFnZV9hbGxvYy5jOjM3ODU6LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cXG5tbS9wYWdlX2FsbG9jLmMtMzc4Ni1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDM4Mz12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcXG5tbS9wYWdlX2FsbG9jLmMtNDM4NC17XFxubW0vcGFnZV9hbGxvYy5jOjQzODU6XFx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNDM4Ni1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDAwPXZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKVxcbm1tL3BhZ2VfYWxsb2MuYy00NDAxLXtcXG5tbS9wYWdlX2FsbG9jLmM6NDQwMjpcXHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy00NDAzLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUyMDktXFx0Z2ZwIFxcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XFxubW0vcGFnZV9hbGxvYy5jOjUyMTA6XFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01MjExLVxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM4ND1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU0MTktXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjU0MjA6XFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDIxLVxcdGFsbG9jX2dmcCA9IGdmcDtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03Mjg0PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MzEyLVxcbm1tL3BhZ2VfYWxsb2MuYzo3MzEzOlxcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTczMTQtXFx0aWYgKF9fYWxsb2NfY29udGlnX3ZlcmlmeV9nZnBfbWFzayhnZnBfbWFzaywgKGdmcF90ICopXFx1MDAyNmNjLmdmcF9tYXNrKSlcXG4tLVxcbm1tL3BlcmNwdS5jPTE3MzU9dm9pZCBfX3BlcmNwdSAqcGNwdV9hbGxvY19ub3Byb2Yoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCxcXG4tLVxcbm1tL3BlcmNwdS5jLTE3NDktXFxubW0vcGVyY3B1LmM6MTc1MDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGVyY3B1LmMtMTc1MS1cXHQvKlxcbi0tXFxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NzQtXFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBTV0FQX0NMVVNURVJfTUFYLFxcbm1tL3Ztc2Nhbi5jOjY3NzU6XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtNjc3Ni1cXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxuLS1cXG5tbS92bXNjYW4uYz02ODU1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODY1LVxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmM6Njg2NjpcXHRcXHQuZ2ZwX21hc2sgPSAoY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzaykgXFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKSB8XFxubW0vdm1zY2FuLmMtNjg2Ny1cXHRcXHRcXHRcXHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXFx1MDAyNiB+R0ZQX1JFQ0xBSU1fTUFTSyksXFxuLS1cXG5tbS92bXNjYW4uYz03ODc2PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03ODgyLVxcdFxcdC5ucl90b19yZWNsYWltID0gbWF4KG5yX3BhZ2VzLCBTV0FQX0NMVVNURVJfTUFYKSxcXG5tbS92bXNjYW4uYzo3ODgzOlxcdFxcdC5nZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spLFxcbm1tL3Ztc2Nhbi5jLTc4ODQtXFx0XFx0Lm9yZGVyID0gb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYz03OTU4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMzUtXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcXG5tbS92bXNjYW4uYzo4MDM2OlxcdFxcdFxcdFxcdC5nZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spLFxcbm1tL3Ztc2Nhbi5jLTgwMzctXFx0XFx0XFx0XFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMzoxNjoxNS44MTYzOTMxODVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzUyODk1Nzc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgY3VycmVudF9nZnBfY29udGV4dGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMuIE15IGltbWVkaWF0ZSBpbXB1bHNlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLiBJIG5lZWQgdG8gc3RhcnQgd2l0aCB0aGUgZnVuZGFtZW50YWwgZGVmaW5pdGlvbi4gSeKAmW0gdGhpbmtpbmcsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSBrbm93IGNvbnRleHQgaXMgKmNyaXRpY2FsKi4gVGhpcyBpcyAqdGhlKiBwbGFjZSB0byBzdGFydC4gV2hhdCBkb2VzIHRoaXMgdGVybSBhY3R1YWxseSAqbWVhbiogaW4gdGhpcyBzcGVjaWZpYyBzZXR0aW5nPyBXaGF0IGlzIGl0IGludGVuZGVkIHRvIHJlcHJlc2VudD8gSXMgaXQgYSBjbGFzcywgYSB2YXJpYWJsZSwgYSBmdW5jdGlvbiwgYSBtb2R1bGUuLi4gdGhpcyBpcyBrZXkuIEtub3dpbmcgdGhlIGRhdGEgdHlwZS9zdHJ1Y3R1cmUsIGhvdyBpdCdzIHVzZWQsIGhvdyBpdCdzIGRlZmluZWQsIHdpbGwgYmUgdGhlIGJhc2lzIGZvciBldmVyeXRoaW5nIGVsc2UuIEknbGwgbmVlZCB0byBrbm93LiBXaGVyZSBpcyB0aGlzIGRlZmluZWQ/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBsb29raW5nIGZvciBhbiBhY3R1YWwgY29kZSBkZWZpbml0aW9uIG9yIGRvY3VtZW50YXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIHJvbGUuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjc3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTY6MjMuMzQ1MzUyOTU2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5ODk5NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl92Zm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDctICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI0ODpzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjI0LjkxNTI2MTUyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY5NTE0MzQ2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IERldGFpbHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIG1vcmUgZGVlcGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgYXJvdW5kIGxpbmUgMjQ4LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gcHJvY2VzcyBtZW1vcnkgbWFuYWdlbWVudCB0aGVyZSwgb3IgYXQgbGVhc3QgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbiB0aGF0IHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgbXkgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhcmVhLCBzbyBsZXQncyBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTYzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjMxLjg2NjY5OTE1NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0LypcXG4gMjQzOlxcdCAqIEFwcGxpZXMgcGVyLXRhc2sgZ2ZwIGNvbnRleHQgdG8gdGhlIGdpdmVuIGFsbG9jYXRpb24gZmxhZ3MuXFxuIDI0NDpcXHQgKiBQRl9NRU1BTExPQ19OT0lPIGltcGxpZXMgR0ZQX05PSU9cXG4gMjQ1OlxcdCAqIFBGX01FTUFMTE9DX05PRlMgaW1wbGllcyBHRlBfTk9GU1xcbiAyNDY6XFx0ICogUEZfTUVNQUxMT0NfUElOICBpbXBsaWVzICFHRlBfTU9WQUJMRVxcbiAyNDc6XFx0ICovXFxuIDI0ODpcXHRzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXFxuIDI0OTpcXHR7XFxuIDI1MDpcXHRcXHR1bnNpZ25lZCBpbnQgcGZsYWdzID0gUkVBRF9PTkNFKGN1cnJlbnQtXFx1MDAzZWZsYWdzKTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0aWYgKHVubGlrZWx5KHBmbGFncyBcXHUwMDI2IChQRl9NRU1BTExPQ19OT0lPIHwgUEZfTUVNQUxMT0NfTk9GUyB8IFBGX01FTUFMTE9DX1BJTikpKSB7XFxuIDI1MzpcXHRcXHRcXHQvKlxcbiAyNTQ6XFx0XFx0XFx0ICogTk9JTyBpbXBsaWVzIGJvdGggTk9JTyBhbmQgTk9GUyBhbmQgaXQgaXMgYSB3ZWFrZXIgY29udGV4dFxcbiAyNTU6XFx0XFx0XFx0ICogc28gYWx3YXlzIG1ha2Ugc3VyZSBpdCBtYWtlcyBwcmVjZWRlbmNlXFxuIDI1NjpcXHRcXHRcXHQgKi9cXG4gMjU3OlxcdFxcdFxcdGlmIChwZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQ19OT0lPKVxcbiAyNTg6XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKTtcXG4gMjU5OlxcdFxcdFxcdGVsc2UgaWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX05PRlMpXFxuIDI2MDpcXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+X19HRlBfRlM7XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdFxcdGlmIChwZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQ19QSU4pXFxuIDI2MzpcXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcXG4gMjY0OlxcdFxcdH1cXG4gMjY1OlxcdFxcdHJldHVybiBmbGFncztcXG4gMjY2OlxcdH1cXG4gMjY3OlxcdFxcbiAyNjg6XFx0I2lmZGVmIENPTkZJR19MT0NLREVQXFxuIDI2OTpcXHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKTtcXG4gMjcwOlxcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApO1xcbiAyNzE6XFx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKTtcXG4gMjcyOlxcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzayk7XFxuIDI3MzpcXHQjZWxzZVxcbiAyNzQ6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxcbiAyNzU6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxcbiAyNzY6XFx0c3RhdGljIGlubGluZSB2b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaykgeyB9XFxuIDI3NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKSB7IH1cXG4gMjc4OlxcdCNlbmRpZlxcbiAyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAzOjE2OjMxLjg2Njc4Mzk5NloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDM5MDM5ODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSBicmVha2Rvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgbWlzc2luZyBhIGNydWNpYWwgY2FsbCB0byBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgbWFza2luZyBvdXQgY2VydGFpbiBHRlAgZmxhZ3MsIHNwZWNpZmljYWxseSBgX19HRlBfSU9gLCBgX19HRlBfRlNgLCBhbmQgYF9fR0ZQX01PVkFCTEVgLCBiYXNlZCBvbiB0aGUgY3VycmVudCB0YXNrJ3MgZmxhZ3MuIFRoaW5rIG9mIGZ1bmN0aW9ucyBsaWtlIGBtZW1hbGxvY19ub2lvX3NhdmUoKWAgYW5kIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAg4oCTIHRoZXkgc2V0IHRoZXNlIGZsYWdzLlxuXG5UaGUgcHJvYmxlbT8gV2l0aG91dCB0aGF0IGBjdXJyZW50X2dmcF9jb250ZXh0YCBjYWxsLCBpZiBjb2RlIHJ1bm5pbmcgdW5kZXIgYFBGX01FTUFMTE9DX05PRlNgIG9yIGBQRl9NRU1BTExPQ19OT0lPYCBjYWxsZWQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgdGhlIEdGUCBtYXNrIGNvdWxkIHN0aWxsIGhhdmUgYF9fR0ZQX0ZTYCBvciBgX19HRlBfSU9gIGVuYWJsZWQuIFRoaXMgb3BlbnMgdGhlIGRvb3IgdG8gcG90ZW50aWFsIGxvY2tkZXAgd2FybmluZ3Mgb3IgZXZlbiBkZWFkbG9ja3MsIGVzcGVjaWFsbHkgaWYgZmlsZXN5c3RlbSBvciBJTyByZWNsYWltIGlzIHRyaWdnZXJlZCByZWN1cnNpdmVseS4gVGhhdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVlIHRvIGluY29ycmVjdCBHRlAgZmxhZyBwcm9wYWdhdGlvbi5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGEgZGVmaW5pdGl2ZSBcIm5vLlwiIExldCdzIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZzpcblxuMS4gIGBnZnBgIGlzIGp1c3QgYSBzaW1wbGUgcHJpbWl0aXZlIOKAkyBhbiBgdW5zaWduZWQgaW50YCBvciBgZ2ZwX3RgLiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBoZXJlLlxuMi4gIGBjdXJyZW50X2dmcF9jb250ZXh0YCAqb25seSogY2xlYXJzIGZsYWdzIGJhc2VkIG9uIGBjdXJyZW50LVx1MDAzZWZsYWdzYC4gSXQgZG9lc24ndCBtb2RpZnkgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGBnZnBgIGluIGFueSB3YXksIHNoYXBlIG9yIGZvcm0uXG4zLiAgVGhlIHBhdGNoIGRvZXNuJ3QgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lc24ndCBjb3B5IGFueXRoaW5nIHRvIHVzZXJzcGFjZSwgZG9lc24ndCBhbGxvY2F0ZSBtZW1vcnkgd2l0aG91dCB6ZXJvaW5nLCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IGlzc3VlcyB3aXRoIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgYnVmZmVyIGJvdW5kcy4gRXZlcnl0aGluZyBpcyBiZWluZyBpbml0aWFsaXplZCBhcyBpdCBzaG91bGQuXG40LiAgSWYgdGhlcmUgYXJlIGFueSBkZWFkbG9ja3Mgb3IgcmVjbGFpbSBpc3N1ZXMsIHRob3NlIGFyZSBzdHJpY3RseSBsb2NraW5nIG9yIHJlY2xhaW0gYnVncywgd2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeSBoZXJlLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG5lZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha3MuXG5cbkFuZCB0aGF0IGJyaW5ncyBtZSB0byBhIGNydWNpYWwgcG9pbnQgYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhbHJlYWR5IGluY29ycG9yYXRlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUncyBubyBwb2ludCBpbiBydW5uaW5nIEtNU0FOIGlmIHRoZSBwb3RlbnRpYWwgYnVnIGlzIHNvbWV0aGluZyB0aGF0J3MgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciB0aGUgb3RoZXIgc3RhbmRhcmQgdG9vbHMuIEtNU0FOIGlzIGZvciBjYXRjaGluZyB0aGluZ3MgKm5vdCogY2F1Z2h0IGJ5IEtBU0FOLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGNyaXRlcmlhLiBUbyByZWl0ZXJhdGU6XG5cbiogICBUaGUgY29kZSBjaGFuZ2VzIHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIGFyZSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuIFllcywgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBsb2NraW5nLlxuKiAgIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4gWWVzLCB0aGlzIGlzIGNvcnJlY3QuXG4qICAgVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBDb3JyZWN0LCBhcyBleHBsYWluZWQgYWJvdmUuXG5cblRoZXJlZm9yZSwgaXQgaXMgY2xlYXIgdGhhdCBJIHdpbGwgaW52b2tlIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTjogZmFsc2VgIGFuZCBwcm92aWRlIHRoZSBhYm92ZSByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTMsIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDM6MTY6NTYuMjU3MjAxNzQ2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO2AgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLiBUaGlzIGVuc3VyZXMgdGhhdCB0YXNrLWxldmVsIGFsbG9jYXRpb24gcmVzdHJpY3Rpb25zIChzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gc2V0IGJ5IG1lbWFsbG9jIHNjb3BlcykgYXJlIHByb3Blcmx5IHJlc3BlY3RlZCB3aGVuIHBlcmZvcm1pbmcgYnVsayBwYWdlIGFsbG9jYXRpb25zLlxcblxcblRoaXMgY2hhbmdlIG1hbmlwdWxhdGVzIEdGUCBhbGxvY2F0aW9uIGZsYWcgYml0cyBvbiBhIHNjYWxhciBgZ2ZwX3RgIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaGVhcC9zdGFjayBidWZmZXJzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHByZXZlbnRlZCBvciBpbmZsdWVuY2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBmaWxlc3lzdGVtL0lPIHJlY2xhaW0gcmVjdXJzaW9uIGFuZCBsb2NraW5nIGRlYWRsb2NrcyAod2hpY2ggYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO2AgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLiBUaGlzIGVuc3VyZXMgdGhhdCB0YXNrLWxldmVsIGFsbG9jYXRpb24gcmVzdHJpY3Rpb25zIChzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gc2V0IGJ5IG1lbWFsbG9jIHNjb3BlcykgYXJlIHByb3Blcmx5IHJlc3BlY3RlZCB3aGVuIHBlcmZvcm1pbmcgYnVsayBwYWdlIGFsbG9jYXRpb25zLlxcblxcblRoaXMgY2hhbmdlIG1hbmlwdWxhdGVzIEdGUCBhbGxvY2F0aW9uIGZsYWcgYml0cyBvbiBhIHNjYWxhciBgZ2ZwX3RgIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaGVhcC9zdGFjayBidWZmZXJzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHByZXZlbnRlZCBvciBpbmZsdWVuY2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBmaWxlc3lzdGVtL0lPIHJlY2xhaW0gcmVjdXJzaW9uIGFuZCBsb2NraW5nIGRlYWRsb2NrcyAod2hpY2ggYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowclfw6[1] Phase: Succeeded StartedAt: 2026-09-14 03:17:18 +0000 UTC FinishedAt: 2026-09-14 03:17:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 03:17:18 +0000 UTC FinishedAt: 2026-09-14 03:17:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2] Phase: Succeeded StartedAt: 2026-09-14 03:17:18 +0000 UTC FinishedAt: 2026-09-14 07:01:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:17:18 +0000 UTC FinishedAt: 2026-09-14 07:01:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:17:18 +0000 UTC FinishedAt: 2026-09-14 03:17:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:17:18 +0000 UTC FinishedAt: 2026-09-14 03:17:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","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-workflowclfw6/series-workflowclfw6-convert-artifact-2703933592/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:17:28 +0000 UTC FinishedAt: 2026-09-14 03:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:17:28 +0000 UTC FinishedAt: 2026-09-14 03:33:53 +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:*2a6e7d43-0161-425f-82ba-95d552c749f0,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-workflowclfw6/series-workflowclfw6-convert-artifact-2703933592/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": "1701238c-17e5-4234-93c8-064fcb7ea4f4", "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-workflowclfw6/series-workflowclfw6-build-action-4284087758/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:17:28 +0000 UTC FinishedAt: 2026-09-14 03:33:43 +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:*2a6e7d43-0161-425f-82ba-95d552c749f0,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-workflowclfw6/series-workflowclfw6-convert-artifact-2703933592/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": "1701238c-17e5-4234-93c8-064fcb7ea4f4", "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-workflowclfw6/series-workflowclfw6-build-action-4284087758/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:33:53 +0000 UTC FinishedAt: 2026-09-14 03:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:33:53 +0000 UTC FinishedAt: 2026-09-14 03:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:33:53 +0000 UTC FinishedAt: 2026-09-14 03:34:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:33:53 +0000 UTC FinishedAt: 2026-09-14 03:33:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-workflowclfw6/series-workflowclfw6-convert-artifact-4165557503/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:34:03 +0000 UTC FinishedAt: 2026-09-14 03:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:34:03 +0000 UTC FinishedAt: 2026-09-14 03:35:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1701238c-17e5-4234-93c8-064fcb7ea4f4,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-workflowclfw6/series-workflowclfw6-build-action-4284087758/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-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:35:57 +0000 UTC FinishedAt: 2026-09-14 03:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:35:57 +0000 UTC FinishedAt: 2026-09-14 03:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:35:57 +0000 UTC FinishedAt: 2026-09-14 03:52:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:35:57 +0000 UTC FinishedAt: 2026-09-14 03:52:11 +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:*2a6e7d43-0161-425f-82ba-95d552c749f0,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-workflowclfw6/series-workflowclfw6-convert-artifact-4165557503/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": "e10e089c-5487-44cf-9062-a0e6e523d942", "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-workflowclfw6/series-workflowclfw6-build-action-1415324435/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:35:57 +0000 UTC FinishedAt: 2026-09-14 03:52:01 +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:*2a6e7d43-0161-425f-82ba-95d552c749f0,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-workflowclfw6/series-workflowclfw6-convert-artifact-4165557503/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": "e10e089c-5487-44cf-9062-a0e6e523d942", "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-workflowclfw6/series-workflowclfw6-build-action-1415324435/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:52:11 +0000 UTC FinishedAt: 2026-09-14 03:52:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:52:11 +0000 UTC FinishedAt: 2026-09-14 03:52:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:52:11 +0000 UTC FinishedAt: 2026-09-14 03:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:52:11 +0000 UTC FinishedAt: 2026-09-14 03:54:08 +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:*e10e089c-5487-44cf-9062-a0e6e523d942,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-workflowclfw6/series-workflowclfw6-build-action-1415324435/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-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:54:17 +0000 UTC FinishedAt: 2026-09-14 07:01:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:54:17 +0000 UTC FinishedAt: 2026-09-14 07:01:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_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:*1701238c-17e5-4234-93c8-064fcb7ea4f4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e10e089c-5487-44cf-9062-a0e6e523d942,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-workflowclfw6/series-workflowclfw6-build-action-4284087758/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-workflowclfw6/series-workflowclfw6-build-action-1415324435/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:54:17 +0000 UTC FinishedAt: 2026-09-14 03:54:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:54:17 +0000 UTC FinishedAt: 2026-09-14 03:54:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_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-workflowclfw6/series-workflowclfw6-convert-artifact-54376344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:54:17 +0000 UTC FinishedAt: 2026-09-14 03:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:54:17 +0000 UTC FinishedAt: 2026-09-14 03:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:54:18 +0000 UTC FinishedAt: 2026-09-14 03:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:54:28 +0000 UTC FinishedAt: 2026-09-14 07:01:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclfw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"7b52401510368ef2aaa598b9abd619f66d8c8feb","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7b52401510368ef2aaa598b9abd619f66d8c8feb","config_name":"upstream-apparmor-kasan.config","series_id":"e2183235-764c-4e86-b0f3-566e13981cd3","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-14 03:54:28 +0000 UTC FinishedAt: 2026-09-14 07:01:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1701238c-17e5-4234-93c8-064fcb7ea4f4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e10e089c-5487-44cf-9062-a0e6e523d942,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-workflowclfw6/series-workflowclfw6-build-action-4284087758/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-workflowclfw6/series-workflowclfw6-build-action-1415324435/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-workflowclfw6/series-workflowclfw6-convert-artifact-54376344/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,}