Name: series-workflow65js2 Phase: Succeeded StartedAt: 2026-08-14 02:19:36 +0000 UTC FinishedAt: 2026-08-14 04:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[0] Phase: Succeeded StartedAt: 2026-08-14 02:19:36 +0000 UTC FinishedAt: 2026-08-14 03:05:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 02:19:36 +0000 UTC FinishedAt: 2026-08-14 03:05:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "9P_FS", "NET_9P" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "9P_FS", "NET_9P" ], "series_id": "fd92d3eb-4501-42c5-851b-e92280b6d1ec" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netfs_file_write_iter", "netfs_unbuffered_write_iter", "netfs_unbuffered_write_iter_locked", "netfs_writepages", "netfs_writeback_single" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7TkVUXzlQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGViYWNrX3NpbmdsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBieSBhZGRpbmcgY2hlY2tzIGZvciBhbGxvY2F0aW9uIGZhaWx1cmVzICh3aGVuIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBvciBgc3RyZWFtLVx1MDAzZWNvbnN0cnVjdGAgaXMgTlVMTCkuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIE5VTEwgcG9pbnRlciBjaGVja3MgZm9yIHN1YnJlcXVlc3QgYWxsb2NhdGlvbnMgaW4gdGhlIGNvcmUgbmV0d29yayBmaWxlc3lzdGVtIGxpYnJhcnkgKGZzL25ldGZzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIChlLmcuLCB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyB3cml0ZSBwYXRocyAobGlrZSBuZXRmc19maWxlX3dyaXRlX2l0ZXIpIHdoZW4gdXNpbmcgbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIENJRlMgb3IgOVAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYzVhZmNhOGVjMWZiMDc1MGRiNmNhYTg1MzZlMmRiMzg5MzBjNDkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDM6MDM6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuaW5kZXggYzE2ZmJhZDI4NmExNy4uNTY3Yjk0NmI3YTU2NiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuQEAgLTExMCw2ICYjNDM7MTEwLDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcdFx0aWYgKCFzdWJyZXEpIHtcbiBcdFx0XHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgd3JlcS1cdTAwM2VzdGFydCAmIzQzOyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiBcdFx0XHRzdWJyZXEgPSBzdHJlYW0tXHUwMDNlY29uc3RydWN0O1xuJiM0MztcdFx0XHRpZiAoIXN1YnJlcSkge1xuJiM0MztcdFx0XHRcdHdyZXEtXHUwMDNlZXJyb3IgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0c3RyZWFtLVx1MDAzZWNvbnN0cnVjdCA9IE5VTEw7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xuaW5kZXggMmQ5Y2ZjZDQzNjU4Zi4uODUxZjZmOTNhZDQ1YSAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbkBAIC0xNzAsNiAmIzQzOzE3MCw4IEBAIHZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbiBcdFx0cm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZShcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlciwgd3JlcS1cdTAwM2VnZnApO1xuIFxuIFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcbiYjNDM7XHRpZiAoIXN1YnJlcSlcbiYjNDM7XHRcdHJldHVybjtcbiBcdHN1YnJlcS1cdTAwM2Vzb3VyY2VcdFx0PSBzdHJlYW0tXHUwMDNlc291cmNlO1xuIFx0c3VicmVxLVx1MDAzZXN0YXJ0XHRcdD0gc3RhcnQ7XG4gXHRzdWJyZXEtXHUwMDNlc3RyZWFtX25yXHQ9IHN0cmVhbS1cdTAwM2VzdHJlYW1fbnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7TkVUXzlQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGViYWNrX3NpbmdsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgTlVMTCBwb2ludGVyIGNoZWNrcyBmb3Igc3VicmVxdWVzdCBhbGxvY2F0aW9ucyBpbiB0aGUgY29yZSBuZXR3b3JrIGZpbGVzeXN0ZW0gbGlicmFyeSAoZnMvbmV0ZnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKGUuZy4sIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSkuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVkZTIHdyaXRlIHBhdGhzIChsaWtlIG5ldGZzX2ZpbGVfd3JpdGVfaXRlcikgd2hlbiB1c2luZyBuZXR3b3JrIGZpbGVzeXN0ZW1zIHN1Y2ggYXMgQ0lGUyBvciA5UC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjNWFmY2E4ZWMxZmIwNzUwZGI2Y2FhODUzNmUyZGIzODkzMGM0OTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzowMzoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKaW5kZXggYzE2ZmJhZDI4NmExNy4uNTY3Yjk0NmI3YTU2NiAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKQEAgLTExMCw2ICYjNDM7MTEwLDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSkKIAkJaWYgKCFzdWJyZXEpIHsKIAkJCW5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCB3cmVxLSZndDtzdGFydCAmIzQzOyB3cmVxLSZndDt0cmFuc2ZlcnJlZCk7CiAJCQlzdWJyZXEgPSBzdHJlYW0tJmd0O2NvbnN0cnVjdDsKJiM0MzsJCQlpZiAoIXN1YnJlcSkgewomIzQzOwkJCQl3cmVxLSZndDtlcnJvciA9IC1FTk9NRU07CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJCXN0cmVhbS0mZ3Q7Y29uc3RydWN0ID0gTlVMTDsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYwppbmRleCAyZDljZmNkNDM2NThmLi44NTFmNmY5M2FkNDVhIDEwMDY0NAotLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKQEAgLTE3MCw2ICYjNDM7MTcwLDggQEAgdm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLAogCQlyb2xsaW5nX2J1ZmZlcl9tYWtlX3NwYWNlKCZhbXA7d3JlcS0mZ3Q7YnVmZmVyLCB3cmVxLSZndDtnZnApOwogCiAJc3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTsKJiM0MzsJaWYgKCFzdWJyZXEpCiYjNDM7CQlyZXR1cm47CiAJc3VicmVxLSZndDtzb3VyY2UJCT0gc3RyZWFtLSZndDtzb3VyY2U7CiAJc3VicmVxLSZndDtzdGFydAkJPSBzdGFydDsKIAlzdWJyZXEtJmd0O3N0cmVhbV9ucgk9IHN0cmVhbS0mZ3Q7c3RyZWFtX25yOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjExCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBGaWxlc3lzdGVtIFdyaXRlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgIGFuZCBgZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g6IGl0JiMzOTtzIGJlZWZpbmcgdXAgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgYE5VTExgIHJldHVybnMgZnJvbSBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgYW5kIGhhbmRsaW5nIGEgYE5VTExgIGBzdHJlYW0tJmd0O2NvbnN0cnVjdGAgcG9pbnRlciBhZnRlciBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuCgpMZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIFdlJiMzOTtyZSBsb29raW5nIGF0IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBhbmQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgLiBSaWdodCwgYm90aCBwYXJ0IG9mIHRoZSBOZXR3b3JrIEZpbGVzeXN0ZW0gc3VwcG9ydC4gVGhhdCYjMzk7cyBnb29kLCBrZWVwcyB0aGUgc2NvcGUgY29udGFpbmVkLCBhbmQgSSBhbHJlYWR5IGhhdmUgYSBtZW50YWwgbW9kZWwgb2YgaG93IG5ldGZzIG9wZXJhdGVzLgoKVGltZSB0byBkaXZlIGludG8gdGhvc2UgZmlsZXMsIGBkaXJlY3Rfd3JpdGUuY2AgYW5kIGB3cml0ZV9pc3N1ZS5jYCwgYW5kIHNlZSBleGFjdGx5IGhvdyB0aGV5JiMzOTt2ZSBhZGRyZXNzZWQgdGhvc2UgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEl0JiMzOTtzIHByb2JhYmx5IGp1c3QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTt2ZSBoYW5kbGVkIGFsbCB0aGUgZWRnZSBjYXNlcyBhbmQgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUwMT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNC1cdCAgICB0ZXN0X2JpdChORVRGU19JQ1RYX1VOQlVGRkVSRUQsIFx1MDAyNmljdHgtXHUwMDNlZmxhZ3MpKVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1MTU6XHRcdHJldHVybiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNi1cbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE2LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02NC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjY1OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTY2LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTMtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo5NDpzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy05NS17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTU0LVx0XHRpZiAoIXJldHJ5KSB7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTU6XHRcdFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9jb2xsZWN0KHdyZXEsIHN0cmVhbSwgc3VicmVxKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1Ni1cdFx0XHRzdWJyZXEgPSBOVUxMO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwMS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwMjpcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwMy1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMDc6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDgte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxMC1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxMTpcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTItXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE4LSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE5OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIyMC1cdFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg4LVx0aWYgKGFzeW5jKSB7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyODk6XHRcdElOSVRfV09SSyhcdTAwMjZ3cmVxLVx1MDAzZXdvcmssIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkwLVx0XHR3cmVxLVx1MDAzZWlvY2IgPSBpb2NiO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI5My1cdH0gZWxzZSB7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyOTQ6XHRcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yOTUtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTEtfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzEyOkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTMtXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTQtLyoqXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTU6ICogbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyIC0gVW5idWZmZXJlZCB3cml0ZSB0byBhIGZpbGVcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxNi0gKiBAaW9jYjogSU8gc3RhdGUgc3RydWN0dXJlXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzI2LSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzI3OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzI4LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODUtXHRcdFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg2Olx0cmV0ID0gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChpb2NiLCBmcm9tLCBOVUxMKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4Ny1vdXQ6XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzkwLX1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM5MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGZpeCwgdGhpbmtpbmcgYWxvdWQgYXMgSSB3b3VsZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBOZXRGUyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiBgbmV0ZnNfcHJlcGFyZV93cml0ZWAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYC4gQXBwYXJlbnRseSwgdGhlcmUmIzM5O3MgYSBtaXNzaW5nIGBOVUxMYCBjaGVjayB3aXRoaW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIHdoaWNoIGlzIGNhbGxlZCBieSBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIEFuZCBpZiB0aGUgc3VicmVxdWVzdCBhbGxvY2F0aW9uIGZhaWxzLCBgc3RyZWFtLSZndDtjb25zdHJ1Y3RgIGNvdWxkIGVuZCB1cCBgTlVMTGAuIFRoZSBzdWJzZXF1ZW50IGNvZGUgcGF0aCBpbiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgdGhlbiBkb2VzbiYjMzk7dCBoYW5kbGUgYSBgTlVMTGAgYHN0cmVhbS0mZ3Q7Y29uc3RydWN0YCBncmFjZWZ1bGx5LgoKUmlnaHQsIHNvIHRoZSBmaXggaXMgcHJvYmFibHkgZ29pbmcgdG8gYWRkIHRoYXQgbWlzc2luZyBjaGVjayBpbiBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIFdlIHNob3VsZCBzZWUgYW4gYWRkaXRpb25hbCBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGNhbGwgcmV0dXJucyBhIHZhbGlkIHN1YnJlcXVlc3QgcG9pbnRlci4KCkFuZCB0aGVuIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYC4uLnRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IG5lZWRzIHRoZSBkZWZlbnNpdmUgY29kaW5nIHRvIGhhbmRsZSB0aGUgYE5VTExgIGBzdHJlYW0tJmd0O2NvbnN0cnVjdGAuIFdlIHdpbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyB0aGUgcG90ZW50aWFsIGBOVUxMYCB2YWx1ZSBub3csIG9yIGVsc2UgaXQgaXMgYSBjcmFzaC4KCkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIGNvbmZpcm0gd2hlcmUgdGhlIGNvZGUgaXMgYmVpbmcgYWRkZWQgdG8gY2hlY2sgdGhlIG5ldyByZXR1cm4gdmFsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfcHJlcGFyZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz05ND1zdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTEwLVx0XHRpZiAoIXN1YnJlcSkge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTExOlx0XHRcdG5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCB3cmVxLVx1MDAzZXN0YXJ0ICYjNDM7IHdyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTEyLVx0XHRcdHN1YnJlcSA9IHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3Q7XG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yMDE9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMDQtXHRcdFx0XHRcdFx0ZW51bSBuZXRmc19pb19vcmlnaW4gb3JpZ2luKTtcbmZzL25ldGZzL2ludGVybmFsLmg6MjA1OnZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbmZzL25ldGZzL2ludGVybmFsLmgtMjA2LVx0XHRcdCBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz05MD1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0MC0vKipcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTQxOiAqIG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkIC0gTm90ZSB3cml0ZSBwcmVwYXJhdGlvbiBmYWlsZWRcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQyLSAqIEBzdWJyZXE6IFRoZSBzdWJyZXF1ZXN0IHRvIG1hcmtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0NS0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTQ2OnZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQoc3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKnN1YnJlcSlcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQ3LXtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1MC19XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE1MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUyLVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTU2LSAqL1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNTc6dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTgtXHRcdFx0IHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTI4MD1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTI5OS1cdGlmICghc3RyZWFtLVx1MDAzZWNvbnN0cnVjdClcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MzAwOlx0XHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgc3RhcnQpO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0zMDEtXHRzdWJyZXEgPSBzdHJlYW0tXHUwMDNlY29uc3RydWN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBGaWxlc3lzdGVtIFdyaXRlIFBhdGggRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyB0aGUgYGZzL25ldGZzYCBjb2RlLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGRpcmVjdCB3cml0ZXMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQ6IHRoZXkmIzM5O3ZlIGFkZGVkIE5VTEwgY2hlY2tzIGFmdGVyIGNhbGxpbmcgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGluIGJvdGggYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGFuZCBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIFRoaXMgaXMgYSBjbGFzc2ljIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtb3ZlLCBhbmQgSSYjMzk7bSBndWVzc2luZyBpdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiAKClNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgZ3VhcmRpbmcgYWdhaW5zdCB0aGUgc2NlbmFyaW8gd2hlcmUgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGZhaWxzLCB3aGljaCB3b3VsZCBsaWtlbHkgcmV0dXJuIGBOVUxMYCwgcG9zc2libHkgZHVlIHRvIGFuIGBFTk9NRU1gIGVycm9yLCBhbmQgdGhlbiBkb3duc3RyZWFtIGNvZGUgd291bGQgYXR0ZW1wdCB0byB1c2UgdGhlIHJldHVybmVkIHBvaW50ZXIuIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzLgoKTm93LCBsZXQgbWUgbWVudGFsbHkgdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgaXMgc2lnbmlmaWNhbnQgYW5kIHRoYXQgdGhvc2UgcGF0aHMgYXJlIHJlYWNoYWJsZS4gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGlzIHRoZSBjb3JlIG9mIHRoaXMsIGFuZCBpdCBhcHBlYXJzIHRvIGJlIHJlYWNoZWQgdmlhIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmNgLiBUaG9zZSwgaW4gdHVybiwgYXJlIGNhbGxlZCBieSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgd2hpY2ggaXMgdXNlZCBpbiBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCAoZm91bmQgaW4gYGJ1ZmZlcmVkX3dyaXRlLmNgKS4gKlRoYXQqIGZ1bmN0aW9uIGlzIGV4cG9ydGVkIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaXMgYWN0dWFsbHkgdXNlZCBieSBmaWxlc3lzdGVtcyBsaWtlIGBhZnNgLCBgOXBgLCBgY2lmc2AsIGFuZCBgY2VwaGAuCgpBbHJpZ2h0LCB0aGF0IGNvbmZpcm1zIGl0OiBUaGlzIGlzIGEgcmVsZXZhbnQgZml4LCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgYSBudW1iZXIgb2YgcmVhbC13b3JsZCBuZXR3b3JrIGZpbGVzeXN0ZW1zLCBnaXZlbiBpdCBwcmV2ZW50cyBhIHBvc3NpYmxlIGNyYXNoIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gVGhlIHBhdGNoIGNsZWFybHkgY2xvc2VzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gYSBmYWlybHkgaW1wb3J0YW50IHBhcnQgb2YgdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSBzdGFjay4gSXQmIzM5O3MgYSBzb2xpZCwgaWYgc2ltcGxlLCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9MzcxPWZpbGVzeXN0ZW0gaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIFZGUyByZWFkL3dyaXRlX2l0ZXIgbWV0aG9kczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzMtXHRzc2l6ZV90IG5ldGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6Mzc0Olx0c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzUtXHRzc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XG4tLVxuZnMvOXAvdmZzX2ZpbGUuYz00MDE9djlmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvOXAvdmZzX2ZpbGUuYy00MTEtXHRwOV9kZWJ1ZyhQOV9ERUJVR19DQUNIRSwgXCYjMzQ7KGNhY2hlZClcXG5cJiMzNDspO1xuZnMvOXAvdmZzX2ZpbGUuYzo0MTI6XHRyZXR1cm4gbmV0ZnNfZmlsZV93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvOXAvdmZzX2ZpbGUuYy00MTMtfVxuLS1cbmZzL2Fmcy9maWxlLmM9MzQ9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2Fmcy9maWxlLmMtMzgtXHQucmVhZF9pdGVyXHQ9IGFmc19maWxlX3JlYWRfaXRlcixcbmZzL2Fmcy9maWxlLmM6Mzk6XHQud3JpdGVfaXRlclx0PSBuZXRmc19maWxlX3dyaXRlX2l0ZXIsXG5mcy9hZnMvZmlsZS5jLTQwLVx0Lm1tYXBfcHJlcGFyZVx0PSBhZnNfZmlsZV9tbWFwX3ByZXBhcmUsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00ODY9RVhQT1JUX1NZTUJPTChuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODgtLyoqXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ4OTogKiBuZXRmc19maWxlX3dyaXRlX2l0ZXIgLSB3cml0ZSBkYXRhIHRvIGEgZmlsZVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00OTAtICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTAwLSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1MDE6c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUwMi17XG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MjgtfVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1Mjk6RVhQT1JUX1NZTUJPTChuZXRmc19maWxlX3dyaXRlX2l0ZXIpO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MzAtXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9Mjk4OT1jaWZzX3N0cmljdF93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwNi1cdFx0ICAgICgoY2lmc19zYl9mbGFncyhjaWZzX3NiKSBcdTAwMjYgQ0lGU19NT1VOVF9OT1BPU0lYQlJMKSA9PSAwKSkge1xuZnMvc21iL2NsaWVudC9maWxlLmM6MzAwNzpcdFx0XHR3cml0dGVuID0gbmV0ZnNfZmlsZV93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwOC1cdFx0XHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDE5LVx0ICovXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDIwOlx0d3JpdHRlbiA9IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwMjEtXHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0zMDQwPXNzaXplX3QgY2lmc19kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDQzLVxuZnMvc21iL2NsaWVudC9maWxlLmM6MzA0NDpcdHdyaXR0ZW4gPSBuZXRmc19maWxlX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDQ1LVx0Y2lmc191cGRhdGVfaV9ibG9ja3NfYWZ0ZXJfd3JpdGUoaW9jYiwgd3JpdHRlbik7XG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9MzA2ND1zc2l6ZV90IGNpZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwODctXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDg4Olx0d3JpdHRlbiA9IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwODktXHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9Mzk2PXNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC0zOTctXHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuaW5jbHVkZS9saW51eC9uZXRmcy5oOjM5ODpzc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtMzk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0d29yayBGaWxlc3lzdGVtIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhpcyBjb2RlIGFuZCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgdGhlIGV4ZWN1dGlvbiBwYXRoIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBnb2VzIGRpcmVjdGx5IHRocm91Z2ggYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLiBUaGF0IGZlZWxzIHJpZ2h0LCBnaXZlbiB0aGUgY29udGV4dC4gTm93LCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBzeXN0ZW0gSSYjMzk7bSB0ZXN0aW5nLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gYSBjb3VwbGUgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBgTkVURlNfU1VQUE9SVGAgaGFzIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGVuIGF0IGxlYXN0ICpvbmUqIG9mIHRoZSBmaWxlc3lzdGVtcyB0aGF0IGJ1aWxkcyAqb24gdG9wKiBvZiBpdC4gU28gdGhhdCBtZWFucyBzb21ldGhpbmcgbGlrZSBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBvciBgQ0VQSF9GU2AsIGFtb25nIG90aGVycy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgbmV0ZnNgIHRvIGNvbmZpcm0gd2hpY2ggZGVwZW5kZW5jaWVzIGFyZSB0aGUgZHJpdmluZyBmYWN0b3JzLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGZzL25ldGZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZTX1NVUFBPUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvS2NvbmZpZy0yLVxuZnMvbmV0ZnMvS2NvbmZpZzozOmNvbmZpZyBORVRGU19TVVBQT1JUXG5mcy9uZXRmcy9LY29uZmlnLTQtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIDlQIENvbmZpZ3VyYXRpb24gU3BhY2UqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciA5UC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGN1cnJlbnRseSBlbmFibGVkLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgaWYgYW55IHJlY2VudCBjaGFuZ2VzIGhhdmUgaW1wYWN0ZWQgdGhlIG9wdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBmcy85cC9LY29uZmlnYC4gVGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCwgdGhlIGNvbnRyb2wgcGFuZWwsIGZvciB0aGUgOVAgZmlsZXN5c3RlbSYjMzk7cyBmZWF0dXJlIHNldC4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBvcHRpb25zLCBjaGVja2luZyBmb3IgYW55IG5ldyBhZGRpdGlvbnMgb3IgcmVtb3ZhbHMgdGhhdCBJIGhhdmVuJiMzOTt0IHRyYWNrZWQgeWV0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byByZWNlbnQgc2VjdXJpdHkgcGF0Y2hlcyBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgYW55IG5ldyBjbGllbnQgb3Igc2VydmVyIGNhcGFiaWxpdGllcywgb3IgbW9yZSBncmFudWxhciBvcHRpb25zIGZvciB0dW5pbmc/IFRoZSBnb2FsIGhlcmUgaXNuJiMzOTt0IGEgbGluZS1ieS1saW5lIHJldmlldywgYnV0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVzdGFibGlzaCBhIGJhc2VsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgd2hpY2ggZmVhdHVyZXMgYXJlIGNvbmRpdGlvbmFsIG9uIG90aGVycywgYW5kIGhvdyB0aG9zZSBpbnRlcmRlcGVuZGVuY2llcyBtaWdodCBhZmZlY3QgbXkgc3BlY2lmaWMgdXNlIGNhc2VzIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjb25maWd1cmF0aW9uIGNob2ljZXMgSSYjMzk7bGwgbmVlZCB0byBtYWtlIGxhdGVyLiBUaW1lIHRvIGdldCBteSBiZWFyaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIDlQX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvOXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcbmZzLzlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXG5mcy85cC9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzLzlwL0tjb25maWctMjItXG5mcy85cC9LY29uZmlnOjIzOmNvbmZpZyA5UF9GU19QT1NJWF9BQ0xcbmZzLzlwL0tjb25maWctMjQtXHRib29sIFwmIzM0OzlQIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvOXAvS2NvbmZpZz0zMj1lbmRpZlxuLS1cbmZzLzlwL0tjb25maWctMzQtXG5mcy85cC9LY29uZmlnOjM1OmNvbmZpZyA5UF9GU19TRUNVUklUWVxuZnMvOXAvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7OVAgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgU01CIENsaWVudCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU01CIGNsaWVudC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZnMvc21iL2NsaWVudC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgY29yZSBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zIHRvIHJlc2lkZS4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBTTUIgY2xpZW50IGlzIGJ1aWx0IGFuZCB3aGF0IGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiBJdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgbGF5IG9mIHRoZSBsYW5kLCB0aGUgc3RydWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgY29tcGlsZS10aW1lIG9wdGlvbnMgYXZhaWxhYmxlLCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSBuZWVkIHRvIGRvIGRvd24gdGhlIGxpbmUuIEl0IGlzIGFsd2F5cyBiZXN0IHRvIHN0YXJ0IHdpdGggdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgd2hlcmUgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENJRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBOZXR3b3JrIEZpbGUgU3lzdGVtIFN1cHBvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4gYW5kIHBpbnBvaW50IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGUgbmV0d29yayBmaWxlc3lzdGVtcywgc3BlY2lmaWNhbGx5IENJRlMgb3IgOVBfRlMsIGFyZSByZXNwb25zaWJsZSBmb3Igc2VsZWN0aW5nIGBORVRGU19TVVBQT1JUYC4gVGltZSB0byBqdW1wIGludG8gdGhlIGBmcy9uZXRmcy9LY29uZmlnYCBmaWxlIGFuZCBnZXQgdGhpcyBzdHJhaWdodGVuZWQgb3V0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWc9Mj1jb25maWcgOVBfRlNcbi0tXG5mcy85cC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIE5FVF85UFxuZnMvOXAvS2NvbmZpZzo1Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzLzlwL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9hZnMvS2NvbmZpZz0yPWNvbmZpZyBBRlNfRlNcbi0tXG5mcy9hZnMvS2NvbmZpZy02LVx0c2VsZWN0IEROU19SRVNPTFZFUlxuZnMvYWZzL0tjb25maWc6NzpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9hZnMvS2NvbmZpZy04LVx0c2VsZWN0IENSWVBUT19LUkI1XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfRlNcbi0tXG5mcy9jZXBoL0tjb25maWctNS1cdHNlbGVjdCBDRVBIX0xJQlxuZnMvY2VwaC9LY29uZmlnOjY6XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuZnMvY2VwaC9LY29uZmlnLTctXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbi0tXG5mcy9uZnMvS2NvbmZpZz0xNzM9Y29uZmlnIE5GU19GU0NBQ0hFXG4tLVxuZnMvbmZzL0tjb25maWctMTc1LVx0ZGVwZW5kcyBvbiBORlNfRlNcbmZzL25mcy9LY29uZmlnOjE3NjpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9uZnMvS2NvbmZpZy0xNzctXHRzZWxlY3QgRlNDQUNIRVxuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0yPWNvbmZpZyBDSUZTXG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwLVx0c2VsZWN0IE9JRF9SRUdJU1RSWVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIxOlx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMi1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUZXN0aW5nIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGRlcGVuZGVuY3kgdHJlZSwgYE5FVEZTX1NVUFBPUlRgIGlzIGJlaW5nIHB1bGxlZCBpbiBieSBhIGhhbmRmdWwgb2YgbmV0d29yayBmaWxlc3lzdGVtczogYDlQX0ZTYCwgYEFGU19GU2AsIGBDRVBIX0ZTYCwgYENJRlNgLCBhbmQgYE5GU19GU0NBQ0hFYC4gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGZvciB0ZXN0aW5nIHRoaXMgd3JpdGUgcGF0aCwgSSBjYW4ganVzdCBlbmFibGUgYDlQX0ZTYCBhbmQgYENJRlNgIGFuZCB0aGF0IHNob3VsZCBhdXRvbWF0aWNhbGx5IGJyaW5nIGluIGBORVRGU19TVVBQT1JUYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRlc3Q6IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBhbmQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgLgoKV2FpdCBhIG1pbnV0ZS4uLiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgc3RhdGljLiBUaGF0IG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIGNvbXBsaWNhdGVkLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNhbGxpbmcgaXQuIEJ1dCBgbmV0ZnNfcHJlcGFyZV93cml0ZWAgaXMgZXhwb3J0ZWQsIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBvaW50IG9mIGludGVyYWN0aW9uIEkgY2FuIHVzZS4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIGl0ZXJhdG9yIGZ1bmN0aW9ucyB0b28sIHNvIGxldCYjMzk7cyBjaGVjayBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLiBUaGF0IHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IHRoZSBzdGF0aWMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGdldHMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz01MDE9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MTQtXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NTE1Olx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MTYtXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MjA3PXN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxOC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxOTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMjAtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMS19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTI6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMy1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxNC0vKipcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxNTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzE2LSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjYtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjc6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjgte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NS1cdFx0XHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODY6XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzg3LW91dDpcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zOTAtfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzkxOkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgTmV0RlMgTW9kdWxlKioKCkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCBhcmUgYm90aCBleHBvcnRlZCwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgZmFpciBnYW1lIGZvciBmdXp6aW5nLiBFeGNlbGxlbnQhIFRob3NlIGFyZSB0aGUga2luZHMgb2YgZW50cnkgcG9pbnRzIHRoYXQgY2FuIHJldmVhbCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLiBBbHNvLCBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCBpcyBleHBvc2VkIHRvbywgd2hpY2ggaXMgYW5vdGhlciBvYnZpb3VzIGNhbmRpZGF0ZS4gQW5kLCBvZiBjb3Vyc2UsIHdlIGNhbiBhZGQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIHRvIHRoZSBsaXN0LiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGtpbmRzIG9mIG1hbGZvcm1lZCBkYXRhIEkgY2FuIHRocm93IGF0IHRob3NlIGZ1bmN0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZ28gZGVlcGVyLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gZXhhbWluZSBhbGxvY2F0aW9uIHJvdXRpbmVzIGFzc29jaWF0ZWQgd2l0aCBvdXIgdGFyZ2V0IHdyaXRlIGNhbGxzLiBMZXQmIzM5O3Mgc2VlIGlmIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBpcyBhbHNvIGV4cG9ydGVkLiBUaGF0IHdvdWxkIGJlIGFub3RoZXIgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnV6eiB0YXJnZXQgdG8gZXZhbHVhdGUsIGlmIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19hbGxvY19zdWJyZXF1ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz0yMTE9c3RhdGljIHZvaWQgbmV0ZnNfcmVhZF90b19wYWdlY2FjaGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTIyMi1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzoyMjM6XHRcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3QocnJlcSk7XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMjI0LVx0XHRpZiAoIXN1YnJlcSkge1xuLS1cbmZzL25ldGZzL2RpcmVjdF9yZWFkLmM9NDg9c3RhdGljIHZvaWQgbmV0ZnNfZGlzcGF0Y2hfdW5idWZmZXJlZF9yZWFkcyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcbi0tXG5mcy9uZXRmcy9kaXJlY3RfcmVhZC5jLTU3LVxuZnMvbmV0ZnMvZGlyZWN0X3JlYWQuYzo1ODpcdFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChycmVxKTtcbmZzL25ldGZzL2RpcmVjdF9yZWFkLmMtNTktXHRcdGlmICghc3VicmVxKSB7XG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaD05Mz12b2lkIG5ldGZzX3B1dF9mYWlsZWRfcmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSk7XG5mcy9uZXRmcy9pbnRlcm5hbC5oOjk0OnN0cnVjdCBuZXRmc19pb19zdWJyZXF1ZXN0ICpuZXRmc19hbGxvY19zdWJyZXF1ZXN0KHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxKTtcbmZzL25ldGZzL2ludGVybmFsLmgtOTUtXG4tLVxuZnMvbmV0ZnMvb2JqZWN0cy5jPTE4NT12b2lkIG5ldGZzX3B1dF9mYWlsZWRfcmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcbi0tXG5mcy9uZXRmcy9vYmplY3RzLmMtMjAxLSAqL1xuZnMvbmV0ZnMvb2JqZWN0cy5jOjIwMjpzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcbmZzL25ldGZzL29iamVjdHMuYy0yMDMte1xuLS1cbmZzL25ldGZzL3JlYWRfcmV0cnkuYz0yNj1zdGF0aWMgdm9pZCBuZXRmc19yZXRyeV9yZWFkX3N1YnJlcXVlc3RzKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxKVxuLS1cbmZzL25ldGZzL3JlYWRfcmV0cnkuYy0xOTctXHRcdGRvIHtcbmZzL25ldGZzL3JlYWRfcmV0cnkuYzoxOTg6XHRcdFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChycmVxKTtcbmZzL25ldGZzL3JlYWRfcmV0cnkuYy0xOTktXHRcdFx0aWYgKCFzdWJyZXEpIHtcbi0tXG5mcy9uZXRmcy9yZWFkX3NpbmdsZS5jPTkwPXN0YXRpYyBpbnQgbmV0ZnNfc2luZ2xlX2Rpc3BhdGNoX3JlYWQoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXG4tLVxuZnMvbmV0ZnMvcmVhZF9zaW5nbGUuYy05NC1cbmZzL25ldGZzL3JlYWRfc2luZ2xlLmM6OTU6XHRzdWJyZXEgPSBuZXRmc19hbGxvY19zdWJyZXF1ZXN0KHJyZXEpO1xuZnMvbmV0ZnMvcmVhZF9zaW5nbGUuYy05Ni1cdGlmICghc3VicmVxKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MTU3PXZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE3MS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTcyOlx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTczLVx0aWYgKCFzdWJyZXEpXG4tLVxuZnMvbmV0ZnMvd3JpdGVfcmV0cnkuYz0xNz1zdGF0aWMgdm9pZCBuZXRmc19yZXRyeV93cml0ZV9zdHJlYW0oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfcmV0cnkuYy0xNTEtXHRcdGRvIHtcbmZzL25ldGZzL3dyaXRlX3JldHJ5LmM6MTUyOlx0XHRcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qod3JlcSk7XG5mcy9uZXRmcy93cml0ZV9yZXRyeS5jLTE1My1cdFx0XHRzdWJyZXEtXHUwMDNlc291cmNlXHRcdD0gdG8tXHUwMDNlc291cmNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldEZTIFdyaXRlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBpcyBkZWZpbml0ZWx5IGFuIGludGVybmFsIGZ1bmN0aW9uOyBpdCYjMzk7cyB0dWNrZWQgYXdheSB3aXRoaW4gYGZzL25ldGZzL2AuIFRoYXQgbWVhbnMgSSYjMzk7bGwgaGF2ZSB0byBieXBhc3MgaXQgaW4gdGhpcyBhbmFseXNpcy4gTXkgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Uga2V5IHdyaXRlIGZ1bmN0aW9uczogYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAsIGFuZCBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBleGFtaW5lIGZvciBob3cgZGF0YSBnZXRzIHdyaXR0ZW4uCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIGxldCYjMzk7cyBrZWVwIGl0IHByYWN0aWNhbC4gQ29uY2VudHJhdGluZyBvbiBgQ0lGU2AgYW5kIGA5UF9GU2AgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIFRoZXkmIzM5O3JlIGNvbW1vbmx5IHVzZWQgYW5kIHNob3VsZCBwdWxsIGluIGBORVRGU19TVVBQT1JUYCwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgSSBuZWVkLgoKSG1tLi4uIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyBJIG5lZWQgdG8gY29uc2lkZXI/IFdhaXQsIGBORVRGU19TVVBQT1JUYCBpdHNlbGYgaXMgYSB0cmlzdGF0ZSBjb25maWcsIG1lYW5pbmcgSSBjb3VsZCBlbmFibGUgaXQgZGlyZWN0bHkgaWYgSSB3YW50ZWQsIGJ1dCBpdCYjMzk7cyBwcm9iYWJseSBiZXR0ZXIgdG8gZW5hYmxlIGl0IGluZGlyZWN0bHkgdGhyb3VnaCBhIGZpbGVzeXN0ZW0gdGhhdCB1c2VzIGl0LiBUaGUgcXVlc3Rpb24gaXMsIGlzIGBORVRGU19TVVBQT1JUYCB2aXNpYmxlIGluIHRoZSBLY29uZmlnPyBMZXQgbWUgcXVpY2tseSBjaGVjayBgZnMvbmV0ZnMvS2NvbmZpZ2AgdG8gY29uZmlybSBpdHMgdmlzaWJpbGl0eS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzIGVuYWJsZWQgYW5kIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL0tjb25maWctMi1cbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxuZnMvbmV0ZnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25maWd1cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYSBkaXJlY3RseSB1c2VyLXNlbGVjdGFibGUgb3B0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGJlaW5nIGNob3NlbiBpbmRpcmVjdGx5IHRocm91Z2ggYW5vdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBJIG5lZWQgdG8gbGlzdCBgQ0lGU2AgYW5kIGA5UF9GU2AgaW4gdGhlIGFwcHJvcHJpYXRlIHNlbGVjdGlvbiBtZW51LCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGNob2ljZS4mIzM0OwoKQnV0IGJlZm9yZSBJIGNvbW1pdCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIHRob3NlIHR3by4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwLiBBIHF1aWNrIHJldmlldyBzaG93cyB0aGF0IGBDSUZTYCBkZXBlbmRzIG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gYDlQX0ZTYCBkZXBlbmRzIG9uIGBORVRfOVBgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgd2lzZSB0byBiZSBjZXJ0YWluLiBTbywgSeKAmWxsIHRha2UgYSBsb29rIGF0IHRoZSBkZXRhaWxzIG9mIGBORVRfOVBgIGJlZm9yZSBmaW5hbGl6aW5nIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZS4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCBiYXNlcyBhbmQgZXZlcnl0aGluZ+KAmXMgcHJvcGVybHkgbGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUXzlQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LzlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvOXAvS2NvbmZpZy01LVxubmV0LzlwL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF85UFxubmV0LzlwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5uZXQvOXAvS2NvbmZpZz0xNz1pZiBORVRfOVBcbm5ldC85cC9LY29uZmlnLTE4LVxubmV0LzlwL0tjb25maWc6MTk6Y29uZmlnIE5FVF85UF9GRFxubmV0LzlwL0tjb25maWctMjAtXHRkZWZhdWx0IE5FVF85UFxuLS1cbm5ldC85cC9LY29uZmlnLTI3LVxubmV0LzlwL0tjb25maWc6Mjg6Y29uZmlnIE5FVF85UF9WSVJUSU9cbm5ldC85cC9LY29uZmlnLTI5LVx0ZGVwZW5kcyBvbiBWSVJUSU9cbi0tXG5uZXQvOXAvS2NvbmZpZy0zNC1cbm5ldC85cC9LY29uZmlnOjM1OmNvbmZpZyBORVRfOVBfWEVOXG5uZXQvOXAvS2NvbmZpZy0zNi1cdGRlcGVuZHMgb24gWEVOXG4tLVxubmV0LzlwL0tjb25maWctNDItXG5uZXQvOXAvS2NvbmZpZzo0Mzpjb25maWcgTkVUXzlQX1VTQkdcbm5ldC85cC9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7OVAgVVNCIEdhZGdldCBUcmFuc3BvcnRcJiMzNDtcbi0tXG5uZXQvOXAvS2NvbmZpZy01MS1cbm5ldC85cC9LY29uZmlnOjUyOmNvbmZpZyBORVRfOVBfUkRNQVxubmV0LzlwL0tjb25maWctNTMtXHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xuLS1cbm5ldC85cC9LY29uZmlnLTU3LVxubmV0LzlwL0tjb25maWc6NTg6Y29uZmlnIE5FVF85UF9ERUJVR1xubmV0LzlwL0tjb25maWctNTktXHRib29sIFwmIzM0O0RlYnVnIGluZm9ybWF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqUXVpY2sgQ2hlY2sgb24gRmlsZSBTeXN0ZW0gT3B0aW9ucyoqCgpSaWdodCwgc28gYE5FVF85UGAg4oCTIHRoYXTigJlzIGEgbWVudWNvbmZpZyBpdGVtLCBlYXN5IGVub3VnaC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHJlbGV2YW50IG9wdGlvbnMgd2hlbiBkaXNjdXNzaW5nIHRoaXMuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCB0byBtZW50aW9uIGBDSUZTYCwgYDlQX0ZTYCwgYW5kIG9mIGNvdXJzZSwgYE5FVF85UGAgaXRzZWxmLiBHb3R0YSBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuCgpOb3csIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS4uLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGlzIGV4cG9ydGVkLiBUaGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0aGUgZmxvdy4gQmVzdCB0byBjb25maXJtIGl0cyB2aXNpYmlsaXR5IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmV0ZnNfcHJlcGFyZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTE0Nj12b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkKHN0cnVjdCBuZXRmc19pb19zdWJyZXF1ZXN0ICpzdWJyZXEpXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTAtfVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNTE6RVhQT1JUX1NZTUJPTChuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZCk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgRXhwb3J0KioKCkhtbSwgaXQgc2VlbXMgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGFzIGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBCZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gKndoeSogaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hlcmUgaXQgc2hvdWxkIGJlLiBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQsIGlkZWFsbHksIHNlZSB0aGUgYEVYUE9SVF9TWU1CT0xgIG1hY3JvIChvciBlcXVpdmFsZW50KSBpbiBwbGFjZSBpZiBpdCYjMzk7cyBtZWFudCB0byBiZSBhdmFpbGFibGUgZXh0ZXJuYWxseS4gVGhpcyB3aWxsIGNsYXJpZnkgaWYgaXQmIzM5O3MgYSBnZW51aW5lIG92ZXJzaWdodCwgYSBidWlsZCBjb25maWd1cmF0aW9uIGlzc3VlLCBvciBhIG1vcmUgZnVuZGFtZW50YWwgZGVzaWduIGRlY2lzaW9uIHRvIGtlZXAgdGhhdCBmdW5jdGlvbiBpbnRlcm5hbCB0byB0aGUgbmV0ZnMgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19wcmVwYXJlX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTkwPXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQwLS8qKlxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNDE6ICogbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQgLSBOb3RlIHdyaXRlIHByZXBhcmF0aW9uIGZhaWxlZFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNDItICogQHN1YnJlcTogVGhlIHN1YnJlcXVlc3QgdG8gbWFya1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQ1LSAqL1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNDY6dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqc3VicmVxKVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNDcte1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUwLX1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTUxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQpO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTItXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTYtICovXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE1Nzp2b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1OC1cdFx0XHQgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MjgwPXNpemVfdCBuZXRmc19hZHZhbmNlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMjk5LVx0aWYgKCFzdHJlYW0tXHUwMDNlY29uc3RydWN0KVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzozMDA6XHRcdG5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCBzdGFydCk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTMwMS1cdHN1YnJlcSA9IHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludGVybmFsIE5ldEZTIFdyaXRlcyoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhbiBleHRlcm5hbGx5IGZhY2luZyBmdW5jdGlvbiwgaXQmIzM5O3MgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBgZnMvbmV0ZnMvYC4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gTXkgYXR0ZW50aW9uIG5lZWRzIHRvIGJlIG9uOgoKKiAgIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgCiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAKKiAgIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgCgpCdXQgaGFuZyBvbiwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIHdhcyB0aGUgb25lIG1vZGlmaWVkIGluIGBkaXJlY3Rfd3JpdGUuY2AuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0LiBHaXZlbiB0aGF0IGNoYW5nZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBzY2FuIGBkaXJlY3Rfd3JpdGUuY2AgZm9yIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyByZWxldmFudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0yMTk9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMS19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTI6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMy1cbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0zMjc9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzkwLX1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM5MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDE2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IGFyZSBteSBvd246CgoqKlVuYnVmZmVyZWQgV3JpdGVzIGFuZCB0aGUgYGJ1ZmZlcmVkX3dyaXRlLmNgIE1vZHVsZSoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB1bmJ1ZmZlcmVkIHdyaXRlcywgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uLiBBbmQgSSYjMzk7bSBhbHNvIHJlbWVtYmVyaW5nIHRoYXQgYGJ1ZmZlcmVkX3dyaXRlLmNgIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgcmVsYXRlZCBjb2RlLCBhbmQgcHJvYmFibHkgc29tZSBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGguIFRoYXQgZmlsZSBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGhhbmRsZSBvbiBpdHMgbG9naWMgaW4gcmVsYXRpb24gdG8gbXkgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz04Nz1zc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00NDItfVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0NDM6RVhQT1JUX1NZTUJPTChuZXRmc19wZXJmb3JtX3dyaXRlKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQ0LVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY4PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODUtfVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0ODY6RVhQT1JUX1NZTUJPTChuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4Ny1cbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUwMT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUyOC19XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjUyOTpFWFBPUlRfU1lNQk9MKG5ldGZzX2ZpbGVfd3JpdGVfaXRlcik7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUzMC1cbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUzNz12bV9mYXVsdF90IG5ldGZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTYxNS19XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjYxNjpFWFBPUlRfU1lNQk9MKG5ldGZzX3BhZ2VfbWt3cml0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIEZpbGUgU3lzdGVtIFdyaXRlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgbmV0d29yayBmaWxlIHN5c3RlbSB3cml0ZSBwYXRoLCBhbmQgaXQgbG9va3MgbGlrZSBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGJvdGggYnVmZmVyZWQgYW5kIHVuYnVmZmVyZWQgd3JpdGUgb3BlcmF0aW9ucy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB3cml0ZXMgYXJlIHByb2Nlc3NlZCwgc28gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGFuZCBvZiBjb3Vyc2UsIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgIGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgdGhpbmtpbmcuIEkgd2FudCB0byBoYXZlIGEgaGFuZGxlIG9uIHRoZSBrZXkgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmV0d2VlbiB0aGUgYnVmZmVyZWQgYW5kIHVuYnVmZmVyZWQgcGF0aHMuCgpJJiMzOTttIHdvcmtpbmcgd2l0aCBhIGZldyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgaGVyZSAtIGBDSUZTYCwgYDlQX0ZTYCwgYW5kIGBORVRfOVBgIOKAkyBhbmQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBob3cgdGhleSBtaWdodCBpbmZsdWVuY2UgdGhlIHdyaXRlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBlYWNoIG9mIHRoZXNlIGZpbGUgc3lzdGVtcyBoYW5kbGUgcmVhZHMgYW5kIHdyaXRlcy4KClRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoZSBleHBvc2VkIGZ1bmN0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBgZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBhdmFpbGFibGUgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBleHBvcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0xNDY9dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqc3VicmVxKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUwLX1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTUxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQpO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTItXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDg9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTMtfVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MTQ6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjE1LVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9ODQzPWludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtOTA3LX1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6OTA4OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGViYWNrX3NpbmdsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyB0aGUgTmV0RlMgV3JpdGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBOZXRGUyBjb2RlIGFuZCBJIHNlZSB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5ldGZzX3dyaXRlcGFnZXNgIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAsIGJvdGggb2Ygd2hpY2ggYXJlIGV4cG9zZWQuIEJ1dCwgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIGBuZXRmc19wcmVwYXJlX3dyaXRlYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGBuZXRmc19wcmVwYXJlX3dyaXRlYCBpcyBjYWxsZWQgYnkgYm90aCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAsIHdoaWNoIGxpdmVzIGluIGBkaXJlY3Rfd3JpdGUuY2AsIGFuZCBieSBgbmV0ZnNfYWR2YW5jZV93cml0ZWAsIHdoaWNoIGlzIGluIGB3cml0ZV9pc3N1ZS5jYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBpbXBvcnRhbnQgY29udHJvbCBwb2ludC4KCkkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZW50aXJlKiB3cml0ZSBwYXRoIHRob3VnaCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJiMzOTtzIGFjdHVhbGx5IGNhbGxpbmcgYG5ldGZzX2FkdmFuY2Vfd3JpdGVgLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGNoYW5nZSByaXBwbGVzIHRocm91Z2ggdGhlIE5ldEZTIHdyaXRlIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCB0cmFjZSB0aG9zZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfYWR2YW5jZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTM5Ni1cdFx0fSBlbHNlIHtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6Mzk3Olx0XHRcdG5ldGZzX2FkdmFuY2Vfd3JpdGV0aHJvdWdoKHdyZXEsIFx1MDAyNndiYywgZm9saW8sIGNvcGllZCxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtMzk4LVx0XHRcdFx0XHRcdCAgIG9mZnNldCAmIzQzOyBjb3BpZWQgPT0gZmxlbixcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIxMT12b2lkIG5ldGZzX2lzc3VlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTItXHRcdCAgICAgICBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0pO1xuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyMTM6c2l6ZV90IG5ldGZzX2FkdmFuY2Vfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNC1cdFx0XHQgICBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yMTY9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW4pO1xuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyMTc6aW50IG5ldGZzX2FkdmFuY2Vfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbmZzL25ldGZzL2ludGVybmFsLmgtMjE4LVx0XHRcdCAgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3QgY29waWVkLCBib29sIHRvX3BhZ2VfZW5kLFxuLS1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jPTE5PXN0YXRpYyB2b2lkIG5ldGZzX3BncHJpdjJfY29weV9mb2xpbyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqY3JlcSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYy03Ny1cdFx0Y2FjaGUtXHUwMDNlc3VibWl0X2V4dGVuZGFibGVfdG8gPSBmc2l6ZSAtIGNhY2hlLVx1MDAzZXN1Ym1pdF9vZmY7XG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYzo3ODpcdFx0cGFydCA9IG5ldGZzX2FkdmFuY2Vfd3JpdGUoY3JlcSwgY2FjaGUsIGZwb3MgJiM0MzsgY2FjaGUtXHUwMDNlc3VibWl0X29mZixcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTc5LVx0XHRcdFx0XHQgICBjYWNoZS1cdTAwM2VzdWJtaXRfbGVuLCB0b19lb2YpO1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MjYyPXZvaWQgbmV0ZnNfaXNzdWVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0yNzktICovXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjI4MDpzaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMjgxLVx0XHRcdCAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTMyMj1zdGF0aWMgaW50IG5ldGZzX3dyaXRlX2ZvbGlvKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNDk0LVx0XHRzdHJlYW0tXHUwMDNlc3VibWl0X2V4dGVuZGFibGVfdG8gPSBmc2l6ZSAtIHN0cmVhbS1cdTAwM2VzdWJtaXRfb2ZmO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo0OTU6XHRcdHBhcnQgPSBuZXRmc19hZHZhbmNlX3dyaXRlKHdyZXEsIHN0cmVhbSwgZnBvcyAmIzQzOyBzdHJlYW0tXHUwMDNlc3VibWl0X29mZixcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNDk2LVx0XHRcdFx0XHQgICBzdHJlYW0tXHUwMDNlc3VibWl0X2xlbiwgdG9fZW9mKTtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTYxOT1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbilcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTY0NC0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjQ1OmludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTY0Ni1cdFx0XHQgICAgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGNvcGllZCwgYm9vbCB0b19wYWdlX2VuZCxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTcxNj1zdGF0aWMgaW50IG5ldGZzX3dyaXRlX2ZvbGlvX3NpbmdsZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgwOC1cdFx0c3RyZWFtLVx1MDAzZXN1Ym1pdF9leHRlbmRhYmxlX3RvID0gZnNpemUgLSBzdHJlYW0tXHUwMDNlc3VibWl0X29mZjtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6ODA5Olx0XHRwYXJ0ID0gbmV0ZnNfYWR2YW5jZV93cml0ZSh3cmVxLCBzdHJlYW0sIGZwb3MgJiM0Mzsgc3RyZWFtLVx1MDAzZXN1Ym1pdF9vZmYsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgxMC1cdFx0XHRcdFx0ICAgc3RyZWFtLVx1MDAzZXN1Ym1pdF9sZW4sIHRvX2VvZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTgyCgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIE5ldHdvcmsgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmaXggY29uY2VybmluZyBwb3RlbnRpYWwgTlVMTCBkZXJlZmVyZW5jZSBpbiB0aGUgYG5ldGZzYCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXRmc19wcmVwYXJlX3dyaXRlYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgaXNzdWUgaXMgYSBtaXNzaW5nIE5VTEwgY2hlY2sgZm9yIHRoZSBhbGxvY2F0aW9uIHdpdGhpbiBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAsIHdoaWNoIGNhbiBsZWFkIHRvIGEgTlVMTCBgc3RyZWFtLSZndDtjb25zdHJ1Y3RgIHRoYXQgdGhlIGNvZGUgZG9lc24mIzM5O3QgaGFuZGxlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGBmcy9uZXRmcy9gIHdoaWNoIGlzIGEga2V5IGFyZWEgdG8gbG9vayBhdC4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoZSByZWxldmFudCBjYWxsIGNoYWlucy4gYG5ldGZzX2FkdmFuY2Vfd3JpdGVgIGlzIGEgcG9pbnQgdG8gbG9vayBhdCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgbmV0ZnNfd3JpdGVfZm9saW9gIGFuZCBgbmV0ZnNfd3JpdGVfZm9saW9fc2luZ2xlYCwgd2hpY2ggYXJlIHVsdGltYXRlbHkgcmVhY2hlZCB0aHJvdWdoIGBuZXRmc193cml0ZXBhZ2VzYCBhbmQgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLiBUaGVyZWZvcmUsIHRob3NlIGxhdHRlciB0d28gZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyBmcm9tIHRoZSB3cml0ZSBwYXRoLCBhcmUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyBhcyB0aGV5IHJlcHJlc2VudCB0aGUgaGlnaGVzdC1sZXZlbCBjYWxsLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCBhbmQgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLCB0aHVzIHRoZSBsYXN0IHR3byBzeW1ib2xzIGFyZSBlc3BlY2lhbGx5IGltcG9ydGFudCB0byBmdXp6LgoKVGhpcyBmaXggY2xlYXJseSBpbXBhY3RzIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBhIGNyYXNoIG9yIG1vcmUgc3VidGxlIGRhdGEgY29ycnVwdGlvbiwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHVuYnVmZmVyZWQgd3JpdGUgcGF0aC4KCkhlcmUmIzM5O3MgbXkgcmVmaW5lZCBsaXN0IG9mIEZvY3VzU3ltYm9sczoKKiAgIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgCiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYAoqICAgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgCiogICBgbmV0ZnNfd3JpdGVwYWdlc2AKKiAgIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYAoKQW5kLCBpbiB0ZXJtcyBvZiBlbmFibGluZyBjb25maWd1cmF0aW9ucywgYENJRlNgLCBgOVBfRlNgLCBhbmQgYE5FVF85UGAgYXJlIHRoZSBtb3N0IGRpcmVjdCByb3V0ZXMgdG8gZW5hYmxlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgYE5FVEZTX1NVUFBPUlRgIGNvbmZpZyBpcyBhIG5vLWdvIGZvciBkaXJlY3QgZW5hYmxlbWVudCwgc28gd2UmIzM5O2xsIHN0aWNrIHdpdGggYENJRlNgIGFuZCBgOVBfRlNgLiBJJiMzOTt2ZSBtYWRlIHN1cmUgdG8gY2hlY2sgdGhlIGNvbmZpZyYjMzk7cyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIHRoZSByZWxldmFudCBuZXR3b3JrIGZpbGVzeXN0ZW0gcGFydHMgYXJlIGJ1aWx0LgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtORVRfOVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc19maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZWJhY2tfc2luZ2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBzdWJyZXF1ZXN0IGFsbG9jYXRpb25zIGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSBsaWJyYXJ5IChmcy9uZXRmcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAoZS5nLiwgdW5kZXIgbWVtb3J5IHByZXNzdXJlKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgd3JpdGUgcGF0aHMgKGxpa2UgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKSB3aGVuIHVzaW5nIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyBDSUZTIG9yIDlQLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O05FVF85UCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGZzX2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIE5VTEwgcG9pbnRlciBjaGVja3MgZm9yIHN1YnJlcXVlc3QgYWxsb2NhdGlvbnMgaW4gdGhlIGNvcmUgbmV0d29yayBmaWxlc3lzdGVtIGxpYnJhcnkgKGZzL25ldGZzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIChlLmcuLCB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyB3cml0ZSBwYXRocyAobGlrZSBuZXRmc19maWxlX3dyaXRlX2l0ZXIpIHdoZW4gdXNpbmcgbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIENJRlMgb3IgOVAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBpcyBOVUxMKS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYzVhZmNhOGVjMWZiMDc1MGRiNmNhYTg1MzZlMmRiMzg5MzBjNDkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDM6MDM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jCmluZGV4IGMxNmZiYWQyODZhMTcuLjU2N2I5NDZiN2E1NjYgMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jCkBAIC0xMTAsNiAmIzQzOzExMCwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAJCWlmICghc3VicmVxKSB7CiAJCQluZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgd3JlcS0mZ3Q7c3RhcnQgJiM0Mzsgd3JlcS0mZ3Q7dHJhbnNmZXJyZWQpOwogCQkJc3VicmVxID0gc3RyZWFtLSZndDtjb25zdHJ1Y3Q7CiYjNDM7CQkJaWYgKCFzdWJyZXEpIHsKJiM0MzsJCQkJd3JlcS0mZ3Q7ZXJyb3IgPSAtRU5PTUVNOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiAJCQlzdHJlYW0tJmd0O2NvbnN0cnVjdCA9IE5VTEw7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKaW5kZXggMmQ5Y2ZjZDQzNjU4Zi4uODUxZjZmOTNhZDQ1YSAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jCkBAIC0xNzAsNiAmIzQzOzE3MCw4IEBAIHZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwKIAkJcm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZSgmYW1wO3dyZXEtJmd0O2J1ZmZlciwgd3JlcS0mZ3Q7Z2ZwKTsKIAogCXN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qod3JlcSk7CiYjNDM7CWlmICghc3VicmVxKQomIzQzOwkJcmV0dXJuOwogCXN1YnJlcS0mZ3Q7c291cmNlCQk9IHN0cmVhbS0mZ3Q7c291cmNlOwogCXN1YnJlcS0mZ3Q7c3RhcnQJCT0gc3RhcnQ7CiAJc3VicmVxLSZndDtzdHJlYW1fbnIJPSBzdHJlYW0tJmd0O3N0cmVhbV9ucjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDgKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZnMvbmV0ZnNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgZml4aW5nIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2AgYW5kIGBmcy9uZXRmcy93cml0ZV9pc3N1ZS5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBgTlVMTGAgY2hlY2tzIGFmdGVyIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBhbmQgYHN0cmVhbS0mZ3Q7Y29uc3RydWN0YCBjYWxscy4gU21hcnQgbW92ZS4gSSBzZWUgdGhlIGNvZGU6IGluIGBkaXJlY3Rfd3JpdGUuY2AsIHRoZXkmIzM5O3JlIGNoZWNraW5nIGlmIGBzdHJlYW0tJmd0O2NvbnN0cnVjdGAgaXMgYE5VTExgIGFmdGVyIGNhbGxpbmcgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGFuZCBhc3NpZ25pbmcgaXQuIFNpbWlsYXJseSwgaW4gYHdyaXRlX2lzc3VlLmNgLCB0aGVyZSYjMzk7cyBhIGNoZWNrIGltbWVkaWF0ZWx5IGFmdGVyIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YC4gVGhpcyBpcyB0ZXh0Ym9vayBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuCgpUaGlzIGlzIGFsbCBhYm91dCBwcmV2ZW50aW5nIGNyYXNoZXMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGNhbiByZXR1cm4gYE5VTExgLCBhbmQgdGhlIHBhdGNoIG5vdyBncmFjZWZ1bGx5IGhhbmRsZXMgdGhhdCBzY2VuYXJpby4gQmVmb3JlLCBpZiBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgcmV0dXJuZWQgYE5VTExgLCB3ZSYjMzk7ZCBiZSBibGluZGx5IGRlcmVmZXJlbmNpbmcgdGhlIE5VTEwgcG9pbnRlciB3aGVuIGFzc2lnbmluZyB0byBgc3VicmVxYC4gQmFuZywga2VybmVsIHBhbmljLiBUaGlzIGZpeCBhZGRzIHRoZSBleHBsaWNpdCBgTlVMTGAgY2hlY2sgYmVmb3JlIHVzaW5nIHRoZSByZXR1cm4gdmFsdWUuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBjbGVhcjogYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGlzIGFsbG9jYXRpbmcgYSBgbmV0ZnNfaW9fc3VicmVxdWVzdGAuIEEgZmFpbHVyZSB0aGVyZSB3aWxsIHJldHVybiBOVUxMLiBTbyBgc3VicmVxLSZndDtzb3VyY2UgPSBzdHJlYW0tJmd0O3NvdXJjZTtgIHdpbGwgY3Jhc2ggaWYgYHN1YnJlcWAgaXMgTlVMTC4gSXQmIzM5O3MgYSB0ZXh0Ym9vayBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEFuZCBiZWNhdXNlIHdlJiMzOTtyZSBqdXN0IGNoZWNraW5nIGZvciBOVUxMIGFuZCBiYWlsaW5nIG91dCB3aXRoIGFuIGVycm9yLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBmaXggZm9yIGEga25vd24gaXNzdWUuCgpTbywgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgbGlrZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiB3aWxsIGNhdGNoIHRoZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhcyB3ZWxsIGFzIHRoZSBpbml0aWFsIGNyYXNoLiBJIGRvbiYjMzk7dCBzZWUgYW55IHZhbHVlIGluIG5lZWRpbmcgS01TQU4gaGVyZS4gSXQmIzM5O3Mgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gSXQmIzM5O3MgYSBwbGFpbiBvbGQtZmFzaGlvbmVkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgbm93IHRha2VuIGNhcmUgb2YuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCBLTVNBTiBpc24mIzM5O3QgbmVjZXNzYXJ5IGhlcmUuIFRoZXJlZm9yZSwgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBpcyBOVUxMKS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBpcyBOVUxMKS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoxNi4yMzA5NjI4ODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxNTQxMzMzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0lGU1wiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIk5FVF85UFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gICAgXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gICAgXCJuZXRmc193cml0ZWJhY2tfc2luZ2xlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgYnkgYWRkaW5nIGNoZWNrcyBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcyAod2hlbiBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgb3IgYHN0cmVhbS1cXHUwMDNlY29uc3RydWN0YCBpcyBOVUxMKS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBzdWJyZXF1ZXN0IGFsbG9jYXRpb25zIGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSBsaWJyYXJ5IChmcy9uZXRmcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAoZS5nLiwgdW5kZXIgbWVtb3J5IHByZXNzdXJlKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgd3JpdGUgcGF0aHMgKGxpa2UgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKSB3aGVuIHVzaW5nIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyBDSUZTIG9yIDlQLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoxNi4yMzA5NjkzMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDU4Nzg4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYzVhZmNhOGVjMWZiMDc1MGRiNmNhYTg1MzZlMmRiMzg5MzBjNDkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDAzOjAzOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5pbmRleCBjMTZmYmFkMjg2YTE3Li41NjdiOTQ2YjdhNTY2IDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXFxuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5AQCAtMTEwLDYgKzExMCwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuIFxcdFxcdGlmICghc3VicmVxKSB7XFxuIFxcdFxcdFxcdG5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCB3cmVxLVxcdTAwM2VzdGFydCArIHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkKTtcXG4gXFx0XFx0XFx0c3VicmVxID0gc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3Q7XFxuK1xcdFxcdFxcdGlmICghc3VicmVxKSB7XFxuK1xcdFxcdFxcdFxcdHdyZXEtXFx1MDAzZWVycm9yID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0c3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3QgPSBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xcbmluZGV4IDJkOWNmY2Q0MzY1OGYuLjg1MWY2ZjkzYWQ0NWEgMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xcbisrKyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcXG5AQCAtMTcwLDYgKzE3MCw4IEBAIHZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4gXFx0XFx0cm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLCB3cmVxLVxcdTAwM2VnZnApO1xcbiBcXG4gXFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcXG4rXFx0aWYgKCFzdWJyZXEpXFxuK1xcdFxcdHJldHVybjtcXG4gXFx0c3VicmVxLVxcdTAwM2Vzb3VyY2VcXHRcXHQ9IHN0cmVhbS1cXHUwMDNlc291cmNlO1xcbiBcXHRzdWJyZXEtXFx1MDAzZXN0YXJ0XFx0XFx0PSBzdGFydDtcXG4gXFx0c3VicmVxLVxcdTAwM2VzdHJlYW1fbnJcXHQ9IHN0cmVhbS1cXHUwMDNlc3RyZWFtX25yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoxNy42Mzc0NzcxODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDM2NzUyNDAyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0lGU1wiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIk5FVF85UFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gICAgXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gICAgXCJuZXRmc193cml0ZWJhY2tfc2luZ2xlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIE5VTEwgcG9pbnRlciBjaGVja3MgZm9yIHN1YnJlcXVlc3QgYWxsb2NhdGlvbnMgaW4gdGhlIGNvcmUgbmV0d29yayBmaWxlc3lzdGVtIGxpYnJhcnkgKGZzL25ldGZzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIChlLmcuLCB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyB3cml0ZSBwYXRocyAobGlrZSBuZXRmc19maWxlX3dyaXRlX2l0ZXIpIHdoZW4gdXNpbmcgbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIENJRlMgb3IgOVAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZjNWFmY2E4ZWMxZmIwNzUwZGI2Y2FhODUzNmUyZGIzODkzMGM0OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzowMzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbmluZGV4IGMxNmZiYWQyODZhMTcuLjU2N2I5NDZiN2E1NjYgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbkBAIC0xMTAsNiArMTEwLDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcdFx0aWYgKCFzdWJyZXEpIHtcbiBcdFx0XHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgd3JlcS1cdTAwM2VzdGFydCArIHdyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuIFx0XHRcdHN1YnJlcSA9IHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3Q7XG4rXHRcdFx0aWYgKCFzdWJyZXEpIHtcbitcdFx0XHRcdHdyZXEtXHUwMDNlZXJyb3IgPSAtRU5PTUVNO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHRcdHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3QgPSBOVUxMO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbmluZGV4IDJkOWNmY2Q0MzY1OGYuLjg1MWY2ZjkzYWQ0NWEgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG4rKysgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5AQCAtMTcwLDYgKzE3MCw4IEBAIHZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbiBcdFx0cm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZShcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlciwgd3JlcS1cdTAwM2VnZnApO1xuIFxuIFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcbitcdGlmICghc3VicmVxKVxuK1x0XHRyZXR1cm47XG4gXHRzdWJyZXEtXHUwMDNlc291cmNlXHRcdD0gc3RyZWFtLVx1MDAzZXNvdXJjZTtcbiBcdHN1YnJlcS1cdTAwM2VzdGFydFx0XHQ9IHN0YXJ0O1xuIFx0c3VicmVxLVx1MDAzZXN0cmVhbV9uclx0PSBzdHJlYW0tXHUwMDNlc3RyZWFtX25yO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6MTcuNjM3NDc4NDMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2MzkxMzkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCBhbmQgYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCdzIGJlZWZpbmcgdXAgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgYE5VTExgIHJldHVybnMgZnJvbSBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgYW5kIGhhbmRsaW5nIGEgYE5VTExgIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBwb2ludGVyIGFmdGVyIGBuZXRmc19wcmVwYXJlX3dyaXRlYC5cblxuTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBXZSdyZSBsb29raW5nIGF0IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBhbmQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgLiBSaWdodCwgYm90aCBwYXJ0IG9mIHRoZSBOZXR3b3JrIEZpbGVzeXN0ZW0gc3VwcG9ydC4gVGhhdCdzIGdvb2QsIGtlZXBzIHRoZSBzY29wZSBjb250YWluZWQsIGFuZCBJIGFscmVhZHkgaGF2ZSBhIG1lbnRhbCBtb2RlbCBvZiBob3cgbmV0ZnMgb3BlcmF0ZXMuXG5cblRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGZpbGVzLCBgZGlyZWN0X3dyaXRlLmNgIGFuZCBgd3JpdGVfaXNzdWUuY2AsIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSd2ZSBhZGRyZXNzZWQgdGhvc2UgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEl0J3MgcHJvYmFibHkganVzdCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgdGhleSd2ZSBoYW5kbGVkIGFsbCB0aGUgZWRnZSBjYXNlcyBhbmQgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAzOjIyLjIwMTM5MzkzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ4MTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUwMT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTE0LVxcdCAgICB0ZXN0X2JpdChORVRGU19JQ1RYX1VOQlVGRkVSRUQsIFxcdTAwMjZpY3R4LVxcdTAwM2VmbGFncykpXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1MTU6XFx0XFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNi1cXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE0LSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNi17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02NC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo2NTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTMtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6OTQ6c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTk1LXtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1NC1cXHRcXHRpZiAoIXJldHJ5KSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTU1OlxcdFxcdFxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdCh3cmVxLCBzdHJlYW0sIHN1YnJlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTU2LVxcdFxcdFxcdHN1YnJlcSA9IE5VTEw7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDEtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjAyOlxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDMtXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjA3OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwOC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTAtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjExOlxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjEyLVxcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxOC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMTk6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIyMC1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODgtXFx0aWYgKGFzeW5jKSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjg5OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2d3JlcS1cXHUwMDNld29yaywgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkwLVxcdFxcdHdyZXEtXFx1MDAzZWlvY2IgPSBpb2NiO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkzLVxcdH0gZWxzZSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjk0OlxcdFxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjk1LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTEtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMjpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMy1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTQtLyoqXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzE1OiAqIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciAtIFVuYnVmZmVyZWQgd3JpdGUgdG8gYSBmaWxlXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzE2LSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNi0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjc6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzI4LXtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NS1cXHRcXHRcXHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg2OlxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgZnJvbSwgTlVMTCk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzg3LW91dDpcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM5MC19XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzkxOkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6MjIuMjU5ODgyMjgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMwOTQ1MjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGZpeCwgdGhpbmtpbmcgYWxvdWQgYXMgSSB3b3VsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE5ldEZTIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAuIEFwcGFyZW50bHksIHRoZXJlJ3MgYSBtaXNzaW5nIGBOVUxMYCBjaGVjayB3aXRoaW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIHdoaWNoIGlzIGNhbGxlZCBieSBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIEFuZCBpZiB0aGUgc3VicmVxdWVzdCBhbGxvY2F0aW9uIGZhaWxzLCBgc3RyZWFtLVx1MDAzZWNvbnN0cnVjdGAgY291bGQgZW5kIHVwIGBOVUxMYC4gVGhlIHN1YnNlcXVlbnQgY29kZSBwYXRoIGluIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCB0aGVuIGRvZXNuJ3QgaGFuZGxlIGEgYE5VTExgIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBncmFjZWZ1bGx5LlxuXG5SaWdodCwgc28gdGhlIGZpeCBpcyBwcm9iYWJseSBnb2luZyB0byBhZGQgdGhhdCBtaXNzaW5nIGNoZWNrIGluIGBuZXRmc19wcmVwYXJlX3dyaXRlYC4gV2Ugc2hvdWxkIHNlZSBhbiBhZGRpdGlvbmFsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgY2FsbCByZXR1cm5zIGEgdmFsaWQgc3VicmVxdWVzdCBwb2ludGVyLlxuXG5BbmQgdGhlbiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAuLi50aGF0J3MgdGhlIG9uZSB0aGF0IG5lZWRzIHRoZSBkZWZlbnNpdmUgY29kaW5nIHRvIGhhbmRsZSB0aGUgYE5VTExgIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YC4gV2Ugd2lsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3MgaGFuZGxpbmcgdGhlIHBvdGVudGlhbCBgTlVMTGAgdmFsdWUgbm93LCBvciBlbHNlIGl0IGlzIGEgY3Jhc2guXG5cbkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIGNvbmZpcm0gd2hlcmUgdGhlIGNvZGUgaXMgYmVpbmcgYWRkZWQgdG8gY2hlY2sgdGhlIG5ldyByZXR1cm4gdmFsdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoyOS41NjkzMzg1ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMTg5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfcHJlcGFyZV93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9OTQ9c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTEwLVxcdFxcdGlmICghc3VicmVxKSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTExOlxcdFxcdFxcdG5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCB3cmVxLVxcdTAwM2VzdGFydCArIHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xMTItXFx0XFx0XFx0c3VicmVxID0gc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3Q7XFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIwMT1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL2ludGVybmFsLmgtMjA0LVxcdFxcdFxcdFxcdFxcdFxcdGVudW0gbmV0ZnNfaW9fb3JpZ2luIG9yaWdpbik7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyMDU6dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbmZzL25ldGZzL2ludGVybmFsLmgtMjA2LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTkwPXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNDAtLyoqXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNDE6ICogbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQgLSBOb3RlIHdyaXRlIHByZXBhcmF0aW9uIGZhaWxlZFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQyLSAqIEBzdWJyZXE6IFRoZSBzdWJyZXF1ZXN0IHRvIG1hcmtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQ1LSAqL1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTQ2OnZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQoc3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKnN1YnJlcSlcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0Ny17XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1MC19XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNTE6RVhQT1JUX1NZTUJPTChuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZCk7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTItXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1Ni0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE1Nzp2b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTgtXFx0XFx0XFx0IHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MjgwPXNpemVfdCBuZXRmc19hZHZhbmNlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0yOTktXFx0aWYgKCFzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdClcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjMwMDpcXHRcXHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgc3RhcnQpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzAxLVxcdHN1YnJlcSA9IHN0cmVhbS1cXHUwMDNlY29uc3RydWN0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoyOS42MTUzNjEyNDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDI5NTk3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZSBQYXRoIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIHRoZSBgZnMvbmV0ZnNgIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggZGlyZWN0IHdyaXRlcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogdGhleSd2ZSBhZGRlZCBOVUxMIGNoZWNrcyBhZnRlciBjYWxsaW5nIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBpbiBib3RoIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBhbmQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgLiBUaGlzIGlzIGEgY2xhc3NpYyBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbW92ZSwgYW5kIEknbSBndWVzc2luZyBpdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBcblxuU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGd1YXJkaW5nIGFnYWluc3QgdGhlIHNjZW5hcmlvIHdoZXJlIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBmYWlscywgd2hpY2ggd291bGQgbGlrZWx5IHJldHVybiBgTlVMTGAsIHBvc3NpYmx5IGR1ZSB0byBhbiBgRU5PTUVNYCBlcnJvciwgYW5kIHRoZW4gZG93bnN0cmVhbSBjb2RlIHdvdWxkIGF0dGVtcHQgdG8gdXNlIHRoZSByZXR1cm5lZCBwb2ludGVyLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcy5cblxuTm93LCBsZXQgbWUgbWVudGFsbHkgdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgaXMgc2lnbmlmaWNhbnQgYW5kIHRoYXQgdGhvc2UgcGF0aHMgYXJlIHJlYWNoYWJsZS4gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGlzIHRoZSBjb3JlIG9mIHRoaXMsIGFuZCBpdCBhcHBlYXJzIHRvIGJlIHJlYWNoZWQgdmlhIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmNgLiBUaG9zZSwgaW4gdHVybiwgYXJlIGNhbGxlZCBieSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgd2hpY2ggaXMgdXNlZCBpbiBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCAoZm91bmQgaW4gYGJ1ZmZlcmVkX3dyaXRlLmNgKS4gKlRoYXQqIGZ1bmN0aW9uIGlzIGV4cG9ydGVkIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaXMgYWN0dWFsbHkgdXNlZCBieSBmaWxlc3lzdGVtcyBsaWtlIGBhZnNgLCBgOXBgLCBgY2lmc2AsIGFuZCBgY2VwaGAuXG5cbkFscmlnaHQsIHRoYXQgY29uZmlybXMgaXQ6IFRoaXMgaXMgYSByZWxldmFudCBmaXgsIHBvdGVudGlhbGx5IGltcGFjdGluZyBhIG51bWJlciBvZiByZWFsLXdvcmxkIG5ldHdvcmsgZmlsZXN5c3RlbXMsIGdpdmVuIGl0IHByZXZlbnRzIGEgcG9zc2libGUgY3Jhc2ggdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBUaGUgcGF0Y2ggY2xlYXJseSBjbG9zZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiBhIGZhaXJseSBpbXBvcnRhbnQgcGFydCBvZiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIHN0YWNrLiBJdCdzIGEgc29saWQsIGlmIHNpbXBsZSwgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAzOjM5LjA0NDk2MTMxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzNzk1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX2ZpbGVfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zNzE9ZmlsZXN5c3RlbSBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgVkZTIHJlYWQvd3JpdGVfaXRlciBtZXRob2RzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtMzczLVxcdHNzaXplX3QgbmV0ZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6Mzc0OlxcdHNzaXplX3QgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3NS1cXHRzc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XFxuLS1cXG5mcy85cC92ZnNfZmlsZS5jPTQwMT12OWZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzLzlwL3Zmc19maWxlLmMtNDExLVxcdHA5X2RlYnVnKFA5X0RFQlVHX0NBQ0hFLCBcXFwiKGNhY2hlZClcXFxcblxcXCIpO1xcbmZzLzlwL3Zmc19maWxlLmM6NDEyOlxcdHJldHVybiBuZXRmc19maWxlX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvOXAvdmZzX2ZpbGUuYy00MTMtfVxcbi0tXFxuZnMvYWZzL2ZpbGUuYz0zND1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFmc19maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9hZnMvZmlsZS5jLTM4LVxcdC5yZWFkX2l0ZXJcXHQ9IGFmc19maWxlX3JlYWRfaXRlcixcXG5mcy9hZnMvZmlsZS5jOjM5OlxcdC53cml0ZV9pdGVyXFx0PSBuZXRmc19maWxlX3dyaXRlX2l0ZXIsXFxuZnMvYWZzL2ZpbGUuYy00MC1cXHQubW1hcF9wcmVwYXJlXFx0PSBhZnNfZmlsZV9tbWFwX3ByZXBhcmUsXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTQ4Nj1FWFBPUlRfU1lNQk9MKG5ldGZzX2J1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDg4LS8qKlxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDg5OiAqIG5ldGZzX2ZpbGVfd3JpdGVfaXRlciAtIHdyaXRlIGRhdGEgdG8gYSBmaWxlXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00OTAtICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MDAtICovXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1MDE6c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MDIte1xcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MjgtfVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NTI5OkVYUE9SVF9TWU1CT0wobmV0ZnNfZmlsZV93cml0ZV9pdGVyKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUzMC1cXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTI5ODk9Y2lmc19zdHJpY3Rfd3JpdGV2KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwNi1cXHRcXHQgICAgKChjaWZzX3NiX2ZsYWdzKGNpZnNfc2IpIFxcdTAwMjYgQ0lGU19NT1VOVF9OT1BPU0lYQlJMKSA9PSAwKSkge1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jOjMwMDc6XFx0XFx0XFx0d3JpdHRlbiA9IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDA4LVxcdFxcdFxcdGNpZnNfdXBkYXRlX2lfYmxvY2tzX2FmdGVyX3dyaXRlKGlvY2IsIHdyaXR0ZW4pO1xcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAxOS1cXHQgKi9cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDIwOlxcdHdyaXR0ZW4gPSBuZXRmc19maWxlX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAyMS1cXHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMwNDA9c3NpemVfdCBjaWZzX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzA0My1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDQ0OlxcdHdyaXR0ZW4gPSBuZXRmc19maWxlX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzA0NS1cXHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMwNjQ9c3NpemVfdCBjaWZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwODctXFxuZnMvc21iL2NsaWVudC9maWxlLmM6MzA4ODpcXHR3cml0dGVuID0gbmV0ZnNfZmlsZV93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwODktXFx0Y2lmc191cGRhdGVfaV9ibG9ja3NfYWZ0ZXJfd3JpdGUoaW9jYiwgd3JpdHRlbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9Mzk2PXNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtMzk3LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDozOTg6c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pO1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC0zOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAzOjQwLjk0ODc2MTU5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjExNDg3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgRmlsZXN5c3RlbSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGlzIGNvZGUgYW5kIEknbSBwcmV0dHkgY2VydGFpbiB0aGF0IHRoZSBleGVjdXRpb24gcGF0aCBJJ20gaW50ZXJlc3RlZCBpbiBnb2VzIGRpcmVjdGx5IHRocm91Z2ggYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLiBUaGF0IGZlZWxzIHJpZ2h0LCBnaXZlbiB0aGUgY29udGV4dC4gTm93LCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBzeXN0ZW0gSSdtIHRlc3RpbmcsIEknbGwgbmVlZCB0byBjb25maXJtIGEgY291cGxlIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBgTkVURlNfU1VQUE9SVGAgaGFzIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGVuIGF0IGxlYXN0ICpvbmUqIG9mIHRoZSBmaWxlc3lzdGVtcyB0aGF0IGJ1aWxkcyAqb24gdG9wKiBvZiBpdC4gU28gdGhhdCBtZWFucyBzb21ldGhpbmcgbGlrZSBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBvciBgQ0VQSF9GU2AsIGFtb25nIG90aGVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBuZXRmc2AgdG8gY29uZmlybSB3aGljaCBkZXBlbmRlbmNpZXMgYXJlIHRoZSBkcml2aW5nIGZhY3RvcnMuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZnMvbmV0ZnMvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6NDUuMzY5OTEyNjM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzEyNjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURlNfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvS2NvbmZpZy0yLVxcbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxcbmZzL25ldGZzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzo0NS40MTMwNDUxMzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2NTQzMDU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIDlQIENvbmZpZ3VyYXRpb24gU3BhY2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIDlQLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBjdXJyZW50bHkgZW5hYmxlZCwgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIGlmIGFueSByZWNlbnQgY2hhbmdlcyBoYXZlIGltcGFjdGVkIHRoZSBvcHRpb25zLiBMZXQncyBzdGFydCB3aXRoIGBmcy85cC9LY29uZmlnYC4gVGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCwgdGhlIGNvbnRyb2wgcGFuZWwsIGZvciB0aGUgOVAgZmlsZXN5c3RlbSdzIGZlYXR1cmUgc2V0LiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIG9wdGlvbnMsIGNoZWNraW5nIGZvciBhbnkgbmV3IGFkZGl0aW9ucyBvciByZW1vdmFscyB0aGF0IEkgaGF2ZW4ndCB0cmFja2VkIHlldC4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byByZWNlbnQgc2VjdXJpdHkgcGF0Y2hlcyBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgYW55IG5ldyBjbGllbnQgb3Igc2VydmVyIGNhcGFiaWxpdGllcywgb3IgbW9yZSBncmFudWxhciBvcHRpb25zIGZvciB0dW5pbmc/IFRoZSBnb2FsIGhlcmUgaXNuJ3QgYSBsaW5lLWJ5LWxpbmUgcmV2aWV3LCBidXQgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZXN0YWJsaXNoIGEgYmFzZWxpbmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHdoaWNoIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbCBvbiBvdGhlcnMsIGFuZCBob3cgdGhvc2UgaW50ZXJkZXBlbmRlbmNpZXMgbWlnaHQgYWZmZWN0IG15IHNwZWNpZmljIHVzZSBjYXNlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBjaG9pY2VzIEknbGwgbmVlZCB0byBtYWtlIGxhdGVyLiBUaW1lIHRvIGdldCBteSBiZWFyaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAzOjQ4Ljg3ODQ3ODk0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNTEzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIDlQX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzLzlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvOXAvS2NvbmZpZzoyOmNvbmZpZyA5UF9GU1xcbmZzLzlwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MTQ9aWYgOVBfRlNcXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXFxuZnMvOXAvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWctMjItXFxuZnMvOXAvS2NvbmZpZzoyMzpjb25maWcgOVBfRlNfUE9TSVhfQUNMXFxuZnMvOXAvS2NvbmZpZy0yNC1cXHRib29sIFxcXCI5UCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MzI9ZW5kaWZcXG4tLVxcbmZzLzlwL0tjb25maWctMzQtXFxuZnMvOXAvS2NvbmZpZzozNTpjb25maWcgOVBfRlNfU0VDVVJJVFlcXG5mcy85cC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIjlQIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6NDguOTIyNjM1NDQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MzE1MTY1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUIgQ2xpZW50IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFNNQiBjbGllbnQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL3NtYi9jbGllbnQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMgdG8gcmVzaWRlLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFNNQiBjbGllbnQgaXMgYnVpbHQgYW5kIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0J2xsIGdpdmUgbWUgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGlmZmVyZW50IGNvbXBpbGUtdGltZSBvcHRpb25zIGF2YWlsYWJsZSwgYW5kIHRoZWlyIGRlcGVuZGVuY2llcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYW55IG1vZGlmaWNhdGlvbnMgb3IgZGVlcGVyIGFuYWx5c2lzIEkgbmVlZCB0byBkbyBkb3duIHRoZSBsaW5lLiBJdCBpcyBhbHdheXMgYmVzdCB0byBzdGFydCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHdoZXJlIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzo1My4zNTQxNTQ1MjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDY2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDSUZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIkV4dGVuZGVkIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjY4OmNvbmZpZyBDSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSBsZXNzIHNlY3VyZSBkaWFsZWN0c1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04Mi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05My1cXHRib29sIFxcXCJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMDc6Y29uZmlnIENJRlNfUE9TSVhcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVxcdGJvb2wgXFxcIkNJRlMgUE9TSVggRXh0ZW5zaW9uc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMTgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXFx0Ym9vbCBcXFwiRW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjktXFx0Ym9vbCBcXFwiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMzk6Y29uZmlnIENJRlNfREVCVUdfRFVNUF9LRVlTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cXHRib29sIFxcXCJEdW1wIGVuY3J5cHRpb24ga2V5cyBmb3Igb2ZmbGluZSBkZWNyeXB0aW9uIChVbnNhZmUpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVxcdGJvb2wgXFxcIkRGUyBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNjMtXFx0Ym9vbCBcXFwiU1dOIGZlYXR1cmUgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE3Mzpjb25maWcgQ0lGU19ORlNEX0VYUE9SVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiQWxsb3cgbmZzZCB0byBleHBvcnQgQ0lGUyBmaWxlIHN5c3RlbVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0xNzk9aWYgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE4Mi1cXHRib29sIFxcXCJTTUIgRGlyZWN0IHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTE6Y29uZmlnIENJRlNfRlNDQUNIRVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBDSUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTk4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXFx0Ym9vbCBcXFwiU01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlNNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzo1My4zOTg2MjQwMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0Mzk0MzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgTmV0d29yayBGaWxlIFN5c3RlbSBTdXBwb3J0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbiBhbmQgcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgQ0lGUyBvciA5UF9GUywgYXJlIHJlc3BvbnNpYmxlIGZvciBzZWxlY3RpbmcgYE5FVEZTX1NVUFBPUlRgLiBUaW1lIHRvIGp1bXAgaW50byB0aGUgYGZzL25ldGZzL0tjb25maWdgIGZpbGUgYW5kIGdldCB0aGlzIHN0cmFpZ2h0ZW5lZCBvdXQuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6NTYuMjQyNTY5MzUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTc3MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVURlNfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvS2NvbmZpZz0yPWNvbmZpZyA5UF9GU1xcbi0tXFxuZnMvOXAvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gTkVUXzlQXFxuZnMvOXAvS2NvbmZpZzo1OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvOXAvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2Fmcy9LY29uZmlnPTI9Y29uZmlnIEFGU19GU1xcbi0tXFxuZnMvYWZzL0tjb25maWctNi1cXHRzZWxlY3QgRE5TX1JFU09MVkVSXFxuZnMvYWZzL0tjb25maWc6NzpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzL2Fmcy9LY29uZmlnLTgtXFx0c2VsZWN0IENSWVBUT19LUkI1XFxuLS1cXG5mcy9jZXBoL0tjb25maWc9Mj1jb25maWcgQ0VQSF9GU1xcbi0tXFxuZnMvY2VwaC9LY29uZmlnLTUtXFx0c2VsZWN0IENFUEhfTElCXFxuZnMvY2VwaC9LY29uZmlnOjY6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy9jZXBoL0tjb25maWctNy1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4tLVxcbmZzL25mcy9LY29uZmlnPTE3Mz1jb25maWcgTkZTX0ZTQ0FDSEVcXG4tLVxcbmZzL25mcy9LY29uZmlnLTE3NS1cXHRkZXBlbmRzIG9uIE5GU19GU1xcbmZzL25mcy9LY29uZmlnOjE3NjpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzL25mcy9LY29uZmlnLTE3Ny1cXHRzZWxlY3QgRlNDQUNIRVxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnPTI9Y29uZmlnIENJRlNcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMC1cXHRzZWxlY3QgT0lEX1JFR0lTVFJZXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIxOlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIyLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6NTYuMzMyMzQ1ODYyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjk1NTI1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUZXN0aW5nIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZXMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgZGVwZW5kZW5jeSB0cmVlLCBgTkVURlNfU1VQUE9SVGAgaXMgYmVpbmcgcHVsbGVkIGluIGJ5IGEgaGFuZGZ1bCBvZiBuZXR3b3JrIGZpbGVzeXN0ZW1zOiBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgLCBgQ0lGU2AsIGFuZCBgTkZTX0ZTQ0FDSEVgLiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgZm9yIHRlc3RpbmcgdGhpcyB3cml0ZSBwYXRoLCBJIGNhbiBqdXN0IGVuYWJsZSBgOVBfRlNgIGFuZCBgQ0lGU2AgYW5kIHRoYXQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYnJpbmcgaW4gYE5FVEZTX1NVUFBPUlRgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQncyBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0byB0ZXN0OiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgYW5kIGBuZXRmc19wcmVwYXJlX3dyaXRlYC5cblxuV2FpdCBhIG1pbnV0ZS4uLiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgc3RhdGljLiBUaGF0IG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIGNvbXBsaWNhdGVkLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgY2FsbGluZyBpdC4gQnV0IGBuZXRmc19wcmVwYXJlX3dyaXRlYCBpcyBleHBvcnRlZCwgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmFjdGlvbiBJIGNhbiB1c2UuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBpdGVyYXRvciBmdW5jdGlvbnMgdG9vLCBzbyBsZXQncyBjaGVjayBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLiBUaGF0IHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IHRoZSBzdGF0aWMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGdldHMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNDowMi42MDE5MDIwNDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTczNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz01MDE9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNC1cXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcXHUwMDI2aWN0eC1cXHUwMDNlZmxhZ3MpKVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NTE1OlxcdFxcdHJldHVybiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MTYtXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0yMDc9c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTgtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE5OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMjAtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzExLX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTI6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTMtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzE0LS8qKlxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxNTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxNi0gKiBAaW9jYjogSU8gc3RhdGUgc3RydWN0dXJlXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjYtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzI3OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyOC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODUtXFx0XFx0XFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4NjpcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4Ny1vdXQ6XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zOTAtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM5MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjAyLjY1MDg4Mzk2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTA2MjAwNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgTmV0RlMgTW9kdWxlKipcblxuQWxyaWdodCwgc28gaXQgbG9va3MgbGlrZSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgIGFyZSBib3RoIGV4cG9ydGVkLCB3aGljaCBtZWFucyB0aGV5J3JlIGZhaXIgZ2FtZSBmb3IgZnV6emluZy4gRXhjZWxsZW50ISBUaG9zZSBhcmUgdGhlIGtpbmRzIG9mIGVudHJ5IHBvaW50cyB0aGF0IGNhbiByZXZlYWwgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy4gQWxzbywgYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAgaXMgZXhwb3NlZCB0b28sIHdoaWNoIGlzIGFub3RoZXIgb2J2aW91cyBjYW5kaWRhdGUuIEFuZCwgb2YgY291cnNlLCB3ZSBjYW4gYWRkIGBuZXRmc19wcmVwYXJlX3dyaXRlYCB0byB0aGUgbGlzdC4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGtpbmRzIG9mIG1hbGZvcm1lZCBkYXRhIEkgY2FuIHRocm93IGF0IHRob3NlIGZ1bmN0aW9ucy5cblxuTm93LCBsZXQncyBzZWUgaWYgd2UgY2FuIGdvIGRlZXBlci4gSXQncyBhIGdvb2QgcHJhY3RpY2UgdG8gZXhhbWluZSBhbGxvY2F0aW9uIHJvdXRpbmVzIGFzc29jaWF0ZWQgd2l0aCBvdXIgdGFyZ2V0IHdyaXRlIGNhbGxzLiBMZXQncyBzZWUgaWYgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGlzIGFsc28gZXhwb3J0ZWQuIFRoYXQgd291bGQgYmUgYW5vdGhlciBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmdXp6IHRhcmdldCB0byBldmFsdWF0ZSwgaWYgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzA5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MDcuNTU3MDg2ODE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyODk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19hbGxvY19zdWJyZXF1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MjExPXN0YXRpYyB2b2lkIG5ldGZzX3JlYWRfdG9fcGFnZWNhY2hlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTIyMi1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MjIzOlxcdFxcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3QocnJlcSk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTIyNC1cXHRcXHRpZiAoIXN1YnJlcSkge1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3JlYWQuYz00OD1zdGF0aWMgdm9pZCBuZXRmc19kaXNwYXRjaF91bmJ1ZmZlcmVkX3JlYWRzKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3JlYWQuYy01Ny1cXG5mcy9uZXRmcy9kaXJlY3RfcmVhZC5jOjU4OlxcdFxcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3QocnJlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3JlYWQuYy01OS1cXHRcXHRpZiAoIXN1YnJlcSkge1xcbi0tXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaD05Mz12b2lkIG5ldGZzX3B1dF9mYWlsZWRfcmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSk7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDo5NDpzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSk7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC05NS1cXG4tLVxcbmZzL25ldGZzL29iamVjdHMuYz0xODU9dm9pZCBuZXRmc19wdXRfZmFpbGVkX3JlcXVlc3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXFxuLS1cXG5mcy9uZXRmcy9vYmplY3RzLmMtMjAxLSAqL1xcbmZzL25ldGZzL29iamVjdHMuYzoyMDI6c3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKm5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXFxuZnMvbmV0ZnMvb2JqZWN0cy5jLTIwMy17XFxuLS1cXG5mcy9uZXRmcy9yZWFkX3JldHJ5LmM9MjY9c3RhdGljIHZvaWQgbmV0ZnNfcmV0cnlfcmVhZF9zdWJyZXF1ZXN0cyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcXG4tLVxcbmZzL25ldGZzL3JlYWRfcmV0cnkuYy0xOTctXFx0XFx0ZG8ge1xcbmZzL25ldGZzL3JlYWRfcmV0cnkuYzoxOTg6XFx0XFx0XFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChycmVxKTtcXG5mcy9uZXRmcy9yZWFkX3JldHJ5LmMtMTk5LVxcdFxcdFxcdGlmICghc3VicmVxKSB7XFxuLS1cXG5mcy9uZXRmcy9yZWFkX3NpbmdsZS5jPTkwPXN0YXRpYyBpbnQgbmV0ZnNfc2luZ2xlX2Rpc3BhdGNoX3JlYWQoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXFxuLS1cXG5mcy9uZXRmcy9yZWFkX3NpbmdsZS5jLTk0LVxcbmZzL25ldGZzL3JlYWRfc2luZ2xlLmM6OTU6XFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChycmVxKTtcXG5mcy9uZXRmcy9yZWFkX3NpbmdsZS5jLTk2LVxcdGlmICghc3VicmVxKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0xNTc9dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNzEtXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNzI6XFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE3My1cXHRpZiAoIXN1YnJlcSlcXG4tLVxcbmZzL25ldGZzL3dyaXRlX3JldHJ5LmM9MTc9c3RhdGljIHZvaWQgbmV0ZnNfcmV0cnlfd3JpdGVfc3RyZWFtKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfcmV0cnkuYy0xNTEtXFx0XFx0ZG8ge1xcbmZzL25ldGZzL3dyaXRlX3JldHJ5LmM6MTUyOlxcdFxcdFxcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qod3JlcSk7XFxuZnMvbmV0ZnMvd3JpdGVfcmV0cnkuYy0xNTMtXFx0XFx0XFx0c3VicmVxLVxcdTAwM2Vzb3VyY2VcXHRcXHQ9IHRvLVxcdTAwM2Vzb3VyY2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjA3LjYwNjQyMDA0M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIzNTM5OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTmV0RlMgV3JpdGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgaXMgZGVmaW5pdGVseSBhbiBpbnRlcm5hbCBmdW5jdGlvbjsgaXQncyB0dWNrZWQgYXdheSB3aXRoaW4gYGZzL25ldGZzL2AuIFRoYXQgbWVhbnMgSSdsbCBoYXZlIHRvIGJ5cGFzcyBpdCBpbiB0aGlzIGFuYWx5c2lzLiBNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBrZXkgd3JpdGUgZnVuY3Rpb25zOiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLCBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCwgYW5kIGBuZXRmc19wcmVwYXJlX3dyaXRlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGV4YW1pbmUgZm9yIGhvdyBkYXRhIGdldHMgd3JpdHRlbi5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBsZXQncyBrZWVwIGl0IHByYWN0aWNhbC4gQ29uY2VudHJhdGluZyBvbiBgQ0lGU2AgYW5kIGA5UF9GU2AgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIFRoZXkncmUgY29tbW9ubHkgdXNlZCBhbmQgc2hvdWxkIHB1bGwgaW4gYE5FVEZTX1NVUFBPUlRgLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBJIG5lZWQuXG5cbkhtbS4uLiBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyPyBXYWl0LCBgTkVURlNfU1VQUE9SVGAgaXRzZWxmIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBtZWFuaW5nIEkgY291bGQgZW5hYmxlIGl0IGRpcmVjdGx5IGlmIEkgd2FudGVkLCBidXQgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gZW5hYmxlIGl0IGluZGlyZWN0bHkgdGhyb3VnaCBhIGZpbGVzeXN0ZW0gdGhhdCB1c2VzIGl0LiBUaGUgcXVlc3Rpb24gaXMsIGlzIGBORVRGU19TVVBQT1JUYCB2aXNpYmxlIGluIHRoZSBLY29uZmlnPyBMZXQgbWUgcXVpY2tseSBjaGVjayBgZnMvbmV0ZnMvS2NvbmZpZ2AgdG8gY29uZmlybSBpdHMgdmlzaWJpbGl0eS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgZW5hYmxlZCBhbmQgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MTIuMjI5OTY0MTA0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ3NDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURlNfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvS2NvbmZpZy0yLVxcbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxcbmZzL25ldGZzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNDoxMi4yNzQ0NDQxMDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyOTgzNDY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25maWd1cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGEgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlIG9wdGlvbiwgbWVhbmluZyBpdCdzIGJlaW5nIGNob3NlbiBpbmRpcmVjdGx5IHRocm91Z2ggYW5vdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBJIG5lZWQgdG8gbGlzdCBgQ0lGU2AgYW5kIGA5UF9GU2AgaW4gdGhlIGFwcHJvcHJpYXRlIHNlbGVjdGlvbiBtZW51LCBzaW5jZSB0aGF0J3Mgd2hhdCdzIGNvbnRyb2xsaW5nIHRoZSBjaG9pY2UuXCJcblxuQnV0IGJlZm9yZSBJIGNvbW1pdCwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhvc2UgdHdvLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAuIEEgcXVpY2sgcmV2aWV3IHNob3dzIHRoYXQgYENJRlNgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgOVBfRlNgIGRlcGVuZHMgb24gYE5FVF85UGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGl0J3MgYWx3YXlzIHdpc2UgdG8gYmUgY2VydGFpbi4gU28sIEnigJlsbCB0YWtlIGEgbG9vayBhdCB0aGUgZGV0YWlscyBvZiBgTkVUXzlQYCBiZWZvcmUgZmluYWxpemluZyB0aGUgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBhbGwgYmFzZXMgYW5kIGV2ZXJ5dGhpbmfigJlzIHByb3Blcmx5IGxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwOTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNDoxOS4yMDQyODE5MzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDE4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfOVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvOXAvS2NvbmZpZy01LVxcbm5ldC85cC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfOVBcXG5uZXQvOXAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJQbGFuIDkgUmVzb3VyY2UgU2hhcmluZyBTdXBwb3J0ICg5UDIwMDApXFxcIlxcbi0tXFxubmV0LzlwL0tjb25maWc9MTc9aWYgTkVUXzlQXFxubmV0LzlwL0tjb25maWctMTgtXFxubmV0LzlwL0tjb25maWc6MTk6Y29uZmlnIE5FVF85UF9GRFxcbm5ldC85cC9LY29uZmlnLTIwLVxcdGRlZmF1bHQgTkVUXzlQXFxuLS1cXG5uZXQvOXAvS2NvbmZpZy0yNy1cXG5uZXQvOXAvS2NvbmZpZzoyODpjb25maWcgTkVUXzlQX1ZJUlRJT1xcbm5ldC85cC9LY29uZmlnLTI5LVxcdGRlcGVuZHMgb24gVklSVElPXFxuLS1cXG5uZXQvOXAvS2NvbmZpZy0zNC1cXG5uZXQvOXAvS2NvbmZpZzozNTpjb25maWcgTkVUXzlQX1hFTlxcbm5ldC85cC9LY29uZmlnLTM2LVxcdGRlcGVuZHMgb24gWEVOXFxuLS1cXG5uZXQvOXAvS2NvbmZpZy00Mi1cXG5uZXQvOXAvS2NvbmZpZzo0Mzpjb25maWcgTkVUXzlQX1VTQkdcXG5uZXQvOXAvS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiOVAgVVNCIEdhZGdldCBUcmFuc3BvcnRcXFwiXFxuLS1cXG5uZXQvOXAvS2NvbmZpZy01MS1cXG5uZXQvOXAvS2NvbmZpZzo1Mjpjb25maWcgTkVUXzlQX1JETUFcXG5uZXQvOXAvS2NvbmZpZy01My1cXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcXG4tLVxcbm5ldC85cC9LY29uZmlnLTU3LVxcbm5ldC85cC9LY29uZmlnOjU4OmNvbmZpZyBORVRfOVBfREVCVUdcXG5uZXQvOXAvS2NvbmZpZy01OS1cXHRib29sIFxcXCJEZWJ1ZyBpbmZvcm1hdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MTkuMjUwMzA0NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MzkxMDkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqUXVpY2sgQ2hlY2sgb24gRmlsZSBTeXN0ZW0gT3B0aW9ucyoqXG5cblJpZ2h0LCBzbyBgTkVUXzlQYCDigJMgdGhhdOKAmXMgYSBtZW51Y29uZmlnIGl0ZW0sIGVhc3kgZW5vdWdoLiBMZXQncyBtYWtlIHN1cmUgd2UgaW5jbHVkZSByZWxldmFudCBvcHRpb25zIHdoZW4gZGlzY3Vzc2luZyB0aGlzLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgdG8gbWVudGlvbiBgQ0lGU2AsIGA5UF9GU2AsIGFuZCBvZiBjb3Vyc2UsIGBORVRfOVBgIGl0c2VsZi4gR290dGEgZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLlxuXG5Ob3csIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS4uLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGlzIGV4cG9ydGVkLiBUaGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0aGUgZmxvdy4gQmVzdCB0byBjb25maXJtIGl0cyB2aXNpYmlsaXR5IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNDoyMi44MjQyMTgxMjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODAwNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5ldGZzX3ByZXBhcmVfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MTQ2PXZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQoc3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKnN1YnJlcSlcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUwLX1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE1MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkKTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MjIuODg0MDI1MjEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDc1ODI1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIEV4cG9ydCoqXG5cbkhtbSwgaXQgc2VlbXMgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGlzbid0IHNob3dpbmcgdXAgYXMgYW4gZXhwb3J0ZWQgc3ltYm9sLiBUaGF0J3MgYSByZWQgZmxhZy4gQmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvICp3aHkqIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hlcmUgaXQgc2hvdWxkIGJlLiBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kLCBpZGVhbGx5LCBzZWUgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNybyAob3IgZXF1aXZhbGVudCkgaW4gcGxhY2UgaWYgaXQncyBtZWFudCB0byBiZSBhdmFpbGFibGUgZXh0ZXJuYWxseS4gVGhpcyB3aWxsIGNsYXJpZnkgaWYgaXQncyBhIGdlbnVpbmUgb3ZlcnNpZ2h0LCBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXNzdWUsIG9yIGEgbW9yZSBmdW5kYW1lbnRhbCBkZXNpZ24gZGVjaXNpb24gdG8ga2VlcCB0aGF0IGZ1bmN0aW9uIGludGVybmFsIHRvIHRoZSBuZXRmcyBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MjYuOTkxNjEyNzQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk0NzQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19wcmVwYXJlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL3dyaXRlX2lzc3VlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz05MD1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQwLS8qKlxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTQxOiAqIG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkIC0gTm90ZSB3cml0ZSBwcmVwYXJhdGlvbiBmYWlsZWRcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0Mi0gKiBAc3VicmVxOiBUaGUgc3VicmVxdWVzdCB0byBtYXJrXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0NS0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE0Njp2b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkKHN0cnVjdCBuZXRmc19pb19zdWJyZXF1ZXN0ICpzdWJyZXEpXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNDcte1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTAtfVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTUxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUyLVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTYtICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNTc6dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTU4LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTI4MD1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMjk5LVxcdGlmICghc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3QpXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzozMDA6XFx0XFx0bmV0ZnNfcHJlcGFyZV93cml0ZSh3cmVxLCBzdHJlYW0sIHN0YXJ0KTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTMwMS1cXHRzdWJyZXEgPSBzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MjcuMDM2NTY2NTE3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjIxMTM4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW50ZXJuYWwgTmV0RlMgV3JpdGVzKipcblxuT2theSwgc28gdGhpcyBpc24ndCBhbiBleHRlcm5hbGx5IGZhY2luZyBmdW5jdGlvbiwgaXQncyB1c2VkIGludGVybmFsbHkgd2l0aGluIGBmcy9uZXRmcy9gLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LiBNeSBhdHRlbnRpb24gbmVlZHMgdG8gYmUgb246XG5cbiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYFxuKiAgIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgXG5cbkJ1dCBoYW5nIG9uLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgd2FzIHRoZSBvbmUgbW9kaWZpZWQgaW4gYGRpcmVjdF93cml0ZS5jYC4gR290dGEgZG91YmxlLWNoZWNrIHRoYXQuIEdpdmVuIHRoYXQgY2hhbmdlLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHNjYW4gYGRpcmVjdF93cml0ZS5jYCBmb3IgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgcmVsZXZhbnQuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjM0LjU1ODY4MzYyOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MjA5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0yMTk9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzExLX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTI6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTMtXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0zMjc9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zOTAtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM5MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjM0LjYwMzIxMDQ4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzI1MTI3NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IGFyZSBteSBvd246XG5cbioqVW5idWZmZXJlZCBXcml0ZXMgYW5kIHRoZSBgYnVmZmVyZWRfd3JpdGUuY2AgTW9kdWxlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB1bmJ1ZmZlcmVkIHdyaXRlcywgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uLiBBbmQgSSdtIGFsc28gcmVtZW1iZXJpbmcgdGhhdCBgYnVmZmVyZWRfd3JpdGUuY2AgaXMgd2hlcmUgSSdsbCBmaW5kIHJlbGF0ZWQgY29kZSwgYW5kIHByb2JhYmx5IHNvbWUgb2YgdGhlIGluZnJhc3RydWN0dXJlIHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoLiBUaGF0IGZpbGUgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBoYW5kbGUgb24gaXRzIGxvZ2ljIGluIHJlbGF0aW9uIHRvIG15IHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6NDIuMzI4MzQxMzg2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE0Mjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz04Nz1zc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0Mi19XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0NDM6RVhQT1JUX1NZTUJPTChuZXRmc19wZXJmb3JtX3dyaXRlKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0NC1cXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY4PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4NS19XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0ODY6RVhQT1JUX1NZTUJPTChuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODctXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUwMT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTI4LX1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjUyOTpFWFBPUlRfU1lNQk9MKG5ldGZzX2ZpbGVfd3JpdGVfaXRlcik7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MzAtXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUzNz12bV9mYXVsdF90IG5ldGZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNjE1LX1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjYxNjpFWFBPUlRfU1lNQk9MKG5ldGZzX3BhZ2VfbWt3cml0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjQyLjM3MzQ5MTg1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTMwMjE5ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIEZpbGUgU3lzdGVtIFdyaXRlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW0gd3JpdGUgcGF0aCwgYW5kIGl0IGxvb2tzIGxpa2UgYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBib3RoIGJ1ZmZlcmVkIGFuZCB1bmJ1ZmZlcmVkIHdyaXRlIG9wZXJhdGlvbnMuIE15IGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyBob3cgd3JpdGVzIGFyZSBwcm9jZXNzZWQsIHNvIEknbGwgbmVlZCB0byBrZWVwIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGFuZCBvZiBjb3Vyc2UsIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgIGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgdGhpbmtpbmcuIEkgd2FudCB0byBoYXZlIGEgaGFuZGxlIG9uIHRoZSBrZXkgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmV0d2VlbiB0aGUgYnVmZmVyZWQgYW5kIHVuYnVmZmVyZWQgcGF0aHMuXG5cbkknbSB3b3JraW5nIHdpdGggYSBmZXcgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgLSBgQ0lGU2AsIGA5UF9GU2AsIGFuZCBgTkVUXzlQYCDigJMgYW5kIEknbGwgbmVlZCB0byByZW1lbWJlciBob3cgdGhleSBtaWdodCBpbmZsdWVuY2UgdGhlIHdyaXRlIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IGVhY2ggb2YgdGhlc2UgZmlsZSBzeXN0ZW1zIGhhbmRsZSByZWFkcyBhbmQgd3JpdGVzLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGUgZXhwb3NlZCBmdW5jdGlvbnMsIEknbGwgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBgZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCdzIGF2YWlsYWJsZSBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6NDYuOTAzNzE0NDQ3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ3Mzc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL3dyaXRlX2lzc3VlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0xNDY9dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqc3VicmVxKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTAtfVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTUxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUyLVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDg9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYxMy19XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MTQ6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYxNS1cXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9ODQzPWludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy05MDctfVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6OTA4OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGViYWNrX3NpbmdsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjQ2Ljk0OTE5Njg1N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ3OTQ2MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIHRoZSBOZXRGUyBXcml0ZSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBOZXRGUyBjb2RlIGFuZCBJIHNlZSB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBgbmV0ZnNfd3JpdGVwYWdlc2AgYW5kIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYm90aCBvZiB3aGljaCBhcmUgZXhwb3NlZC4gQnV0LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGlzIHBhdGNoIGZvY3VzZXMgb24gYG5ldGZzX3ByZXBhcmVfd3JpdGVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBgbmV0ZnNfcHJlcGFyZV93cml0ZWAgaXMgY2FsbGVkIGJ5IGJvdGggYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCB3aGljaCBsaXZlcyBpbiBgZGlyZWN0X3dyaXRlLmNgLCBhbmQgYnkgYG5ldGZzX2FkdmFuY2Vfd3JpdGVgLCB3aGljaCBpcyBpbiBgd3JpdGVfaXNzdWUuY2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgaW1wb3J0YW50IGNvbnRyb2wgcG9pbnQuXG5cbkkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZW50aXJlKiB3cml0ZSBwYXRoIHRob3VnaCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJ3MgYWN0dWFsbHkgY2FsbGluZyBgbmV0ZnNfYWR2YW5jZV93cml0ZWAuIFRoYXQnbGwgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBjaGFuZ2UgcmlwcGxlcyB0aHJvdWdoIHRoZSBOZXRGUyB3cml0ZSBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhvc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6NTEuMTk3MTQ2MTEyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExNzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19hZHZhbmNlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtMzk2LVxcdFxcdH0gZWxzZSB7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzozOTc6XFx0XFx0XFx0bmV0ZnNfYWR2YW5jZV93cml0ZXRocm91Z2god3JlcSwgXFx1MDAyNndiYywgZm9saW8sIGNvcGllZCxcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTM5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQgKyBjb3BpZWQgPT0gZmxlbixcXG4tLVxcbmZzL25ldGZzL2ludGVybmFsLmg9MjExPXZvaWQgbmV0ZnNfaXNzdWVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTItXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSk7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyMTM6c2l6ZV90IG5ldGZzX2FkdmFuY2Vfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTQtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yMTY9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW4pO1xcbmZzL25ldGZzL2ludGVybmFsLmg6MjE3OmludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBjb3BpZWQsIGJvb2wgdG9fcGFnZV9lbmQsXFxuLS1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYz0xOT1zdGF0aWMgdm9pZCBuZXRmc19wZ3ByaXYyX2NvcHlfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKmNyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYy03Ny1cXHRcXHRjYWNoZS1cXHUwMDNlc3VibWl0X2V4dGVuZGFibGVfdG8gPSBmc2l6ZSAtIGNhY2hlLVxcdTAwM2VzdWJtaXRfb2ZmO1xcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jOjc4OlxcdFxcdHBhcnQgPSBuZXRmc19hZHZhbmNlX3dyaXRlKGNyZXEsIGNhY2hlLCBmcG9zICsgY2FjaGUtXFx1MDAzZXN1Ym1pdF9vZmYsXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtNzktXFx0XFx0XFx0XFx0XFx0ICAgY2FjaGUtXFx1MDAzZXN1Ym1pdF9sZW4sIHRvX2VvZik7XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTI2Mj12b2lkIG5ldGZzX2lzc3VlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0yNzktICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoyODA6c2l6ZV90IG5ldGZzX2FkdmFuY2Vfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0yODEtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0zMjI9c3RhdGljIGludCBuZXRmc193cml0ZV9mb2xpbyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNDk0LVxcdFxcdHN0cmVhbS1cXHUwMDNlc3VibWl0X2V4dGVuZGFibGVfdG8gPSBmc2l6ZSAtIHN0cmVhbS1cXHUwMDNlc3VibWl0X29mZjtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjQ5NTpcXHRcXHRwYXJ0ID0gbmV0ZnNfYWR2YW5jZV93cml0ZSh3cmVxLCBzdHJlYW0sIGZwb3MgKyBzdHJlYW0tXFx1MDAzZXN1Ym1pdF9vZmYsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy00OTYtXFx0XFx0XFx0XFx0XFx0ICAgc3RyZWFtLVxcdTAwM2VzdWJtaXRfbGVuLCB0b19lb2YpO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MTk9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTY0NC0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjY0NTppbnQgbmV0ZnNfYWR2YW5jZV93cml0ZXRocm91Z2goc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjQ2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3QgY29waWVkLCBib29sIHRvX3BhZ2VfZW5kLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz03MTY9c3RhdGljIGludCBuZXRmc193cml0ZV9mb2xpb19zaW5nbGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgwOC1cXHRcXHRzdHJlYW0tXFx1MDAzZXN1Ym1pdF9leHRlbmRhYmxlX3RvID0gZnNpemUgLSBzdHJlYW0tXFx1MDAzZXN1Ym1pdF9vZmY7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MDk6XFx0XFx0cGFydCA9IG5ldGZzX2FkdmFuY2Vfd3JpdGUod3JlcSwgc3RyZWFtLCBmcG9zICsgc3RyZWFtLVxcdTAwM2VzdWJtaXRfb2ZmLFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODEwLVxcdFxcdFxcdFxcdFxcdCAgIHN0cmVhbS1cXHUwMDNlc3VibWl0X2xlbiwgdG9fZW9mKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6NTEuMjQyMjY3ODIyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5OTUzMDM2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBOZXR3b3JrIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UncmUgZGVhbGluZyB3aXRoIGEgZml4IGNvbmNlcm5pbmcgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2UgaW4gdGhlIGBuZXRmc2AgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBgbmV0ZnNfcHJlcGFyZV93cml0ZWAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBmdW5jdGlvbnMuIFRoZSBjb3JlIGlzc3VlIGlzIGEgbWlzc2luZyBOVUxMIGNoZWNrIGZvciB0aGUgYWxsb2NhdGlvbiB3aXRoaW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgLCB3aGljaCBjYW4gbGVhZCB0byBhIE5VTEwgYHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3RgIHRoYXQgdGhlIGNvZGUgZG9lc24ndCBoYW5kbGUuIFdlIGFyZSBkZWFsaW5nIHdpdGggYGZzL25ldGZzL2Agd2hpY2ggaXMgYSBrZXkgYXJlYSB0byBsb29rIGF0LlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoZSByZWxldmFudCBjYWxsIGNoYWlucy4gYG5ldGZzX2FkdmFuY2Vfd3JpdGVgIGlzIGEgcG9pbnQgdG8gbG9vayBhdCwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBuZXRmc193cml0ZV9mb2xpb2AgYW5kIGBuZXRmc193cml0ZV9mb2xpb19zaW5nbGVgLCB3aGljaCBhcmUgdWx0aW1hdGVseSByZWFjaGVkIHRocm91Z2ggYG5ldGZzX3dyaXRlcGFnZXNgIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIFRoZXJlZm9yZSwgdGhvc2UgbGF0dGVyIHR3byBmdW5jdGlvbnMsIGFsb25nIHdpdGggZnVuY3Rpb25zIGZyb20gdGhlIHdyaXRlIHBhdGgsIGFyZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIGFzIHRoZXkgcmVwcmVzZW50IHRoZSBoaWdoZXN0LWxldmVsIGNhbGwuIFRoZSBwYXRjaCBpdHNlbGYgaXMgcmVhY2hhYmxlIHRocm91Z2ggYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAsIHRodXMgdGhlIGxhc3QgdHdvIHN5bWJvbHMgYXJlIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIGZ1enouXG5cblRoaXMgZml4IGNsZWFybHkgaW1wYWN0cyBmdW5jdGlvbmFsaXR5LiBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIFwiV29ydGhGdXp6aW5nXCIgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBhIGNyYXNoIG9yIG1vcmUgc3VidGxlIGRhdGEgY29ycnVwdGlvbiwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHVuYnVmZmVyZWQgd3JpdGUgcGF0aC5cblxuSGVyZSdzIG15IHJlZmluZWQgbGlzdCBvZiBGb2N1c1N5bWJvbHM6XG4qICAgYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYFxuKiAgIGBuZXRmc193cml0ZXBhZ2VzYFxuKiAgIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYFxuXG5BbmQsIGluIHRlcm1zIG9mIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBgQ0lGU2AsIGA5UF9GU2AsIGFuZCBgTkVUXzlQYCBhcmUgdGhlIG1vc3QgZGlyZWN0IHJvdXRlcyB0byBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZSBgTkVURlNfU1VQUE9SVGAgY29uZmlnIGlzIGEgbm8tZ28gZm9yIGRpcmVjdCBlbmFibGVtZW50LCBzbyB3ZSdsbCBzdGljayB3aXRoIGBDSUZTYCBhbmQgYDlQX0ZTYC4gSSd2ZSBtYWRlIHN1cmUgdG8gY2hlY2sgdGhlIGNvbmZpZydzIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhlIHJlbGV2YW50IG5ldHdvcmsgZmlsZXN5c3RlbSBwYXJ0cyBhcmUgYnVpbHQuXG5cbk9rYXksIEknbSByZWFkeSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE4MiwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDU6MDEuMjM3NTc0NTM2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxNDAzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJORVRfOVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc19maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBzdWJyZXF1ZXN0IGFsbG9jYXRpb25zIGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSBsaWJyYXJ5IChmcy9uZXRmcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAoZS5nLiwgdW5kZXIgbWVtb3J5IHByZXNzdXJlKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgd3JpdGUgcGF0aHMgKGxpa2UgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKSB3aGVuIHVzaW5nIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyBDSUZTIG9yIDlQLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJORVRfOVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc19maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBzdWJyZXF1ZXN0IGFsbG9jYXRpb25zIGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSBsaWJyYXJ5IChmcy9uZXRmcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAoZS5nLiwgdW5kZXIgbWVtb3J5IHByZXNzdXJlKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgd3JpdGUgcGF0aHMgKGxpa2UgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKSB3aGVuIHVzaW5nIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyBDSUZTIG9yIDlQLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNTowMS4zMTI3MjA1NzVaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzIzNjYxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNTowMS4zMTMyNzcyNTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzA3MTgwMzk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdGAgaXMgTlVMTCkuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzVhZmNhOGVjMWZiMDc1MGRiNmNhYTg1MzZlMmRiMzg5MzBjNDkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDM6MDM6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5pbmRleCBjMTZmYmFkMjg2YTE3Li41NjdiOTQ2YjdhNTY2IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbisrKyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5AQCAtMTEwLDYgKzExMCwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4gXHRcdGlmICghc3VicmVxKSB7XG4gXHRcdFx0bmV0ZnNfcHJlcGFyZV93cml0ZSh3cmVxLCBzdHJlYW0sIHdyZXEtXHUwMDNlc3RhcnQgKyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiBcdFx0XHRzdWJyZXEgPSBzdHJlYW0tXHUwMDNlY29uc3RydWN0O1xuK1x0XHRcdGlmICghc3VicmVxKSB7XG4rXHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gLUVOT01FTTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbiBcdFx0XHRzdHJlYW0tXHUwMDNlY29uc3RydWN0ID0gTlVMTDtcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5pbmRleCAyZDljZmNkNDM2NThmLi44NTFmNmY5M2FkNDVhIDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xuKysrIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xuQEAgLTE3MCw2ICsxNzAsOCBAQCB2b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG4gXHRcdHJvbGxpbmdfYnVmZmVyX21ha2Vfc3BhY2UoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIsIHdyZXEtXHUwMDNlZ2ZwKTtcbiBcbiBcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qod3JlcSk7XG4rXHRpZiAoIXN1YnJlcSlcbitcdFx0cmV0dXJuO1xuIFx0c3VicmVxLVx1MDAzZXNvdXJjZVx0XHQ9IHN0cmVhbS1cdTAwM2Vzb3VyY2U7XG4gXHRzdWJyZXEtXHUwMDNlc3RhcnRcdFx0PSBzdGFydDtcbiBcdHN1YnJlcS1cdTAwM2VzdHJlYW1fbnJcdD0gc3RyZWFtLVx1MDAzZXN0cmVhbV9ucjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA1OjAxLjMxMzI3ODIyNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDcxNzc0MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgZnMvbmV0ZnNgIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIGZpeGluZyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgIGFuZCBgZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY2AuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBhZGRlZCBgTlVMTGAgY2hlY2tzIGFmdGVyIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBhbmQgYHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3RgIGNhbGxzLiBTbWFydCBtb3ZlLiBJIHNlZSB0aGUgY29kZTogaW4gYGRpcmVjdF93cml0ZS5jYCwgdGhleSdyZSBjaGVja2luZyBpZiBgc3RyZWFtLVx1MDAzZWNvbnN0cnVjdGAgaXMgYE5VTExgIGFmdGVyIGNhbGxpbmcgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGFuZCBhc3NpZ25pbmcgaXQuIFNpbWlsYXJseSwgaW4gYHdyaXRlX2lzc3VlLmNgLCB0aGVyZSdzIGEgY2hlY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgLiBUaGlzIGlzIHRleHRib29rIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy5cblxuVGhpcyBpcyBhbGwgYWJvdXQgcHJldmVudGluZyBjcmFzaGVzIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBjYW4gcmV0dXJuIGBOVUxMYCwgYW5kIHRoZSBwYXRjaCBub3cgZ3JhY2VmdWxseSBoYW5kbGVzIHRoYXQgc2NlbmFyaW8uIEJlZm9yZSwgaWYgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIHJldHVybmVkIGBOVUxMYCwgd2UnZCBiZSBibGluZGx5IGRlcmVmZXJlbmNpbmcgdGhlIE5VTEwgcG9pbnRlciB3aGVuIGFzc2lnbmluZyB0byBgc3VicmVxYC4gQmFuZywga2VybmVsIHBhbmljLiBUaGlzIGZpeCBhZGRzIHRoZSBleHBsaWNpdCBgTlVMTGAgY2hlY2sgYmVmb3JlIHVzaW5nIHRoZSByZXR1cm4gdmFsdWUuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGl0J3MgY2xlYXI6IGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBpcyBhbGxvY2F0aW5nIGEgYG5ldGZzX2lvX3N1YnJlcXVlc3RgLiBBIGZhaWx1cmUgdGhlcmUgd2lsbCByZXR1cm4gTlVMTC4gU28gYHN1YnJlcS1cdTAwM2Vzb3VyY2UgPSBzdHJlYW0tXHUwMDNlc291cmNlO2Agd2lsbCBjcmFzaCBpZiBgc3VicmVxYCBpcyBOVUxMLiBJdCdzIGEgdGV4dGJvb2sgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBbmQgYmVjYXVzZSB3ZSdyZSBqdXN0IGNoZWNraW5nIGZvciBOVUxMIGFuZCBiYWlsaW5nIG91dCB3aXRoIGFuIGVycm9yLCB0aGVyZSdzIG5vIHdheSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGZpeCBmb3IgYSBrbm93biBpc3N1ZS5cblxuU28sIHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIGxpa2UgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4gd2lsbCBjYXRjaCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYXMgd2VsbCBhcyB0aGUgaW5pdGlhbCBjcmFzaC4gSSBkb24ndCBzZWUgYW55IHZhbHVlIGluIG5lZWRpbmcgS01TQU4gaGVyZS4gSXQncyBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLiBJdCdzIGEgcGxhaW4gb2xkLWZhc2hpb25lZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIG5vdyB0YWtlbiBjYXJlIG9mLlxuXG5JJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBoZXJlLiBUaGVyZWZvcmUsIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDgsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDU6MDguMzg1MDU3MzdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBieSBhZGRpbmcgY2hlY2tzIGZvciBhbGxvY2F0aW9uIGZhaWx1cmVzICh3aGVuIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBvciBgc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3RgIGlzIE5VTEwpLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdGAgaXMgTlVMTCkuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow65js2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 02:19:36 +0000 UTC FinishedAt: 2026-08-14 03:05:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "9P_FS", "NET_9P" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "9P_FS", "NET_9P" ], "series_id": "fd92d3eb-4501-42c5-851b-e92280b6d1ec" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netfs_file_write_iter", "netfs_unbuffered_write_iter", "netfs_unbuffered_write_iter_locked", "netfs_writepages", "netfs_writeback_single" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7TkVUXzlQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGViYWNrX3NpbmdsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBieSBhZGRpbmcgY2hlY2tzIGZvciBhbGxvY2F0aW9uIGZhaWx1cmVzICh3aGVuIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBvciBgc3RyZWFtLVx1MDAzZWNvbnN0cnVjdGAgaXMgTlVMTCkuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIE5VTEwgcG9pbnRlciBjaGVja3MgZm9yIHN1YnJlcXVlc3QgYWxsb2NhdGlvbnMgaW4gdGhlIGNvcmUgbmV0d29yayBmaWxlc3lzdGVtIGxpYnJhcnkgKGZzL25ldGZzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIChlLmcuLCB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyB3cml0ZSBwYXRocyAobGlrZSBuZXRmc19maWxlX3dyaXRlX2l0ZXIpIHdoZW4gdXNpbmcgbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIENJRlMgb3IgOVAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYzVhZmNhOGVjMWZiMDc1MGRiNmNhYTg1MzZlMmRiMzg5MzBjNDkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDM6MDM6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuaW5kZXggYzE2ZmJhZDI4NmExNy4uNTY3Yjk0NmI3YTU2NiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuQEAgLTExMCw2ICYjNDM7MTEwLDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcdFx0aWYgKCFzdWJyZXEpIHtcbiBcdFx0XHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgd3JlcS1cdTAwM2VzdGFydCAmIzQzOyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiBcdFx0XHRzdWJyZXEgPSBzdHJlYW0tXHUwMDNlY29uc3RydWN0O1xuJiM0MztcdFx0XHRpZiAoIXN1YnJlcSkge1xuJiM0MztcdFx0XHRcdHdyZXEtXHUwMDNlZXJyb3IgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0c3RyZWFtLVx1MDAzZWNvbnN0cnVjdCA9IE5VTEw7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xuaW5kZXggMmQ5Y2ZjZDQzNjU4Zi4uODUxZjZmOTNhZDQ1YSAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbkBAIC0xNzAsNiAmIzQzOzE3MCw4IEBAIHZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbiBcdFx0cm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZShcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlciwgd3JlcS1cdTAwM2VnZnApO1xuIFxuIFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcbiYjNDM7XHRpZiAoIXN1YnJlcSlcbiYjNDM7XHRcdHJldHVybjtcbiBcdHN1YnJlcS1cdTAwM2Vzb3VyY2VcdFx0PSBzdHJlYW0tXHUwMDNlc291cmNlO1xuIFx0c3VicmVxLVx1MDAzZXN0YXJ0XHRcdD0gc3RhcnQ7XG4gXHRzdWJyZXEtXHUwMDNlc3RyZWFtX25yXHQ9IHN0cmVhbS1cdTAwM2VzdHJlYW1fbnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7TkVUXzlQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGViYWNrX3NpbmdsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgTlVMTCBwb2ludGVyIGNoZWNrcyBmb3Igc3VicmVxdWVzdCBhbGxvY2F0aW9ucyBpbiB0aGUgY29yZSBuZXR3b3JrIGZpbGVzeXN0ZW0gbGlicmFyeSAoZnMvbmV0ZnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKGUuZy4sIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSkuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVkZTIHdyaXRlIHBhdGhzIChsaWtlIG5ldGZzX2ZpbGVfd3JpdGVfaXRlcikgd2hlbiB1c2luZyBuZXR3b3JrIGZpbGVzeXN0ZW1zIHN1Y2ggYXMgQ0lGUyBvciA5UC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjNWFmY2E4ZWMxZmIwNzUwZGI2Y2FhODUzNmUyZGIzODkzMGM0OTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzowMzoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKaW5kZXggYzE2ZmJhZDI4NmExNy4uNTY3Yjk0NmI3YTU2NiAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKQEAgLTExMCw2ICYjNDM7MTEwLDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSkKIAkJaWYgKCFzdWJyZXEpIHsKIAkJCW5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCB3cmVxLSZndDtzdGFydCAmIzQzOyB3cmVxLSZndDt0cmFuc2ZlcnJlZCk7CiAJCQlzdWJyZXEgPSBzdHJlYW0tJmd0O2NvbnN0cnVjdDsKJiM0MzsJCQlpZiAoIXN1YnJlcSkgewomIzQzOwkJCQl3cmVxLSZndDtlcnJvciA9IC1FTk9NRU07CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJCXN0cmVhbS0mZ3Q7Y29uc3RydWN0ID0gTlVMTDsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYwppbmRleCAyZDljZmNkNDM2NThmLi44NTFmNmY5M2FkNDVhIDEwMDY0NAotLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKQEAgLTE3MCw2ICYjNDM7MTcwLDggQEAgdm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLAogCQlyb2xsaW5nX2J1ZmZlcl9tYWtlX3NwYWNlKCZhbXA7d3JlcS0mZ3Q7YnVmZmVyLCB3cmVxLSZndDtnZnApOwogCiAJc3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTsKJiM0MzsJaWYgKCFzdWJyZXEpCiYjNDM7CQlyZXR1cm47CiAJc3VicmVxLSZndDtzb3VyY2UJCT0gc3RyZWFtLSZndDtzb3VyY2U7CiAJc3VicmVxLSZndDtzdGFydAkJPSBzdGFydDsKIAlzdWJyZXEtJmd0O3N0cmVhbV9ucgk9IHN0cmVhbS0mZ3Q7c3RyZWFtX25yOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjExCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBGaWxlc3lzdGVtIFdyaXRlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgIGFuZCBgZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g6IGl0JiMzOTtzIGJlZWZpbmcgdXAgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgYE5VTExgIHJldHVybnMgZnJvbSBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgYW5kIGhhbmRsaW5nIGEgYE5VTExgIGBzdHJlYW0tJmd0O2NvbnN0cnVjdGAgcG9pbnRlciBhZnRlciBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuCgpMZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIFdlJiMzOTtyZSBsb29raW5nIGF0IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBhbmQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgLiBSaWdodCwgYm90aCBwYXJ0IG9mIHRoZSBOZXR3b3JrIEZpbGVzeXN0ZW0gc3VwcG9ydC4gVGhhdCYjMzk7cyBnb29kLCBrZWVwcyB0aGUgc2NvcGUgY29udGFpbmVkLCBhbmQgSSBhbHJlYWR5IGhhdmUgYSBtZW50YWwgbW9kZWwgb2YgaG93IG5ldGZzIG9wZXJhdGVzLgoKVGltZSB0byBkaXZlIGludG8gdGhvc2UgZmlsZXMsIGBkaXJlY3Rfd3JpdGUuY2AgYW5kIGB3cml0ZV9pc3N1ZS5jYCwgYW5kIHNlZSBleGFjdGx5IGhvdyB0aGV5JiMzOTt2ZSBhZGRyZXNzZWQgdGhvc2UgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEl0JiMzOTtzIHByb2JhYmx5IGp1c3QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTt2ZSBoYW5kbGVkIGFsbCB0aGUgZWRnZSBjYXNlcyBhbmQgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUwMT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNC1cdCAgICB0ZXN0X2JpdChORVRGU19JQ1RYX1VOQlVGRkVSRUQsIFx1MDAyNmljdHgtXHUwMDNlZmxhZ3MpKVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1MTU6XHRcdHJldHVybiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNi1cbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE2LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02NC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjY1OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTY2LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTMtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo5NDpzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy05NS17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTU0LVx0XHRpZiAoIXJldHJ5KSB7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTU6XHRcdFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9jb2xsZWN0KHdyZXEsIHN0cmVhbSwgc3VicmVxKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1Ni1cdFx0XHRzdWJyZXEgPSBOVUxMO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwMS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwMjpcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwMy1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMDc6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDgte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxMC1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxMTpcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTItXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE4LSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE5OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIyMC1cdFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg4LVx0aWYgKGFzeW5jKSB7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyODk6XHRcdElOSVRfV09SSyhcdTAwMjZ3cmVxLVx1MDAzZXdvcmssIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkwLVx0XHR3cmVxLVx1MDAzZWlvY2IgPSBpb2NiO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI5My1cdH0gZWxzZSB7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyOTQ6XHRcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yOTUtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTEtfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzEyOkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTMtXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTQtLyoqXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTU6ICogbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyIC0gVW5idWZmZXJlZCB3cml0ZSB0byBhIGZpbGVcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxNi0gKiBAaW9jYjogSU8gc3RhdGUgc3RydWN0dXJlXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzI2LSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzI3OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzI4LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODUtXHRcdFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg2Olx0cmV0ID0gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChpb2NiLCBmcm9tLCBOVUxMKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4Ny1vdXQ6XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzkwLX1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM5MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGZpeCwgdGhpbmtpbmcgYWxvdWQgYXMgSSB3b3VsZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBOZXRGUyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiBgbmV0ZnNfcHJlcGFyZV93cml0ZWAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYC4gQXBwYXJlbnRseSwgdGhlcmUmIzM5O3MgYSBtaXNzaW5nIGBOVUxMYCBjaGVjayB3aXRoaW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIHdoaWNoIGlzIGNhbGxlZCBieSBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIEFuZCBpZiB0aGUgc3VicmVxdWVzdCBhbGxvY2F0aW9uIGZhaWxzLCBgc3RyZWFtLSZndDtjb25zdHJ1Y3RgIGNvdWxkIGVuZCB1cCBgTlVMTGAuIFRoZSBzdWJzZXF1ZW50IGNvZGUgcGF0aCBpbiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgdGhlbiBkb2VzbiYjMzk7dCBoYW5kbGUgYSBgTlVMTGAgYHN0cmVhbS0mZ3Q7Y29uc3RydWN0YCBncmFjZWZ1bGx5LgoKUmlnaHQsIHNvIHRoZSBmaXggaXMgcHJvYmFibHkgZ29pbmcgdG8gYWRkIHRoYXQgbWlzc2luZyBjaGVjayBpbiBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIFdlIHNob3VsZCBzZWUgYW4gYWRkaXRpb25hbCBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGNhbGwgcmV0dXJucyBhIHZhbGlkIHN1YnJlcXVlc3QgcG9pbnRlci4KCkFuZCB0aGVuIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYC4uLnRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IG5lZWRzIHRoZSBkZWZlbnNpdmUgY29kaW5nIHRvIGhhbmRsZSB0aGUgYE5VTExgIGBzdHJlYW0tJmd0O2NvbnN0cnVjdGAuIFdlIHdpbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyB0aGUgcG90ZW50aWFsIGBOVUxMYCB2YWx1ZSBub3csIG9yIGVsc2UgaXQgaXMgYSBjcmFzaC4KCkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIGNvbmZpcm0gd2hlcmUgdGhlIGNvZGUgaXMgYmVpbmcgYWRkZWQgdG8gY2hlY2sgdGhlIG5ldyByZXR1cm4gdmFsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfcHJlcGFyZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz05ND1zdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTEwLVx0XHRpZiAoIXN1YnJlcSkge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTExOlx0XHRcdG5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCB3cmVxLVx1MDAzZXN0YXJ0ICYjNDM7IHdyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTEyLVx0XHRcdHN1YnJlcSA9IHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3Q7XG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yMDE9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMDQtXHRcdFx0XHRcdFx0ZW51bSBuZXRmc19pb19vcmlnaW4gb3JpZ2luKTtcbmZzL25ldGZzL2ludGVybmFsLmg6MjA1OnZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbmZzL25ldGZzL2ludGVybmFsLmgtMjA2LVx0XHRcdCBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz05MD1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0MC0vKipcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTQxOiAqIG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkIC0gTm90ZSB3cml0ZSBwcmVwYXJhdGlvbiBmYWlsZWRcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQyLSAqIEBzdWJyZXE6IFRoZSBzdWJyZXF1ZXN0IHRvIG1hcmtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0NS0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTQ2OnZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQoc3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKnN1YnJlcSlcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQ3LXtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1MC19XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE1MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUyLVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTU2LSAqL1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNTc6dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTgtXHRcdFx0IHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTI4MD1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTI5OS1cdGlmICghc3RyZWFtLVx1MDAzZWNvbnN0cnVjdClcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MzAwOlx0XHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgc3RhcnQpO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0zMDEtXHRzdWJyZXEgPSBzdHJlYW0tXHUwMDNlY29uc3RydWN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBGaWxlc3lzdGVtIFdyaXRlIFBhdGggRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyB0aGUgYGZzL25ldGZzYCBjb2RlLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGRpcmVjdCB3cml0ZXMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQ6IHRoZXkmIzM5O3ZlIGFkZGVkIE5VTEwgY2hlY2tzIGFmdGVyIGNhbGxpbmcgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGluIGJvdGggYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGFuZCBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIFRoaXMgaXMgYSBjbGFzc2ljIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtb3ZlLCBhbmQgSSYjMzk7bSBndWVzc2luZyBpdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiAKClNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgZ3VhcmRpbmcgYWdhaW5zdCB0aGUgc2NlbmFyaW8gd2hlcmUgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGZhaWxzLCB3aGljaCB3b3VsZCBsaWtlbHkgcmV0dXJuIGBOVUxMYCwgcG9zc2libHkgZHVlIHRvIGFuIGBFTk9NRU1gIGVycm9yLCBhbmQgdGhlbiBkb3duc3RyZWFtIGNvZGUgd291bGQgYXR0ZW1wdCB0byB1c2UgdGhlIHJldHVybmVkIHBvaW50ZXIuIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzLgoKTm93LCBsZXQgbWUgbWVudGFsbHkgdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgaXMgc2lnbmlmaWNhbnQgYW5kIHRoYXQgdGhvc2UgcGF0aHMgYXJlIHJlYWNoYWJsZS4gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGlzIHRoZSBjb3JlIG9mIHRoaXMsIGFuZCBpdCBhcHBlYXJzIHRvIGJlIHJlYWNoZWQgdmlhIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmNgLiBUaG9zZSwgaW4gdHVybiwgYXJlIGNhbGxlZCBieSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgd2hpY2ggaXMgdXNlZCBpbiBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCAoZm91bmQgaW4gYGJ1ZmZlcmVkX3dyaXRlLmNgKS4gKlRoYXQqIGZ1bmN0aW9uIGlzIGV4cG9ydGVkIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaXMgYWN0dWFsbHkgdXNlZCBieSBmaWxlc3lzdGVtcyBsaWtlIGBhZnNgLCBgOXBgLCBgY2lmc2AsIGFuZCBgY2VwaGAuCgpBbHJpZ2h0LCB0aGF0IGNvbmZpcm1zIGl0OiBUaGlzIGlzIGEgcmVsZXZhbnQgZml4LCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgYSBudW1iZXIgb2YgcmVhbC13b3JsZCBuZXR3b3JrIGZpbGVzeXN0ZW1zLCBnaXZlbiBpdCBwcmV2ZW50cyBhIHBvc3NpYmxlIGNyYXNoIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gVGhlIHBhdGNoIGNsZWFybHkgY2xvc2VzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gYSBmYWlybHkgaW1wb3J0YW50IHBhcnQgb2YgdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSBzdGFjay4gSXQmIzM5O3MgYSBzb2xpZCwgaWYgc2ltcGxlLCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9MzcxPWZpbGVzeXN0ZW0gaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIFZGUyByZWFkL3dyaXRlX2l0ZXIgbWV0aG9kczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzMtXHRzc2l6ZV90IG5ldGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6Mzc0Olx0c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzUtXHRzc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XG4tLVxuZnMvOXAvdmZzX2ZpbGUuYz00MDE9djlmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvOXAvdmZzX2ZpbGUuYy00MTEtXHRwOV9kZWJ1ZyhQOV9ERUJVR19DQUNIRSwgXCYjMzQ7KGNhY2hlZClcXG5cJiMzNDspO1xuZnMvOXAvdmZzX2ZpbGUuYzo0MTI6XHRyZXR1cm4gbmV0ZnNfZmlsZV93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvOXAvdmZzX2ZpbGUuYy00MTMtfVxuLS1cbmZzL2Fmcy9maWxlLmM9MzQ9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2Fmcy9maWxlLmMtMzgtXHQucmVhZF9pdGVyXHQ9IGFmc19maWxlX3JlYWRfaXRlcixcbmZzL2Fmcy9maWxlLmM6Mzk6XHQud3JpdGVfaXRlclx0PSBuZXRmc19maWxlX3dyaXRlX2l0ZXIsXG5mcy9hZnMvZmlsZS5jLTQwLVx0Lm1tYXBfcHJlcGFyZVx0PSBhZnNfZmlsZV9tbWFwX3ByZXBhcmUsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00ODY9RVhQT1JUX1NZTUJPTChuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODgtLyoqXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ4OTogKiBuZXRmc19maWxlX3dyaXRlX2l0ZXIgLSB3cml0ZSBkYXRhIHRvIGEgZmlsZVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00OTAtICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTAwLSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1MDE6c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUwMi17XG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MjgtfVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1Mjk6RVhQT1JUX1NZTUJPTChuZXRmc19maWxlX3dyaXRlX2l0ZXIpO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MzAtXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9Mjk4OT1jaWZzX3N0cmljdF93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwNi1cdFx0ICAgICgoY2lmc19zYl9mbGFncyhjaWZzX3NiKSBcdTAwMjYgQ0lGU19NT1VOVF9OT1BPU0lYQlJMKSA9PSAwKSkge1xuZnMvc21iL2NsaWVudC9maWxlLmM6MzAwNzpcdFx0XHR3cml0dGVuID0gbmV0ZnNfZmlsZV93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwOC1cdFx0XHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDE5LVx0ICovXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDIwOlx0d3JpdHRlbiA9IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwMjEtXHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0zMDQwPXNzaXplX3QgY2lmc19kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDQzLVxuZnMvc21iL2NsaWVudC9maWxlLmM6MzA0NDpcdHdyaXR0ZW4gPSBuZXRmc19maWxlX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDQ1LVx0Y2lmc191cGRhdGVfaV9ibG9ja3NfYWZ0ZXJfd3JpdGUoaW9jYiwgd3JpdHRlbik7XG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9MzA2ND1zc2l6ZV90IGNpZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwODctXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDg4Olx0d3JpdHRlbiA9IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwODktXHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9Mzk2PXNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC0zOTctXHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuaW5jbHVkZS9saW51eC9uZXRmcy5oOjM5ODpzc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtMzk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0d29yayBGaWxlc3lzdGVtIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhpcyBjb2RlIGFuZCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgdGhlIGV4ZWN1dGlvbiBwYXRoIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBnb2VzIGRpcmVjdGx5IHRocm91Z2ggYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLiBUaGF0IGZlZWxzIHJpZ2h0LCBnaXZlbiB0aGUgY29udGV4dC4gTm93LCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBzeXN0ZW0gSSYjMzk7bSB0ZXN0aW5nLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gYSBjb3VwbGUgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBgTkVURlNfU1VQUE9SVGAgaGFzIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGVuIGF0IGxlYXN0ICpvbmUqIG9mIHRoZSBmaWxlc3lzdGVtcyB0aGF0IGJ1aWxkcyAqb24gdG9wKiBvZiBpdC4gU28gdGhhdCBtZWFucyBzb21ldGhpbmcgbGlrZSBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBvciBgQ0VQSF9GU2AsIGFtb25nIG90aGVycy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgbmV0ZnNgIHRvIGNvbmZpcm0gd2hpY2ggZGVwZW5kZW5jaWVzIGFyZSB0aGUgZHJpdmluZyBmYWN0b3JzLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGZzL25ldGZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZTX1NVUFBPUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvS2NvbmZpZy0yLVxuZnMvbmV0ZnMvS2NvbmZpZzozOmNvbmZpZyBORVRGU19TVVBQT1JUXG5mcy9uZXRmcy9LY29uZmlnLTQtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIDlQIENvbmZpZ3VyYXRpb24gU3BhY2UqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciA5UC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGN1cnJlbnRseSBlbmFibGVkLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgaWYgYW55IHJlY2VudCBjaGFuZ2VzIGhhdmUgaW1wYWN0ZWQgdGhlIG9wdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBmcy85cC9LY29uZmlnYC4gVGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCwgdGhlIGNvbnRyb2wgcGFuZWwsIGZvciB0aGUgOVAgZmlsZXN5c3RlbSYjMzk7cyBmZWF0dXJlIHNldC4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBvcHRpb25zLCBjaGVja2luZyBmb3IgYW55IG5ldyBhZGRpdGlvbnMgb3IgcmVtb3ZhbHMgdGhhdCBJIGhhdmVuJiMzOTt0IHRyYWNrZWQgeWV0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byByZWNlbnQgc2VjdXJpdHkgcGF0Y2hlcyBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgYW55IG5ldyBjbGllbnQgb3Igc2VydmVyIGNhcGFiaWxpdGllcywgb3IgbW9yZSBncmFudWxhciBvcHRpb25zIGZvciB0dW5pbmc/IFRoZSBnb2FsIGhlcmUgaXNuJiMzOTt0IGEgbGluZS1ieS1saW5lIHJldmlldywgYnV0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVzdGFibGlzaCBhIGJhc2VsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgd2hpY2ggZmVhdHVyZXMgYXJlIGNvbmRpdGlvbmFsIG9uIG90aGVycywgYW5kIGhvdyB0aG9zZSBpbnRlcmRlcGVuZGVuY2llcyBtaWdodCBhZmZlY3QgbXkgc3BlY2lmaWMgdXNlIGNhc2VzIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjb25maWd1cmF0aW9uIGNob2ljZXMgSSYjMzk7bGwgbmVlZCB0byBtYWtlIGxhdGVyLiBUaW1lIHRvIGdldCBteSBiZWFyaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIDlQX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvOXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcbmZzLzlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXG5mcy85cC9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzLzlwL0tjb25maWctMjItXG5mcy85cC9LY29uZmlnOjIzOmNvbmZpZyA5UF9GU19QT1NJWF9BQ0xcbmZzLzlwL0tjb25maWctMjQtXHRib29sIFwmIzM0OzlQIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvOXAvS2NvbmZpZz0zMj1lbmRpZlxuLS1cbmZzLzlwL0tjb25maWctMzQtXG5mcy85cC9LY29uZmlnOjM1OmNvbmZpZyA5UF9GU19TRUNVUklUWVxuZnMvOXAvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7OVAgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgU01CIENsaWVudCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU01CIGNsaWVudC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZnMvc21iL2NsaWVudC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgY29yZSBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zIHRvIHJlc2lkZS4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBTTUIgY2xpZW50IGlzIGJ1aWx0IGFuZCB3aGF0IGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiBJdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgbGF5IG9mIHRoZSBsYW5kLCB0aGUgc3RydWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgY29tcGlsZS10aW1lIG9wdGlvbnMgYXZhaWxhYmxlLCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSBuZWVkIHRvIGRvIGRvd24gdGhlIGxpbmUuIEl0IGlzIGFsd2F5cyBiZXN0IHRvIHN0YXJ0IHdpdGggdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgd2hlcmUgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENJRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBOZXR3b3JrIEZpbGUgU3lzdGVtIFN1cHBvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4gYW5kIHBpbnBvaW50IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGUgbmV0d29yayBmaWxlc3lzdGVtcywgc3BlY2lmaWNhbGx5IENJRlMgb3IgOVBfRlMsIGFyZSByZXNwb25zaWJsZSBmb3Igc2VsZWN0aW5nIGBORVRGU19TVVBQT1JUYC4gVGltZSB0byBqdW1wIGludG8gdGhlIGBmcy9uZXRmcy9LY29uZmlnYCBmaWxlIGFuZCBnZXQgdGhpcyBzdHJhaWdodGVuZWQgb3V0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWc9Mj1jb25maWcgOVBfRlNcbi0tXG5mcy85cC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIE5FVF85UFxuZnMvOXAvS2NvbmZpZzo1Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzLzlwL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9hZnMvS2NvbmZpZz0yPWNvbmZpZyBBRlNfRlNcbi0tXG5mcy9hZnMvS2NvbmZpZy02LVx0c2VsZWN0IEROU19SRVNPTFZFUlxuZnMvYWZzL0tjb25maWc6NzpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9hZnMvS2NvbmZpZy04LVx0c2VsZWN0IENSWVBUT19LUkI1XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfRlNcbi0tXG5mcy9jZXBoL0tjb25maWctNS1cdHNlbGVjdCBDRVBIX0xJQlxuZnMvY2VwaC9LY29uZmlnOjY6XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuZnMvY2VwaC9LY29uZmlnLTctXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbi0tXG5mcy9uZnMvS2NvbmZpZz0xNzM9Y29uZmlnIE5GU19GU0NBQ0hFXG4tLVxuZnMvbmZzL0tjb25maWctMTc1LVx0ZGVwZW5kcyBvbiBORlNfRlNcbmZzL25mcy9LY29uZmlnOjE3NjpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9uZnMvS2NvbmZpZy0xNzctXHRzZWxlY3QgRlNDQUNIRVxuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0yPWNvbmZpZyBDSUZTXG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwLVx0c2VsZWN0IE9JRF9SRUdJU1RSWVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIxOlx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMi1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUZXN0aW5nIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGRlcGVuZGVuY3kgdHJlZSwgYE5FVEZTX1NVUFBPUlRgIGlzIGJlaW5nIHB1bGxlZCBpbiBieSBhIGhhbmRmdWwgb2YgbmV0d29yayBmaWxlc3lzdGVtczogYDlQX0ZTYCwgYEFGU19GU2AsIGBDRVBIX0ZTYCwgYENJRlNgLCBhbmQgYE5GU19GU0NBQ0hFYC4gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGZvciB0ZXN0aW5nIHRoaXMgd3JpdGUgcGF0aCwgSSBjYW4ganVzdCBlbmFibGUgYDlQX0ZTYCBhbmQgYENJRlNgIGFuZCB0aGF0IHNob3VsZCBhdXRvbWF0aWNhbGx5IGJyaW5nIGluIGBORVRGU19TVVBQT1JUYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRlc3Q6IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBhbmQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgLgoKV2FpdCBhIG1pbnV0ZS4uLiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgc3RhdGljLiBUaGF0IG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIGNvbXBsaWNhdGVkLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNhbGxpbmcgaXQuIEJ1dCBgbmV0ZnNfcHJlcGFyZV93cml0ZWAgaXMgZXhwb3J0ZWQsIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBvaW50IG9mIGludGVyYWN0aW9uIEkgY2FuIHVzZS4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIGl0ZXJhdG9yIGZ1bmN0aW9ucyB0b28sIHNvIGxldCYjMzk7cyBjaGVjayBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLiBUaGF0IHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IHRoZSBzdGF0aWMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGdldHMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz01MDE9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MTQtXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NTE1Olx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MTYtXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MjA3PXN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxOC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxOTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMjAtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMS19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTI6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMy1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxNC0vKipcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxNTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzE2LSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjYtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjc6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjgte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NS1cdFx0XHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODY6XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzg3LW91dDpcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zOTAtfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzkxOkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgTmV0RlMgTW9kdWxlKioKCkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCBhcmUgYm90aCBleHBvcnRlZCwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgZmFpciBnYW1lIGZvciBmdXp6aW5nLiBFeGNlbGxlbnQhIFRob3NlIGFyZSB0aGUga2luZHMgb2YgZW50cnkgcG9pbnRzIHRoYXQgY2FuIHJldmVhbCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLiBBbHNvLCBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCBpcyBleHBvc2VkIHRvbywgd2hpY2ggaXMgYW5vdGhlciBvYnZpb3VzIGNhbmRpZGF0ZS4gQW5kLCBvZiBjb3Vyc2UsIHdlIGNhbiBhZGQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIHRvIHRoZSBsaXN0LiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGtpbmRzIG9mIG1hbGZvcm1lZCBkYXRhIEkgY2FuIHRocm93IGF0IHRob3NlIGZ1bmN0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZ28gZGVlcGVyLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gZXhhbWluZSBhbGxvY2F0aW9uIHJvdXRpbmVzIGFzc29jaWF0ZWQgd2l0aCBvdXIgdGFyZ2V0IHdyaXRlIGNhbGxzLiBMZXQmIzM5O3Mgc2VlIGlmIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBpcyBhbHNvIGV4cG9ydGVkLiBUaGF0IHdvdWxkIGJlIGFub3RoZXIgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnV6eiB0YXJnZXQgdG8gZXZhbHVhdGUsIGlmIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19hbGxvY19zdWJyZXF1ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz0yMTE9c3RhdGljIHZvaWQgbmV0ZnNfcmVhZF90b19wYWdlY2FjaGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTIyMi1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzoyMjM6XHRcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3QocnJlcSk7XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMjI0LVx0XHRpZiAoIXN1YnJlcSkge1xuLS1cbmZzL25ldGZzL2RpcmVjdF9yZWFkLmM9NDg9c3RhdGljIHZvaWQgbmV0ZnNfZGlzcGF0Y2hfdW5idWZmZXJlZF9yZWFkcyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcbi0tXG5mcy9uZXRmcy9kaXJlY3RfcmVhZC5jLTU3LVxuZnMvbmV0ZnMvZGlyZWN0X3JlYWQuYzo1ODpcdFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChycmVxKTtcbmZzL25ldGZzL2RpcmVjdF9yZWFkLmMtNTktXHRcdGlmICghc3VicmVxKSB7XG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaD05Mz12b2lkIG5ldGZzX3B1dF9mYWlsZWRfcmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSk7XG5mcy9uZXRmcy9pbnRlcm5hbC5oOjk0OnN0cnVjdCBuZXRmc19pb19zdWJyZXF1ZXN0ICpuZXRmc19hbGxvY19zdWJyZXF1ZXN0KHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxKTtcbmZzL25ldGZzL2ludGVybmFsLmgtOTUtXG4tLVxuZnMvbmV0ZnMvb2JqZWN0cy5jPTE4NT12b2lkIG5ldGZzX3B1dF9mYWlsZWRfcmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcbi0tXG5mcy9uZXRmcy9vYmplY3RzLmMtMjAxLSAqL1xuZnMvbmV0ZnMvb2JqZWN0cy5jOjIwMjpzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcbmZzL25ldGZzL29iamVjdHMuYy0yMDMte1xuLS1cbmZzL25ldGZzL3JlYWRfcmV0cnkuYz0yNj1zdGF0aWMgdm9pZCBuZXRmc19yZXRyeV9yZWFkX3N1YnJlcXVlc3RzKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxKVxuLS1cbmZzL25ldGZzL3JlYWRfcmV0cnkuYy0xOTctXHRcdGRvIHtcbmZzL25ldGZzL3JlYWRfcmV0cnkuYzoxOTg6XHRcdFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChycmVxKTtcbmZzL25ldGZzL3JlYWRfcmV0cnkuYy0xOTktXHRcdFx0aWYgKCFzdWJyZXEpIHtcbi0tXG5mcy9uZXRmcy9yZWFkX3NpbmdsZS5jPTkwPXN0YXRpYyBpbnQgbmV0ZnNfc2luZ2xlX2Rpc3BhdGNoX3JlYWQoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXG4tLVxuZnMvbmV0ZnMvcmVhZF9zaW5nbGUuYy05NC1cbmZzL25ldGZzL3JlYWRfc2luZ2xlLmM6OTU6XHRzdWJyZXEgPSBuZXRmc19hbGxvY19zdWJyZXF1ZXN0KHJyZXEpO1xuZnMvbmV0ZnMvcmVhZF9zaW5nbGUuYy05Ni1cdGlmICghc3VicmVxKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MTU3PXZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE3MS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTcyOlx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTczLVx0aWYgKCFzdWJyZXEpXG4tLVxuZnMvbmV0ZnMvd3JpdGVfcmV0cnkuYz0xNz1zdGF0aWMgdm9pZCBuZXRmc19yZXRyeV93cml0ZV9zdHJlYW0oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfcmV0cnkuYy0xNTEtXHRcdGRvIHtcbmZzL25ldGZzL3dyaXRlX3JldHJ5LmM6MTUyOlx0XHRcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qod3JlcSk7XG5mcy9uZXRmcy93cml0ZV9yZXRyeS5jLTE1My1cdFx0XHRzdWJyZXEtXHUwMDNlc291cmNlXHRcdD0gdG8tXHUwMDNlc291cmNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldEZTIFdyaXRlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBpcyBkZWZpbml0ZWx5IGFuIGludGVybmFsIGZ1bmN0aW9uOyBpdCYjMzk7cyB0dWNrZWQgYXdheSB3aXRoaW4gYGZzL25ldGZzL2AuIFRoYXQgbWVhbnMgSSYjMzk7bGwgaGF2ZSB0byBieXBhc3MgaXQgaW4gdGhpcyBhbmFseXNpcy4gTXkgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Uga2V5IHdyaXRlIGZ1bmN0aW9uczogYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAsIGFuZCBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBleGFtaW5lIGZvciBob3cgZGF0YSBnZXRzIHdyaXR0ZW4uCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIGxldCYjMzk7cyBrZWVwIGl0IHByYWN0aWNhbC4gQ29uY2VudHJhdGluZyBvbiBgQ0lGU2AgYW5kIGA5UF9GU2AgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIFRoZXkmIzM5O3JlIGNvbW1vbmx5IHVzZWQgYW5kIHNob3VsZCBwdWxsIGluIGBORVRGU19TVVBQT1JUYCwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgSSBuZWVkLgoKSG1tLi4uIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyBJIG5lZWQgdG8gY29uc2lkZXI/IFdhaXQsIGBORVRGU19TVVBQT1JUYCBpdHNlbGYgaXMgYSB0cmlzdGF0ZSBjb25maWcsIG1lYW5pbmcgSSBjb3VsZCBlbmFibGUgaXQgZGlyZWN0bHkgaWYgSSB3YW50ZWQsIGJ1dCBpdCYjMzk7cyBwcm9iYWJseSBiZXR0ZXIgdG8gZW5hYmxlIGl0IGluZGlyZWN0bHkgdGhyb3VnaCBhIGZpbGVzeXN0ZW0gdGhhdCB1c2VzIGl0LiBUaGUgcXVlc3Rpb24gaXMsIGlzIGBORVRGU19TVVBQT1JUYCB2aXNpYmxlIGluIHRoZSBLY29uZmlnPyBMZXQgbWUgcXVpY2tseSBjaGVjayBgZnMvbmV0ZnMvS2NvbmZpZ2AgdG8gY29uZmlybSBpdHMgdmlzaWJpbGl0eS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzIGVuYWJsZWQgYW5kIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL0tjb25maWctMi1cbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxuZnMvbmV0ZnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25maWd1cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYSBkaXJlY3RseSB1c2VyLXNlbGVjdGFibGUgb3B0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGJlaW5nIGNob3NlbiBpbmRpcmVjdGx5IHRocm91Z2ggYW5vdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBJIG5lZWQgdG8gbGlzdCBgQ0lGU2AgYW5kIGA5UF9GU2AgaW4gdGhlIGFwcHJvcHJpYXRlIHNlbGVjdGlvbiBtZW51LCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGNob2ljZS4mIzM0OwoKQnV0IGJlZm9yZSBJIGNvbW1pdCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIHRob3NlIHR3by4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwLiBBIHF1aWNrIHJldmlldyBzaG93cyB0aGF0IGBDSUZTYCBkZXBlbmRzIG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gYDlQX0ZTYCBkZXBlbmRzIG9uIGBORVRfOVBgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgd2lzZSB0byBiZSBjZXJ0YWluLiBTbywgSeKAmWxsIHRha2UgYSBsb29rIGF0IHRoZSBkZXRhaWxzIG9mIGBORVRfOVBgIGJlZm9yZSBmaW5hbGl6aW5nIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZS4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCBiYXNlcyBhbmQgZXZlcnl0aGluZ+KAmXMgcHJvcGVybHkgbGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUXzlQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LzlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvOXAvS2NvbmZpZy01LVxubmV0LzlwL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF85UFxubmV0LzlwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5uZXQvOXAvS2NvbmZpZz0xNz1pZiBORVRfOVBcbm5ldC85cC9LY29uZmlnLTE4LVxubmV0LzlwL0tjb25maWc6MTk6Y29uZmlnIE5FVF85UF9GRFxubmV0LzlwL0tjb25maWctMjAtXHRkZWZhdWx0IE5FVF85UFxuLS1cbm5ldC85cC9LY29uZmlnLTI3LVxubmV0LzlwL0tjb25maWc6Mjg6Y29uZmlnIE5FVF85UF9WSVJUSU9cbm5ldC85cC9LY29uZmlnLTI5LVx0ZGVwZW5kcyBvbiBWSVJUSU9cbi0tXG5uZXQvOXAvS2NvbmZpZy0zNC1cbm5ldC85cC9LY29uZmlnOjM1OmNvbmZpZyBORVRfOVBfWEVOXG5uZXQvOXAvS2NvbmZpZy0zNi1cdGRlcGVuZHMgb24gWEVOXG4tLVxubmV0LzlwL0tjb25maWctNDItXG5uZXQvOXAvS2NvbmZpZzo0Mzpjb25maWcgTkVUXzlQX1VTQkdcbm5ldC85cC9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7OVAgVVNCIEdhZGdldCBUcmFuc3BvcnRcJiMzNDtcbi0tXG5uZXQvOXAvS2NvbmZpZy01MS1cbm5ldC85cC9LY29uZmlnOjUyOmNvbmZpZyBORVRfOVBfUkRNQVxubmV0LzlwL0tjb25maWctNTMtXHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xuLS1cbm5ldC85cC9LY29uZmlnLTU3LVxubmV0LzlwL0tjb25maWc6NTg6Y29uZmlnIE5FVF85UF9ERUJVR1xubmV0LzlwL0tjb25maWctNTktXHRib29sIFwmIzM0O0RlYnVnIGluZm9ybWF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqUXVpY2sgQ2hlY2sgb24gRmlsZSBTeXN0ZW0gT3B0aW9ucyoqCgpSaWdodCwgc28gYE5FVF85UGAg4oCTIHRoYXTigJlzIGEgbWVudWNvbmZpZyBpdGVtLCBlYXN5IGVub3VnaC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHJlbGV2YW50IG9wdGlvbnMgd2hlbiBkaXNjdXNzaW5nIHRoaXMuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCB0byBtZW50aW9uIGBDSUZTYCwgYDlQX0ZTYCwgYW5kIG9mIGNvdXJzZSwgYE5FVF85UGAgaXRzZWxmLiBHb3R0YSBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuCgpOb3csIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS4uLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGlzIGV4cG9ydGVkLiBUaGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0aGUgZmxvdy4gQmVzdCB0byBjb25maXJtIGl0cyB2aXNpYmlsaXR5IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmV0ZnNfcHJlcGFyZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTE0Nj12b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkKHN0cnVjdCBuZXRmc19pb19zdWJyZXF1ZXN0ICpzdWJyZXEpXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTAtfVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNTE6RVhQT1JUX1NZTUJPTChuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZCk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgRXhwb3J0KioKCkhtbSwgaXQgc2VlbXMgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGFzIGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBCZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gKndoeSogaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hlcmUgaXQgc2hvdWxkIGJlLiBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQsIGlkZWFsbHksIHNlZSB0aGUgYEVYUE9SVF9TWU1CT0xgIG1hY3JvIChvciBlcXVpdmFsZW50KSBpbiBwbGFjZSBpZiBpdCYjMzk7cyBtZWFudCB0byBiZSBhdmFpbGFibGUgZXh0ZXJuYWxseS4gVGhpcyB3aWxsIGNsYXJpZnkgaWYgaXQmIzM5O3MgYSBnZW51aW5lIG92ZXJzaWdodCwgYSBidWlsZCBjb25maWd1cmF0aW9uIGlzc3VlLCBvciBhIG1vcmUgZnVuZGFtZW50YWwgZGVzaWduIGRlY2lzaW9uIHRvIGtlZXAgdGhhdCBmdW5jdGlvbiBpbnRlcm5hbCB0byB0aGUgbmV0ZnMgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19wcmVwYXJlX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTkwPXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQwLS8qKlxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNDE6ICogbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQgLSBOb3RlIHdyaXRlIHByZXBhcmF0aW9uIGZhaWxlZFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNDItICogQHN1YnJlcTogVGhlIHN1YnJlcXVlc3QgdG8gbWFya1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQ1LSAqL1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNDY6dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqc3VicmVxKVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNDcte1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUwLX1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTUxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQpO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTItXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTYtICovXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE1Nzp2b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1OC1cdFx0XHQgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MjgwPXNpemVfdCBuZXRmc19hZHZhbmNlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMjk5LVx0aWYgKCFzdHJlYW0tXHUwMDNlY29uc3RydWN0KVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzozMDA6XHRcdG5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCBzdGFydCk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTMwMS1cdHN1YnJlcSA9IHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludGVybmFsIE5ldEZTIFdyaXRlcyoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhbiBleHRlcm5hbGx5IGZhY2luZyBmdW5jdGlvbiwgaXQmIzM5O3MgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBgZnMvbmV0ZnMvYC4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gTXkgYXR0ZW50aW9uIG5lZWRzIHRvIGJlIG9uOgoKKiAgIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgCiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAKKiAgIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgCgpCdXQgaGFuZyBvbiwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIHdhcyB0aGUgb25lIG1vZGlmaWVkIGluIGBkaXJlY3Rfd3JpdGUuY2AuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0LiBHaXZlbiB0aGF0IGNoYW5nZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBzY2FuIGBkaXJlY3Rfd3JpdGUuY2AgZm9yIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyByZWxldmFudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0yMTk9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMS19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTI6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMy1cbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0zMjc9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzkwLX1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM5MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDE2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IGFyZSBteSBvd246CgoqKlVuYnVmZmVyZWQgV3JpdGVzIGFuZCB0aGUgYGJ1ZmZlcmVkX3dyaXRlLmNgIE1vZHVsZSoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB1bmJ1ZmZlcmVkIHdyaXRlcywgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uLiBBbmQgSSYjMzk7bSBhbHNvIHJlbWVtYmVyaW5nIHRoYXQgYGJ1ZmZlcmVkX3dyaXRlLmNgIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgcmVsYXRlZCBjb2RlLCBhbmQgcHJvYmFibHkgc29tZSBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGguIFRoYXQgZmlsZSBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGhhbmRsZSBvbiBpdHMgbG9naWMgaW4gcmVsYXRpb24gdG8gbXkgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz04Nz1zc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00NDItfVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0NDM6RVhQT1JUX1NZTUJPTChuZXRmc19wZXJmb3JtX3dyaXRlKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQ0LVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY4PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODUtfVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0ODY6RVhQT1JUX1NZTUJPTChuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4Ny1cbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUwMT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUyOC19XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjUyOTpFWFBPUlRfU1lNQk9MKG5ldGZzX2ZpbGVfd3JpdGVfaXRlcik7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUzMC1cbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUzNz12bV9mYXVsdF90IG5ldGZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTYxNS19XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjYxNjpFWFBPUlRfU1lNQk9MKG5ldGZzX3BhZ2VfbWt3cml0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIEZpbGUgU3lzdGVtIFdyaXRlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgbmV0d29yayBmaWxlIHN5c3RlbSB3cml0ZSBwYXRoLCBhbmQgaXQgbG9va3MgbGlrZSBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGJvdGggYnVmZmVyZWQgYW5kIHVuYnVmZmVyZWQgd3JpdGUgb3BlcmF0aW9ucy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB3cml0ZXMgYXJlIHByb2Nlc3NlZCwgc28gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGFuZCBvZiBjb3Vyc2UsIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgIGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgdGhpbmtpbmcuIEkgd2FudCB0byBoYXZlIGEgaGFuZGxlIG9uIHRoZSBrZXkgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmV0d2VlbiB0aGUgYnVmZmVyZWQgYW5kIHVuYnVmZmVyZWQgcGF0aHMuCgpJJiMzOTttIHdvcmtpbmcgd2l0aCBhIGZldyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgaGVyZSAtIGBDSUZTYCwgYDlQX0ZTYCwgYW5kIGBORVRfOVBgIOKAkyBhbmQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBob3cgdGhleSBtaWdodCBpbmZsdWVuY2UgdGhlIHdyaXRlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBlYWNoIG9mIHRoZXNlIGZpbGUgc3lzdGVtcyBoYW5kbGUgcmVhZHMgYW5kIHdyaXRlcy4KClRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoZSBleHBvc2VkIGZ1bmN0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBgZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBhdmFpbGFibGUgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBleHBvcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0xNDY9dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqc3VicmVxKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUwLX1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTUxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQpO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTItXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDg9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTMtfVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MTQ6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjE1LVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9ODQzPWludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtOTA3LX1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6OTA4OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGViYWNrX3NpbmdsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyB0aGUgTmV0RlMgV3JpdGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBOZXRGUyBjb2RlIGFuZCBJIHNlZSB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5ldGZzX3dyaXRlcGFnZXNgIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAsIGJvdGggb2Ygd2hpY2ggYXJlIGV4cG9zZWQuIEJ1dCwgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIGBuZXRmc19wcmVwYXJlX3dyaXRlYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGBuZXRmc19wcmVwYXJlX3dyaXRlYCBpcyBjYWxsZWQgYnkgYm90aCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAsIHdoaWNoIGxpdmVzIGluIGBkaXJlY3Rfd3JpdGUuY2AsIGFuZCBieSBgbmV0ZnNfYWR2YW5jZV93cml0ZWAsIHdoaWNoIGlzIGluIGB3cml0ZV9pc3N1ZS5jYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBpbXBvcnRhbnQgY29udHJvbCBwb2ludC4KCkkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZW50aXJlKiB3cml0ZSBwYXRoIHRob3VnaCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJiMzOTtzIGFjdHVhbGx5IGNhbGxpbmcgYG5ldGZzX2FkdmFuY2Vfd3JpdGVgLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGNoYW5nZSByaXBwbGVzIHRocm91Z2ggdGhlIE5ldEZTIHdyaXRlIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCB0cmFjZSB0aG9zZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfYWR2YW5jZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTM5Ni1cdFx0fSBlbHNlIHtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6Mzk3Olx0XHRcdG5ldGZzX2FkdmFuY2Vfd3JpdGV0aHJvdWdoKHdyZXEsIFx1MDAyNndiYywgZm9saW8sIGNvcGllZCxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtMzk4LVx0XHRcdFx0XHRcdCAgIG9mZnNldCAmIzQzOyBjb3BpZWQgPT0gZmxlbixcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIxMT12b2lkIG5ldGZzX2lzc3VlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTItXHRcdCAgICAgICBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0pO1xuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyMTM6c2l6ZV90IG5ldGZzX2FkdmFuY2Vfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNC1cdFx0XHQgICBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yMTY9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW4pO1xuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyMTc6aW50IG5ldGZzX2FkdmFuY2Vfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbmZzL25ldGZzL2ludGVybmFsLmgtMjE4LVx0XHRcdCAgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3QgY29waWVkLCBib29sIHRvX3BhZ2VfZW5kLFxuLS1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jPTE5PXN0YXRpYyB2b2lkIG5ldGZzX3BncHJpdjJfY29weV9mb2xpbyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqY3JlcSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYy03Ny1cdFx0Y2FjaGUtXHUwMDNlc3VibWl0X2V4dGVuZGFibGVfdG8gPSBmc2l6ZSAtIGNhY2hlLVx1MDAzZXN1Ym1pdF9vZmY7XG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYzo3ODpcdFx0cGFydCA9IG5ldGZzX2FkdmFuY2Vfd3JpdGUoY3JlcSwgY2FjaGUsIGZwb3MgJiM0MzsgY2FjaGUtXHUwMDNlc3VibWl0X29mZixcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTc5LVx0XHRcdFx0XHQgICBjYWNoZS1cdTAwM2VzdWJtaXRfbGVuLCB0b19lb2YpO1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MjYyPXZvaWQgbmV0ZnNfaXNzdWVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0yNzktICovXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjI4MDpzaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMjgxLVx0XHRcdCAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTMyMj1zdGF0aWMgaW50IG5ldGZzX3dyaXRlX2ZvbGlvKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNDk0LVx0XHRzdHJlYW0tXHUwMDNlc3VibWl0X2V4dGVuZGFibGVfdG8gPSBmc2l6ZSAtIHN0cmVhbS1cdTAwM2VzdWJtaXRfb2ZmO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo0OTU6XHRcdHBhcnQgPSBuZXRmc19hZHZhbmNlX3dyaXRlKHdyZXEsIHN0cmVhbSwgZnBvcyAmIzQzOyBzdHJlYW0tXHUwMDNlc3VibWl0X29mZixcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNDk2LVx0XHRcdFx0XHQgICBzdHJlYW0tXHUwMDNlc3VibWl0X2xlbiwgdG9fZW9mKTtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTYxOT1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbilcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTY0NC0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjQ1OmludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTY0Ni1cdFx0XHQgICAgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGNvcGllZCwgYm9vbCB0b19wYWdlX2VuZCxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTcxNj1zdGF0aWMgaW50IG5ldGZzX3dyaXRlX2ZvbGlvX3NpbmdsZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgwOC1cdFx0c3RyZWFtLVx1MDAzZXN1Ym1pdF9leHRlbmRhYmxlX3RvID0gZnNpemUgLSBzdHJlYW0tXHUwMDNlc3VibWl0X29mZjtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6ODA5Olx0XHRwYXJ0ID0gbmV0ZnNfYWR2YW5jZV93cml0ZSh3cmVxLCBzdHJlYW0sIGZwb3MgJiM0Mzsgc3RyZWFtLVx1MDAzZXN1Ym1pdF9vZmYsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgxMC1cdFx0XHRcdFx0ICAgc3RyZWFtLVx1MDAzZXN1Ym1pdF9sZW4sIHRvX2VvZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTgyCgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIE5ldHdvcmsgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmaXggY29uY2VybmluZyBwb3RlbnRpYWwgTlVMTCBkZXJlZmVyZW5jZSBpbiB0aGUgYG5ldGZzYCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXRmc19wcmVwYXJlX3dyaXRlYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgaXNzdWUgaXMgYSBtaXNzaW5nIE5VTEwgY2hlY2sgZm9yIHRoZSBhbGxvY2F0aW9uIHdpdGhpbiBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAsIHdoaWNoIGNhbiBsZWFkIHRvIGEgTlVMTCBgc3RyZWFtLSZndDtjb25zdHJ1Y3RgIHRoYXQgdGhlIGNvZGUgZG9lc24mIzM5O3QgaGFuZGxlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGBmcy9uZXRmcy9gIHdoaWNoIGlzIGEga2V5IGFyZWEgdG8gbG9vayBhdC4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoZSByZWxldmFudCBjYWxsIGNoYWlucy4gYG5ldGZzX2FkdmFuY2Vfd3JpdGVgIGlzIGEgcG9pbnQgdG8gbG9vayBhdCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgbmV0ZnNfd3JpdGVfZm9saW9gIGFuZCBgbmV0ZnNfd3JpdGVfZm9saW9fc2luZ2xlYCwgd2hpY2ggYXJlIHVsdGltYXRlbHkgcmVhY2hlZCB0aHJvdWdoIGBuZXRmc193cml0ZXBhZ2VzYCBhbmQgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLiBUaGVyZWZvcmUsIHRob3NlIGxhdHRlciB0d28gZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyBmcm9tIHRoZSB3cml0ZSBwYXRoLCBhcmUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyBhcyB0aGV5IHJlcHJlc2VudCB0aGUgaGlnaGVzdC1sZXZlbCBjYWxsLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCBhbmQgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLCB0aHVzIHRoZSBsYXN0IHR3byBzeW1ib2xzIGFyZSBlc3BlY2lhbGx5IGltcG9ydGFudCB0byBmdXp6LgoKVGhpcyBmaXggY2xlYXJseSBpbXBhY3RzIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBhIGNyYXNoIG9yIG1vcmUgc3VidGxlIGRhdGEgY29ycnVwdGlvbiwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHVuYnVmZmVyZWQgd3JpdGUgcGF0aC4KCkhlcmUmIzM5O3MgbXkgcmVmaW5lZCBsaXN0IG9mIEZvY3VzU3ltYm9sczoKKiAgIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgCiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYAoqICAgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgCiogICBgbmV0ZnNfd3JpdGVwYWdlc2AKKiAgIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYAoKQW5kLCBpbiB0ZXJtcyBvZiBlbmFibGluZyBjb25maWd1cmF0aW9ucywgYENJRlNgLCBgOVBfRlNgLCBhbmQgYE5FVF85UGAgYXJlIHRoZSBtb3N0IGRpcmVjdCByb3V0ZXMgdG8gZW5hYmxlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgYE5FVEZTX1NVUFBPUlRgIGNvbmZpZyBpcyBhIG5vLWdvIGZvciBkaXJlY3QgZW5hYmxlbWVudCwgc28gd2UmIzM5O2xsIHN0aWNrIHdpdGggYENJRlNgIGFuZCBgOVBfRlNgLiBJJiMzOTt2ZSBtYWRlIHN1cmUgdG8gY2hlY2sgdGhlIGNvbmZpZyYjMzk7cyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIHRoZSByZWxldmFudCBuZXR3b3JrIGZpbGVzeXN0ZW0gcGFydHMgYXJlIGJ1aWx0LgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtORVRfOVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc19maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZWJhY2tfc2luZ2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBzdWJyZXF1ZXN0IGFsbG9jYXRpb25zIGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSBsaWJyYXJ5IChmcy9uZXRmcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAoZS5nLiwgdW5kZXIgbWVtb3J5IHByZXNzdXJlKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgd3JpdGUgcGF0aHMgKGxpa2UgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKSB3aGVuIHVzaW5nIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyBDSUZTIG9yIDlQLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O05FVF85UCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGZzX2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIE5VTEwgcG9pbnRlciBjaGVja3MgZm9yIHN1YnJlcXVlc3QgYWxsb2NhdGlvbnMgaW4gdGhlIGNvcmUgbmV0d29yayBmaWxlc3lzdGVtIGxpYnJhcnkgKGZzL25ldGZzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIChlLmcuLCB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyB3cml0ZSBwYXRocyAobGlrZSBuZXRmc19maWxlX3dyaXRlX2l0ZXIpIHdoZW4gdXNpbmcgbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIENJRlMgb3IgOVAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBpcyBOVUxMKS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYzVhZmNhOGVjMWZiMDc1MGRiNmNhYTg1MzZlMmRiMzg5MzBjNDkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDM6MDM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jCmluZGV4IGMxNmZiYWQyODZhMTcuLjU2N2I5NDZiN2E1NjYgMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jCkBAIC0xMTAsNiAmIzQzOzExMCwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAJCWlmICghc3VicmVxKSB7CiAJCQluZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgd3JlcS0mZ3Q7c3RhcnQgJiM0Mzsgd3JlcS0mZ3Q7dHJhbnNmZXJyZWQpOwogCQkJc3VicmVxID0gc3RyZWFtLSZndDtjb25zdHJ1Y3Q7CiYjNDM7CQkJaWYgKCFzdWJyZXEpIHsKJiM0MzsJCQkJd3JlcS0mZ3Q7ZXJyb3IgPSAtRU5PTUVNOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiAJCQlzdHJlYW0tJmd0O2NvbnN0cnVjdCA9IE5VTEw7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKaW5kZXggMmQ5Y2ZjZDQzNjU4Zi4uODUxZjZmOTNhZDQ1YSAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jCkBAIC0xNzAsNiAmIzQzOzE3MCw4IEBAIHZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwKIAkJcm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZSgmYW1wO3dyZXEtJmd0O2J1ZmZlciwgd3JlcS0mZ3Q7Z2ZwKTsKIAogCXN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qod3JlcSk7CiYjNDM7CWlmICghc3VicmVxKQomIzQzOwkJcmV0dXJuOwogCXN1YnJlcS0mZ3Q7c291cmNlCQk9IHN0cmVhbS0mZ3Q7c291cmNlOwogCXN1YnJlcS0mZ3Q7c3RhcnQJCT0gc3RhcnQ7CiAJc3VicmVxLSZndDtzdHJlYW1fbnIJPSBzdHJlYW0tJmd0O3N0cmVhbV9ucjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDgKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZnMvbmV0ZnNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgZml4aW5nIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2AgYW5kIGBmcy9uZXRmcy93cml0ZV9pc3N1ZS5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBgTlVMTGAgY2hlY2tzIGFmdGVyIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBhbmQgYHN0cmVhbS0mZ3Q7Y29uc3RydWN0YCBjYWxscy4gU21hcnQgbW92ZS4gSSBzZWUgdGhlIGNvZGU6IGluIGBkaXJlY3Rfd3JpdGUuY2AsIHRoZXkmIzM5O3JlIGNoZWNraW5nIGlmIGBzdHJlYW0tJmd0O2NvbnN0cnVjdGAgaXMgYE5VTExgIGFmdGVyIGNhbGxpbmcgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGFuZCBhc3NpZ25pbmcgaXQuIFNpbWlsYXJseSwgaW4gYHdyaXRlX2lzc3VlLmNgLCB0aGVyZSYjMzk7cyBhIGNoZWNrIGltbWVkaWF0ZWx5IGFmdGVyIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YC4gVGhpcyBpcyB0ZXh0Ym9vayBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuCgpUaGlzIGlzIGFsbCBhYm91dCBwcmV2ZW50aW5nIGNyYXNoZXMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGNhbiByZXR1cm4gYE5VTExgLCBhbmQgdGhlIHBhdGNoIG5vdyBncmFjZWZ1bGx5IGhhbmRsZXMgdGhhdCBzY2VuYXJpby4gQmVmb3JlLCBpZiBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgcmV0dXJuZWQgYE5VTExgLCB3ZSYjMzk7ZCBiZSBibGluZGx5IGRlcmVmZXJlbmNpbmcgdGhlIE5VTEwgcG9pbnRlciB3aGVuIGFzc2lnbmluZyB0byBgc3VicmVxYC4gQmFuZywga2VybmVsIHBhbmljLiBUaGlzIGZpeCBhZGRzIHRoZSBleHBsaWNpdCBgTlVMTGAgY2hlY2sgYmVmb3JlIHVzaW5nIHRoZSByZXR1cm4gdmFsdWUuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBjbGVhcjogYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGlzIGFsbG9jYXRpbmcgYSBgbmV0ZnNfaW9fc3VicmVxdWVzdGAuIEEgZmFpbHVyZSB0aGVyZSB3aWxsIHJldHVybiBOVUxMLiBTbyBgc3VicmVxLSZndDtzb3VyY2UgPSBzdHJlYW0tJmd0O3NvdXJjZTtgIHdpbGwgY3Jhc2ggaWYgYHN1YnJlcWAgaXMgTlVMTC4gSXQmIzM5O3MgYSB0ZXh0Ym9vayBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEFuZCBiZWNhdXNlIHdlJiMzOTtyZSBqdXN0IGNoZWNraW5nIGZvciBOVUxMIGFuZCBiYWlsaW5nIG91dCB3aXRoIGFuIGVycm9yLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBmaXggZm9yIGEga25vd24gaXNzdWUuCgpTbywgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgbGlrZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiB3aWxsIGNhdGNoIHRoZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhcyB3ZWxsIGFzIHRoZSBpbml0aWFsIGNyYXNoLiBJIGRvbiYjMzk7dCBzZWUgYW55IHZhbHVlIGluIG5lZWRpbmcgS01TQU4gaGVyZS4gSXQmIzM5O3Mgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gSXQmIzM5O3MgYSBwbGFpbiBvbGQtZmFzaGlvbmVkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgbm93IHRha2VuIGNhcmUgb2YuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCBLTVNBTiBpc24mIzM5O3QgbmVjZXNzYXJ5IGhlcmUuIFRoZXJlZm9yZSwgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBpcyBOVUxMKS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBpcyBOVUxMKS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoxNi4yMzA5NjI4ODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxNTQxMzMzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0lGU1wiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIk5FVF85UFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gICAgXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gICAgXCJuZXRmc193cml0ZWJhY2tfc2luZ2xlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgYnkgYWRkaW5nIGNoZWNrcyBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcyAod2hlbiBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgb3IgYHN0cmVhbS1cXHUwMDNlY29uc3RydWN0YCBpcyBOVUxMKS4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBzdWJyZXF1ZXN0IGFsbG9jYXRpb25zIGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSBsaWJyYXJ5IChmcy9uZXRmcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAoZS5nLiwgdW5kZXIgbWVtb3J5IHByZXNzdXJlKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgd3JpdGUgcGF0aHMgKGxpa2UgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKSB3aGVuIHVzaW5nIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyBDSUZTIG9yIDlQLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoxNi4yMzA5NjkzMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDU4Nzg4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYzVhZmNhOGVjMWZiMDc1MGRiNmNhYTg1MzZlMmRiMzg5MzBjNDkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDAzOjAzOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5pbmRleCBjMTZmYmFkMjg2YTE3Li41NjdiOTQ2YjdhNTY2IDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXFxuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5AQCAtMTEwLDYgKzExMCwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuIFxcdFxcdGlmICghc3VicmVxKSB7XFxuIFxcdFxcdFxcdG5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCB3cmVxLVxcdTAwM2VzdGFydCArIHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkKTtcXG4gXFx0XFx0XFx0c3VicmVxID0gc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3Q7XFxuK1xcdFxcdFxcdGlmICghc3VicmVxKSB7XFxuK1xcdFxcdFxcdFxcdHdyZXEtXFx1MDAzZWVycm9yID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0c3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3QgPSBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xcbmluZGV4IDJkOWNmY2Q0MzY1OGYuLjg1MWY2ZjkzYWQ0NWEgMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xcbisrKyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcXG5AQCAtMTcwLDYgKzE3MCw4IEBAIHZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4gXFx0XFx0cm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLCB3cmVxLVxcdTAwM2VnZnApO1xcbiBcXG4gXFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcXG4rXFx0aWYgKCFzdWJyZXEpXFxuK1xcdFxcdHJldHVybjtcXG4gXFx0c3VicmVxLVxcdTAwM2Vzb3VyY2VcXHRcXHQ9IHN0cmVhbS1cXHUwMDNlc291cmNlO1xcbiBcXHRzdWJyZXEtXFx1MDAzZXN0YXJ0XFx0XFx0PSBzdGFydDtcXG4gXFx0c3VicmVxLVxcdTAwM2VzdHJlYW1fbnJcXHQ9IHN0cmVhbS1cXHUwMDNlc3RyZWFtX25yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoxNy42Mzc0NzcxODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDM2NzUyNDAyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0lGU1wiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIk5FVF85UFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gICAgXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gICAgXCJuZXRmc193cml0ZWJhY2tfc2luZ2xlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIE5VTEwgcG9pbnRlciBjaGVja3MgZm9yIHN1YnJlcXVlc3QgYWxsb2NhdGlvbnMgaW4gdGhlIGNvcmUgbmV0d29yayBmaWxlc3lzdGVtIGxpYnJhcnkgKGZzL25ldGZzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIChlLmcuLCB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyB3cml0ZSBwYXRocyAobGlrZSBuZXRmc19maWxlX3dyaXRlX2l0ZXIpIHdoZW4gdXNpbmcgbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIENJRlMgb3IgOVAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZjNWFmY2E4ZWMxZmIwNzUwZGI2Y2FhODUzNmUyZGIzODkzMGM0OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzowMzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbmluZGV4IGMxNmZiYWQyODZhMTcuLjU2N2I5NDZiN2E1NjYgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbkBAIC0xMTAsNiArMTEwLDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcdFx0aWYgKCFzdWJyZXEpIHtcbiBcdFx0XHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgd3JlcS1cdTAwM2VzdGFydCArIHdyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuIFx0XHRcdHN1YnJlcSA9IHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3Q7XG4rXHRcdFx0aWYgKCFzdWJyZXEpIHtcbitcdFx0XHRcdHdyZXEtXHUwMDNlZXJyb3IgPSAtRU5PTUVNO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHRcdHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3QgPSBOVUxMO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbmluZGV4IDJkOWNmY2Q0MzY1OGYuLjg1MWY2ZjkzYWQ0NWEgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG4rKysgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5AQCAtMTcwLDYgKzE3MCw4IEBAIHZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbiBcdFx0cm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZShcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlciwgd3JlcS1cdTAwM2VnZnApO1xuIFxuIFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcbitcdGlmICghc3VicmVxKVxuK1x0XHRyZXR1cm47XG4gXHRzdWJyZXEtXHUwMDNlc291cmNlXHRcdD0gc3RyZWFtLVx1MDAzZXNvdXJjZTtcbiBcdHN1YnJlcS1cdTAwM2VzdGFydFx0XHQ9IHN0YXJ0O1xuIFx0c3VicmVxLVx1MDAzZXN0cmVhbV9uclx0PSBzdHJlYW0tXHUwMDNlc3RyZWFtX25yO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6MTcuNjM3NDc4NDMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2MzkxMzkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCBhbmQgYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCdzIGJlZWZpbmcgdXAgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgYE5VTExgIHJldHVybnMgZnJvbSBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgYW5kIGhhbmRsaW5nIGEgYE5VTExgIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBwb2ludGVyIGFmdGVyIGBuZXRmc19wcmVwYXJlX3dyaXRlYC5cblxuTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBXZSdyZSBsb29raW5nIGF0IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBhbmQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgLiBSaWdodCwgYm90aCBwYXJ0IG9mIHRoZSBOZXR3b3JrIEZpbGVzeXN0ZW0gc3VwcG9ydC4gVGhhdCdzIGdvb2QsIGtlZXBzIHRoZSBzY29wZSBjb250YWluZWQsIGFuZCBJIGFscmVhZHkgaGF2ZSBhIG1lbnRhbCBtb2RlbCBvZiBob3cgbmV0ZnMgb3BlcmF0ZXMuXG5cblRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGZpbGVzLCBgZGlyZWN0X3dyaXRlLmNgIGFuZCBgd3JpdGVfaXNzdWUuY2AsIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSd2ZSBhZGRyZXNzZWQgdGhvc2UgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEl0J3MgcHJvYmFibHkganVzdCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgdGhleSd2ZSBoYW5kbGVkIGFsbCB0aGUgZWRnZSBjYXNlcyBhbmQgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAzOjIyLjIwMTM5MzkzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ4MTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUwMT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTE0LVxcdCAgICB0ZXN0X2JpdChORVRGU19JQ1RYX1VOQlVGRkVSRUQsIFxcdTAwMjZpY3R4LVxcdTAwM2VmbGFncykpXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1MTU6XFx0XFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNi1cXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE0LSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNi17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02NC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo2NTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTMtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6OTQ6c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTk1LXtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1NC1cXHRcXHRpZiAoIXJldHJ5KSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTU1OlxcdFxcdFxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdCh3cmVxLCBzdHJlYW0sIHN1YnJlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTU2LVxcdFxcdFxcdHN1YnJlcSA9IE5VTEw7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDEtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjAyOlxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDMtXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjA3OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwOC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTAtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjExOlxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjEyLVxcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxOC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMTk6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIyMC1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODgtXFx0aWYgKGFzeW5jKSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjg5OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2d3JlcS1cXHUwMDNld29yaywgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkwLVxcdFxcdHdyZXEtXFx1MDAzZWlvY2IgPSBpb2NiO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkzLVxcdH0gZWxzZSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjk0OlxcdFxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjk1LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTEtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMjpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMy1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTQtLyoqXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzE1OiAqIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciAtIFVuYnVmZmVyZWQgd3JpdGUgdG8gYSBmaWxlXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzE2LSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNi0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjc6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzI4LXtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NS1cXHRcXHRcXHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg2OlxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgZnJvbSwgTlVMTCk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzg3LW91dDpcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM5MC19XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzkxOkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6MjIuMjU5ODgyMjgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMwOTQ1MjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGZpeCwgdGhpbmtpbmcgYWxvdWQgYXMgSSB3b3VsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE5ldEZTIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAuIEFwcGFyZW50bHksIHRoZXJlJ3MgYSBtaXNzaW5nIGBOVUxMYCBjaGVjayB3aXRoaW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIHdoaWNoIGlzIGNhbGxlZCBieSBgbmV0ZnNfcHJlcGFyZV93cml0ZWAuIEFuZCBpZiB0aGUgc3VicmVxdWVzdCBhbGxvY2F0aW9uIGZhaWxzLCBgc3RyZWFtLVx1MDAzZWNvbnN0cnVjdGAgY291bGQgZW5kIHVwIGBOVUxMYC4gVGhlIHN1YnNlcXVlbnQgY29kZSBwYXRoIGluIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCB0aGVuIGRvZXNuJ3QgaGFuZGxlIGEgYE5VTExgIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YCBncmFjZWZ1bGx5LlxuXG5SaWdodCwgc28gdGhlIGZpeCBpcyBwcm9iYWJseSBnb2luZyB0byBhZGQgdGhhdCBtaXNzaW5nIGNoZWNrIGluIGBuZXRmc19wcmVwYXJlX3dyaXRlYC4gV2Ugc2hvdWxkIHNlZSBhbiBhZGRpdGlvbmFsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgY2FsbCByZXR1cm5zIGEgdmFsaWQgc3VicmVxdWVzdCBwb2ludGVyLlxuXG5BbmQgdGhlbiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAuLi50aGF0J3MgdGhlIG9uZSB0aGF0IG5lZWRzIHRoZSBkZWZlbnNpdmUgY29kaW5nIHRvIGhhbmRsZSB0aGUgYE5VTExgIGBzdHJlYW0tXHUwMDNlY29uc3RydWN0YC4gV2Ugd2lsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3MgaGFuZGxpbmcgdGhlIHBvdGVudGlhbCBgTlVMTGAgdmFsdWUgbm93LCBvciBlbHNlIGl0IGlzIGEgY3Jhc2guXG5cbkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIGNvbmZpcm0gd2hlcmUgdGhlIGNvZGUgaXMgYmVpbmcgYWRkZWQgdG8gY2hlY2sgdGhlIG5ldyByZXR1cm4gdmFsdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoyOS41NjkzMzg1ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMTg5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfcHJlcGFyZV93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9OTQ9c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTEwLVxcdFxcdGlmICghc3VicmVxKSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTExOlxcdFxcdFxcdG5ldGZzX3ByZXBhcmVfd3JpdGUod3JlcSwgc3RyZWFtLCB3cmVxLVxcdTAwM2VzdGFydCArIHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xMTItXFx0XFx0XFx0c3VicmVxID0gc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3Q7XFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIwMT1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL2ludGVybmFsLmgtMjA0LVxcdFxcdFxcdFxcdFxcdFxcdGVudW0gbmV0ZnNfaW9fb3JpZ2luIG9yaWdpbik7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyMDU6dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbmZzL25ldGZzL2ludGVybmFsLmgtMjA2LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTkwPXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNDAtLyoqXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNDE6ICogbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQgLSBOb3RlIHdyaXRlIHByZXBhcmF0aW9uIGZhaWxlZFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQyLSAqIEBzdWJyZXE6IFRoZSBzdWJyZXF1ZXN0IHRvIG1hcmtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQ1LSAqL1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTQ2OnZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQoc3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKnN1YnJlcSlcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0Ny17XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1MC19XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNTE6RVhQT1JUX1NZTUJPTChuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZCk7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTItXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1Ni0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE1Nzp2b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTgtXFx0XFx0XFx0IHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MjgwPXNpemVfdCBuZXRmc19hZHZhbmNlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0yOTktXFx0aWYgKCFzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdClcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjMwMDpcXHRcXHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgc3RhcnQpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzAxLVxcdHN1YnJlcSA9IHN0cmVhbS1cXHUwMDNlY29uc3RydWN0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzoyOS42MTUzNjEyNDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDI5NTk3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZSBQYXRoIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIHRoZSBgZnMvbmV0ZnNgIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggZGlyZWN0IHdyaXRlcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogdGhleSd2ZSBhZGRlZCBOVUxMIGNoZWNrcyBhZnRlciBjYWxsaW5nIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBpbiBib3RoIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBhbmQgYG5ldGZzX3ByZXBhcmVfd3JpdGVgLiBUaGlzIGlzIGEgY2xhc3NpYyBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbW92ZSwgYW5kIEknbSBndWVzc2luZyBpdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBcblxuU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGd1YXJkaW5nIGFnYWluc3QgdGhlIHNjZW5hcmlvIHdoZXJlIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBmYWlscywgd2hpY2ggd291bGQgbGlrZWx5IHJldHVybiBgTlVMTGAsIHBvc3NpYmx5IGR1ZSB0byBhbiBgRU5PTUVNYCBlcnJvciwgYW5kIHRoZW4gZG93bnN0cmVhbSBjb2RlIHdvdWxkIGF0dGVtcHQgdG8gdXNlIHRoZSByZXR1cm5lZCBwb2ludGVyLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcy5cblxuTm93LCBsZXQgbWUgbWVudGFsbHkgdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgaXMgc2lnbmlmaWNhbnQgYW5kIHRoYXQgdGhvc2UgcGF0aHMgYXJlIHJlYWNoYWJsZS4gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGlzIHRoZSBjb3JlIG9mIHRoaXMsIGFuZCBpdCBhcHBlYXJzIHRvIGJlIHJlYWNoZWQgdmlhIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmNgLiBUaG9zZSwgaW4gdHVybiwgYXJlIGNhbGxlZCBieSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgd2hpY2ggaXMgdXNlZCBpbiBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCAoZm91bmQgaW4gYGJ1ZmZlcmVkX3dyaXRlLmNgKS4gKlRoYXQqIGZ1bmN0aW9uIGlzIGV4cG9ydGVkIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaXMgYWN0dWFsbHkgdXNlZCBieSBmaWxlc3lzdGVtcyBsaWtlIGBhZnNgLCBgOXBgLCBgY2lmc2AsIGFuZCBgY2VwaGAuXG5cbkFscmlnaHQsIHRoYXQgY29uZmlybXMgaXQ6IFRoaXMgaXMgYSByZWxldmFudCBmaXgsIHBvdGVudGlhbGx5IGltcGFjdGluZyBhIG51bWJlciBvZiByZWFsLXdvcmxkIG5ldHdvcmsgZmlsZXN5c3RlbXMsIGdpdmVuIGl0IHByZXZlbnRzIGEgcG9zc2libGUgY3Jhc2ggdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBUaGUgcGF0Y2ggY2xlYXJseSBjbG9zZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiBhIGZhaXJseSBpbXBvcnRhbnQgcGFydCBvZiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIHN0YWNrLiBJdCdzIGEgc29saWQsIGlmIHNpbXBsZSwgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAzOjM5LjA0NDk2MTMxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzNzk1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX2ZpbGVfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zNzE9ZmlsZXN5c3RlbSBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgVkZTIHJlYWQvd3JpdGVfaXRlciBtZXRob2RzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtMzczLVxcdHNzaXplX3QgbmV0ZnNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6Mzc0OlxcdHNzaXplX3QgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3NS1cXHRzc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XFxuLS1cXG5mcy85cC92ZnNfZmlsZS5jPTQwMT12OWZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzLzlwL3Zmc19maWxlLmMtNDExLVxcdHA5X2RlYnVnKFA5X0RFQlVHX0NBQ0hFLCBcXFwiKGNhY2hlZClcXFxcblxcXCIpO1xcbmZzLzlwL3Zmc19maWxlLmM6NDEyOlxcdHJldHVybiBuZXRmc19maWxlX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvOXAvdmZzX2ZpbGUuYy00MTMtfVxcbi0tXFxuZnMvYWZzL2ZpbGUuYz0zND1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFmc19maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9hZnMvZmlsZS5jLTM4LVxcdC5yZWFkX2l0ZXJcXHQ9IGFmc19maWxlX3JlYWRfaXRlcixcXG5mcy9hZnMvZmlsZS5jOjM5OlxcdC53cml0ZV9pdGVyXFx0PSBuZXRmc19maWxlX3dyaXRlX2l0ZXIsXFxuZnMvYWZzL2ZpbGUuYy00MC1cXHQubW1hcF9wcmVwYXJlXFx0PSBhZnNfZmlsZV9tbWFwX3ByZXBhcmUsXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTQ4Nj1FWFBPUlRfU1lNQk9MKG5ldGZzX2J1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDg4LS8qKlxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDg5OiAqIG5ldGZzX2ZpbGVfd3JpdGVfaXRlciAtIHdyaXRlIGRhdGEgdG8gYSBmaWxlXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00OTAtICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MDAtICovXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo1MDE6c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MDIte1xcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MjgtfVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NTI5OkVYUE9SVF9TWU1CT0wobmV0ZnNfZmlsZV93cml0ZV9pdGVyKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUzMC1cXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTI5ODk9Y2lmc19zdHJpY3Rfd3JpdGV2KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwNi1cXHRcXHQgICAgKChjaWZzX3NiX2ZsYWdzKGNpZnNfc2IpIFxcdTAwMjYgQ0lGU19NT1VOVF9OT1BPU0lYQlJMKSA9PSAwKSkge1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jOjMwMDc6XFx0XFx0XFx0d3JpdHRlbiA9IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDA4LVxcdFxcdFxcdGNpZnNfdXBkYXRlX2lfYmxvY2tzX2FmdGVyX3dyaXRlKGlvY2IsIHdyaXR0ZW4pO1xcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAxOS1cXHQgKi9cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDIwOlxcdHdyaXR0ZW4gPSBuZXRmc19maWxlX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAyMS1cXHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMwNDA9c3NpemVfdCBjaWZzX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzA0My1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDQ0OlxcdHdyaXR0ZW4gPSBuZXRmc19maWxlX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzA0NS1cXHRjaWZzX3VwZGF0ZV9pX2Jsb2Nrc19hZnRlcl93cml0ZShpb2NiLCB3cml0dGVuKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMwNjQ9c3NpemVfdCBjaWZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwODctXFxuZnMvc21iL2NsaWVudC9maWxlLmM6MzA4ODpcXHR3cml0dGVuID0gbmV0ZnNfZmlsZV93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMwODktXFx0Y2lmc191cGRhdGVfaV9ibG9ja3NfYWZ0ZXJfd3JpdGUoaW9jYiwgd3JpdHRlbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9Mzk2PXNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtMzk3LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDozOTg6c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pO1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC0zOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAzOjQwLjk0ODc2MTU5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjExNDg3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgRmlsZXN5c3RlbSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGlzIGNvZGUgYW5kIEknbSBwcmV0dHkgY2VydGFpbiB0aGF0IHRoZSBleGVjdXRpb24gcGF0aCBJJ20gaW50ZXJlc3RlZCBpbiBnb2VzIGRpcmVjdGx5IHRocm91Z2ggYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLiBUaGF0IGZlZWxzIHJpZ2h0LCBnaXZlbiB0aGUgY29udGV4dC4gTm93LCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBzeXN0ZW0gSSdtIHRlc3RpbmcsIEknbGwgbmVlZCB0byBjb25maXJtIGEgY291cGxlIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBgTkVURlNfU1VQUE9SVGAgaGFzIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGVuIGF0IGxlYXN0ICpvbmUqIG9mIHRoZSBmaWxlc3lzdGVtcyB0aGF0IGJ1aWxkcyAqb24gdG9wKiBvZiBpdC4gU28gdGhhdCBtZWFucyBzb21ldGhpbmcgbGlrZSBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBvciBgQ0VQSF9GU2AsIGFtb25nIG90aGVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBuZXRmc2AgdG8gY29uZmlybSB3aGljaCBkZXBlbmRlbmNpZXMgYXJlIHRoZSBkcml2aW5nIGZhY3RvcnMuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZnMvbmV0ZnMvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6NDUuMzY5OTEyNjM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzEyNjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURlNfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvS2NvbmZpZy0yLVxcbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxcbmZzL25ldGZzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzo0NS40MTMwNDUxMzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2NTQzMDU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIDlQIENvbmZpZ3VyYXRpb24gU3BhY2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIDlQLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBjdXJyZW50bHkgZW5hYmxlZCwgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIGlmIGFueSByZWNlbnQgY2hhbmdlcyBoYXZlIGltcGFjdGVkIHRoZSBvcHRpb25zLiBMZXQncyBzdGFydCB3aXRoIGBmcy85cC9LY29uZmlnYC4gVGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCwgdGhlIGNvbnRyb2wgcGFuZWwsIGZvciB0aGUgOVAgZmlsZXN5c3RlbSdzIGZlYXR1cmUgc2V0LiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIG9wdGlvbnMsIGNoZWNraW5nIGZvciBhbnkgbmV3IGFkZGl0aW9ucyBvciByZW1vdmFscyB0aGF0IEkgaGF2ZW4ndCB0cmFja2VkIHlldC4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byByZWNlbnQgc2VjdXJpdHkgcGF0Y2hlcyBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgYW55IG5ldyBjbGllbnQgb3Igc2VydmVyIGNhcGFiaWxpdGllcywgb3IgbW9yZSBncmFudWxhciBvcHRpb25zIGZvciB0dW5pbmc/IFRoZSBnb2FsIGhlcmUgaXNuJ3QgYSBsaW5lLWJ5LWxpbmUgcmV2aWV3LCBidXQgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZXN0YWJsaXNoIGEgYmFzZWxpbmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHdoaWNoIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbCBvbiBvdGhlcnMsIGFuZCBob3cgdGhvc2UgaW50ZXJkZXBlbmRlbmNpZXMgbWlnaHQgYWZmZWN0IG15IHNwZWNpZmljIHVzZSBjYXNlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBjaG9pY2VzIEknbGwgbmVlZCB0byBtYWtlIGxhdGVyLiBUaW1lIHRvIGdldCBteSBiZWFyaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAzOjQ4Ljg3ODQ3ODk0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNTEzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIDlQX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzLzlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvOXAvS2NvbmZpZzoyOmNvbmZpZyA5UF9GU1xcbmZzLzlwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MTQ9aWYgOVBfRlNcXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXFxuZnMvOXAvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWctMjItXFxuZnMvOXAvS2NvbmZpZzoyMzpjb25maWcgOVBfRlNfUE9TSVhfQUNMXFxuZnMvOXAvS2NvbmZpZy0yNC1cXHRib29sIFxcXCI5UCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MzI9ZW5kaWZcXG4tLVxcbmZzLzlwL0tjb25maWctMzQtXFxuZnMvOXAvS2NvbmZpZzozNTpjb25maWcgOVBfRlNfU0VDVVJJVFlcXG5mcy85cC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIjlQIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6NDguOTIyNjM1NDQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MzE1MTY1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUIgQ2xpZW50IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFNNQiBjbGllbnQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL3NtYi9jbGllbnQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMgdG8gcmVzaWRlLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFNNQiBjbGllbnQgaXMgYnVpbHQgYW5kIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0J2xsIGdpdmUgbWUgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGlmZmVyZW50IGNvbXBpbGUtdGltZSBvcHRpb25zIGF2YWlsYWJsZSwgYW5kIHRoZWlyIGRlcGVuZGVuY2llcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYW55IG1vZGlmaWNhdGlvbnMgb3IgZGVlcGVyIGFuYWx5c2lzIEkgbmVlZCB0byBkbyBkb3duIHRoZSBsaW5lLiBJdCBpcyBhbHdheXMgYmVzdCB0byBzdGFydCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHdoZXJlIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzo1My4zNTQxNTQ1MjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDY2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDSUZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIkV4dGVuZGVkIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjY4OmNvbmZpZyBDSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSBsZXNzIHNlY3VyZSBkaWFsZWN0c1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04Mi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05My1cXHRib29sIFxcXCJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMDc6Y29uZmlnIENJRlNfUE9TSVhcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVxcdGJvb2wgXFxcIkNJRlMgUE9TSVggRXh0ZW5zaW9uc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMTgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXFx0Ym9vbCBcXFwiRW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjktXFx0Ym9vbCBcXFwiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMzk6Y29uZmlnIENJRlNfREVCVUdfRFVNUF9LRVlTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cXHRib29sIFxcXCJEdW1wIGVuY3J5cHRpb24ga2V5cyBmb3Igb2ZmbGluZSBkZWNyeXB0aW9uIChVbnNhZmUpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVxcdGJvb2wgXFxcIkRGUyBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNjMtXFx0Ym9vbCBcXFwiU1dOIGZlYXR1cmUgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE3Mzpjb25maWcgQ0lGU19ORlNEX0VYUE9SVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiQWxsb3cgbmZzZCB0byBleHBvcnQgQ0lGUyBmaWxlIHN5c3RlbVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0xNzk9aWYgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE4Mi1cXHRib29sIFxcXCJTTUIgRGlyZWN0IHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTE6Y29uZmlnIENJRlNfRlNDQUNIRVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBDSUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTk4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXFx0Ym9vbCBcXFwiU01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlNNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMzo1My4zOTg2MjQwMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0Mzk0MzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgTmV0d29yayBGaWxlIFN5c3RlbSBTdXBwb3J0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbiBhbmQgcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgQ0lGUyBvciA5UF9GUywgYXJlIHJlc3BvbnNpYmxlIGZvciBzZWxlY3RpbmcgYE5FVEZTX1NVUFBPUlRgLiBUaW1lIHRvIGp1bXAgaW50byB0aGUgYGZzL25ldGZzL0tjb25maWdgIGZpbGUgYW5kIGdldCB0aGlzIHN0cmFpZ2h0ZW5lZCBvdXQuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6NTYuMjQyNTY5MzUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTc3MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVURlNfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvS2NvbmZpZz0yPWNvbmZpZyA5UF9GU1xcbi0tXFxuZnMvOXAvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gTkVUXzlQXFxuZnMvOXAvS2NvbmZpZzo1OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvOXAvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2Fmcy9LY29uZmlnPTI9Y29uZmlnIEFGU19GU1xcbi0tXFxuZnMvYWZzL0tjb25maWctNi1cXHRzZWxlY3QgRE5TX1JFU09MVkVSXFxuZnMvYWZzL0tjb25maWc6NzpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzL2Fmcy9LY29uZmlnLTgtXFx0c2VsZWN0IENSWVBUT19LUkI1XFxuLS1cXG5mcy9jZXBoL0tjb25maWc9Mj1jb25maWcgQ0VQSF9GU1xcbi0tXFxuZnMvY2VwaC9LY29uZmlnLTUtXFx0c2VsZWN0IENFUEhfTElCXFxuZnMvY2VwaC9LY29uZmlnOjY6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy9jZXBoL0tjb25maWctNy1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4tLVxcbmZzL25mcy9LY29uZmlnPTE3Mz1jb25maWcgTkZTX0ZTQ0FDSEVcXG4tLVxcbmZzL25mcy9LY29uZmlnLTE3NS1cXHRkZXBlbmRzIG9uIE5GU19GU1xcbmZzL25mcy9LY29uZmlnOjE3NjpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzL25mcy9LY29uZmlnLTE3Ny1cXHRzZWxlY3QgRlNDQUNIRVxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnPTI9Y29uZmlnIENJRlNcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMC1cXHRzZWxlY3QgT0lEX1JFR0lTVFJZXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIxOlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIyLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDM6NTYuMzMyMzQ1ODYyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjk1NTI1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUZXN0aW5nIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZXMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgZGVwZW5kZW5jeSB0cmVlLCBgTkVURlNfU1VQUE9SVGAgaXMgYmVpbmcgcHVsbGVkIGluIGJ5IGEgaGFuZGZ1bCBvZiBuZXR3b3JrIGZpbGVzeXN0ZW1zOiBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgLCBgQ0lGU2AsIGFuZCBgTkZTX0ZTQ0FDSEVgLiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgZm9yIHRlc3RpbmcgdGhpcyB3cml0ZSBwYXRoLCBJIGNhbiBqdXN0IGVuYWJsZSBgOVBfRlNgIGFuZCBgQ0lGU2AgYW5kIHRoYXQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYnJpbmcgaW4gYE5FVEZTX1NVUFBPUlRgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQncyBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0byB0ZXN0OiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgYW5kIGBuZXRmc19wcmVwYXJlX3dyaXRlYC5cblxuV2FpdCBhIG1pbnV0ZS4uLiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgc3RhdGljLiBUaGF0IG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIGNvbXBsaWNhdGVkLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgY2FsbGluZyBpdC4gQnV0IGBuZXRmc19wcmVwYXJlX3dyaXRlYCBpcyBleHBvcnRlZCwgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmFjdGlvbiBJIGNhbiB1c2UuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBpdGVyYXRvciBmdW5jdGlvbnMgdG9vLCBzbyBsZXQncyBjaGVjayBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLiBUaGF0IHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IHRoZSBzdGF0aWMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGdldHMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNDowMi42MDE5MDIwNDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTczNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz01MDE9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNC1cXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcXHUwMDI2aWN0eC1cXHUwMDNlZmxhZ3MpKVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NTE1OlxcdFxcdHJldHVybiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MTYtXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0yMDc9c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTgtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE5OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMjAtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzExLX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTI6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTMtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzE0LS8qKlxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxNTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxNi0gKiBAaW9jYjogSU8gc3RhdGUgc3RydWN0dXJlXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjYtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzI3OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyOC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODUtXFx0XFx0XFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4NjpcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4Ny1vdXQ6XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zOTAtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM5MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjAyLjY1MDg4Mzk2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTA2MjAwNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgTmV0RlMgTW9kdWxlKipcblxuQWxyaWdodCwgc28gaXQgbG9va3MgbGlrZSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgIGFyZSBib3RoIGV4cG9ydGVkLCB3aGljaCBtZWFucyB0aGV5J3JlIGZhaXIgZ2FtZSBmb3IgZnV6emluZy4gRXhjZWxsZW50ISBUaG9zZSBhcmUgdGhlIGtpbmRzIG9mIGVudHJ5IHBvaW50cyB0aGF0IGNhbiByZXZlYWwgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy4gQWxzbywgYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAgaXMgZXhwb3NlZCB0b28sIHdoaWNoIGlzIGFub3RoZXIgb2J2aW91cyBjYW5kaWRhdGUuIEFuZCwgb2YgY291cnNlLCB3ZSBjYW4gYWRkIGBuZXRmc19wcmVwYXJlX3dyaXRlYCB0byB0aGUgbGlzdC4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGtpbmRzIG9mIG1hbGZvcm1lZCBkYXRhIEkgY2FuIHRocm93IGF0IHRob3NlIGZ1bmN0aW9ucy5cblxuTm93LCBsZXQncyBzZWUgaWYgd2UgY2FuIGdvIGRlZXBlci4gSXQncyBhIGdvb2QgcHJhY3RpY2UgdG8gZXhhbWluZSBhbGxvY2F0aW9uIHJvdXRpbmVzIGFzc29jaWF0ZWQgd2l0aCBvdXIgdGFyZ2V0IHdyaXRlIGNhbGxzLiBMZXQncyBzZWUgaWYgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIGlzIGFsc28gZXhwb3J0ZWQuIFRoYXQgd291bGQgYmUgYW5vdGhlciBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmdXp6IHRhcmdldCB0byBldmFsdWF0ZSwgaWYgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzA5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MDcuNTU3MDg2ODE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyODk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19hbGxvY19zdWJyZXF1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MjExPXN0YXRpYyB2b2lkIG5ldGZzX3JlYWRfdG9fcGFnZWNhY2hlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTIyMi1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MjIzOlxcdFxcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3QocnJlcSk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTIyNC1cXHRcXHRpZiAoIXN1YnJlcSkge1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3JlYWQuYz00OD1zdGF0aWMgdm9pZCBuZXRmc19kaXNwYXRjaF91bmJ1ZmZlcmVkX3JlYWRzKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3JlYWQuYy01Ny1cXG5mcy9uZXRmcy9kaXJlY3RfcmVhZC5jOjU4OlxcdFxcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3QocnJlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3JlYWQuYy01OS1cXHRcXHRpZiAoIXN1YnJlcSkge1xcbi0tXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaD05Mz12b2lkIG5ldGZzX3B1dF9mYWlsZWRfcmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSk7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDo5NDpzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSk7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC05NS1cXG4tLVxcbmZzL25ldGZzL29iamVjdHMuYz0xODU9dm9pZCBuZXRmc19wdXRfZmFpbGVkX3JlcXVlc3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXFxuLS1cXG5mcy9uZXRmcy9vYmplY3RzLmMtMjAxLSAqL1xcbmZzL25ldGZzL29iamVjdHMuYzoyMDI6c3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKm5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXFxuZnMvbmV0ZnMvb2JqZWN0cy5jLTIwMy17XFxuLS1cXG5mcy9uZXRmcy9yZWFkX3JldHJ5LmM9MjY9c3RhdGljIHZvaWQgbmV0ZnNfcmV0cnlfcmVhZF9zdWJyZXF1ZXN0cyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcXG4tLVxcbmZzL25ldGZzL3JlYWRfcmV0cnkuYy0xOTctXFx0XFx0ZG8ge1xcbmZzL25ldGZzL3JlYWRfcmV0cnkuYzoxOTg6XFx0XFx0XFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChycmVxKTtcXG5mcy9uZXRmcy9yZWFkX3JldHJ5LmMtMTk5LVxcdFxcdFxcdGlmICghc3VicmVxKSB7XFxuLS1cXG5mcy9uZXRmcy9yZWFkX3NpbmdsZS5jPTkwPXN0YXRpYyBpbnQgbmV0ZnNfc2luZ2xlX2Rpc3BhdGNoX3JlYWQoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXFxuLS1cXG5mcy9uZXRmcy9yZWFkX3NpbmdsZS5jLTk0LVxcbmZzL25ldGZzL3JlYWRfc2luZ2xlLmM6OTU6XFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdChycmVxKTtcXG5mcy9uZXRmcy9yZWFkX3NpbmdsZS5jLTk2LVxcdGlmICghc3VicmVxKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0xNTc9dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNzEtXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNzI6XFx0c3VicmVxID0gbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdCh3cmVxKTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE3My1cXHRpZiAoIXN1YnJlcSlcXG4tLVxcbmZzL25ldGZzL3dyaXRlX3JldHJ5LmM9MTc9c3RhdGljIHZvaWQgbmV0ZnNfcmV0cnlfd3JpdGVfc3RyZWFtKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfcmV0cnkuYy0xNTEtXFx0XFx0ZG8ge1xcbmZzL25ldGZzL3dyaXRlX3JldHJ5LmM6MTUyOlxcdFxcdFxcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qod3JlcSk7XFxuZnMvbmV0ZnMvd3JpdGVfcmV0cnkuYy0xNTMtXFx0XFx0XFx0c3VicmVxLVxcdTAwM2Vzb3VyY2VcXHRcXHQ9IHRvLVxcdTAwM2Vzb3VyY2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjA3LjYwNjQyMDA0M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIzNTM5OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTmV0RlMgV3JpdGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgbmV0ZnNfYWxsb2Nfc3VicmVxdWVzdGAgaXMgZGVmaW5pdGVseSBhbiBpbnRlcm5hbCBmdW5jdGlvbjsgaXQncyB0dWNrZWQgYXdheSB3aXRoaW4gYGZzL25ldGZzL2AuIFRoYXQgbWVhbnMgSSdsbCBoYXZlIHRvIGJ5cGFzcyBpdCBpbiB0aGlzIGFuYWx5c2lzLiBNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBrZXkgd3JpdGUgZnVuY3Rpb25zOiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLCBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYCwgYW5kIGBuZXRmc19wcmVwYXJlX3dyaXRlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGV4YW1pbmUgZm9yIGhvdyBkYXRhIGdldHMgd3JpdHRlbi5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBsZXQncyBrZWVwIGl0IHByYWN0aWNhbC4gQ29uY2VudHJhdGluZyBvbiBgQ0lGU2AgYW5kIGA5UF9GU2AgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIFRoZXkncmUgY29tbW9ubHkgdXNlZCBhbmQgc2hvdWxkIHB1bGwgaW4gYE5FVEZTX1NVUFBPUlRgLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBJIG5lZWQuXG5cbkhtbS4uLiBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyPyBXYWl0LCBgTkVURlNfU1VQUE9SVGAgaXRzZWxmIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBtZWFuaW5nIEkgY291bGQgZW5hYmxlIGl0IGRpcmVjdGx5IGlmIEkgd2FudGVkLCBidXQgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gZW5hYmxlIGl0IGluZGlyZWN0bHkgdGhyb3VnaCBhIGZpbGVzeXN0ZW0gdGhhdCB1c2VzIGl0LiBUaGUgcXVlc3Rpb24gaXMsIGlzIGBORVRGU19TVVBQT1JUYCB2aXNpYmxlIGluIHRoZSBLY29uZmlnPyBMZXQgbWUgcXVpY2tseSBjaGVjayBgZnMvbmV0ZnMvS2NvbmZpZ2AgdG8gY29uZmlybSBpdHMgdmlzaWJpbGl0eS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgZW5hYmxlZCBhbmQgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MTIuMjI5OTY0MTA0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ3NDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURlNfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvS2NvbmZpZy0yLVxcbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxcbmZzL25ldGZzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNDoxMi4yNzQ0NDQxMDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyOTgzNDY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25maWd1cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGEgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlIG9wdGlvbiwgbWVhbmluZyBpdCdzIGJlaW5nIGNob3NlbiBpbmRpcmVjdGx5IHRocm91Z2ggYW5vdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBJIG5lZWQgdG8gbGlzdCBgQ0lGU2AgYW5kIGA5UF9GU2AgaW4gdGhlIGFwcHJvcHJpYXRlIHNlbGVjdGlvbiBtZW51LCBzaW5jZSB0aGF0J3Mgd2hhdCdzIGNvbnRyb2xsaW5nIHRoZSBjaG9pY2UuXCJcblxuQnV0IGJlZm9yZSBJIGNvbW1pdCwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhvc2UgdHdvLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAuIEEgcXVpY2sgcmV2aWV3IHNob3dzIHRoYXQgYENJRlNgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgOVBfRlNgIGRlcGVuZHMgb24gYE5FVF85UGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGl0J3MgYWx3YXlzIHdpc2UgdG8gYmUgY2VydGFpbi4gU28sIEnigJlsbCB0YWtlIGEgbG9vayBhdCB0aGUgZGV0YWlscyBvZiBgTkVUXzlQYCBiZWZvcmUgZmluYWxpemluZyB0aGUgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBhbGwgYmFzZXMgYW5kIGV2ZXJ5dGhpbmfigJlzIHByb3Blcmx5IGxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwOTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNDoxOS4yMDQyODE5MzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDE4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfOVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvOXAvS2NvbmZpZy01LVxcbm5ldC85cC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfOVBcXG5uZXQvOXAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJQbGFuIDkgUmVzb3VyY2UgU2hhcmluZyBTdXBwb3J0ICg5UDIwMDApXFxcIlxcbi0tXFxubmV0LzlwL0tjb25maWc9MTc9aWYgTkVUXzlQXFxubmV0LzlwL0tjb25maWctMTgtXFxubmV0LzlwL0tjb25maWc6MTk6Y29uZmlnIE5FVF85UF9GRFxcbm5ldC85cC9LY29uZmlnLTIwLVxcdGRlZmF1bHQgTkVUXzlQXFxuLS1cXG5uZXQvOXAvS2NvbmZpZy0yNy1cXG5uZXQvOXAvS2NvbmZpZzoyODpjb25maWcgTkVUXzlQX1ZJUlRJT1xcbm5ldC85cC9LY29uZmlnLTI5LVxcdGRlcGVuZHMgb24gVklSVElPXFxuLS1cXG5uZXQvOXAvS2NvbmZpZy0zNC1cXG5uZXQvOXAvS2NvbmZpZzozNTpjb25maWcgTkVUXzlQX1hFTlxcbm5ldC85cC9LY29uZmlnLTM2LVxcdGRlcGVuZHMgb24gWEVOXFxuLS1cXG5uZXQvOXAvS2NvbmZpZy00Mi1cXG5uZXQvOXAvS2NvbmZpZzo0Mzpjb25maWcgTkVUXzlQX1VTQkdcXG5uZXQvOXAvS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiOVAgVVNCIEdhZGdldCBUcmFuc3BvcnRcXFwiXFxuLS1cXG5uZXQvOXAvS2NvbmZpZy01MS1cXG5uZXQvOXAvS2NvbmZpZzo1Mjpjb25maWcgTkVUXzlQX1JETUFcXG5uZXQvOXAvS2NvbmZpZy01My1cXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcXG4tLVxcbm5ldC85cC9LY29uZmlnLTU3LVxcbm5ldC85cC9LY29uZmlnOjU4OmNvbmZpZyBORVRfOVBfREVCVUdcXG5uZXQvOXAvS2NvbmZpZy01OS1cXHRib29sIFxcXCJEZWJ1ZyBpbmZvcm1hdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MTkuMjUwMzA0NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MzkxMDkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqUXVpY2sgQ2hlY2sgb24gRmlsZSBTeXN0ZW0gT3B0aW9ucyoqXG5cblJpZ2h0LCBzbyBgTkVUXzlQYCDigJMgdGhhdOKAmXMgYSBtZW51Y29uZmlnIGl0ZW0sIGVhc3kgZW5vdWdoLiBMZXQncyBtYWtlIHN1cmUgd2UgaW5jbHVkZSByZWxldmFudCBvcHRpb25zIHdoZW4gZGlzY3Vzc2luZyB0aGlzLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgdG8gbWVudGlvbiBgQ0lGU2AsIGA5UF9GU2AsIGFuZCBvZiBjb3Vyc2UsIGBORVRfOVBgIGl0c2VsZi4gR290dGEgZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLlxuXG5Ob3csIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS4uLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGlzIGV4cG9ydGVkLiBUaGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0aGUgZmxvdy4gQmVzdCB0byBjb25maXJtIGl0cyB2aXNpYmlsaXR5IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNDoyMi44MjQyMTgxMjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODAwNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5ldGZzX3ByZXBhcmVfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MTQ2PXZvaWQgbmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQoc3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKnN1YnJlcSlcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUwLX1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE1MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkKTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE1Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MjIuODg0MDI1MjEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDc1ODI1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIEV4cG9ydCoqXG5cbkhtbSwgaXQgc2VlbXMgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGlzbid0IHNob3dpbmcgdXAgYXMgYW4gZXhwb3J0ZWQgc3ltYm9sLiBUaGF0J3MgYSByZWQgZmxhZy4gQmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvICp3aHkqIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hlcmUgaXQgc2hvdWxkIGJlLiBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kLCBpZGVhbGx5LCBzZWUgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNybyAob3IgZXF1aXZhbGVudCkgaW4gcGxhY2UgaWYgaXQncyBtZWFudCB0byBiZSBhdmFpbGFibGUgZXh0ZXJuYWxseS4gVGhpcyB3aWxsIGNsYXJpZnkgaWYgaXQncyBhIGdlbnVpbmUgb3ZlcnNpZ2h0LCBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXNzdWUsIG9yIGEgbW9yZSBmdW5kYW1lbnRhbCBkZXNpZ24gZGVjaXNpb24gdG8ga2VlcCB0aGF0IGZ1bmN0aW9uIGludGVybmFsIHRvIHRoZSBuZXRmcyBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MjYuOTkxNjEyNzQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk0NzQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19wcmVwYXJlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL3dyaXRlX2lzc3VlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz05MD1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTQwLS8qKlxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTQxOiAqIG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkIC0gTm90ZSB3cml0ZSBwcmVwYXJhdGlvbiBmYWlsZWRcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0Mi0gKiBAc3VicmVxOiBUaGUgc3VicmVxdWVzdCB0byBtYXJrXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTE0NS0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjE0Njp2b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGVfZmFpbGVkKHN0cnVjdCBuZXRmc19pb19zdWJyZXF1ZXN0ICpzdWJyZXEpXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNDcte1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTAtfVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTUxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUyLVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTYtICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxNTc6dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTU4LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0sXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTI4MD1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMjk5LVxcdGlmICghc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3QpXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzozMDA6XFx0XFx0bmV0ZnNfcHJlcGFyZV93cml0ZSh3cmVxLCBzdHJlYW0sIHN0YXJ0KTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTMwMS1cXHRzdWJyZXEgPSBzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6MjcuMDM2NTY2NTE3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjIxMTM4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW50ZXJuYWwgTmV0RlMgV3JpdGVzKipcblxuT2theSwgc28gdGhpcyBpc24ndCBhbiBleHRlcm5hbGx5IGZhY2luZyBmdW5jdGlvbiwgaXQncyB1c2VkIGludGVybmFsbHkgd2l0aGluIGBmcy9uZXRmcy9gLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LiBNeSBhdHRlbnRpb24gbmVlZHMgdG8gYmUgb246XG5cbiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYFxuKiAgIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgXG5cbkJ1dCBoYW5nIG9uLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgd2FzIHRoZSBvbmUgbW9kaWZpZWQgaW4gYGRpcmVjdF93cml0ZS5jYC4gR290dGEgZG91YmxlLWNoZWNrIHRoYXQuIEdpdmVuIHRoYXQgY2hhbmdlLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHNjYW4gYGRpcmVjdF93cml0ZS5jYCBmb3IgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgcmVsZXZhbnQuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjM0LjU1ODY4MzYyOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MjA5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0yMTk9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzExLX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTI6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTMtXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0zMjc9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zOTAtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM5MTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjM0LjYwMzIxMDQ4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzI1MTI3NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IGFyZSBteSBvd246XG5cbioqVW5idWZmZXJlZCBXcml0ZXMgYW5kIHRoZSBgYnVmZmVyZWRfd3JpdGUuY2AgTW9kdWxlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB1bmJ1ZmZlcmVkIHdyaXRlcywgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uLiBBbmQgSSdtIGFsc28gcmVtZW1iZXJpbmcgdGhhdCBgYnVmZmVyZWRfd3JpdGUuY2AgaXMgd2hlcmUgSSdsbCBmaW5kIHJlbGF0ZWQgY29kZSwgYW5kIHByb2JhYmx5IHNvbWUgb2YgdGhlIGluZnJhc3RydWN0dXJlIHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoLiBUaGF0IGZpbGUgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBoYW5kbGUgb24gaXRzIGxvZ2ljIGluIHJlbGF0aW9uIHRvIG15IHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6NDIuMzI4MzQxMzg2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE0Mjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz04Nz1zc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0Mi19XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0NDM6RVhQT1JUX1NZTUJPTChuZXRmc19wZXJmb3JtX3dyaXRlKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0NC1cXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY4PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4NS19XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0ODY6RVhQT1JUX1NZTUJPTChuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODctXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUwMT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTI4LX1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjUyOTpFWFBPUlRfU1lNQk9MKG5ldGZzX2ZpbGVfd3JpdGVfaXRlcik7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MzAtXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTUzNz12bV9mYXVsdF90IG5ldGZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNjE1LX1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjYxNjpFWFBPUlRfU1lNQk9MKG5ldGZzX3BhZ2VfbWt3cml0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjQyLjM3MzQ5MTg1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTMwMjE5ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIEZpbGUgU3lzdGVtIFdyaXRlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW0gd3JpdGUgcGF0aCwgYW5kIGl0IGxvb2tzIGxpa2UgYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBib3RoIGJ1ZmZlcmVkIGFuZCB1bmJ1ZmZlcmVkIHdyaXRlIG9wZXJhdGlvbnMuIE15IGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyBob3cgd3JpdGVzIGFyZSBwcm9jZXNzZWQsIHNvIEknbGwgbmVlZCB0byBrZWVwIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGFuZCBvZiBjb3Vyc2UsIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgIGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgdGhpbmtpbmcuIEkgd2FudCB0byBoYXZlIGEgaGFuZGxlIG9uIHRoZSBrZXkgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYmV0d2VlbiB0aGUgYnVmZmVyZWQgYW5kIHVuYnVmZmVyZWQgcGF0aHMuXG5cbkknbSB3b3JraW5nIHdpdGggYSBmZXcgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgLSBgQ0lGU2AsIGA5UF9GU2AsIGFuZCBgTkVUXzlQYCDigJMgYW5kIEknbGwgbmVlZCB0byByZW1lbWJlciBob3cgdGhleSBtaWdodCBpbmZsdWVuY2UgdGhlIHdyaXRlIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IGVhY2ggb2YgdGhlc2UgZmlsZSBzeXN0ZW1zIGhhbmRsZSByZWFkcyBhbmQgd3JpdGVzLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGUgZXhwb3NlZCBmdW5jdGlvbnMsIEknbGwgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBgZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCdzIGF2YWlsYWJsZSBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6NDYuOTAzNzE0NDQ3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ3Mzc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL3dyaXRlX2lzc3VlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0xNDY9dm9pZCBuZXRmc19wcmVwYXJlX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqc3VicmVxKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xNTAtfVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MTUxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcHJlcGFyZV93cml0ZV9mYWlsZWQpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTUyLVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDg9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYxMy19XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MTQ6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYxNS1cXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9ODQzPWludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy05MDctfVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6OTA4OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGViYWNrX3NpbmdsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA0OjQ2Ljk0OTE5Njg1N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ3OTQ2MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIHRoZSBOZXRGUyBXcml0ZSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBOZXRGUyBjb2RlIGFuZCBJIHNlZSB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBgbmV0ZnNfd3JpdGVwYWdlc2AgYW5kIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYm90aCBvZiB3aGljaCBhcmUgZXhwb3NlZC4gQnV0LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGlzIHBhdGNoIGZvY3VzZXMgb24gYG5ldGZzX3ByZXBhcmVfd3JpdGVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBgbmV0ZnNfcHJlcGFyZV93cml0ZWAgaXMgY2FsbGVkIGJ5IGJvdGggYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCB3aGljaCBsaXZlcyBpbiBgZGlyZWN0X3dyaXRlLmNgLCBhbmQgYnkgYG5ldGZzX2FkdmFuY2Vfd3JpdGVgLCB3aGljaCBpcyBpbiBgd3JpdGVfaXNzdWUuY2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgaW1wb3J0YW50IGNvbnRyb2wgcG9pbnQuXG5cbkkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZW50aXJlKiB3cml0ZSBwYXRoIHRob3VnaCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJ3MgYWN0dWFsbHkgY2FsbGluZyBgbmV0ZnNfYWR2YW5jZV93cml0ZWAuIFRoYXQnbGwgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBjaGFuZ2UgcmlwcGxlcyB0aHJvdWdoIHRoZSBOZXRGUyB3cml0ZSBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhvc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6NTEuMTk3MTQ2MTEyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExNzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19hZHZhbmNlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtMzk2LVxcdFxcdH0gZWxzZSB7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzozOTc6XFx0XFx0XFx0bmV0ZnNfYWR2YW5jZV93cml0ZXRocm91Z2god3JlcSwgXFx1MDAyNndiYywgZm9saW8sIGNvcGllZCxcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTM5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQgKyBjb3BpZWQgPT0gZmxlbixcXG4tLVxcbmZzL25ldGZzL2ludGVybmFsLmg9MjExPXZvaWQgbmV0ZnNfaXNzdWVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTItXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSk7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyMTM6c2l6ZV90IG5ldGZzX2FkdmFuY2Vfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTQtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yMTY9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW4pO1xcbmZzL25ldGZzL2ludGVybmFsLmg6MjE3OmludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBjb3BpZWQsIGJvb2wgdG9fcGFnZV9lbmQsXFxuLS1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYz0xOT1zdGF0aWMgdm9pZCBuZXRmc19wZ3ByaXYyX2NvcHlfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKmNyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYy03Ny1cXHRcXHRjYWNoZS1cXHUwMDNlc3VibWl0X2V4dGVuZGFibGVfdG8gPSBmc2l6ZSAtIGNhY2hlLVxcdTAwM2VzdWJtaXRfb2ZmO1xcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jOjc4OlxcdFxcdHBhcnQgPSBuZXRmc19hZHZhbmNlX3dyaXRlKGNyZXEsIGNhY2hlLCBmcG9zICsgY2FjaGUtXFx1MDAzZXN1Ym1pdF9vZmYsXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtNzktXFx0XFx0XFx0XFx0XFx0ICAgY2FjaGUtXFx1MDAzZXN1Ym1pdF9sZW4sIHRvX2VvZik7XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTI2Mj12b2lkIG5ldGZzX2lzc3VlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0yNzktICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoyODA6c2l6ZV90IG5ldGZzX2FkdmFuY2Vfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0yODEtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0zMjI9c3RhdGljIGludCBuZXRmc193cml0ZV9mb2xpbyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNDk0LVxcdFxcdHN0cmVhbS1cXHUwMDNlc3VibWl0X2V4dGVuZGFibGVfdG8gPSBmc2l6ZSAtIHN0cmVhbS1cXHUwMDNlc3VibWl0X29mZjtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjQ5NTpcXHRcXHRwYXJ0ID0gbmV0ZnNfYWR2YW5jZV93cml0ZSh3cmVxLCBzdHJlYW0sIGZwb3MgKyBzdHJlYW0tXFx1MDAzZXN1Ym1pdF9vZmYsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy00OTYtXFx0XFx0XFx0XFx0XFx0ICAgc3RyZWFtLVxcdTAwM2VzdWJtaXRfbGVuLCB0b19lb2YpO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MTk9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTY0NC0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjY0NTppbnQgbmV0ZnNfYWR2YW5jZV93cml0ZXRocm91Z2goc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjQ2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3QgY29waWVkLCBib29sIHRvX3BhZ2VfZW5kLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz03MTY9c3RhdGljIGludCBuZXRmc193cml0ZV9mb2xpb19zaW5nbGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgwOC1cXHRcXHRzdHJlYW0tXFx1MDAzZXN1Ym1pdF9leHRlbmRhYmxlX3RvID0gZnNpemUgLSBzdHJlYW0tXFx1MDAzZXN1Ym1pdF9vZmY7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MDk6XFx0XFx0cGFydCA9IG5ldGZzX2FkdmFuY2Vfd3JpdGUod3JlcSwgc3RyZWFtLCBmcG9zICsgc3RyZWFtLVxcdTAwM2VzdWJtaXRfb2ZmLFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODEwLVxcdFxcdFxcdFxcdFxcdCAgIHN0cmVhbS1cXHUwMDNlc3VibWl0X2xlbiwgdG9fZW9mKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDQ6NTEuMjQyMjY3ODIyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5OTUzMDM2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBOZXR3b3JrIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UncmUgZGVhbGluZyB3aXRoIGEgZml4IGNvbmNlcm5pbmcgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2UgaW4gdGhlIGBuZXRmc2AgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBgbmV0ZnNfcHJlcGFyZV93cml0ZWAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBmdW5jdGlvbnMuIFRoZSBjb3JlIGlzc3VlIGlzIGEgbWlzc2luZyBOVUxMIGNoZWNrIGZvciB0aGUgYWxsb2NhdGlvbiB3aXRoaW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgLCB3aGljaCBjYW4gbGVhZCB0byBhIE5VTEwgYHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3RgIHRoYXQgdGhlIGNvZGUgZG9lc24ndCBoYW5kbGUuIFdlIGFyZSBkZWFsaW5nIHdpdGggYGZzL25ldGZzL2Agd2hpY2ggaXMgYSBrZXkgYXJlYSB0byBsb29rIGF0LlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoZSByZWxldmFudCBjYWxsIGNoYWlucy4gYG5ldGZzX2FkdmFuY2Vfd3JpdGVgIGlzIGEgcG9pbnQgdG8gbG9vayBhdCwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBuZXRmc193cml0ZV9mb2xpb2AgYW5kIGBuZXRmc193cml0ZV9mb2xpb19zaW5nbGVgLCB3aGljaCBhcmUgdWx0aW1hdGVseSByZWFjaGVkIHRocm91Z2ggYG5ldGZzX3dyaXRlcGFnZXNgIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIFRoZXJlZm9yZSwgdGhvc2UgbGF0dGVyIHR3byBmdW5jdGlvbnMsIGFsb25nIHdpdGggZnVuY3Rpb25zIGZyb20gdGhlIHdyaXRlIHBhdGgsIGFyZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIGFzIHRoZXkgcmVwcmVzZW50IHRoZSBoaWdoZXN0LWxldmVsIGNhbGwuIFRoZSBwYXRjaCBpdHNlbGYgaXMgcmVhY2hhYmxlIHRocm91Z2ggYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAsIHRodXMgdGhlIGxhc3QgdHdvIHN5bWJvbHMgYXJlIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIGZ1enouXG5cblRoaXMgZml4IGNsZWFybHkgaW1wYWN0cyBmdW5jdGlvbmFsaXR5LiBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIFwiV29ydGhGdXp6aW5nXCIgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBhIGNyYXNoIG9yIG1vcmUgc3VidGxlIGRhdGEgY29ycnVwdGlvbiwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHVuYnVmZmVyZWQgd3JpdGUgcGF0aC5cblxuSGVyZSdzIG15IHJlZmluZWQgbGlzdCBvZiBGb2N1c1N5bWJvbHM6XG4qICAgYG5ldGZzX2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYFxuKiAgIGBuZXRmc193cml0ZXBhZ2VzYFxuKiAgIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYFxuXG5BbmQsIGluIHRlcm1zIG9mIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBgQ0lGU2AsIGA5UF9GU2AsIGFuZCBgTkVUXzlQYCBhcmUgdGhlIG1vc3QgZGlyZWN0IHJvdXRlcyB0byBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZSBgTkVURlNfU1VQUE9SVGAgY29uZmlnIGlzIGEgbm8tZ28gZm9yIGRpcmVjdCBlbmFibGVtZW50LCBzbyB3ZSdsbCBzdGljayB3aXRoIGBDSUZTYCBhbmQgYDlQX0ZTYC4gSSd2ZSBtYWRlIHN1cmUgdG8gY2hlY2sgdGhlIGNvbmZpZydzIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhlIHJlbGV2YW50IG5ldHdvcmsgZmlsZXN5c3RlbSBwYXJ0cyBhcmUgYnVpbHQuXG5cbk9rYXksIEknbSByZWFkeSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE4MiwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDU6MDEuMjM3NTc0NTM2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxNDAzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJORVRfOVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc19maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBzdWJyZXF1ZXN0IGFsbG9jYXRpb25zIGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSBsaWJyYXJ5IChmcy9uZXRmcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAoZS5nLiwgdW5kZXIgbWVtb3J5IHByZXNzdXJlKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgd3JpdGUgcGF0aHMgKGxpa2UgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKSB3aGVuIHVzaW5nIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyBDSUZTIG9yIDlQLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJORVRfOVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc19maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBzdWJyZXF1ZXN0IGFsbG9jYXRpb25zIGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSBsaWJyYXJ5IChmcy9uZXRmcykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAoZS5nLiwgdW5kZXIgbWVtb3J5IHByZXNzdXJlKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgd3JpdGUgcGF0aHMgKGxpa2UgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKSB3aGVuIHVzaW5nIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyBDSUZTIG9yIDlQLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNTowMS4zMTI3MjA1NzVaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzIzNjYxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowNTowMS4zMTMyNzcyNTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzA3MTgwMzk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdGAgaXMgTlVMTCkuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzVhZmNhOGVjMWZiMDc1MGRiNmNhYTg1MzZlMmRiMzg5MzBjNDkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDM6MDM6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5pbmRleCBjMTZmYmFkMjg2YTE3Li41NjdiOTQ2YjdhNTY2IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbisrKyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5AQCAtMTEwLDYgKzExMCwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4gXHRcdGlmICghc3VicmVxKSB7XG4gXHRcdFx0bmV0ZnNfcHJlcGFyZV93cml0ZSh3cmVxLCBzdHJlYW0sIHdyZXEtXHUwMDNlc3RhcnQgKyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiBcdFx0XHRzdWJyZXEgPSBzdHJlYW0tXHUwMDNlY29uc3RydWN0O1xuK1x0XHRcdGlmICghc3VicmVxKSB7XG4rXHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gLUVOT01FTTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbiBcdFx0XHRzdHJlYW0tXHUwMDNlY29uc3RydWN0ID0gTlVMTDtcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5pbmRleCAyZDljZmNkNDM2NThmLi44NTFmNmY5M2FkNDVhIDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xuKysrIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xuQEAgLTE3MCw2ICsxNzAsOCBAQCB2b2lkIG5ldGZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG4gXHRcdHJvbGxpbmdfYnVmZmVyX21ha2Vfc3BhY2UoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIsIHdyZXEtXHUwMDNlZ2ZwKTtcbiBcbiBcdHN1YnJlcSA9IG5ldGZzX2FsbG9jX3N1YnJlcXVlc3Qod3JlcSk7XG4rXHRpZiAoIXN1YnJlcSlcbitcdFx0cmV0dXJuO1xuIFx0c3VicmVxLVx1MDAzZXNvdXJjZVx0XHQ9IHN0cmVhbS1cdTAwM2Vzb3VyY2U7XG4gXHRzdWJyZXEtXHUwMDNlc3RhcnRcdFx0PSBzdGFydDtcbiBcdHN1YnJlcS1cdTAwM2VzdHJlYW1fbnJcdD0gc3RyZWFtLVx1MDAzZXN0cmVhbV9ucjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjA1OjAxLjMxMzI3ODIyNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDcxNzc0MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgZnMvbmV0ZnNgIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIGZpeGluZyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgIGFuZCBgZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY2AuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBhZGRlZCBgTlVMTGAgY2hlY2tzIGFmdGVyIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBhbmQgYHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3RgIGNhbGxzLiBTbWFydCBtb3ZlLiBJIHNlZSB0aGUgY29kZTogaW4gYGRpcmVjdF93cml0ZS5jYCwgdGhleSdyZSBjaGVja2luZyBpZiBgc3RyZWFtLVx1MDAzZWNvbnN0cnVjdGAgaXMgYE5VTExgIGFmdGVyIGNhbGxpbmcgYG5ldGZzX3ByZXBhcmVfd3JpdGVgIGFuZCBhc3NpZ25pbmcgaXQuIFNpbWlsYXJseSwgaW4gYHdyaXRlX2lzc3VlLmNgLCB0aGVyZSdzIGEgY2hlY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgLiBUaGlzIGlzIHRleHRib29rIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy5cblxuVGhpcyBpcyBhbGwgYWJvdXQgcHJldmVudGluZyBjcmFzaGVzIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBjYW4gcmV0dXJuIGBOVUxMYCwgYW5kIHRoZSBwYXRjaCBub3cgZ3JhY2VmdWxseSBoYW5kbGVzIHRoYXQgc2NlbmFyaW8uIEJlZm9yZSwgaWYgYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIHJldHVybmVkIGBOVUxMYCwgd2UnZCBiZSBibGluZGx5IGRlcmVmZXJlbmNpbmcgdGhlIE5VTEwgcG9pbnRlciB3aGVuIGFzc2lnbmluZyB0byBgc3VicmVxYC4gQmFuZywga2VybmVsIHBhbmljLiBUaGlzIGZpeCBhZGRzIHRoZSBleHBsaWNpdCBgTlVMTGAgY2hlY2sgYmVmb3JlIHVzaW5nIHRoZSByZXR1cm4gdmFsdWUuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGl0J3MgY2xlYXI6IGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBpcyBhbGxvY2F0aW5nIGEgYG5ldGZzX2lvX3N1YnJlcXVlc3RgLiBBIGZhaWx1cmUgdGhlcmUgd2lsbCByZXR1cm4gTlVMTC4gU28gYHN1YnJlcS1cdTAwM2Vzb3VyY2UgPSBzdHJlYW0tXHUwMDNlc291cmNlO2Agd2lsbCBjcmFzaCBpZiBgc3VicmVxYCBpcyBOVUxMLiBJdCdzIGEgdGV4dGJvb2sgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBbmQgYmVjYXVzZSB3ZSdyZSBqdXN0IGNoZWNraW5nIGZvciBOVUxMIGFuZCBiYWlsaW5nIG91dCB3aXRoIGFuIGVycm9yLCB0aGVyZSdzIG5vIHdheSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGZpeCBmb3IgYSBrbm93biBpc3N1ZS5cblxuU28sIHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIGxpa2UgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4gd2lsbCBjYXRjaCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYXMgd2VsbCBhcyB0aGUgaW5pdGlhbCBjcmFzaC4gSSBkb24ndCBzZWUgYW55IHZhbHVlIGluIG5lZWRpbmcgS01TQU4gaGVyZS4gSXQncyBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLiBJdCdzIGEgcGxhaW4gb2xkLWZhc2hpb25lZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIG5vdyB0YWtlbiBjYXJlIG9mLlxuXG5JJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBoZXJlLiBUaGVyZWZvcmUsIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDgsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDU6MDguMzg1MDU3MzdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBieSBhZGRpbmcgY2hlY2tzIGZvciBhbGxvY2F0aW9uIGZhaWx1cmVzICh3aGVuIGBuZXRmc19hbGxvY19zdWJyZXF1ZXN0YCBvciBgc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3RgIGlzIE5VTEwpLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBjaGVja3MgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdoZW4gYG5ldGZzX2FsbG9jX3N1YnJlcXVlc3RgIG9yIGBzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdGAgaXMgTlVMTCkuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow65js2[1] Phase: Succeeded StartedAt: 2026-08-14 03:05:19 +0000 UTC FinishedAt: 2026-08-14 03:05:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 03:05:19 +0000 UTC FinishedAt: 2026-08-14 03:05:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2] Phase: Succeeded StartedAt: 2026-08-14 03:05:19 +0000 UTC FinishedAt: 2026-08-14 04:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 03:05:19 +0000 UTC FinishedAt: 2026-08-14 04:36:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 03:05:19 +0000 UTC FinishedAt: 2026-08-14 03:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 03:05:19 +0000 UTC FinishedAt: 2026-08-14 03:05:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow65js2/series-workflow65js2-convert-artifact-706293759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 03:05:29 +0000 UTC FinishedAt: 2026-08-14 03:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 03:05:29 +0000 UTC FinishedAt: 2026-08-14 03:21:54 +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:*8c9273d3-ca08-4b4a-b6cd-6f7826aaa12a,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-workflow65js2/series-workflow65js2-convert-artifact-706293759/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": "93a7983a-213f-45c8-bd1b-f1033c199de7", "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-workflow65js2/series-workflow65js2-build-action-2677017221/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 03:05:29 +0000 UTC FinishedAt: 2026-08-14 03:21:44 +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:*8c9273d3-ca08-4b4a-b6cd-6f7826aaa12a,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-workflow65js2/series-workflow65js2-convert-artifact-706293759/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": "93a7983a-213f-45c8-bd1b-f1033c199de7", "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-workflow65js2/series-workflow65js2-build-action-2677017221/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 03:21:54 +0000 UTC FinishedAt: 2026-08-14 03:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 03:21:54 +0000 UTC FinishedAt: 2026-08-14 03:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 03:21:54 +0000 UTC FinishedAt: 2026-08-14 03:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 03:21:54 +0000 UTC FinishedAt: 2026-08-14 03:21:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow65js2/series-workflow65js2-convert-artifact-2133578254/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 03:22:04 +0000 UTC FinishedAt: 2026-08-14 03:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 03:22:04 +0000 UTC FinishedAt: 2026-08-14 03:24:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*93a7983a-213f-45c8-bd1b-f1033c199de7,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-workflow65js2/series-workflow65js2-build-action-2677017221/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-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 03:24:25 +0000 UTC FinishedAt: 2026-08-14 03:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 03:24:25 +0000 UTC FinishedAt: 2026-08-14 03:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 03:24:25 +0000 UTC FinishedAt: 2026-08-14 03:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 03:24:25 +0000 UTC FinishedAt: 2026-08-14 03:40:55 +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:*8c9273d3-ca08-4b4a-b6cd-6f7826aaa12a,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-workflow65js2/series-workflow65js2-convert-artifact-2133578254/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": "ad7106dd-876f-460a-9ad8-afa2810213ec", "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-workflow65js2/series-workflow65js2-build-action-636954530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 03:24:25 +0000 UTC FinishedAt: 2026-08-14 03:40:45 +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:*8c9273d3-ca08-4b4a-b6cd-6f7826aaa12a,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-workflow65js2/series-workflow65js2-convert-artifact-2133578254/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": "ad7106dd-876f-460a-9ad8-afa2810213ec", "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-workflow65js2/series-workflow65js2-build-action-636954530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 03:40:55 +0000 UTC FinishedAt: 2026-08-14 03:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 03:40:55 +0000 UTC FinishedAt: 2026-08-14 03:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 03:40:55 +0000 UTC FinishedAt: 2026-08-14 03:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 03:40:55 +0000 UTC FinishedAt: 2026-08-14 03:42:51 +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:*ad7106dd-876f-460a-9ad8-afa2810213ec,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-workflow65js2/series-workflow65js2-build-action-636954530/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-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 03:43:01 +0000 UTC FinishedAt: 2026-08-14 04:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 03:43:01 +0000 UTC FinishedAt: 2026-08-14 04:36:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*93a7983a-213f-45c8-bd1b-f1033c199de7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ad7106dd-876f-460a-9ad8-afa2810213ec,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-workflow65js2/series-workflow65js2-build-action-2677017221/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-workflow65js2/series-workflow65js2-build-action-636954530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 03:43:01 +0000 UTC FinishedAt: 2026-08-14 03:43:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 03:43:01 +0000 UTC FinishedAt: 2026-08-14 03:43:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow65js2/series-workflow65js2-convert-artifact-479305779/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 03:43:01 +0000 UTC FinishedAt: 2026-08-14 03:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 03:43:01 +0000 UTC FinishedAt: 2026-08-14 03:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 03:43:01 +0000 UTC FinishedAt: 2026-08-14 03:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 03:43:12 +0000 UTC FinishedAt: 2026-08-14 04:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65js2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_file_write_iter","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","NET_9P"],"series_id":"fd92d3eb-4501-42c5-851b-e92280b6d1ec","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 03:43:12 +0000 UTC FinishedAt: 2026-08-14 04:35:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*93a7983a-213f-45c8-bd1b-f1033c199de7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ad7106dd-876f-460a-9ad8-afa2810213ec,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-workflow65js2/series-workflow65js2-build-action-2677017221/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-workflow65js2/series-workflow65js2-build-action-636954530/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-workflow65js2/series-workflow65js2-convert-artifact-479305779/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,}