Name: series-workflowr7f6g Phase: Succeeded StartedAt: 2026-09-04 05:08:31 +0000 UTC FinishedAt: 2026-09-04 09:09:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[0] Phase: Succeeded StartedAt: 2026-09-04 05:08:31 +0000 UTC FinishedAt: 2026-09-04 05:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 05:08:31 +0000 UTC FinishedAt: 2026-09-04 05:28:15 +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": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_DAX", "ZONE_DEVICE", "FS_DAX_PMD", "BLK_DEV_PMEM", "MEMORY_HOTREMOVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_DAX", "ZONE_DEVICE", "FS_DAX_PMD", "BLK_DEV_PMEM", "MEMORY_HOTREMOVE" ], "series_id": "d92cfc9b-85e2-4b0b-bb16-94b02f48c26b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "dax_folio_init", "dax_associate_entry", "dax_insert_entry", "dax_iomap_fault" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtGU19EQVhfUE1EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfUE1FTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF4X2ZvbGlvX2luaXQmIzM0OywKICAgICYjMzQ7ZGF4X2Fzc29jaWF0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYXhfaW5zZXJ0X2VudHJ5JiMzNDssCiAgICAmIzM0O2RheF9pb21hcF9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSByZWR1bmRhbnQgYElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KWAgY2FsbCBmcm9tIGBkYXhfZm9saW9faW5pdCgpYC4gVGhlIHByZWNlZGluZyBjYWxsIHRvIGBwcmVwX2NvbXBvdW5kX3BhZ2UoKWAgaW50ZXJuYWxseSBpbnZva2VzIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAsIHdoaWNoIGFscmVhZHkgaW5pdGlhbGl6ZXMgYF9kZWZlcnJlZF9saXN0YCB3aGVuIGBvcmRlciBcdTAwM2UgMWAuIFJlbW92aW5nIHRoaXMgcmVkdW5kYW50IGNhbGwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgYWZmZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBhbmQgaW50cm9kdWNlcyBubyBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRheF9mb2xpb19pbml0YCBpbiBgZnMvZGF4LmNgIHRvIHJlbW92ZSByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb2YgYGZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0YCB3aGVuIGNhbGxpbmcgYHByZXBfY29tcG91bmRfcGFnZWAuIERBWCBmb2xpbyBpbml0aWFsaXphdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgYXJlIHBhcnQgb2YgdGhlIGNvcmUgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGR1cmluZyBEQVggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg1N2M1MWU2NGI5ZWNjMTRkNWZmYWE4MDkzNmU5ZGFhZjgxNWE5OTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjI2OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcbmluZGV4IDZiYTUwMTQyZWViMmYuLmRhZDRlZmVhNzk2NDAgMTAwNjQ0XG4tLS0gYS9mcy9kYXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGF4LmNcbkBAIC00NjksOCAmIzQzOzQ2OSw2IEBAIHN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxuIFxuIFx0aWYgKG9yZGVyIFx1MDAzZSAwKSB7XG4gXHRcdHByZXBfY29tcG91bmRfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBvcmRlcik7XG4tXHRcdGlmIChvcmRlciBcdTAwM2UgMSlcbi1cdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG4gXHRcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbiBcdH1cbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfREFYJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0ZTX0RBWF9QTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9QTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfZm9saW9faW5pdCYjMzQ7LAogICAgJiMzNDtkYXhfYXNzb2NpYXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O2RheF9pbnNlcnRfZW50cnkmIzM0OywKICAgICYjMzQ7ZGF4X2lvbWFwX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkYXhfZm9saW9faW5pdGAgaW4gYGZzL2RheC5jYCB0byByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIGBmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdGAgd2hlbiBjYWxsaW5nIGBwcmVwX2NvbXBvdW5kX3BhZ2VgLiBEQVggZm9saW8gaW5pdGlhbGl6YXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBkdXJpbmcgREFYIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NTdjNTFlNjRiOWVjYzE0ZDVmZmFhODA5MzZlOWRhYWY4MTVhOTk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNToyNjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmMKaW5kZXggNmJhNTAxNDJlZWIyZi4uZGFkNGVmZWE3OTY0MCAxMDA2NDQKLS0tIGEvZnMvZGF4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGF4LmMKQEAgLTQ2OSw4ICYjNDM7NDY5LDYgQEAgc3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpCiAKIAlpZiAob3JkZXIgJmd0OyAwKSB7CiAJCXByZXBfY29tcG91bmRfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlLCBvcmRlcik7Ci0JCWlmIChvcmRlciAmZ3Q7IDEpCi0JCQlJTklUX0xJU1RfSEVBRCgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCk7CiAJCVdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTsKIAl9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQmIzM5O3Mgd29ydGggdGhyb3dpbmcgYXQgc3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRvIGEgcHJvcGVyIHJpc2sgYW5hbHlzaXMgZmlyc3Qg4oCTIG5vIHBvaW50IGluIHdhc3RpbmcgdGltZSBpZiB0aGlzIGlzIGxvdy1pbXBhY3QuIFRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgY29udGFpbmVkOyBpdCYjMzk7cyB3aXRoaW4gYGZzL2RheC5jYCwgc28gaXQgc2VlbXMgbGlrZSBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgREFYIChEaXJlY3QgQWNjZXNzKSBmaWxlc3lzdGVtIHN0dWZmLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBgZGF4X2ZvbGlvX2luaXRgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIHJlbW92YWwgb2YgYSBsaW5lLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHNldmVyaXR5LiBUaGlzIGxvb2tzIGxpa2UgYmVuaWduIG9yIFFBL3Rlc3RpbmcgcmVsYXRlZC4gSSB3aWxsIGJlIHN1cmUgdG8gZG91YmxlIGNoZWNrIHRoaXMuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MuIE5vIGhpZ2gtc2V2ZXJpdHkgYWN0aW9ucyBvciBhbnl0aGluZyBsaWtlIHRoYXQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGRheF9mb2xpb19pbml0YCBmdW5jdGlvbiBkb2VzIGFuZCB3aGVyZSBpdCYjMzk7cyB1c2VkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCB0aGlzIHBhdGNoIHdpdGhpbiBgZnMvZGF4LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgaXNzdWVzLiBJJiMzOTtsbCBhbHNvIGNoZWNrIHRoZSBjYWxsZXJzIHRvIHVuZGVyc3RhbmQgaG93IGBkYXhfZm9saW9faW5pdGAgaXMgY2FsbGVkIGFuZCB3aGF0IGl0JiMzOTtzIHVzZWQgZm9yLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFyb3VuZCBgZGF4X2ZvbGlvX2luaXRgIGlzIGNyaXRpY2FsLiBPbmNlIEkmIzM5O3ZlIGdvdCB0aGF0IHBpY3R1cmUsIEkgY2FuIHRoZW4gYXNzZXNzIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIHJlYXNvbmFibHkgdHJpZ2dlciBhbnkgaW50ZXJlc3RpbmcgY29kZSBwYXRocyBvciBlZGdlIGNhc2VzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB3aGljaCBtaWdodCBtZXJpdCBmdXp6aW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHRvdWNoZXMgbWVtb3J5IGFsbG9jYXRpb24sIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcywgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gQWZ0ZXIgdGhhdCwgSSYjMzk7bGwgZ28gdGhyb3VnaCBzdGFuZGFyZCB0b29sIGNhbGxzIHRvIHByb3ZpZGUgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ZvbGlvX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz00MzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRheF9mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9kYXguYy00NTctXG5mcy9kYXguYzo0NTg6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG5mcy9kYXguYy00NTkte1xuLS1cbmZzL2RheC5jPTQ3Nj1zdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy00OTUtXHRcdFdBUk5fT05fT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKTtcbmZzL2RheC5jOjQ5NjpcdFx0ZGF4X2ZvbGlvX2luaXQoZW50cnkpO1xuZnMvZGF4LmMtNDk3LVx0XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIGxpbmVzIDQ1MC01MjAgb2YgYGZzL2RheC5jYDoKCioqRGl2aW5nIGludG8gdGhlIERBWCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDQ1MCB0byA1MjAgb2YgYGZzL2RheC5jYC4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiwga25vd2luZyB0aGUgZmlsZSwgaXMgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBmYWlybHkgbG93LWxldmVsIERBWCAoRGlyZWN0IEFjY2Vzcykgb3BlcmF0aW9uIG9yIHBlcmhhcHMgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBwZXJzaXN0ZW50IG1lbW9yeS4gR2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGNvbnRleHQgd2l0aGluIHRoZSBmaWxlLCBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGJsb2NrIGRldmljZSBvciBwYWdlIGNhY2hlLCBidXQgc3BlY2lmaWNhbGx5IGluIHRoZSBvcHRpbWl6ZWQgY29udGV4dCB0aGF0IERBWCBhZmZvcmRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyByZWxhdGluZyB0byBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5IGFuZCBob3cgdGhlIGNvZGUgbWFuYWdlcyB0aGVzZSBkaXJlY3QgbWFwcGluZ3MuCgpJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc28gSSYjMzk7bGwgYmUgc2tpbW1pbmcgZm9yIGFueSBmdW5jdGlvbiBjYWxscyB0aGF0IGdpdmUgbWUgYSBjb250ZXh0LCBwZXJoYXBzIGEgZGF0YSBzdHJ1Y3R1cmUgbGlrZSBgc3RydWN0IGlub2RlYCwgYHN0cnVjdCBhZGRyZXNzX3NwYWNlYCwgb3IgYHN0cnVjdCBwYWdlYC4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGBwZm5fdGAgb3IgYHBtZF90YCBtYW5pcHVsYXRpb25zLCBhcyB0aGlzIHdvdWxkIHN1Z2dlc3QgZGlyZWN0IG1lbW9yeSBvcGVyYXRpb25zLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIGRlYWxpbmcgd2l0aCBEQVgtc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBjcmVhdGluZyBwZXJzaXN0ZW50IG1lbW9yeSBtYXBwaW5ncywgbWFuYWdpbmcgdGhlIGNhY2hlIGNvaGVyZW5jeSBpc3N1ZXMsIGFuZCBoYW5kbGluZyB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHNlZ21lbnQgaXMgYWJvdXQgc2V0dGluZyB1cCBvciBjbGVhbmluZyB1cCBkaXJlY3QgYWNjZXNzLCBvciBwZXJoYXBzIGhvdyB0aGUgc3lzdGVtIGludGVncmF0ZXMgd2l0aCB0aGUgdHJhZGl0aW9uYWwgcGFnZSBjYWNoZSBpbiBEQVggb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTtcbiA0NTE6XHRcbiA0NTI6XHRcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudCgoc3RydWN0IGZvbGlvICopcGFnZSkpO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0cmV0dXJuIHJlZjtcbiA0NTY6XHR9XG4gNDU3Olx0XG4gNDU4Olx0c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG4gNDU5Olx0e1xuIDQ2MDpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gNDYxOlx0XHRpbnQgb3JkZXIgPSBkYXhfZW50cnlfb3JkZXIoZW50cnkpO1xuIDQ2MjpcdFxuIDQ2MzpcdFx0LypcbiA0NjQ6XHRcdCAqIEZvbGlvIHNob3VsZCBoYXZlIGJlZW4gc3BsaXQgYmFjayB0byBvcmRlci0wIHBhZ2VzIGluXG4gNDY1Olx0XHQgKiBkYXhfZm9saW9fcHV0KCkgd2hlbiB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZWlyXG4gNDY2Olx0XHQgKiBmaW5hbCBtYXBwaW5nLlxuIDQ2NzpcdFx0ICovXG4gNDY4Olx0XHRXQVJOX09OX09OQ0UoZm9saW9fb3JkZXIoZm9saW8pKTtcbiA0Njk6XHRcbiA0NzA6XHRcdGlmIChvcmRlciBcdTAwM2UgMCkge1xuIDQ3MTpcdFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO1xuIDQ3MjpcdFx0XHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XG4gNDczOlx0XHR9XG4gNDc0Olx0fVxuIDQ3NTpcdFxuIDQ3NjpcdHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDQ3NzpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNDc4Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGJvb2wgc2hhcmVkKVxuIDQ3OTpcdHtcbiA0ODA6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XG4gNDgxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0ODI6XHRcbiA0ODM6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA0ODQ6XHRcdFx0cmV0dXJuO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MgXHUwMDI2IH4oc2l6ZSAtIDEpKTtcbiA0ODc6XHRcdGlmIChzaGFyZWQgXHUwMDI2XHUwMDI2IChmb2xpby1cdTAwM2VtYXBwaW5nIHx8IGRheF9mb2xpb19pc19zaGFyZWQoZm9saW8pKSkge1xuIDQ4ODpcdFx0XHRpZiAoZm9saW8tXHUwMDNlbWFwcGluZylcbiA0ODk6XHRcdFx0XHRkYXhfZm9saW9fbWFrZV9zaGFyZWQoZm9saW8pO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0XHRXQVJOX09OX09OQ0UoIWZvbGlvLVx1MDAzZXNoYXJlKTtcbiA0OTI6XHRcdFx0V0FSTl9PTl9PTkNFKGRheF9lbnRyeV9vcmRlcihlbnRyeSkgIT0gZm9saW9fb3JkZXIoZm9saW8pKTtcbiA0OTM6XHRcdFx0Zm9saW8tXHUwMDNlc2hhcmUmIzQzOyYjNDM7O1xuIDQ5NDpcdFx0fSBlbHNlIHtcbiA0OTU6XHRcdFx0V0FSTl9PTl9PTkNFKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuIDQ5NjpcdFx0XHRkYXhfZm9saW9faW5pdChlbnRyeSk7XG4gNDk3Olx0XHRcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0OTg6XHRcdFx0Zm9saW8tXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XG4gNDk5Olx0XHRcdGZvbGlvLVx1MDAzZWluZGV4ID0gaW5kZXg7XG4gNTAwOlx0XHR9XG4gNTAxOlx0fVxuIDUwMjpcdFxuIDUwMzpcdHN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDUwNDpcdFx0XHRcdFx0Ym9vbCB0cnVuYylcbiA1MDU6XHR7XG4gNTA2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MDk6XHRcdFx0cmV0dXJuO1xuIDUxMDpcdFxuIDUxMTpcdFx0ZGF4X2ZvbGlvX3B1dChmb2xpbyk7XG4gNTEyOlx0fVxuIDUxMzpcdFxuIDUxNDpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbiA1MTU6XHR7XG4gNTE2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA1MTc6XHRcbiA1MTg6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBjaGFuZ2VzOgoKKipBbmFseXppbmcgdGhlIEZvbGlvIERlZmVycmVkIExpc3QgUmVtb3ZhbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSByaXBwZWQgb3V0IGBJTklUX0xJU1RfSEVBRCgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCk7YC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSwgbGlrZWx5IHRpZWQgdG8gaG93IGZvbGlvcyBhcmUgYmVpbmcgbWFuYWdlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGltcGFjdCBvZiB0aGlzIHJlbW92YWwsIGFuZCB3aGF0IGl0IG1pZ2h0IGJlIHJlcGxhY2VkIHdpdGguIEkga25vdyBgX2RlZmVycmVkX2xpc3RgIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBkZWxheWVkIHByb2Nlc3Npbmcgb3IgcXVldWluZywgc28gSSBzdXNwZWN0IHRoaXMgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSByZWNsYW1hdGlvbiwgb3IgcGVyaGFwcyBldmVuIEkvTyBzY2hlZHVsaW5nLgoKTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hhdCBgcHJlcF9jb21wb3VuZF9wYWdlYCBpcyBkb2luZyBhbmQgd2h5IHRoZSBjb2RlIGlzIHRvdWNoaW5nIGl0LiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBjb21wb3VuZCBwYWdlcy4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBjb2RlIGlzIHJlbGF0ZWQgdG8gdGhlIGNyZWF0aW9uIG9yIGhhbmRsaW5nIG9mIGxhcmdlIG1lbW9yeSBwYWdlcy4KClRpbWUgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZS4gSSB3aWxsIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwX2NvbXBvdW5kX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTE4NDU9c3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTg4NS1cdGlmIChvcmRlcilcbm1tL2NvbXBhY3Rpb24uYzoxODg2Olx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2ZHN0LVx1MDAzZXBhZ2UsIG9yZGVyKTtcbm1tL2NvbXBhY3Rpb24uYy0xODg3LVx0Y2MtXHUwMDNlbnJfZnJlZXBhZ2VzIC09IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY0MT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzI3LVx0XHRpZiAobmV3X29yZGVyKSB7XG5tbS9odWdlX21lbW9yeS5jOjM3Mjg6XHRcdFx0cHJlcF9jb21wb3VuZF9wYWdlKG5ld19oZWFkLCBuZXdfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzI5LVx0XHRcdGZvbGlvX3NldF9sYXJnZV9ybWFwcGFibGUobmV3X2ZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmM9MzE3OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMzE4NC1cdC8qXG5tbS9odWdldGxiLmM6MzE4NTpcdCAqIFRoaXMgaXMgYW4gb3Blbi1jb2RlZCBwcmVwX2NvbXBvdW5kX3BhZ2UoKSB3aGVyZWJ5IHdlIGF2b2lkXG5tbS9odWdldGxiLmMtMzE4Ni1cdCAqIHdhbGtpbmcgcGFnZXMgdHdpY2UgYnkgaW5pdGlhbGl6aW5nL3ByZXBhcmluZyYjNDM7ZnJlZXppbmcgdGhlbSBpbiB0aGVcbi0tXG5tbS9odWdldGxiLmM9Mzk0Nj1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcbi0tXG5tbS9odWdldGxiLmMtMzk4Ni1cdFx0XHRjbGVhcl9jb21wb3VuZF9oZWFkKHBhZ2UpO1xubW0vaHVnZXRsYi5jOjM5ODc6XHRcdFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIGRzdC1cdTAwM2VvcmRlcik7XG5tbS9odWdldGxiLmMtMzk4OC1cbi0tXG5tbS9tZW1yZW1hcC5jPTQ4MT12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcbi0tXG5tbS9tZW1yZW1hcC5jLTUyNi1cdGlmIChvcmRlcilcbm1tL21lbXJlbWFwLmM6NTI3Olx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xubW0vbWVtcmVtYXAuYy01MjgtfVxuLS1cbm1tL21tX2luaXQuYz0xMDQ4PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuLS1cbm1tL21tX2luaXQuYy0xMDU4LVx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbm1tL21tX2luaXQuYzoxMDU5Olx0ICogcHJlcF9jb21wb3VuZF9wYWdlKCkgZG9lcyBub3QgdGFrZSBjYXJlIG9mIHRoYXQsIHNvIGluc3RlYWQgd2Vcbm1tL21tX2luaXQuYzoxMDYwOlx0ICogb3Blbi1jb2RlIHByZXBfY29tcG91bmRfcGFnZSgpIHNvIHdlIGNhbiB0YWtlIGNhcmUgb2YgaW5pdGlhbGl6aW5nXG5tbS9tbV9pbml0LmMtMTA2MS1cdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbi0tXG5tbS9wYWdlX2FsbG9jLmM9Njc5PXN0YXRpYyBpbmxpbmUgYm9vbCBwY3BfYWxsb3dlZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcwMS1cbm1tL3BhZ2VfYWxsb2MuYzo3MDI6dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy03MDMte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xODc2PXN0YXRpYyB2b2lkIHByZXBfbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xODgxLVx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiAoZ2ZwX2ZsYWdzIFx1MDAyNiBfX0dGUF9DT01QKSlcbm1tL3BhZ2VfYWxsb2MuYzoxODgyOlx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xubW0vcGFnZV9hbGxvYy5jLTE4ODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGNvZGUgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBjb21wb3VuZCBwYWdlcywgc3BlY2lmaWNhbGx5IHRoZSBwcmUtaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBgcHJlcF9jb21wb3VuZF9wYWdlYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYF9kZWZlcnJlZF9saXN0YCBvciBpZiBpdCYjMzk7cyBkZWxlZ2F0aW5nIHRoYXQgdG8gc29tZXRoaW5nIGVsc2UsIGxpa2UgYGZvbGlvX3ByZXBfbGFyZ2Vfcm1hcHBhYmxlYCBvciBhIHNpbXBsZSBgSU5JVF9MSVNUX0hFQURgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHByZXBfY29tcG91bmRfcGFnZWAgdG8gc2VlIGhvdyB0aG9zZSBmaWVsZHMgYXJlIGJlaW5nIGhhbmRsZWQuIEkga25vdyB0aGlzIGFyZWEgY2FuIGhhdmUgc3VidGxlIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0ICovXG4gNzAxOlx0XG4gNzAyOlx0dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiA3MDM6XHR7XG4gNzA0Olx0XHRpbnQgaTtcbiA3MDU6XHRcdGludCBucl9wYWdlcyA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDcwNjpcdFxuIDcwNzpcdFx0X19TZXRQYWdlSGVhZChwYWdlKTtcbiA3MDg6XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOylcbiA3MDk6XHRcdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UgJiM0MzsgaSwgcGFnZSwgb3JkZXIpO1xuIDcxMDpcdFxuIDcxMTpcdFx0cHJlcF9jb21wb3VuZF9oZWFkKHBhZ2UsIG9yZGVyKTtcbiA3MTI6XHR9XG4gNzEzOlx0XG4gNzE0Olx0c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIDcxNTpcdHtcbiA3MTY6XHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xuIDcxNzpcdFx0X19TZXRQYWdlQnVkZHkocGFnZSk7XG4gNzE4Olx0fVxuIDcxOTpcdFxuIDcyMDpcdCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuIDcyMTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxuIDcyMjpcdHtcbiA3MjM6XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMgPSBjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbDtcbiA3MjQ6XHRcbiA3MjU6XHRcdHJldHVybiB1bmxpa2VseShjYXBjKSBcdTAwMjZcdTAwMjZcbiA3MjY6XHRcdFx0IShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjZcbiA3Mjc6XHRcdFx0IWNhcGMtXHUwMDNlcGFnZSBcdTAwMjZcdTAwMjZcbiA3Mjg6XHRcdFx0Y2FwYy1cdTAwM2V6b25lID09IHpvbmUgPyBjYXBjIDogTlVMTDtcbiA3Mjk6XHR9XG4gNzMwOlx0XG4gNzMxOlx0c3RhdGljIGlubGluZSBib29sXG4gNzMyOlx0Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuIDczMzpcdFx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbiA3MzQ6XHR7XG4gNzM1Olx0XHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiA3MzY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczNzpcdFxuIDczODpcdFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbiA3Mzk6XHRcdGlmIChpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRob3VnaHQgcHJvY2Vzcy4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvbXBvdW5kIEhlYWQ6IE15IEFuYWx5dGljYWwgSm91cm5leSoqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYHByZXBfY29tcG91bmRfaGVhZGAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0byBkaXNzZWN0IHRoYXQgcGhyYXNlLiBJIGtub3cgdGhpcyBpcyBhIHNwZWNpZmljIGNvbXBvbmVudCwgbGlrZWx5IHdpdGhpbiBhIGxhcmdlciBOTFAgcGlwZWxpbmUgb3Iga25vd2xlZGdlIHJlcHJlc2VudGF0aW9uIHN5c3RlbS4gJiMzNDtQcmVwJiMzNDsgc3VnZ2VzdHMgaXQmIzM5O3MgYSBwcmVwcm9jZXNzb3IsIGEgbW9kdWxlIGRlc2lnbmVkIHRvIHByZXBhcmUgc29tZSBpbnB1dC4gJiMzNDtDb21wb3VuZCBoZWFkJiMzNDsuLi4gdGhhdCYjMzk7cyB0aGUgaW50ZXJlc3RpbmcgcGFydC4gTXkgaW1tZWRpYXRlIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGlzIGhhbmRsaW5nIGNvbXBvdW5kIHN0cnVjdHVyZXMsIGxpa2VseSBpbiBhIGxpbmd1aXN0aWMgY29udGV4dC4gVGhpbmsgbm91biBwaHJhc2VzIGxpa2UgJiMzNDtyZWQgYXBwbGUgdHJlZSYjMzQ7IG9yIHBlcmhhcHMgbW9yZSBjb21wbGV4IGNvbnN0cnVjdGlvbnMgaW52b2x2aW5nIHByZXBvc2l0aW9ucy4KCkkmIzM5O20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvc3NpYmxlIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBpZGVudGlmeWluZyB0aGUgaGVhZCBub3VuIHdpdGhpbiBhIGNvbXBvdW5kPyBJcyBpdCBicmVha2luZyBkb3duIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgaGVhZCBhbmQgdGhlIG1vZGlmeWluZyBlbGVtZW50cz8gQXJlIHRoZXJlIGRpZmZlcmVudCBhcHByb2FjaGVzIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjb21wb3VuZCDigJMgaXMgaXQgZGVhbGluZyB3aXRoIHB1cmUgbm91biBjb21wb3VuZHMsIG9yIHBvc3NpYmx5IG1vcmUgdmVyc2F0aWxlIGNvbnN0cnVjdGlvbnMgd2l0aCBhZGplY3RpdmFsIG1vZGlmaWNhdGlvbnM/CgpNeSBleHBlcmllbmNlIGRpY3RhdGVzIHRoYXQgdGhlICYjMzQ7aGVhZCYjMzQ7IGNvdWxkIGJlIGRldGVybWluZWQgYnkgdmFyaW91cyBsaW5ndWlzdGljIHByaW5jaXBsZXMsIG1heWJlIHN5bnRhY3RpYyBkb21pbmFuY2UsIHNlbWFudGljIGltcG9ydGFuY2UsIG9yIGV2ZW4gc3RhdGlzdGljYWwgZnJlcXVlbmN5LiBUaGUgaW1wbGVtZW50YXRpb24gbWlnaHQgaW52b2x2ZSBhIGxvb2t1cCB0YWJsZSBvZiBjb21tb24gY29tcG91bmQgcGF0dGVybnMsIGEgcnVsZS1iYXNlZCBzeXN0ZW0sIG9yIGV2ZW4gc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCB1c2luZyBtYWNoaW5lIGxlYXJuaW5nIHRvIGxlYXJuIGhlYWQtbW9kaWZpZXIgcmVsYXRpb25zaGlwcy4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGFtYmlndWl0eSDigJMgY29tcG91bmQgaGVhZHMgY2FuIGJlIHN1cnByaXNpbmdseSB0cmlja3khIE15IGZpZWxkIGlzIGZ1bGwgb2Ygc3VjaCBlZGdlIGNhc2VzLCBob3cgaXMgdGhpcyBoYW5kbGluZyB0aGVtPyBEb2VzIGl0IGFzc2lnbiBhIHByb2JhYmlsaXR5IG9yIGNvbmZpZGVuY2UgdG8gaXRzIGhlYWQgYXNzaWdubWVudHM/CgpUaGUgcGhyYXNlIGl0c2VsZiBzdWdnZXN0cyBhIG1vZHVsYXIgZGVzaWduOyBJIGFtIGV4cGVjdGluZyB0aGlzIHRvIGludGVncmF0ZSB3aXRoIGEgd2lkZXIgcGlwZWxpbmUg4oCTIGl0IHByb2JhYmx5IHRha2VzIGEgc2VudGVuY2Ugb3IgcGhyYXNlIGFzIGlucHV0LCBwYXJzZXMgaXQsIGlkZW50aWZpZXMgdGhlIGNvbXBvdW5kIHN0cnVjdHVyZSwgYW5kIHRoZW4gcHJvY2Vzc2VzIGl0IGFjY29yZGluZ2x5LiBUaGUgb3V0cHV0IHdpbGwgbGlrZWx5IGJlIGEgbW9kaWZpZWQgcmVwcmVzZW50YXRpb24sIHBlcmhhcHMgYSBkZXBlbmRlbmN5IHBhcnNlLCBhIHNlbWFudGljIHJvbGUgYXNzaWdubWVudCwgb3IgYSBmZWF0dXJlIHZlY3Rvci4gV2hhdCB0eXBlIG9mIG91dHB1dCBpcyBvZiBwcmltYXJ5IGltcG9ydGFuY2UgaW4gaW5mb3JtaW5nIHRoZSBuZXh0IHN0ZXBzIG9mIHRoaXMgcGlwZWxpbmUuIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IHRoZSBhcHBsaWNhdGlvbiBpcy4gSXMgdGhpcyBmb3IgaW5mb3JtYXRpb24gcmV0cmlldmFsLCBtYWNoaW5lIHRyYW5zbGF0aW9uLCBvciB0ZXh0IHN1bW1hcml6YXRpb24/IFRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGVuZCB0YXNrIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgaG93ICYjMzQ7Z29vZCYjMzQ7IHRoaXMgcHJlcHJvY2Vzc29yIG5lZWRzIHRvIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwX2NvbXBvdW5kX2hlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTMxNzg9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTMxOTMtXHRodWdldGxiX2ZvbGlvX2luaXRfdGFpbF92bWVtbWFwKGZvbGlvLCBoLCAxLCBucl9wYWdlcyk7XG5tbS9odWdldGxiLmM6MzE5NDpcdHByZXBfY29tcG91bmRfaGVhZChcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBodWdlX3BhZ2Vfb3JkZXIoaCkpO1xubW0vaHVnZXRsYi5jLTMxOTUtfVxuLS1cbm1tL2ludGVybmFsLmg9NzY0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpwYWdlX3JtYXBwYWJsZV9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9pbnRlcm5hbC5oLTc3Mi1cbm1tL2ludGVybmFsLmg6NzczOnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL2ludGVybmFsLmgtNzc0LXtcbi0tXG5tbS9tbV9pbml0LmM9MTA0OD1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTA3MC1cdH1cbm1tL21tX2luaXQuYzoxMDcxOlx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbm1tL21tX2luaXQuYy0xMDcyLX1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzAyPXZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxMC1cbm1tL3BhZ2VfYWxsb2MuYzo3MTE6XHRwcmVwX2NvbXBvdW5kX2hlYWQocGFnZSwgb3JkZXIpO1xubW0vcGFnZV9hbGxvYy5jLTcxMi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgbW0vaW50ZXJuYWwuaGAgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGhhbmRsaW5nIGNvbXBvdW5kIGhlYWRzLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyBsaXZlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHByZXBfY29tcG91bmRfaGVhZGAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSBrbm93IGl0JiMzOTtzIGluIGBtbS9pbnRlcm5hbC5oYC4gSSYjMzk7bGwgd2FudCB0byByZXZpZXcgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgaW50ZXJuYWxseS4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IGl0cyBvdmVyYWxsIHB1cnBvc2UgaXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0b3IuIEFueSBpbnRlcmFjdGlvbnMgd2l0aCBidWRkeSBhbGxvY2F0aW9ucywgcGFnZSBzdHJ1Y3R1cmVzLCBvciB0aGUgc2xhYiBhbGxvY2F0b3IgbmVlZCBjYXJlZnVsIGV4YW1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3MDpcdFx0cmV0dXJuIGZvbGlvO1xuIDc3MTpcdH1cbiA3NzI6XHRcbiA3NzM6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF9oZWFkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gNzc0Olx0e1xuIDc3NTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlO1xuIDc3NjpcdFxuIDc3NzpcdFx0Zm9saW9fc2V0X29yZGVyKGZvbGlvLCBvcmRlcik7XG4gNzc4Olx0XHRhdG9taWNfc2V0KFx1MDAyNmZvbGlvLVx1MDAzZV9sYXJnZV9tYXBjb3VudCwgLTEpO1xuIDc3OTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BBR0VfTUFQQ09VTlQpKVxuIDc4MDpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmZvbGlvLVx1MDAzZV9ucl9wYWdlc19tYXBwZWQsIDApO1xuIDc4MTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01NX0lEKSkge1xuIDc4MjpcdFx0XHRmb2xpby1cdTAwM2VfbW1faWRzID0gMDtcbiA3ODM6XHRcdFx0Zm9saW8tXHUwMDNlX21tX2lkX21hcGNvdW50WzBdID0gLTE7XG4gNzg0Olx0XHRcdGZvbGlvLVx1MDAzZV9tbV9pZF9tYXBjb3VudFsxXSA9IC0xO1xuIDc4NTpcdFx0fVxuIDc4NjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSB8fCBvcmRlciBcdTAwM2UgMSkge1xuIDc4NzpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmZvbGlvLVx1MDAzZV9waW5jb3VudCwgMCk7XG4gNzg4Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2VudGlyZV9tYXBjb3VudCwgLTEpO1xuIDc4OTpcdFx0fVxuIDc5MDpcdFx0aWYgKG9yZGVyIFx1MDAzZSAxKVxuIDc5MTpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG4gNzkyOlx0fVxuIDc5MzpcdFxuIDc5NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NDgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVnIGFuZCBJdHMgRnV6emluZyBSZWxldmFuY2UqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgSSYjMzk7dmUgZm91bmQgYSByZWR1bmRhbmN5LCBwb3RlbnRpYWxseSBhIGJ1Zy4gSW4gYGZzL2RheC5jYCwgdGhlIGNvZGUgY2hlY2tzIGBpZiAob3JkZXIgJmd0OyAwKWAgYW5kIGluc2lkZSB0aGlzIGNvbmRpdGlvbiBjYWxscyBgcHJlcF9jb21wb3VuZF9wYWdlKCZhbXA7Zm9saW8tJmd0O3BhZ2UsIG9yZGVyKWAuIE5vdywgYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGNhbGxzIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAsIGFuZCB0aGUgYHByZXBfY29tcG91bmRfaGVhZCgpYCBmdW5jdGlvbiBoYXMgYW4gYGlmIChvcmRlciAmZ3Q7IDEpYCBjaGVjaywgd2hpY2ggdGhlbiBpbml0aWFsaXplcyB0aGUgYF9kZWZlcnJlZF9saXN0YC4gVGhlIGlzc3VlIGlzLCB0aGUgb3V0ZXIgY29kZSBibG9jayBpbiBgZnMvZGF4LmNgIGFsc28gaGFzIGFuIGBpZiAob3JkZXIgJmd0OyAxKWAgd2hpY2ggY2FsbHMgYElOSVRfTElTVF9IRUFEKCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KWAhIEl0JiMzOTtzIHJlZHVuZGFudCBzaW5jZSB0aGUgaW5uZXIgZnVuY3Rpb24gY2FsbCBhbHJlYWR5IHRha2VzIGNhcmUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHdoZW4gYG9yZGVyICZndDsgMWAuIFRoaXMgY291bGQgYmUgYSBoYXJtbGVzcyBkdXBsaWNhdGlvbiwgb3IgaXQgY291bGQgaW5kaWNhdGUgc29tZXRoaW5nIG1vcmUgcHJvYmxlbWF0aWMuCgpOb3csIHRoZSBjb3JlIG9mIG15IHRoaW5raW5nIHJldm9sdmVzIGFyb3VuZCB3aGV0aGVyIHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkLiBBY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBjb25maXJtOgoKMS4gICoqSXMgdGhpcyBjb2RlIGFjdHVhbGx5IHJlYWNoYWJsZT8qKiBZZXMsIGBmcy9kYXguY2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEl0JiMzOTtzIGNvcmUga2VybmVsIGZpbGVzeXN0ZW0gY29kZSByZWxhdGVkIHRvIERBWCwgd2hpY2ggaXMgdXNlZCBmb3IgYWNjZXNzaW5nIHBlcnNpc3RlbnQgbWVtb3J5LiBTeXN0ZW1zIGxpa2UgZXh0NCBvciB4ZnMgd2l0aCBEQVgsIG9yIGV2ZW4gZW11bGF0ZWQgcG1lbSBkZXZpY2VzLCB3aWxsIGV4ZXJjaXNlIHRoaXMgY29kZS4KCjIuICAqKklzIGl0IGEgY29yZSBzdWJzeXN0ZW0/KiogWWVzLCBEQVggZGVhbHMgd2l0aCBmaWxlc3lzdGVtcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGJvdGggb2Ygd2hpY2ggYXJlIGNyaXRpY2FsIGNvcmUgc3Vic3lzdGVtcy4KCjMuICAqKklzIGl0IHJlZmFjdG9yZWQ/KiogWWVzLCB0aGlzIGlzIGEgY29kZSBjbGVhbnVwL3JlZmFjdG9yaW5nL29wdGltaXphdGlvbiBiZWNhdXNlIG9mIHRoZSBkdXBsaWNhdGlvbi4KClRoZXJlZm9yZSwgYWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSBkZWZpbmVkIGluIFNlY3Rpb25zIDEsIDIsIGFuZCAzLCB0aGlzIGNoYW5nZSAqZGVmaW5pdGVseSogbWVldHMgdGhlICYjMzQ7V29ydGhGdXp6aW5nID0gdHJ1ZSYjMzQ7IGNyaXRlcmlhLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIGluIGEgY29yZSBzdWJzeXN0ZW0uIFJlZmFjdG9yaW5ncywgZXNwZWNpYWxseSB0aG9zZSB0b3VjaGluZyBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93LCB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgc2VtYW50aWMgc2hpZnRzIG9yIGxhdGVudCBidWdzLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IHRoZSBndWlkZWxpbmVzIGFyZSBjYXV0aW9uaW5nIGFnYWluc3QhCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGgsIHNwZWNpZmljYWxseSB0aGUgcmVxdWlyZW1lbnQgZm9yIGBmcy9kYXguY2AsIGBkYXhfZm9saW9faW5pdGAsIGFuZCBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAuIEkgd2lsbCBsb29rIGludG8gdGhlIGBmcy9NYWtlZmlsZWAgYW5kIGBmcy9LY29uZmlnYCBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0zMD1vYmotJChDT05GSUdfQUlPKSAgICAgICAgICAgICAgICYjNDM7PSBhaW8ub1xuZnMvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0ZTX0RBWClcdFx0JiM0Mzs9IGRheC5vXG5mcy9NYWtlZmlsZS0zMi1vYmotJChDT05GSUdfRlNfRU5DUllQVElPTilcdCYjNDM7PSBjcnlwdG8vXG4tLVxuZnMvZnVzZS9NYWtlZmlsZT0xNj1mdXNlLXkgJiM0Mzs9IGlvbW9kZS5vXG5mcy9mdXNlL01ha2VmaWxlOjE3OmZ1c2UtJChDT05GSUdfRlVTRV9EQVgpICYjNDM7PSBkYXgub1xuZnMvZnVzZS9NYWtlZmlsZS0xOC1mdXNlLSQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpICYjNDM7PSBwYXNzdGhyb3VnaC5vIGJhY2tpbmcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE1OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBoYXBwZW5lZDoKCioqRXhhbWluaW5nIHRoZSBEQVggQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCBgQ09ORklHX0ZTX0RBWGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UgY29kZSBhbmQgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGZzL0tjb25maWdgLCBvciB3aGVyZXZlciB0aGUgZmlsZSBpcyB0aGF0IGhvdXNlcyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGNoZWNrIGZvciBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU19EQVhcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01Nj1lbmRpZiAjIEJMT0NLXG5mcy9LY29uZmlnLTU3LVxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXG5mcy9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24sIGFuZCBteSBndXQgdGVsbHMgbWUgYGZzL0tjb25maWdgIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTguIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciBmaWxlIHN5c3RlbSBmZWF0dXJlcywgb3IgYXQgbGVhc3QgYSBrZXkgc2VjdGlvbiByZWxhdGVkIHRvIHRoZW0sIHdpbGwgYmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBjb25maWd1cmVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgbG9naWMgaXMgc3RydWN0dXJlZC4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgc25pcHBldCB3aWxsIHByb3ZpZGUgc29tZSBjbGFyaXR5IG9uIHRoZSBicm9hZGVyIGRlc2lnbiBkZWNpc2lvbnMgaW4gcGxheSwgYW5kIHNoZWQgbGlnaHQgb24gdGhlIHBhcnRpY3VsYXIgZmVhdHVyZSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFRoZSBwbGFuIGlzIHRvIGdldCBhbiBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIHdoZXRoZXIgSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGluY2x1ZGUgcGF0aHMsIG9yIGlmIHRoZSByZWxldmFudCBiaXRzIGFyZSBkZWZpbmVkIHJpZ2h0IHRoZXJlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU1Olx0XG4gIDU2Olx0ZW5kaWYgIyBCTE9DS1xuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBGU19EQVhcbiAgNTk6XHRcdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIE1NVVxuICA2MTpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuICA2MjpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gIDYzOlx0XHRzZWxlY3QgREFYXG4gIDY0Olx0XHRoZWxwXG4gIDY1Olx0XHQgIERpcmVjdCBBY2Nlc3MgKERBWCkgY2FuIGJlIHVzZWQgb24gbWVtb3J5LWJhY2tlZCBibG9jayBkZXZpY2VzLlxuICA2NjpcdFx0ICBJZiB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnRzIERBWCBhbmQgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgREFYLFxuICA2NzpcdFx0ICB0aGVuIHlvdSBjYW4gYXZvaWQgdXNpbmcgdGhlIHBhZ2VjYWNoZSB0byBidWZmZXIgSS9Pcy4gIFR1cm5pbmdcbiAgNjg6XHRcdCAgb24gdGhpcyBvcHRpb24gd2lsbCBjb21waWxlIGluIHN1cHBvcnQgZm9yIERBWC5cbiAgNjk6XHRcbiAgNzA6XHRcdCAgRm9yIGEgREFYIGRldmljZSB0byBzdXBwb3J0IGZpbGUgc3lzdGVtIGFjY2VzcyBpdCBuZWVkcyB0byBoYXZlXG4gIDcxOlx0XHQgIHN0cnVjdCBwYWdlcy4gIEZvciB0aGUgbmZpdCBiYXNlZCBOVkRJTU1zIHRoaXMgY2FuIGJlIGVuYWJsZWRcbiAgNzI6XHRcdCAgdXNpbmcgdGhlIG5kY3RsIHV0aWxpdHk6XG4gIDczOlx0XG4gIDc0Olx0XHRcdCMgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtLWZvcmNlIC0tcmVjb25maWc9bmFtZXNwYWNlMC4wIFxcXG4gIDc1Olx0XHRcdFx0LS1tb2RlPWZzZGF4IC0tbWFwPW1lbVxuICA3NjpcdFxuICA3NzpcdFx0ICBTZWUgdGhlICYjMzk7Y3JlYXRlLW5hbWVzcGFjZSYjMzk7IG1hbiBwYWdlIGZvciBkZXRhaWxzIG9uIHRoZSBvdmVyaGVhZCBvZlxuICA3ODpcdFx0ICAtLW1hcD1tZW06XG4gIDc5Olx0XHQgIGh0dHBzOi8vZG9jcy5wbWVtLmlvL25kY3RsLXVzZXItZ3VpZGUvbmRjdGwtbWFuLXBhZ2VzL25kY3RsLWNyZWF0ZS1uYW1lc3BhY2VcbiAgODA6XHRcbiAgODE6XHRcdCAgRm9yIG5kY3RsIHRvIHdvcmsgQ09ORklHX0RFVl9EQVggbmVlZHMgdG8gYmUgZW5hYmxlZCBhcyB3ZWxsLiBGb3IgbW9zdFxuICA4MjpcdFx0ICBmaWxlIHN5c3RlbXMgREFYIHN1cHBvcnQgbmVlZHMgdG8gYmUgbWFudWFsbHkgZW5hYmxlZCBnbG9iYWxseSBvclxuICA4MzpcdFx0ICBwZXItaW5vZGUgdXNpbmcgYSBtb3VudCBvcHRpb24gYXMgd2VsbC4gIFNlZSB0aGUgZmlsZSBkb2N1bWVudGF0aW9uIGluXG4gIDg0Olx0XHQgIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGF4LnJzdCBmb3IgZGV0YWlscy5cbiAgODU6XHRcbiAgODY6XHRcdCAgSWYgeW91IGRvIG5vdCBoYXZlIGEgYmxvY2sgZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGlzLFxuICA4NzpcdFx0ICBvciBpZiB1bnN1cmUsIHNheSBOLiAgU2F5aW5nIFkgd2lsbCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsXG4gIDg4Olx0XHQgIGJ5IGFib3V0IDVrQi5cbiAgODk6XHRcbiAgOTA6XHRjb25maWcgRlNfREFYX1BNRFxuICA5MTpcdFx0Ym9vbFxuICA5MjpcdFx0ZGVmYXVsdCBGU19EQVhcbiAgOTM6XHRcdGRlcGVuZHMgb24gRlNfREFYXG4gIDk0Olx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgRlNfREFYKioKClJpZ2h0LCBzbyBgRlNfREFYYCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGRlcGVuZGVudCBvbiBgWk9ORV9ERVZJQ0VgIGFuZCBgTU1VYC4gU3RyYWlnaHRhd2F5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgdGhlIHJvYWRtYXAuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIGBNTVVgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBrZXkgcmlnaHQgbm93LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCAqdGhhdCogZGVwZW5kcyBvbiB0byBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuCgpUaGVyZWZvcmUsIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IGBaT05FX0RFVklDRWAgaXRzZWxmIGlzIGNvbnRpbmdlbnQgdXBvbi4gVGhhdCB3aWxsIGhlbHAgbWUgdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGNoYWluIGFuZCB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGltcGxpY2F0aW9ucyBmb3IgYEZTX0RBWGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjA9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjQtXG5tbS9LY29uZmlnOjEyMjU6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjYtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBiZXR0ZXIsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHNlZW4gaXQgZGVmaW5lZCBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBzZWVtIHRvIHJlbWVtYmVyIGl0IGFyb3VuZCBsaW5lIDEyMjUsIGdpdmUgb3IgdGFrZS4gVGltZSB0byBqdW1wIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgaG93IHRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgaGVscCB0ZXh0cyBJIGNhbiBnbGVhbi4gSXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIHlvdSYjMzk7cmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIG9mIGEgcGFydGljdWxhciBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBvcHRpb25zLCBhbmQgcGVyaGFwcyBzcG90IGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHR5cGljYWwgZm9ybWF0IGhlcmU6IGEgYGNvbmZpZ2Aga2V5d29yZCwgYSB0eXBlIGRlZmluaXRpb24gKGJvb2wsIHRyaXN0YXRlLCBldGMuKSwgdGhlIGhlbHAgdGV4dCwgYW5kIGxpa2VseSBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBXaXRoIGEgYml0IG9mIGx1Y2ssIHRoZSBmaWxlIGNvbW1lbnRzIHdpbGwgYmUgdXAtdG8tZGF0ZSBhbmQgcHJvdmlkZSBzb21lIHVzZWZ1bCBjb250ZXh0LiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIyMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjIyOlx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMjM6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIyNDpcdFxuMTIyNTpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyNjpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjk6XHRcbjEyMzA6XHRcdGhlbHBcbjEyMzE6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMzI6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyMzM6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjM0Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTIzNTpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjM2Olx0XG4xMjM3Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyMzg6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTIzOTpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjQwOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI0MTpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNDI6XHRcbjEyNDM6XHQjXG4xMjQ0Olx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXG4xMjQ1Olx0IyB0YWJsZXMuXG4xMjQ2Olx0I1xuMTI0NzpcdGNvbmZpZyBITU1fTUlSUk9SXG4xMjQ4Olx0XHRib29sXG4xMjQ5Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTI1MDpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMTI1MTpcdFxuMTI1MjpcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbjEyNTM6XHRcdGJvb2xcbjEyNTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gREFYIGFuZCBQZXJzaXN0ZW50IE1lbW9yeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBEQVggd29ya3MsIGFuZCBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIERBWCBhbmQgcGVyc2lzdGVudCBtZW1vcnkuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBwaWVjZXMgb2YgdGhpcyBwdXp6bGUuIEkmIzM5O20gc2VlaW5nIGEgZmV3IGltcG9ydGFudCBjb25jZXB0cyBqdW1wIG91dDogYEZTX0RBWGAsIGBaT05FX0RFVklDRWAsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIHNwZWNpZmljIGludGVycGxheSB3aXRoIHBlcnNpc3RlbnQgbWVtb3J5IHdpdGggYEJMS19ERVZfUE1FTWAgYW5kIHRoZSBgRlNfREFYX1BNRGAgc3R1ZmYuCgpUbyByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgYGRheF9hc3NvY2lhdGVfZW50cnlgIGZ1bmN0aW9uIGluIGBmcy9kYXguY2AgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4uIEkgd2FudCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBpdCwgYW5kIHdoZXRoZXIgdGhvc2UgY2FsbGVycyBhcmUgc3RhdGljIG9yIG5vbi1zdGF0aWMgYmVjYXVzZSB0aGUgY2FsbGVycyB3aWxsIGJlIGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIG9wZXJhdGlvbiBhbmQgd2lsbCBzaG93IHRoZSB3YXlzIHRoZSBrZXJuZWwgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gRm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9scyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHRoZXNlIHBlcnNpc3RlbnQgbWVtb3J5IGRldmljZXMgd2l0aGluIHRoZSBEQVggZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXhfYXNzb2NpYXRlX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGF4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxuLS1cbmZzL2RheC5jLTQ3NS1cbmZzL2RheC5jOjQ3NjpzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2RheC5jLTQ3Ny1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL2RheC5jPTEwNzc9c3RhdGljIHZvaWQgKmRheF9pbnNlcnRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTExMDUtXHRcdGRheF9kaXNhc3NvY2lhdGVfZW50cnkoZW50cnksIG1hcHBpbmcsIGZhbHNlKTtcbmZzL2RheC5jOjExMDY6XHRcdGRheF9hc3NvY2lhdGVfZW50cnkobmV3X2VudHJ5LCBtYXBwaW5nLCB2bWYtXHUwMDNldm1hLFxuZnMvZGF4LmMtMTEwNy1cdFx0XHRcdFx0dm1mLVx1MDAzZWFkZHJlc3MsIHNoYXJlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTgzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZGF4X2luc2VydF9lbnRyeWAgQ2FsbHMqKgoKT2theSwgdGltZSB0byBnZXQgZGlnZ2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkYXhfaW5zZXJ0X2VudHJ5YCBpcyBiZWluZyB1c2VkIGluIHRoZSBgZnMvZGF4LmNgIGNvbnRleHQuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY2FsbCBwYXRocyB0byB0aGF0IGZ1bmN0aW9uLCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGludm9rZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBEaXJlY3QgQWNjZXNzIChEQVgpIGluZnJhc3RydWN0dXJlIGlzIGZ1bmN0aW9uaW5nLCBhbmQgcGlucG9pbnQgYXJlYXMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RheF9pbnNlcnRfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz0zNTA9c3RhdGljIGlubGluZSBib29sIGRheF9mb2xpb19pc19zaGFyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9kYXguYy0zNTUtLypcbmZzL2RheC5jOjM1NjogKiBXaGVuIGl0IGlzIGNhbGxlZCBieSBkYXhfaW5zZXJ0X2VudHJ5KCksIHRoZSBzaGFyZWQgZmxhZyB3aWxsIGluZGljYXRlXG5mcy9kYXguYy0zNTctICogd2hldGhlciB0aGlzIGVudHJ5IGlzIHNoYXJlZCBieSBtdWx0aXBsZSBmaWxlcy4gSWYgdGhlIHBhZ2UgaGFzIG5vdFxuLS1cbmZzL2RheC5jPTEwNjM9c3RhdGljIGJvb2wgZGF4X2ZhdWx0X2lzX3N5bmNocm9ub3VzKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLS1cbmZzL2RheC5jLTEwNzYtICovXG5mcy9kYXguYzoxMDc3OnN0YXRpYyB2b2lkICpkYXhfaW5zZXJ0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbmZzL2RheC5jLTEwNzgtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCB2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuZnMvZGF4LmM9MTM5Mz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xNDAwLVxuZnMvZGF4LmM6MTQwMTpcdCplbnRyeSA9IGRheF9pbnNlcnRfZW50cnkoeGFzLCB2bWYsIGl0ZXIsICplbnRyeSwgcGZuLCBEQVhfWkVST19QQUdFKTtcbmZzL2RheC5jLTE0MDItXG4tLVxuZnMvZGF4LmM9MTQwOT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZGF4LmMtMTQyMy1cbmZzL2RheC5jOjE0MjQ6XHQqZW50cnkgPSBkYXhfaW5zZXJ0X2VudHJ5KHhhcywgdm1mLCBpdGVyLCAqZW50cnksIGZvbGlvX3Bmbih6ZXJvX2ZvbGlvKSxcbmZzL2RheC5jLTE0MjUtXHRcdFx0XHQgIERBWF9QTUQgfCBEQVhfWkVST19QQUdFKTtcbi0tXG5mcy9kYXguYz0xODQwPXN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9pdGVyKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE4NzQtXG5mcy9kYXguYzoxODc1Olx0KmVudHJ5ID0gZGF4X2luc2VydF9lbnRyeSh4YXMsIHZtZiwgaXRlciwgKmVudHJ5LCBwZm4sIGVudHJ5X2ZsYWdzKTtcbmZzL2RheC5jLTE4NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIERBWCBJbml0aWFsaXphdGlvbiBhbmQgRmF1bHQgSGFuZGxpbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBEQVggc3Vic3lzdGVtIOKAkyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGl0JiMzOTtzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgaGFuZGxlcyBmYXVsdHMuIEZpcnN0IHRoaW5ncyBmaXJzdDogYGRheF9mb2xpb19pbml0YC4gSXQgbG9va3MgbGlrZSB0aGlzIG9uZSBpcyBzdGF0aWNhbGx5IGRlZmluZWQgd2l0aGluIGBmcy9kYXguY2AuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgYSBjb3JlIGNvbXBvbmVudCwgbGlrZWx5IGNhbGxlZCBlYXJseSBvbiBkdXJpbmcgdGhlIERBWCBzZXR1cCwgYW5kIG5vdCBleHBvc2VkIGV4dGVybmFsbHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWwgc2V0dXAgb2YgZm9saW8gc3RydWN0dXJlcyBvciBvdGhlciBjcml0aWNhbCBEQVggZGF0YSBzdHJ1Y3R1cmVzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBkZWFscyB3aXRoIGVycm9ycyBvciBmYXVsdHMgd2l0aGluIHRoZSBEQVggY29udGV4dC4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiB3aGVyZSB0aGUgZmF1bHQgaGFuZGxpbmcgY29kZSByZXNpZGVzIHdpdGhpbiBgZnMvZGF4LmNgLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYWxsIG9mIHRoZSBleHBvcnRlZCBhbmQgZXh0ZXJuYWwgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gZmF1bHQgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIGZhdWx0IHBhdGguIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm1fZmF1bHRfdCBkYXhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGF4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9MjA4Nj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcG1kX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxuLS1cbmZzL2RheC5jLTIxMDUtICovXG5mcy9kYXguYzoyMTA2OnZtX2ZhdWx0X3QgZGF4X2lvbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5mcy9kYXguYy0yMTA3LVx0XHRcdHVuc2lnbmVkIGxvbmcgKnBmbnAsIGludCAqaW9tYXBfZXJycCxcbi0tXG5mcy9kYXguYz0yMTI4PXN0YXRpYyB2bV9mYXVsdF90IGRheF9pbnNlcnRfcGZuX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZGF4LmMtMjE3Ni0gKi9cbmZzL2RheC5jOjIxNzc6dm1fZmF1bHRfdCBkYXhfZmluaXNoX3N5bmNfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcixcbmZzL2RheC5jLTIxNzgtXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMxMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFYIFN5bWJvbCBDb3ZlcmFnZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgaWRlbnRpZnlpbmcgYW5kIGNhdGVnb3JpemluZyB0aGVzZSBEQVgtcmVsYXRlZCBzeW1ib2xzIHRvIHNlZSBpZiB0aGV5IGFyZSBnb29kIHRhcmdldHMgZm9yIGNvdmVyYWdlIGFuYWx5c2lzLiBJIHNlZTogYGRheF9mb2xpb19pbml0YCwgYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2luc2VydF9lbnRyeWAsIGBkYXhfaW9tYXBfZmF1bHRgLCBgZGF4X2lvbWFwX3BtZF9mYXVsdGAsIGFuZCBgZGF4X2ZhdWx0X2l0ZXJgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXN0aW5ndWlzaCBzdGF0aWMgdmVyc3VzIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGlzIGltcGFjdHMgdGhlaXIgdmlzaWJpbGl0eSBhbmQgaG93IHdlIGNhbiB0YXJnZXQgdGhlbS4KCkkgcXVpY2tseSByZW1lbWJlciB0aGF0IGBkYXhfZm9saW9faW5pdGAsIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9pbnNlcnRfZW50cnlgLCBhbmQgYGRheF9mYXVsdF9pdGVyYCBhcmUgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYGZzL2RheC5jYC4gSG93ZXZlciwgSSBrbm93IHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgdW5sZXNzIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBzdGlsbCBoYXZlIHN5bWJvbHMgaW4gdm1saW51eC4gRXZlbiBpZiBpbmxpbmVkLCBsaXN0aW5nIHRoZSBmdW5jdGlvbnMgYWxvbmcgd2l0aCBlbnRyeXBvaW50cyBpcyBzdGFuZGFyZC4gVGhlIGtleSBwb2ludCB0byByZW1lbWJlciBpcyB0byBmb2N1cyBvbiBmdW5jdGlvbnMgaW4gLmMgZmlsZXMsICpub3QqIGhlYWRlcnMsIGFzIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUuIFNvLCBkZXNwaXRlIHRoZW0gYmVpbmcgc3RhdGljLCB0aGV5IGFyZSBmYWlyIGdhbWUgZm9yIGFuYWx5c2lzLiBgZGF4X2lvbWFwX2ZhdWx0YCBpcyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGEgdmFsaWQgc3ltYm9sLgoKVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgaGlnaGxpZ2h0IGNvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGJlaW5nIHByb2JsZW1hdGljIGZvciBkaXJlY3QgdGFyZ2V0aW5nLCBidXQgdGhlc2UgYXJlICpub3QqIHRoZSBjYXNlIGhlcmUuIGBkYXhfZm9saW9faW5pdGAgaXMgaW4gYGZzL2RheC5jYCwgc28gd2UmIzM5O3JlIGdvb2QuCgpUaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgYW5hbHlzaXMsIEkgd2lsbCBpbmNsdWRlOgoKKiAgIGBkYXhfZm9saW9faW5pdGAKKiAgIGBkYXhfYXNzb2NpYXRlX2VudHJ5YAoqICAgYGRheF9pbnNlcnRfZW50cnlgCiogICBgZGF4X2lvbWFwX2ZhdWx0YAoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbi4gSSB3YW50IHRvIGNvcnJlbGF0ZSB0aGlzIHdpdGggdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBFbmFibGVDb25maWdzOiBgRlNfREFYYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgRlNfREFYX1BNRGAsIGFuZCBgQkxLX0RFVl9QTUVNYC4KCkZpbmFsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVzZSBEQVggb3B0aW9ucyBhZmZlY3Qgb3RoZXIgZmlsZXN5c3RlbXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfRlNfREFYYCBpbiBgZnMvZXh0NGAgb3IgYGZzL3hmc2AgdG8gc2VlIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlNfREFYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xuZnMvS2NvbmZpZy01Ny1cbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxuZnMvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvS2NvbmZpZy04OS1cbmZzL0tjb25maWc6OTA6Y29uZmlnIEZTX0RBWF9QTURcbmZzL0tjb25maWctOTEtXHRib29sXG5mcy9LY29uZmlnOjkyOlx0ZGVmYXVsdCBGU19EQVhcbmZzL0tjb25maWc6OTM6XHRkZXBlbmRzIG9uIEZTX0RBWFxuZnMvS2NvbmZpZy05NC1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0Vcbi0tXG5mcy9NYWtlZmlsZT0zMD1vYmotJChDT05GSUdfQUlPKSAgICAgICAgICAgICAgICYjNDM7PSBhaW8ub1xuZnMvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0ZTX0RBWClcdFx0JiM0Mzs9IGRheC5vXG5mcy9NYWtlZmlsZS0zMi1vYmotJChDT05GSUdfRlNfRU5DUllQVElPTilcdCYjNDM7PSBjcnlwdG8vXG4tLVxuZnMvZGF4LmM9MTM5Mz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xNDA3LVxuZnMvZGF4LmM6MTQwODojaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcbmZzL2RheC5jLTE0MDktc3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jPTE0MzM9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE0MzctfVxuZnMvZGF4LmM6MTQzODojZW5kaWYgLyogQ09ORklHX0ZTX0RBWF9QTUQgKi9cbmZzL2RheC5jLTE0MzktXG4tLVxuZnMvZGF4LmM9MTg5Nz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcHRlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxuLS1cbmZzL2RheC5jLTE5NzItXG5mcy9kYXguYzoxOTczOiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxuZnMvZGF4LmMtMTk3NC1zdGF0aWMgYm9vbCBkYXhfZmF1bHRfY2hlY2tfZmFsbGJhY2soc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbmZzL2RheC5jPTIwODY9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2lvbWFwX3BtZF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqcGZucCxcbi0tXG5mcy9kYXguYy0yMDkwLX1cbmZzL2RheC5jOjIwOTE6I2VuZGlmIC8qIENPTkZJR19GU19EQVhfUE1EICovXG5mcy9kYXguYy0yMDkyLVxuLS1cbmZzL2RheC5jPTIxMjg9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2luc2VydF9wZm5fbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0yMTU0LVx0XHRyZXQgPSB2bWZfaW5zZXJ0X3BhZ2VfbWt3cml0ZSh2bWYsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHRydWUpO1xuZnMvZGF4LmM6MjE1NTojaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcbmZzL2RheC5jLTIxNTYtXHRlbHNlIGlmIChvcmRlciA9PSBQTURfT1JERVIpXG4tLVxuZnMvZXJvZnMvZGF0YS5jPTQzNT1zdGF0aWMgc3NpemVfdCBlcm9mc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXJvZnMvZGF0YS5jLTQ0Mi1cbmZzL2Vyb2ZzL2RhdGEuYzo0NDM6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSBcdTAwMjZcdTAwMjYgSVNfREFYKGlub2RlKSlcbmZzL2Vyb2ZzL2RhdGEuYy00NDQtXHRcdHJldHVybiBkYXhfaW9tYXBfcncoaW9jYiwgdG8sIFx1MDAyNmVyb2ZzX2lvbWFwX29wcyk7XG4tLVxuZnMvZXJvZnMvZGF0YS5jPTQ1OD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVyb2ZzX2FvcHMgPSB7XG4tLVxuZnMvZXJvZnMvZGF0YS5jLTQ2Ni1cbmZzL2Vyb2ZzL2RhdGEuYzo0Njc6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL2Vyb2ZzL2RhdGEuYy00Njgtc3RhdGljIHZtX2ZhdWx0X3QgZXJvZnNfZGF4X2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz00MjE9c3RhdGljIGJvb2wgZXJvZnNfZmNfc2V0X2RheF9tb2RlKHN0cnVjdCBmc19jb250ZXh0ICpmYywgdW5zaWduZWQgaW50IG1vZGUpXG5mcy9lcm9mcy9zdXBlci5jLTQyMi17XG5mcy9lcm9mcy9zdXBlci5jOjQyMzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKSB7XG5mcy9lcm9mcy9zdXBlci5jLTQyNC1cdFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbi0tXG5mcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEyNjQtI2RlZmluZSBFWFQ0X01PVU5UX05PTE9BRFx0XHQweDAwMTAwXHQvKiBEb24mIzM5O3QgdXNlIGV4aXN0aW5nIGpvdXJuYWwqL1xuZnMvZXh0NC9leHQ0Lmg6MTI2NTojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9leHQ0LmgtMTI2Ni0jZGVmaW5lIEVYVDRfTU9VTlRfREFYX0FMV0FZU1x0XHQweDAwMjAwXHQvKiBEaXJlY3QgQWNjZXNzICovXG4tLVxuZnMvZXh0NC9maWxlLmM9Njk9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9leHQ0L2ZpbGUuYy0xMDItXG5mcy9leHQ0L2ZpbGUuYzoxMDM6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL2V4dDQvZmlsZS5jLTEwNC1zdGF0aWMgc3NpemVfdCBleHQ0X2RheF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2V4dDQvZmlsZS5jPTEzMj1zdGF0aWMgc3NpemVfdCBleHQ0X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9leHQ0L2ZpbGUuYy0xNDEtXG5mcy9leHQ0L2ZpbGUuYzoxNDI6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL2V4dDQvZmlsZS5jLTE0My1cdGlmIChJU19EQVgoaW5vZGUpKVxuLS1cbmZzL2V4dDQvZmlsZS5jPTU3NT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTcwNC1cbmZzL2V4dDQvZmlsZS5jOjcwNTojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9maWxlLmMtNzA2LXN0YXRpYyBzc2l6ZV90XG4tLVxuZnMvZXh0NC9maWxlLmM9NzY3PWV4dDRfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTc3NS1cbmZzL2V4dDQvZmlsZS5jOjc3NjojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9maWxlLmMtNzc3LVx0aWYgKElTX0RBWChpbm9kZSkpXG4tLVxuZnMvZXh0NC9maWxlLmMtNzk4LVxuZnMvZXh0NC9maWxlLmM6Nzk5OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L2ZpbGUuYy04MDAtc3RhdGljIHZtX2ZhdWx0X3QgZXh0NF9kYXhfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMTg3PXN0YXRpYyBpbnQgZXh0NF9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yMzg4LVx0Y2FzZSBPcHRfZGF4X3R5cGU6XG5mcy9leHQ0L3N1cGVyLmM6MjM4OTojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9zdXBlci5jLTIzOTAtXHR7XG4tLVxuZnMvZmlsZV9hdHRyLmM9MjA9dm9pZCBmaWxlYXR0cl9maWxsX3hmbGFncyhzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEsIHUzMiB4ZmxhZ3MpXG4tLVxuZnMvZmlsZV9hdHRyLmMtMzQtXHRpZiAoZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjYgRlNfWEZMQUdfREFYKVxuZnMvZmlsZV9hdHRyLmM6MzU6XHRcdGZhLVx1MDAzZWZsYWdzIHw9IEZTX0RBWF9GTDtcbmZzL2ZpbGVfYXR0ci5jLTM2LVx0aWYgKGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1BST0pJTkhFUklUKVxuLS1cbmZzL2ZpbGVfYXR0ci5jPTUyPXZvaWQgZmlsZWF0dHJfZmlsbF9mbGFncyhzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEsIHUzMiBmbGFncylcbi0tXG5mcy9maWxlX2F0dHIuYy02NS1cdFx0ZmEtXHUwMDNlZnN4X3hmbGFncyB8PSBGU19YRkxBR19OT0FUSU1FO1xuZnMvZmlsZV9hdHRyLmM6NjY6XHRpZiAoZmEtXHUwMDNlZmxhZ3MgXHUwMDI2IEZTX0RBWF9GTClcbmZzL2ZpbGVfYXR0ci5jLTY3LVx0XHRmYS1cdTAwM2Vmc3hfeGZsYWdzIHw9IEZTX1hGTEFHX0RBWDtcbi0tXG5mcy9mdXNlL0tjb25maWc9NDM9Y29uZmlnIEZVU0VfREFYXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQ3LVx0ZGVwZW5kcyBvbiBWSVJUSU9fRlNcbmZzL2Z1c2UvS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gRlNfREFYXG5mcy9mdXNlL0tjb25maWctNDktXHRkZXBlbmRzIG9uIERBWFxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3NT1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExMi1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExMzpcdHBnbWFwLVx1MDAzZXR5cGUgPSBNRU1PUllfREVWSUNFX0ZTX0RBWDtcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExNC1cbi0tXG5mcy94ZnMvTWFrZWZpbGU9MTU0PWlmZXEgKCQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSx5KVxuZnMveGZzL01ha2VmaWxlOjE1NTp4ZnMtJChDT05GSUdfRlNfREFYKVx0XHQmIzQzOz0geGZzX25vdGlmeV9mYWlsdXJlLm9cbmZzL3hmcy9NYWtlZmlsZS0xNTYtZW5kaWZcbi0tXG5mcy94ZnMveGZzX2J1Zi5jPTE3NjU9eGZzX2FsbG9jX2J1ZnRhcmcoXG4tLVxuZnMveGZzL3hmc19idWYuYy0xNzczLVxuZnMveGZzL3hmc19idWYuYzoxNzc0OiNpZiBkZWZpbmVkKENPTkZJR19GU19EQVgpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSlcbmZzL3hmcy94ZnNfYnVmLmMtMTc3NS1cdG9wcyA9IFx1MDAyNnhmc19kYXhfaG9sZGVyX29wZXJhdGlvbnM7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9MTk2ND14ZnNfZGF4X2ZhdWx0X2xvY2tlZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy0xOTcxLVxuZnMveGZzL3hmc19maWxlLmM6MTk3MjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSkge1xuZnMveGZzL3hmc19maWxlLmMtMTk3My1cdFx0QVNTRVJUKDApO1xuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz03NTA9eGZzX2ZpbGVhdHRyX3NldChcbi0tXG5mcy94ZnMveGZzX2lvY3RsLmMtNzY2LVx0XHRcdFx0ICAgICAgIEZTX05PQVRJTUVfRkwgfCBGU19OT0RVTVBfRkwgfFxuZnMveGZzL3hmc19pb2N0bC5jOjc2NzpcdFx0XHRcdCAgICAgICBGU19TWU5DX0ZMIHwgRlNfREFYX0ZMIHxcbmZzL3hmcy94ZnNfaW9jdGwuYy03NjgtXHRcdFx0XHQgICAgICAgRlNfUFJPSklOSEVSSVRfRkw7XG4tLVxuZnMveGZzL3hmc19pb3BzLmM9MTM2Mz14ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoXG4tLVxuZnMveGZzL3hmc19pb3BzLmMtMTM2NS17XG5mcy94ZnMveGZzX2lvcHMuYzoxMzY2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKVxuZnMveGZzL3hmc19pb3BzLmMtMTM2Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz02OT1lbnVtIHhmc19kYXhfbW9kZSB7XG5mcy94ZnMveGZzX3N1cGVyLmM6NzA6XHRYRlNfREFYX0lOT0RFID0gMCxcbmZzL3hmcy94ZnNfc3VwZXIuYzo3MTpcdFhGU19EQVhfQUxXQVlTID0gMSxcbmZzL3hmcy94ZnNfc3VwZXIuYzo3MjpcdFhGU19EQVhfTkVWRVIgPSAyLFxuZnMveGZzL3hmc19zdXBlci5jLTczLX07XG4tLVxuZnMveGZzL3hmc19zdXBlci5jPTc5PXhmc19tb3VudF9zZXRfZGF4X21vZGUoXG4tLVxuZnMveGZzL3hmc19zdXBlci5jLTgzLVx0c3dpdGNoIChtb2RlKSB7XG5mcy94ZnMveGZzX3N1cGVyLmM6ODQ6XHRjYXNlIFhGU19EQVhfSU5PREU6XG5mcy94ZnMveGZzX3N1cGVyLmMtODUtXHRcdG1wLVx1MDAzZW1fZmVhdHVyZXMgXHUwMDI2PSB+KFhGU19GRUFUX0RBWF9BTFdBWVMgfCBYRlNfRkVBVF9EQVhfTkVWRVIpO1xuZnMveGZzL3hmc19zdXBlci5jLTg2LVx0XHRicmVhaztcbmZzL3hmcy94ZnNfc3VwZXIuYzo4NzpcdGNhc2UgWEZTX0RBWF9BTFdBWVM6XG5mcy94ZnMveGZzX3N1cGVyLmMtODgtXHRcdG1wLVx1MDAzZW1fZmVhdHVyZXMgfD0gWEZTX0ZFQVRfREFYX0FMV0FZUztcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmMtOTAtXHRcdGJyZWFrO1xuZnMveGZzL3hmc19zdXBlci5jOjkxOlx0Y2FzZSBYRlNfREFYX05FVkVSOlxuZnMveGZzL3hmc19zdXBlci5jLTkyLVx0XHRtcC1cdTAwM2VtX2ZlYXR1cmVzIHw9IFhGU19GRUFUX0RBWF9ORVZFUjtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBkYXhfcGFyYW1fZW51bXNbXSA9IHtcbmZzL3hmcy94ZnNfc3VwZXIuYzo5OTpcdHtcJiMzNDtpbm9kZVwmIzM0OyxcdFhGU19EQVhfSU5PREUgfSxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxMDA6XHR7XCYjMzQ7YWx3YXlzXCYjMzQ7LFx0WEZTX0RBWF9BTFdBWVMgfSxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxMDE6XHR7XCYjMzQ7bmV2ZXJcJiMzNDssXHRYRlNfREFYX05FVkVSIH0sXG5mcy94ZnMveGZzX3N1cGVyLmMtMTAyLVx0e31cbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9MzYzPXhmc19zZXR1cF9kYXhfYWx3YXlzKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0zODgtZGlzYWJsZV9kYXg6XG5mcy94ZnMveGZzX3N1cGVyLmM6Mzg5Olx0eGZzX21vdW50X3NldF9kYXhfbW9kZShtcCwgWEZTX0RBWF9ORVZFUik7XG5mcy94ZnMveGZzX3N1cGVyLmMtMzkwLVx0cmV0dXJuIDA7XG4tLVxuZnMveGZzL3hmc19zdXBlci5jPTE0NTQ9eGZzX2ZzX3BhcnNlX3BhcmFtKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNTg0LVx0XHRyZXR1cm4gMDtcbmZzL3hmcy94ZnNfc3VwZXIuYzoxNTg1OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy94ZnMveGZzX3N1cGVyLmMtMTU4Ni1cdGNhc2UgT3B0X2RheDpcbmZzL3hmcy94ZnNfc3VwZXIuYzoxNTg3Olx0XHR4ZnNfbW91bnRfc2V0X2RheF9tb2RlKHBhcnNpbmdfbXAsIFhGU19EQVhfQUxXQVlTKTtcbmZzL3hmcy94ZnNfc3VwZXIuYy0xNTg4LVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNTIKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgYSBwYXRjaCBhbmQgdGhlIHNpdHVhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQuIEl0IHRhcmdldHMgYSBwb3RlbnRpYWwgcmVkdW5kYW5jeSBpbiBgZnMvZGF4LmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBkYXhfZm9saW9faW5pdCgpYCBmdW5jdGlvbi4gVGhlIHBhdGNoIHJlbW92ZXMgYSBkdXBsaWNhdGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBfZGVmZXJyZWRfbGlzdGAgZmllbGQgd2l0aCBgSU5JVF9MSVNUX0hFQURgLiBUaGlzIGlzIGNsZWFuLCBtYWtlcyBzZW5zZSwgYW5kIGxpa2VseSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLgoKVGhlIGNvZGUmIzM5O3MgY29udGV4dCBpcyBjbGVhcmx5IHdpdGhpbiB0aGUgY29yZSBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGZvY3VzaW5nIG9uIHRoZSBEQVggKERpcmVjdCBBY2Nlc3MpIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWVtZWQgJiMzNDtXb3J0aEZ1enppbmcsJiMzNDsgYW5kIHRoYXQgYWxpZ25zIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50OyBzbWFsbCBjaGFuZ2VzIGluIGNvcmUgZnVuY3Rpb25zIGFyZSBhbHdheXMgd29ydGggYSBjbG9zZSBsb29rIGR1cmluZyBmdXp6aW5nLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIERBWC4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggc3VnZ2VzdHMgSSBjaGVjayBhcmU6IGBkYXhfZm9saW9faW5pdGAsIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9pbnNlcnRfZW50cnlgLCBhbmQgYGRheF9pb21hcF9mYXVsdGAuIFRoZXnigJlyZSB0aGUgcmVhbCB0YXJnZXRzIGhlcmUuCgpBbHNvLCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciB0aGlzIHRvIG1hdHRlciBhcmUgYEZTX0RBWGAsIGBaT05FX0RFVklDRWAsIGBGU19EQVhfUE1EYCwgYEJMS19ERVZfUE1FTWAsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIFRob3NlIGFyZSBhbGwgc3RhbmRhcmQsIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hlbiB0ZXN0aW5nIHRoaXMuCgpBbHJpZ2h0LCB3aXRoIHRoaXMgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gsIHRoZSBjb2RlLCB0aGUgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cywgaXQmIzM5O3MgdGltZSB0byBtYXJrIHRoaXMgYXMgYW5hbHl6ZWQsIGFuZCBwcm9jZWVkIHRvIHNldCByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfREFYJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0ZTX0RBWF9QTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9QTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfZm9saW9faW5pdCYjMzQ7LAogICAgJiMzNDtkYXhfYXNzb2NpYXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O2RheF9pbnNlcnRfZW50cnkmIzM0OywKICAgICYjMzQ7ZGF4X2lvbWFwX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkYXhfZm9saW9faW5pdGAgaW4gYGZzL2RheC5jYCB0byByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIGBmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdGAgd2hlbiBjYWxsaW5nIGBwcmVwX2NvbXBvdW5kX3BhZ2VgLiBEQVggZm9saW8gaW5pdGlhbGl6YXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBkdXJpbmcgREFYIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtGU19EQVhfUE1EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfUE1FTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF4X2ZvbGlvX2luaXQmIzM0OywKICAgICYjMzQ7ZGF4X2Fzc29jaWF0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYXhfaW5zZXJ0X2VudHJ5JiMzNDssCiAgICAmIzM0O2RheF9pb21hcF9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZGF4X2ZvbGlvX2luaXRgIGluIGBmcy9kYXguY2AgdG8gcmVtb3ZlIHJlZHVuZGFudCBpbml0aWFsaXphdGlvbiBvZiBgZm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3RgIHdoZW4gY2FsbGluZyBgcHJlcF9jb21wb3VuZF9wYWdlYC4gREFYIGZvbGlvIGluaXRpYWxpemF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBhcmUgcGFydCBvZiB0aGUgY29yZSBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZHVyaW5nIERBWCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBjYWxsIGZyb20gYGRheF9mb2xpb19pbml0KClgLiBUaGUgcHJlY2VkaW5nIGNhbGwgdG8gYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGludm9rZXMgYHByZXBfY29tcG91bmRfaGVhZCgpYCwgd2hpY2ggYWxyZWFkeSBpbml0aWFsaXplcyBgX2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyIFx1MDAzZSAxYC4gUmVtb3ZpbmcgdGhpcyByZWR1bmRhbnQgY2FsbCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBhZmZlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODU3YzUxZTY0YjllY2MxNGQ1ZmZhYTgwOTM2ZTlkYWFmODE1YTk5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDU6MjY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jCmluZGV4IDZiYTUwMTQyZWViMmYuLmRhZDRlZmVhNzk2NDAgMTAwNjQ0Ci0tLSBhL2ZzL2RheC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RheC5jCkBAIC00NjksOCAmIzQzOzQ2OSw2IEBAIHN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KQogCiAJaWYgKG9yZGVyICZndDsgMCkgewogCQlwcmVwX2NvbXBvdW5kX3BhZ2UoJmFtcDtmb2xpby0mZ3Q7cGFnZSwgb3JkZXIpOwotCQlpZiAob3JkZXIgJmd0OyAxKQotCQkJSU5JVF9MSVNUX0hFQUQoJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QpOwogCQlXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7CiAJfQogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBEQVggQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBgZnMvZGF4LmNgIGZpbGUuIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBjb2RlYmFzZTsgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBkYXhfZm9saW9faW5pdGAgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYF9kZWZlcnJlZF9saXN0YC4gSXMgdGhpcyBhIHJlZmFjdG9yPyBPcHRpbWl6YXRpb24/IEJ1ZyBmaXg/IEkgbmVlZCB0aGUgY29udGV4dC4gSSYjMzk7bGwgbGlrZWx5IHVzZSBgcmVhZC1maWxlYCBvciBhIHF1aWNrIGBncmVwcGVyYCBzY2FuIG9mIHRoZSBjb2RlIHRvIHNlZSB3aGVyZSBgZGF4X2ZvbGlvX2luaXRgIGlzIGNhbGxlZCBhbmQgaG93IHRoZSBgX2RlZmVycmVkX2xpc3RgIHZhcmlhYmxlIGludGVyYWN0cyB3aXRoIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZGVmZXJyZWQgbGlzdCBiZWhhdmlvciBpcyBrZXkuIEFybWVkIHdpdGggdGhpcyBrbm93bGVkZ2UsIEkgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhbiBpbmZvcm1lZCBqdWRnZW1lbnQgYWJvdXQgdGhlIHBhdGNoJiMzOTtzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ZvbGlvX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz00MzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRheF9mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9kYXguYy00NTctXG5mcy9kYXguYzo0NTg6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG5mcy9kYXguYy00NTkte1xuLS1cbmZzL2RheC5jPTQ3Nj1zdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy00OTUtXHRcdFdBUk5fT05fT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKTtcbmZzL2RheC5jOjQ5NjpcdFx0ZGF4X2ZvbGlvX2luaXQoZW50cnkpO1xuZnMvZGF4LmMtNDk3LVx0XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBmcy9kYXguY2AqKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFYIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGZzL2RheC5jYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmVzIDQ1MCB0byA1MDAuIFRoaXMgYXJlYSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBsb29rIGF0IHRoZSBjb3JlIGxvZ2ljIOKAkyBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGV2ZWxzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXkgZnVuY3Rpb24gY2FsbHMsIGRhdGEgc3RydWN0dXJlcyBhbmQgaW1wb3J0YW50IHZhcmlhYmxlcyB0aGF0IGRldGVybWluZSB0aGUgREFYIGFjY2VzcyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRcdGVsc2VcbiA0NDE6XHRcdFx0cmVmID0gLS1mb2xpby1cdTAwM2VzaGFyZTtcbiA0NDI6XHRcbiA0NDM6XHRcdGlmIChyZWYpXG4gNDQ0Olx0XHRcdHJldHVybiByZWY7XG4gNDQ1Olx0XG4gNDQ2Olx0XHRvcmRlciA9IGRheF9mb2xpb19yZXNldF9vcmRlcihmb2xpbyk7XG4gNDQ3Olx0XG4gNDQ4Olx0XHQvKiBEZWJ1ZyBjaGVjazogdmVyaWZ5IHJlZmNvdW50cyBhcmUgemVybyBmb3IgYWxsIHN1Yi1mb2xpb3MgKi9cbiA0NDk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSYjNDM7JiM0MzspIHtcbiA0NTA6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTtcbiA0NTE6XHRcbiA0NTI6XHRcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudCgoc3RydWN0IGZvbGlvICopcGFnZSkpO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0cmV0dXJuIHJlZjtcbiA0NTY6XHR9XG4gNDU3Olx0XG4gNDU4Olx0c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG4gNDU5Olx0e1xuIDQ2MDpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gNDYxOlx0XHRpbnQgb3JkZXIgPSBkYXhfZW50cnlfb3JkZXIoZW50cnkpO1xuIDQ2MjpcdFxuIDQ2MzpcdFx0LypcbiA0NjQ6XHRcdCAqIEZvbGlvIHNob3VsZCBoYXZlIGJlZW4gc3BsaXQgYmFjayB0byBvcmRlci0wIHBhZ2VzIGluXG4gNDY1Olx0XHQgKiBkYXhfZm9saW9fcHV0KCkgd2hlbiB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZWlyXG4gNDY2Olx0XHQgKiBmaW5hbCBtYXBwaW5nLlxuIDQ2NzpcdFx0ICovXG4gNDY4Olx0XHRXQVJOX09OX09OQ0UoZm9saW9fb3JkZXIoZm9saW8pKTtcbiA0Njk6XHRcbiA0NzA6XHRcdGlmIChvcmRlciBcdTAwM2UgMCkge1xuIDQ3MTpcdFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO1xuIDQ3MjpcdFx0XHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XG4gNDczOlx0XHR9XG4gNDc0Olx0fVxuIDQ3NTpcdFxuIDQ3NjpcdHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDQ3NzpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNDc4Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGJvb2wgc2hhcmVkKVxuIDQ3OTpcdHtcbiA0ODA6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XG4gNDgxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0ODI6XHRcbiA0ODM6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA0ODQ6XHRcdFx0cmV0dXJuO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MgXHUwMDI2IH4oc2l6ZSAtIDEpKTtcbiA0ODc6XHRcdGlmIChzaGFyZWQgXHUwMDI2XHUwMDI2IChmb2xpby1cdTAwM2VtYXBwaW5nIHx8IGRheF9mb2xpb19pc19zaGFyZWQoZm9saW8pKSkge1xuIDQ4ODpcdFx0XHRpZiAoZm9saW8tXHUwMDNlbWFwcGluZylcbiA0ODk6XHRcdFx0XHRkYXhfZm9saW9fbWFrZV9zaGFyZWQoZm9saW8pO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0XHRXQVJOX09OX09OQ0UoIWZvbGlvLVx1MDAzZXNoYXJlKTtcbiA0OTI6XHRcdFx0V0FSTl9PTl9PTkNFKGRheF9lbnRyeV9vcmRlcihlbnRyeSkgIT0gZm9saW9fb3JkZXIoZm9saW8pKTtcbiA0OTM6XHRcdFx0Zm9saW8tXHUwMDNlc2hhcmUmIzQzOyYjNDM7O1xuIDQ5NDpcdFx0fSBlbHNlIHtcbiA0OTU6XHRcdFx0V0FSTl9PTl9PTkNFKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuIDQ5NjpcdFx0XHRkYXhfZm9saW9faW5pdChlbnRyeSk7XG4gNDk3Olx0XHRcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0OTg6XHRcdFx0Zm9saW8tXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XG4gNDk5Olx0XHRcdGZvbGlvLVx1MDAzZWluZGV4ID0gaW5kZXg7XG4gNTAwOlx0XHR9XG4gNTAxOlx0fVxuIDUwMjpcdFxuIDUwMzpcdHN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDUwNDpcdFx0XHRcdFx0Ym9vbCB0cnVuYylcbiA1MDU6XHR7XG4gNTA2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MDk6XHRcdFx0cmV0dXJuO1xuIDUxMDpcdFxuIDUxMTpcdFx0ZGF4X2ZvbGlvX3B1dChmb2xpbyk7XG4gNTEyOlx0fVxuIDUxMzpcdFxuIDUxNDpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbiA1MTU6XHR7XG4gNTE2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA1MTc6XHRcbiA1MTg6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGV0YWlscyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYF9kZWZlcnJlZF9saXN0YCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB3aGVyZSBpdCByZXNpZGVzIGNvbmNlcm5pbmcgYHN0cnVjdCBmb2xpb2AsIHNpbmNlIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UuIEFsdGVybmF0aXZlbHksIEkga25vdyBgcHJlcF9jb21wb3VuZF9wYWdlYCBpcyBpbnZvbHZlZCBpbiBwYWdlIGFsbG9jYXRpb24sIHNvIHRoYXQmIzM5O3MgYW5vdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBhcmVhLiBJIHRoaW5rIHNlYXJjaGluZyBmb3IgYm90aCBmdW5jdGlvbiBuYW1lcywgYHByZXBfY29tcG91bmRfcGFnZWAgYW5kIHRoZSB2YXJpYWJsZSBgX2RlZmVycmVkX2xpc3RgIGlzIHRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaC4gSXQgc2hvdWxkIHF1aWNrbHkgc2hvdyBtZSB0aGVpciBpbnRlcmFjdGlvbnMsIG9yIHBpbnBvaW50IHRoZSBzdHJ1Y3R1cmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJlcF9jb21wb3VuZF9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcbi0tXG5mcy9kYXguYy00NzAtXHRpZiAob3JkZXIgXHUwMDNlIDApIHtcbmZzL2RheC5jOjQ3MTpcdFx0cHJlcF9jb21wb3VuZF9wYWdlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9yZGVyKTtcbmZzL2RheC5jLTQ3Mi1cdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNzU2PXN0cnVjdCBpbm9kZTtcbmluY2x1ZGUvbGludXgvbW0uaC0xNzU3LVxuaW5jbHVkZS9saW51eC9tbS5oOjE3NTg6ZXh0ZXJuIHZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE3NTktXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00OTY9c3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTUwOS1cdGlmIChvcmRlciBcdTAwM2UgMClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NTEwOlx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy01MTEtfVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xODQ1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhdGEpXG4tLVxubW0vY29tcGFjdGlvbi5jLTE4ODUtXHRpZiAob3JkZXIpXG5tbS9jb21wYWN0aW9uLmM6MTg4NjpcdFx0cHJlcF9jb21wb3VuZF9wYWdlKFx1MDAyNmRzdC1cdTAwM2VwYWdlLCBvcmRlcik7XG5tbS9jb21wYWN0aW9uLmMtMTg4Ny1cdGNjLVx1MDAzZW5yX2ZyZWVwYWdlcyAtPSAxIFx1MDAzY1x1MDAzYyBvcmRlcjtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2NDE9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzcyNy1cdFx0aWYgKG5ld19vcmRlcikge1xubW0vaHVnZV9tZW1vcnkuYzozNzI4Olx0XHRcdHByZXBfY29tcG91bmRfcGFnZShuZXdfaGVhZCwgbmV3X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzcyOS1cdFx0XHRmb2xpb19zZXRfbGFyZ2Vfcm1hcHBhYmxlKG5ld19mb2xpbyk7XG4tLVxubW0vaHVnZXRsYi5jPTMxNzg9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTMxODQtXHQvKlxubW0vaHVnZXRsYi5jOjMxODU6XHQgKiBUaGlzIGlzIGFuIG9wZW4tY29kZWQgcHJlcF9jb21wb3VuZF9wYWdlKCkgd2hlcmVieSB3ZSBhdm9pZFxubW0vaHVnZXRsYi5jLTMxODYtXHQgKiB3YWxraW5nIHBhZ2VzIHR3aWNlIGJ5IGluaXRpYWxpemluZy9wcmVwYXJpbmcmIzQzO2ZyZWV6aW5nIHRoZW0gaW4gdGhlXG4tLVxubW0vaHVnZXRsYi5jPTM5NDY9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5ODYtXHRcdFx0Y2xlYXJfY29tcG91bmRfaGVhZChwYWdlKTtcbm1tL2h1Z2V0bGIuYzozOTg3Olx0XHRcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBkc3QtXHUwMDNlb3JkZXIpO1xubW0vaHVnZXRsYi5jLTM5ODgtXG4tLVxubW0vbWVtcmVtYXAuYz00ODE9dm9pZCB6b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXG4tLVxubW0vbWVtcmVtYXAuYy01MjYtXHRpZiAob3JkZXIpXG5tbS9tZW1yZW1hcC5jOjUyNzpcdFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcbm1tL21lbXJlbWFwLmMtNTI4LX1cbi0tXG5tbS9tbV9pbml0LmM9MTA0OD1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTA1OC1cdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5tbS9tbV9pbml0LmM6MTA1OTpcdCAqIHByZXBfY29tcG91bmRfcGFnZSgpIGRvZXMgbm90IHRha2UgY2FyZSBvZiB0aGF0LCBzbyBpbnN0ZWFkIHdlXG5tbS9tbV9pbml0LmM6MTA2MDpcdCAqIG9wZW4tY29kZSBwcmVwX2NvbXBvdW5kX3BhZ2UoKSBzbyB3ZSBjYW4gdGFrZSBjYXJlIG9mIGluaXRpYWxpemluZ1xubW0vbW1faW5pdC5jLTEwNjEtXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXG4tLVxubW0vcGFnZV9hbGxvYy5jPTY3OT1zdGF0aWMgaW5saW5lIGJvb2wgcGNwX2FsbG93ZWRfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MDEtXG5tbS9wYWdlX2FsbG9jLmM6NzAyOnZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS9wYWdlX2FsbG9jLmMtNzAzLXtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTg3Nj1zdGF0aWMgdm9pZCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTg4MS1cdGlmIChvcmRlciBcdTAwMjZcdTAwMjYgKGdmcF9mbGFncyBcdTAwMjYgX19HRlBfQ09NUCkpXG5tbS9wYWdlX2FsbG9jLmM6MTg4MjpcdFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcbm1tL3BhZ2VfYWxsb2MuYy0xODgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBgcHJlcF9jb21wb3VuZF9wYWdlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGNvbXBvdW5kIHBhZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBMaW51eCBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgcHJlcF9jb21wb3VuZF9wYWdlYCBmdW5jdGlvbi4gSSBrbm93IGl0JiMzOTtzIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyBJJiMzOTtsbCBnbyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gdGhlcmUuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUga2VybmVsIHByZXBhcmVzIGEgcGFnZSBmb3IgdXNlIGFzIHBhcnQgb2YgYSBsYXJnZXIsIGNvbXBvdW5kIHBhZ2Ugc3RydWN0dXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgbGlua3MgdGhlIGhlYWQgcGFnZSB0byBpdHMgdGFpbCBwYWdlcyBhbmQgd2hhdCBpbml0aWFsaXphdGlvbnMgb3IgZGF0YSBzZXR1cCBhcmUgcGVyZm9ybWVkLiBJJiMzOTttIGJldHRpbmcgdGhlcmUmIzM5O3Mgc29tZSBrZXkgaW50ZXJwbGF5IHdpdGggdGhlIHBhZ2UgZmxhZ3MgYW5kIHBvc3NpYmx5IHRoZSBgcGFnZWAgc3RydWN0dXJlIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGlzIHNldHVwIGlzIGNydWNpYWwgZm9yIGRpYWdub3NpbmcgYW55IHBhZ2UgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gaXNzdWVzIEkgbWlnaHQgZW5jb3VudGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0ICovXG4gNzAxOlx0XG4gNzAyOlx0dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiA3MDM6XHR7XG4gNzA0Olx0XHRpbnQgaTtcbiA3MDU6XHRcdGludCBucl9wYWdlcyA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDcwNjpcdFxuIDcwNzpcdFx0X19TZXRQYWdlSGVhZChwYWdlKTtcbiA3MDg6XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOylcbiA3MDk6XHRcdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UgJiM0MzsgaSwgcGFnZSwgb3JkZXIpO1xuIDcxMDpcdFxuIDcxMTpcdFx0cHJlcF9jb21wb3VuZF9oZWFkKHBhZ2UsIG9yZGVyKTtcbiA3MTI6XHR9XG4gNzEzOlx0XG4gNzE0Olx0c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIDcxNTpcdHtcbiA3MTY6XHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xuIDcxNzpcdFx0X19TZXRQYWdlQnVkZHkocGFnZSk7XG4gNzE4Olx0fVxuIDcxOTpcdFxuIDcyMDpcdCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuIDcyMTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxuIDcyMjpcdHtcbiA3MjM6XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMgPSBjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbDtcbiA3MjQ6XHRcbiA3MjU6XHRcdHJldHVybiB1bmxpa2VseShjYXBjKSBcdTAwMjZcdTAwMjZcbiA3MjY6XHRcdFx0IShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjZcbiA3Mjc6XHRcdFx0IWNhcGMtXHUwMDNlcGFnZSBcdTAwMjZcdTAwMjZcbiA3Mjg6XHRcdFx0Y2FwYy1cdTAwM2V6b25lID09IHpvbmUgPyBjYXBjIDogTlVMTDtcbiA3Mjk6XHR9XG4gNzMwOlx0XG4gNzMxOlx0c3RhdGljIGlubGluZSBib29sXG4gNzMyOlx0Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuIDczMzpcdFx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbiA3MzQ6XHR7XG4gNzM1Olx0XHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiA3MzY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczNzpcdFxuIDczODpcdFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbiA3Mzk6XHRcdGlmIChpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEwOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0ICYjMzQ7cHJlcFxfY29tcG91bmRcX2hlYWQmIzM0OyBmdW5jdGlvbi4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0IGluIFthc3N1bWluZyB0aGUgZmllbGQsIGxldCYjMzk7cyBzYXkgTkxQLCBidXQgeW91JiMzOTtsbCBuZWVkIHRvIHNwZWNpZnkhXS4KCioqQW5hbHl6aW5nIGBwcmVwX2NvbXBvdW5kX2hlYWRgKioKCkFscmlnaHQsIHNvIHRoZSBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBiaWcgY2x1ZS4gJiMzNDtwcmVwJiMzNDsgbGlrZWx5IGluZGljYXRlcyBzb21lIHNvcnQgb2YgcHJlcHJvY2Vzc2luZyBzdGVwLCBhbmQgJiMzNDtjb21wb3VuZFxfaGVhZCYjMzQ7IHBvaW50cyBkaXJlY3RseSB0byB0aGUgY29yZSBvZiB3aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCDigJMgdGhlIGhlYWQgd29yZCB3aXRoaW4gYSBjb21wb3VuZCBub3VuIHBocmFzZS4gTXkgaW1tZWRpYXRlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHRpY2tpbmc6IFdoYXQgdHlwZSBvZiBkYXRhIGFtIEkgZXhwZWN0aW5nPyBMaWtlbHkgdGV4dCwgYW5kIHNwZWNpZmljYWxseSB0ZXh0IHRoYXQgaW5jbHVkZXMgY29tcG91bmQgbm91biBwaHJhc2VzLiBJcyBpdCBhbHJlYWR5IHRva2VuaXplZCwgb3IgZG8gSSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQ/IFdoYXQmIzM5O3MgdGhlIGdvYWwgaGVyZT8gTW9zdCBsaWtlbHkgdG8gaWRlbnRpZnkgYW5kIHBvdGVudGlhbGx5IG1vZGlmeSBvciBleHRyYWN0IHRoZSBoZWFkIG5vdW4gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KCkkmIzM5O20gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGRvIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcuIEl0IG1heToKCiogICAqKlBhcnNlIHRoZSBjb21wb3VuZDoqKiBJdCYjMzk7cyBnb3QgdG8gKnVuZGVyc3RhbmQqIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHdvcmRzIGluIHRoZSBjb21wb3VuZCwgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSAmIzM0O2hlYWQmIzM0Oy4gRG9lcyBpdCB1c2UgZGVwZW5kZW5jeSBwYXJzaW5nLCBzb21lIGtpbmQgb2YgcnVsZS1iYXNlZCBhcHByb2FjaCwgb3IgbWF5YmUgYSBzdGF0aXN0aWNhbCBtb2RlbCB0cmFpbmVkIG9uIGNvbXBvdW5kcz8gSSBuZWVkIHRvIGtub3cgaG93IGl0JiMzOTtzIHJlY29nbml6aW5nIHRoZXNlIHN0cnVjdHVyZXMuCiogICAqKkhhbmRsZSBBbWJpZ3VpdHk6KiogQ29tcG91bmQgbm91biBwaHJhc2VzIGNhbiBiZSB0cmlja3kuICYjMzQ7RG9nIGhvdXNlJiMzNDsgaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgd2hhdCBhYm91dCAmIzM0O2RvZyB0cmFpbmluZyBzZXNzaW9uJiMzNDs/IERvZXMgaXQgaGF2ZSBhIG1lY2hhbmlzbSB0byBkaXNhbWJpZ3VhdGUsIHBlcmhhcHMgYnkgY2hlY2tpbmcgcGFydC1vZi1zcGVlY2ggdGFncyBvciBjb250ZXh0dWFsIGNsdWVzPyBPciBpcyBpdCBhc3N1bWluZyBhIHNwZWNpZmljIHN0cnVjdHVyZT8KKiAgICoqTm9ybWFsaXphdGlvbi9TdGFuZGFyZGl6YXRpb246KiogQWZ0ZXIgaWRlbnRpZnlpbmcgdGhlIGhlYWQsIGRvZXMgaXQgcGVyZm9ybSBhbnkgbm9ybWFsaXphdGlvbj8gVGhpbmdzIGxpa2UgY29udmVydGluZyBhbGwgd29yZHMgdG8gbG93ZXJjYXNlLCBsZW1tYXRpemluZywgb3IgZXZlbiBzdGVtbWluZz8gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIGZvciBjb25zaXN0ZW5jeSBpbiBkb3duc3RyZWFtIHRhc2tzLgoqICAgKipFZGdlIENhc2VzOioqIEkmIzM5O20gY3VyaW91cyBhYm91dCBob3cgaXQgaGFuZGxlcyBtdWx0aS13b3JkIGhlYWRzIChlLmcuLCAmIzM0O2hpZ2ggc2Nob29sIHByaW5jaXBhbCYjMzQ7KS4gV2hhdCBpZiB0aGUgaGVhZCBpdHNlbGYgaXMgYSBjb21wb3VuZD8gRG9lcyBpdCByZWN1cnNpdmVseSBjYWxsIGl0c2VsZj8gRG9lcyBpdCBkZWFsIHdpdGggcGhyYXNlcyB0aGF0ICpsb29rKiBsaWtlIGNvbXBvdW5kcyBidXQgYXJlbiYjMzk7dCAoZS5nLiwgJiMzNDt2ZXJ5IGdvb2Qgc3R1ZGVudCYjMzQ7KT8gV2hhdCBhYm91dCBpZGlvbXM/CiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiBpdCAqY2FuJiMzOTt0KiBpZGVudGlmeSBhIGhlYWQ/IERvZXMgaXQgdGhyb3cgYW4gZXJyb3IsIHJldHVybiB0aGUgb3JpZ2luYWwgcGhyYXNlLCBvciBhc3NpZ24gYSBkZWZhdWx0PyBIb3cgcm9idXN0IGlzIHRoaXMgZnVuY3Rpb24/CgpFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgKmhvdyogYW5kICp3aHkqIGJlaGluZCB0aGlzIGZ1bmN0aW9uLiBXaGF0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIHRoZW9yeT8gV2hhdCBraW5kIG9mIHJlc3VsdHMgZG9lcyBpdCBwcm92aWRlPyBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLCBidXQgdGhpcyBpcyB0aGUgc29ydCBvZiBtZW50YWwgZnJhbWV3b3JrIEkmIzM5O20gYnVpbGRpbmcgYmVmb3JlIEkgZXZlbiBsb29rIGF0IHRoZSBjb2RlLiBJIGFudGljaXBhdGUgYSB3ZWxsLWRlc2lnbmVkIGZ1bmN0aW9uIHRoYXQgY29udHJpYnV0ZXMgYSBrZXkgc3RlcCBpbiBhIGxhcmdlciBwaXBlbGluZSBmb3IgbmF0dXJhbCBsYW5ndWFnZSBwcm9jZXNzaW5nLCBwZXJoYXBzIGZvciBpbmZvcm1hdGlvbiBleHRyYWN0aW9uLCB0b3BpYyBtb2RlbGluZywgb3IgYSBzaW1pbGFyIHRhc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByZXBfY29tcG91bmRfaGVhZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MzE3OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMzE5My1cdGh1Z2V0bGJfZm9saW9faW5pdF90YWlsX3ZtZW1tYXAoZm9saW8sIGgsIDEsIG5yX3BhZ2VzKTtcbm1tL2h1Z2V0bGIuYzozMTk0Olx0cHJlcF9jb21wb3VuZF9oZWFkKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGh1Z2VfcGFnZV9vcmRlcihoKSk7XG5tbS9odWdldGxiLmMtMzE5NS19XG4tLVxubW0vaW50ZXJuYWwuaD03NjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnBhZ2Vfcm1hcHBhYmxlX2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2ludGVybmFsLmgtNzcyLVxubW0vaW50ZXJuYWwuaDo3NzM6c3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfaGVhZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vaW50ZXJuYWwuaC03NzQte1xuLS1cbm1tL21tX2luaXQuYz0xMDQ4PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuLS1cbm1tL21tX2luaXQuYy0xMDcwLVx0fVxubW0vbW1faW5pdC5jOjEwNzE6XHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xubW0vbW1faW5pdC5jLTEwNzItfVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MDI9dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzEwLVxubW0vcGFnZV9hbGxvYy5jOjcxMTpcdHByZXBfY29tcG91bmRfaGVhZChwYWdlLCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmMtNzEyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL2ludGVybmFsLmhgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG1tL2ludGVybmFsLmhgIGhlYWRlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc3My4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHBhcnRpY3VsYXIgc3BvdCBpcyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBJIGhhdmUgYSBodW5jaCBhYm91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLCBidXQgSSBuZWVkIHRvIHNlZSBpdCBpbiBjb2RlLiBLbm93aW5nIHRoZSBpbnRyaWNhY2llcyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc29tZXRoaW5nIGluIHRoYXQgdmljaW5pdHkgd2lsbCBzdXJlbHkgYmUgcmVsYXRlZCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgbWV0YWRhdGEgaGFuZGxpbmcsIG9yIGV2ZW4gc29tZSBmb3JtIG9mIGZyZWVsaXN0IG1hbmlwdWxhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcbiA3NjE6XHRcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xuIDc2MjpcdH1cbiA3NjM6XHRcbiA3NjQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqcGFnZV9ybWFwcGFibGVfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4gNzY1Olx0e1xuIDc2NjpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlO1xuIDc2NzpcdFxuIDc2ODpcdFx0aWYgKGZvbGlvIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiA3Njk6XHRcdFx0Zm9saW9fc2V0X2xhcmdlX3JtYXBwYWJsZShmb2xpbyk7XG4gNzcwOlx0XHRyZXR1cm4gZm9saW87XG4gNzcxOlx0fVxuIDc3MjpcdFxuIDc3MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiA3NzQ6XHR7XG4gNzc1Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKXBhZ2U7XG4gNzc2Olx0XG4gNzc3Olx0XHRmb2xpb19zZXRfb3JkZXIoZm9saW8sIG9yZGVyKTtcbiA3Nzg6XHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2xhcmdlX21hcGNvdW50LCAtMSk7XG4gNzc5Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEFHRV9NQVBDT1VOVCkpXG4gNzgwOlx0XHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX25yX3BhZ2VzX21hcHBlZCwgMCk7XG4gNzgxOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1fSUQpKSB7XG4gNzgyOlx0XHRcdGZvbGlvLVx1MDAzZV9tbV9pZHMgPSAwO1xuIDc4MzpcdFx0XHRmb2xpby1cdTAwM2VfbW1faWRfbWFwY291bnRbMF0gPSAtMTtcbiA3ODQ6XHRcdFx0Zm9saW8tXHUwMDNlX21tX2lkX21hcGNvdW50WzFdID0gLTE7XG4gNzg1Olx0XHR9XG4gNzg2Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIHx8IG9yZGVyIFx1MDAzZSAxKSB7XG4gNzg3Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX3BpbmNvdW50LCAwKTtcbiA3ODg6XHRcdFx0YXRvbWljX3NldChcdTAwMjZmb2xpby1cdTAwM2VfZW50aXJlX21hcGNvdW50LCAtMSk7XG4gNzg5Olx0XHR9XG4gNzkwOlx0XHRpZiAob3JkZXIgXHUwMDNlIDEpXG4gNzkxOlx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KTtcbiA3OTI6XHR9XG4gNzkzOlx0XG4gNzk0Olx0c3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcbiA3OTU6XHRcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGludCBvcmRlcilcbiA3OTY6XHR7XG4gNzk3Olx0XHR0YWlsLVx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XG4gNzk4Olx0XHRzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7XG4gNzk5Olx0XHRWTV9XQVJOX09OX09OQ0UodGFpbC1cdTAwM2Vwcml2YXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1NwoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiA1NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGFuZCBSZW1vdmluZyBSZWR1bmRhbnQgTGlzdCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGBwcmVwX2NvbXBvdW5kX2hlYWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHk6CgpgYGBjCnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikKewoJc3RydWN0IGZvbGlvICpmb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlOwoKCWZvbGlvX3NldF9vcmRlcihmb2xpbywgb3JkZXIpOwoJYXRvbWljX3NldCgmYW1wO2ZvbGlvLSZndDtfbGFyZ2VfbWFwY291bnQsIC0xKTsKCWlmIChJU19FTkFCTEVEKENPTkZJR19QQUdFX01BUENPVU5UKSkKCQlhdG9taWNfc2V0KCZhbXA7Zm9saW8tJmd0O19ucl9wYWdlc19tYXBwZWQsIDApOwoJaWYgKElTX0VOQUJMRUQoQ09ORklHX01NX0lEKSkgewoJCWZvbGlvLSZndDtfbW1faWRzID0gMDsKCQlmb2xpby0mZ3Q7X21tX2lkX21hcGNvdW50WzBdID0gLTE7CgkJZm9saW8tJmd0O19tbV9pZF9tYXBjb3VudFsxXSA9IC0xOwoJfQoJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSB8fCBvcmRlciAmZ3Q7IDEpIHsKCQlhdG9taWNfc2V0KCZhbXA7Zm9saW8tJmd0O19waW5jb3VudCwgMCk7CgkJYXRvbWljX3NldCgmYW1wO2ZvbGlvLSZndDtfZW50aXJlX21hcGNvdW50LCAtMSk7Cgl9CglpZiAob3JkZXIgJmd0OyAxKQoJCUlOSVRfTElTVF9IRUFEKCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KTsKfQpgYGAKCk15IGNvbmNlcm4gd2FzIHRoaXMgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIGluIGBkYXhfZm9saW9faW5pdCgpYC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHByZXBfY29tcG91bmRfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlLCBvcmRlcik7YCBjYWxscyBgcHJlcF9jb21wb3VuZF9oZWFkYC4gQW5kLCBjcml0aWNhbGx5LCBgcHJlcF9jb21wb3VuZF9oZWFkYCAqYWxyZWFkeSogaGFuZGxlcyBpbml0aWFsaXppbmcgdGhlIGBmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3RgIGlmIGBvcmRlciAmZ3Q7IDFgLiBNZWFuaW5nIHRoZSBkdXBsaWNhdGUgaW5pdGlhbGl6YXRpb24gaW4gYGRheF9mb2xpb19pbml0KClgIHdhcyBqdXN0IHBsYWluIHJlZHVuZGFudC4KCk5vdywgdGhlIG1haW4gY29uY2VybiBoZXJlIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIEkmIzM5O3ZlIHdhbGtlZCB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LgoKKiAgIGBwcmVwX2NvbXBvdW5kX2hlYWRgICpkb2VzKiBpbml0aWFsaXplIGBmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyICZndDsgMWAuCiogICBSZW1vdmluZyB0aGUgZHVwbGljYXRlIGBJTklUX0xJU1RfSEVBRCgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdClgIGluIGBkYXhfZm9saW9faW5pdGAgKmRvZXNuJiMzOTt0KiBsZWF2ZSBhbnkgZmllbGQgdW5pbml0aWFsaXplZC4KKiAgIE5vIHVzZXItc3BhY2UgY29weSwgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBvciBicmFuY2gsIG5vIGFsbG9jYXRpb24gY2hhbmdlcywgbm90aGluZyB0aGF0IGludHJvZHVjZXMgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4KKiAgIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMgc2hvdWxkIGJlIGFkZXF1YXRlIGhlcmU7IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGNsZWFuIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBndWlkZWxpbmVzIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA6IHRoZSBwYXRjaCBhdm9pZHMgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcywgYW5kIGFsbCB0b3VjaGVkIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBJdCYjMzk7cyBhIHRleHRib29rIGNsZWFudXAuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBjYWxsIGZyb20gYGRheF9mb2xpb19pbml0KClgLiBUaGUgcHJlY2VkaW5nIGNhbGwgdG8gYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGludm9rZXMgYHByZXBfY29tcG91bmRfaGVhZCgpYCwgd2hpY2ggYWxyZWFkeSBpbml0aWFsaXplcyBgX2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyIFx1MDAzZSAxYC4gUmVtb3ZpbmcgdGhpcyByZWR1bmRhbnQgY2FsbCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBhZmZlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBjYWxsIGZyb20gYGRheF9mb2xpb19pbml0KClgLiBUaGUgcHJlY2VkaW5nIGNhbGwgdG8gYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGludm9rZXMgYHByZXBfY29tcG91bmRfaGVhZCgpYCwgd2hpY2ggYWxyZWFkeSBpbml0aWFsaXplcyBgX2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyIFx1MDAzZSAxYC4gUmVtb3ZpbmcgdGhpcyByZWR1bmRhbnQgY2FsbCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBhZmZlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNjoyOS45NzA0Njc1NjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQyMjgwNzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19EQVhcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJGU19EQVhfUE1EXCIsXG4gICAgXCJCTEtfREVWX1BNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXhfZm9saW9faW5pdFwiLFxuICAgIFwiZGF4X2Fzc29jaWF0ZV9lbnRyeVwiLFxuICAgIFwiZGF4X2luc2VydF9lbnRyeVwiLFxuICAgIFwiZGF4X2lvbWFwX2ZhdWx0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgcmVkdW5kYW50IGBJTklUX0xJU1RfSEVBRChcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KWAgY2FsbCBmcm9tIGBkYXhfZm9saW9faW5pdCgpYC4gVGhlIHByZWNlZGluZyBjYWxsIHRvIGBwcmVwX2NvbXBvdW5kX3BhZ2UoKWAgaW50ZXJuYWxseSBpbnZva2VzIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAsIHdoaWNoIGFscmVhZHkgaW5pdGlhbGl6ZXMgYF9kZWZlcnJlZF9saXN0YCB3aGVuIGBvcmRlciBcXHUwMDNlIDFgLiBSZW1vdmluZyB0aGlzIHJlZHVuZGFudCBjYWxsIGRvZXMgbm90IGxlYXZlIGFueSBzdHJ1Y3QgZmllbGRzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGFmZmVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgYW5kIGludHJvZHVjZXMgbm8gaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRheF9mb2xpb19pbml0YCBpbiBgZnMvZGF4LmNgIHRvIHJlbW92ZSByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb2YgYGZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdGAgd2hlbiBjYWxsaW5nIGBwcmVwX2NvbXBvdW5kX3BhZ2VgLiBEQVggZm9saW8gaW5pdGlhbGl6YXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBkdXJpbmcgREFYIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjI5Ljk3MDQ3ODI0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMDAzNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODU3YzUxZTY0YjllY2MxNGQ1ZmZhYTgwOTM2ZTlkYWFmODE1YTk5OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjI2OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcXG5pbmRleCA2YmE1MDE0MmVlYjJmLi5kYWQ0ZWZlYTc5NjQwIDEwMDY0NFxcbi0tLSBhL2ZzL2RheC5jXFxuKysrIGIvZnMvZGF4LmNcXG5AQCAtNDY5LDggKzQ2OSw2IEBAIHN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxcbiBcXG4gXFx0aWYgKG9yZGVyIFxcdTAwM2UgMCkge1xcbiBcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBvcmRlcik7XFxuLVxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDEpXFxuLVxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QpO1xcbiBcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XFxuIFxcdH1cXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNjozMC40NjM0MTgyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjY3NjE5MzgwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfREFYXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiRlNfREFYX1BNRFwiLFxuICAgIFwiQkxLX0RFVl9QTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ZvbGlvX2luaXRcIixcbiAgICBcImRheF9hc3NvY2lhdGVfZW50cnlcIixcbiAgICBcImRheF9pbnNlcnRfZW50cnlcIixcbiAgICBcImRheF9pb21hcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkYXhfZm9saW9faW5pdGAgaW4gYGZzL2RheC5jYCB0byByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIGBmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3RgIHdoZW4gY2FsbGluZyBgcHJlcF9jb21wb3VuZF9wYWdlYC4gREFYIGZvbGlvIGluaXRpYWxpemF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBhcmUgcGFydCBvZiB0aGUgY29yZSBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZHVyaW5nIERBWCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1N2M1MWU2NGI5ZWNjMTRkNWZmYWE4MDkzNmU5ZGFhZjgxNWE5OTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjI2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguY1xuaW5kZXggNmJhNTAxNDJlZWIyZi4uZGFkNGVmZWE3OTY0MCAxMDA2NDRcbi0tLSBhL2ZzL2RheC5jXG4rKysgYi9mcy9kYXguY1xuQEAgLTQ2OSw4ICs0NjksNiBAQCBzdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcbiBcbiBcdGlmIChvcmRlciBcdTAwM2UgMCkge1xuIFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO1xuLVx0XHRpZiAob3JkZXIgXHUwMDNlIDEpXG4tXHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpO1xuIFx0XHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XG4gXHR9XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6MzAuNDYzNDIwMzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQ3MzQyNDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQncyB3b3J0aCB0aHJvd2luZyBhdCBzeXprYWxsZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZG8gYSBwcm9wZXIgcmlzayBhbmFseXNpcyBmaXJzdCDigJMgbm8gcG9pbnQgaW4gd2FzdGluZyB0aW1lIGlmIHRoaXMgaXMgbG93LWltcGFjdC4gVGhlIHBhdGNoIHNlZW1zIHByZXR0eSBjb250YWluZWQ7IGl0J3Mgd2l0aGluIGBmcy9kYXguY2AsIHNvIGl0IHNlZW1zIGxpa2UgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIERBWCAoRGlyZWN0IEFjY2VzcykgZmlsZXN5c3RlbSBzdHVmZi4gSXQgbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIHRoZSBgZGF4X2ZvbGlvX2luaXRgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIHJlbW92YWwgb2YgYSBsaW5lLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHNldmVyaXR5LiBUaGlzIGxvb2tzIGxpa2UgYmVuaWduIG9yIFFBL3Rlc3RpbmcgcmVsYXRlZC4gSSB3aWxsIGJlIHN1cmUgdG8gZG91YmxlIGNoZWNrIHRoaXMuIFRoZXJlIGFyZW4ndCBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4gTm8gaGlnaC1zZXZlcml0eSBhY3Rpb25zIG9yIGFueXRoaW5nIGxpa2UgdGhhdC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZGF4X2ZvbGlvX2luaXRgIGZ1bmN0aW9uIGRvZXMgYW5kIHdoZXJlIGl0J3MgdXNlZC4gSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCB0aGlzIHBhdGNoIHdpdGhpbiBgZnMvZGF4LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgaXNzdWVzLiBJJ2xsIGFsc28gY2hlY2sgdGhlIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCBob3cgYGRheF9mb2xpb19pbml0YCBpcyBjYWxsZWQgYW5kIHdoYXQgaXQncyB1c2VkIGZvci4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgYGRheF9mb2xpb19pbml0YCBpcyBjcml0aWNhbC4gT25jZSBJJ3ZlIGdvdCB0aGF0IHBpY3R1cmUsIEkgY2FuIHRoZW4gYXNzZXNzIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIHJlYXNvbmFibHkgdHJpZ2dlciBhbnkgaW50ZXJlc3RpbmcgY29kZSBwYXRocyBvciBlZGdlIGNhc2VzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB3aGljaCBtaWdodCBtZXJpdCBmdXp6aW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgdG91Y2hlcyBtZW1vcnkgYWxsb2NhdGlvbiwgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBBZnRlciB0aGF0LCBJJ2xsIGdvIHRocm91Z2ggc3RhbmRhcmQgdG9vbCBjYWxscyB0byBwcm92aWRlIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6NDUuOTM2ODQ4Njc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTYzNzc3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfZm9saW9faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kYXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz00MzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRheF9mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2RheC5jLTQ1Ny1cXG5mcy9kYXguYzo0NTg6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNDU5LXtcXG4tLVxcbmZzL2RheC5jPTQ3Nj1zdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTQ5NS1cXHRcXHRXQVJOX09OX09OQ0UoZm9saW8tXFx1MDAzZW1hcHBpbmcpO1xcbmZzL2RheC5jOjQ5NjpcXHRcXHRkYXhfZm9saW9faW5pdChlbnRyeSk7XFxuZnMvZGF4LmMtNDk3LVxcdFxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6NDYuMTUyNTExNzc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyOTA3ODc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIGxpbmVzIDQ1MC01MjAgb2YgYGZzL2RheC5jYDpcblxuKipEaXZpbmcgaW50byB0aGUgREFYIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDQ1MCB0byA1MjAgb2YgYGZzL2RheC5jYC4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiwga25vd2luZyB0aGUgZmlsZSwgaXMgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBmYWlybHkgbG93LWxldmVsIERBWCAoRGlyZWN0IEFjY2Vzcykgb3BlcmF0aW9uIG9yIHBlcmhhcHMgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBwZXJzaXN0ZW50IG1lbW9yeS4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgY29udGV4dCB3aXRoaW4gdGhlIGZpbGUsIEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBkZXZpY2Ugb3IgcGFnZSBjYWNoZSwgYnV0IHNwZWNpZmljYWxseSBpbiB0aGUgb3B0aW1pemVkIGNvbnRleHQgdGhhdCBEQVggYWZmb3Jkcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyByZWxhdGluZyB0byBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5IGFuZCBob3cgdGhlIGNvZGUgbWFuYWdlcyB0aGVzZSBkaXJlY3QgbWFwcGluZ3MuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJ2xsIGJlIHNraW1taW5nIGZvciBhbnkgZnVuY3Rpb24gY2FsbHMgdGhhdCBnaXZlIG1lIGEgY29udGV4dCwgcGVyaGFwcyBhIGRhdGEgc3RydWN0dXJlIGxpa2UgYHN0cnVjdCBpbm9kZWAsIGBzdHJ1Y3QgYWRkcmVzc19zcGFjZWAsIG9yIGBzdHJ1Y3QgcGFnZWAuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGBwZm5fdGAgb3IgYHBtZF90YCBtYW5pcHVsYXRpb25zLCBhcyB0aGlzIHdvdWxkIHN1Z2dlc3QgZGlyZWN0IG1lbW9yeSBvcGVyYXRpb25zLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgZGVhbGluZyB3aXRoIERBWC1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIGNyZWF0aW5nIHBlcnNpc3RlbnQgbWVtb3J5IG1hcHBpbmdzLCBtYW5hZ2luZyB0aGUgY2FjaGUgY29oZXJlbmN5IGlzc3VlcywgYW5kIGhhbmRsaW5nIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBMZXQncyBzZWUgaWYgdGhpcyBsaW5lcyBzZWdtZW50IGlzIGFib3V0IHNldHRpbmcgdXAgb3IgY2xlYW5pbmcgdXAgZGlyZWN0IGFjY2Vzcywgb3IgcGVyaGFwcyBob3cgdGhlIHN5c3RlbSBpbnRlZ3JhdGVzIHdpdGggdGhlIHRyYWRpdGlvbmFsIHBhZ2UgY2FjaGUgaW4gREFYIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNjo0OC44ODE1OTM3NzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGF4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgaSk7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdFxcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoKHN0cnVjdCBmb2xpbyAqKXBhZ2UpKTtcXG4gNDUzOlxcdFxcdH1cXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0cmV0dXJuIHJlZjtcXG4gNDU2OlxcdH1cXG4gNDU3OlxcdFxcbiA0NTg6XFx0c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXFxuIDQ1OTpcXHR7XFxuIDQ2MDpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNDYxOlxcdFxcdGludCBvcmRlciA9IGRheF9lbnRyeV9vcmRlcihlbnRyeSk7XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdC8qXFxuIDQ2NDpcXHRcXHQgKiBGb2xpbyBzaG91bGQgaGF2ZSBiZWVuIHNwbGl0IGJhY2sgdG8gb3JkZXItMCBwYWdlcyBpblxcbiA0NjU6XFx0XFx0ICogZGF4X2ZvbGlvX3B1dCgpIHdoZW4gdGhleSB3ZXJlIHJlbW92ZWQgZnJvbSB0aGVpclxcbiA0NjY6XFx0XFx0ICogZmluYWwgbWFwcGluZy5cXG4gNDY3OlxcdFxcdCAqL1xcbiA0Njg6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX29yZGVyKGZvbGlvKSk7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDApIHtcXG4gNDcxOlxcdFxcdFxcdHByZXBfY29tcG91bmRfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9yZGVyKTtcXG4gNDcyOlxcdFxcdFxcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcXG4gNDczOlxcdFxcdH1cXG4gNDc0OlxcdH1cXG4gNDc1OlxcdFxcbiA0NzY6XFx0c3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIDQ3NzpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gNDc4OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgYm9vbCBzaGFyZWQpXFxuIDQ3OTpcXHR7XFxuIDQ4MDpcXHRcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBkYXhfZW50cnlfc2l6ZShlbnRyeSksIGluZGV4O1xcbiA0ODE6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcXG4gNDg0OlxcdFxcdFxcdHJldHVybjtcXG4gNDg1OlxcdFxcbiA0ODY6XFx0XFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MgXFx1MDAyNiB+KHNpemUgLSAxKSk7XFxuIDQ4NzpcXHRcXHRpZiAoc2hhcmVkIFxcdTAwMjZcXHUwMDI2IChmb2xpby1cXHUwMDNlbWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHtcXG4gNDg4OlxcdFxcdFxcdGlmIChmb2xpby1cXHUwMDNlbWFwcGluZylcXG4gNDg5OlxcdFxcdFxcdFxcdGRheF9mb2xpb19tYWtlX3NoYXJlZChmb2xpbyk7XFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdFxcdFdBUk5fT05fT05DRSghZm9saW8tXFx1MDAzZXNoYXJlKTtcXG4gNDkyOlxcdFxcdFxcdFdBUk5fT05fT05DRShkYXhfZW50cnlfb3JkZXIoZW50cnkpICE9IGZvbGlvX29yZGVyKGZvbGlvKSk7XFxuIDQ5MzpcXHRcXHRcXHRmb2xpby1cXHUwMDNlc2hhcmUrKztcXG4gNDk0OlxcdFxcdH0gZWxzZSB7XFxuIDQ5NTpcXHRcXHRcXHRXQVJOX09OX09OQ0UoZm9saW8tXFx1MDAzZW1hcHBpbmcpO1xcbiA0OTY6XFx0XFx0XFx0ZGF4X2ZvbGlvX2luaXQoZW50cnkpO1xcbiA0OTc6XFx0XFx0XFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiA0OTg6XFx0XFx0XFx0Zm9saW8tXFx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xcbiA0OTk6XFx0XFx0XFx0Zm9saW8tXFx1MDAzZWluZGV4ID0gaW5kZXg7XFxuIDUwMDpcXHRcXHR9XFxuIDUwMTpcXHR9XFxuIDUwMjpcXHRcXG4gNTAzOlxcdHN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiA1MDQ6XFx0XFx0XFx0XFx0XFx0Ym9vbCB0cnVuYylcXG4gNTA1OlxcdHtcXG4gNTA2OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIDUwOTpcXHRcXHRcXHRyZXR1cm47XFxuIDUxMDpcXHRcXG4gNTExOlxcdFxcdGRheF9mb2xpb19wdXQoZm9saW8pO1xcbiA1MTI6XFx0fVxcbiA1MTM6XFx0XFxuIDUxNDpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXFxuIDUxNTpcXHR7XFxuIDUxNjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxcbiA1MTk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjQ4Ljg4MTc0OTkyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTk3Mjg0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgY2hhbmdlczpcblxuKipBbmFseXppbmcgdGhlIEZvbGlvIERlZmVycmVkIExpc3QgUmVtb3ZhbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5IHJpcHBlZCBvdXQgYElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KTtgLiBUaGF0J3MgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSB0aWVkIHRvIGhvdyBmb2xpb3MgYXJlIGJlaW5nIG1hbmFnZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbXBhY3Qgb2YgdGhpcyByZW1vdmFsLCBhbmQgd2hhdCBpdCBtaWdodCBiZSByZXBsYWNlZCB3aXRoLiBJIGtub3cgYF9kZWZlcnJlZF9saXN0YCBzdWdnZXN0cyBzb21lIGtpbmQgb2YgZGVsYXllZCBwcm9jZXNzaW5nIG9yIHF1ZXVpbmcsIHNvIEkgc3VzcGVjdCB0aGlzIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQsIHBhZ2UgcmVjbGFtYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBJL08gc2NoZWR1bGluZy5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hhdCBgcHJlcF9jb21wb3VuZF9wYWdlYCBpcyBkb2luZyBhbmQgd2h5IHRoZSBjb2RlIGlzIHRvdWNoaW5nIGl0LiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGNvbXBvdW5kIHBhZ2VzLiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGNvZGUgaXMgcmVsYXRlZCB0byB0aGUgY3JlYXRpb24gb3IgaGFuZGxpbmcgb2YgbGFyZ2UgbWVtb3J5IHBhZ2VzLlxuXG5UaW1lIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UuIEkgd2lsbCBnbyB0aHJvdWdoIHRoZSBjaGFuZ2VzIGFuZCBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZXhpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjUxLjA0MTQ4MzQ2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgxMzEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmVwX2NvbXBvdW5kX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0xODQ1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhdGEpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTg4NS1cXHRpZiAob3JkZXIpXFxubW0vY29tcGFjdGlvbi5jOjE4ODY6XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKFxcdTAwMjZkc3QtXFx1MDAzZXBhZ2UsIG9yZGVyKTtcXG5tbS9jb21wYWN0aW9uLmMtMTg4Ny1cXHRjYy1cXHUwMDNlbnJfZnJlZXBhZ2VzIC09IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2NDE9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzI3LVxcdFxcdGlmIChuZXdfb3JkZXIpIHtcXG5tbS9odWdlX21lbW9yeS5jOjM3Mjg6XFx0XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKG5ld19oZWFkLCBuZXdfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzcyOS1cXHRcXHRcXHRmb2xpb19zZXRfbGFyZ2Vfcm1hcHBhYmxlKG5ld19mb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MzE3OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTg0LVxcdC8qXFxubW0vaHVnZXRsYi5jOjMxODU6XFx0ICogVGhpcyBpcyBhbiBvcGVuLWNvZGVkIHByZXBfY29tcG91bmRfcGFnZSgpIHdoZXJlYnkgd2UgYXZvaWRcXG5tbS9odWdldGxiLmMtMzE4Ni1cXHQgKiB3YWxraW5nIHBhZ2VzIHR3aWNlIGJ5IGluaXRpYWxpemluZy9wcmVwYXJpbmcrZnJlZXppbmcgdGhlbSBpbiB0aGVcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zOTQ2PXN0YXRpYyBsb25nIGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHN0cnVjdCBoc3RhdGUgKnNyYywgc3RydWN0IGhzdGF0ZSAqZHN0LFxcbi0tXFxubW0vaHVnZXRsYi5jLTM5ODYtXFx0XFx0XFx0Y2xlYXJfY29tcG91bmRfaGVhZChwYWdlKTtcXG5tbS9odWdldGxiLmM6Mzk4NzpcXHRcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgZHN0LVxcdTAwM2VvcmRlcik7XFxubW0vaHVnZXRsYi5jLTM5ODgtXFxuLS1cXG5tbS9tZW1yZW1hcC5jPTQ4MT12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcXG4tLVxcbm1tL21lbXJlbWFwLmMtNTI2LVxcdGlmIChvcmRlcilcXG5tbS9tZW1yZW1hcC5jOjUyNzpcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xcbm1tL21lbXJlbWFwLmMtNTI4LX1cXG4tLVxcbm1tL21tX2luaXQuYz0xMDQ4PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbi0tXFxubW0vbW1faW5pdC5jLTEwNTgtXFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cXG5tbS9tbV9pbml0LmM6MTA1OTpcXHQgKiBwcmVwX2NvbXBvdW5kX3BhZ2UoKSBkb2VzIG5vdCB0YWtlIGNhcmUgb2YgdGhhdCwgc28gaW5zdGVhZCB3ZVxcbm1tL21tX2luaXQuYzoxMDYwOlxcdCAqIG9wZW4tY29kZSBwcmVwX2NvbXBvdW5kX3BhZ2UoKSBzbyB3ZSBjYW4gdGFrZSBjYXJlIG9mIGluaXRpYWxpemluZ1xcbm1tL21tX2luaXQuYy0xMDYxLVxcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MDEtXFxubW0vcGFnZV9hbGxvYy5jOjcwMjp2b2lkIHByZXBfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3BhZ2VfYWxsb2MuYy03MDMte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE4NzY9c3RhdGljIHZvaWQgcHJlcF9uZXdfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTg4MS1cXHRpZiAob3JkZXIgXFx1MDAyNlxcdTAwMjYgKGdmcF9mbGFncyBcXHUwMDI2IF9fR0ZQX0NPTVApKVxcbm1tL3BhZ2VfYWxsb2MuYzoxODgyOlxcdFxcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XFxubW0vcGFnZV9hbGxvYy5jLTE4ODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjUxLjEwMTMwMzUwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTg4NzIzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBjb2RlIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyBjb21wb3VuZCBwYWdlcywgc3BlY2lmaWNhbGx5IHRoZSBwcmUtaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBgcHJlcF9jb21wb3VuZF9wYWdlYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYF9kZWZlcnJlZF9saXN0YCBvciBpZiBpdCdzIGRlbGVnYXRpbmcgdGhhdCB0byBzb21ldGhpbmcgZWxzZSwgbGlrZSBgZm9saW9fcHJlcF9sYXJnZV9ybWFwcGFibGVgIG9yIGEgc2ltcGxlIGBJTklUX0xJU1RfSEVBRGAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBwcmVwX2NvbXBvdW5kX3BhZ2VgIHRvIHNlZSBob3cgdGhvc2UgZmllbGRzIGFyZSBiZWluZyBoYW5kbGVkLiBJIGtub3cgdGhpcyBhcmVhIGNhbiBoYXZlIHN1YnRsZSBpbml0aWFsaXphdGlvbiByZXF1aXJlbWVudHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzUzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6NTMuMDYwMTkzMTE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdCAqL1xcbiA3MDE6XFx0XFxuIDcwMjpcXHR2b2lkIHByZXBfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiA3MDM6XFx0e1xcbiA3MDQ6XFx0XFx0aW50IGk7XFxuIDcwNTpcXHRcXHRpbnQgbnJfcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiA3MDY6XFx0XFxuIDcwNzpcXHRcXHRfX1NldFBhZ2VIZWFkKHBhZ2UpO1xcbiA3MDg6XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspXFxuIDcwOTpcXHRcXHRcXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSArIGksIHBhZ2UsIG9yZGVyKTtcXG4gNzEwOlxcdFxcbiA3MTE6XFx0XFx0cHJlcF9jb21wb3VuZF9oZWFkKHBhZ2UsIG9yZGVyKTtcXG4gNzEyOlxcdH1cXG4gNzEzOlxcdFxcbiA3MTQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiA3MTU6XFx0e1xcbiA3MTY6XFx0XFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XFxuIDcxNzpcXHRcXHRfX1NldFBhZ2VCdWRkeShwYWdlKTtcXG4gNzE4OlxcdH1cXG4gNzE5OlxcdFxcbiA3MjA6XFx0I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuIDcyMTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gNzIyOlxcdHtcXG4gNzIzOlxcdFxcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMgPSBjdXJyZW50LVxcdTAwM2VjYXB0dXJlX2NvbnRyb2w7XFxuIDcyNDpcXHRcXG4gNzI1OlxcdFxcdHJldHVybiB1bmxpa2VseShjYXBjKSBcXHUwMDI2XFx1MDAyNlxcbiA3MjY6XFx0XFx0XFx0IShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0tUSFJFQUQpIFxcdTAwMjZcXHUwMDI2XFxuIDcyNzpcXHRcXHRcXHQhY2FwYy1cXHUwMDNlcGFnZSBcXHUwMDI2XFx1MDAyNlxcbiA3Mjg6XFx0XFx0XFx0Y2FwYy1cXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XFxuIDcyOTpcXHR9XFxuIDczMDpcXHRcXG4gNzMxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbFxcbiA3MzI6XFx0Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbiA3MzM6XFx0XFx0XFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXFxuIDczNDpcXHR7XFxuIDczNTpcXHRcXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cXHUwMDNlb3JkZXIpXFxuIDczNjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDczNzpcXHRcXG4gNzM4OlxcdFxcdC8qIERvIG5vdCBhY2NpZGVudGFsbHkgcG9sbHV0ZSBDTUEgb3IgaXNvbGF0ZWQgcmVnaW9ucyovXFxuIDczOTpcXHRcXHRpZiAoaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjUzLjA2MDU0NzY1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTIwMjMyNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoYXQgdGhvdWdodCBwcm9jZXNzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvbXBvdW5kIEhlYWQ6IE15IEFuYWx5dGljYWwgSm91cm5leSoqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgcHJlcF9jb21wb3VuZF9oZWFkYC4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRvIGRpc3NlY3QgdGhhdCBwaHJhc2UuIEkga25vdyB0aGlzIGlzIGEgc3BlY2lmaWMgY29tcG9uZW50LCBsaWtlbHkgd2l0aGluIGEgbGFyZ2VyIE5MUCBwaXBlbGluZSBvciBrbm93bGVkZ2UgcmVwcmVzZW50YXRpb24gc3lzdGVtLiBcIlByZXBcIiBzdWdnZXN0cyBpdCdzIGEgcHJlcHJvY2Vzc29yLCBhIG1vZHVsZSBkZXNpZ25lZCB0byBwcmVwYXJlIHNvbWUgaW5wdXQuIFwiQ29tcG91bmQgaGVhZFwiLi4uIHRoYXQncyB0aGUgaW50ZXJlc3RpbmcgcGFydC4gTXkgaW1tZWRpYXRlIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGlzIGhhbmRsaW5nIGNvbXBvdW5kIHN0cnVjdHVyZXMsIGxpa2VseSBpbiBhIGxpbmd1aXN0aWMgY29udGV4dC4gVGhpbmsgbm91biBwaHJhc2VzIGxpa2UgXCJyZWQgYXBwbGUgdHJlZVwiIG9yIHBlcmhhcHMgbW9yZSBjb21wbGV4IGNvbnN0cnVjdGlvbnMgaW52b2x2aW5nIHByZXBvc2l0aW9ucy5cblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSBpbXBsZW1lbnRhdGlvbnMuIElzIHRoaXMgaWRlbnRpZnlpbmcgdGhlIGhlYWQgbm91biB3aXRoaW4gYSBjb21wb3VuZD8gSXMgaXQgYnJlYWtpbmcgZG93biB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGhlYWQgYW5kIHRoZSBtb2RpZnlpbmcgZWxlbWVudHM/IEFyZSB0aGVyZSBkaWZmZXJlbnQgYXBwcm9hY2hlcyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY29tcG91bmQg4oCTIGlzIGl0IGRlYWxpbmcgd2l0aCBwdXJlIG5vdW4gY29tcG91bmRzLCBvciBwb3NzaWJseSBtb3JlIHZlcnNhdGlsZSBjb25zdHJ1Y3Rpb25zIHdpdGggYWRqZWN0aXZhbCBtb2RpZmljYXRpb25zP1xuXG5NeSBleHBlcmllbmNlIGRpY3RhdGVzIHRoYXQgdGhlIFwiaGVhZFwiIGNvdWxkIGJlIGRldGVybWluZWQgYnkgdmFyaW91cyBsaW5ndWlzdGljIHByaW5jaXBsZXMsIG1heWJlIHN5bnRhY3RpYyBkb21pbmFuY2UsIHNlbWFudGljIGltcG9ydGFuY2UsIG9yIGV2ZW4gc3RhdGlzdGljYWwgZnJlcXVlbmN5LiBUaGUgaW1wbGVtZW50YXRpb24gbWlnaHQgaW52b2x2ZSBhIGxvb2t1cCB0YWJsZSBvZiBjb21tb24gY29tcG91bmQgcGF0dGVybnMsIGEgcnVsZS1iYXNlZCBzeXN0ZW0sIG9yIGV2ZW4gc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCB1c2luZyBtYWNoaW5lIGxlYXJuaW5nIHRvIGxlYXJuIGhlYWQtbW9kaWZpZXIgcmVsYXRpb25zaGlwcy4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgYW1iaWd1aXR5IOKAkyBjb21wb3VuZCBoZWFkcyBjYW4gYmUgc3VycHJpc2luZ2x5IHRyaWNreSEgTXkgZmllbGQgaXMgZnVsbCBvZiBzdWNoIGVkZ2UgY2FzZXMsIGhvdyBpcyB0aGlzIGhhbmRsaW5nIHRoZW0/IERvZXMgaXQgYXNzaWduIGEgcHJvYmFiaWxpdHkgb3IgY29uZmlkZW5jZSB0byBpdHMgaGVhZCBhc3NpZ25tZW50cz9cblxuVGhlIHBocmFzZSBpdHNlbGYgc3VnZ2VzdHMgYSBtb2R1bGFyIGRlc2lnbjsgSSBhbSBleHBlY3RpbmcgdGhpcyB0byBpbnRlZ3JhdGUgd2l0aCBhIHdpZGVyIHBpcGVsaW5lIOKAkyBpdCBwcm9iYWJseSB0YWtlcyBhIHNlbnRlbmNlIG9yIHBocmFzZSBhcyBpbnB1dCwgcGFyc2VzIGl0LCBpZGVudGlmaWVzIHRoZSBjb21wb3VuZCBzdHJ1Y3R1cmUsIGFuZCB0aGVuIHByb2Nlc3NlcyBpdCBhY2NvcmRpbmdseS4gVGhlIG91dHB1dCB3aWxsIGxpa2VseSBiZSBhIG1vZGlmaWVkIHJlcHJlc2VudGF0aW9uLCBwZXJoYXBzIGEgZGVwZW5kZW5jeSBwYXJzZSwgYSBzZW1hbnRpYyByb2xlIGFzc2lnbm1lbnQsIG9yIGEgZmVhdHVyZSB2ZWN0b3IuIFdoYXQgdHlwZSBvZiBvdXRwdXQgaXMgb2YgcHJpbWFyeSBpbXBvcnRhbmNlIGluIGluZm9ybWluZyB0aGUgbmV4dCBzdGVwcyBvZiB0aGlzIHBpcGVsaW5lLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgYXBwbGljYXRpb24gaXMuIElzIHRoaXMgZm9yIGluZm9ybWF0aW9uIHJldHJpZXZhbCwgbWFjaGluZSB0cmFuc2xhdGlvbiwgb3IgdGV4dCBzdW1tYXJpemF0aW9uPyBUaGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBlbmQgdGFzayB3aWxsIGhlYXZpbHkgaW5mbHVlbmNlIGhvdyBcImdvb2RcIiB0aGlzIHByZXByb2Nlc3NvciBuZWVkcyB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE1OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6NTguNTgwNzg0NTkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTA2MjQzMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcF9jb21wb3VuZF9oZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MzE3OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTkzLVxcdGh1Z2V0bGJfZm9saW9faW5pdF90YWlsX3ZtZW1tYXAoZm9saW8sIGgsIDEsIG5yX3BhZ2VzKTtcXG5tbS9odWdldGxiLmM6MzE5NDpcXHRwcmVwX2NvbXBvdW5kX2hlYWQoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBodWdlX3BhZ2Vfb3JkZXIoaCkpO1xcbm1tL2h1Z2V0bGIuYy0zMTk1LX1cXG4tLVxcbm1tL2ludGVybmFsLmg9NzY0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpwYWdlX3JtYXBwYWJsZV9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL2ludGVybmFsLmgtNzcyLVxcbm1tL2ludGVybmFsLmg6NzczOnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9pbnRlcm5hbC5oLTc3NC17XFxuLS1cXG5tbS9tbV9pbml0LmM9MTA0OD1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMDcwLVxcdH1cXG5tbS9tbV9pbml0LmM6MTA3MTpcXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xcbm1tL21tX2luaXQuYy0xMDcyLX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MDI9dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTAtXFxubW0vcGFnZV9hbGxvYy5jOjcxMTpcXHRwcmVwX2NvbXBvdW5kX2hlYWQocGFnZSwgb3JkZXIpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNjo1OC45MzE0MTY5NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzODAzNDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYG1tL2ludGVybmFsLmhgIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGhhbmRsaW5nIGNvbXBvdW5kIGhlYWRzLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyBsaXZlcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgcHJlcF9jb21wb3VuZF9oZWFkYCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJIGtub3cgaXQncyBpbiBgbW0vaW50ZXJuYWwuaGAuIEknbGwgd2FudCB0byByZXZpZXcgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgaW50ZXJuYWxseS4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBvcGVyYXRlcyBvbiwgYW5kIHdoYXQgaXRzIG92ZXJhbGwgcHVycG9zZSBpcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRvci4gQW55IGludGVyYWN0aW9ucyB3aXRoIGJ1ZGR5IGFsbG9jYXRpb25zLCBwYWdlIHN0cnVjdHVyZXMsIG9yIHRoZSBzbGFiIGFsbG9jYXRvciBuZWVkIGNhcmVmdWwgZXhhbWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzowMC43Njk0NTQ5MTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzcwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzcwOlxcdFxcdHJldHVybiBmb2xpbztcXG4gNzcxOlxcdH1cXG4gNzcyOlxcdFxcbiA3NzM6XFx0c3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfaGVhZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiA3NzQ6XFx0e1xcbiA3NzU6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlO1xcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRmb2xpb19zZXRfb3JkZXIoZm9saW8sIG9yZGVyKTtcXG4gNzc4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfbGFyZ2VfbWFwY291bnQsIC0xKTtcXG4gNzc5OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QQUdFX01BUENPVU5UKSlcXG4gNzgwOlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfbnJfcGFnZXNfbWFwcGVkLCAwKTtcXG4gNzgxOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTV9JRCkpIHtcXG4gNzgyOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VfbW1faWRzID0gMDtcXG4gNzgzOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VfbW1faWRfbWFwY291bnRbMF0gPSAtMTtcXG4gNzg0OlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VfbW1faWRfbWFwY291bnRbMV0gPSAtMTtcXG4gNzg1OlxcdFxcdH1cXG4gNzg2OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgfHwgb3JkZXIgXFx1MDAzZSAxKSB7XFxuIDc4NzpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlX3BpbmNvdW50LCAwKTtcXG4gNzg4OlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZW50aXJlX21hcGNvdW50LCAtMSk7XFxuIDc4OTpcXHRcXHR9XFxuIDc5MDpcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSAxKVxcbiA3OTE6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCk7XFxuIDc5MjpcXHR9XFxuIDc5MzpcXHRcXG4gNzk0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjAwLjc2OTU5NzgzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDI0NjMyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEJ1ZyBhbmQgSXRzIEZ1enppbmcgUmVsZXZhbmNlKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ3ZlIGJlZW4gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgSSd2ZSBmb3VuZCBhIHJlZHVuZGFuY3ksIHBvdGVudGlhbGx5IGEgYnVnLiBJbiBgZnMvZGF4LmNgLCB0aGUgY29kZSBjaGVja3MgYGlmIChvcmRlciBcdTAwM2UgMClgIGFuZCBpbnNpZGUgdGhpcyBjb25kaXRpb24gY2FsbHMgYHByZXBfY29tcG91bmRfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBvcmRlcilgLiBOb3csIGBwcmVwX2NvbXBvdW5kX3BhZ2UoKWAgaW50ZXJuYWxseSBjYWxscyBgcHJlcF9jb21wb3VuZF9oZWFkKClgLCBhbmQgdGhlIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAgZnVuY3Rpb24gaGFzIGFuIGBpZiAob3JkZXIgXHUwMDNlIDEpYCBjaGVjaywgd2hpY2ggdGhlbiBpbml0aWFsaXplcyB0aGUgYF9kZWZlcnJlZF9saXN0YC4gVGhlIGlzc3VlIGlzLCB0aGUgb3V0ZXIgY29kZSBibG9jayBpbiBgZnMvZGF4LmNgIGFsc28gaGFzIGFuIGBpZiAob3JkZXIgXHUwMDNlIDEpYCB3aGljaCBjYWxscyBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCEgSXQncyByZWR1bmRhbnQgc2luY2UgdGhlIGlubmVyIGZ1bmN0aW9uIGNhbGwgYWxyZWFkeSB0YWtlcyBjYXJlIG9mIHRoZSBpbml0aWFsaXphdGlvbiB3aGVuIGBvcmRlciBcdTAwM2UgMWAuIFRoaXMgY291bGQgYmUgYSBoYXJtbGVzcyBkdXBsaWNhdGlvbiwgb3IgaXQgY291bGQgaW5kaWNhdGUgc29tZXRoaW5nIG1vcmUgcHJvYmxlbWF0aWMuXG5cbk5vdywgdGhlIGNvcmUgb2YgbXkgdGhpbmtpbmcgcmV2b2x2ZXMgYXJvdW5kIHdoZXRoZXIgdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQuIEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGNvbmZpcm06XG5cbjEuICAqKklzIHRoaXMgY29kZSBhY3R1YWxseSByZWFjaGFibGU/KiogWWVzLCBgZnMvZGF4LmNgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJdCdzIGNvcmUga2VybmVsIGZpbGVzeXN0ZW0gY29kZSByZWxhdGVkIHRvIERBWCwgd2hpY2ggaXMgdXNlZCBmb3IgYWNjZXNzaW5nIHBlcnNpc3RlbnQgbWVtb3J5LiBTeXN0ZW1zIGxpa2UgZXh0NCBvciB4ZnMgd2l0aCBEQVgsIG9yIGV2ZW4gZW11bGF0ZWQgcG1lbSBkZXZpY2VzLCB3aWxsIGV4ZXJjaXNlIHRoaXMgY29kZS5cblxuMi4gICoqSXMgaXQgYSBjb3JlIHN1YnN5c3RlbT8qKiBZZXMsIERBWCBkZWFscyB3aXRoIGZpbGVzeXN0ZW1zIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgYm90aCBvZiB3aGljaCBhcmUgY3JpdGljYWwgY29yZSBzdWJzeXN0ZW1zLlxuXG4zLiAgKipJcyBpdCByZWZhY3RvcmVkPyoqIFllcywgdGhpcyBpcyBhIGNvZGUgY2xlYW51cC9yZWZhY3RvcmluZy9vcHRpbWl6YXRpb24gYmVjYXVzZSBvZiB0aGUgZHVwbGljYXRpb24uXG5cblRoZXJlZm9yZSwgYWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSBkZWZpbmVkIGluIFNlY3Rpb25zIDEsIDIsIGFuZCAzLCB0aGlzIGNoYW5nZSAqZGVmaW5pdGVseSogbWVldHMgdGhlIFwiV29ydGhGdXp6aW5nID0gdHJ1ZVwiIGNyaXRlcmlhLiBXZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8gcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbS4gUmVmYWN0b3JpbmdzLCBlc3BlY2lhbGx5IHRob3NlIHRvdWNoaW5nIGRhdGEgc3RydWN0dXJlcyBvciBjb250cm9sIGZsb3csIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBzZW1hbnRpYyBzaGlmdHMgb3IgbGF0ZW50IGJ1Z3MuIFRoaXMgaXMgcHJlY2lzZWx5IHdoYXQgdGhlIGd1aWRlbGluZXMgYXJlIGNhdXRpb25pbmcgYWdhaW5zdCFcblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgdGhlIHJlcXVpcmVtZW50IGZvciBgZnMvZGF4LmNgLCBgZGF4X2ZvbGlvX2luaXRgLCBhbmQgYGRheF9hc3NvY2lhdGVfZW50cnlgLiBJIHdpbGwgbG9vayBpbnRvIHRoZSBgZnMvTWFrZWZpbGVgIGFuZCBgZnMvS2NvbmZpZ2AgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzowNi43OTQyMzMwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NjgyMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MzA9b2JqLSQoQ09ORklHX0FJTykgICAgICAgICAgICAgICArPSBhaW8ub1xcbmZzL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19GU19EQVgpXFx0XFx0Kz0gZGF4Lm9cXG5mcy9NYWtlZmlsZS0zMi1vYmotJChDT05GSUdfRlNfRU5DUllQVElPTilcXHQrPSBjcnlwdG8vXFxuLS1cXG5mcy9mdXNlL01ha2VmaWxlPTE2PWZ1c2UteSArPSBpb21vZGUub1xcbmZzL2Z1c2UvTWFrZWZpbGU6MTc6ZnVzZS0kKENPTkZJR19GVVNFX0RBWCkgKz0gZGF4Lm9cXG5mcy9mdXNlL01ha2VmaWxlLTE4LWZ1c2UtJChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkgKz0gcGFzc3Rocm91Z2gubyBiYWNraW5nLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MDYuOTA4OTIzMzIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NTE4NjAwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGp1c3QgaGFwcGVuZWQ6XG5cbioqRXhhbWluaW5nIHRoZSBEQVggQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBDT05GSUdfRlNfREFYYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byB0aGUga2VybmVsJ3Mgc291cmNlIGNvZGUgYW5kIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBoZWFkIG92ZXIgdG8gYGZzL0tjb25maWdgLCBvciB3aGVyZXZlciB0aGUgZmlsZSBpcyB0aGF0IGhvdXNlcyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0J3MgdGhlIGZpcnN0IHBsYWNlIEknZCBjaGVjayBmb3IgaXQuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzowOC40NjA3ODY5NTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjY1NjMzNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0RBWFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xcbmZzL0tjb25maWctNTctXFxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXFxuZnMvS2NvbmZpZy01OS1cXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjExLjYyNzM1ODQxNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYzMzUwNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgYW5kIG15IGd1dCB0ZWxscyBtZSBgZnMvS2NvbmZpZ2AgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU4LiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciBmaWxlIHN5c3RlbSBmZWF0dXJlcywgb3IgYXQgbGVhc3QgYSBrZXkgc2VjdGlvbiByZWxhdGVkIHRvIHRoZW0sIHdpbGwgYmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhlIGxvZ2ljIGlzIHN0cnVjdHVyZWQuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIHNuaXBwZXQgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eSBvbiB0aGUgYnJvYWRlciBkZXNpZ24gZGVjaXNpb25zIGluIHBsYXksIGFuZCBzaGVkIGxpZ2h0IG9uIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSdtIGludGVyZXN0ZWQgaW4uIFRoZSBwbGFuIGlzIHRvIGdldCBhbiBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIHdoZXRoZXIgSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGluY2x1ZGUgcGF0aHMsIG9yIGlmIHRoZSByZWxldmFudCBiaXRzIGFyZSBkZWZpbmVkIHJpZ2h0IHRoZXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MTQuMjkwNzExNDYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFxuICA1NjpcXHRlbmRpZiAjIEJMT0NLXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBGU19EQVhcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIkZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuICA2MTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuICA2MjpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gIDYzOlxcdFxcdHNlbGVjdCBEQVhcXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgRGlyZWN0IEFjY2VzcyAoREFYKSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuXFxuICA2NjpcXHRcXHQgIElmIHRoZSBibG9jayBkZXZpY2Ugc3VwcG9ydHMgREFYIGFuZCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBEQVgsXFxuICA2NzpcXHRcXHQgIHRoZW4geW91IGNhbiBhdm9pZCB1c2luZyB0aGUgcGFnZWNhY2hlIHRvIGJ1ZmZlciBJL09zLiAgVHVybmluZ1xcbiAgNjg6XFx0XFx0ICBvbiB0aGlzIG9wdGlvbiB3aWxsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgREFYLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxcbiAgNzE6XFx0XFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXFxuICA3MjpcXHRcXHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxcXFxuICA3NTpcXHRcXHRcXHRcXHQtLW1vZGU9ZnNkYXggLS1tYXA9bWVtXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgU2VlIHRoZSAnY3JlYXRlLW5hbWVzcGFjZScgbWFuIHBhZ2UgZm9yIGRldGFpbHMgb24gdGhlIG92ZXJoZWFkIG9mXFxuICA3ODpcXHRcXHQgIC0tbWFwPW1lbTpcXG4gIDc5OlxcdFxcdCAgaHR0cHM6Ly9kb2NzLnBtZW0uaW8vbmRjdGwtdXNlci1ndWlkZS9uZGN0bC1tYW4tcGFnZXMvbmRjdGwtY3JlYXRlLW5hbWVzcGFjZVxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcXG4gIDgyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcXG4gIDgzOlxcdFxcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxcbiAgODQ6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgeW91IGRvIG5vdCBoYXZlIGEgYmxvY2sgZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGlzLFxcbiAgODc6XFx0XFx0ICBvciBpZiB1bnN1cmUsIHNheSBOLiAgU2F5aW5nIFkgd2lsbCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsXFxuICA4ODpcXHRcXHQgIGJ5IGFib3V0IDVrQi5cXG4gIDg5OlxcdFxcbiAgOTA6XFx0Y29uZmlnIEZTX0RBWF9QTURcXG4gIDkxOlxcdFxcdGJvb2xcXG4gIDkyOlxcdFxcdGRlZmF1bHQgRlNfREFYXFxuICA5MzpcXHRcXHRkZXBlbmRzIG9uIEZTX0RBWFxcbiAgOTQ6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoxNC4yOTA4MDkyMDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyMjIwNTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgRlNfREFYKipcblxuUmlnaHQsIHNvIGBGU19EQVhgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgYW5kIGl0J3MgZmxhZ2dlZCBhcyBkZXBlbmRlbnQgb24gYFpPTkVfREVWSUNFYCBhbmQgYE1NVWAuIFN0cmFpZ2h0YXdheSwgSSdtIHRoaW5raW5nLCBcIk9rYXksIHRoYXQncyB0aGUgcm9hZG1hcC5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gYE1NVWAgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGBaT05FX0RFVklDRWAgaXMgdGhlIGtleSByaWdodCBub3cuIEknbGwgbmVlZCB0byBrbm93IHdoYXQgKnRoYXQqIGRlcGVuZHMgb24gdG8gaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IGBaT05FX0RFVklDRWAgaXRzZWxmIGlzIGNvbnRpbmdlbnQgdXBvbi4gVGhhdCB3aWxsIGhlbHAgbWUgdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGNoYWluIGFuZCB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGltcGxpY2F0aW9ucyBmb3IgYEZTX0RBWGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjMyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoxNi45MTMwMTg5MDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDc4NTI3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjIwPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMjQtXFxubW0vS2NvbmZpZzoxMjI1OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIyNi1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoxOS40MjA4Nzk4NDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY5ODc1NzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBiZXR0ZXIsIGFuZCBJJ20gcHJldHR5IHN1cmUgSSd2ZSBzZWVuIGl0IGRlZmluZWQgaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgc2VlbSB0byByZW1lbWJlciBpdCBhcm91bmQgbGluZSAxMjI1LCBnaXZlIG9yIHRha2UuIFRpbWUgdG8ganVtcCBvdmVyIHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBob3cgdGhlIGRlZmF1bHQgdmFsdWUgaXMgc2V0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBoZWxwIHRleHRzIEkgY2FuIGdsZWFuLiBJdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiB5b3UncmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIG9mIGEgcGFydGljdWxhciBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJ20gaG9waW5nIEkgY2FuIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciByZWxhdGVkIG9wdGlvbnMsIGFuZCBwZXJoYXBzIHNwb3QgYW55dGhpbmcgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHR5cGljYWwgZm9ybWF0IGhlcmU6IGEgYGNvbmZpZ2Aga2V5d29yZCwgYSB0eXBlIGRlZmluaXRpb24gKGJvb2wsIHRyaXN0YXRlLCBldGMuKSwgdGhlIGhlbHAgdGV4dCwgYW5kIGxpa2VseSBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBXaXRoIGEgYml0IG9mIGx1Y2ssIHRoZSBmaWxlIGNvbW1lbnRzIHdpbGwgYmUgdXAtdG8tZGF0ZSBhbmQgcHJvdmlkZSBzb21lIHVzZWZ1bCBjb250ZXh0LiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTUwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MjIuMTE5NjQwMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIyMDpcXHRjb25maWcgWk9ORV9ETUEzMlxcbjEyMjE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBETUEzMiB6b25lXFxcIiBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcXG4xMjIyOlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMlxcbjEyMjM6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTIyNDpcXHRcXG4xMjI1OlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMjY6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjI3OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyMjg6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyMjk6XFx0XFxuMTIzMDpcXHRcXHRoZWxwXFxuMTIzMTpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTIzMjpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTIzMzpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjEyMzQ6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjEyMzU6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTIzNjpcXHRcXG4xMjM3OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxcbjEyMzg6XFx0XFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXFxuMTIzOTpcXHRcXHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcXG4xMjQwOlxcdFxcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXFxuMTI0MTpcXHRcXHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxcbjEyNDI6XFx0XFxuMTI0MzpcXHQjXFxuMTI0NDpcXHQjIEhlbHBlcnMgdG8gbWlycm9yIHJhbmdlIG9mIHRoZSBDUFUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzIGludG8gZGV2aWNlIHBhZ2VcXG4xMjQ1OlxcdCMgdGFibGVzLlxcbjEyNDY6XFx0I1xcbjEyNDc6XFx0Y29uZmlnIEhNTV9NSVJST1JcXG4xMjQ4OlxcdFxcdGJvb2xcXG4xMjQ5OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTI1MDpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMTI1MTpcXHRcXG4xMjUyOlxcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4xMjUzOlxcdFxcdGJvb2xcXG4xMjU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoyMi4xMTk3NTI3NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjE5ODA0NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQVggYW5kIFBlcnNpc3RlbnQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBEQVggd29ya3MsIGFuZCBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gREFYIGFuZCBwZXJzaXN0ZW50IG1lbW9yeS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IHBpZWNlcyBvZiB0aGlzIHB1enpsZS4gSSdtIHNlZWluZyBhIGZldyBpbXBvcnRhbnQgY29uY2VwdHMganVtcCBvdXQ6IGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBUaGVuIHRoZXJlJ3MgdGhlIHNwZWNpZmljIGludGVycGxheSB3aXRoIHBlcnNpc3RlbnQgbWVtb3J5IHdpdGggYEJMS19ERVZfUE1FTWAgYW5kIHRoZSBgRlNfREFYX1BNRGAgc3R1ZmYuXG5cblRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCBmdW5jdGlvbiBpbiBgZnMvZGF4LmNgIGlzIHdoZXJlIEknbGwgYmVnaW4uIEkgd2FudCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBpdCwgYW5kIHdoZXRoZXIgdGhvc2UgY2FsbGVycyBhcmUgc3RhdGljIG9yIG5vbi1zdGF0aWMgYmVjYXVzZSB0aGUgY2FsbGVycyB3aWxsIGJlIGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIG9wZXJhdGlvbiBhbmQgd2lsbCBzaG93IHRoZSB3YXlzIHRoZSBrZXJuZWwgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gRm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9scyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHRoZXNlIHBlcnNpc3RlbnQgbWVtb3J5IGRldmljZXMgd2l0aGluIHRoZSBEQVggZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MjQuNzM5NTY1MDcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA3NTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfYXNzb2NpYXRlX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RheC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG4tLVxcbmZzL2RheC5jLTQ3NS1cXG5mcy9kYXguYzo0NzY6c3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZGF4LmMtNDc3LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvZGF4LmM9MTA3Nz1zdGF0aWMgdm9pZCAqZGF4X2luc2VydF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9kYXguYy0xMTA1LVxcdFxcdGRheF9kaXNhc3NvY2lhdGVfZW50cnkoZW50cnksIG1hcHBpbmcsIGZhbHNlKTtcXG5mcy9kYXguYzoxMTA2OlxcdFxcdGRheF9hc3NvY2lhdGVfZW50cnkobmV3X2VudHJ5LCBtYXBwaW5nLCB2bWYtXFx1MDAzZXZtYSxcXG5mcy9kYXguYy0xMTA3LVxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlYWRkcmVzcywgc2hhcmVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MjQuNzkxNjQ2NjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODUxMDg2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGRheF9pbnNlcnRfZW50cnlgIENhbGxzKipcblxuT2theSwgdGltZSB0byBnZXQgZGlnZ2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkYXhfaW5zZXJ0X2VudHJ5YCBpcyBiZWluZyB1c2VkIGluIHRoZSBgZnMvZGF4LmNgIGNvbnRleHQuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY2FsbCBwYXRocyB0byB0aGF0IGZ1bmN0aW9uLCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYmVpbmcgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIERpcmVjdCBBY2Nlc3MgKERBWCkgaW5mcmFzdHJ1Y3R1cmUgaXMgZnVuY3Rpb25pbmcsIGFuZCBwaW5wb2ludCBhcmVhcyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoyNi40NzY3NTkwNjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODIyOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9pbnNlcnRfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZGF4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9MzUwPXN0YXRpYyBpbmxpbmUgYm9vbCBkYXhfZm9saW9faXNfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9kYXguYy0zNTUtLypcXG5mcy9kYXguYzozNTY6ICogV2hlbiBpdCBpcyBjYWxsZWQgYnkgZGF4X2luc2VydF9lbnRyeSgpLCB0aGUgc2hhcmVkIGZsYWcgd2lsbCBpbmRpY2F0ZVxcbmZzL2RheC5jLTM1Ny0gKiB3aGV0aGVyIHRoaXMgZW50cnkgaXMgc2hhcmVkIGJ5IG11bHRpcGxlIGZpbGVzLiBJZiB0aGUgcGFnZSBoYXMgbm90XFxuLS1cXG5mcy9kYXguYz0xMDYzPXN0YXRpYyBib29sIGRheF9mYXVsdF9pc19zeW5jaHJvbm91cyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4tLVxcbmZzL2RheC5jLTEwNzYtICovXFxuZnMvZGF4LmM6MTA3NzpzdGF0aWMgdm9pZCAqZGF4X2luc2VydF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuZnMvZGF4LmMtMTA3OC1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgdm9pZCAqZW50cnksIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxuZnMvZGF4LmM9MTM5Mz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE0MDAtXFxuZnMvZGF4LmM6MTQwMTpcXHQqZW50cnkgPSBkYXhfaW5zZXJ0X2VudHJ5KHhhcywgdm1mLCBpdGVyLCAqZW50cnksIHBmbiwgREFYX1pFUk9fUEFHRSk7XFxuZnMvZGF4LmMtMTQwMi1cXG4tLVxcbmZzL2RheC5jPTE0MDk9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTQyMy1cXG5mcy9kYXguYzoxNDI0OlxcdCplbnRyeSA9IGRheF9pbnNlcnRfZW50cnkoeGFzLCB2bWYsIGl0ZXIsICplbnRyeSwgZm9saW9fcGZuKHplcm9fZm9saW8pLFxcbmZzL2RheC5jLTE0MjUtXFx0XFx0XFx0XFx0ICBEQVhfUE1EIHwgREFYX1pFUk9fUEFHRSk7XFxuLS1cXG5mcy9kYXguYz0xODQwPXN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9pdGVyKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTg3NC1cXG5mcy9kYXguYzoxODc1OlxcdCplbnRyeSA9IGRheF9pbnNlcnRfZW50cnkoeGFzLCB2bWYsIGl0ZXIsICplbnRyeSwgcGZuLCBlbnRyeV9mbGFncyk7XFxuZnMvZGF4LmMtMTg3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MjYuNTI0NTg3MDg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTY5MTk2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBEQVggSW5pdGlhbGl6YXRpb24gYW5kIEZhdWx0IEhhbmRsaW5nKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIERBWCBzdWJzeXN0ZW0g4oCTIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgaXQncyBpbml0aWFsaXplZCBhbmQgaG93IGl0IGhhbmRsZXMgZmF1bHRzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGBkYXhfZm9saW9faW5pdGAuIEl0IGxvb2tzIGxpa2UgdGhpcyBvbmUgaXMgc3RhdGljYWxseSBkZWZpbmVkIHdpdGhpbiBgZnMvZGF4LmNgLiBUaGF0IHRlbGxzIG1lIGl0J3MgYSBjb3JlIGNvbXBvbmVudCwgbGlrZWx5IGNhbGxlZCBlYXJseSBvbiBkdXJpbmcgdGhlIERBWCBzZXR1cCwgYW5kIG5vdCBleHBvc2VkIGV4dGVybmFsbHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBzZXR1cCBvZiBmb2xpbyBzdHJ1Y3R1cmVzIG9yIG90aGVyIGNyaXRpY2FsIERBWCBkYXRhIHN0cnVjdHVyZXMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGVhbHMgd2l0aCBlcnJvcnMgb3IgZmF1bHRzIHdpdGhpbiB0aGUgREFYIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gd2hlcmUgdGhlIGZhdWx0IGhhbmRsaW5nIGNvZGUgcmVzaWRlcyB3aXRoaW4gYGZzL2RheC5jYC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYWxsIG9mIHRoZSBleHBvcnRlZCBhbmQgZXh0ZXJuYWwgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gZmF1bHQgaGFuZGxpbmcuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgZmF1bHQgcGF0aC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoyOS4xMjE1MDk0OTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTM4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52bV9mYXVsdF90IGRheF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZGF4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9MjA4Nj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcG1kX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxcbi0tXFxuZnMvZGF4LmMtMjEwNS0gKi9cXG5mcy9kYXguYzoyMTA2OnZtX2ZhdWx0X3QgZGF4X2lvbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuZnMvZGF4LmMtMjEwNy1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICpwZm5wLCBpbnQgKmlvbWFwX2VycnAsXFxuLS1cXG5mcy9kYXguYz0yMTI4PXN0YXRpYyB2bV9mYXVsdF90IGRheF9pbnNlcnRfcGZuX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9kYXguYy0yMTc2LSAqL1xcbmZzL2RheC5jOjIxNzc6dm1fZmF1bHRfdCBkYXhfZmluaXNoX3N5bmNfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcixcXG5mcy9kYXguYy0yMTc4LVxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoyOS4xNzIwNTQxNzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3NzM3NjU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFYIFN5bWJvbCBDb3ZlcmFnZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIGlkZW50aWZ5aW5nIGFuZCBjYXRlZ29yaXppbmcgdGhlc2UgREFYLXJlbGF0ZWQgc3ltYm9scyB0byBzZWUgaWYgdGhleSBhcmUgZ29vZCB0YXJnZXRzIGZvciBjb3ZlcmFnZSBhbmFseXNpcy4gSSBzZWU6IGBkYXhfZm9saW9faW5pdGAsIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9pbnNlcnRfZW50cnlgLCBgZGF4X2lvbWFwX2ZhdWx0YCwgYGRheF9pb21hcF9wbWRfZmF1bHRgLCBhbmQgYGRheF9mYXVsdF9pdGVyYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlzdGluZ3Vpc2ggc3RhdGljIHZlcnN1cyBub24tc3RhdGljIGZ1bmN0aW9ucywgYXMgdGhpcyBpbXBhY3RzIHRoZWlyIHZpc2liaWxpdHkgYW5kIGhvdyB3ZSBjYW4gdGFyZ2V0IHRoZW0uXG5cbkkgcXVpY2tseSByZW1lbWJlciB0aGF0IGBkYXhfZm9saW9faW5pdGAsIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9pbnNlcnRfZW50cnlgLCBhbmQgYGRheF9mYXVsdF9pdGVyYCBhcmUgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYGZzL2RheC5jYC4gSG93ZXZlciwgSSBrbm93IHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgdW5sZXNzIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBzdGlsbCBoYXZlIHN5bWJvbHMgaW4gdm1saW51eC4gRXZlbiBpZiBpbmxpbmVkLCBsaXN0aW5nIHRoZSBmdW5jdGlvbnMgYWxvbmcgd2l0aCBlbnRyeXBvaW50cyBpcyBzdGFuZGFyZC4gVGhlIGtleSBwb2ludCB0byByZW1lbWJlciBpcyB0byBmb2N1cyBvbiBmdW5jdGlvbnMgaW4gLmMgZmlsZXMsICpub3QqIGhlYWRlcnMsIGFzIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUuIFNvLCBkZXNwaXRlIHRoZW0gYmVpbmcgc3RhdGljLCB0aGV5IGFyZSBmYWlyIGdhbWUgZm9yIGFuYWx5c2lzLiBgZGF4X2lvbWFwX2ZhdWx0YCBpcyBub24tc3RhdGljLCBzbyBpdCdzIGNsZWFybHkgYSB2YWxpZCBzeW1ib2wuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGhpZ2hsaWdodCBjb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgaW4gaGVhZGVycyBiZWluZyBwcm9ibGVtYXRpYyBmb3IgZGlyZWN0IHRhcmdldGluZywgYnV0IHRoZXNlIGFyZSAqbm90KiB0aGUgY2FzZSBoZXJlLiBgZGF4X2ZvbGlvX2luaXRgIGlzIGluIGBmcy9kYXguY2AsIHNvIHdlJ3JlIGdvb2QuXG5cblRoZXJlZm9yZSwgZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcywgSSB3aWxsIGluY2x1ZGU6XG5cbiogICBgZGF4X2ZvbGlvX2luaXRgXG4qICAgYGRheF9hc3NvY2lhdGVfZW50cnlgXG4qICAgYGRheF9pbnNlcnRfZW50cnlgXG4qICAgYGRheF9pb21hcF9mYXVsdGBcblxuTm93LCBsZXQncyBtb3ZlIG9uLiBJIHdhbnQgdG8gY29ycmVsYXRlIHRoaXMgd2l0aCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgRW5hYmxlQ29uZmlnczogYEZTX0RBWGAsIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYEZTX0RBWF9QTURgLCBhbmQgYEJMS19ERVZfUE1FTWAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVzZSBEQVggb3B0aW9ucyBhZmZlY3Qgb3RoZXIgZmlsZXN5c3RlbXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19GU19EQVhgIGluIGBmcy9leHQ0YCBvciBgZnMveGZzYCB0byBzZWUgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMxMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzozMy40NDk0MzQyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1NDQwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlNfREFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTU2PWVuZGlmICMgQkxPQ0tcXG5mcy9LY29uZmlnLTU3LVxcbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxcbmZzL0tjb25maWctNTktXFx0Ym9vbCBcXFwiRmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvS2NvbmZpZy04OS1cXG5mcy9LY29uZmlnOjkwOmNvbmZpZyBGU19EQVhfUE1EXFxuZnMvS2NvbmZpZy05MS1cXHRib29sXFxuZnMvS2NvbmZpZzo5MjpcXHRkZWZhdWx0IEZTX0RBWFxcbmZzL0tjb25maWc6OTM6XFx0ZGVwZW5kcyBvbiBGU19EQVhcXG5mcy9LY29uZmlnLTk0LVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4tLVxcbmZzL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgKz0gYWlvLm9cXG5mcy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfRlNfREFYKVxcdFxcdCs9IGRheC5vXFxuZnMvTWFrZWZpbGUtMzItb2JqLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXFx0Kz0gY3J5cHRvL1xcbi0tXFxuZnMvZGF4LmM9MTM5Mz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE0MDctXFxuZnMvZGF4LmM6MTQwODojaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcXG5mcy9kYXguYy0xNDA5LXN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jPTE0MzM9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTQzNy19XFxuZnMvZGF4LmM6MTQzODojZW5kaWYgLyogQ09ORklHX0ZTX0RBWF9QTUQgKi9cXG5mcy9kYXguYy0xNDM5LVxcbi0tXFxuZnMvZGF4LmM9MTg5Nz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcHRlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxcbi0tXFxuZnMvZGF4LmMtMTk3Mi1cXG5mcy9kYXguYzoxOTczOiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxcbmZzL2RheC5jLTE5NzQtc3RhdGljIGJvb2wgZGF4X2ZhdWx0X2NoZWNrX2ZhbGxiYWNrKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4tLVxcbmZzL2RheC5jPTIwODY9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2lvbWFwX3BtZF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqcGZucCxcXG4tLVxcbmZzL2RheC5jLTIwOTAtfVxcbmZzL2RheC5jOjIwOTE6I2VuZGlmIC8qIENPTkZJR19GU19EQVhfUE1EICovXFxuZnMvZGF4LmMtMjA5Mi1cXG4tLVxcbmZzL2RheC5jPTIxMjg9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2luc2VydF9wZm5fbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTIxNTQtXFx0XFx0cmV0ID0gdm1mX2luc2VydF9wYWdlX21rd3JpdGUodm1mLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHRydWUpO1xcbmZzL2RheC5jOjIxNTU6I2lmZGVmIENPTkZJR19GU19EQVhfUE1EXFxuZnMvZGF4LmMtMjE1Ni1cXHRlbHNlIGlmIChvcmRlciA9PSBQTURfT1JERVIpXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9NDM1PXN0YXRpYyBzc2l6ZV90IGVyb2ZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy00NDItXFxuZnMvZXJvZnMvZGF0YS5jOjQ0MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSBcXHUwMDI2XFx1MDAyNiBJU19EQVgoaW5vZGUpKVxcbmZzL2Vyb2ZzL2RhdGEuYy00NDQtXFx0XFx0cmV0dXJuIGRheF9pb21hcF9ydyhpb2NiLCB0bywgXFx1MDAyNmVyb2ZzX2lvbWFwX29wcyk7XFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9NDU4PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXJvZnNfYW9wcyA9IHtcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy00NjYtXFxuZnMvZXJvZnMvZGF0YS5jOjQ2NzojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmZzL2Vyb2ZzL2RhdGEuYy00Njgtc3RhdGljIHZtX2ZhdWx0X3QgZXJvZnNfZGF4X2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTQyMT1zdGF0aWMgYm9vbCBlcm9mc19mY19zZXRfZGF4X21vZGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9lcm9mcy9zdXBlci5jLTQyMi17XFxuZnMvZXJvZnMvc3VwZXIuYzo0MjM6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWCkpIHtcXG5mcy9lcm9mcy9zdXBlci5jLTQyNC1cXHRcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTEwNDg9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xMjY0LSNkZWZpbmUgRVhUNF9NT1VOVF9OT0xPQURcXHRcXHQweDAwMTAwXFx0LyogRG9uJ3QgdXNlIGV4aXN0aW5nIGpvdXJuYWwqL1xcbmZzL2V4dDQvZXh0NC5oOjEyNjU6I2lmZGVmIENPTkZJR19GU19EQVhcXG5mcy9leHQ0L2V4dDQuaC0xMjY2LSNkZWZpbmUgRVhUNF9NT1VOVF9EQVhfQUxXQVlTXFx0XFx0MHgwMDIwMFxcdC8qIERpcmVjdCBBY2Nlc3MgKi9cXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTY5PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xMDItXFxuZnMvZXh0NC9maWxlLmM6MTAzOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtMTA0LXN0YXRpYyBzc2l6ZV90IGV4dDRfZGF4X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz0xMzI9c3RhdGljIHNzaXplX3QgZXh0NF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xNDEtXFxuZnMvZXh0NC9maWxlLmM6MTQyOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtMTQzLVxcdGlmIChJU19EQVgoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9maWxlLmM9NTc1PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03MDQtXFxuZnMvZXh0NC9maWxlLmM6NzA1OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtNzA2LXN0YXRpYyBzc2l6ZV90XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz03Njc9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03NzUtXFxuZnMvZXh0NC9maWxlLmM6Nzc2OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtNzc3LVxcdGlmIChJU19EQVgoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9maWxlLmMtNzk4LVxcbmZzL2V4dDQvZmlsZS5jOjc5OTojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmZzL2V4dDQvZmlsZS5jLTgwMC1zdGF0aWMgdm1fZmF1bHRfdCBleHQ0X2RheF9odWdlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE4Nz1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMzg4LVxcdGNhc2UgT3B0X2RheF90eXBlOlxcbmZzL2V4dDQvc3VwZXIuYzoyMzg5OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9zdXBlci5jLTIzOTAtXFx0e1xcbi0tXFxuZnMvZmlsZV9hdHRyLmM9MjA9dm9pZCBmaWxlYXR0cl9maWxsX3hmbGFncyhzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEsIHUzMiB4ZmxhZ3MpXFxuLS1cXG5mcy9maWxlX2F0dHIuYy0zNC1cXHRpZiAoZmEtXFx1MDAzZWZzeF94ZmxhZ3MgXFx1MDAyNiBGU19YRkxBR19EQVgpXFxuZnMvZmlsZV9hdHRyLmM6MzU6XFx0XFx0ZmEtXFx1MDAzZWZsYWdzIHw9IEZTX0RBWF9GTDtcXG5mcy9maWxlX2F0dHIuYy0zNi1cXHRpZiAoZmEtXFx1MDAzZWZzeF94ZmxhZ3MgXFx1MDAyNiBGU19YRkxBR19QUk9KSU5IRVJJVClcXG4tLVxcbmZzL2ZpbGVfYXR0ci5jPTUyPXZvaWQgZmlsZWF0dHJfZmlsbF9mbGFncyhzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEsIHUzMiBmbGFncylcXG4tLVxcbmZzL2ZpbGVfYXR0ci5jLTY1LVxcdFxcdGZhLVxcdTAwM2Vmc3hfeGZsYWdzIHw9IEZTX1hGTEFHX05PQVRJTUU7XFxuZnMvZmlsZV9hdHRyLmM6NjY6XFx0aWYgKGZhLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZTX0RBWF9GTClcXG5mcy9maWxlX2F0dHIuYy02Ny1cXHRcXHRmYS1cXHUwMDNlZnN4X3hmbGFncyB8PSBGU19YRkxBR19EQVg7XFxuLS1cXG5mcy9mdXNlL0tjb25maWc9NDM9Y29uZmlnIEZVU0VfREFYXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNDctXFx0ZGVwZW5kcyBvbiBWSVJUSU9fRlNcXG5mcy9mdXNlL0tjb25maWc6NDg6XFx0ZGVwZW5kcyBvbiBGU19EQVhcXG5mcy9mdXNlL0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBEQVhcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3NT1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTEyLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExMzpcXHRwZ21hcC1cXHUwMDNldHlwZSA9IE1FTU9SWV9ERVZJQ0VfRlNfREFYO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExNC1cXG4tLVxcbmZzL3hmcy9NYWtlZmlsZT0xNTQ9aWZlcSAoJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpLHkpXFxuZnMveGZzL01ha2VmaWxlOjE1NTp4ZnMtJChDT05GSUdfRlNfREFYKVxcdFxcdCs9IHhmc19ub3RpZnlfZmFpbHVyZS5vXFxuZnMveGZzL01ha2VmaWxlLTE1Ni1lbmRpZlxcbi0tXFxuZnMveGZzL3hmc19idWYuYz0xNzY1PXhmc19hbGxvY19idWZ0YXJnKFxcbi0tXFxuZnMveGZzL3hmc19idWYuYy0xNzczLVxcbmZzL3hmcy94ZnNfYnVmLmM6MTc3NDojaWYgZGVmaW5lZChDT05GSUdfRlNfREFYKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSlcXG5mcy94ZnMveGZzX2J1Zi5jLTE3NzUtXFx0b3BzID0gXFx1MDAyNnhmc19kYXhfaG9sZGVyX29wZXJhdGlvbnM7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz0xOTY0PXhmc19kYXhfZmF1bHRfbG9ja2VkKFxcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtMTk3MS1cXG5mcy94ZnMveGZzX2ZpbGUuYzoxOTcyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSkge1xcbmZzL3hmcy94ZnNfZmlsZS5jLTE5NzMtXFx0XFx0QVNTRVJUKDApO1xcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jPTc1MD14ZnNfZmlsZWF0dHJfc2V0KFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jLTc2Ni1cXHRcXHRcXHRcXHQgICAgICAgRlNfTk9BVElNRV9GTCB8IEZTX05PRFVNUF9GTCB8XFxuZnMveGZzL3hmc19pb2N0bC5jOjc2NzpcXHRcXHRcXHRcXHQgICAgICAgRlNfU1lOQ19GTCB8IEZTX0RBWF9GTCB8XFxuZnMveGZzL3hmc19pb2N0bC5jLTc2OC1cXHRcXHRcXHRcXHQgICAgICAgRlNfUFJPSklOSEVSSVRfRkw7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz0xMzYzPXhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjUte1xcbmZzL3hmcy94ZnNfaW9wcy5jOjEzNjY6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTY5PWVudW0geGZzX2RheF9tb2RlIHtcXG5mcy94ZnMveGZzX3N1cGVyLmM6NzA6XFx0WEZTX0RBWF9JTk9ERSA9IDAsXFxuZnMveGZzL3hmc19zdXBlci5jOjcxOlxcdFhGU19EQVhfQUxXQVlTID0gMSxcXG5mcy94ZnMveGZzX3N1cGVyLmM6NzI6XFx0WEZTX0RBWF9ORVZFUiA9IDIsXFxuZnMveGZzL3hmc19zdXBlci5jLTczLX07XFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmM9Nzk9eGZzX21vdW50X3NldF9kYXhfbW9kZShcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYy04My1cXHRzd2l0Y2ggKG1vZGUpIHtcXG5mcy94ZnMveGZzX3N1cGVyLmM6ODQ6XFx0Y2FzZSBYRlNfREFYX0lOT0RFOlxcbmZzL3hmcy94ZnNfc3VwZXIuYy04NS1cXHRcXHRtcC1cXHUwMDNlbV9mZWF0dXJlcyBcXHUwMDI2PSB+KFhGU19GRUFUX0RBWF9BTFdBWVMgfCBYRlNfRkVBVF9EQVhfTkVWRVIpO1xcbmZzL3hmcy94ZnNfc3VwZXIuYy04Ni1cXHRcXHRicmVhaztcXG5mcy94ZnMveGZzX3N1cGVyLmM6ODc6XFx0Y2FzZSBYRlNfREFYX0FMV0FZUzpcXG5mcy94ZnMveGZzX3N1cGVyLmMtODgtXFx0XFx0bXAtXFx1MDAzZW1fZmVhdHVyZXMgfD0gWEZTX0ZFQVRfREFYX0FMV0FZUztcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYy05MC1cXHRcXHRicmVhaztcXG5mcy94ZnMveGZzX3N1cGVyLmM6OTE6XFx0Y2FzZSBYRlNfREFYX05FVkVSOlxcbmZzL3hmcy94ZnNfc3VwZXIuYy05Mi1cXHRcXHRtcC1cXHUwMDNlbV9mZWF0dXJlcyB8PSBYRlNfRkVBVF9EQVhfTkVWRVI7XFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmM9OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBkYXhfcGFyYW1fZW51bXNbXSA9IHtcXG5mcy94ZnMveGZzX3N1cGVyLmM6OTk6XFx0e1xcXCJpbm9kZVxcXCIsXFx0WEZTX0RBWF9JTk9ERSB9LFxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxMDA6XFx0e1xcXCJhbHdheXNcXFwiLFxcdFhGU19EQVhfQUxXQVlTIH0sXFxuZnMveGZzL3hmc19zdXBlci5jOjEwMTpcXHR7XFxcIm5ldmVyXFxcIixcXHRYRlNfREFYX05FVkVSIH0sXFxuZnMveGZzL3hmc19zdXBlci5jLTEwMi1cXHR7fVxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTM2Mz14ZnNfc2V0dXBfZGF4X2Fsd2F5cyhcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYy0zODgtZGlzYWJsZV9kYXg6XFxuZnMveGZzL3hmc19zdXBlci5jOjM4OTpcXHR4ZnNfbW91bnRfc2V0X2RheF9tb2RlKG1wLCBYRlNfREFYX05FVkVSKTtcXG5mcy94ZnMveGZzX3N1cGVyLmMtMzkwLVxcdHJldHVybiAwO1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE0NTQ9eGZzX2ZzX3BhcnNlX3BhcmFtKFxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTE1ODQtXFx0XFx0cmV0dXJuIDA7XFxuZnMveGZzL3hmc19zdXBlci5jOjE1ODU6I2lmZGVmIENPTkZJR19GU19EQVhcXG5mcy94ZnMveGZzX3N1cGVyLmMtMTU4Ni1cXHRjYXNlIE9wdF9kYXg6XFxuZnMveGZzL3hmc19zdXBlci5jOjE1ODc6XFx0XFx0eGZzX21vdW50X3NldF9kYXhfbW9kZShwYXJzaW5nX21wLCBYRlNfREFYX0FMV0FZUyk7XFxuZnMveGZzL3hmc19zdXBlci5jLTE1ODgtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjMzLjUzMTk4Mzk4NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjE3OTIyNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBqdXN0IHJldmlld2VkIGEgcGF0Y2ggYW5kIHRoZSBzaXR1YXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCB0YXJnZXRzIGEgcG90ZW50aWFsIHJlZHVuZGFuY3kgaW4gYGZzL2RheC5jYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgZGF4X2ZvbGlvX2luaXQoKWAgZnVuY3Rpb24uIFRoZSBwYXRjaCByZW1vdmVzIGEgZHVwbGljYXRlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgX2RlZmVycmVkX2xpc3RgIGZpZWxkIHdpdGggYElOSVRfTElTVF9IRUFEYC4gVGhpcyBpcyBjbGVhbiwgbWFrZXMgc2Vuc2UsIGFuZCBsaWtlbHkgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLlxuXG5UaGUgY29kZSdzIGNvbnRleHQgaXMgY2xlYXJseSB3aXRoaW4gdGhlIGNvcmUgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBmb2N1c2luZyBvbiB0aGUgREFYIChEaXJlY3QgQWNjZXNzKSBmdW5jdGlvbmFsaXR5LiBJJ3ZlIG5vdGVkIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWVtZWQgXCJXb3J0aEZ1enppbmcsXCIgYW5kIHRoYXQgYWxpZ25zIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50OyBzbWFsbCBjaGFuZ2VzIGluIGNvcmUgZnVuY3Rpb25zIGFyZSBhbHdheXMgd29ydGggYSBjbG9zZSBsb29rIGR1cmluZyBmdXp6aW5nLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gREFYLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBzdWdnZXN0cyBJIGNoZWNrIGFyZTogYGRheF9mb2xpb19pbml0YCwgYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2luc2VydF9lbnRyeWAsIGFuZCBgZGF4X2lvbWFwX2ZhdWx0YC4gVGhleeKAmXJlIHRoZSByZWFsIHRhcmdldHMgaGVyZS5cblxuQWxzbywgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyB0byBtYXR0ZXIgYXJlIGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBgRlNfREFYX1BNRGAsIGBCTEtfREVWX1BNRU1gLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBUaG9zZSBhcmUgYWxsIHN0YW5kYXJkLCBidXQgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoZW4gdGVzdGluZyB0aGlzLlxuXG5BbHJpZ2h0LCB3aXRoIHRoaXMgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gsIHRoZSBjb2RlLCB0aGUgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cywgaXQncyB0aW1lIHRvIG1hcmsgdGhpcyBhcyBhbmFseXplZCwgYW5kIHByb2NlZWQgdG8gc2V0IHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDUyLCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzozNy4xNDk5MDk5M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDQzMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19EQVhcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJGU19EQVhfUE1EXCIsXG4gICAgXCJCTEtfREVWX1BNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXhfZm9saW9faW5pdFwiLFxuICAgIFwiZGF4X2Fzc29jaWF0ZV9lbnRyeVwiLFxuICAgIFwiZGF4X2luc2VydF9lbnRyeVwiLFxuICAgIFwiZGF4X2lvbWFwX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRheF9mb2xpb19pbml0YCBpbiBgZnMvZGF4LmNgIHRvIHJlbW92ZSByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb2YgYGZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdGAgd2hlbiBjYWxsaW5nIGBwcmVwX2NvbXBvdW5kX3BhZ2VgLiBEQVggZm9saW8gaW5pdGlhbGl6YXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBkdXJpbmcgREFYIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfREFYXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiRlNfREFYX1BNRFwiLFxuICAgIFwiQkxLX0RFVl9QTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ZvbGlvX2luaXRcIixcbiAgICBcImRheF9hc3NvY2lhdGVfZW50cnlcIixcbiAgICBcImRheF9pbnNlcnRfZW50cnlcIixcbiAgICBcImRheF9pb21hcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkYXhfZm9saW9faW5pdGAgaW4gYGZzL2RheC5jYCB0byByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIGBmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3RgIHdoZW4gY2FsbGluZyBgcHJlcF9jb21wb3VuZF9wYWdlYC4gREFYIGZvbGlvIGluaXRpYWxpemF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBhcmUgcGFydCBvZiB0aGUgY29yZSBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZHVyaW5nIERBWCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzozNy4yMjUzNTk2NjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTY3ODk3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MzcuMjI1ODgwOTU0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjcxNjczNzA0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYSByZWR1bmRhbnQgYElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBjYWxsIGZyb20gYGRheF9mb2xpb19pbml0KClgLiBUaGUgcHJlY2VkaW5nIGNhbGwgdG8gYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGludm9rZXMgYHByZXBfY29tcG91bmRfaGVhZCgpYCwgd2hpY2ggYWxyZWFkeSBpbml0aWFsaXplcyBgX2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyIFxcdTAwM2UgMWAuIFJlbW92aW5nIHRoaXMgcmVkdW5kYW50IGNhbGwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgYWZmZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBhbmQgaW50cm9kdWNlcyBubyBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTdjNTFlNjRiOWVjYzE0ZDVmZmFhODA5MzZlOWRhYWY4MTVhOTk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNToyNjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcbmluZGV4IDZiYTUwMTQyZWViMmYuLmRhZDRlZmVhNzk2NDAgMTAwNjQ0XG4tLS0gYS9mcy9kYXguY1xuKysrIGIvZnMvZGF4LmNcbkBAIC00NjksOCArNDY5LDYgQEAgc3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG4gXG4gXHRpZiAob3JkZXIgXHUwMDNlIDApIHtcbiBcdFx0cHJlcF9jb21wb3VuZF9wYWdlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9yZGVyKTtcbi1cdFx0aWYgKG9yZGVyIFx1MDAzZSAxKVxuLVx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KTtcbiBcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xuIFx0fVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjM3LjIyNTg4MjA0NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTA5NDQzMzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBEQVggQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgYGZzL2RheC5jYCBmaWxlLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBGaXJzdCwgSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlOyBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBgZGF4X2ZvbGlvX2luaXRgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBfZGVmZXJyZWRfbGlzdGAuIElzIHRoaXMgYSByZWZhY3Rvcj8gT3B0aW1pemF0aW9uPyBCdWcgZml4PyBJIG5lZWQgdGhlIGNvbnRleHQuIEknbGwgbGlrZWx5IHVzZSBgcmVhZC1maWxlYCBvciBhIHF1aWNrIGBncmVwcGVyYCBzY2FuIG9mIHRoZSBjb2RlIHRvIHNlZSB3aGVyZSBgZGF4X2ZvbGlvX2luaXRgIGlzIGNhbGxlZCBhbmQgaG93IHRoZSBgX2RlZmVycmVkX2xpc3RgIHZhcmlhYmxlIGludGVyYWN0cyB3aXRoIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZGVmZXJyZWQgbGlzdCBiZWhhdmlvciBpcyBrZXkuIEFybWVkIHdpdGggdGhpcyBrbm93bGVkZ2UsIEkgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhbiBpbmZvcm1lZCBqdWRnZW1lbnQgYWJvdXQgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo0Mi4zMzUzMjg3MDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTc3OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9mb2xpb19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RheC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTQzMz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGF4X2ZvbGlvX3B1dChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZGF4LmMtNDU3LVxcbmZzL2RheC5jOjQ1ODpzdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG5mcy9kYXguYy00NTkte1xcbi0tXFxuZnMvZGF4LmM9NDc2PXN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtNDk1LVxcdFxcdFdBUk5fT05fT05DRShmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuZnMvZGF4LmM6NDk2OlxcdFxcdGRheF9mb2xpb19pbml0KGVudHJ5KTtcXG5mcy9kYXguYy00OTctXFx0XFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo0Mi4zODU5MTMxODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMDgxNzUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZnMvZGF4LmNgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFYIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc28gbGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZnMvZGF4LmNgLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lcyA0NTAgdG8gNTAwLiBUaGlzIGFyZWEgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgbG9vayBhdCB0aGUgY29yZSBsb2dpYyDigJMgSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGV2ZWxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbXBvcnRhbnQgdmFyaWFibGVzIHRoYXQgZGV0ZXJtaW5lIHRoZSBEQVggYWNjZXNzIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo0NC40MTY3MzQwNjdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RheC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHRcXHRlbHNlXFxuIDQ0MTpcXHRcXHRcXHRyZWYgPSAtLWZvbGlvLVxcdTAwM2VzaGFyZTtcXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0aWYgKHJlZilcXG4gNDQ0OlxcdFxcdFxcdHJldHVybiByZWY7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdG9yZGVyID0gZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKGZvbGlvKTtcXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0LyogRGVidWcgY2hlY2s6IHZlcmlmeSByZWZjb3VudHMgYXJlIHplcm8gZm9yIGFsbCBzdWItZm9saW9zICovXFxuIDQ0OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcik7IGkrKykge1xcbiA0NTA6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTtcXG4gNDUxOlxcdFxcbiA0NTI6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudCgoc3RydWN0IGZvbGlvICopcGFnZSkpO1xcbiA0NTM6XFx0XFx0fVxcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRyZXR1cm4gcmVmO1xcbiA0NTY6XFx0fVxcbiA0NTc6XFx0XFxuIDQ1ODpcXHRzdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG4gNDU5OlxcdHtcXG4gNDYwOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiA0NjE6XFx0XFx0aW50IG9yZGVyID0gZGF4X2VudHJ5X29yZGVyKGVudHJ5KTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0LypcXG4gNDY0OlxcdFxcdCAqIEZvbGlvIHNob3VsZCBoYXZlIGJlZW4gc3BsaXQgYmFjayB0byBvcmRlci0wIHBhZ2VzIGluXFxuIDQ2NTpcXHRcXHQgKiBkYXhfZm9saW9fcHV0KCkgd2hlbiB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZWlyXFxuIDQ2NjpcXHRcXHQgKiBmaW5hbCBtYXBwaW5nLlxcbiA0Njc6XFx0XFx0ICovXFxuIDQ2ODpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fb3JkZXIoZm9saW8pKTtcXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCkge1xcbiA0NzE6XFx0XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb3JkZXIpO1xcbiA0NzI6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbiA0NzM6XFx0XFx0fVxcbiA0NzQ6XFx0fVxcbiA0NzU6XFx0XFxuIDQ3NjpcXHRzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gNDc3OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA0Nzg6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBib29sIHNoYXJlZClcXG4gNDc5OlxcdHtcXG4gNDgwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XFxuIDQ4MTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNDgyOlxcdFxcbiA0ODM6XFx0XFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxcbiA0ODQ6XFx0XFx0XFx0cmV0dXJuO1xcbiA0ODU6XFx0XFxuIDQ4NjpcXHRcXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyBcXHUwMDI2IH4oc2l6ZSAtIDEpKTtcXG4gNDg3OlxcdFxcdGlmIChzaGFyZWQgXFx1MDAyNlxcdTAwMjYgKGZvbGlvLVxcdTAwM2VtYXBwaW5nIHx8IGRheF9mb2xpb19pc19zaGFyZWQoZm9saW8pKSkge1xcbiA0ODg6XFx0XFx0XFx0aWYgKGZvbGlvLVxcdTAwM2VtYXBwaW5nKVxcbiA0ODk6XFx0XFx0XFx0XFx0ZGF4X2ZvbGlvX21ha2Vfc2hhcmVkKGZvbGlvKTtcXG4gNDkwOlxcdFxcbiA0OTE6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFmb2xpby1cXHUwMDNlc2hhcmUpO1xcbiA0OTI6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGRheF9lbnRyeV9vcmRlcihlbnRyeSkgIT0gZm9saW9fb3JkZXIoZm9saW8pKTtcXG4gNDkzOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VzaGFyZSsrO1xcbiA0OTQ6XFx0XFx0fSBlbHNlIHtcXG4gNDk1OlxcdFxcdFxcdFdBUk5fT05fT05DRShmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuIDQ5NjpcXHRcXHRcXHRkYXhfZm9saW9faW5pdChlbnRyeSk7XFxuIDQ5NzpcXHRcXHRcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIDQ5ODpcXHRcXHRcXHRmb2xpby1cXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XFxuIDQ5OTpcXHRcXHRcXHRmb2xpby1cXHUwMDNlaW5kZXggPSBpbmRleDtcXG4gNTAwOlxcdFxcdH1cXG4gNTAxOlxcdH1cXG4gNTAyOlxcdFxcbiA1MDM6XFx0c3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIDUwNDpcXHRcXHRcXHRcXHRcXHRib29sIHRydW5jKVxcbiA1MDU6XFx0e1xcbiA1MDY6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcXG4gNTA5OlxcdFxcdFxcdHJldHVybjtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0ZGF4X2ZvbGlvX3B1dChmb2xpbyk7XFxuIDUxMjpcXHR9XFxuIDUxMzpcXHRcXG4gNTE0OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcXG4gNTE1OlxcdHtcXG4gNTE2OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiA1MTc6XFx0XFxuIDUxODpcXHRcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIDUxOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6NDQuNDE2OTE0MjU3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Nzg0ODU3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBEZXRhaWxzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHVzYWdlIG9mIGBfZGVmZXJyZWRfbGlzdGAgd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB3aGVyZSBpdCByZXNpZGVzIGNvbmNlcm5pbmcgYHN0cnVjdCBmb2xpb2AsIHNpbmNlIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UuIEFsdGVybmF0aXZlbHksIEkga25vdyBgcHJlcF9jb21wb3VuZF9wYWdlYCBpcyBpbnZvbHZlZCBpbiBwYWdlIGFsbG9jYXRpb24sIHNvIHRoYXQncyBhbm90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGFyZWEuIEkgdGhpbmsgc2VhcmNoaW5nIGZvciBib3RoIGZ1bmN0aW9uIG5hbWVzLCBgcHJlcF9jb21wb3VuZF9wYWdlYCBhbmQgdGhlIHZhcmlhYmxlIGBfZGVmZXJyZWRfbGlzdGAgaXMgdGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoLiBJdCBzaG91bGQgcXVpY2tseSBzaG93IG1lIHRoZWlyIGludGVyYWN0aW9ucywgb3IgcGlucG9pbnQgdGhlIHN0cnVjdHVyZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODkyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo0Ni45OTU0MDQyMjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzE4MzYyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcF9jb21wb3VuZF9wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG4tLVxcbmZzL2RheC5jLTQ3MC1cXHRpZiAob3JkZXIgXFx1MDAzZSAwKSB7XFxuZnMvZGF4LmM6NDcxOlxcdFxcdHByZXBfY29tcG91bmRfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9yZGVyKTtcXG5mcy9kYXguYy00NzItXFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTE3NTY9c3RydWN0IGlub2RlO1xcbmluY2x1ZGUvbGludXgvbW0uaC0xNzU3LVxcbmluY2x1ZGUvbGludXgvbW0uaDoxNzU4OmV4dGVybiB2b2lkIHByZXBfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTc1OS1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDk2PXN0YXRpYyB2b2lkIGtob19pbml0X2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTUwOS1cXHRpZiAob3JkZXIgXFx1MDAzZSAwKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NTEwOlxcdFxcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy01MTEtfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTE4NDU9c3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xODg1LVxcdGlmIChvcmRlcilcXG5tbS9jb21wYWN0aW9uLmM6MTg4NjpcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UoXFx1MDAyNmRzdC1cXHUwMDNlcGFnZSwgb3JkZXIpO1xcbm1tL2NvbXBhY3Rpb24uYy0xODg3LVxcdGNjLVxcdTAwM2Vucl9mcmVlcGFnZXMgLT0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzY0MT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MjctXFx0XFx0aWYgKG5ld19vcmRlcikge1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzcyODpcXHRcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UobmV3X2hlYWQsIG5ld19vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zNzI5LVxcdFxcdFxcdGZvbGlvX3NldF9sYXJnZV9ybWFwcGFibGUobmV3X2ZvbGlvKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zMTc4PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2ZvbGlvX2luaXRfdm1lbW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMxODQtXFx0LypcXG5tbS9odWdldGxiLmM6MzE4NTpcXHQgKiBUaGlzIGlzIGFuIG9wZW4tY29kZWQgcHJlcF9jb21wb3VuZF9wYWdlKCkgd2hlcmVieSB3ZSBhdm9pZFxcbm1tL2h1Z2V0bGIuYy0zMTg2LVxcdCAqIHdhbGtpbmcgcGFnZXMgdHdpY2UgYnkgaW5pdGlhbGl6aW5nL3ByZXBhcmluZytmcmVlemluZyB0aGVtIGluIHRoZVxcbi0tXFxubW0vaHVnZXRsYi5jPTM5NDY9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk4Ni1cXHRcXHRcXHRjbGVhcl9jb21wb3VuZF9oZWFkKHBhZ2UpO1xcbm1tL2h1Z2V0bGIuYzozOTg3OlxcdFxcdFxcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBkc3QtXFx1MDAzZW9yZGVyKTtcXG5tbS9odWdldGxiLmMtMzk4OC1cXG4tLVxcbm1tL21lbXJlbWFwLmM9NDgxPXZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxcbi0tXFxubW0vbWVtcmVtYXAuYy01MjYtXFx0aWYgKG9yZGVyKVxcbm1tL21lbXJlbWFwLmM6NTI3OlxcdFxcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XFxubW0vbWVtcmVtYXAuYy01MjgtfVxcbi0tXFxubW0vbW1faW5pdC5jPTEwNDg9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA1OC1cXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxcbm1tL21tX2luaXQuYzoxMDU5OlxcdCAqIHByZXBfY29tcG91bmRfcGFnZSgpIGRvZXMgbm90IHRha2UgY2FyZSBvZiB0aGF0LCBzbyBpbnN0ZWFkIHdlXFxubW0vbW1faW5pdC5jOjEwNjA6XFx0ICogb3Blbi1jb2RlIHByZXBfY29tcG91bmRfcGFnZSgpIHNvIHdlIGNhbiB0YWtlIGNhcmUgb2YgaW5pdGlhbGl6aW5nXFxubW0vbW1faW5pdC5jLTEwNjEtXFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY3OT1zdGF0aWMgaW5saW5lIGJvb2wgcGNwX2FsbG93ZWRfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcwMS1cXG5tbS9wYWdlX2FsbG9jLmM6NzAyOnZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vcGFnZV9hbGxvYy5jLTcwMy17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTg3Nj1zdGF0aWMgdm9pZCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xODgxLVxcdGlmIChvcmRlciBcXHUwMDI2XFx1MDAyNiAoZ2ZwX2ZsYWdzIFxcdTAwMjYgX19HRlBfQ09NUCkpXFxubW0vcGFnZV9hbGxvYy5jOjE4ODI6XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcXG5tbS9wYWdlX2FsbG9jLmMtMTg4My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6NDguODI3MjQ3NTMzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTU0MDgyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gYHByZXBfY29tcG91bmRfcGFnZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGNvbXBvdW5kIHBhZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBMaW51eCBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggdGhlIGBwcmVwX2NvbXBvdW5kX3BhZ2VgIGZ1bmN0aW9uLiBJIGtub3cgaXQncyBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgc28gSSdsbCBnbyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gdGhlcmUuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUga2VybmVsIHByZXBhcmVzIGEgcGFnZSBmb3IgdXNlIGFzIHBhcnQgb2YgYSBsYXJnZXIsIGNvbXBvdW5kIHBhZ2Ugc3RydWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBsaW5rcyB0aGUgaGVhZCBwYWdlIHRvIGl0cyB0YWlsIHBhZ2VzIGFuZCB3aGF0IGluaXRpYWxpemF0aW9ucyBvciBkYXRhIHNldHVwIGFyZSBwZXJmb3JtZWQuIEknbSBiZXR0aW5nIHRoZXJlJ3Mgc29tZSBrZXkgaW50ZXJwbGF5IHdpdGggdGhlIHBhZ2UgZmxhZ3MgYW5kIHBvc3NpYmx5IHRoZSBgcGFnZWAgc3RydWN0dXJlIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGlzIHNldHVwIGlzIGNydWNpYWwgZm9yIGRpYWdub3NpbmcgYW55IHBhZ2UgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gaXNzdWVzIEkgbWlnaHQgZW5jb3VudGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo1MS4yMjI2NTk2MzFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0ICovXFxuIDcwMTpcXHRcXG4gNzAyOlxcdHZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIDcwMzpcXHR7XFxuIDcwNDpcXHRcXHRpbnQgaTtcXG4gNzA1OlxcdFxcdGludCBucl9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuIDcwNjpcXHRcXG4gNzA3OlxcdFxcdF9fU2V0UGFnZUhlYWQocGFnZSk7XFxuIDcwODpcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKylcXG4gNzA5OlxcdFxcdFxcdHByZXBfY29tcG91bmRfdGFpbChwYWdlICsgaSwgcGFnZSwgb3JkZXIpO1xcbiA3MTA6XFx0XFxuIDcxMTpcXHRcXHRwcmVwX2NvbXBvdW5kX2hlYWQocGFnZSwgb3JkZXIpO1xcbiA3MTI6XFx0fVxcbiA3MTM6XFx0XFxuIDcxNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2J1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIDcxNTpcXHR7XFxuIDcxNjpcXHRcXHRzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTtcXG4gNzE3OlxcdFxcdF9fU2V0UGFnZUJ1ZGR5KHBhZ2UpO1xcbiA3MTg6XFx0fVxcbiA3MTk6XFx0XFxuIDcyMDpcXHQjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG4gNzIxOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxcbiA3MjI6XFx0e1xcbiA3MjM6XFx0XFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyA9IGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbDtcXG4gNzI0OlxcdFxcbiA3MjU6XFx0XFx0cmV0dXJuIHVubGlrZWx5KGNhcGMpIFxcdTAwMjZcXHUwMDI2XFxuIDcyNjpcXHRcXHRcXHQhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRCkgXFx1MDAyNlxcdTAwMjZcXG4gNzI3OlxcdFxcdFxcdCFjYXBjLVxcdTAwM2VwYWdlIFxcdTAwMjZcXHUwMDI2XFxuIDcyODpcXHRcXHRcXHRjYXBjLVxcdTAwM2V6b25lID09IHpvbmUgPyBjYXBjIDogTlVMTDtcXG4gNzI5OlxcdH1cXG4gNzMwOlxcdFxcbiA3MzE6XFx0c3RhdGljIGlubGluZSBib29sXFxuIDczMjpcXHRjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIDczMzpcXHRcXHRcXHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcXG4gNzM0OlxcdHtcXG4gNzM1OlxcdFxcdGlmICghY2FwYyB8fCBvcmRlciAhPSBjYXBjLVxcdTAwM2VvcmRlcilcXG4gNzM2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cXG4gNzM5OlxcdFxcdGlmIChpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6NTEuMjIzMTE5NDAxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMzQ3MjA4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhhdCBcInByZXBcXF9jb21wb3VuZFxcX2hlYWRcIiBmdW5jdGlvbi4gSGVyZSdzIG15IHRha2Ugb24gd2hhdCdzIGdvaW5nIG9uLCB0aGlua2luZyBsaWtlIGFuIGV4cGVydCBpbiBbYXNzdW1pbmcgdGhlIGZpZWxkLCBsZXQncyBzYXkgTkxQLCBidXQgeW91J2xsIG5lZWQgdG8gc3BlY2lmeSFdLlxuXG4qKkFuYWx5emluZyBgcHJlcF9jb21wb3VuZF9oZWFkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBiaWcgY2x1ZS4gXCJwcmVwXCIgbGlrZWx5IGluZGljYXRlcyBzb21lIHNvcnQgb2YgcHJlcHJvY2Vzc2luZyBzdGVwLCBhbmQgXCJjb21wb3VuZFxcX2hlYWRcIiBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIGNvcmUgb2Ygd2hhdCBpdCdzIGRlYWxpbmcgd2l0aCDigJMgdGhlIGhlYWQgd29yZCB3aXRoaW4gYSBjb21wb3VuZCBub3VuIHBocmFzZS4gTXkgaW1tZWRpYXRlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHRpY2tpbmc6IFdoYXQgdHlwZSBvZiBkYXRhIGFtIEkgZXhwZWN0aW5nPyBMaWtlbHkgdGV4dCwgYW5kIHNwZWNpZmljYWxseSB0ZXh0IHRoYXQgaW5jbHVkZXMgY29tcG91bmQgbm91biBwaHJhc2VzLiBJcyBpdCBhbHJlYWR5IHRva2VuaXplZCwgb3IgZG8gSSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQ/IFdoYXQncyB0aGUgZ29hbCBoZXJlPyBNb3N0IGxpa2VseSB0byBpZGVudGlmeSBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5IG9yIGV4dHJhY3QgdGhlIGhlYWQgbm91biBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuXG5JJ20gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGRvIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcuIEl0IG1heTpcblxuKiAgICoqUGFyc2UgdGhlIGNvbXBvdW5kOioqIEl0J3MgZ290IHRvICp1bmRlcnN0YW5kKiB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB3b3JkcyBpbiB0aGUgY29tcG91bmQsIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgXCJoZWFkXCIuIERvZXMgaXQgdXNlIGRlcGVuZGVuY3kgcGFyc2luZywgc29tZSBraW5kIG9mIHJ1bGUtYmFzZWQgYXBwcm9hY2gsIG9yIG1heWJlIGEgc3RhdGlzdGljYWwgbW9kZWwgdHJhaW5lZCBvbiBjb21wb3VuZHM/IEkgbmVlZCB0byBrbm93IGhvdyBpdCdzIHJlY29nbml6aW5nIHRoZXNlIHN0cnVjdHVyZXMuXG4qICAgKipIYW5kbGUgQW1iaWd1aXR5OioqIENvbXBvdW5kIG5vdW4gcGhyYXNlcyBjYW4gYmUgdHJpY2t5LiBcIkRvZyBob3VzZVwiIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHdoYXQgYWJvdXQgXCJkb2cgdHJhaW5pbmcgc2Vzc2lvblwiPyBEb2VzIGl0IGhhdmUgYSBtZWNoYW5pc20gdG8gZGlzYW1iaWd1YXRlLCBwZXJoYXBzIGJ5IGNoZWNraW5nIHBhcnQtb2Ytc3BlZWNoIHRhZ3Mgb3IgY29udGV4dHVhbCBjbHVlcz8gT3IgaXMgaXQgYXNzdW1pbmcgYSBzcGVjaWZpYyBzdHJ1Y3R1cmU/XG4qICAgKipOb3JtYWxpemF0aW9uL1N0YW5kYXJkaXphdGlvbjoqKiBBZnRlciBpZGVudGlmeWluZyB0aGUgaGVhZCwgZG9lcyBpdCBwZXJmb3JtIGFueSBub3JtYWxpemF0aW9uPyBUaGluZ3MgbGlrZSBjb252ZXJ0aW5nIGFsbCB3b3JkcyB0byBsb3dlcmNhc2UsIGxlbW1hdGl6aW5nLCBvciBldmVuIHN0ZW1taW5nPyBUaGlzIGNvdWxkIGJlIGNydWNpYWwgZm9yIGNvbnNpc3RlbmN5IGluIGRvd25zdHJlYW0gdGFza3MuXG4qICAgKipFZGdlIENhc2VzOioqIEknbSBjdXJpb3VzIGFib3V0IGhvdyBpdCBoYW5kbGVzIG11bHRpLXdvcmQgaGVhZHMgKGUuZy4sIFwiaGlnaCBzY2hvb2wgcHJpbmNpcGFsXCIpLiBXaGF0IGlmIHRoZSBoZWFkIGl0c2VsZiBpcyBhIGNvbXBvdW5kPyBEb2VzIGl0IHJlY3Vyc2l2ZWx5IGNhbGwgaXRzZWxmPyBEb2VzIGl0IGRlYWwgd2l0aCBwaHJhc2VzIHRoYXQgKmxvb2sqIGxpa2UgY29tcG91bmRzIGJ1dCBhcmVuJ3QgKGUuZy4sIFwidmVyeSBnb29kIHN0dWRlbnRcIik/IFdoYXQgYWJvdXQgaWRpb21zP1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIGl0ICpjYW4ndCogaWRlbnRpZnkgYSBoZWFkPyBEb2VzIGl0IHRocm93IGFuIGVycm9yLCByZXR1cm4gdGhlIG9yaWdpbmFsIHBocmFzZSwgb3IgYXNzaWduIGEgZGVmYXVsdD8gSG93IHJvYnVzdCBpcyB0aGlzIGZ1bmN0aW9uP1xuXG5Fc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSAqaG93KiBhbmQgKndoeSogYmVoaW5kIHRoaXMgZnVuY3Rpb24uIFdoYXQncyB0aGUgdW5kZXJseWluZyB0aGVvcnk/IFdoYXQga2luZCBvZiByZXN1bHRzIGRvZXMgaXQgcHJvdmlkZT8gSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcywgYnV0IHRoaXMgaXMgdGhlIHNvcnQgb2YgbWVudGFsIGZyYW1ld29yayBJJ20gYnVpbGRpbmcgYmVmb3JlIEkgZXZlbiBsb29rIGF0IHRoZSBjb2RlLiBJIGFudGljaXBhdGUgYSB3ZWxsLWRlc2lnbmVkIGZ1bmN0aW9uIHRoYXQgY29udHJpYnV0ZXMgYSBrZXkgc3RlcCBpbiBhIGxhcmdlciBwaXBlbGluZSBmb3IgbmF0dXJhbCBsYW5ndWFnZSBwcm9jZXNzaW5nLCBwZXJoYXBzIGZvciBpbmZvcm1hdGlvbiBleHRyYWN0aW9uLCB0b3BpYyBtb2RlbGluZywgb3IgYSBzaW1pbGFyIHRhc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjU1LjQ1Nzg0MzE5OFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4Mjk4MzczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmVwX2NvbXBvdW5kX2hlYWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTMxNzg9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMzE5My1cXHRodWdldGxiX2ZvbGlvX2luaXRfdGFpbF92bWVtbWFwKGZvbGlvLCBoLCAxLCBucl9wYWdlcyk7XFxubW0vaHVnZXRsYi5jOjMxOTQ6XFx0cHJlcF9jb21wb3VuZF9oZWFkKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgaHVnZV9wYWdlX29yZGVyKGgpKTtcXG5tbS9odWdldGxiLmMtMzE5NS19XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTc2ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqcGFnZV9ybWFwcGFibGVfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc3Mi1cXG5tbS9pbnRlcm5hbC5oOjc3MzpzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF9oZWFkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vaW50ZXJuYWwuaC03NzQte1xcbi0tXFxubW0vbW1faW5pdC5jPTEwNDg9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA3MC1cXHR9XFxubW0vbW1faW5pdC5jOjEwNzE6XFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcXG5tbS9tbV9pbml0LmMtMTA3Mi19XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzAyPXZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzEwLVxcbm1tL3BhZ2VfYWxsb2MuYzo3MTE6XFx0cHJlcF9jb21wb3VuZF9oZWFkKHBhZ2UsIG9yZGVyKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzEyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6NTcuMTQwODQyMDIxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjkwNzM3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1tL2ludGVybmFsLmhgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBtbS9pbnRlcm5hbC5oYCBoZWFkZXIsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3NzMuIEknbSBndWVzc2luZyB0aGF0IHBhcnRpY3VsYXIgc3BvdCBpcyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBJIGhhdmUgYSBodW5jaCBhYm91dCB3aGF0J3MgZ29pbmcgb24sIGJ1dCBJIG5lZWQgdG8gc2VlIGl0IGluIGNvZGUuIEtub3dpbmcgdGhlIGludHJpY2FjaWVzIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBzb21ldGhpbmcgaW4gdGhhdCB2aWNpbml0eSB3aWxsIHN1cmVseSBiZSByZWxhdGVkIHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBtZXRhZGF0YSBoYW5kbGluZywgb3IgZXZlbiBzb21lIGZvcm0gb2YgZnJlZWxpc3QgbWFuaXB1bGF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo1OS4xMDk5MTkwODFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcbiA3NjE6XFx0XFx0cmV0dXJuIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxuIDc2MjpcXHR9XFxuIDc2MzpcXHRcXG4gNzY0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpwYWdlX3JtYXBwYWJsZV9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gNzY1OlxcdHtcXG4gNzY2OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSAoc3RydWN0IGZvbGlvICopcGFnZTtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0aWYgKGZvbGlvIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiA3Njk6XFx0XFx0XFx0Zm9saW9fc2V0X2xhcmdlX3JtYXBwYWJsZShmb2xpbyk7XFxuIDc3MDpcXHRcXHRyZXR1cm4gZm9saW87XFxuIDc3MTpcXHR9XFxuIDc3MjpcXHRcXG4gNzczOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gNzc0OlxcdHtcXG4gNzc1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSAoc3RydWN0IGZvbGlvICopcGFnZTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0Zm9saW9fc2V0X29yZGVyKGZvbGlvLCBvcmRlcik7XFxuIDc3ODpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlX2xhcmdlX21hcGNvdW50LCAtMSk7XFxuIDc3OTpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEFHRV9NQVBDT1VOVCkpXFxuIDc4MDpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlX25yX3BhZ2VzX21hcHBlZCwgMCk7XFxuIDc4MTpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1fSUQpKSB7XFxuIDc4MjpcXHRcXHRcXHRmb2xpby1cXHUwMDNlX21tX2lkcyA9IDA7XFxuIDc4MzpcXHRcXHRcXHRmb2xpby1cXHUwMDNlX21tX2lkX21hcGNvdW50WzBdID0gLTE7XFxuIDc4NDpcXHRcXHRcXHRmb2xpby1cXHUwMDNlX21tX2lkX21hcGNvdW50WzFdID0gLTE7XFxuIDc4NTpcXHRcXHR9XFxuIDc4NjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIHx8IG9yZGVyIFxcdTAwM2UgMSkge1xcbiA3ODc6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2Zm9saW8tXFx1MDAzZV9waW5jb3VudCwgMCk7XFxuIDc4ODpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlX2VudGlyZV9tYXBjb3VudCwgLTEpO1xcbiA3ODk6XFx0XFx0fVxcbiA3OTA6XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSlcXG4gNzkxOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QpO1xcbiA3OTI6XFx0fVxcbiA3OTM6XFx0XFxuIDc5NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxcbiA3OTU6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gNzk2OlxcdHtcXG4gNzk3OlxcdFxcdHRhaWwtXFx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XFxuIDc5ODpcXHRcXHRzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7XFxuIDc5OTpcXHRcXHRWTV9XQVJOX09OX09OQ0UodGFpbC1cXHUwMDNlcHJpdmF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjU5LjExMDExNDU0MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjgzMTA0NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbmQgUmVtb3ZpbmcgUmVkdW5kYW50IExpc3QgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBgcHJlcF9jb21wb3VuZF9oZWFkYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5OlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF9oZWFkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG57XG5cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSAoc3RydWN0IGZvbGlvICopcGFnZTtcblxuXHRmb2xpb19zZXRfb3JkZXIoZm9saW8sIG9yZGVyKTtcblx0YXRvbWljX3NldChcdTAwMjZmb2xpby1cdTAwM2VfbGFyZ2VfbWFwY291bnQsIC0xKTtcblx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BBR0VfTUFQQ09VTlQpKVxuXHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX25yX3BhZ2VzX21hcHBlZCwgMCk7XG5cdGlmIChJU19FTkFCTEVEKENPTkZJR19NTV9JRCkpIHtcblx0XHRmb2xpby1cdTAwM2VfbW1faWRzID0gMDtcblx0XHRmb2xpby1cdTAwM2VfbW1faWRfbWFwY291bnRbMF0gPSAtMTtcblx0XHRmb2xpby1cdTAwM2VfbW1faWRfbWFwY291bnRbMV0gPSAtMTtcblx0fVxuXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIHx8IG9yZGVyIFx1MDAzZSAxKSB7XG5cdFx0YXRvbWljX3NldChcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQsIDApO1xuXHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2VudGlyZV9tYXBjb3VudCwgLTEpO1xuXHR9XG5cdGlmIChvcmRlciBcdTAwM2UgMSlcblx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG59XG5gYGBcblxuTXkgY29uY2VybiB3YXMgdGhpcyByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gaW4gYGRheF9mb2xpb19pbml0KClgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO2AgY2FsbHMgYHByZXBfY29tcG91bmRfaGVhZGAuIEFuZCwgY3JpdGljYWxseSwgYHByZXBfY29tcG91bmRfaGVhZGAgKmFscmVhZHkqIGhhbmRsZXMgaW5pdGlhbGl6aW5nIHRoZSBgZm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3RgIGlmIGBvcmRlciBcdTAwM2UgMWAuIE1lYW5pbmcgdGhlIGR1cGxpY2F0ZSBpbml0aWFsaXphdGlvbiBpbiBgZGF4X2ZvbGlvX2luaXQoKWAgd2FzIGp1c3QgcGxhaW4gcmVkdW5kYW50LlxuXG5Ob3csIHRoZSBtYWluIGNvbmNlcm4gaGVyZSBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MuIEJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJJ3ZlIHdhbGtlZCB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LlxuXG4qICAgYHByZXBfY29tcG91bmRfaGVhZGAgKmRvZXMqIGluaXRpYWxpemUgYGZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0YCB3aGVuIGBvcmRlciBcdTAwM2UgMWAuXG4qICAgUmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBpbiBgZGF4X2ZvbGlvX2luaXRgICpkb2Vzbid0KiBsZWF2ZSBhbnkgZmllbGQgdW5pbml0aWFsaXplZC5cbiogICBObyB1c2VyLXNwYWNlIGNvcHksIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgb3IgYnJhbmNoLCBubyBhbGxvY2F0aW9uIGNoYW5nZXMsIG5vdGhpbmcgdGhhdCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha3MuXG4qICAgU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scyBzaG91bGQgYmUgYWRlcXVhdGUgaGVyZTsgS01TQU4gaXNuJ3QgbmVlZGVkLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIGNsZWFuIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhlIGd1aWRlbGluZXMgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYDogdGhlIHBhdGNoIGF2b2lkcyBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLCBhbmQgYWxsIHRvdWNoZWQgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQuIEl0J3MgYSB0ZXh0Ym9vayBjbGVhbnVwLlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiB0aGlzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTcsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjg6MDQuMzkzMjIyODI5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgcmVkdW5kYW50IGBJTklUX0xJU1RfSEVBRChcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KWAgY2FsbCBmcm9tIGBkYXhfZm9saW9faW5pdCgpYC4gVGhlIHByZWNlZGluZyBjYWxsIHRvIGBwcmVwX2NvbXBvdW5kX3BhZ2UoKWAgaW50ZXJuYWxseSBpbnZva2VzIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAsIHdoaWNoIGFscmVhZHkgaW5pdGlhbGl6ZXMgYF9kZWZlcnJlZF9saXN0YCB3aGVuIGBvcmRlciBcXHUwMDNlIDFgLiBSZW1vdmluZyB0aGlzIHJlZHVuZGFudCBjYWxsIGRvZXMgbm90IGxlYXZlIGFueSBzdHJ1Y3QgZmllbGRzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGFmZmVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgYW5kIGludHJvZHVjZXMgbm8gaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBgSU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdClgIGNhbGwgZnJvbSBgZGF4X2ZvbGlvX2luaXQoKWAuIFRoZSBwcmVjZWRpbmcgY2FsbCB0byBgcHJlcF9jb21wb3VuZF9wYWdlKClgIGludGVybmFsbHkgaW52b2tlcyBgcHJlcF9jb21wb3VuZF9oZWFkKClgLCB3aGljaCBhbHJlYWR5IGluaXRpYWxpemVzIGBfZGVmZXJyZWRfbGlzdGAgd2hlbiBgb3JkZXIgXFx1MDAzZSAxYC4gUmVtb3ZpbmcgdGhpcyByZWR1bmRhbnQgY2FsbCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBhZmZlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7f6g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 05:08:31 +0000 UTC FinishedAt: 2026-09-04 05:28:05 +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": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_DAX", "ZONE_DEVICE", "FS_DAX_PMD", "BLK_DEV_PMEM", "MEMORY_HOTREMOVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_DAX", "ZONE_DEVICE", "FS_DAX_PMD", "BLK_DEV_PMEM", "MEMORY_HOTREMOVE" ], "series_id": "d92cfc9b-85e2-4b0b-bb16-94b02f48c26b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "dax_folio_init", "dax_associate_entry", "dax_insert_entry", "dax_iomap_fault" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtGU19EQVhfUE1EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfUE1FTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF4X2ZvbGlvX2luaXQmIzM0OywKICAgICYjMzQ7ZGF4X2Fzc29jaWF0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYXhfaW5zZXJ0X2VudHJ5JiMzNDssCiAgICAmIzM0O2RheF9pb21hcF9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSByZWR1bmRhbnQgYElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KWAgY2FsbCBmcm9tIGBkYXhfZm9saW9faW5pdCgpYC4gVGhlIHByZWNlZGluZyBjYWxsIHRvIGBwcmVwX2NvbXBvdW5kX3BhZ2UoKWAgaW50ZXJuYWxseSBpbnZva2VzIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAsIHdoaWNoIGFscmVhZHkgaW5pdGlhbGl6ZXMgYF9kZWZlcnJlZF9saXN0YCB3aGVuIGBvcmRlciBcdTAwM2UgMWAuIFJlbW92aW5nIHRoaXMgcmVkdW5kYW50IGNhbGwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgYWZmZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBhbmQgaW50cm9kdWNlcyBubyBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRheF9mb2xpb19pbml0YCBpbiBgZnMvZGF4LmNgIHRvIHJlbW92ZSByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb2YgYGZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0YCB3aGVuIGNhbGxpbmcgYHByZXBfY29tcG91bmRfcGFnZWAuIERBWCBmb2xpbyBpbml0aWFsaXphdGlvbiBhbmQgZmF1bHQgaGFuZGxpbmcgYXJlIHBhcnQgb2YgdGhlIGNvcmUgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGR1cmluZyBEQVggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg1N2M1MWU2NGI5ZWNjMTRkNWZmYWE4MDkzNmU5ZGFhZjgxNWE5OTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjI2OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcbmluZGV4IDZiYTUwMTQyZWViMmYuLmRhZDRlZmVhNzk2NDAgMTAwNjQ0XG4tLS0gYS9mcy9kYXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGF4LmNcbkBAIC00NjksOCAmIzQzOzQ2OSw2IEBAIHN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxuIFxuIFx0aWYgKG9yZGVyIFx1MDAzZSAwKSB7XG4gXHRcdHByZXBfY29tcG91bmRfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBvcmRlcik7XG4tXHRcdGlmIChvcmRlciBcdTAwM2UgMSlcbi1cdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG4gXHRcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbiBcdH1cbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfREFYJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0ZTX0RBWF9QTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9QTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfZm9saW9faW5pdCYjMzQ7LAogICAgJiMzNDtkYXhfYXNzb2NpYXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O2RheF9pbnNlcnRfZW50cnkmIzM0OywKICAgICYjMzQ7ZGF4X2lvbWFwX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkYXhfZm9saW9faW5pdGAgaW4gYGZzL2RheC5jYCB0byByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIGBmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdGAgd2hlbiBjYWxsaW5nIGBwcmVwX2NvbXBvdW5kX3BhZ2VgLiBEQVggZm9saW8gaW5pdGlhbGl6YXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBkdXJpbmcgREFYIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NTdjNTFlNjRiOWVjYzE0ZDVmZmFhODA5MzZlOWRhYWY4MTVhOTk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNToyNjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmMKaW5kZXggNmJhNTAxNDJlZWIyZi4uZGFkNGVmZWE3OTY0MCAxMDA2NDQKLS0tIGEvZnMvZGF4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGF4LmMKQEAgLTQ2OSw4ICYjNDM7NDY5LDYgQEAgc3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpCiAKIAlpZiAob3JkZXIgJmd0OyAwKSB7CiAJCXByZXBfY29tcG91bmRfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlLCBvcmRlcik7Ci0JCWlmIChvcmRlciAmZ3Q7IDEpCi0JCQlJTklUX0xJU1RfSEVBRCgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCk7CiAJCVdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTsKIAl9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQmIzM5O3Mgd29ydGggdGhyb3dpbmcgYXQgc3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRvIGEgcHJvcGVyIHJpc2sgYW5hbHlzaXMgZmlyc3Qg4oCTIG5vIHBvaW50IGluIHdhc3RpbmcgdGltZSBpZiB0aGlzIGlzIGxvdy1pbXBhY3QuIFRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgY29udGFpbmVkOyBpdCYjMzk7cyB3aXRoaW4gYGZzL2RheC5jYCwgc28gaXQgc2VlbXMgbGlrZSBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgREFYIChEaXJlY3QgQWNjZXNzKSBmaWxlc3lzdGVtIHN0dWZmLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBgZGF4X2ZvbGlvX2luaXRgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIHJlbW92YWwgb2YgYSBsaW5lLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHNldmVyaXR5LiBUaGlzIGxvb2tzIGxpa2UgYmVuaWduIG9yIFFBL3Rlc3RpbmcgcmVsYXRlZC4gSSB3aWxsIGJlIHN1cmUgdG8gZG91YmxlIGNoZWNrIHRoaXMuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MuIE5vIGhpZ2gtc2V2ZXJpdHkgYWN0aW9ucyBvciBhbnl0aGluZyBsaWtlIHRoYXQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGRheF9mb2xpb19pbml0YCBmdW5jdGlvbiBkb2VzIGFuZCB3aGVyZSBpdCYjMzk7cyB1c2VkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCB0aGlzIHBhdGNoIHdpdGhpbiBgZnMvZGF4LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgaXNzdWVzLiBJJiMzOTtsbCBhbHNvIGNoZWNrIHRoZSBjYWxsZXJzIHRvIHVuZGVyc3RhbmQgaG93IGBkYXhfZm9saW9faW5pdGAgaXMgY2FsbGVkIGFuZCB3aGF0IGl0JiMzOTtzIHVzZWQgZm9yLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFyb3VuZCBgZGF4X2ZvbGlvX2luaXRgIGlzIGNyaXRpY2FsLiBPbmNlIEkmIzM5O3ZlIGdvdCB0aGF0IHBpY3R1cmUsIEkgY2FuIHRoZW4gYXNzZXNzIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIHJlYXNvbmFibHkgdHJpZ2dlciBhbnkgaW50ZXJlc3RpbmcgY29kZSBwYXRocyBvciBlZGdlIGNhc2VzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB3aGljaCBtaWdodCBtZXJpdCBmdXp6aW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHRvdWNoZXMgbWVtb3J5IGFsbG9jYXRpb24sIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcywgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gQWZ0ZXIgdGhhdCwgSSYjMzk7bGwgZ28gdGhyb3VnaCBzdGFuZGFyZCB0b29sIGNhbGxzIHRvIHByb3ZpZGUgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ZvbGlvX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz00MzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRheF9mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9kYXguYy00NTctXG5mcy9kYXguYzo0NTg6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG5mcy9kYXguYy00NTkte1xuLS1cbmZzL2RheC5jPTQ3Nj1zdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy00OTUtXHRcdFdBUk5fT05fT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKTtcbmZzL2RheC5jOjQ5NjpcdFx0ZGF4X2ZvbGlvX2luaXQoZW50cnkpO1xuZnMvZGF4LmMtNDk3LVx0XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIGxpbmVzIDQ1MC01MjAgb2YgYGZzL2RheC5jYDoKCioqRGl2aW5nIGludG8gdGhlIERBWCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDQ1MCB0byA1MjAgb2YgYGZzL2RheC5jYC4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiwga25vd2luZyB0aGUgZmlsZSwgaXMgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBmYWlybHkgbG93LWxldmVsIERBWCAoRGlyZWN0IEFjY2Vzcykgb3BlcmF0aW9uIG9yIHBlcmhhcHMgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBwZXJzaXN0ZW50IG1lbW9yeS4gR2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGNvbnRleHQgd2l0aGluIHRoZSBmaWxlLCBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGJsb2NrIGRldmljZSBvciBwYWdlIGNhY2hlLCBidXQgc3BlY2lmaWNhbGx5IGluIHRoZSBvcHRpbWl6ZWQgY29udGV4dCB0aGF0IERBWCBhZmZvcmRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyByZWxhdGluZyB0byBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5IGFuZCBob3cgdGhlIGNvZGUgbWFuYWdlcyB0aGVzZSBkaXJlY3QgbWFwcGluZ3MuCgpJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc28gSSYjMzk7bGwgYmUgc2tpbW1pbmcgZm9yIGFueSBmdW5jdGlvbiBjYWxscyB0aGF0IGdpdmUgbWUgYSBjb250ZXh0LCBwZXJoYXBzIGEgZGF0YSBzdHJ1Y3R1cmUgbGlrZSBgc3RydWN0IGlub2RlYCwgYHN0cnVjdCBhZGRyZXNzX3NwYWNlYCwgb3IgYHN0cnVjdCBwYWdlYC4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGBwZm5fdGAgb3IgYHBtZF90YCBtYW5pcHVsYXRpb25zLCBhcyB0aGlzIHdvdWxkIHN1Z2dlc3QgZGlyZWN0IG1lbW9yeSBvcGVyYXRpb25zLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIGRlYWxpbmcgd2l0aCBEQVgtc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBjcmVhdGluZyBwZXJzaXN0ZW50IG1lbW9yeSBtYXBwaW5ncywgbWFuYWdpbmcgdGhlIGNhY2hlIGNvaGVyZW5jeSBpc3N1ZXMsIGFuZCBoYW5kbGluZyB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHNlZ21lbnQgaXMgYWJvdXQgc2V0dGluZyB1cCBvciBjbGVhbmluZyB1cCBkaXJlY3QgYWNjZXNzLCBvciBwZXJoYXBzIGhvdyB0aGUgc3lzdGVtIGludGVncmF0ZXMgd2l0aCB0aGUgdHJhZGl0aW9uYWwgcGFnZSBjYWNoZSBpbiBEQVggb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTtcbiA0NTE6XHRcbiA0NTI6XHRcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudCgoc3RydWN0IGZvbGlvICopcGFnZSkpO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0cmV0dXJuIHJlZjtcbiA0NTY6XHR9XG4gNDU3Olx0XG4gNDU4Olx0c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG4gNDU5Olx0e1xuIDQ2MDpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gNDYxOlx0XHRpbnQgb3JkZXIgPSBkYXhfZW50cnlfb3JkZXIoZW50cnkpO1xuIDQ2MjpcdFxuIDQ2MzpcdFx0LypcbiA0NjQ6XHRcdCAqIEZvbGlvIHNob3VsZCBoYXZlIGJlZW4gc3BsaXQgYmFjayB0byBvcmRlci0wIHBhZ2VzIGluXG4gNDY1Olx0XHQgKiBkYXhfZm9saW9fcHV0KCkgd2hlbiB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZWlyXG4gNDY2Olx0XHQgKiBmaW5hbCBtYXBwaW5nLlxuIDQ2NzpcdFx0ICovXG4gNDY4Olx0XHRXQVJOX09OX09OQ0UoZm9saW9fb3JkZXIoZm9saW8pKTtcbiA0Njk6XHRcbiA0NzA6XHRcdGlmIChvcmRlciBcdTAwM2UgMCkge1xuIDQ3MTpcdFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO1xuIDQ3MjpcdFx0XHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XG4gNDczOlx0XHR9XG4gNDc0Olx0fVxuIDQ3NTpcdFxuIDQ3NjpcdHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDQ3NzpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNDc4Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGJvb2wgc2hhcmVkKVxuIDQ3OTpcdHtcbiA0ODA6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XG4gNDgxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0ODI6XHRcbiA0ODM6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA0ODQ6XHRcdFx0cmV0dXJuO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MgXHUwMDI2IH4oc2l6ZSAtIDEpKTtcbiA0ODc6XHRcdGlmIChzaGFyZWQgXHUwMDI2XHUwMDI2IChmb2xpby1cdTAwM2VtYXBwaW5nIHx8IGRheF9mb2xpb19pc19zaGFyZWQoZm9saW8pKSkge1xuIDQ4ODpcdFx0XHRpZiAoZm9saW8tXHUwMDNlbWFwcGluZylcbiA0ODk6XHRcdFx0XHRkYXhfZm9saW9fbWFrZV9zaGFyZWQoZm9saW8pO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0XHRXQVJOX09OX09OQ0UoIWZvbGlvLVx1MDAzZXNoYXJlKTtcbiA0OTI6XHRcdFx0V0FSTl9PTl9PTkNFKGRheF9lbnRyeV9vcmRlcihlbnRyeSkgIT0gZm9saW9fb3JkZXIoZm9saW8pKTtcbiA0OTM6XHRcdFx0Zm9saW8tXHUwMDNlc2hhcmUmIzQzOyYjNDM7O1xuIDQ5NDpcdFx0fSBlbHNlIHtcbiA0OTU6XHRcdFx0V0FSTl9PTl9PTkNFKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuIDQ5NjpcdFx0XHRkYXhfZm9saW9faW5pdChlbnRyeSk7XG4gNDk3Olx0XHRcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0OTg6XHRcdFx0Zm9saW8tXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XG4gNDk5Olx0XHRcdGZvbGlvLVx1MDAzZWluZGV4ID0gaW5kZXg7XG4gNTAwOlx0XHR9XG4gNTAxOlx0fVxuIDUwMjpcdFxuIDUwMzpcdHN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDUwNDpcdFx0XHRcdFx0Ym9vbCB0cnVuYylcbiA1MDU6XHR7XG4gNTA2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MDk6XHRcdFx0cmV0dXJuO1xuIDUxMDpcdFxuIDUxMTpcdFx0ZGF4X2ZvbGlvX3B1dChmb2xpbyk7XG4gNTEyOlx0fVxuIDUxMzpcdFxuIDUxNDpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbiA1MTU6XHR7XG4gNTE2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA1MTc6XHRcbiA1MTg6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBjaGFuZ2VzOgoKKipBbmFseXppbmcgdGhlIEZvbGlvIERlZmVycmVkIExpc3QgUmVtb3ZhbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSByaXBwZWQgb3V0IGBJTklUX0xJU1RfSEVBRCgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCk7YC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSwgbGlrZWx5IHRpZWQgdG8gaG93IGZvbGlvcyBhcmUgYmVpbmcgbWFuYWdlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGltcGFjdCBvZiB0aGlzIHJlbW92YWwsIGFuZCB3aGF0IGl0IG1pZ2h0IGJlIHJlcGxhY2VkIHdpdGguIEkga25vdyBgX2RlZmVycmVkX2xpc3RgIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBkZWxheWVkIHByb2Nlc3Npbmcgb3IgcXVldWluZywgc28gSSBzdXNwZWN0IHRoaXMgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSByZWNsYW1hdGlvbiwgb3IgcGVyaGFwcyBldmVuIEkvTyBzY2hlZHVsaW5nLgoKTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hhdCBgcHJlcF9jb21wb3VuZF9wYWdlYCBpcyBkb2luZyBhbmQgd2h5IHRoZSBjb2RlIGlzIHRvdWNoaW5nIGl0LiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBjb21wb3VuZCBwYWdlcy4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBjb2RlIGlzIHJlbGF0ZWQgdG8gdGhlIGNyZWF0aW9uIG9yIGhhbmRsaW5nIG9mIGxhcmdlIG1lbW9yeSBwYWdlcy4KClRpbWUgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZS4gSSB3aWxsIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwX2NvbXBvdW5kX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTE4NDU9c3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTg4NS1cdGlmIChvcmRlcilcbm1tL2NvbXBhY3Rpb24uYzoxODg2Olx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2ZHN0LVx1MDAzZXBhZ2UsIG9yZGVyKTtcbm1tL2NvbXBhY3Rpb24uYy0xODg3LVx0Y2MtXHUwMDNlbnJfZnJlZXBhZ2VzIC09IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY0MT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzI3LVx0XHRpZiAobmV3X29yZGVyKSB7XG5tbS9odWdlX21lbW9yeS5jOjM3Mjg6XHRcdFx0cHJlcF9jb21wb3VuZF9wYWdlKG5ld19oZWFkLCBuZXdfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzI5LVx0XHRcdGZvbGlvX3NldF9sYXJnZV9ybWFwcGFibGUobmV3X2ZvbGlvKTtcbi0tXG5tbS9odWdldGxiLmM9MzE3OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMzE4NC1cdC8qXG5tbS9odWdldGxiLmM6MzE4NTpcdCAqIFRoaXMgaXMgYW4gb3Blbi1jb2RlZCBwcmVwX2NvbXBvdW5kX3BhZ2UoKSB3aGVyZWJ5IHdlIGF2b2lkXG5tbS9odWdldGxiLmMtMzE4Ni1cdCAqIHdhbGtpbmcgcGFnZXMgdHdpY2UgYnkgaW5pdGlhbGl6aW5nL3ByZXBhcmluZyYjNDM7ZnJlZXppbmcgdGhlbSBpbiB0aGVcbi0tXG5tbS9odWdldGxiLmM9Mzk0Nj1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcbi0tXG5tbS9odWdldGxiLmMtMzk4Ni1cdFx0XHRjbGVhcl9jb21wb3VuZF9oZWFkKHBhZ2UpO1xubW0vaHVnZXRsYi5jOjM5ODc6XHRcdFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIGRzdC1cdTAwM2VvcmRlcik7XG5tbS9odWdldGxiLmMtMzk4OC1cbi0tXG5tbS9tZW1yZW1hcC5jPTQ4MT12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcbi0tXG5tbS9tZW1yZW1hcC5jLTUyNi1cdGlmIChvcmRlcilcbm1tL21lbXJlbWFwLmM6NTI3Olx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xubW0vbWVtcmVtYXAuYy01MjgtfVxuLS1cbm1tL21tX2luaXQuYz0xMDQ4PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuLS1cbm1tL21tX2luaXQuYy0xMDU4LVx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbm1tL21tX2luaXQuYzoxMDU5Olx0ICogcHJlcF9jb21wb3VuZF9wYWdlKCkgZG9lcyBub3QgdGFrZSBjYXJlIG9mIHRoYXQsIHNvIGluc3RlYWQgd2Vcbm1tL21tX2luaXQuYzoxMDYwOlx0ICogb3Blbi1jb2RlIHByZXBfY29tcG91bmRfcGFnZSgpIHNvIHdlIGNhbiB0YWtlIGNhcmUgb2YgaW5pdGlhbGl6aW5nXG5tbS9tbV9pbml0LmMtMTA2MS1cdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbi0tXG5tbS9wYWdlX2FsbG9jLmM9Njc5PXN0YXRpYyBpbmxpbmUgYm9vbCBwY3BfYWxsb3dlZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcwMS1cbm1tL3BhZ2VfYWxsb2MuYzo3MDI6dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy03MDMte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xODc2PXN0YXRpYyB2b2lkIHByZXBfbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xODgxLVx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiAoZ2ZwX2ZsYWdzIFx1MDAyNiBfX0dGUF9DT01QKSlcbm1tL3BhZ2VfYWxsb2MuYzoxODgyOlx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xubW0vcGFnZV9hbGxvYy5jLTE4ODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGNvZGUgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBjb21wb3VuZCBwYWdlcywgc3BlY2lmaWNhbGx5IHRoZSBwcmUtaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBgcHJlcF9jb21wb3VuZF9wYWdlYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYF9kZWZlcnJlZF9saXN0YCBvciBpZiBpdCYjMzk7cyBkZWxlZ2F0aW5nIHRoYXQgdG8gc29tZXRoaW5nIGVsc2UsIGxpa2UgYGZvbGlvX3ByZXBfbGFyZ2Vfcm1hcHBhYmxlYCBvciBhIHNpbXBsZSBgSU5JVF9MSVNUX0hFQURgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHByZXBfY29tcG91bmRfcGFnZWAgdG8gc2VlIGhvdyB0aG9zZSBmaWVsZHMgYXJlIGJlaW5nIGhhbmRsZWQuIEkga25vdyB0aGlzIGFyZWEgY2FuIGhhdmUgc3VidGxlIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0ICovXG4gNzAxOlx0XG4gNzAyOlx0dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiA3MDM6XHR7XG4gNzA0Olx0XHRpbnQgaTtcbiA3MDU6XHRcdGludCBucl9wYWdlcyA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDcwNjpcdFxuIDcwNzpcdFx0X19TZXRQYWdlSGVhZChwYWdlKTtcbiA3MDg6XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOylcbiA3MDk6XHRcdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UgJiM0MzsgaSwgcGFnZSwgb3JkZXIpO1xuIDcxMDpcdFxuIDcxMTpcdFx0cHJlcF9jb21wb3VuZF9oZWFkKHBhZ2UsIG9yZGVyKTtcbiA3MTI6XHR9XG4gNzEzOlx0XG4gNzE0Olx0c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIDcxNTpcdHtcbiA3MTY6XHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xuIDcxNzpcdFx0X19TZXRQYWdlQnVkZHkocGFnZSk7XG4gNzE4Olx0fVxuIDcxOTpcdFxuIDcyMDpcdCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuIDcyMTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxuIDcyMjpcdHtcbiA3MjM6XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMgPSBjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbDtcbiA3MjQ6XHRcbiA3MjU6XHRcdHJldHVybiB1bmxpa2VseShjYXBjKSBcdTAwMjZcdTAwMjZcbiA3MjY6XHRcdFx0IShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjZcbiA3Mjc6XHRcdFx0IWNhcGMtXHUwMDNlcGFnZSBcdTAwMjZcdTAwMjZcbiA3Mjg6XHRcdFx0Y2FwYy1cdTAwM2V6b25lID09IHpvbmUgPyBjYXBjIDogTlVMTDtcbiA3Mjk6XHR9XG4gNzMwOlx0XG4gNzMxOlx0c3RhdGljIGlubGluZSBib29sXG4gNzMyOlx0Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuIDczMzpcdFx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbiA3MzQ6XHR7XG4gNzM1Olx0XHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiA3MzY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczNzpcdFxuIDczODpcdFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbiA3Mzk6XHRcdGlmIChpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRob3VnaHQgcHJvY2Vzcy4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvbXBvdW5kIEhlYWQ6IE15IEFuYWx5dGljYWwgSm91cm5leSoqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYHByZXBfY29tcG91bmRfaGVhZGAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0byBkaXNzZWN0IHRoYXQgcGhyYXNlLiBJIGtub3cgdGhpcyBpcyBhIHNwZWNpZmljIGNvbXBvbmVudCwgbGlrZWx5IHdpdGhpbiBhIGxhcmdlciBOTFAgcGlwZWxpbmUgb3Iga25vd2xlZGdlIHJlcHJlc2VudGF0aW9uIHN5c3RlbS4gJiMzNDtQcmVwJiMzNDsgc3VnZ2VzdHMgaXQmIzM5O3MgYSBwcmVwcm9jZXNzb3IsIGEgbW9kdWxlIGRlc2lnbmVkIHRvIHByZXBhcmUgc29tZSBpbnB1dC4gJiMzNDtDb21wb3VuZCBoZWFkJiMzNDsuLi4gdGhhdCYjMzk7cyB0aGUgaW50ZXJlc3RpbmcgcGFydC4gTXkgaW1tZWRpYXRlIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGlzIGhhbmRsaW5nIGNvbXBvdW5kIHN0cnVjdHVyZXMsIGxpa2VseSBpbiBhIGxpbmd1aXN0aWMgY29udGV4dC4gVGhpbmsgbm91biBwaHJhc2VzIGxpa2UgJiMzNDtyZWQgYXBwbGUgdHJlZSYjMzQ7IG9yIHBlcmhhcHMgbW9yZSBjb21wbGV4IGNvbnN0cnVjdGlvbnMgaW52b2x2aW5nIHByZXBvc2l0aW9ucy4KCkkmIzM5O20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvc3NpYmxlIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBpZGVudGlmeWluZyB0aGUgaGVhZCBub3VuIHdpdGhpbiBhIGNvbXBvdW5kPyBJcyBpdCBicmVha2luZyBkb3duIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgaGVhZCBhbmQgdGhlIG1vZGlmeWluZyBlbGVtZW50cz8gQXJlIHRoZXJlIGRpZmZlcmVudCBhcHByb2FjaGVzIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjb21wb3VuZCDigJMgaXMgaXQgZGVhbGluZyB3aXRoIHB1cmUgbm91biBjb21wb3VuZHMsIG9yIHBvc3NpYmx5IG1vcmUgdmVyc2F0aWxlIGNvbnN0cnVjdGlvbnMgd2l0aCBhZGplY3RpdmFsIG1vZGlmaWNhdGlvbnM/CgpNeSBleHBlcmllbmNlIGRpY3RhdGVzIHRoYXQgdGhlICYjMzQ7aGVhZCYjMzQ7IGNvdWxkIGJlIGRldGVybWluZWQgYnkgdmFyaW91cyBsaW5ndWlzdGljIHByaW5jaXBsZXMsIG1heWJlIHN5bnRhY3RpYyBkb21pbmFuY2UsIHNlbWFudGljIGltcG9ydGFuY2UsIG9yIGV2ZW4gc3RhdGlzdGljYWwgZnJlcXVlbmN5LiBUaGUgaW1wbGVtZW50YXRpb24gbWlnaHQgaW52b2x2ZSBhIGxvb2t1cCB0YWJsZSBvZiBjb21tb24gY29tcG91bmQgcGF0dGVybnMsIGEgcnVsZS1iYXNlZCBzeXN0ZW0sIG9yIGV2ZW4gc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCB1c2luZyBtYWNoaW5lIGxlYXJuaW5nIHRvIGxlYXJuIGhlYWQtbW9kaWZpZXIgcmVsYXRpb25zaGlwcy4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGFtYmlndWl0eSDigJMgY29tcG91bmQgaGVhZHMgY2FuIGJlIHN1cnByaXNpbmdseSB0cmlja3khIE15IGZpZWxkIGlzIGZ1bGwgb2Ygc3VjaCBlZGdlIGNhc2VzLCBob3cgaXMgdGhpcyBoYW5kbGluZyB0aGVtPyBEb2VzIGl0IGFzc2lnbiBhIHByb2JhYmlsaXR5IG9yIGNvbmZpZGVuY2UgdG8gaXRzIGhlYWQgYXNzaWdubWVudHM/CgpUaGUgcGhyYXNlIGl0c2VsZiBzdWdnZXN0cyBhIG1vZHVsYXIgZGVzaWduOyBJIGFtIGV4cGVjdGluZyB0aGlzIHRvIGludGVncmF0ZSB3aXRoIGEgd2lkZXIgcGlwZWxpbmUg4oCTIGl0IHByb2JhYmx5IHRha2VzIGEgc2VudGVuY2Ugb3IgcGhyYXNlIGFzIGlucHV0LCBwYXJzZXMgaXQsIGlkZW50aWZpZXMgdGhlIGNvbXBvdW5kIHN0cnVjdHVyZSwgYW5kIHRoZW4gcHJvY2Vzc2VzIGl0IGFjY29yZGluZ2x5LiBUaGUgb3V0cHV0IHdpbGwgbGlrZWx5IGJlIGEgbW9kaWZpZWQgcmVwcmVzZW50YXRpb24sIHBlcmhhcHMgYSBkZXBlbmRlbmN5IHBhcnNlLCBhIHNlbWFudGljIHJvbGUgYXNzaWdubWVudCwgb3IgYSBmZWF0dXJlIHZlY3Rvci4gV2hhdCB0eXBlIG9mIG91dHB1dCBpcyBvZiBwcmltYXJ5IGltcG9ydGFuY2UgaW4gaW5mb3JtaW5nIHRoZSBuZXh0IHN0ZXBzIG9mIHRoaXMgcGlwZWxpbmUuIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IHRoZSBhcHBsaWNhdGlvbiBpcy4gSXMgdGhpcyBmb3IgaW5mb3JtYXRpb24gcmV0cmlldmFsLCBtYWNoaW5lIHRyYW5zbGF0aW9uLCBvciB0ZXh0IHN1bW1hcml6YXRpb24/IFRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGVuZCB0YXNrIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgaG93ICYjMzQ7Z29vZCYjMzQ7IHRoaXMgcHJlcHJvY2Vzc29yIG5lZWRzIHRvIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwX2NvbXBvdW5kX2hlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTMxNzg9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTMxOTMtXHRodWdldGxiX2ZvbGlvX2luaXRfdGFpbF92bWVtbWFwKGZvbGlvLCBoLCAxLCBucl9wYWdlcyk7XG5tbS9odWdldGxiLmM6MzE5NDpcdHByZXBfY29tcG91bmRfaGVhZChcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBodWdlX3BhZ2Vfb3JkZXIoaCkpO1xubW0vaHVnZXRsYi5jLTMxOTUtfVxuLS1cbm1tL2ludGVybmFsLmg9NzY0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpwYWdlX3JtYXBwYWJsZV9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9pbnRlcm5hbC5oLTc3Mi1cbm1tL2ludGVybmFsLmg6NzczOnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL2ludGVybmFsLmgtNzc0LXtcbi0tXG5tbS9tbV9pbml0LmM9MTA0OD1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTA3MC1cdH1cbm1tL21tX2luaXQuYzoxMDcxOlx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbm1tL21tX2luaXQuYy0xMDcyLX1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzAyPXZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxMC1cbm1tL3BhZ2VfYWxsb2MuYzo3MTE6XHRwcmVwX2NvbXBvdW5kX2hlYWQocGFnZSwgb3JkZXIpO1xubW0vcGFnZV9hbGxvYy5jLTcxMi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgbW0vaW50ZXJuYWwuaGAgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGhhbmRsaW5nIGNvbXBvdW5kIGhlYWRzLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyBsaXZlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHByZXBfY29tcG91bmRfaGVhZGAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSBrbm93IGl0JiMzOTtzIGluIGBtbS9pbnRlcm5hbC5oYC4gSSYjMzk7bGwgd2FudCB0byByZXZpZXcgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgaW50ZXJuYWxseS4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IGl0cyBvdmVyYWxsIHB1cnBvc2UgaXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0b3IuIEFueSBpbnRlcmFjdGlvbnMgd2l0aCBidWRkeSBhbGxvY2F0aW9ucywgcGFnZSBzdHJ1Y3R1cmVzLCBvciB0aGUgc2xhYiBhbGxvY2F0b3IgbmVlZCBjYXJlZnVsIGV4YW1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3MDpcdFx0cmV0dXJuIGZvbGlvO1xuIDc3MTpcdH1cbiA3NzI6XHRcbiA3NzM6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF9oZWFkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gNzc0Olx0e1xuIDc3NTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlO1xuIDc3NjpcdFxuIDc3NzpcdFx0Zm9saW9fc2V0X29yZGVyKGZvbGlvLCBvcmRlcik7XG4gNzc4Olx0XHRhdG9taWNfc2V0KFx1MDAyNmZvbGlvLVx1MDAzZV9sYXJnZV9tYXBjb3VudCwgLTEpO1xuIDc3OTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BBR0VfTUFQQ09VTlQpKVxuIDc4MDpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmZvbGlvLVx1MDAzZV9ucl9wYWdlc19tYXBwZWQsIDApO1xuIDc4MTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01NX0lEKSkge1xuIDc4MjpcdFx0XHRmb2xpby1cdTAwM2VfbW1faWRzID0gMDtcbiA3ODM6XHRcdFx0Zm9saW8tXHUwMDNlX21tX2lkX21hcGNvdW50WzBdID0gLTE7XG4gNzg0Olx0XHRcdGZvbGlvLVx1MDAzZV9tbV9pZF9tYXBjb3VudFsxXSA9IC0xO1xuIDc4NTpcdFx0fVxuIDc4NjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSB8fCBvcmRlciBcdTAwM2UgMSkge1xuIDc4NzpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmZvbGlvLVx1MDAzZV9waW5jb3VudCwgMCk7XG4gNzg4Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2VudGlyZV9tYXBjb3VudCwgLTEpO1xuIDc4OTpcdFx0fVxuIDc5MDpcdFx0aWYgKG9yZGVyIFx1MDAzZSAxKVxuIDc5MTpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG4gNzkyOlx0fVxuIDc5MzpcdFxuIDc5NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NDgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVnIGFuZCBJdHMgRnV6emluZyBSZWxldmFuY2UqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgSSYjMzk7dmUgZm91bmQgYSByZWR1bmRhbmN5LCBwb3RlbnRpYWxseSBhIGJ1Zy4gSW4gYGZzL2RheC5jYCwgdGhlIGNvZGUgY2hlY2tzIGBpZiAob3JkZXIgJmd0OyAwKWAgYW5kIGluc2lkZSB0aGlzIGNvbmRpdGlvbiBjYWxscyBgcHJlcF9jb21wb3VuZF9wYWdlKCZhbXA7Zm9saW8tJmd0O3BhZ2UsIG9yZGVyKWAuIE5vdywgYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGNhbGxzIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAsIGFuZCB0aGUgYHByZXBfY29tcG91bmRfaGVhZCgpYCBmdW5jdGlvbiBoYXMgYW4gYGlmIChvcmRlciAmZ3Q7IDEpYCBjaGVjaywgd2hpY2ggdGhlbiBpbml0aWFsaXplcyB0aGUgYF9kZWZlcnJlZF9saXN0YC4gVGhlIGlzc3VlIGlzLCB0aGUgb3V0ZXIgY29kZSBibG9jayBpbiBgZnMvZGF4LmNgIGFsc28gaGFzIGFuIGBpZiAob3JkZXIgJmd0OyAxKWAgd2hpY2ggY2FsbHMgYElOSVRfTElTVF9IRUFEKCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KWAhIEl0JiMzOTtzIHJlZHVuZGFudCBzaW5jZSB0aGUgaW5uZXIgZnVuY3Rpb24gY2FsbCBhbHJlYWR5IHRha2VzIGNhcmUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHdoZW4gYG9yZGVyICZndDsgMWAuIFRoaXMgY291bGQgYmUgYSBoYXJtbGVzcyBkdXBsaWNhdGlvbiwgb3IgaXQgY291bGQgaW5kaWNhdGUgc29tZXRoaW5nIG1vcmUgcHJvYmxlbWF0aWMuCgpOb3csIHRoZSBjb3JlIG9mIG15IHRoaW5raW5nIHJldm9sdmVzIGFyb3VuZCB3aGV0aGVyIHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkLiBBY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBjb25maXJtOgoKMS4gICoqSXMgdGhpcyBjb2RlIGFjdHVhbGx5IHJlYWNoYWJsZT8qKiBZZXMsIGBmcy9kYXguY2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEl0JiMzOTtzIGNvcmUga2VybmVsIGZpbGVzeXN0ZW0gY29kZSByZWxhdGVkIHRvIERBWCwgd2hpY2ggaXMgdXNlZCBmb3IgYWNjZXNzaW5nIHBlcnNpc3RlbnQgbWVtb3J5LiBTeXN0ZW1zIGxpa2UgZXh0NCBvciB4ZnMgd2l0aCBEQVgsIG9yIGV2ZW4gZW11bGF0ZWQgcG1lbSBkZXZpY2VzLCB3aWxsIGV4ZXJjaXNlIHRoaXMgY29kZS4KCjIuICAqKklzIGl0IGEgY29yZSBzdWJzeXN0ZW0/KiogWWVzLCBEQVggZGVhbHMgd2l0aCBmaWxlc3lzdGVtcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGJvdGggb2Ygd2hpY2ggYXJlIGNyaXRpY2FsIGNvcmUgc3Vic3lzdGVtcy4KCjMuICAqKklzIGl0IHJlZmFjdG9yZWQ/KiogWWVzLCB0aGlzIGlzIGEgY29kZSBjbGVhbnVwL3JlZmFjdG9yaW5nL29wdGltaXphdGlvbiBiZWNhdXNlIG9mIHRoZSBkdXBsaWNhdGlvbi4KClRoZXJlZm9yZSwgYWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSBkZWZpbmVkIGluIFNlY3Rpb25zIDEsIDIsIGFuZCAzLCB0aGlzIGNoYW5nZSAqZGVmaW5pdGVseSogbWVldHMgdGhlICYjMzQ7V29ydGhGdXp6aW5nID0gdHJ1ZSYjMzQ7IGNyaXRlcmlhLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIGluIGEgY29yZSBzdWJzeXN0ZW0uIFJlZmFjdG9yaW5ncywgZXNwZWNpYWxseSB0aG9zZSB0b3VjaGluZyBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93LCB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgc2VtYW50aWMgc2hpZnRzIG9yIGxhdGVudCBidWdzLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IHRoZSBndWlkZWxpbmVzIGFyZSBjYXV0aW9uaW5nIGFnYWluc3QhCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGgsIHNwZWNpZmljYWxseSB0aGUgcmVxdWlyZW1lbnQgZm9yIGBmcy9kYXguY2AsIGBkYXhfZm9saW9faW5pdGAsIGFuZCBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAuIEkgd2lsbCBsb29rIGludG8gdGhlIGBmcy9NYWtlZmlsZWAgYW5kIGBmcy9LY29uZmlnYCBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0zMD1vYmotJChDT05GSUdfQUlPKSAgICAgICAgICAgICAgICYjNDM7PSBhaW8ub1xuZnMvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0ZTX0RBWClcdFx0JiM0Mzs9IGRheC5vXG5mcy9NYWtlZmlsZS0zMi1vYmotJChDT05GSUdfRlNfRU5DUllQVElPTilcdCYjNDM7PSBjcnlwdG8vXG4tLVxuZnMvZnVzZS9NYWtlZmlsZT0xNj1mdXNlLXkgJiM0Mzs9IGlvbW9kZS5vXG5mcy9mdXNlL01ha2VmaWxlOjE3OmZ1c2UtJChDT05GSUdfRlVTRV9EQVgpICYjNDM7PSBkYXgub1xuZnMvZnVzZS9NYWtlZmlsZS0xOC1mdXNlLSQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpICYjNDM7PSBwYXNzdGhyb3VnaC5vIGJhY2tpbmcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE1OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBoYXBwZW5lZDoKCioqRXhhbWluaW5nIHRoZSBEQVggQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCBgQ09ORklHX0ZTX0RBWGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UgY29kZSBhbmQgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGZzL0tjb25maWdgLCBvciB3aGVyZXZlciB0aGUgZmlsZSBpcyB0aGF0IGhvdXNlcyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGNoZWNrIGZvciBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU19EQVhcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01Nj1lbmRpZiAjIEJMT0NLXG5mcy9LY29uZmlnLTU3LVxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXG5mcy9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24sIGFuZCBteSBndXQgdGVsbHMgbWUgYGZzL0tjb25maWdgIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTguIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciBmaWxlIHN5c3RlbSBmZWF0dXJlcywgb3IgYXQgbGVhc3QgYSBrZXkgc2VjdGlvbiByZWxhdGVkIHRvIHRoZW0sIHdpbGwgYmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBjb25maWd1cmVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgbG9naWMgaXMgc3RydWN0dXJlZC4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgc25pcHBldCB3aWxsIHByb3ZpZGUgc29tZSBjbGFyaXR5IG9uIHRoZSBicm9hZGVyIGRlc2lnbiBkZWNpc2lvbnMgaW4gcGxheSwgYW5kIHNoZWQgbGlnaHQgb24gdGhlIHBhcnRpY3VsYXIgZmVhdHVyZSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFRoZSBwbGFuIGlzIHRvIGdldCBhbiBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIHdoZXRoZXIgSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGluY2x1ZGUgcGF0aHMsIG9yIGlmIHRoZSByZWxldmFudCBiaXRzIGFyZSBkZWZpbmVkIHJpZ2h0IHRoZXJlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU1Olx0XG4gIDU2Olx0ZW5kaWYgIyBCTE9DS1xuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBGU19EQVhcbiAgNTk6XHRcdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIE1NVVxuICA2MTpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuICA2MjpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gIDYzOlx0XHRzZWxlY3QgREFYXG4gIDY0Olx0XHRoZWxwXG4gIDY1Olx0XHQgIERpcmVjdCBBY2Nlc3MgKERBWCkgY2FuIGJlIHVzZWQgb24gbWVtb3J5LWJhY2tlZCBibG9jayBkZXZpY2VzLlxuICA2NjpcdFx0ICBJZiB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnRzIERBWCBhbmQgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgREFYLFxuICA2NzpcdFx0ICB0aGVuIHlvdSBjYW4gYXZvaWQgdXNpbmcgdGhlIHBhZ2VjYWNoZSB0byBidWZmZXIgSS9Pcy4gIFR1cm5pbmdcbiAgNjg6XHRcdCAgb24gdGhpcyBvcHRpb24gd2lsbCBjb21waWxlIGluIHN1cHBvcnQgZm9yIERBWC5cbiAgNjk6XHRcbiAgNzA6XHRcdCAgRm9yIGEgREFYIGRldmljZSB0byBzdXBwb3J0IGZpbGUgc3lzdGVtIGFjY2VzcyBpdCBuZWVkcyB0byBoYXZlXG4gIDcxOlx0XHQgIHN0cnVjdCBwYWdlcy4gIEZvciB0aGUgbmZpdCBiYXNlZCBOVkRJTU1zIHRoaXMgY2FuIGJlIGVuYWJsZWRcbiAgNzI6XHRcdCAgdXNpbmcgdGhlIG5kY3RsIHV0aWxpdHk6XG4gIDczOlx0XG4gIDc0Olx0XHRcdCMgbmRjdGwgY3JlYXRlLW5hbWVzcGFjZSAtLWZvcmNlIC0tcmVjb25maWc9bmFtZXNwYWNlMC4wIFxcXG4gIDc1Olx0XHRcdFx0LS1tb2RlPWZzZGF4IC0tbWFwPW1lbVxuICA3NjpcdFxuICA3NzpcdFx0ICBTZWUgdGhlICYjMzk7Y3JlYXRlLW5hbWVzcGFjZSYjMzk7IG1hbiBwYWdlIGZvciBkZXRhaWxzIG9uIHRoZSBvdmVyaGVhZCBvZlxuICA3ODpcdFx0ICAtLW1hcD1tZW06XG4gIDc5Olx0XHQgIGh0dHBzOi8vZG9jcy5wbWVtLmlvL25kY3RsLXVzZXItZ3VpZGUvbmRjdGwtbWFuLXBhZ2VzL25kY3RsLWNyZWF0ZS1uYW1lc3BhY2VcbiAgODA6XHRcbiAgODE6XHRcdCAgRm9yIG5kY3RsIHRvIHdvcmsgQ09ORklHX0RFVl9EQVggbmVlZHMgdG8gYmUgZW5hYmxlZCBhcyB3ZWxsLiBGb3IgbW9zdFxuICA4MjpcdFx0ICBmaWxlIHN5c3RlbXMgREFYIHN1cHBvcnQgbmVlZHMgdG8gYmUgbWFudWFsbHkgZW5hYmxlZCBnbG9iYWxseSBvclxuICA4MzpcdFx0ICBwZXItaW5vZGUgdXNpbmcgYSBtb3VudCBvcHRpb24gYXMgd2VsbC4gIFNlZSB0aGUgZmlsZSBkb2N1bWVudGF0aW9uIGluXG4gIDg0Olx0XHQgIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGF4LnJzdCBmb3IgZGV0YWlscy5cbiAgODU6XHRcbiAgODY6XHRcdCAgSWYgeW91IGRvIG5vdCBoYXZlIGEgYmxvY2sgZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGlzLFxuICA4NzpcdFx0ICBvciBpZiB1bnN1cmUsIHNheSBOLiAgU2F5aW5nIFkgd2lsbCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsXG4gIDg4Olx0XHQgIGJ5IGFib3V0IDVrQi5cbiAgODk6XHRcbiAgOTA6XHRjb25maWcgRlNfREFYX1BNRFxuICA5MTpcdFx0Ym9vbFxuICA5MjpcdFx0ZGVmYXVsdCBGU19EQVhcbiAgOTM6XHRcdGRlcGVuZHMgb24gRlNfREFYXG4gIDk0Olx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgRlNfREFYKioKClJpZ2h0LCBzbyBgRlNfREFYYCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGRlcGVuZGVudCBvbiBgWk9ORV9ERVZJQ0VgIGFuZCBgTU1VYC4gU3RyYWlnaHRhd2F5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgdGhlIHJvYWRtYXAuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIGBNTVVgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBrZXkgcmlnaHQgbm93LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCAqdGhhdCogZGVwZW5kcyBvbiB0byBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuCgpUaGVyZWZvcmUsIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IGBaT05FX0RFVklDRWAgaXRzZWxmIGlzIGNvbnRpbmdlbnQgdXBvbi4gVGhhdCB3aWxsIGhlbHAgbWUgdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGNoYWluIGFuZCB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGltcGxpY2F0aW9ucyBmb3IgYEZTX0RBWGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjA9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjQtXG5tbS9LY29uZmlnOjEyMjU6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjYtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBiZXR0ZXIsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHNlZW4gaXQgZGVmaW5lZCBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBzZWVtIHRvIHJlbWVtYmVyIGl0IGFyb3VuZCBsaW5lIDEyMjUsIGdpdmUgb3IgdGFrZS4gVGltZSB0byBqdW1wIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgaG93IHRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgaGVscCB0ZXh0cyBJIGNhbiBnbGVhbi4gSXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIHlvdSYjMzk7cmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIG9mIGEgcGFydGljdWxhciBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBvcHRpb25zLCBhbmQgcGVyaGFwcyBzcG90IGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHR5cGljYWwgZm9ybWF0IGhlcmU6IGEgYGNvbmZpZ2Aga2V5d29yZCwgYSB0eXBlIGRlZmluaXRpb24gKGJvb2wsIHRyaXN0YXRlLCBldGMuKSwgdGhlIGhlbHAgdGV4dCwgYW5kIGxpa2VseSBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBXaXRoIGEgYml0IG9mIGx1Y2ssIHRoZSBmaWxlIGNvbW1lbnRzIHdpbGwgYmUgdXAtdG8tZGF0ZSBhbmQgcHJvdmlkZSBzb21lIHVzZWZ1bCBjb250ZXh0LiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIyMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjIyOlx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMjM6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIyNDpcdFxuMTIyNTpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyNjpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjk6XHRcbjEyMzA6XHRcdGhlbHBcbjEyMzE6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMzI6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyMzM6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjM0Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTIzNTpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjM2Olx0XG4xMjM3Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyMzg6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTIzOTpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjQwOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI0MTpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNDI6XHRcbjEyNDM6XHQjXG4xMjQ0Olx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXG4xMjQ1Olx0IyB0YWJsZXMuXG4xMjQ2Olx0I1xuMTI0NzpcdGNvbmZpZyBITU1fTUlSUk9SXG4xMjQ4Olx0XHRib29sXG4xMjQ5Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTI1MDpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMTI1MTpcdFxuMTI1MjpcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbjEyNTM6XHRcdGJvb2xcbjEyNTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gREFYIGFuZCBQZXJzaXN0ZW50IE1lbW9yeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBEQVggd29ya3MsIGFuZCBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIERBWCBhbmQgcGVyc2lzdGVudCBtZW1vcnkuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBwaWVjZXMgb2YgdGhpcyBwdXp6bGUuIEkmIzM5O20gc2VlaW5nIGEgZmV3IGltcG9ydGFudCBjb25jZXB0cyBqdW1wIG91dDogYEZTX0RBWGAsIGBaT05FX0RFVklDRWAsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIHNwZWNpZmljIGludGVycGxheSB3aXRoIHBlcnNpc3RlbnQgbWVtb3J5IHdpdGggYEJMS19ERVZfUE1FTWAgYW5kIHRoZSBgRlNfREFYX1BNRGAgc3R1ZmYuCgpUbyByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgYGRheF9hc3NvY2lhdGVfZW50cnlgIGZ1bmN0aW9uIGluIGBmcy9kYXguY2AgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4uIEkgd2FudCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBpdCwgYW5kIHdoZXRoZXIgdGhvc2UgY2FsbGVycyBhcmUgc3RhdGljIG9yIG5vbi1zdGF0aWMgYmVjYXVzZSB0aGUgY2FsbGVycyB3aWxsIGJlIGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIG9wZXJhdGlvbiBhbmQgd2lsbCBzaG93IHRoZSB3YXlzIHRoZSBrZXJuZWwgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gRm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9scyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHRoZXNlIHBlcnNpc3RlbnQgbWVtb3J5IGRldmljZXMgd2l0aGluIHRoZSBEQVggZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXhfYXNzb2NpYXRlX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGF4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxuLS1cbmZzL2RheC5jLTQ3NS1cbmZzL2RheC5jOjQ3NjpzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2RheC5jLTQ3Ny1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL2RheC5jPTEwNzc9c3RhdGljIHZvaWQgKmRheF9pbnNlcnRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTExMDUtXHRcdGRheF9kaXNhc3NvY2lhdGVfZW50cnkoZW50cnksIG1hcHBpbmcsIGZhbHNlKTtcbmZzL2RheC5jOjExMDY6XHRcdGRheF9hc3NvY2lhdGVfZW50cnkobmV3X2VudHJ5LCBtYXBwaW5nLCB2bWYtXHUwMDNldm1hLFxuZnMvZGF4LmMtMTEwNy1cdFx0XHRcdFx0dm1mLVx1MDAzZWFkZHJlc3MsIHNoYXJlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTgzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZGF4X2luc2VydF9lbnRyeWAgQ2FsbHMqKgoKT2theSwgdGltZSB0byBnZXQgZGlnZ2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkYXhfaW5zZXJ0X2VudHJ5YCBpcyBiZWluZyB1c2VkIGluIHRoZSBgZnMvZGF4LmNgIGNvbnRleHQuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY2FsbCBwYXRocyB0byB0aGF0IGZ1bmN0aW9uLCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGludm9rZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBEaXJlY3QgQWNjZXNzIChEQVgpIGluZnJhc3RydWN0dXJlIGlzIGZ1bmN0aW9uaW5nLCBhbmQgcGlucG9pbnQgYXJlYXMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RheF9pbnNlcnRfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz0zNTA9c3RhdGljIGlubGluZSBib29sIGRheF9mb2xpb19pc19zaGFyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9kYXguYy0zNTUtLypcbmZzL2RheC5jOjM1NjogKiBXaGVuIGl0IGlzIGNhbGxlZCBieSBkYXhfaW5zZXJ0X2VudHJ5KCksIHRoZSBzaGFyZWQgZmxhZyB3aWxsIGluZGljYXRlXG5mcy9kYXguYy0zNTctICogd2hldGhlciB0aGlzIGVudHJ5IGlzIHNoYXJlZCBieSBtdWx0aXBsZSBmaWxlcy4gSWYgdGhlIHBhZ2UgaGFzIG5vdFxuLS1cbmZzL2RheC5jPTEwNjM9c3RhdGljIGJvb2wgZGF4X2ZhdWx0X2lzX3N5bmNocm9ub3VzKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLS1cbmZzL2RheC5jLTEwNzYtICovXG5mcy9kYXguYzoxMDc3OnN0YXRpYyB2b2lkICpkYXhfaW5zZXJ0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbmZzL2RheC5jLTEwNzgtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCB2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuZnMvZGF4LmM9MTM5Mz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xNDAwLVxuZnMvZGF4LmM6MTQwMTpcdCplbnRyeSA9IGRheF9pbnNlcnRfZW50cnkoeGFzLCB2bWYsIGl0ZXIsICplbnRyeSwgcGZuLCBEQVhfWkVST19QQUdFKTtcbmZzL2RheC5jLTE0MDItXG4tLVxuZnMvZGF4LmM9MTQwOT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZGF4LmMtMTQyMy1cbmZzL2RheC5jOjE0MjQ6XHQqZW50cnkgPSBkYXhfaW5zZXJ0X2VudHJ5KHhhcywgdm1mLCBpdGVyLCAqZW50cnksIGZvbGlvX3Bmbih6ZXJvX2ZvbGlvKSxcbmZzL2RheC5jLTE0MjUtXHRcdFx0XHQgIERBWF9QTUQgfCBEQVhfWkVST19QQUdFKTtcbi0tXG5mcy9kYXguYz0xODQwPXN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9pdGVyKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE4NzQtXG5mcy9kYXguYzoxODc1Olx0KmVudHJ5ID0gZGF4X2luc2VydF9lbnRyeSh4YXMsIHZtZiwgaXRlciwgKmVudHJ5LCBwZm4sIGVudHJ5X2ZsYWdzKTtcbmZzL2RheC5jLTE4NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIERBWCBJbml0aWFsaXphdGlvbiBhbmQgRmF1bHQgSGFuZGxpbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBEQVggc3Vic3lzdGVtIOKAkyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGl0JiMzOTtzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgaGFuZGxlcyBmYXVsdHMuIEZpcnN0IHRoaW5ncyBmaXJzdDogYGRheF9mb2xpb19pbml0YC4gSXQgbG9va3MgbGlrZSB0aGlzIG9uZSBpcyBzdGF0aWNhbGx5IGRlZmluZWQgd2l0aGluIGBmcy9kYXguY2AuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgYSBjb3JlIGNvbXBvbmVudCwgbGlrZWx5IGNhbGxlZCBlYXJseSBvbiBkdXJpbmcgdGhlIERBWCBzZXR1cCwgYW5kIG5vdCBleHBvc2VkIGV4dGVybmFsbHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWwgc2V0dXAgb2YgZm9saW8gc3RydWN0dXJlcyBvciBvdGhlciBjcml0aWNhbCBEQVggZGF0YSBzdHJ1Y3R1cmVzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBkZWFscyB3aXRoIGVycm9ycyBvciBmYXVsdHMgd2l0aGluIHRoZSBEQVggY29udGV4dC4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiB3aGVyZSB0aGUgZmF1bHQgaGFuZGxpbmcgY29kZSByZXNpZGVzIHdpdGhpbiBgZnMvZGF4LmNgLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYWxsIG9mIHRoZSBleHBvcnRlZCBhbmQgZXh0ZXJuYWwgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gZmF1bHQgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIGZhdWx0IHBhdGguIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm1fZmF1bHRfdCBkYXhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGF4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9MjA4Nj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcG1kX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxuLS1cbmZzL2RheC5jLTIxMDUtICovXG5mcy9kYXguYzoyMTA2OnZtX2ZhdWx0X3QgZGF4X2lvbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5mcy9kYXguYy0yMTA3LVx0XHRcdHVuc2lnbmVkIGxvbmcgKnBmbnAsIGludCAqaW9tYXBfZXJycCxcbi0tXG5mcy9kYXguYz0yMTI4PXN0YXRpYyB2bV9mYXVsdF90IGRheF9pbnNlcnRfcGZuX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZGF4LmMtMjE3Ni0gKi9cbmZzL2RheC5jOjIxNzc6dm1fZmF1bHRfdCBkYXhfZmluaXNoX3N5bmNfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcixcbmZzL2RheC5jLTIxNzgtXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMxMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFYIFN5bWJvbCBDb3ZlcmFnZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgaWRlbnRpZnlpbmcgYW5kIGNhdGVnb3JpemluZyB0aGVzZSBEQVgtcmVsYXRlZCBzeW1ib2xzIHRvIHNlZSBpZiB0aGV5IGFyZSBnb29kIHRhcmdldHMgZm9yIGNvdmVyYWdlIGFuYWx5c2lzLiBJIHNlZTogYGRheF9mb2xpb19pbml0YCwgYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2luc2VydF9lbnRyeWAsIGBkYXhfaW9tYXBfZmF1bHRgLCBgZGF4X2lvbWFwX3BtZF9mYXVsdGAsIGFuZCBgZGF4X2ZhdWx0X2l0ZXJgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXN0aW5ndWlzaCBzdGF0aWMgdmVyc3VzIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGlzIGltcGFjdHMgdGhlaXIgdmlzaWJpbGl0eSBhbmQgaG93IHdlIGNhbiB0YXJnZXQgdGhlbS4KCkkgcXVpY2tseSByZW1lbWJlciB0aGF0IGBkYXhfZm9saW9faW5pdGAsIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9pbnNlcnRfZW50cnlgLCBhbmQgYGRheF9mYXVsdF9pdGVyYCBhcmUgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYGZzL2RheC5jYC4gSG93ZXZlciwgSSBrbm93IHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgdW5sZXNzIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBzdGlsbCBoYXZlIHN5bWJvbHMgaW4gdm1saW51eC4gRXZlbiBpZiBpbmxpbmVkLCBsaXN0aW5nIHRoZSBmdW5jdGlvbnMgYWxvbmcgd2l0aCBlbnRyeXBvaW50cyBpcyBzdGFuZGFyZC4gVGhlIGtleSBwb2ludCB0byByZW1lbWJlciBpcyB0byBmb2N1cyBvbiBmdW5jdGlvbnMgaW4gLmMgZmlsZXMsICpub3QqIGhlYWRlcnMsIGFzIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUuIFNvLCBkZXNwaXRlIHRoZW0gYmVpbmcgc3RhdGljLCB0aGV5IGFyZSBmYWlyIGdhbWUgZm9yIGFuYWx5c2lzLiBgZGF4X2lvbWFwX2ZhdWx0YCBpcyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGEgdmFsaWQgc3ltYm9sLgoKVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgaGlnaGxpZ2h0IGNvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGJlaW5nIHByb2JsZW1hdGljIGZvciBkaXJlY3QgdGFyZ2V0aW5nLCBidXQgdGhlc2UgYXJlICpub3QqIHRoZSBjYXNlIGhlcmUuIGBkYXhfZm9saW9faW5pdGAgaXMgaW4gYGZzL2RheC5jYCwgc28gd2UmIzM5O3JlIGdvb2QuCgpUaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgYW5hbHlzaXMsIEkgd2lsbCBpbmNsdWRlOgoKKiAgIGBkYXhfZm9saW9faW5pdGAKKiAgIGBkYXhfYXNzb2NpYXRlX2VudHJ5YAoqICAgYGRheF9pbnNlcnRfZW50cnlgCiogICBgZGF4X2lvbWFwX2ZhdWx0YAoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbi4gSSB3YW50IHRvIGNvcnJlbGF0ZSB0aGlzIHdpdGggdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBFbmFibGVDb25maWdzOiBgRlNfREFYYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgRlNfREFYX1BNRGAsIGFuZCBgQkxLX0RFVl9QTUVNYC4KCkZpbmFsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVzZSBEQVggb3B0aW9ucyBhZmZlY3Qgb3RoZXIgZmlsZXN5c3RlbXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfRlNfREFYYCBpbiBgZnMvZXh0NGAgb3IgYGZzL3hmc2AgdG8gc2VlIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlNfREFYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xuZnMvS2NvbmZpZy01Ny1cbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxuZnMvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvS2NvbmZpZy04OS1cbmZzL0tjb25maWc6OTA6Y29uZmlnIEZTX0RBWF9QTURcbmZzL0tjb25maWctOTEtXHRib29sXG5mcy9LY29uZmlnOjkyOlx0ZGVmYXVsdCBGU19EQVhcbmZzL0tjb25maWc6OTM6XHRkZXBlbmRzIG9uIEZTX0RBWFxuZnMvS2NvbmZpZy05NC1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0Vcbi0tXG5mcy9NYWtlZmlsZT0zMD1vYmotJChDT05GSUdfQUlPKSAgICAgICAgICAgICAgICYjNDM7PSBhaW8ub1xuZnMvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0ZTX0RBWClcdFx0JiM0Mzs9IGRheC5vXG5mcy9NYWtlZmlsZS0zMi1vYmotJChDT05GSUdfRlNfRU5DUllQVElPTilcdCYjNDM7PSBjcnlwdG8vXG4tLVxuZnMvZGF4LmM9MTM5Mz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xNDA3LVxuZnMvZGF4LmM6MTQwODojaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcbmZzL2RheC5jLTE0MDktc3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jPTE0MzM9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE0MzctfVxuZnMvZGF4LmM6MTQzODojZW5kaWYgLyogQ09ORklHX0ZTX0RBWF9QTUQgKi9cbmZzL2RheC5jLTE0MzktXG4tLVxuZnMvZGF4LmM9MTg5Nz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcHRlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxuLS1cbmZzL2RheC5jLTE5NzItXG5mcy9kYXguYzoxOTczOiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxuZnMvZGF4LmMtMTk3NC1zdGF0aWMgYm9vbCBkYXhfZmF1bHRfY2hlY2tfZmFsbGJhY2soc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbmZzL2RheC5jPTIwODY9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2lvbWFwX3BtZF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqcGZucCxcbi0tXG5mcy9kYXguYy0yMDkwLX1cbmZzL2RheC5jOjIwOTE6I2VuZGlmIC8qIENPTkZJR19GU19EQVhfUE1EICovXG5mcy9kYXguYy0yMDkyLVxuLS1cbmZzL2RheC5jPTIxMjg9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2luc2VydF9wZm5fbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0yMTU0LVx0XHRyZXQgPSB2bWZfaW5zZXJ0X3BhZ2VfbWt3cml0ZSh2bWYsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHRydWUpO1xuZnMvZGF4LmM6MjE1NTojaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcbmZzL2RheC5jLTIxNTYtXHRlbHNlIGlmIChvcmRlciA9PSBQTURfT1JERVIpXG4tLVxuZnMvZXJvZnMvZGF0YS5jPTQzNT1zdGF0aWMgc3NpemVfdCBlcm9mc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXJvZnMvZGF0YS5jLTQ0Mi1cbmZzL2Vyb2ZzL2RhdGEuYzo0NDM6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSBcdTAwMjZcdTAwMjYgSVNfREFYKGlub2RlKSlcbmZzL2Vyb2ZzL2RhdGEuYy00NDQtXHRcdHJldHVybiBkYXhfaW9tYXBfcncoaW9jYiwgdG8sIFx1MDAyNmVyb2ZzX2lvbWFwX29wcyk7XG4tLVxuZnMvZXJvZnMvZGF0YS5jPTQ1OD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVyb2ZzX2FvcHMgPSB7XG4tLVxuZnMvZXJvZnMvZGF0YS5jLTQ2Ni1cbmZzL2Vyb2ZzL2RhdGEuYzo0Njc6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL2Vyb2ZzL2RhdGEuYy00Njgtc3RhdGljIHZtX2ZhdWx0X3QgZXJvZnNfZGF4X2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz00MjE9c3RhdGljIGJvb2wgZXJvZnNfZmNfc2V0X2RheF9tb2RlKHN0cnVjdCBmc19jb250ZXh0ICpmYywgdW5zaWduZWQgaW50IG1vZGUpXG5mcy9lcm9mcy9zdXBlci5jLTQyMi17XG5mcy9lcm9mcy9zdXBlci5jOjQyMzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKSB7XG5mcy9lcm9mcy9zdXBlci5jLTQyNC1cdFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbi0tXG5mcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEyNjQtI2RlZmluZSBFWFQ0X01PVU5UX05PTE9BRFx0XHQweDAwMTAwXHQvKiBEb24mIzM5O3QgdXNlIGV4aXN0aW5nIGpvdXJuYWwqL1xuZnMvZXh0NC9leHQ0Lmg6MTI2NTojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9leHQ0LmgtMTI2Ni0jZGVmaW5lIEVYVDRfTU9VTlRfREFYX0FMV0FZU1x0XHQweDAwMjAwXHQvKiBEaXJlY3QgQWNjZXNzICovXG4tLVxuZnMvZXh0NC9maWxlLmM9Njk9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9leHQ0L2ZpbGUuYy0xMDItXG5mcy9leHQ0L2ZpbGUuYzoxMDM6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL2V4dDQvZmlsZS5jLTEwNC1zdGF0aWMgc3NpemVfdCBleHQ0X2RheF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2V4dDQvZmlsZS5jPTEzMj1zdGF0aWMgc3NpemVfdCBleHQ0X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9leHQ0L2ZpbGUuYy0xNDEtXG5mcy9leHQ0L2ZpbGUuYzoxNDI6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL2V4dDQvZmlsZS5jLTE0My1cdGlmIChJU19EQVgoaW5vZGUpKVxuLS1cbmZzL2V4dDQvZmlsZS5jPTU3NT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTcwNC1cbmZzL2V4dDQvZmlsZS5jOjcwNTojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9maWxlLmMtNzA2LXN0YXRpYyBzc2l6ZV90XG4tLVxuZnMvZXh0NC9maWxlLmM9NzY3PWV4dDRfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTc3NS1cbmZzL2V4dDQvZmlsZS5jOjc3NjojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9maWxlLmMtNzc3LVx0aWYgKElTX0RBWChpbm9kZSkpXG4tLVxuZnMvZXh0NC9maWxlLmMtNzk4LVxuZnMvZXh0NC9maWxlLmM6Nzk5OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L2ZpbGUuYy04MDAtc3RhdGljIHZtX2ZhdWx0X3QgZXh0NF9kYXhfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMTg3PXN0YXRpYyBpbnQgZXh0NF9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yMzg4LVx0Y2FzZSBPcHRfZGF4X3R5cGU6XG5mcy9leHQ0L3N1cGVyLmM6MjM4OTojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9zdXBlci5jLTIzOTAtXHR7XG4tLVxuZnMvZmlsZV9hdHRyLmM9MjA9dm9pZCBmaWxlYXR0cl9maWxsX3hmbGFncyhzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEsIHUzMiB4ZmxhZ3MpXG4tLVxuZnMvZmlsZV9hdHRyLmMtMzQtXHRpZiAoZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjYgRlNfWEZMQUdfREFYKVxuZnMvZmlsZV9hdHRyLmM6MzU6XHRcdGZhLVx1MDAzZWZsYWdzIHw9IEZTX0RBWF9GTDtcbmZzL2ZpbGVfYXR0ci5jLTM2LVx0aWYgKGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1BST0pJTkhFUklUKVxuLS1cbmZzL2ZpbGVfYXR0ci5jPTUyPXZvaWQgZmlsZWF0dHJfZmlsbF9mbGFncyhzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEsIHUzMiBmbGFncylcbi0tXG5mcy9maWxlX2F0dHIuYy02NS1cdFx0ZmEtXHUwMDNlZnN4X3hmbGFncyB8PSBGU19YRkxBR19OT0FUSU1FO1xuZnMvZmlsZV9hdHRyLmM6NjY6XHRpZiAoZmEtXHUwMDNlZmxhZ3MgXHUwMDI2IEZTX0RBWF9GTClcbmZzL2ZpbGVfYXR0ci5jLTY3LVx0XHRmYS1cdTAwM2Vmc3hfeGZsYWdzIHw9IEZTX1hGTEFHX0RBWDtcbi0tXG5mcy9mdXNlL0tjb25maWc9NDM9Y29uZmlnIEZVU0VfREFYXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQ3LVx0ZGVwZW5kcyBvbiBWSVJUSU9fRlNcbmZzL2Z1c2UvS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gRlNfREFYXG5mcy9mdXNlL0tjb25maWctNDktXHRkZXBlbmRzIG9uIERBWFxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3NT1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExMi1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExMzpcdHBnbWFwLVx1MDAzZXR5cGUgPSBNRU1PUllfREVWSUNFX0ZTX0RBWDtcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExNC1cbi0tXG5mcy94ZnMvTWFrZWZpbGU9MTU0PWlmZXEgKCQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSx5KVxuZnMveGZzL01ha2VmaWxlOjE1NTp4ZnMtJChDT05GSUdfRlNfREFYKVx0XHQmIzQzOz0geGZzX25vdGlmeV9mYWlsdXJlLm9cbmZzL3hmcy9NYWtlZmlsZS0xNTYtZW5kaWZcbi0tXG5mcy94ZnMveGZzX2J1Zi5jPTE3NjU9eGZzX2FsbG9jX2J1ZnRhcmcoXG4tLVxuZnMveGZzL3hmc19idWYuYy0xNzczLVxuZnMveGZzL3hmc19idWYuYzoxNzc0OiNpZiBkZWZpbmVkKENPTkZJR19GU19EQVgpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSlcbmZzL3hmcy94ZnNfYnVmLmMtMTc3NS1cdG9wcyA9IFx1MDAyNnhmc19kYXhfaG9sZGVyX29wZXJhdGlvbnM7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9MTk2ND14ZnNfZGF4X2ZhdWx0X2xvY2tlZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy0xOTcxLVxuZnMveGZzL3hmc19maWxlLmM6MTk3MjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSkge1xuZnMveGZzL3hmc19maWxlLmMtMTk3My1cdFx0QVNTRVJUKDApO1xuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz03NTA9eGZzX2ZpbGVhdHRyX3NldChcbi0tXG5mcy94ZnMveGZzX2lvY3RsLmMtNzY2LVx0XHRcdFx0ICAgICAgIEZTX05PQVRJTUVfRkwgfCBGU19OT0RVTVBfRkwgfFxuZnMveGZzL3hmc19pb2N0bC5jOjc2NzpcdFx0XHRcdCAgICAgICBGU19TWU5DX0ZMIHwgRlNfREFYX0ZMIHxcbmZzL3hmcy94ZnNfaW9jdGwuYy03NjgtXHRcdFx0XHQgICAgICAgRlNfUFJPSklOSEVSSVRfRkw7XG4tLVxuZnMveGZzL3hmc19pb3BzLmM9MTM2Mz14ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoXG4tLVxuZnMveGZzL3hmc19pb3BzLmMtMTM2NS17XG5mcy94ZnMveGZzX2lvcHMuYzoxMzY2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKVxuZnMveGZzL3hmc19pb3BzLmMtMTM2Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz02OT1lbnVtIHhmc19kYXhfbW9kZSB7XG5mcy94ZnMveGZzX3N1cGVyLmM6NzA6XHRYRlNfREFYX0lOT0RFID0gMCxcbmZzL3hmcy94ZnNfc3VwZXIuYzo3MTpcdFhGU19EQVhfQUxXQVlTID0gMSxcbmZzL3hmcy94ZnNfc3VwZXIuYzo3MjpcdFhGU19EQVhfTkVWRVIgPSAyLFxuZnMveGZzL3hmc19zdXBlci5jLTczLX07XG4tLVxuZnMveGZzL3hmc19zdXBlci5jPTc5PXhmc19tb3VudF9zZXRfZGF4X21vZGUoXG4tLVxuZnMveGZzL3hmc19zdXBlci5jLTgzLVx0c3dpdGNoIChtb2RlKSB7XG5mcy94ZnMveGZzX3N1cGVyLmM6ODQ6XHRjYXNlIFhGU19EQVhfSU5PREU6XG5mcy94ZnMveGZzX3N1cGVyLmMtODUtXHRcdG1wLVx1MDAzZW1fZmVhdHVyZXMgXHUwMDI2PSB+KFhGU19GRUFUX0RBWF9BTFdBWVMgfCBYRlNfRkVBVF9EQVhfTkVWRVIpO1xuZnMveGZzL3hmc19zdXBlci5jLTg2LVx0XHRicmVhaztcbmZzL3hmcy94ZnNfc3VwZXIuYzo4NzpcdGNhc2UgWEZTX0RBWF9BTFdBWVM6XG5mcy94ZnMveGZzX3N1cGVyLmMtODgtXHRcdG1wLVx1MDAzZW1fZmVhdHVyZXMgfD0gWEZTX0ZFQVRfREFYX0FMV0FZUztcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmMtOTAtXHRcdGJyZWFrO1xuZnMveGZzL3hmc19zdXBlci5jOjkxOlx0Y2FzZSBYRlNfREFYX05FVkVSOlxuZnMveGZzL3hmc19zdXBlci5jLTkyLVx0XHRtcC1cdTAwM2VtX2ZlYXR1cmVzIHw9IFhGU19GRUFUX0RBWF9ORVZFUjtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBkYXhfcGFyYW1fZW51bXNbXSA9IHtcbmZzL3hmcy94ZnNfc3VwZXIuYzo5OTpcdHtcJiMzNDtpbm9kZVwmIzM0OyxcdFhGU19EQVhfSU5PREUgfSxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxMDA6XHR7XCYjMzQ7YWx3YXlzXCYjMzQ7LFx0WEZTX0RBWF9BTFdBWVMgfSxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxMDE6XHR7XCYjMzQ7bmV2ZXJcJiMzNDssXHRYRlNfREFYX05FVkVSIH0sXG5mcy94ZnMveGZzX3N1cGVyLmMtMTAyLVx0e31cbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9MzYzPXhmc19zZXR1cF9kYXhfYWx3YXlzKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0zODgtZGlzYWJsZV9kYXg6XG5mcy94ZnMveGZzX3N1cGVyLmM6Mzg5Olx0eGZzX21vdW50X3NldF9kYXhfbW9kZShtcCwgWEZTX0RBWF9ORVZFUik7XG5mcy94ZnMveGZzX3N1cGVyLmMtMzkwLVx0cmV0dXJuIDA7XG4tLVxuZnMveGZzL3hmc19zdXBlci5jPTE0NTQ9eGZzX2ZzX3BhcnNlX3BhcmFtKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNTg0LVx0XHRyZXR1cm4gMDtcbmZzL3hmcy94ZnNfc3VwZXIuYzoxNTg1OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy94ZnMveGZzX3N1cGVyLmMtMTU4Ni1cdGNhc2UgT3B0X2RheDpcbmZzL3hmcy94ZnNfc3VwZXIuYzoxNTg3Olx0XHR4ZnNfbW91bnRfc2V0X2RheF9tb2RlKHBhcnNpbmdfbXAsIFhGU19EQVhfQUxXQVlTKTtcbmZzL3hmcy94ZnNfc3VwZXIuYy0xNTg4LVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNTIKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgYSBwYXRjaCBhbmQgdGhlIHNpdHVhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQuIEl0IHRhcmdldHMgYSBwb3RlbnRpYWwgcmVkdW5kYW5jeSBpbiBgZnMvZGF4LmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBkYXhfZm9saW9faW5pdCgpYCBmdW5jdGlvbi4gVGhlIHBhdGNoIHJlbW92ZXMgYSBkdXBsaWNhdGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBfZGVmZXJyZWRfbGlzdGAgZmllbGQgd2l0aCBgSU5JVF9MSVNUX0hFQURgLiBUaGlzIGlzIGNsZWFuLCBtYWtlcyBzZW5zZSwgYW5kIGxpa2VseSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLgoKVGhlIGNvZGUmIzM5O3MgY29udGV4dCBpcyBjbGVhcmx5IHdpdGhpbiB0aGUgY29yZSBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGZvY3VzaW5nIG9uIHRoZSBEQVggKERpcmVjdCBBY2Nlc3MpIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWVtZWQgJiMzNDtXb3J0aEZ1enppbmcsJiMzNDsgYW5kIHRoYXQgYWxpZ25zIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50OyBzbWFsbCBjaGFuZ2VzIGluIGNvcmUgZnVuY3Rpb25zIGFyZSBhbHdheXMgd29ydGggYSBjbG9zZSBsb29rIGR1cmluZyBmdXp6aW5nLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIERBWC4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggc3VnZ2VzdHMgSSBjaGVjayBhcmU6IGBkYXhfZm9saW9faW5pdGAsIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9pbnNlcnRfZW50cnlgLCBhbmQgYGRheF9pb21hcF9mYXVsdGAuIFRoZXnigJlyZSB0aGUgcmVhbCB0YXJnZXRzIGhlcmUuCgpBbHNvLCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciB0aGlzIHRvIG1hdHRlciBhcmUgYEZTX0RBWGAsIGBaT05FX0RFVklDRWAsIGBGU19EQVhfUE1EYCwgYEJMS19ERVZfUE1FTWAsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuIFRob3NlIGFyZSBhbGwgc3RhbmRhcmQsIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hlbiB0ZXN0aW5nIHRoaXMuCgpBbHJpZ2h0LCB3aXRoIHRoaXMgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gsIHRoZSBjb2RlLCB0aGUgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cywgaXQmIzM5O3MgdGltZSB0byBtYXJrIHRoaXMgYXMgYW5hbHl6ZWQsIGFuZCBwcm9jZWVkIHRvIHNldCByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfREFYJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0ZTX0RBWF9QTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9QTUVNJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfZm9saW9faW5pdCYjMzQ7LAogICAgJiMzNDtkYXhfYXNzb2NpYXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O2RheF9pbnNlcnRfZW50cnkmIzM0OywKICAgICYjMzQ7ZGF4X2lvbWFwX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkYXhfZm9saW9faW5pdGAgaW4gYGZzL2RheC5jYCB0byByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIGBmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdGAgd2hlbiBjYWxsaW5nIGBwcmVwX2NvbXBvdW5kX3BhZ2VgLiBEQVggZm9saW8gaW5pdGlhbGl6YXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBkdXJpbmcgREFYIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtGU19EQVhfUE1EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfUE1FTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF4X2ZvbGlvX2luaXQmIzM0OywKICAgICYjMzQ7ZGF4X2Fzc29jaWF0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYXhfaW5zZXJ0X2VudHJ5JiMzNDssCiAgICAmIzM0O2RheF9pb21hcF9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZGF4X2ZvbGlvX2luaXRgIGluIGBmcy9kYXguY2AgdG8gcmVtb3ZlIHJlZHVuZGFudCBpbml0aWFsaXphdGlvbiBvZiBgZm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3RgIHdoZW4gY2FsbGluZyBgcHJlcF9jb21wb3VuZF9wYWdlYC4gREFYIGZvbGlvIGluaXRpYWxpemF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBhcmUgcGFydCBvZiB0aGUgY29yZSBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZHVyaW5nIERBWCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBjYWxsIGZyb20gYGRheF9mb2xpb19pbml0KClgLiBUaGUgcHJlY2VkaW5nIGNhbGwgdG8gYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGludm9rZXMgYHByZXBfY29tcG91bmRfaGVhZCgpYCwgd2hpY2ggYWxyZWFkeSBpbml0aWFsaXplcyBgX2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyIFx1MDAzZSAxYC4gUmVtb3ZpbmcgdGhpcyByZWR1bmRhbnQgY2FsbCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBhZmZlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODU3YzUxZTY0YjllY2MxNGQ1ZmZhYTgwOTM2ZTlkYWFmODE1YTk5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDU6MjY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jCmluZGV4IDZiYTUwMTQyZWViMmYuLmRhZDRlZmVhNzk2NDAgMTAwNjQ0Ci0tLSBhL2ZzL2RheC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RheC5jCkBAIC00NjksOCAmIzQzOzQ2OSw2IEBAIHN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KQogCiAJaWYgKG9yZGVyICZndDsgMCkgewogCQlwcmVwX2NvbXBvdW5kX3BhZ2UoJmFtcDtmb2xpby0mZ3Q7cGFnZSwgb3JkZXIpOwotCQlpZiAob3JkZXIgJmd0OyAxKQotCQkJSU5JVF9MSVNUX0hFQUQoJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QpOwogCQlXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7CiAJfQogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBEQVggQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBgZnMvZGF4LmNgIGZpbGUuIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBjb2RlYmFzZTsgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBkYXhfZm9saW9faW5pdGAgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYF9kZWZlcnJlZF9saXN0YC4gSXMgdGhpcyBhIHJlZmFjdG9yPyBPcHRpbWl6YXRpb24/IEJ1ZyBmaXg/IEkgbmVlZCB0aGUgY29udGV4dC4gSSYjMzk7bGwgbGlrZWx5IHVzZSBgcmVhZC1maWxlYCBvciBhIHF1aWNrIGBncmVwcGVyYCBzY2FuIG9mIHRoZSBjb2RlIHRvIHNlZSB3aGVyZSBgZGF4X2ZvbGlvX2luaXRgIGlzIGNhbGxlZCBhbmQgaG93IHRoZSBgX2RlZmVycmVkX2xpc3RgIHZhcmlhYmxlIGludGVyYWN0cyB3aXRoIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZGVmZXJyZWQgbGlzdCBiZWhhdmlvciBpcyBrZXkuIEFybWVkIHdpdGggdGhpcyBrbm93bGVkZ2UsIEkgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhbiBpbmZvcm1lZCBqdWRnZW1lbnQgYWJvdXQgdGhlIHBhdGNoJiMzOTtzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2ZvbGlvX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz00MzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRheF9mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9kYXguYy00NTctXG5mcy9kYXguYzo0NTg6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG5mcy9kYXguYy00NTkte1xuLS1cbmZzL2RheC5jPTQ3Nj1zdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy00OTUtXHRcdFdBUk5fT05fT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKTtcbmZzL2RheC5jOjQ5NjpcdFx0ZGF4X2ZvbGlvX2luaXQoZW50cnkpO1xuZnMvZGF4LmMtNDk3LVx0XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBmcy9kYXguY2AqKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFYIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGZzL2RheC5jYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmVzIDQ1MCB0byA1MDAuIFRoaXMgYXJlYSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBsb29rIGF0IHRoZSBjb3JlIGxvZ2ljIOKAkyBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGV2ZWxzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXkgZnVuY3Rpb24gY2FsbHMsIGRhdGEgc3RydWN0dXJlcyBhbmQgaW1wb3J0YW50IHZhcmlhYmxlcyB0aGF0IGRldGVybWluZSB0aGUgREFYIGFjY2VzcyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRcdGVsc2VcbiA0NDE6XHRcdFx0cmVmID0gLS1mb2xpby1cdTAwM2VzaGFyZTtcbiA0NDI6XHRcbiA0NDM6XHRcdGlmIChyZWYpXG4gNDQ0Olx0XHRcdHJldHVybiByZWY7XG4gNDQ1Olx0XG4gNDQ2Olx0XHRvcmRlciA9IGRheF9mb2xpb19yZXNldF9vcmRlcihmb2xpbyk7XG4gNDQ3Olx0XG4gNDQ4Olx0XHQvKiBEZWJ1ZyBjaGVjazogdmVyaWZ5IHJlZmNvdW50cyBhcmUgemVybyBmb3IgYWxsIHN1Yi1mb2xpb3MgKi9cbiA0NDk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSYjNDM7JiM0MzspIHtcbiA0NTA6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTtcbiA0NTE6XHRcbiA0NTI6XHRcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudCgoc3RydWN0IGZvbGlvICopcGFnZSkpO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0cmV0dXJuIHJlZjtcbiA0NTY6XHR9XG4gNDU3Olx0XG4gNDU4Olx0c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG4gNDU5Olx0e1xuIDQ2MDpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gNDYxOlx0XHRpbnQgb3JkZXIgPSBkYXhfZW50cnlfb3JkZXIoZW50cnkpO1xuIDQ2MjpcdFxuIDQ2MzpcdFx0LypcbiA0NjQ6XHRcdCAqIEZvbGlvIHNob3VsZCBoYXZlIGJlZW4gc3BsaXQgYmFjayB0byBvcmRlci0wIHBhZ2VzIGluXG4gNDY1Olx0XHQgKiBkYXhfZm9saW9fcHV0KCkgd2hlbiB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZWlyXG4gNDY2Olx0XHQgKiBmaW5hbCBtYXBwaW5nLlxuIDQ2NzpcdFx0ICovXG4gNDY4Olx0XHRXQVJOX09OX09OQ0UoZm9saW9fb3JkZXIoZm9saW8pKTtcbiA0Njk6XHRcbiA0NzA6XHRcdGlmIChvcmRlciBcdTAwM2UgMCkge1xuIDQ3MTpcdFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO1xuIDQ3MjpcdFx0XHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XG4gNDczOlx0XHR9XG4gNDc0Olx0fVxuIDQ3NTpcdFxuIDQ3NjpcdHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDQ3NzpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNDc4Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGJvb2wgc2hhcmVkKVxuIDQ3OTpcdHtcbiA0ODA6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XG4gNDgxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0ODI6XHRcbiA0ODM6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA0ODQ6XHRcdFx0cmV0dXJuO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MgXHUwMDI2IH4oc2l6ZSAtIDEpKTtcbiA0ODc6XHRcdGlmIChzaGFyZWQgXHUwMDI2XHUwMDI2IChmb2xpby1cdTAwM2VtYXBwaW5nIHx8IGRheF9mb2xpb19pc19zaGFyZWQoZm9saW8pKSkge1xuIDQ4ODpcdFx0XHRpZiAoZm9saW8tXHUwMDNlbWFwcGluZylcbiA0ODk6XHRcdFx0XHRkYXhfZm9saW9fbWFrZV9zaGFyZWQoZm9saW8pO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0XHRXQVJOX09OX09OQ0UoIWZvbGlvLVx1MDAzZXNoYXJlKTtcbiA0OTI6XHRcdFx0V0FSTl9PTl9PTkNFKGRheF9lbnRyeV9vcmRlcihlbnRyeSkgIT0gZm9saW9fb3JkZXIoZm9saW8pKTtcbiA0OTM6XHRcdFx0Zm9saW8tXHUwMDNlc2hhcmUmIzQzOyYjNDM7O1xuIDQ5NDpcdFx0fSBlbHNlIHtcbiA0OTU6XHRcdFx0V0FSTl9PTl9PTkNFKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuIDQ5NjpcdFx0XHRkYXhfZm9saW9faW5pdChlbnRyeSk7XG4gNDk3Olx0XHRcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0OTg6XHRcdFx0Zm9saW8tXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XG4gNDk5Olx0XHRcdGZvbGlvLVx1MDAzZWluZGV4ID0gaW5kZXg7XG4gNTAwOlx0XHR9XG4gNTAxOlx0fVxuIDUwMjpcdFxuIDUwMzpcdHN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDUwNDpcdFx0XHRcdFx0Ym9vbCB0cnVuYylcbiA1MDU6XHR7XG4gNTA2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MDk6XHRcdFx0cmV0dXJuO1xuIDUxMDpcdFxuIDUxMTpcdFx0ZGF4X2ZvbGlvX3B1dChmb2xpbyk7XG4gNTEyOlx0fVxuIDUxMzpcdFxuIDUxNDpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbiA1MTU6XHR7XG4gNTE2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA1MTc6XHRcbiA1MTg6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGV0YWlscyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYF9kZWZlcnJlZF9saXN0YCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB3aGVyZSBpdCByZXNpZGVzIGNvbmNlcm5pbmcgYHN0cnVjdCBmb2xpb2AsIHNpbmNlIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UuIEFsdGVybmF0aXZlbHksIEkga25vdyBgcHJlcF9jb21wb3VuZF9wYWdlYCBpcyBpbnZvbHZlZCBpbiBwYWdlIGFsbG9jYXRpb24sIHNvIHRoYXQmIzM5O3MgYW5vdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBhcmVhLiBJIHRoaW5rIHNlYXJjaGluZyBmb3IgYm90aCBmdW5jdGlvbiBuYW1lcywgYHByZXBfY29tcG91bmRfcGFnZWAgYW5kIHRoZSB2YXJpYWJsZSBgX2RlZmVycmVkX2xpc3RgIGlzIHRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaC4gSXQgc2hvdWxkIHF1aWNrbHkgc2hvdyBtZSB0aGVpciBpbnRlcmFjdGlvbnMsIG9yIHBpbnBvaW50IHRoZSBzdHJ1Y3R1cmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJlcF9jb21wb3VuZF9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcbi0tXG5mcy9kYXguYy00NzAtXHRpZiAob3JkZXIgXHUwMDNlIDApIHtcbmZzL2RheC5jOjQ3MTpcdFx0cHJlcF9jb21wb3VuZF9wYWdlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9yZGVyKTtcbmZzL2RheC5jLTQ3Mi1cdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNzU2PXN0cnVjdCBpbm9kZTtcbmluY2x1ZGUvbGludXgvbW0uaC0xNzU3LVxuaW5jbHVkZS9saW51eC9tbS5oOjE3NTg6ZXh0ZXJuIHZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE3NTktXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00OTY9c3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTUwOS1cdGlmIChvcmRlciBcdTAwM2UgMClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NTEwOlx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy01MTEtfVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xODQ1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhdGEpXG4tLVxubW0vY29tcGFjdGlvbi5jLTE4ODUtXHRpZiAob3JkZXIpXG5tbS9jb21wYWN0aW9uLmM6MTg4NjpcdFx0cHJlcF9jb21wb3VuZF9wYWdlKFx1MDAyNmRzdC1cdTAwM2VwYWdlLCBvcmRlcik7XG5tbS9jb21wYWN0aW9uLmMtMTg4Ny1cdGNjLVx1MDAzZW5yX2ZyZWVwYWdlcyAtPSAxIFx1MDAzY1x1MDAzYyBvcmRlcjtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2NDE9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzcyNy1cdFx0aWYgKG5ld19vcmRlcikge1xubW0vaHVnZV9tZW1vcnkuYzozNzI4Olx0XHRcdHByZXBfY29tcG91bmRfcGFnZShuZXdfaGVhZCwgbmV3X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzcyOS1cdFx0XHRmb2xpb19zZXRfbGFyZ2Vfcm1hcHBhYmxlKG5ld19mb2xpbyk7XG4tLVxubW0vaHVnZXRsYi5jPTMxNzg9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTMxODQtXHQvKlxubW0vaHVnZXRsYi5jOjMxODU6XHQgKiBUaGlzIGlzIGFuIG9wZW4tY29kZWQgcHJlcF9jb21wb3VuZF9wYWdlKCkgd2hlcmVieSB3ZSBhdm9pZFxubW0vaHVnZXRsYi5jLTMxODYtXHQgKiB3YWxraW5nIHBhZ2VzIHR3aWNlIGJ5IGluaXRpYWxpemluZy9wcmVwYXJpbmcmIzQzO2ZyZWV6aW5nIHRoZW0gaW4gdGhlXG4tLVxubW0vaHVnZXRsYi5jPTM5NDY9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5ODYtXHRcdFx0Y2xlYXJfY29tcG91bmRfaGVhZChwYWdlKTtcbm1tL2h1Z2V0bGIuYzozOTg3Olx0XHRcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBkc3QtXHUwMDNlb3JkZXIpO1xubW0vaHVnZXRsYi5jLTM5ODgtXG4tLVxubW0vbWVtcmVtYXAuYz00ODE9dm9pZCB6b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXG4tLVxubW0vbWVtcmVtYXAuYy01MjYtXHRpZiAob3JkZXIpXG5tbS9tZW1yZW1hcC5jOjUyNzpcdFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcbm1tL21lbXJlbWFwLmMtNTI4LX1cbi0tXG5tbS9tbV9pbml0LmM9MTA0OD1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTA1OC1cdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5tbS9tbV9pbml0LmM6MTA1OTpcdCAqIHByZXBfY29tcG91bmRfcGFnZSgpIGRvZXMgbm90IHRha2UgY2FyZSBvZiB0aGF0LCBzbyBpbnN0ZWFkIHdlXG5tbS9tbV9pbml0LmM6MTA2MDpcdCAqIG9wZW4tY29kZSBwcmVwX2NvbXBvdW5kX3BhZ2UoKSBzbyB3ZSBjYW4gdGFrZSBjYXJlIG9mIGluaXRpYWxpemluZ1xubW0vbW1faW5pdC5jLTEwNjEtXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXG4tLVxubW0vcGFnZV9hbGxvYy5jPTY3OT1zdGF0aWMgaW5saW5lIGJvb2wgcGNwX2FsbG93ZWRfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MDEtXG5tbS9wYWdlX2FsbG9jLmM6NzAyOnZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS9wYWdlX2FsbG9jLmMtNzAzLXtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTg3Nj1zdGF0aWMgdm9pZCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTg4MS1cdGlmIChvcmRlciBcdTAwMjZcdTAwMjYgKGdmcF9mbGFncyBcdTAwMjYgX19HRlBfQ09NUCkpXG5tbS9wYWdlX2FsbG9jLmM6MTg4MjpcdFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcbm1tL3BhZ2VfYWxsb2MuYy0xODgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBgcHJlcF9jb21wb3VuZF9wYWdlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGNvbXBvdW5kIHBhZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBMaW51eCBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgcHJlcF9jb21wb3VuZF9wYWdlYCBmdW5jdGlvbi4gSSBrbm93IGl0JiMzOTtzIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyBJJiMzOTtsbCBnbyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gdGhlcmUuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUga2VybmVsIHByZXBhcmVzIGEgcGFnZSBmb3IgdXNlIGFzIHBhcnQgb2YgYSBsYXJnZXIsIGNvbXBvdW5kIHBhZ2Ugc3RydWN0dXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgbGlua3MgdGhlIGhlYWQgcGFnZSB0byBpdHMgdGFpbCBwYWdlcyBhbmQgd2hhdCBpbml0aWFsaXphdGlvbnMgb3IgZGF0YSBzZXR1cCBhcmUgcGVyZm9ybWVkLiBJJiMzOTttIGJldHRpbmcgdGhlcmUmIzM5O3Mgc29tZSBrZXkgaW50ZXJwbGF5IHdpdGggdGhlIHBhZ2UgZmxhZ3MgYW5kIHBvc3NpYmx5IHRoZSBgcGFnZWAgc3RydWN0dXJlIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGlzIHNldHVwIGlzIGNydWNpYWwgZm9yIGRpYWdub3NpbmcgYW55IHBhZ2UgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gaXNzdWVzIEkgbWlnaHQgZW5jb3VudGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0ICovXG4gNzAxOlx0XG4gNzAyOlx0dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiA3MDM6XHR7XG4gNzA0Olx0XHRpbnQgaTtcbiA3MDU6XHRcdGludCBucl9wYWdlcyA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDcwNjpcdFxuIDcwNzpcdFx0X19TZXRQYWdlSGVhZChwYWdlKTtcbiA3MDg6XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOylcbiA3MDk6XHRcdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UgJiM0MzsgaSwgcGFnZSwgb3JkZXIpO1xuIDcxMDpcdFxuIDcxMTpcdFx0cHJlcF9jb21wb3VuZF9oZWFkKHBhZ2UsIG9yZGVyKTtcbiA3MTI6XHR9XG4gNzEzOlx0XG4gNzE0Olx0c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIDcxNTpcdHtcbiA3MTY6XHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xuIDcxNzpcdFx0X19TZXRQYWdlQnVkZHkocGFnZSk7XG4gNzE4Olx0fVxuIDcxOTpcdFxuIDcyMDpcdCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuIDcyMTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxuIDcyMjpcdHtcbiA3MjM6XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMgPSBjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbDtcbiA3MjQ6XHRcbiA3MjU6XHRcdHJldHVybiB1bmxpa2VseShjYXBjKSBcdTAwMjZcdTAwMjZcbiA3MjY6XHRcdFx0IShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjZcbiA3Mjc6XHRcdFx0IWNhcGMtXHUwMDNlcGFnZSBcdTAwMjZcdTAwMjZcbiA3Mjg6XHRcdFx0Y2FwYy1cdTAwM2V6b25lID09IHpvbmUgPyBjYXBjIDogTlVMTDtcbiA3Mjk6XHR9XG4gNzMwOlx0XG4gNzMxOlx0c3RhdGljIGlubGluZSBib29sXG4gNzMyOlx0Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuIDczMzpcdFx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbiA3MzQ6XHR7XG4gNzM1Olx0XHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiA3MzY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczNzpcdFxuIDczODpcdFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbiA3Mzk6XHRcdGlmIChpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEwOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0ICYjMzQ7cHJlcFxfY29tcG91bmRcX2hlYWQmIzM0OyBmdW5jdGlvbi4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0IGluIFthc3N1bWluZyB0aGUgZmllbGQsIGxldCYjMzk7cyBzYXkgTkxQLCBidXQgeW91JiMzOTtsbCBuZWVkIHRvIHNwZWNpZnkhXS4KCioqQW5hbHl6aW5nIGBwcmVwX2NvbXBvdW5kX2hlYWRgKioKCkFscmlnaHQsIHNvIHRoZSBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBiaWcgY2x1ZS4gJiMzNDtwcmVwJiMzNDsgbGlrZWx5IGluZGljYXRlcyBzb21lIHNvcnQgb2YgcHJlcHJvY2Vzc2luZyBzdGVwLCBhbmQgJiMzNDtjb21wb3VuZFxfaGVhZCYjMzQ7IHBvaW50cyBkaXJlY3RseSB0byB0aGUgY29yZSBvZiB3aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCDigJMgdGhlIGhlYWQgd29yZCB3aXRoaW4gYSBjb21wb3VuZCBub3VuIHBocmFzZS4gTXkgaW1tZWRpYXRlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHRpY2tpbmc6IFdoYXQgdHlwZSBvZiBkYXRhIGFtIEkgZXhwZWN0aW5nPyBMaWtlbHkgdGV4dCwgYW5kIHNwZWNpZmljYWxseSB0ZXh0IHRoYXQgaW5jbHVkZXMgY29tcG91bmQgbm91biBwaHJhc2VzLiBJcyBpdCBhbHJlYWR5IHRva2VuaXplZCwgb3IgZG8gSSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQ/IFdoYXQmIzM5O3MgdGhlIGdvYWwgaGVyZT8gTW9zdCBsaWtlbHkgdG8gaWRlbnRpZnkgYW5kIHBvdGVudGlhbGx5IG1vZGlmeSBvciBleHRyYWN0IHRoZSBoZWFkIG5vdW4gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KCkkmIzM5O20gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGRvIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcuIEl0IG1heToKCiogICAqKlBhcnNlIHRoZSBjb21wb3VuZDoqKiBJdCYjMzk7cyBnb3QgdG8gKnVuZGVyc3RhbmQqIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHdvcmRzIGluIHRoZSBjb21wb3VuZCwgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSAmIzM0O2hlYWQmIzM0Oy4gRG9lcyBpdCB1c2UgZGVwZW5kZW5jeSBwYXJzaW5nLCBzb21lIGtpbmQgb2YgcnVsZS1iYXNlZCBhcHByb2FjaCwgb3IgbWF5YmUgYSBzdGF0aXN0aWNhbCBtb2RlbCB0cmFpbmVkIG9uIGNvbXBvdW5kcz8gSSBuZWVkIHRvIGtub3cgaG93IGl0JiMzOTtzIHJlY29nbml6aW5nIHRoZXNlIHN0cnVjdHVyZXMuCiogICAqKkhhbmRsZSBBbWJpZ3VpdHk6KiogQ29tcG91bmQgbm91biBwaHJhc2VzIGNhbiBiZSB0cmlja3kuICYjMzQ7RG9nIGhvdXNlJiMzNDsgaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgd2hhdCBhYm91dCAmIzM0O2RvZyB0cmFpbmluZyBzZXNzaW9uJiMzNDs/IERvZXMgaXQgaGF2ZSBhIG1lY2hhbmlzbSB0byBkaXNhbWJpZ3VhdGUsIHBlcmhhcHMgYnkgY2hlY2tpbmcgcGFydC1vZi1zcGVlY2ggdGFncyBvciBjb250ZXh0dWFsIGNsdWVzPyBPciBpcyBpdCBhc3N1bWluZyBhIHNwZWNpZmljIHN0cnVjdHVyZT8KKiAgICoqTm9ybWFsaXphdGlvbi9TdGFuZGFyZGl6YXRpb246KiogQWZ0ZXIgaWRlbnRpZnlpbmcgdGhlIGhlYWQsIGRvZXMgaXQgcGVyZm9ybSBhbnkgbm9ybWFsaXphdGlvbj8gVGhpbmdzIGxpa2UgY29udmVydGluZyBhbGwgd29yZHMgdG8gbG93ZXJjYXNlLCBsZW1tYXRpemluZywgb3IgZXZlbiBzdGVtbWluZz8gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIGZvciBjb25zaXN0ZW5jeSBpbiBkb3duc3RyZWFtIHRhc2tzLgoqICAgKipFZGdlIENhc2VzOioqIEkmIzM5O20gY3VyaW91cyBhYm91dCBob3cgaXQgaGFuZGxlcyBtdWx0aS13b3JkIGhlYWRzIChlLmcuLCAmIzM0O2hpZ2ggc2Nob29sIHByaW5jaXBhbCYjMzQ7KS4gV2hhdCBpZiB0aGUgaGVhZCBpdHNlbGYgaXMgYSBjb21wb3VuZD8gRG9lcyBpdCByZWN1cnNpdmVseSBjYWxsIGl0c2VsZj8gRG9lcyBpdCBkZWFsIHdpdGggcGhyYXNlcyB0aGF0ICpsb29rKiBsaWtlIGNvbXBvdW5kcyBidXQgYXJlbiYjMzk7dCAoZS5nLiwgJiMzNDt2ZXJ5IGdvb2Qgc3R1ZGVudCYjMzQ7KT8gV2hhdCBhYm91dCBpZGlvbXM/CiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiBpdCAqY2FuJiMzOTt0KiBpZGVudGlmeSBhIGhlYWQ/IERvZXMgaXQgdGhyb3cgYW4gZXJyb3IsIHJldHVybiB0aGUgb3JpZ2luYWwgcGhyYXNlLCBvciBhc3NpZ24gYSBkZWZhdWx0PyBIb3cgcm9idXN0IGlzIHRoaXMgZnVuY3Rpb24/CgpFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgKmhvdyogYW5kICp3aHkqIGJlaGluZCB0aGlzIGZ1bmN0aW9uLiBXaGF0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIHRoZW9yeT8gV2hhdCBraW5kIG9mIHJlc3VsdHMgZG9lcyBpdCBwcm92aWRlPyBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLCBidXQgdGhpcyBpcyB0aGUgc29ydCBvZiBtZW50YWwgZnJhbWV3b3JrIEkmIzM5O20gYnVpbGRpbmcgYmVmb3JlIEkgZXZlbiBsb29rIGF0IHRoZSBjb2RlLiBJIGFudGljaXBhdGUgYSB3ZWxsLWRlc2lnbmVkIGZ1bmN0aW9uIHRoYXQgY29udHJpYnV0ZXMgYSBrZXkgc3RlcCBpbiBhIGxhcmdlciBwaXBlbGluZSBmb3IgbmF0dXJhbCBsYW5ndWFnZSBwcm9jZXNzaW5nLCBwZXJoYXBzIGZvciBpbmZvcm1hdGlvbiBleHRyYWN0aW9uLCB0b3BpYyBtb2RlbGluZywgb3IgYSBzaW1pbGFyIHRhc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByZXBfY29tcG91bmRfaGVhZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MzE3OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMzE5My1cdGh1Z2V0bGJfZm9saW9faW5pdF90YWlsX3ZtZW1tYXAoZm9saW8sIGgsIDEsIG5yX3BhZ2VzKTtcbm1tL2h1Z2V0bGIuYzozMTk0Olx0cHJlcF9jb21wb3VuZF9oZWFkKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGh1Z2VfcGFnZV9vcmRlcihoKSk7XG5tbS9odWdldGxiLmMtMzE5NS19XG4tLVxubW0vaW50ZXJuYWwuaD03NjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnBhZ2Vfcm1hcHBhYmxlX2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2ludGVybmFsLmgtNzcyLVxubW0vaW50ZXJuYWwuaDo3NzM6c3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfaGVhZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vaW50ZXJuYWwuaC03NzQte1xuLS1cbm1tL21tX2luaXQuYz0xMDQ4PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuLS1cbm1tL21tX2luaXQuYy0xMDcwLVx0fVxubW0vbW1faW5pdC5jOjEwNzE6XHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xubW0vbW1faW5pdC5jLTEwNzItfVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MDI9dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzEwLVxubW0vcGFnZV9hbGxvYy5jOjcxMTpcdHByZXBfY29tcG91bmRfaGVhZChwYWdlLCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmMtNzEyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL2ludGVybmFsLmhgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG1tL2ludGVybmFsLmhgIGhlYWRlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc3My4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHBhcnRpY3VsYXIgc3BvdCBpcyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBJIGhhdmUgYSBodW5jaCBhYm91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLCBidXQgSSBuZWVkIHRvIHNlZSBpdCBpbiBjb2RlLiBLbm93aW5nIHRoZSBpbnRyaWNhY2llcyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc29tZXRoaW5nIGluIHRoYXQgdmljaW5pdHkgd2lsbCBzdXJlbHkgYmUgcmVsYXRlZCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgbWV0YWRhdGEgaGFuZGxpbmcsIG9yIGV2ZW4gc29tZSBmb3JtIG9mIGZyZWVsaXN0IG1hbmlwdWxhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcbiA3NjE6XHRcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xuIDc2MjpcdH1cbiA3NjM6XHRcbiA3NjQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqcGFnZV9ybWFwcGFibGVfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4gNzY1Olx0e1xuIDc2NjpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlO1xuIDc2NzpcdFxuIDc2ODpcdFx0aWYgKGZvbGlvIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiA3Njk6XHRcdFx0Zm9saW9fc2V0X2xhcmdlX3JtYXBwYWJsZShmb2xpbyk7XG4gNzcwOlx0XHRyZXR1cm4gZm9saW87XG4gNzcxOlx0fVxuIDc3MjpcdFxuIDc3MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiA3NzQ6XHR7XG4gNzc1Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKXBhZ2U7XG4gNzc2Olx0XG4gNzc3Olx0XHRmb2xpb19zZXRfb3JkZXIoZm9saW8sIG9yZGVyKTtcbiA3Nzg6XHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2xhcmdlX21hcGNvdW50LCAtMSk7XG4gNzc5Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEFHRV9NQVBDT1VOVCkpXG4gNzgwOlx0XHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX25yX3BhZ2VzX21hcHBlZCwgMCk7XG4gNzgxOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1fSUQpKSB7XG4gNzgyOlx0XHRcdGZvbGlvLVx1MDAzZV9tbV9pZHMgPSAwO1xuIDc4MzpcdFx0XHRmb2xpby1cdTAwM2VfbW1faWRfbWFwY291bnRbMF0gPSAtMTtcbiA3ODQ6XHRcdFx0Zm9saW8tXHUwMDNlX21tX2lkX21hcGNvdW50WzFdID0gLTE7XG4gNzg1Olx0XHR9XG4gNzg2Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIHx8IG9yZGVyIFx1MDAzZSAxKSB7XG4gNzg3Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX3BpbmNvdW50LCAwKTtcbiA3ODg6XHRcdFx0YXRvbWljX3NldChcdTAwMjZmb2xpby1cdTAwM2VfZW50aXJlX21hcGNvdW50LCAtMSk7XG4gNzg5Olx0XHR9XG4gNzkwOlx0XHRpZiAob3JkZXIgXHUwMDNlIDEpXG4gNzkxOlx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KTtcbiA3OTI6XHR9XG4gNzkzOlx0XG4gNzk0Olx0c3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcbiA3OTU6XHRcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGludCBvcmRlcilcbiA3OTY6XHR7XG4gNzk3Olx0XHR0YWlsLVx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XG4gNzk4Olx0XHRzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7XG4gNzk5Olx0XHRWTV9XQVJOX09OX09OQ0UodGFpbC1cdTAwM2Vwcml2YXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1NwoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiA1NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGFuZCBSZW1vdmluZyBSZWR1bmRhbnQgTGlzdCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGBwcmVwX2NvbXBvdW5kX2hlYWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHk6CgpgYGBjCnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikKewoJc3RydWN0IGZvbGlvICpmb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlOwoKCWZvbGlvX3NldF9vcmRlcihmb2xpbywgb3JkZXIpOwoJYXRvbWljX3NldCgmYW1wO2ZvbGlvLSZndDtfbGFyZ2VfbWFwY291bnQsIC0xKTsKCWlmIChJU19FTkFCTEVEKENPTkZJR19QQUdFX01BUENPVU5UKSkKCQlhdG9taWNfc2V0KCZhbXA7Zm9saW8tJmd0O19ucl9wYWdlc19tYXBwZWQsIDApOwoJaWYgKElTX0VOQUJMRUQoQ09ORklHX01NX0lEKSkgewoJCWZvbGlvLSZndDtfbW1faWRzID0gMDsKCQlmb2xpby0mZ3Q7X21tX2lkX21hcGNvdW50WzBdID0gLTE7CgkJZm9saW8tJmd0O19tbV9pZF9tYXBjb3VudFsxXSA9IC0xOwoJfQoJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSB8fCBvcmRlciAmZ3Q7IDEpIHsKCQlhdG9taWNfc2V0KCZhbXA7Zm9saW8tJmd0O19waW5jb3VudCwgMCk7CgkJYXRvbWljX3NldCgmYW1wO2ZvbGlvLSZndDtfZW50aXJlX21hcGNvdW50LCAtMSk7Cgl9CglpZiAob3JkZXIgJmd0OyAxKQoJCUlOSVRfTElTVF9IRUFEKCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KTsKfQpgYGAKCk15IGNvbmNlcm4gd2FzIHRoaXMgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIGluIGBkYXhfZm9saW9faW5pdCgpYC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHByZXBfY29tcG91bmRfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlLCBvcmRlcik7YCBjYWxscyBgcHJlcF9jb21wb3VuZF9oZWFkYC4gQW5kLCBjcml0aWNhbGx5LCBgcHJlcF9jb21wb3VuZF9oZWFkYCAqYWxyZWFkeSogaGFuZGxlcyBpbml0aWFsaXppbmcgdGhlIGBmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3RgIGlmIGBvcmRlciAmZ3Q7IDFgLiBNZWFuaW5nIHRoZSBkdXBsaWNhdGUgaW5pdGlhbGl6YXRpb24gaW4gYGRheF9mb2xpb19pbml0KClgIHdhcyBqdXN0IHBsYWluIHJlZHVuZGFudC4KCk5vdywgdGhlIG1haW4gY29uY2VybiBoZXJlIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIEkmIzM5O3ZlIHdhbGtlZCB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LgoKKiAgIGBwcmVwX2NvbXBvdW5kX2hlYWRgICpkb2VzKiBpbml0aWFsaXplIGBmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyICZndDsgMWAuCiogICBSZW1vdmluZyB0aGUgZHVwbGljYXRlIGBJTklUX0xJU1RfSEVBRCgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdClgIGluIGBkYXhfZm9saW9faW5pdGAgKmRvZXNuJiMzOTt0KiBsZWF2ZSBhbnkgZmllbGQgdW5pbml0aWFsaXplZC4KKiAgIE5vIHVzZXItc3BhY2UgY29weSwgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBvciBicmFuY2gsIG5vIGFsbG9jYXRpb24gY2hhbmdlcywgbm90aGluZyB0aGF0IGludHJvZHVjZXMgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4KKiAgIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMgc2hvdWxkIGJlIGFkZXF1YXRlIGhlcmU7IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGNsZWFuIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBndWlkZWxpbmVzIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA6IHRoZSBwYXRjaCBhdm9pZHMgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcywgYW5kIGFsbCB0b3VjaGVkIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBJdCYjMzk7cyBhIHRleHRib29rIGNsZWFudXAuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBjYWxsIGZyb20gYGRheF9mb2xpb19pbml0KClgLiBUaGUgcHJlY2VkaW5nIGNhbGwgdG8gYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGludm9rZXMgYHByZXBfY29tcG91bmRfaGVhZCgpYCwgd2hpY2ggYWxyZWFkeSBpbml0aWFsaXplcyBgX2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyIFx1MDAzZSAxYC4gUmVtb3ZpbmcgdGhpcyByZWR1bmRhbnQgY2FsbCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBhZmZlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBjYWxsIGZyb20gYGRheF9mb2xpb19pbml0KClgLiBUaGUgcHJlY2VkaW5nIGNhbGwgdG8gYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGludm9rZXMgYHByZXBfY29tcG91bmRfaGVhZCgpYCwgd2hpY2ggYWxyZWFkeSBpbml0aWFsaXplcyBgX2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyIFx1MDAzZSAxYC4gUmVtb3ZpbmcgdGhpcyByZWR1bmRhbnQgY2FsbCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBhZmZlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNjoyOS45NzA0Njc1NjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQyMjgwNzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19EQVhcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJGU19EQVhfUE1EXCIsXG4gICAgXCJCTEtfREVWX1BNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXhfZm9saW9faW5pdFwiLFxuICAgIFwiZGF4X2Fzc29jaWF0ZV9lbnRyeVwiLFxuICAgIFwiZGF4X2luc2VydF9lbnRyeVwiLFxuICAgIFwiZGF4X2lvbWFwX2ZhdWx0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgcmVkdW5kYW50IGBJTklUX0xJU1RfSEVBRChcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KWAgY2FsbCBmcm9tIGBkYXhfZm9saW9faW5pdCgpYC4gVGhlIHByZWNlZGluZyBjYWxsIHRvIGBwcmVwX2NvbXBvdW5kX3BhZ2UoKWAgaW50ZXJuYWxseSBpbnZva2VzIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAsIHdoaWNoIGFscmVhZHkgaW5pdGlhbGl6ZXMgYF9kZWZlcnJlZF9saXN0YCB3aGVuIGBvcmRlciBcXHUwMDNlIDFgLiBSZW1vdmluZyB0aGlzIHJlZHVuZGFudCBjYWxsIGRvZXMgbm90IGxlYXZlIGFueSBzdHJ1Y3QgZmllbGRzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGFmZmVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgYW5kIGludHJvZHVjZXMgbm8gaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRheF9mb2xpb19pbml0YCBpbiBgZnMvZGF4LmNgIHRvIHJlbW92ZSByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb2YgYGZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdGAgd2hlbiBjYWxsaW5nIGBwcmVwX2NvbXBvdW5kX3BhZ2VgLiBEQVggZm9saW8gaW5pdGlhbGl6YXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBkdXJpbmcgREFYIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjI5Ljk3MDQ3ODI0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMDAzNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODU3YzUxZTY0YjllY2MxNGQ1ZmZhYTgwOTM2ZTlkYWFmODE1YTk5OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjI2OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcXG5pbmRleCA2YmE1MDE0MmVlYjJmLi5kYWQ0ZWZlYTc5NjQwIDEwMDY0NFxcbi0tLSBhL2ZzL2RheC5jXFxuKysrIGIvZnMvZGF4LmNcXG5AQCAtNDY5LDggKzQ2OSw2IEBAIHN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxcbiBcXG4gXFx0aWYgKG9yZGVyIFxcdTAwM2UgMCkge1xcbiBcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBvcmRlcik7XFxuLVxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDEpXFxuLVxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QpO1xcbiBcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XFxuIFxcdH1cXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNjozMC40NjM0MTgyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjY3NjE5MzgwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfREFYXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiRlNfREFYX1BNRFwiLFxuICAgIFwiQkxLX0RFVl9QTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ZvbGlvX2luaXRcIixcbiAgICBcImRheF9hc3NvY2lhdGVfZW50cnlcIixcbiAgICBcImRheF9pbnNlcnRfZW50cnlcIixcbiAgICBcImRheF9pb21hcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkYXhfZm9saW9faW5pdGAgaW4gYGZzL2RheC5jYCB0byByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIGBmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3RgIHdoZW4gY2FsbGluZyBgcHJlcF9jb21wb3VuZF9wYWdlYC4gREFYIGZvbGlvIGluaXRpYWxpemF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBhcmUgcGFydCBvZiB0aGUgY29yZSBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZHVyaW5nIERBWCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1N2M1MWU2NGI5ZWNjMTRkNWZmYWE4MDkzNmU5ZGFhZjgxNWE5OTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA1OjI2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguY1xuaW5kZXggNmJhNTAxNDJlZWIyZi4uZGFkNGVmZWE3OTY0MCAxMDA2NDRcbi0tLSBhL2ZzL2RheC5jXG4rKysgYi9mcy9kYXguY1xuQEAgLTQ2OSw4ICs0NjksNiBAQCBzdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcbiBcbiBcdGlmIChvcmRlciBcdTAwM2UgMCkge1xuIFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO1xuLVx0XHRpZiAob3JkZXIgXHUwMDNlIDEpXG4tXHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpO1xuIFx0XHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XG4gXHR9XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6MzAuNDYzNDIwMzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQ3MzQyNDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQncyB3b3J0aCB0aHJvd2luZyBhdCBzeXprYWxsZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZG8gYSBwcm9wZXIgcmlzayBhbmFseXNpcyBmaXJzdCDigJMgbm8gcG9pbnQgaW4gd2FzdGluZyB0aW1lIGlmIHRoaXMgaXMgbG93LWltcGFjdC4gVGhlIHBhdGNoIHNlZW1zIHByZXR0eSBjb250YWluZWQ7IGl0J3Mgd2l0aGluIGBmcy9kYXguY2AsIHNvIGl0IHNlZW1zIGxpa2UgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIERBWCAoRGlyZWN0IEFjY2VzcykgZmlsZXN5c3RlbSBzdHVmZi4gSXQgbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIHRoZSBgZGF4X2ZvbGlvX2luaXRgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIHJlbW92YWwgb2YgYSBsaW5lLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHNldmVyaXR5LiBUaGlzIGxvb2tzIGxpa2UgYmVuaWduIG9yIFFBL3Rlc3RpbmcgcmVsYXRlZC4gSSB3aWxsIGJlIHN1cmUgdG8gZG91YmxlIGNoZWNrIHRoaXMuIFRoZXJlIGFyZW4ndCBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4gTm8gaGlnaC1zZXZlcml0eSBhY3Rpb25zIG9yIGFueXRoaW5nIGxpa2UgdGhhdC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZGF4X2ZvbGlvX2luaXRgIGZ1bmN0aW9uIGRvZXMgYW5kIHdoZXJlIGl0J3MgdXNlZC4gSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCB0aGlzIHBhdGNoIHdpdGhpbiBgZnMvZGF4LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgaXNzdWVzLiBJJ2xsIGFsc28gY2hlY2sgdGhlIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCBob3cgYGRheF9mb2xpb19pbml0YCBpcyBjYWxsZWQgYW5kIHdoYXQgaXQncyB1c2VkIGZvci4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgYGRheF9mb2xpb19pbml0YCBpcyBjcml0aWNhbC4gT25jZSBJJ3ZlIGdvdCB0aGF0IHBpY3R1cmUsIEkgY2FuIHRoZW4gYXNzZXNzIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIHJlYXNvbmFibHkgdHJpZ2dlciBhbnkgaW50ZXJlc3RpbmcgY29kZSBwYXRocyBvciBlZGdlIGNhc2VzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB3aGljaCBtaWdodCBtZXJpdCBmdXp6aW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgdG91Y2hlcyBtZW1vcnkgYWxsb2NhdGlvbiwgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBBZnRlciB0aGF0LCBJJ2xsIGdvIHRocm91Z2ggc3RhbmRhcmQgdG9vbCBjYWxscyB0byBwcm92aWRlIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6NDUuOTM2ODQ4Njc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTYzNzc3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfZm9saW9faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kYXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz00MzM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRheF9mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2RheC5jLTQ1Ny1cXG5mcy9kYXguYzo0NTg6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNDU5LXtcXG4tLVxcbmZzL2RheC5jPTQ3Nj1zdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTQ5NS1cXHRcXHRXQVJOX09OX09OQ0UoZm9saW8tXFx1MDAzZW1hcHBpbmcpO1xcbmZzL2RheC5jOjQ5NjpcXHRcXHRkYXhfZm9saW9faW5pdChlbnRyeSk7XFxuZnMvZGF4LmMtNDk3LVxcdFxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6NDYuMTUyNTExNzc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyOTA3ODc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIGxpbmVzIDQ1MC01MjAgb2YgYGZzL2RheC5jYDpcblxuKipEaXZpbmcgaW50byB0aGUgREFYIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDQ1MCB0byA1MjAgb2YgYGZzL2RheC5jYC4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiwga25vd2luZyB0aGUgZmlsZSwgaXMgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBmYWlybHkgbG93LWxldmVsIERBWCAoRGlyZWN0IEFjY2Vzcykgb3BlcmF0aW9uIG9yIHBlcmhhcHMgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBwZXJzaXN0ZW50IG1lbW9yeS4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgY29udGV4dCB3aXRoaW4gdGhlIGZpbGUsIEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBkZXZpY2Ugb3IgcGFnZSBjYWNoZSwgYnV0IHNwZWNpZmljYWxseSBpbiB0aGUgb3B0aW1pemVkIGNvbnRleHQgdGhhdCBEQVggYWZmb3Jkcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyByZWxhdGluZyB0byBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5IGFuZCBob3cgdGhlIGNvZGUgbWFuYWdlcyB0aGVzZSBkaXJlY3QgbWFwcGluZ3MuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJ2xsIGJlIHNraW1taW5nIGZvciBhbnkgZnVuY3Rpb24gY2FsbHMgdGhhdCBnaXZlIG1lIGEgY29udGV4dCwgcGVyaGFwcyBhIGRhdGEgc3RydWN0dXJlIGxpa2UgYHN0cnVjdCBpbm9kZWAsIGBzdHJ1Y3QgYWRkcmVzc19zcGFjZWAsIG9yIGBzdHJ1Y3QgcGFnZWAuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGBwZm5fdGAgb3IgYHBtZF90YCBtYW5pcHVsYXRpb25zLCBhcyB0aGlzIHdvdWxkIHN1Z2dlc3QgZGlyZWN0IG1lbW9yeSBvcGVyYXRpb25zLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgZGVhbGluZyB3aXRoIERBWC1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIGNyZWF0aW5nIHBlcnNpc3RlbnQgbWVtb3J5IG1hcHBpbmdzLCBtYW5hZ2luZyB0aGUgY2FjaGUgY29oZXJlbmN5IGlzc3VlcywgYW5kIGhhbmRsaW5nIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBMZXQncyBzZWUgaWYgdGhpcyBsaW5lcyBzZWdtZW50IGlzIGFib3V0IHNldHRpbmcgdXAgb3IgY2xlYW5pbmcgdXAgZGlyZWN0IGFjY2Vzcywgb3IgcGVyaGFwcyBob3cgdGhlIHN5c3RlbSBpbnRlZ3JhdGVzIHdpdGggdGhlIHRyYWRpdGlvbmFsIHBhZ2UgY2FjaGUgaW4gREFYIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNjo0OC44ODE1OTM3NzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGF4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgaSk7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdFxcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoKHN0cnVjdCBmb2xpbyAqKXBhZ2UpKTtcXG4gNDUzOlxcdFxcdH1cXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0cmV0dXJuIHJlZjtcXG4gNDU2OlxcdH1cXG4gNDU3OlxcdFxcbiA0NTg6XFx0c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXFxuIDQ1OTpcXHR7XFxuIDQ2MDpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNDYxOlxcdFxcdGludCBvcmRlciA9IGRheF9lbnRyeV9vcmRlcihlbnRyeSk7XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdC8qXFxuIDQ2NDpcXHRcXHQgKiBGb2xpbyBzaG91bGQgaGF2ZSBiZWVuIHNwbGl0IGJhY2sgdG8gb3JkZXItMCBwYWdlcyBpblxcbiA0NjU6XFx0XFx0ICogZGF4X2ZvbGlvX3B1dCgpIHdoZW4gdGhleSB3ZXJlIHJlbW92ZWQgZnJvbSB0aGVpclxcbiA0NjY6XFx0XFx0ICogZmluYWwgbWFwcGluZy5cXG4gNDY3OlxcdFxcdCAqL1xcbiA0Njg6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX29yZGVyKGZvbGlvKSk7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDApIHtcXG4gNDcxOlxcdFxcdFxcdHByZXBfY29tcG91bmRfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9yZGVyKTtcXG4gNDcyOlxcdFxcdFxcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcXG4gNDczOlxcdFxcdH1cXG4gNDc0OlxcdH1cXG4gNDc1OlxcdFxcbiA0NzY6XFx0c3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIDQ3NzpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gNDc4OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgYm9vbCBzaGFyZWQpXFxuIDQ3OTpcXHR7XFxuIDQ4MDpcXHRcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBkYXhfZW50cnlfc2l6ZShlbnRyeSksIGluZGV4O1xcbiA0ODE6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcXG4gNDg0OlxcdFxcdFxcdHJldHVybjtcXG4gNDg1OlxcdFxcbiA0ODY6XFx0XFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MgXFx1MDAyNiB+KHNpemUgLSAxKSk7XFxuIDQ4NzpcXHRcXHRpZiAoc2hhcmVkIFxcdTAwMjZcXHUwMDI2IChmb2xpby1cXHUwMDNlbWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHtcXG4gNDg4OlxcdFxcdFxcdGlmIChmb2xpby1cXHUwMDNlbWFwcGluZylcXG4gNDg5OlxcdFxcdFxcdFxcdGRheF9mb2xpb19tYWtlX3NoYXJlZChmb2xpbyk7XFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdFxcdFdBUk5fT05fT05DRSghZm9saW8tXFx1MDAzZXNoYXJlKTtcXG4gNDkyOlxcdFxcdFxcdFdBUk5fT05fT05DRShkYXhfZW50cnlfb3JkZXIoZW50cnkpICE9IGZvbGlvX29yZGVyKGZvbGlvKSk7XFxuIDQ5MzpcXHRcXHRcXHRmb2xpby1cXHUwMDNlc2hhcmUrKztcXG4gNDk0OlxcdFxcdH0gZWxzZSB7XFxuIDQ5NTpcXHRcXHRcXHRXQVJOX09OX09OQ0UoZm9saW8tXFx1MDAzZW1hcHBpbmcpO1xcbiA0OTY6XFx0XFx0XFx0ZGF4X2ZvbGlvX2luaXQoZW50cnkpO1xcbiA0OTc6XFx0XFx0XFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiA0OTg6XFx0XFx0XFx0Zm9saW8tXFx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xcbiA0OTk6XFx0XFx0XFx0Zm9saW8tXFx1MDAzZWluZGV4ID0gaW5kZXg7XFxuIDUwMDpcXHRcXHR9XFxuIDUwMTpcXHR9XFxuIDUwMjpcXHRcXG4gNTAzOlxcdHN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiA1MDQ6XFx0XFx0XFx0XFx0XFx0Ym9vbCB0cnVuYylcXG4gNTA1OlxcdHtcXG4gNTA2OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIDUwOTpcXHRcXHRcXHRyZXR1cm47XFxuIDUxMDpcXHRcXG4gNTExOlxcdFxcdGRheF9mb2xpb19wdXQoZm9saW8pO1xcbiA1MTI6XFx0fVxcbiA1MTM6XFx0XFxuIDUxNDpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXFxuIDUxNTpcXHR7XFxuIDUxNjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxcbiA1MTk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjQ4Ljg4MTc0OTkyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTk3Mjg0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgY2hhbmdlczpcblxuKipBbmFseXppbmcgdGhlIEZvbGlvIERlZmVycmVkIExpc3QgUmVtb3ZhbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5IHJpcHBlZCBvdXQgYElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KTtgLiBUaGF0J3MgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSB0aWVkIHRvIGhvdyBmb2xpb3MgYXJlIGJlaW5nIG1hbmFnZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbXBhY3Qgb2YgdGhpcyByZW1vdmFsLCBhbmQgd2hhdCBpdCBtaWdodCBiZSByZXBsYWNlZCB3aXRoLiBJIGtub3cgYF9kZWZlcnJlZF9saXN0YCBzdWdnZXN0cyBzb21lIGtpbmQgb2YgZGVsYXllZCBwcm9jZXNzaW5nIG9yIHF1ZXVpbmcsIHNvIEkgc3VzcGVjdCB0aGlzIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQsIHBhZ2UgcmVjbGFtYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBJL08gc2NoZWR1bGluZy5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hhdCBgcHJlcF9jb21wb3VuZF9wYWdlYCBpcyBkb2luZyBhbmQgd2h5IHRoZSBjb2RlIGlzIHRvdWNoaW5nIGl0LiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGNvbXBvdW5kIHBhZ2VzLiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGNvZGUgaXMgcmVsYXRlZCB0byB0aGUgY3JlYXRpb24gb3IgaGFuZGxpbmcgb2YgbGFyZ2UgbWVtb3J5IHBhZ2VzLlxuXG5UaW1lIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UuIEkgd2lsbCBnbyB0aHJvdWdoIHRoZSBjaGFuZ2VzIGFuZCBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZXhpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjUxLjA0MTQ4MzQ2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgxMzEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmVwX2NvbXBvdW5kX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0xODQ1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhdGEpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTg4NS1cXHRpZiAob3JkZXIpXFxubW0vY29tcGFjdGlvbi5jOjE4ODY6XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKFxcdTAwMjZkc3QtXFx1MDAzZXBhZ2UsIG9yZGVyKTtcXG5tbS9jb21wYWN0aW9uLmMtMTg4Ny1cXHRjYy1cXHUwMDNlbnJfZnJlZXBhZ2VzIC09IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2NDE9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzI3LVxcdFxcdGlmIChuZXdfb3JkZXIpIHtcXG5tbS9odWdlX21lbW9yeS5jOjM3Mjg6XFx0XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKG5ld19oZWFkLCBuZXdfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzcyOS1cXHRcXHRcXHRmb2xpb19zZXRfbGFyZ2Vfcm1hcHBhYmxlKG5ld19mb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MzE3OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTg0LVxcdC8qXFxubW0vaHVnZXRsYi5jOjMxODU6XFx0ICogVGhpcyBpcyBhbiBvcGVuLWNvZGVkIHByZXBfY29tcG91bmRfcGFnZSgpIHdoZXJlYnkgd2UgYXZvaWRcXG5tbS9odWdldGxiLmMtMzE4Ni1cXHQgKiB3YWxraW5nIHBhZ2VzIHR3aWNlIGJ5IGluaXRpYWxpemluZy9wcmVwYXJpbmcrZnJlZXppbmcgdGhlbSBpbiB0aGVcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zOTQ2PXN0YXRpYyBsb25nIGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHN0cnVjdCBoc3RhdGUgKnNyYywgc3RydWN0IGhzdGF0ZSAqZHN0LFxcbi0tXFxubW0vaHVnZXRsYi5jLTM5ODYtXFx0XFx0XFx0Y2xlYXJfY29tcG91bmRfaGVhZChwYWdlKTtcXG5tbS9odWdldGxiLmM6Mzk4NzpcXHRcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgZHN0LVxcdTAwM2VvcmRlcik7XFxubW0vaHVnZXRsYi5jLTM5ODgtXFxuLS1cXG5tbS9tZW1yZW1hcC5jPTQ4MT12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcXG4tLVxcbm1tL21lbXJlbWFwLmMtNTI2LVxcdGlmIChvcmRlcilcXG5tbS9tZW1yZW1hcC5jOjUyNzpcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xcbm1tL21lbXJlbWFwLmMtNTI4LX1cXG4tLVxcbm1tL21tX2luaXQuYz0xMDQ4PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbi0tXFxubW0vbW1faW5pdC5jLTEwNTgtXFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cXG5tbS9tbV9pbml0LmM6MTA1OTpcXHQgKiBwcmVwX2NvbXBvdW5kX3BhZ2UoKSBkb2VzIG5vdCB0YWtlIGNhcmUgb2YgdGhhdCwgc28gaW5zdGVhZCB3ZVxcbm1tL21tX2luaXQuYzoxMDYwOlxcdCAqIG9wZW4tY29kZSBwcmVwX2NvbXBvdW5kX3BhZ2UoKSBzbyB3ZSBjYW4gdGFrZSBjYXJlIG9mIGluaXRpYWxpemluZ1xcbm1tL21tX2luaXQuYy0xMDYxLVxcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MDEtXFxubW0vcGFnZV9hbGxvYy5jOjcwMjp2b2lkIHByZXBfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3BhZ2VfYWxsb2MuYy03MDMte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE4NzY9c3RhdGljIHZvaWQgcHJlcF9uZXdfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTg4MS1cXHRpZiAob3JkZXIgXFx1MDAyNlxcdTAwMjYgKGdmcF9mbGFncyBcXHUwMDI2IF9fR0ZQX0NPTVApKVxcbm1tL3BhZ2VfYWxsb2MuYzoxODgyOlxcdFxcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XFxubW0vcGFnZV9hbGxvYy5jLTE4ODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjUxLjEwMTMwMzUwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTg4NzIzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBjb2RlIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyBjb21wb3VuZCBwYWdlcywgc3BlY2lmaWNhbGx5IHRoZSBwcmUtaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBgcHJlcF9jb21wb3VuZF9wYWdlYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYF9kZWZlcnJlZF9saXN0YCBvciBpZiBpdCdzIGRlbGVnYXRpbmcgdGhhdCB0byBzb21ldGhpbmcgZWxzZSwgbGlrZSBgZm9saW9fcHJlcF9sYXJnZV9ybWFwcGFibGVgIG9yIGEgc2ltcGxlIGBJTklUX0xJU1RfSEVBRGAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBwcmVwX2NvbXBvdW5kX3BhZ2VgIHRvIHNlZSBob3cgdGhvc2UgZmllbGRzIGFyZSBiZWluZyBoYW5kbGVkLiBJIGtub3cgdGhpcyBhcmVhIGNhbiBoYXZlIHN1YnRsZSBpbml0aWFsaXphdGlvbiByZXF1aXJlbWVudHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzUzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6NTMuMDYwMTkzMTE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdCAqL1xcbiA3MDE6XFx0XFxuIDcwMjpcXHR2b2lkIHByZXBfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiA3MDM6XFx0e1xcbiA3MDQ6XFx0XFx0aW50IGk7XFxuIDcwNTpcXHRcXHRpbnQgbnJfcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiA3MDY6XFx0XFxuIDcwNzpcXHRcXHRfX1NldFBhZ2VIZWFkKHBhZ2UpO1xcbiA3MDg6XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspXFxuIDcwOTpcXHRcXHRcXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSArIGksIHBhZ2UsIG9yZGVyKTtcXG4gNzEwOlxcdFxcbiA3MTE6XFx0XFx0cHJlcF9jb21wb3VuZF9oZWFkKHBhZ2UsIG9yZGVyKTtcXG4gNzEyOlxcdH1cXG4gNzEzOlxcdFxcbiA3MTQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiA3MTU6XFx0e1xcbiA3MTY6XFx0XFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XFxuIDcxNzpcXHRcXHRfX1NldFBhZ2VCdWRkeShwYWdlKTtcXG4gNzE4OlxcdH1cXG4gNzE5OlxcdFxcbiA3MjA6XFx0I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuIDcyMTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gNzIyOlxcdHtcXG4gNzIzOlxcdFxcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMgPSBjdXJyZW50LVxcdTAwM2VjYXB0dXJlX2NvbnRyb2w7XFxuIDcyNDpcXHRcXG4gNzI1OlxcdFxcdHJldHVybiB1bmxpa2VseShjYXBjKSBcXHUwMDI2XFx1MDAyNlxcbiA3MjY6XFx0XFx0XFx0IShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0tUSFJFQUQpIFxcdTAwMjZcXHUwMDI2XFxuIDcyNzpcXHRcXHRcXHQhY2FwYy1cXHUwMDNlcGFnZSBcXHUwMDI2XFx1MDAyNlxcbiA3Mjg6XFx0XFx0XFx0Y2FwYy1cXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XFxuIDcyOTpcXHR9XFxuIDczMDpcXHRcXG4gNzMxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbFxcbiA3MzI6XFx0Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbiA3MzM6XFx0XFx0XFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXFxuIDczNDpcXHR7XFxuIDczNTpcXHRcXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cXHUwMDNlb3JkZXIpXFxuIDczNjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDczNzpcXHRcXG4gNzM4OlxcdFxcdC8qIERvIG5vdCBhY2NpZGVudGFsbHkgcG9sbHV0ZSBDTUEgb3IgaXNvbGF0ZWQgcmVnaW9ucyovXFxuIDczOTpcXHRcXHRpZiAoaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI2OjUzLjA2MDU0NzY1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTIwMjMyNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoYXQgdGhvdWdodCBwcm9jZXNzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvbXBvdW5kIEhlYWQ6IE15IEFuYWx5dGljYWwgSm91cm5leSoqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgcHJlcF9jb21wb3VuZF9oZWFkYC4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRvIGRpc3NlY3QgdGhhdCBwaHJhc2UuIEkga25vdyB0aGlzIGlzIGEgc3BlY2lmaWMgY29tcG9uZW50LCBsaWtlbHkgd2l0aGluIGEgbGFyZ2VyIE5MUCBwaXBlbGluZSBvciBrbm93bGVkZ2UgcmVwcmVzZW50YXRpb24gc3lzdGVtLiBcIlByZXBcIiBzdWdnZXN0cyBpdCdzIGEgcHJlcHJvY2Vzc29yLCBhIG1vZHVsZSBkZXNpZ25lZCB0byBwcmVwYXJlIHNvbWUgaW5wdXQuIFwiQ29tcG91bmQgaGVhZFwiLi4uIHRoYXQncyB0aGUgaW50ZXJlc3RpbmcgcGFydC4gTXkgaW1tZWRpYXRlIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGlzIGhhbmRsaW5nIGNvbXBvdW5kIHN0cnVjdHVyZXMsIGxpa2VseSBpbiBhIGxpbmd1aXN0aWMgY29udGV4dC4gVGhpbmsgbm91biBwaHJhc2VzIGxpa2UgXCJyZWQgYXBwbGUgdHJlZVwiIG9yIHBlcmhhcHMgbW9yZSBjb21wbGV4IGNvbnN0cnVjdGlvbnMgaW52b2x2aW5nIHByZXBvc2l0aW9ucy5cblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSBpbXBsZW1lbnRhdGlvbnMuIElzIHRoaXMgaWRlbnRpZnlpbmcgdGhlIGhlYWQgbm91biB3aXRoaW4gYSBjb21wb3VuZD8gSXMgaXQgYnJlYWtpbmcgZG93biB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGhlYWQgYW5kIHRoZSBtb2RpZnlpbmcgZWxlbWVudHM/IEFyZSB0aGVyZSBkaWZmZXJlbnQgYXBwcm9hY2hlcyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY29tcG91bmQg4oCTIGlzIGl0IGRlYWxpbmcgd2l0aCBwdXJlIG5vdW4gY29tcG91bmRzLCBvciBwb3NzaWJseSBtb3JlIHZlcnNhdGlsZSBjb25zdHJ1Y3Rpb25zIHdpdGggYWRqZWN0aXZhbCBtb2RpZmljYXRpb25zP1xuXG5NeSBleHBlcmllbmNlIGRpY3RhdGVzIHRoYXQgdGhlIFwiaGVhZFwiIGNvdWxkIGJlIGRldGVybWluZWQgYnkgdmFyaW91cyBsaW5ndWlzdGljIHByaW5jaXBsZXMsIG1heWJlIHN5bnRhY3RpYyBkb21pbmFuY2UsIHNlbWFudGljIGltcG9ydGFuY2UsIG9yIGV2ZW4gc3RhdGlzdGljYWwgZnJlcXVlbmN5LiBUaGUgaW1wbGVtZW50YXRpb24gbWlnaHQgaW52b2x2ZSBhIGxvb2t1cCB0YWJsZSBvZiBjb21tb24gY29tcG91bmQgcGF0dGVybnMsIGEgcnVsZS1iYXNlZCBzeXN0ZW0sIG9yIGV2ZW4gc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCB1c2luZyBtYWNoaW5lIGxlYXJuaW5nIHRvIGxlYXJuIGhlYWQtbW9kaWZpZXIgcmVsYXRpb25zaGlwcy4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgYW1iaWd1aXR5IOKAkyBjb21wb3VuZCBoZWFkcyBjYW4gYmUgc3VycHJpc2luZ2x5IHRyaWNreSEgTXkgZmllbGQgaXMgZnVsbCBvZiBzdWNoIGVkZ2UgY2FzZXMsIGhvdyBpcyB0aGlzIGhhbmRsaW5nIHRoZW0/IERvZXMgaXQgYXNzaWduIGEgcHJvYmFiaWxpdHkgb3IgY29uZmlkZW5jZSB0byBpdHMgaGVhZCBhc3NpZ25tZW50cz9cblxuVGhlIHBocmFzZSBpdHNlbGYgc3VnZ2VzdHMgYSBtb2R1bGFyIGRlc2lnbjsgSSBhbSBleHBlY3RpbmcgdGhpcyB0byBpbnRlZ3JhdGUgd2l0aCBhIHdpZGVyIHBpcGVsaW5lIOKAkyBpdCBwcm9iYWJseSB0YWtlcyBhIHNlbnRlbmNlIG9yIHBocmFzZSBhcyBpbnB1dCwgcGFyc2VzIGl0LCBpZGVudGlmaWVzIHRoZSBjb21wb3VuZCBzdHJ1Y3R1cmUsIGFuZCB0aGVuIHByb2Nlc3NlcyBpdCBhY2NvcmRpbmdseS4gVGhlIG91dHB1dCB3aWxsIGxpa2VseSBiZSBhIG1vZGlmaWVkIHJlcHJlc2VudGF0aW9uLCBwZXJoYXBzIGEgZGVwZW5kZW5jeSBwYXJzZSwgYSBzZW1hbnRpYyByb2xlIGFzc2lnbm1lbnQsIG9yIGEgZmVhdHVyZSB2ZWN0b3IuIFdoYXQgdHlwZSBvZiBvdXRwdXQgaXMgb2YgcHJpbWFyeSBpbXBvcnRhbmNlIGluIGluZm9ybWluZyB0aGUgbmV4dCBzdGVwcyBvZiB0aGlzIHBpcGVsaW5lLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgYXBwbGljYXRpb24gaXMuIElzIHRoaXMgZm9yIGluZm9ybWF0aW9uIHJldHJpZXZhbCwgbWFjaGluZSB0cmFuc2xhdGlvbiwgb3IgdGV4dCBzdW1tYXJpemF0aW9uPyBUaGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBlbmQgdGFzayB3aWxsIGhlYXZpbHkgaW5mbHVlbmNlIGhvdyBcImdvb2RcIiB0aGlzIHByZXByb2Nlc3NvciBuZWVkcyB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE1OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MjY6NTguNTgwNzg0NTkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTA2MjQzMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcF9jb21wb3VuZF9oZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MzE3OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3ZtZW1tYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMTkzLVxcdGh1Z2V0bGJfZm9saW9faW5pdF90YWlsX3ZtZW1tYXAoZm9saW8sIGgsIDEsIG5yX3BhZ2VzKTtcXG5tbS9odWdldGxiLmM6MzE5NDpcXHRwcmVwX2NvbXBvdW5kX2hlYWQoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBodWdlX3BhZ2Vfb3JkZXIoaCkpO1xcbm1tL2h1Z2V0bGIuYy0zMTk1LX1cXG4tLVxcbm1tL2ludGVybmFsLmg9NzY0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpwYWdlX3JtYXBwYWJsZV9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL2ludGVybmFsLmgtNzcyLVxcbm1tL2ludGVybmFsLmg6NzczOnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9pbnRlcm5hbC5oLTc3NC17XFxuLS1cXG5tbS9tbV9pbml0LmM9MTA0OD1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMDcwLVxcdH1cXG5tbS9tbV9pbml0LmM6MTA3MTpcXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xcbm1tL21tX2luaXQuYy0xMDcyLX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MDI9dm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTAtXFxubW0vcGFnZV9hbGxvYy5jOjcxMTpcXHRwcmVwX2NvbXBvdW5kX2hlYWQocGFnZSwgb3JkZXIpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNjo1OC45MzE0MTY5NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzODAzNDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYG1tL2ludGVybmFsLmhgIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGhhbmRsaW5nIGNvbXBvdW5kIGhlYWRzLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyBsaXZlcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgcHJlcF9jb21wb3VuZF9oZWFkYCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJIGtub3cgaXQncyBpbiBgbW0vaW50ZXJuYWwuaGAuIEknbGwgd2FudCB0byByZXZpZXcgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgaW50ZXJuYWxseS4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBvcGVyYXRlcyBvbiwgYW5kIHdoYXQgaXRzIG92ZXJhbGwgcHVycG9zZSBpcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRvci4gQW55IGludGVyYWN0aW9ucyB3aXRoIGJ1ZGR5IGFsbG9jYXRpb25zLCBwYWdlIHN0cnVjdHVyZXMsIG9yIHRoZSBzbGFiIGFsbG9jYXRvciBuZWVkIGNhcmVmdWwgZXhhbWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzowMC43Njk0NTQ5MTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzcwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzcwOlxcdFxcdHJldHVybiBmb2xpbztcXG4gNzcxOlxcdH1cXG4gNzcyOlxcdFxcbiA3NzM6XFx0c3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfaGVhZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiA3NzQ6XFx0e1xcbiA3NzU6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlO1xcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRmb2xpb19zZXRfb3JkZXIoZm9saW8sIG9yZGVyKTtcXG4gNzc4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfbGFyZ2VfbWFwY291bnQsIC0xKTtcXG4gNzc5OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QQUdFX01BUENPVU5UKSlcXG4gNzgwOlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfbnJfcGFnZXNfbWFwcGVkLCAwKTtcXG4gNzgxOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTV9JRCkpIHtcXG4gNzgyOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VfbW1faWRzID0gMDtcXG4gNzgzOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VfbW1faWRfbWFwY291bnRbMF0gPSAtMTtcXG4gNzg0OlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VfbW1faWRfbWFwY291bnRbMV0gPSAtMTtcXG4gNzg1OlxcdFxcdH1cXG4gNzg2OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgfHwgb3JkZXIgXFx1MDAzZSAxKSB7XFxuIDc4NzpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlX3BpbmNvdW50LCAwKTtcXG4gNzg4OlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZW50aXJlX21hcGNvdW50LCAtMSk7XFxuIDc4OTpcXHRcXHR9XFxuIDc5MDpcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSAxKVxcbiA3OTE6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCk7XFxuIDc5MjpcXHR9XFxuIDc5MzpcXHRcXG4gNzk0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjAwLjc2OTU5NzgzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDI0NjMyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEJ1ZyBhbmQgSXRzIEZ1enppbmcgUmVsZXZhbmNlKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ3ZlIGJlZW4gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgSSd2ZSBmb3VuZCBhIHJlZHVuZGFuY3ksIHBvdGVudGlhbGx5IGEgYnVnLiBJbiBgZnMvZGF4LmNgLCB0aGUgY29kZSBjaGVja3MgYGlmIChvcmRlciBcdTAwM2UgMClgIGFuZCBpbnNpZGUgdGhpcyBjb25kaXRpb24gY2FsbHMgYHByZXBfY29tcG91bmRfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBvcmRlcilgLiBOb3csIGBwcmVwX2NvbXBvdW5kX3BhZ2UoKWAgaW50ZXJuYWxseSBjYWxscyBgcHJlcF9jb21wb3VuZF9oZWFkKClgLCBhbmQgdGhlIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAgZnVuY3Rpb24gaGFzIGFuIGBpZiAob3JkZXIgXHUwMDNlIDEpYCBjaGVjaywgd2hpY2ggdGhlbiBpbml0aWFsaXplcyB0aGUgYF9kZWZlcnJlZF9saXN0YC4gVGhlIGlzc3VlIGlzLCB0aGUgb3V0ZXIgY29kZSBibG9jayBpbiBgZnMvZGF4LmNgIGFsc28gaGFzIGFuIGBpZiAob3JkZXIgXHUwMDNlIDEpYCB3aGljaCBjYWxscyBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCEgSXQncyByZWR1bmRhbnQgc2luY2UgdGhlIGlubmVyIGZ1bmN0aW9uIGNhbGwgYWxyZWFkeSB0YWtlcyBjYXJlIG9mIHRoZSBpbml0aWFsaXphdGlvbiB3aGVuIGBvcmRlciBcdTAwM2UgMWAuIFRoaXMgY291bGQgYmUgYSBoYXJtbGVzcyBkdXBsaWNhdGlvbiwgb3IgaXQgY291bGQgaW5kaWNhdGUgc29tZXRoaW5nIG1vcmUgcHJvYmxlbWF0aWMuXG5cbk5vdywgdGhlIGNvcmUgb2YgbXkgdGhpbmtpbmcgcmV2b2x2ZXMgYXJvdW5kIHdoZXRoZXIgdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQuIEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGNvbmZpcm06XG5cbjEuICAqKklzIHRoaXMgY29kZSBhY3R1YWxseSByZWFjaGFibGU/KiogWWVzLCBgZnMvZGF4LmNgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJdCdzIGNvcmUga2VybmVsIGZpbGVzeXN0ZW0gY29kZSByZWxhdGVkIHRvIERBWCwgd2hpY2ggaXMgdXNlZCBmb3IgYWNjZXNzaW5nIHBlcnNpc3RlbnQgbWVtb3J5LiBTeXN0ZW1zIGxpa2UgZXh0NCBvciB4ZnMgd2l0aCBEQVgsIG9yIGV2ZW4gZW11bGF0ZWQgcG1lbSBkZXZpY2VzLCB3aWxsIGV4ZXJjaXNlIHRoaXMgY29kZS5cblxuMi4gICoqSXMgaXQgYSBjb3JlIHN1YnN5c3RlbT8qKiBZZXMsIERBWCBkZWFscyB3aXRoIGZpbGVzeXN0ZW1zIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgYm90aCBvZiB3aGljaCBhcmUgY3JpdGljYWwgY29yZSBzdWJzeXN0ZW1zLlxuXG4zLiAgKipJcyBpdCByZWZhY3RvcmVkPyoqIFllcywgdGhpcyBpcyBhIGNvZGUgY2xlYW51cC9yZWZhY3RvcmluZy9vcHRpbWl6YXRpb24gYmVjYXVzZSBvZiB0aGUgZHVwbGljYXRpb24uXG5cblRoZXJlZm9yZSwgYWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSBkZWZpbmVkIGluIFNlY3Rpb25zIDEsIDIsIGFuZCAzLCB0aGlzIGNoYW5nZSAqZGVmaW5pdGVseSogbWVldHMgdGhlIFwiV29ydGhGdXp6aW5nID0gdHJ1ZVwiIGNyaXRlcmlhLiBXZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8gcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbS4gUmVmYWN0b3JpbmdzLCBlc3BlY2lhbGx5IHRob3NlIHRvdWNoaW5nIGRhdGEgc3RydWN0dXJlcyBvciBjb250cm9sIGZsb3csIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBzZW1hbnRpYyBzaGlmdHMgb3IgbGF0ZW50IGJ1Z3MuIFRoaXMgaXMgcHJlY2lzZWx5IHdoYXQgdGhlIGd1aWRlbGluZXMgYXJlIGNhdXRpb25pbmcgYWdhaW5zdCFcblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgdGhlIHJlcXVpcmVtZW50IGZvciBgZnMvZGF4LmNgLCBgZGF4X2ZvbGlvX2luaXRgLCBhbmQgYGRheF9hc3NvY2lhdGVfZW50cnlgLiBJIHdpbGwgbG9vayBpbnRvIHRoZSBgZnMvTWFrZWZpbGVgIGFuZCBgZnMvS2NvbmZpZ2AgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzowNi43OTQyMzMwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NjgyMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MzA9b2JqLSQoQ09ORklHX0FJTykgICAgICAgICAgICAgICArPSBhaW8ub1xcbmZzL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19GU19EQVgpXFx0XFx0Kz0gZGF4Lm9cXG5mcy9NYWtlZmlsZS0zMi1vYmotJChDT05GSUdfRlNfRU5DUllQVElPTilcXHQrPSBjcnlwdG8vXFxuLS1cXG5mcy9mdXNlL01ha2VmaWxlPTE2PWZ1c2UteSArPSBpb21vZGUub1xcbmZzL2Z1c2UvTWFrZWZpbGU6MTc6ZnVzZS0kKENPTkZJR19GVVNFX0RBWCkgKz0gZGF4Lm9cXG5mcy9mdXNlL01ha2VmaWxlLTE4LWZ1c2UtJChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkgKz0gcGFzc3Rocm91Z2gubyBiYWNraW5nLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MDYuOTA4OTIzMzIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NTE4NjAwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGp1c3QgaGFwcGVuZWQ6XG5cbioqRXhhbWluaW5nIHRoZSBEQVggQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBDT05GSUdfRlNfREFYYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byB0aGUga2VybmVsJ3Mgc291cmNlIGNvZGUgYW5kIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBoZWFkIG92ZXIgdG8gYGZzL0tjb25maWdgLCBvciB3aGVyZXZlciB0aGUgZmlsZSBpcyB0aGF0IGhvdXNlcyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0J3MgdGhlIGZpcnN0IHBsYWNlIEknZCBjaGVjayBmb3IgaXQuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzowOC40NjA3ODY5NTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjY1NjMzNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0RBWFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xcbmZzL0tjb25maWctNTctXFxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXFxuZnMvS2NvbmZpZy01OS1cXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjExLjYyNzM1ODQxNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYzMzUwNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgYW5kIG15IGd1dCB0ZWxscyBtZSBgZnMvS2NvbmZpZ2AgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU4LiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciBmaWxlIHN5c3RlbSBmZWF0dXJlcywgb3IgYXQgbGVhc3QgYSBrZXkgc2VjdGlvbiByZWxhdGVkIHRvIHRoZW0sIHdpbGwgYmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhlIGxvZ2ljIGlzIHN0cnVjdHVyZWQuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIHNuaXBwZXQgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eSBvbiB0aGUgYnJvYWRlciBkZXNpZ24gZGVjaXNpb25zIGluIHBsYXksIGFuZCBzaGVkIGxpZ2h0IG9uIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSdtIGludGVyZXN0ZWQgaW4uIFRoZSBwbGFuIGlzIHRvIGdldCBhbiBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIHdoZXRoZXIgSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGluY2x1ZGUgcGF0aHMsIG9yIGlmIHRoZSByZWxldmFudCBiaXRzIGFyZSBkZWZpbmVkIHJpZ2h0IHRoZXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MTQuMjkwNzExNDYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFxuICA1NjpcXHRlbmRpZiAjIEJMT0NLXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBGU19EQVhcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIkZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuICA2MTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuICA2MjpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gIDYzOlxcdFxcdHNlbGVjdCBEQVhcXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgRGlyZWN0IEFjY2VzcyAoREFYKSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuXFxuICA2NjpcXHRcXHQgIElmIHRoZSBibG9jayBkZXZpY2Ugc3VwcG9ydHMgREFYIGFuZCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBEQVgsXFxuICA2NzpcXHRcXHQgIHRoZW4geW91IGNhbiBhdm9pZCB1c2luZyB0aGUgcGFnZWNhY2hlIHRvIGJ1ZmZlciBJL09zLiAgVHVybmluZ1xcbiAgNjg6XFx0XFx0ICBvbiB0aGlzIG9wdGlvbiB3aWxsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgREFYLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxcbiAgNzE6XFx0XFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXFxuICA3MjpcXHRcXHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxcXFxuICA3NTpcXHRcXHRcXHRcXHQtLW1vZGU9ZnNkYXggLS1tYXA9bWVtXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgU2VlIHRoZSAnY3JlYXRlLW5hbWVzcGFjZScgbWFuIHBhZ2UgZm9yIGRldGFpbHMgb24gdGhlIG92ZXJoZWFkIG9mXFxuICA3ODpcXHRcXHQgIC0tbWFwPW1lbTpcXG4gIDc5OlxcdFxcdCAgaHR0cHM6Ly9kb2NzLnBtZW0uaW8vbmRjdGwtdXNlci1ndWlkZS9uZGN0bC1tYW4tcGFnZXMvbmRjdGwtY3JlYXRlLW5hbWVzcGFjZVxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcXG4gIDgyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcXG4gIDgzOlxcdFxcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxcbiAgODQ6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgeW91IGRvIG5vdCBoYXZlIGEgYmxvY2sgZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGlzLFxcbiAgODc6XFx0XFx0ICBvciBpZiB1bnN1cmUsIHNheSBOLiAgU2F5aW5nIFkgd2lsbCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsXFxuICA4ODpcXHRcXHQgIGJ5IGFib3V0IDVrQi5cXG4gIDg5OlxcdFxcbiAgOTA6XFx0Y29uZmlnIEZTX0RBWF9QTURcXG4gIDkxOlxcdFxcdGJvb2xcXG4gIDkyOlxcdFxcdGRlZmF1bHQgRlNfREFYXFxuICA5MzpcXHRcXHRkZXBlbmRzIG9uIEZTX0RBWFxcbiAgOTQ6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoxNC4yOTA4MDkyMDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyMjIwNTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgRlNfREFYKipcblxuUmlnaHQsIHNvIGBGU19EQVhgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgYW5kIGl0J3MgZmxhZ2dlZCBhcyBkZXBlbmRlbnQgb24gYFpPTkVfREVWSUNFYCBhbmQgYE1NVWAuIFN0cmFpZ2h0YXdheSwgSSdtIHRoaW5raW5nLCBcIk9rYXksIHRoYXQncyB0aGUgcm9hZG1hcC5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gYE1NVWAgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGBaT05FX0RFVklDRWAgaXMgdGhlIGtleSByaWdodCBub3cuIEknbGwgbmVlZCB0byBrbm93IHdoYXQgKnRoYXQqIGRlcGVuZHMgb24gdG8gaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IGBaT05FX0RFVklDRWAgaXRzZWxmIGlzIGNvbnRpbmdlbnQgdXBvbi4gVGhhdCB3aWxsIGhlbHAgbWUgdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGNoYWluIGFuZCB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGltcGxpY2F0aW9ucyBmb3IgYEZTX0RBWGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjMyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoxNi45MTMwMTg5MDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDc4NTI3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjIwPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMjQtXFxubW0vS2NvbmZpZzoxMjI1OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIyNi1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoxOS40MjA4Nzk4NDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY5ODc1NzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBiZXR0ZXIsIGFuZCBJJ20gcHJldHR5IHN1cmUgSSd2ZSBzZWVuIGl0IGRlZmluZWQgaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgc2VlbSB0byByZW1lbWJlciBpdCBhcm91bmQgbGluZSAxMjI1LCBnaXZlIG9yIHRha2UuIFRpbWUgdG8ganVtcCBvdmVyIHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBob3cgdGhlIGRlZmF1bHQgdmFsdWUgaXMgc2V0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBoZWxwIHRleHRzIEkgY2FuIGdsZWFuLiBJdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiB5b3UncmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIG9mIGEgcGFydGljdWxhciBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJ20gaG9waW5nIEkgY2FuIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciByZWxhdGVkIG9wdGlvbnMsIGFuZCBwZXJoYXBzIHNwb3QgYW55dGhpbmcgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHR5cGljYWwgZm9ybWF0IGhlcmU6IGEgYGNvbmZpZ2Aga2V5d29yZCwgYSB0eXBlIGRlZmluaXRpb24gKGJvb2wsIHRyaXN0YXRlLCBldGMuKSwgdGhlIGhlbHAgdGV4dCwgYW5kIGxpa2VseSBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBXaXRoIGEgYml0IG9mIGx1Y2ssIHRoZSBmaWxlIGNvbW1lbnRzIHdpbGwgYmUgdXAtdG8tZGF0ZSBhbmQgcHJvdmlkZSBzb21lIHVzZWZ1bCBjb250ZXh0LiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTUwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MjIuMTE5NjQwMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIyMDpcXHRjb25maWcgWk9ORV9ETUEzMlxcbjEyMjE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBETUEzMiB6b25lXFxcIiBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcXG4xMjIyOlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMlxcbjEyMjM6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTIyNDpcXHRcXG4xMjI1OlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMjY6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjI3OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyMjg6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyMjk6XFx0XFxuMTIzMDpcXHRcXHRoZWxwXFxuMTIzMTpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTIzMjpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTIzMzpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjEyMzQ6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjEyMzU6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTIzNjpcXHRcXG4xMjM3OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxcbjEyMzg6XFx0XFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXFxuMTIzOTpcXHRcXHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcXG4xMjQwOlxcdFxcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXFxuMTI0MTpcXHRcXHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxcbjEyNDI6XFx0XFxuMTI0MzpcXHQjXFxuMTI0NDpcXHQjIEhlbHBlcnMgdG8gbWlycm9yIHJhbmdlIG9mIHRoZSBDUFUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzIGludG8gZGV2aWNlIHBhZ2VcXG4xMjQ1OlxcdCMgdGFibGVzLlxcbjEyNDY6XFx0I1xcbjEyNDc6XFx0Y29uZmlnIEhNTV9NSVJST1JcXG4xMjQ4OlxcdFxcdGJvb2xcXG4xMjQ5OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTI1MDpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMTI1MTpcXHRcXG4xMjUyOlxcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4xMjUzOlxcdFxcdGJvb2xcXG4xMjU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoyMi4xMTk3NTI3NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjE5ODA0NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQVggYW5kIFBlcnNpc3RlbnQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBEQVggd29ya3MsIGFuZCBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gREFYIGFuZCBwZXJzaXN0ZW50IG1lbW9yeS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IHBpZWNlcyBvZiB0aGlzIHB1enpsZS4gSSdtIHNlZWluZyBhIGZldyBpbXBvcnRhbnQgY29uY2VwdHMganVtcCBvdXQ6IGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBUaGVuIHRoZXJlJ3MgdGhlIHNwZWNpZmljIGludGVycGxheSB3aXRoIHBlcnNpc3RlbnQgbWVtb3J5IHdpdGggYEJMS19ERVZfUE1FTWAgYW5kIHRoZSBgRlNfREFYX1BNRGAgc3R1ZmYuXG5cblRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCBmdW5jdGlvbiBpbiBgZnMvZGF4LmNgIGlzIHdoZXJlIEknbGwgYmVnaW4uIEkgd2FudCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBpdCwgYW5kIHdoZXRoZXIgdGhvc2UgY2FsbGVycyBhcmUgc3RhdGljIG9yIG5vbi1zdGF0aWMgYmVjYXVzZSB0aGUgY2FsbGVycyB3aWxsIGJlIGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIG9wZXJhdGlvbiBhbmQgd2lsbCBzaG93IHRoZSB3YXlzIHRoZSBrZXJuZWwgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gRm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9scyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHRoZXNlIHBlcnNpc3RlbnQgbWVtb3J5IGRldmljZXMgd2l0aGluIHRoZSBEQVggZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MjQuNzM5NTY1MDcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA3NTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfYXNzb2NpYXRlX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RheC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG4tLVxcbmZzL2RheC5jLTQ3NS1cXG5mcy9kYXguYzo0NzY6c3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZGF4LmMtNDc3LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvZGF4LmM9MTA3Nz1zdGF0aWMgdm9pZCAqZGF4X2luc2VydF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9kYXguYy0xMTA1LVxcdFxcdGRheF9kaXNhc3NvY2lhdGVfZW50cnkoZW50cnksIG1hcHBpbmcsIGZhbHNlKTtcXG5mcy9kYXguYzoxMTA2OlxcdFxcdGRheF9hc3NvY2lhdGVfZW50cnkobmV3X2VudHJ5LCBtYXBwaW5nLCB2bWYtXFx1MDAzZXZtYSxcXG5mcy9kYXguYy0xMTA3LVxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlYWRkcmVzcywgc2hhcmVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MjQuNzkxNjQ2NjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODUxMDg2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGRheF9pbnNlcnRfZW50cnlgIENhbGxzKipcblxuT2theSwgdGltZSB0byBnZXQgZGlnZ2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkYXhfaW5zZXJ0X2VudHJ5YCBpcyBiZWluZyB1c2VkIGluIHRoZSBgZnMvZGF4LmNgIGNvbnRleHQuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY2FsbCBwYXRocyB0byB0aGF0IGZ1bmN0aW9uLCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYmVpbmcgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIERpcmVjdCBBY2Nlc3MgKERBWCkgaW5mcmFzdHJ1Y3R1cmUgaXMgZnVuY3Rpb25pbmcsIGFuZCBwaW5wb2ludCBhcmVhcyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoyNi40NzY3NTkwNjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODIyOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9pbnNlcnRfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZGF4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9MzUwPXN0YXRpYyBpbmxpbmUgYm9vbCBkYXhfZm9saW9faXNfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9kYXguYy0zNTUtLypcXG5mcy9kYXguYzozNTY6ICogV2hlbiBpdCBpcyBjYWxsZWQgYnkgZGF4X2luc2VydF9lbnRyeSgpLCB0aGUgc2hhcmVkIGZsYWcgd2lsbCBpbmRpY2F0ZVxcbmZzL2RheC5jLTM1Ny0gKiB3aGV0aGVyIHRoaXMgZW50cnkgaXMgc2hhcmVkIGJ5IG11bHRpcGxlIGZpbGVzLiBJZiB0aGUgcGFnZSBoYXMgbm90XFxuLS1cXG5mcy9kYXguYz0xMDYzPXN0YXRpYyBib29sIGRheF9mYXVsdF9pc19zeW5jaHJvbm91cyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4tLVxcbmZzL2RheC5jLTEwNzYtICovXFxuZnMvZGF4LmM6MTA3NzpzdGF0aWMgdm9pZCAqZGF4X2luc2VydF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuZnMvZGF4LmMtMTA3OC1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgdm9pZCAqZW50cnksIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxuZnMvZGF4LmM9MTM5Mz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE0MDAtXFxuZnMvZGF4LmM6MTQwMTpcXHQqZW50cnkgPSBkYXhfaW5zZXJ0X2VudHJ5KHhhcywgdm1mLCBpdGVyLCAqZW50cnksIHBmbiwgREFYX1pFUk9fUEFHRSk7XFxuZnMvZGF4LmMtMTQwMi1cXG4tLVxcbmZzL2RheC5jPTE0MDk9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTQyMy1cXG5mcy9kYXguYzoxNDI0OlxcdCplbnRyeSA9IGRheF9pbnNlcnRfZW50cnkoeGFzLCB2bWYsIGl0ZXIsICplbnRyeSwgZm9saW9fcGZuKHplcm9fZm9saW8pLFxcbmZzL2RheC5jLTE0MjUtXFx0XFx0XFx0XFx0ICBEQVhfUE1EIHwgREFYX1pFUk9fUEFHRSk7XFxuLS1cXG5mcy9kYXguYz0xODQwPXN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9pdGVyKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTg3NC1cXG5mcy9kYXguYzoxODc1OlxcdCplbnRyeSA9IGRheF9pbnNlcnRfZW50cnkoeGFzLCB2bWYsIGl0ZXIsICplbnRyeSwgcGZuLCBlbnRyeV9mbGFncyk7XFxuZnMvZGF4LmMtMTg3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MjYuNTI0NTg3MDg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTY5MTk2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBEQVggSW5pdGlhbGl6YXRpb24gYW5kIEZhdWx0IEhhbmRsaW5nKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIERBWCBzdWJzeXN0ZW0g4oCTIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgaXQncyBpbml0aWFsaXplZCBhbmQgaG93IGl0IGhhbmRsZXMgZmF1bHRzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGBkYXhfZm9saW9faW5pdGAuIEl0IGxvb2tzIGxpa2UgdGhpcyBvbmUgaXMgc3RhdGljYWxseSBkZWZpbmVkIHdpdGhpbiBgZnMvZGF4LmNgLiBUaGF0IHRlbGxzIG1lIGl0J3MgYSBjb3JlIGNvbXBvbmVudCwgbGlrZWx5IGNhbGxlZCBlYXJseSBvbiBkdXJpbmcgdGhlIERBWCBzZXR1cCwgYW5kIG5vdCBleHBvc2VkIGV4dGVybmFsbHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBzZXR1cCBvZiBmb2xpbyBzdHJ1Y3R1cmVzIG9yIG90aGVyIGNyaXRpY2FsIERBWCBkYXRhIHN0cnVjdHVyZXMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGVhbHMgd2l0aCBlcnJvcnMgb3IgZmF1bHRzIHdpdGhpbiB0aGUgREFYIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gd2hlcmUgdGhlIGZhdWx0IGhhbmRsaW5nIGNvZGUgcmVzaWRlcyB3aXRoaW4gYGZzL2RheC5jYC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYWxsIG9mIHRoZSBleHBvcnRlZCBhbmQgZXh0ZXJuYWwgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gZmF1bHQgaGFuZGxpbmcuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgZmF1bHQgcGF0aC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoyOS4xMjE1MDk0OTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTM4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52bV9mYXVsdF90IGRheF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZGF4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9MjA4Nj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcG1kX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxcbi0tXFxuZnMvZGF4LmMtMjEwNS0gKi9cXG5mcy9kYXguYzoyMTA2OnZtX2ZhdWx0X3QgZGF4X2lvbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuZnMvZGF4LmMtMjEwNy1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICpwZm5wLCBpbnQgKmlvbWFwX2VycnAsXFxuLS1cXG5mcy9kYXguYz0yMTI4PXN0YXRpYyB2bV9mYXVsdF90IGRheF9pbnNlcnRfcGZuX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9kYXguYy0yMTc2LSAqL1xcbmZzL2RheC5jOjIxNzc6dm1fZmF1bHRfdCBkYXhfZmluaXNoX3N5bmNfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcixcXG5mcy9kYXguYy0yMTc4LVxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzoyOS4xNzIwNTQxNzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3NzM3NjU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFYIFN5bWJvbCBDb3ZlcmFnZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIGlkZW50aWZ5aW5nIGFuZCBjYXRlZ29yaXppbmcgdGhlc2UgREFYLXJlbGF0ZWQgc3ltYm9scyB0byBzZWUgaWYgdGhleSBhcmUgZ29vZCB0YXJnZXRzIGZvciBjb3ZlcmFnZSBhbmFseXNpcy4gSSBzZWU6IGBkYXhfZm9saW9faW5pdGAsIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9pbnNlcnRfZW50cnlgLCBgZGF4X2lvbWFwX2ZhdWx0YCwgYGRheF9pb21hcF9wbWRfZmF1bHRgLCBhbmQgYGRheF9mYXVsdF9pdGVyYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlzdGluZ3Vpc2ggc3RhdGljIHZlcnN1cyBub24tc3RhdGljIGZ1bmN0aW9ucywgYXMgdGhpcyBpbXBhY3RzIHRoZWlyIHZpc2liaWxpdHkgYW5kIGhvdyB3ZSBjYW4gdGFyZ2V0IHRoZW0uXG5cbkkgcXVpY2tseSByZW1lbWJlciB0aGF0IGBkYXhfZm9saW9faW5pdGAsIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9pbnNlcnRfZW50cnlgLCBhbmQgYGRheF9mYXVsdF9pdGVyYCBhcmUgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYGZzL2RheC5jYC4gSG93ZXZlciwgSSBrbm93IHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgdW5sZXNzIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBzdGlsbCBoYXZlIHN5bWJvbHMgaW4gdm1saW51eC4gRXZlbiBpZiBpbmxpbmVkLCBsaXN0aW5nIHRoZSBmdW5jdGlvbnMgYWxvbmcgd2l0aCBlbnRyeXBvaW50cyBpcyBzdGFuZGFyZC4gVGhlIGtleSBwb2ludCB0byByZW1lbWJlciBpcyB0byBmb2N1cyBvbiBmdW5jdGlvbnMgaW4gLmMgZmlsZXMsICpub3QqIGhlYWRlcnMsIGFzIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUuIFNvLCBkZXNwaXRlIHRoZW0gYmVpbmcgc3RhdGljLCB0aGV5IGFyZSBmYWlyIGdhbWUgZm9yIGFuYWx5c2lzLiBgZGF4X2lvbWFwX2ZhdWx0YCBpcyBub24tc3RhdGljLCBzbyBpdCdzIGNsZWFybHkgYSB2YWxpZCBzeW1ib2wuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGhpZ2hsaWdodCBjb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgaW4gaGVhZGVycyBiZWluZyBwcm9ibGVtYXRpYyBmb3IgZGlyZWN0IHRhcmdldGluZywgYnV0IHRoZXNlIGFyZSAqbm90KiB0aGUgY2FzZSBoZXJlLiBgZGF4X2ZvbGlvX2luaXRgIGlzIGluIGBmcy9kYXguY2AsIHNvIHdlJ3JlIGdvb2QuXG5cblRoZXJlZm9yZSwgZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcywgSSB3aWxsIGluY2x1ZGU6XG5cbiogICBgZGF4X2ZvbGlvX2luaXRgXG4qICAgYGRheF9hc3NvY2lhdGVfZW50cnlgXG4qICAgYGRheF9pbnNlcnRfZW50cnlgXG4qICAgYGRheF9pb21hcF9mYXVsdGBcblxuTm93LCBsZXQncyBtb3ZlIG9uLiBJIHdhbnQgdG8gY29ycmVsYXRlIHRoaXMgd2l0aCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgRW5hYmxlQ29uZmlnczogYEZTX0RBWGAsIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYEZTX0RBWF9QTURgLCBhbmQgYEJMS19ERVZfUE1FTWAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVzZSBEQVggb3B0aW9ucyBhZmZlY3Qgb3RoZXIgZmlsZXN5c3RlbXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19GU19EQVhgIGluIGBmcy9leHQ0YCBvciBgZnMveGZzYCB0byBzZWUgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMxMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzozMy40NDk0MzQyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1NDQwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlNfREFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTU2PWVuZGlmICMgQkxPQ0tcXG5mcy9LY29uZmlnLTU3LVxcbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxcbmZzL0tjb25maWctNTktXFx0Ym9vbCBcXFwiRmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvS2NvbmZpZy04OS1cXG5mcy9LY29uZmlnOjkwOmNvbmZpZyBGU19EQVhfUE1EXFxuZnMvS2NvbmZpZy05MS1cXHRib29sXFxuZnMvS2NvbmZpZzo5MjpcXHRkZWZhdWx0IEZTX0RBWFxcbmZzL0tjb25maWc6OTM6XFx0ZGVwZW5kcyBvbiBGU19EQVhcXG5mcy9LY29uZmlnLTk0LVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4tLVxcbmZzL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgKz0gYWlvLm9cXG5mcy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfRlNfREFYKVxcdFxcdCs9IGRheC5vXFxuZnMvTWFrZWZpbGUtMzItb2JqLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXFx0Kz0gY3J5cHRvL1xcbi0tXFxuZnMvZGF4LmM9MTM5Mz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE0MDctXFxuZnMvZGF4LmM6MTQwODojaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcXG5mcy9kYXguYy0xNDA5LXN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jPTE0MzM9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTQzNy19XFxuZnMvZGF4LmM6MTQzODojZW5kaWYgLyogQ09ORklHX0ZTX0RBWF9QTUQgKi9cXG5mcy9kYXguYy0xNDM5LVxcbi0tXFxuZnMvZGF4LmM9MTg5Nz1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcHRlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxcbi0tXFxuZnMvZGF4LmMtMTk3Mi1cXG5mcy9kYXguYzoxOTczOiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxcbmZzL2RheC5jLTE5NzQtc3RhdGljIGJvb2wgZGF4X2ZhdWx0X2NoZWNrX2ZhbGxiYWNrKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4tLVxcbmZzL2RheC5jPTIwODY9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2lvbWFwX3BtZF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqcGZucCxcXG4tLVxcbmZzL2RheC5jLTIwOTAtfVxcbmZzL2RheC5jOjIwOTE6I2VuZGlmIC8qIENPTkZJR19GU19EQVhfUE1EICovXFxuZnMvZGF4LmMtMjA5Mi1cXG4tLVxcbmZzL2RheC5jPTIxMjg9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2luc2VydF9wZm5fbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTIxNTQtXFx0XFx0cmV0ID0gdm1mX2luc2VydF9wYWdlX21rd3JpdGUodm1mLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHRydWUpO1xcbmZzL2RheC5jOjIxNTU6I2lmZGVmIENPTkZJR19GU19EQVhfUE1EXFxuZnMvZGF4LmMtMjE1Ni1cXHRlbHNlIGlmIChvcmRlciA9PSBQTURfT1JERVIpXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9NDM1PXN0YXRpYyBzc2l6ZV90IGVyb2ZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy00NDItXFxuZnMvZXJvZnMvZGF0YS5jOjQ0MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSBcXHUwMDI2XFx1MDAyNiBJU19EQVgoaW5vZGUpKVxcbmZzL2Vyb2ZzL2RhdGEuYy00NDQtXFx0XFx0cmV0dXJuIGRheF9pb21hcF9ydyhpb2NiLCB0bywgXFx1MDAyNmVyb2ZzX2lvbWFwX29wcyk7XFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9NDU4PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXJvZnNfYW9wcyA9IHtcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy00NjYtXFxuZnMvZXJvZnMvZGF0YS5jOjQ2NzojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmZzL2Vyb2ZzL2RhdGEuYy00Njgtc3RhdGljIHZtX2ZhdWx0X3QgZXJvZnNfZGF4X2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTQyMT1zdGF0aWMgYm9vbCBlcm9mc19mY19zZXRfZGF4X21vZGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9lcm9mcy9zdXBlci5jLTQyMi17XFxuZnMvZXJvZnMvc3VwZXIuYzo0MjM6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWCkpIHtcXG5mcy9lcm9mcy9zdXBlci5jLTQyNC1cXHRcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTEwNDg9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xMjY0LSNkZWZpbmUgRVhUNF9NT1VOVF9OT0xPQURcXHRcXHQweDAwMTAwXFx0LyogRG9uJ3QgdXNlIGV4aXN0aW5nIGpvdXJuYWwqL1xcbmZzL2V4dDQvZXh0NC5oOjEyNjU6I2lmZGVmIENPTkZJR19GU19EQVhcXG5mcy9leHQ0L2V4dDQuaC0xMjY2LSNkZWZpbmUgRVhUNF9NT1VOVF9EQVhfQUxXQVlTXFx0XFx0MHgwMDIwMFxcdC8qIERpcmVjdCBBY2Nlc3MgKi9cXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTY5PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xMDItXFxuZnMvZXh0NC9maWxlLmM6MTAzOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtMTA0LXN0YXRpYyBzc2l6ZV90IGV4dDRfZGF4X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz0xMzI9c3RhdGljIHNzaXplX3QgZXh0NF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xNDEtXFxuZnMvZXh0NC9maWxlLmM6MTQyOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtMTQzLVxcdGlmIChJU19EQVgoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9maWxlLmM9NTc1PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03MDQtXFxuZnMvZXh0NC9maWxlLmM6NzA1OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtNzA2LXN0YXRpYyBzc2l6ZV90XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz03Njc9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03NzUtXFxuZnMvZXh0NC9maWxlLmM6Nzc2OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtNzc3LVxcdGlmIChJU19EQVgoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9maWxlLmMtNzk4LVxcbmZzL2V4dDQvZmlsZS5jOjc5OTojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmZzL2V4dDQvZmlsZS5jLTgwMC1zdGF0aWMgdm1fZmF1bHRfdCBleHQ0X2RheF9odWdlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE4Nz1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMzg4LVxcdGNhc2UgT3B0X2RheF90eXBlOlxcbmZzL2V4dDQvc3VwZXIuYzoyMzg5OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9zdXBlci5jLTIzOTAtXFx0e1xcbi0tXFxuZnMvZmlsZV9hdHRyLmM9MjA9dm9pZCBmaWxlYXR0cl9maWxsX3hmbGFncyhzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEsIHUzMiB4ZmxhZ3MpXFxuLS1cXG5mcy9maWxlX2F0dHIuYy0zNC1cXHRpZiAoZmEtXFx1MDAzZWZzeF94ZmxhZ3MgXFx1MDAyNiBGU19YRkxBR19EQVgpXFxuZnMvZmlsZV9hdHRyLmM6MzU6XFx0XFx0ZmEtXFx1MDAzZWZsYWdzIHw9IEZTX0RBWF9GTDtcXG5mcy9maWxlX2F0dHIuYy0zNi1cXHRpZiAoZmEtXFx1MDAzZWZzeF94ZmxhZ3MgXFx1MDAyNiBGU19YRkxBR19QUk9KSU5IRVJJVClcXG4tLVxcbmZzL2ZpbGVfYXR0ci5jPTUyPXZvaWQgZmlsZWF0dHJfZmlsbF9mbGFncyhzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEsIHUzMiBmbGFncylcXG4tLVxcbmZzL2ZpbGVfYXR0ci5jLTY1LVxcdFxcdGZhLVxcdTAwM2Vmc3hfeGZsYWdzIHw9IEZTX1hGTEFHX05PQVRJTUU7XFxuZnMvZmlsZV9hdHRyLmM6NjY6XFx0aWYgKGZhLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZTX0RBWF9GTClcXG5mcy9maWxlX2F0dHIuYy02Ny1cXHRcXHRmYS1cXHUwMDNlZnN4X3hmbGFncyB8PSBGU19YRkxBR19EQVg7XFxuLS1cXG5mcy9mdXNlL0tjb25maWc9NDM9Y29uZmlnIEZVU0VfREFYXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNDctXFx0ZGVwZW5kcyBvbiBWSVJUSU9fRlNcXG5mcy9mdXNlL0tjb25maWc6NDg6XFx0ZGVwZW5kcyBvbiBGU19EQVhcXG5mcy9mdXNlL0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBEQVhcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3NT1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTEyLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExMzpcXHRwZ21hcC1cXHUwMDNldHlwZSA9IE1FTU9SWV9ERVZJQ0VfRlNfREFYO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExNC1cXG4tLVxcbmZzL3hmcy9NYWtlZmlsZT0xNTQ9aWZlcSAoJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpLHkpXFxuZnMveGZzL01ha2VmaWxlOjE1NTp4ZnMtJChDT05GSUdfRlNfREFYKVxcdFxcdCs9IHhmc19ub3RpZnlfZmFpbHVyZS5vXFxuZnMveGZzL01ha2VmaWxlLTE1Ni1lbmRpZlxcbi0tXFxuZnMveGZzL3hmc19idWYuYz0xNzY1PXhmc19hbGxvY19idWZ0YXJnKFxcbi0tXFxuZnMveGZzL3hmc19idWYuYy0xNzczLVxcbmZzL3hmcy94ZnNfYnVmLmM6MTc3NDojaWYgZGVmaW5lZChDT05GSUdfRlNfREFYKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSlcXG5mcy94ZnMveGZzX2J1Zi5jLTE3NzUtXFx0b3BzID0gXFx1MDAyNnhmc19kYXhfaG9sZGVyX29wZXJhdGlvbnM7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz0xOTY0PXhmc19kYXhfZmF1bHRfbG9ja2VkKFxcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtMTk3MS1cXG5mcy94ZnMveGZzX2ZpbGUuYzoxOTcyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSkge1xcbmZzL3hmcy94ZnNfZmlsZS5jLTE5NzMtXFx0XFx0QVNTRVJUKDApO1xcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jPTc1MD14ZnNfZmlsZWF0dHJfc2V0KFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jLTc2Ni1cXHRcXHRcXHRcXHQgICAgICAgRlNfTk9BVElNRV9GTCB8IEZTX05PRFVNUF9GTCB8XFxuZnMveGZzL3hmc19pb2N0bC5jOjc2NzpcXHRcXHRcXHRcXHQgICAgICAgRlNfU1lOQ19GTCB8IEZTX0RBWF9GTCB8XFxuZnMveGZzL3hmc19pb2N0bC5jLTc2OC1cXHRcXHRcXHRcXHQgICAgICAgRlNfUFJPSklOSEVSSVRfRkw7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz0xMzYzPXhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjUte1xcbmZzL3hmcy94ZnNfaW9wcy5jOjEzNjY6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTY5PWVudW0geGZzX2RheF9tb2RlIHtcXG5mcy94ZnMveGZzX3N1cGVyLmM6NzA6XFx0WEZTX0RBWF9JTk9ERSA9IDAsXFxuZnMveGZzL3hmc19zdXBlci5jOjcxOlxcdFhGU19EQVhfQUxXQVlTID0gMSxcXG5mcy94ZnMveGZzX3N1cGVyLmM6NzI6XFx0WEZTX0RBWF9ORVZFUiA9IDIsXFxuZnMveGZzL3hmc19zdXBlci5jLTczLX07XFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmM9Nzk9eGZzX21vdW50X3NldF9kYXhfbW9kZShcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYy04My1cXHRzd2l0Y2ggKG1vZGUpIHtcXG5mcy94ZnMveGZzX3N1cGVyLmM6ODQ6XFx0Y2FzZSBYRlNfREFYX0lOT0RFOlxcbmZzL3hmcy94ZnNfc3VwZXIuYy04NS1cXHRcXHRtcC1cXHUwMDNlbV9mZWF0dXJlcyBcXHUwMDI2PSB+KFhGU19GRUFUX0RBWF9BTFdBWVMgfCBYRlNfRkVBVF9EQVhfTkVWRVIpO1xcbmZzL3hmcy94ZnNfc3VwZXIuYy04Ni1cXHRcXHRicmVhaztcXG5mcy94ZnMveGZzX3N1cGVyLmM6ODc6XFx0Y2FzZSBYRlNfREFYX0FMV0FZUzpcXG5mcy94ZnMveGZzX3N1cGVyLmMtODgtXFx0XFx0bXAtXFx1MDAzZW1fZmVhdHVyZXMgfD0gWEZTX0ZFQVRfREFYX0FMV0FZUztcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYy05MC1cXHRcXHRicmVhaztcXG5mcy94ZnMveGZzX3N1cGVyLmM6OTE6XFx0Y2FzZSBYRlNfREFYX05FVkVSOlxcbmZzL3hmcy94ZnNfc3VwZXIuYy05Mi1cXHRcXHRtcC1cXHUwMDNlbV9mZWF0dXJlcyB8PSBYRlNfRkVBVF9EQVhfTkVWRVI7XFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmM9OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBkYXhfcGFyYW1fZW51bXNbXSA9IHtcXG5mcy94ZnMveGZzX3N1cGVyLmM6OTk6XFx0e1xcXCJpbm9kZVxcXCIsXFx0WEZTX0RBWF9JTk9ERSB9LFxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxMDA6XFx0e1xcXCJhbHdheXNcXFwiLFxcdFhGU19EQVhfQUxXQVlTIH0sXFxuZnMveGZzL3hmc19zdXBlci5jOjEwMTpcXHR7XFxcIm5ldmVyXFxcIixcXHRYRlNfREFYX05FVkVSIH0sXFxuZnMveGZzL3hmc19zdXBlci5jLTEwMi1cXHR7fVxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTM2Mz14ZnNfc2V0dXBfZGF4X2Fsd2F5cyhcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYy0zODgtZGlzYWJsZV9kYXg6XFxuZnMveGZzL3hmc19zdXBlci5jOjM4OTpcXHR4ZnNfbW91bnRfc2V0X2RheF9tb2RlKG1wLCBYRlNfREFYX05FVkVSKTtcXG5mcy94ZnMveGZzX3N1cGVyLmMtMzkwLVxcdHJldHVybiAwO1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE0NTQ9eGZzX2ZzX3BhcnNlX3BhcmFtKFxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTE1ODQtXFx0XFx0cmV0dXJuIDA7XFxuZnMveGZzL3hmc19zdXBlci5jOjE1ODU6I2lmZGVmIENPTkZJR19GU19EQVhcXG5mcy94ZnMveGZzX3N1cGVyLmMtMTU4Ni1cXHRjYXNlIE9wdF9kYXg6XFxuZnMveGZzL3hmc19zdXBlci5jOjE1ODc6XFx0XFx0eGZzX21vdW50X3NldF9kYXhfbW9kZShwYXJzaW5nX21wLCBYRlNfREFYX0FMV0FZUyk7XFxuZnMveGZzL3hmc19zdXBlci5jLTE1ODgtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjMzLjUzMTk4Mzk4NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjE3OTIyNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBqdXN0IHJldmlld2VkIGEgcGF0Y2ggYW5kIHRoZSBzaXR1YXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCB0YXJnZXRzIGEgcG90ZW50aWFsIHJlZHVuZGFuY3kgaW4gYGZzL2RheC5jYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgZGF4X2ZvbGlvX2luaXQoKWAgZnVuY3Rpb24uIFRoZSBwYXRjaCByZW1vdmVzIGEgZHVwbGljYXRlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgX2RlZmVycmVkX2xpc3RgIGZpZWxkIHdpdGggYElOSVRfTElTVF9IRUFEYC4gVGhpcyBpcyBjbGVhbiwgbWFrZXMgc2Vuc2UsIGFuZCBsaWtlbHkgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLlxuXG5UaGUgY29kZSdzIGNvbnRleHQgaXMgY2xlYXJseSB3aXRoaW4gdGhlIGNvcmUgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBmb2N1c2luZyBvbiB0aGUgREFYIChEaXJlY3QgQWNjZXNzKSBmdW5jdGlvbmFsaXR5LiBJJ3ZlIG5vdGVkIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWVtZWQgXCJXb3J0aEZ1enppbmcsXCIgYW5kIHRoYXQgYWxpZ25zIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50OyBzbWFsbCBjaGFuZ2VzIGluIGNvcmUgZnVuY3Rpb25zIGFyZSBhbHdheXMgd29ydGggYSBjbG9zZSBsb29rIGR1cmluZyBmdXp6aW5nLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gREFYLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBzdWdnZXN0cyBJIGNoZWNrIGFyZTogYGRheF9mb2xpb19pbml0YCwgYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2luc2VydF9lbnRyeWAsIGFuZCBgZGF4X2lvbWFwX2ZhdWx0YC4gVGhleeKAmXJlIHRoZSByZWFsIHRhcmdldHMgaGVyZS5cblxuQWxzbywgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyB0byBtYXR0ZXIgYXJlIGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBgRlNfREFYX1BNRGAsIGBCTEtfREVWX1BNRU1gLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgLiBUaG9zZSBhcmUgYWxsIHN0YW5kYXJkLCBidXQgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoZW4gdGVzdGluZyB0aGlzLlxuXG5BbHJpZ2h0LCB3aXRoIHRoaXMgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gsIHRoZSBjb2RlLCB0aGUgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cywgaXQncyB0aW1lIHRvIG1hcmsgdGhpcyBhcyBhbmFseXplZCwgYW5kIHByb2NlZWQgdG8gc2V0IHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDUyLCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzozNy4xNDk5MDk5M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDQzMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19EQVhcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJGU19EQVhfUE1EXCIsXG4gICAgXCJCTEtfREVWX1BNRU1cIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXhfZm9saW9faW5pdFwiLFxuICAgIFwiZGF4X2Fzc29jaWF0ZV9lbnRyeVwiLFxuICAgIFwiZGF4X2luc2VydF9lbnRyeVwiLFxuICAgIFwiZGF4X2lvbWFwX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRheF9mb2xpb19pbml0YCBpbiBgZnMvZGF4LmNgIHRvIHJlbW92ZSByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb2YgYGZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdGAgd2hlbiBjYWxsaW5nIGBwcmVwX2NvbXBvdW5kX3BhZ2VgLiBEQVggZm9saW8gaW5pdGlhbGl6YXRpb24gYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGZpbGVzeXN0ZW0gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBkdXJpbmcgREFYIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfREFYXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiRlNfREFYX1BNRFwiLFxuICAgIFwiQkxLX0RFVl9QTUVNXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2ZvbGlvX2luaXRcIixcbiAgICBcImRheF9hc3NvY2lhdGVfZW50cnlcIixcbiAgICBcImRheF9pbnNlcnRfZW50cnlcIixcbiAgICBcImRheF9pb21hcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkYXhfZm9saW9faW5pdGAgaW4gYGZzL2RheC5jYCB0byByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIGBmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3RgIHdoZW4gY2FsbGluZyBgcHJlcF9jb21wb3VuZF9wYWdlYC4gREFYIGZvbGlvIGluaXRpYWxpemF0aW9uIGFuZCBmYXVsdCBoYW5kbGluZyBhcmUgcGFydCBvZiB0aGUgY29yZSBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZHVyaW5nIERBWCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzozNy4yMjUzNTk2NjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTY3ODk3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6MzcuMjI1ODgwOTU0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjcxNjczNzA0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYSByZWR1bmRhbnQgYElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBjYWxsIGZyb20gYGRheF9mb2xpb19pbml0KClgLiBUaGUgcHJlY2VkaW5nIGNhbGwgdG8gYHByZXBfY29tcG91bmRfcGFnZSgpYCBpbnRlcm5hbGx5IGludm9rZXMgYHByZXBfY29tcG91bmRfaGVhZCgpYCwgd2hpY2ggYWxyZWFkeSBpbml0aWFsaXplcyBgX2RlZmVycmVkX2xpc3RgIHdoZW4gYG9yZGVyIFxcdTAwM2UgMWAuIFJlbW92aW5nIHRoaXMgcmVkdW5kYW50IGNhbGwgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgYWZmZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBhbmQgaW50cm9kdWNlcyBubyBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTdjNTFlNjRiOWVjYzE0ZDVmZmFhODA5MzZlOWRhYWY4MTVhOTk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNToyNjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcbmluZGV4IDZiYTUwMTQyZWViMmYuLmRhZDRlZmVhNzk2NDAgMTAwNjQ0XG4tLS0gYS9mcy9kYXguY1xuKysrIGIvZnMvZGF4LmNcbkBAIC00NjksOCArNDY5LDYgQEAgc3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXG4gXG4gXHRpZiAob3JkZXIgXHUwMDNlIDApIHtcbiBcdFx0cHJlcF9jb21wb3VuZF9wYWdlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9yZGVyKTtcbi1cdFx0aWYgKG9yZGVyIFx1MDAzZSAxKVxuLVx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KTtcbiBcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xuIFx0fVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjM3LjIyNTg4MjA0NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTA5NDQzMzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBEQVggQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgYGZzL2RheC5jYCBmaWxlLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBGaXJzdCwgSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlOyBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBgZGF4X2ZvbGlvX2luaXRgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBfZGVmZXJyZWRfbGlzdGAuIElzIHRoaXMgYSByZWZhY3Rvcj8gT3B0aW1pemF0aW9uPyBCdWcgZml4PyBJIG5lZWQgdGhlIGNvbnRleHQuIEknbGwgbGlrZWx5IHVzZSBgcmVhZC1maWxlYCBvciBhIHF1aWNrIGBncmVwcGVyYCBzY2FuIG9mIHRoZSBjb2RlIHRvIHNlZSB3aGVyZSBgZGF4X2ZvbGlvX2luaXRgIGlzIGNhbGxlZCBhbmQgaG93IHRoZSBgX2RlZmVycmVkX2xpc3RgIHZhcmlhYmxlIGludGVyYWN0cyB3aXRoIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZGVmZXJyZWQgbGlzdCBiZWhhdmlvciBpcyBrZXkuIEFybWVkIHdpdGggdGhpcyBrbm93bGVkZ2UsIEkgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhbiBpbmZvcm1lZCBqdWRnZW1lbnQgYWJvdXQgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo0Mi4zMzUzMjg3MDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTc3OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9mb2xpb19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RheC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTQzMz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGF4X2ZvbGlvX3B1dChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZGF4LmMtNDU3LVxcbmZzL2RheC5jOjQ1ODpzdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG5mcy9kYXguYy00NTkte1xcbi0tXFxuZnMvZGF4LmM9NDc2PXN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtNDk1LVxcdFxcdFdBUk5fT05fT05DRShmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuZnMvZGF4LmM6NDk2OlxcdFxcdGRheF9mb2xpb19pbml0KGVudHJ5KTtcXG5mcy9kYXguYy00OTctXFx0XFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo0Mi4zODU5MTMxODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMDgxNzUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZnMvZGF4LmNgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFYIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc28gbGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZnMvZGF4LmNgLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lcyA0NTAgdG8gNTAwLiBUaGlzIGFyZWEgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgbG9vayBhdCB0aGUgY29yZSBsb2dpYyDigJMgSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGV2ZWxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbXBvcnRhbnQgdmFyaWFibGVzIHRoYXQgZGV0ZXJtaW5lIHRoZSBEQVggYWNjZXNzIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo0NC40MTY3MzQwNjdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RheC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHRcXHRlbHNlXFxuIDQ0MTpcXHRcXHRcXHRyZWYgPSAtLWZvbGlvLVxcdTAwM2VzaGFyZTtcXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0aWYgKHJlZilcXG4gNDQ0OlxcdFxcdFxcdHJldHVybiByZWY7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdG9yZGVyID0gZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKGZvbGlvKTtcXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0LyogRGVidWcgY2hlY2s6IHZlcmlmeSByZWZjb3VudHMgYXJlIHplcm8gZm9yIGFsbCBzdWItZm9saW9zICovXFxuIDQ0OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcik7IGkrKykge1xcbiA0NTA6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTtcXG4gNDUxOlxcdFxcbiA0NTI6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudCgoc3RydWN0IGZvbGlvICopcGFnZSkpO1xcbiA0NTM6XFx0XFx0fVxcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRyZXR1cm4gcmVmO1xcbiA0NTY6XFx0fVxcbiA0NTc6XFx0XFxuIDQ1ODpcXHRzdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG4gNDU5OlxcdHtcXG4gNDYwOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiA0NjE6XFx0XFx0aW50IG9yZGVyID0gZGF4X2VudHJ5X29yZGVyKGVudHJ5KTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0LypcXG4gNDY0OlxcdFxcdCAqIEZvbGlvIHNob3VsZCBoYXZlIGJlZW4gc3BsaXQgYmFjayB0byBvcmRlci0wIHBhZ2VzIGluXFxuIDQ2NTpcXHRcXHQgKiBkYXhfZm9saW9fcHV0KCkgd2hlbiB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZWlyXFxuIDQ2NjpcXHRcXHQgKiBmaW5hbCBtYXBwaW5nLlxcbiA0Njc6XFx0XFx0ICovXFxuIDQ2ODpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fb3JkZXIoZm9saW8pKTtcXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCkge1xcbiA0NzE6XFx0XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb3JkZXIpO1xcbiA0NzI6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbiA0NzM6XFx0XFx0fVxcbiA0NzQ6XFx0fVxcbiA0NzU6XFx0XFxuIDQ3NjpcXHRzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gNDc3OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA0Nzg6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBib29sIHNoYXJlZClcXG4gNDc5OlxcdHtcXG4gNDgwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XFxuIDQ4MTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNDgyOlxcdFxcbiA0ODM6XFx0XFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxcbiA0ODQ6XFx0XFx0XFx0cmV0dXJuO1xcbiA0ODU6XFx0XFxuIDQ4NjpcXHRcXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyBcXHUwMDI2IH4oc2l6ZSAtIDEpKTtcXG4gNDg3OlxcdFxcdGlmIChzaGFyZWQgXFx1MDAyNlxcdTAwMjYgKGZvbGlvLVxcdTAwM2VtYXBwaW5nIHx8IGRheF9mb2xpb19pc19zaGFyZWQoZm9saW8pKSkge1xcbiA0ODg6XFx0XFx0XFx0aWYgKGZvbGlvLVxcdTAwM2VtYXBwaW5nKVxcbiA0ODk6XFx0XFx0XFx0XFx0ZGF4X2ZvbGlvX21ha2Vfc2hhcmVkKGZvbGlvKTtcXG4gNDkwOlxcdFxcbiA0OTE6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFmb2xpby1cXHUwMDNlc2hhcmUpO1xcbiA0OTI6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGRheF9lbnRyeV9vcmRlcihlbnRyeSkgIT0gZm9saW9fb3JkZXIoZm9saW8pKTtcXG4gNDkzOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VzaGFyZSsrO1xcbiA0OTQ6XFx0XFx0fSBlbHNlIHtcXG4gNDk1OlxcdFxcdFxcdFdBUk5fT05fT05DRShmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuIDQ5NjpcXHRcXHRcXHRkYXhfZm9saW9faW5pdChlbnRyeSk7XFxuIDQ5NzpcXHRcXHRcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIDQ5ODpcXHRcXHRcXHRmb2xpby1cXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XFxuIDQ5OTpcXHRcXHRcXHRmb2xpby1cXHUwMDNlaW5kZXggPSBpbmRleDtcXG4gNTAwOlxcdFxcdH1cXG4gNTAxOlxcdH1cXG4gNTAyOlxcdFxcbiA1MDM6XFx0c3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIDUwNDpcXHRcXHRcXHRcXHRcXHRib29sIHRydW5jKVxcbiA1MDU6XFx0e1xcbiA1MDY6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcXG4gNTA5OlxcdFxcdFxcdHJldHVybjtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0ZGF4X2ZvbGlvX3B1dChmb2xpbyk7XFxuIDUxMjpcXHR9XFxuIDUxMzpcXHRcXG4gNTE0OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcXG4gNTE1OlxcdHtcXG4gNTE2OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiA1MTc6XFx0XFxuIDUxODpcXHRcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIDUxOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6NDQuNDE2OTE0MjU3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Nzg0ODU3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBEZXRhaWxzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHVzYWdlIG9mIGBfZGVmZXJyZWRfbGlzdGAgd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB3aGVyZSBpdCByZXNpZGVzIGNvbmNlcm5pbmcgYHN0cnVjdCBmb2xpb2AsIHNpbmNlIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UuIEFsdGVybmF0aXZlbHksIEkga25vdyBgcHJlcF9jb21wb3VuZF9wYWdlYCBpcyBpbnZvbHZlZCBpbiBwYWdlIGFsbG9jYXRpb24sIHNvIHRoYXQncyBhbm90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGFyZWEuIEkgdGhpbmsgc2VhcmNoaW5nIGZvciBib3RoIGZ1bmN0aW9uIG5hbWVzLCBgcHJlcF9jb21wb3VuZF9wYWdlYCBhbmQgdGhlIHZhcmlhYmxlIGBfZGVmZXJyZWRfbGlzdGAgaXMgdGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoLiBJdCBzaG91bGQgcXVpY2tseSBzaG93IG1lIHRoZWlyIGludGVyYWN0aW9ucywgb3IgcGlucG9pbnQgdGhlIHN0cnVjdHVyZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODkyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo0Ni45OTU0MDQyMjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzE4MzYyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcF9jb21wb3VuZF9wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG4tLVxcbmZzL2RheC5jLTQ3MC1cXHRpZiAob3JkZXIgXFx1MDAzZSAwKSB7XFxuZnMvZGF4LmM6NDcxOlxcdFxcdHByZXBfY29tcG91bmRfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9yZGVyKTtcXG5mcy9kYXguYy00NzItXFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTE3NTY9c3RydWN0IGlub2RlO1xcbmluY2x1ZGUvbGludXgvbW0uaC0xNzU3LVxcbmluY2x1ZGUvbGludXgvbW0uaDoxNzU4OmV4dGVybiB2b2lkIHByZXBfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTc1OS1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDk2PXN0YXRpYyB2b2lkIGtob19pbml0X2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTUwOS1cXHRpZiAob3JkZXIgXFx1MDAzZSAwKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NTEwOlxcdFxcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy01MTEtfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTE4NDU9c3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xODg1LVxcdGlmIChvcmRlcilcXG5tbS9jb21wYWN0aW9uLmM6MTg4NjpcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UoXFx1MDAyNmRzdC1cXHUwMDNlcGFnZSwgb3JkZXIpO1xcbm1tL2NvbXBhY3Rpb24uYy0xODg3LVxcdGNjLVxcdTAwM2Vucl9mcmVlcGFnZXMgLT0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzY0MT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MjctXFx0XFx0aWYgKG5ld19vcmRlcikge1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzcyODpcXHRcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UobmV3X2hlYWQsIG5ld19vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zNzI5LVxcdFxcdFxcdGZvbGlvX3NldF9sYXJnZV9ybWFwcGFibGUobmV3X2ZvbGlvKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zMTc4PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2ZvbGlvX2luaXRfdm1lbW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMxODQtXFx0LypcXG5tbS9odWdldGxiLmM6MzE4NTpcXHQgKiBUaGlzIGlzIGFuIG9wZW4tY29kZWQgcHJlcF9jb21wb3VuZF9wYWdlKCkgd2hlcmVieSB3ZSBhdm9pZFxcbm1tL2h1Z2V0bGIuYy0zMTg2LVxcdCAqIHdhbGtpbmcgcGFnZXMgdHdpY2UgYnkgaW5pdGlhbGl6aW5nL3ByZXBhcmluZytmcmVlemluZyB0aGVtIGluIHRoZVxcbi0tXFxubW0vaHVnZXRsYi5jPTM5NDY9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk4Ni1cXHRcXHRcXHRjbGVhcl9jb21wb3VuZF9oZWFkKHBhZ2UpO1xcbm1tL2h1Z2V0bGIuYzozOTg3OlxcdFxcdFxcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBkc3QtXFx1MDAzZW9yZGVyKTtcXG5tbS9odWdldGxiLmMtMzk4OC1cXG4tLVxcbm1tL21lbXJlbWFwLmM9NDgxPXZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxcbi0tXFxubW0vbWVtcmVtYXAuYy01MjYtXFx0aWYgKG9yZGVyKVxcbm1tL21lbXJlbWFwLmM6NTI3OlxcdFxcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XFxubW0vbWVtcmVtYXAuYy01MjgtfVxcbi0tXFxubW0vbW1faW5pdC5jPTEwNDg9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA1OC1cXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxcbm1tL21tX2luaXQuYzoxMDU5OlxcdCAqIHByZXBfY29tcG91bmRfcGFnZSgpIGRvZXMgbm90IHRha2UgY2FyZSBvZiB0aGF0LCBzbyBpbnN0ZWFkIHdlXFxubW0vbW1faW5pdC5jOjEwNjA6XFx0ICogb3Blbi1jb2RlIHByZXBfY29tcG91bmRfcGFnZSgpIHNvIHdlIGNhbiB0YWtlIGNhcmUgb2YgaW5pdGlhbGl6aW5nXFxubW0vbW1faW5pdC5jLTEwNjEtXFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY3OT1zdGF0aWMgaW5saW5lIGJvb2wgcGNwX2FsbG93ZWRfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcwMS1cXG5tbS9wYWdlX2FsbG9jLmM6NzAyOnZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vcGFnZV9hbGxvYy5jLTcwMy17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTg3Nj1zdGF0aWMgdm9pZCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xODgxLVxcdGlmIChvcmRlciBcXHUwMDI2XFx1MDAyNiAoZ2ZwX2ZsYWdzIFxcdTAwMjYgX19HRlBfQ09NUCkpXFxubW0vcGFnZV9hbGxvYy5jOjE4ODI6XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcXG5tbS9wYWdlX2FsbG9jLmMtMTg4My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6NDguODI3MjQ3NTMzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTU0MDgyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gYHByZXBfY29tcG91bmRfcGFnZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGNvbXBvdW5kIHBhZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBMaW51eCBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggdGhlIGBwcmVwX2NvbXBvdW5kX3BhZ2VgIGZ1bmN0aW9uLiBJIGtub3cgaXQncyBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgc28gSSdsbCBnbyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gdGhlcmUuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUga2VybmVsIHByZXBhcmVzIGEgcGFnZSBmb3IgdXNlIGFzIHBhcnQgb2YgYSBsYXJnZXIsIGNvbXBvdW5kIHBhZ2Ugc3RydWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBsaW5rcyB0aGUgaGVhZCBwYWdlIHRvIGl0cyB0YWlsIHBhZ2VzIGFuZCB3aGF0IGluaXRpYWxpemF0aW9ucyBvciBkYXRhIHNldHVwIGFyZSBwZXJmb3JtZWQuIEknbSBiZXR0aW5nIHRoZXJlJ3Mgc29tZSBrZXkgaW50ZXJwbGF5IHdpdGggdGhlIHBhZ2UgZmxhZ3MgYW5kIHBvc3NpYmx5IHRoZSBgcGFnZWAgc3RydWN0dXJlIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGlzIHNldHVwIGlzIGNydWNpYWwgZm9yIGRpYWdub3NpbmcgYW55IHBhZ2UgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gaXNzdWVzIEkgbWlnaHQgZW5jb3VudGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo1MS4yMjI2NTk2MzFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0ICovXFxuIDcwMTpcXHRcXG4gNzAyOlxcdHZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIDcwMzpcXHR7XFxuIDcwNDpcXHRcXHRpbnQgaTtcXG4gNzA1OlxcdFxcdGludCBucl9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuIDcwNjpcXHRcXG4gNzA3OlxcdFxcdF9fU2V0UGFnZUhlYWQocGFnZSk7XFxuIDcwODpcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKylcXG4gNzA5OlxcdFxcdFxcdHByZXBfY29tcG91bmRfdGFpbChwYWdlICsgaSwgcGFnZSwgb3JkZXIpO1xcbiA3MTA6XFx0XFxuIDcxMTpcXHRcXHRwcmVwX2NvbXBvdW5kX2hlYWQocGFnZSwgb3JkZXIpO1xcbiA3MTI6XFx0fVxcbiA3MTM6XFx0XFxuIDcxNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2J1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIDcxNTpcXHR7XFxuIDcxNjpcXHRcXHRzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTtcXG4gNzE3OlxcdFxcdF9fU2V0UGFnZUJ1ZGR5KHBhZ2UpO1xcbiA3MTg6XFx0fVxcbiA3MTk6XFx0XFxuIDcyMDpcXHQjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG4gNzIxOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxcbiA3MjI6XFx0e1xcbiA3MjM6XFx0XFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyA9IGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbDtcXG4gNzI0OlxcdFxcbiA3MjU6XFx0XFx0cmV0dXJuIHVubGlrZWx5KGNhcGMpIFxcdTAwMjZcXHUwMDI2XFxuIDcyNjpcXHRcXHRcXHQhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRCkgXFx1MDAyNlxcdTAwMjZcXG4gNzI3OlxcdFxcdFxcdCFjYXBjLVxcdTAwM2VwYWdlIFxcdTAwMjZcXHUwMDI2XFxuIDcyODpcXHRcXHRcXHRjYXBjLVxcdTAwM2V6b25lID09IHpvbmUgPyBjYXBjIDogTlVMTDtcXG4gNzI5OlxcdH1cXG4gNzMwOlxcdFxcbiA3MzE6XFx0c3RhdGljIGlubGluZSBib29sXFxuIDczMjpcXHRjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIDczMzpcXHRcXHRcXHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcXG4gNzM0OlxcdHtcXG4gNzM1OlxcdFxcdGlmICghY2FwYyB8fCBvcmRlciAhPSBjYXBjLVxcdTAwM2VvcmRlcilcXG4gNzM2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cXG4gNzM5OlxcdFxcdGlmIChpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6NTEuMjIzMTE5NDAxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMzQ3MjA4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhhdCBcInByZXBcXF9jb21wb3VuZFxcX2hlYWRcIiBmdW5jdGlvbi4gSGVyZSdzIG15IHRha2Ugb24gd2hhdCdzIGdvaW5nIG9uLCB0aGlua2luZyBsaWtlIGFuIGV4cGVydCBpbiBbYXNzdW1pbmcgdGhlIGZpZWxkLCBsZXQncyBzYXkgTkxQLCBidXQgeW91J2xsIG5lZWQgdG8gc3BlY2lmeSFdLlxuXG4qKkFuYWx5emluZyBgcHJlcF9jb21wb3VuZF9oZWFkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBiaWcgY2x1ZS4gXCJwcmVwXCIgbGlrZWx5IGluZGljYXRlcyBzb21lIHNvcnQgb2YgcHJlcHJvY2Vzc2luZyBzdGVwLCBhbmQgXCJjb21wb3VuZFxcX2hlYWRcIiBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIGNvcmUgb2Ygd2hhdCBpdCdzIGRlYWxpbmcgd2l0aCDigJMgdGhlIGhlYWQgd29yZCB3aXRoaW4gYSBjb21wb3VuZCBub3VuIHBocmFzZS4gTXkgaW1tZWRpYXRlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHRpY2tpbmc6IFdoYXQgdHlwZSBvZiBkYXRhIGFtIEkgZXhwZWN0aW5nPyBMaWtlbHkgdGV4dCwgYW5kIHNwZWNpZmljYWxseSB0ZXh0IHRoYXQgaW5jbHVkZXMgY29tcG91bmQgbm91biBwaHJhc2VzLiBJcyBpdCBhbHJlYWR5IHRva2VuaXplZCwgb3IgZG8gSSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQ/IFdoYXQncyB0aGUgZ29hbCBoZXJlPyBNb3N0IGxpa2VseSB0byBpZGVudGlmeSBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5IG9yIGV4dHJhY3QgdGhlIGhlYWQgbm91biBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuXG5JJ20gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGRvIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcuIEl0IG1heTpcblxuKiAgICoqUGFyc2UgdGhlIGNvbXBvdW5kOioqIEl0J3MgZ290IHRvICp1bmRlcnN0YW5kKiB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB3b3JkcyBpbiB0aGUgY29tcG91bmQsIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgXCJoZWFkXCIuIERvZXMgaXQgdXNlIGRlcGVuZGVuY3kgcGFyc2luZywgc29tZSBraW5kIG9mIHJ1bGUtYmFzZWQgYXBwcm9hY2gsIG9yIG1heWJlIGEgc3RhdGlzdGljYWwgbW9kZWwgdHJhaW5lZCBvbiBjb21wb3VuZHM/IEkgbmVlZCB0byBrbm93IGhvdyBpdCdzIHJlY29nbml6aW5nIHRoZXNlIHN0cnVjdHVyZXMuXG4qICAgKipIYW5kbGUgQW1iaWd1aXR5OioqIENvbXBvdW5kIG5vdW4gcGhyYXNlcyBjYW4gYmUgdHJpY2t5LiBcIkRvZyBob3VzZVwiIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHdoYXQgYWJvdXQgXCJkb2cgdHJhaW5pbmcgc2Vzc2lvblwiPyBEb2VzIGl0IGhhdmUgYSBtZWNoYW5pc20gdG8gZGlzYW1iaWd1YXRlLCBwZXJoYXBzIGJ5IGNoZWNraW5nIHBhcnQtb2Ytc3BlZWNoIHRhZ3Mgb3IgY29udGV4dHVhbCBjbHVlcz8gT3IgaXMgaXQgYXNzdW1pbmcgYSBzcGVjaWZpYyBzdHJ1Y3R1cmU/XG4qICAgKipOb3JtYWxpemF0aW9uL1N0YW5kYXJkaXphdGlvbjoqKiBBZnRlciBpZGVudGlmeWluZyB0aGUgaGVhZCwgZG9lcyBpdCBwZXJmb3JtIGFueSBub3JtYWxpemF0aW9uPyBUaGluZ3MgbGlrZSBjb252ZXJ0aW5nIGFsbCB3b3JkcyB0byBsb3dlcmNhc2UsIGxlbW1hdGl6aW5nLCBvciBldmVuIHN0ZW1taW5nPyBUaGlzIGNvdWxkIGJlIGNydWNpYWwgZm9yIGNvbnNpc3RlbmN5IGluIGRvd25zdHJlYW0gdGFza3MuXG4qICAgKipFZGdlIENhc2VzOioqIEknbSBjdXJpb3VzIGFib3V0IGhvdyBpdCBoYW5kbGVzIG11bHRpLXdvcmQgaGVhZHMgKGUuZy4sIFwiaGlnaCBzY2hvb2wgcHJpbmNpcGFsXCIpLiBXaGF0IGlmIHRoZSBoZWFkIGl0c2VsZiBpcyBhIGNvbXBvdW5kPyBEb2VzIGl0IHJlY3Vyc2l2ZWx5IGNhbGwgaXRzZWxmPyBEb2VzIGl0IGRlYWwgd2l0aCBwaHJhc2VzIHRoYXQgKmxvb2sqIGxpa2UgY29tcG91bmRzIGJ1dCBhcmVuJ3QgKGUuZy4sIFwidmVyeSBnb29kIHN0dWRlbnRcIik/IFdoYXQgYWJvdXQgaWRpb21zP1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIGl0ICpjYW4ndCogaWRlbnRpZnkgYSBoZWFkPyBEb2VzIGl0IHRocm93IGFuIGVycm9yLCByZXR1cm4gdGhlIG9yaWdpbmFsIHBocmFzZSwgb3IgYXNzaWduIGEgZGVmYXVsdD8gSG93IHJvYnVzdCBpcyB0aGlzIGZ1bmN0aW9uP1xuXG5Fc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSAqaG93KiBhbmQgKndoeSogYmVoaW5kIHRoaXMgZnVuY3Rpb24uIFdoYXQncyB0aGUgdW5kZXJseWluZyB0aGVvcnk/IFdoYXQga2luZCBvZiByZXN1bHRzIGRvZXMgaXQgcHJvdmlkZT8gSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcywgYnV0IHRoaXMgaXMgdGhlIHNvcnQgb2YgbWVudGFsIGZyYW1ld29yayBJJ20gYnVpbGRpbmcgYmVmb3JlIEkgZXZlbiBsb29rIGF0IHRoZSBjb2RlLiBJIGFudGljaXBhdGUgYSB3ZWxsLWRlc2lnbmVkIGZ1bmN0aW9uIHRoYXQgY29udHJpYnV0ZXMgYSBrZXkgc3RlcCBpbiBhIGxhcmdlciBwaXBlbGluZSBmb3IgbmF0dXJhbCBsYW5ndWFnZSBwcm9jZXNzaW5nLCBwZXJoYXBzIGZvciBpbmZvcm1hdGlvbiBleHRyYWN0aW9uLCB0b3BpYyBtb2RlbGluZywgb3IgYSBzaW1pbGFyIHRhc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjU1LjQ1Nzg0MzE5OFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4Mjk4MzczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmVwX2NvbXBvdW5kX2hlYWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTMxNzg9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfZm9saW9faW5pdF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMzE5My1cXHRodWdldGxiX2ZvbGlvX2luaXRfdGFpbF92bWVtbWFwKGZvbGlvLCBoLCAxLCBucl9wYWdlcyk7XFxubW0vaHVnZXRsYi5jOjMxOTQ6XFx0cHJlcF9jb21wb3VuZF9oZWFkKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgaHVnZV9wYWdlX29yZGVyKGgpKTtcXG5tbS9odWdldGxiLmMtMzE5NS19XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTc2ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqcGFnZV9ybWFwcGFibGVfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc3Mi1cXG5tbS9pbnRlcm5hbC5oOjc3MzpzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF9oZWFkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vaW50ZXJuYWwuaC03NzQte1xcbi0tXFxubW0vbW1faW5pdC5jPTEwNDg9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA3MC1cXHR9XFxubW0vbW1faW5pdC5jOjEwNzE6XFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcXG5tbS9tbV9pbml0LmMtMTA3Mi19XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzAyPXZvaWQgcHJlcF9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzEwLVxcbm1tL3BhZ2VfYWxsb2MuYzo3MTE6XFx0cHJlcF9jb21wb3VuZF9oZWFkKHBhZ2UsIG9yZGVyKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzEyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjc6NTcuMTQwODQyMDIxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjkwNzM3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1tL2ludGVybmFsLmhgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBtbS9pbnRlcm5hbC5oYCBoZWFkZXIsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3NzMuIEknbSBndWVzc2luZyB0aGF0IHBhcnRpY3VsYXIgc3BvdCBpcyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBJIGhhdmUgYSBodW5jaCBhYm91dCB3aGF0J3MgZ29pbmcgb24sIGJ1dCBJIG5lZWQgdG8gc2VlIGl0IGluIGNvZGUuIEtub3dpbmcgdGhlIGludHJpY2FjaWVzIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBzb21ldGhpbmcgaW4gdGhhdCB2aWNpbml0eSB3aWxsIHN1cmVseSBiZSByZWxhdGVkIHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBtZXRhZGF0YSBoYW5kbGluZywgb3IgZXZlbiBzb21lIGZvcm0gb2YgZnJlZWxpc3QgbWFuaXB1bGF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNToyNzo1OS4xMDk5MTkwODFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcbiA3NjE6XFx0XFx0cmV0dXJuIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxuIDc2MjpcXHR9XFxuIDc2MzpcXHRcXG4gNzY0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpwYWdlX3JtYXBwYWJsZV9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gNzY1OlxcdHtcXG4gNzY2OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSAoc3RydWN0IGZvbGlvICopcGFnZTtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0aWYgKGZvbGlvIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiA3Njk6XFx0XFx0XFx0Zm9saW9fc2V0X2xhcmdlX3JtYXBwYWJsZShmb2xpbyk7XFxuIDc3MDpcXHRcXHRyZXR1cm4gZm9saW87XFxuIDc3MTpcXHR9XFxuIDc3MjpcXHRcXG4gNzczOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gNzc0OlxcdHtcXG4gNzc1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSAoc3RydWN0IGZvbGlvICopcGFnZTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0Zm9saW9fc2V0X29yZGVyKGZvbGlvLCBvcmRlcik7XFxuIDc3ODpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlX2xhcmdlX21hcGNvdW50LCAtMSk7XFxuIDc3OTpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEFHRV9NQVBDT1VOVCkpXFxuIDc4MDpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlX25yX3BhZ2VzX21hcHBlZCwgMCk7XFxuIDc4MTpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1fSUQpKSB7XFxuIDc4MjpcXHRcXHRcXHRmb2xpby1cXHUwMDNlX21tX2lkcyA9IDA7XFxuIDc4MzpcXHRcXHRcXHRmb2xpby1cXHUwMDNlX21tX2lkX21hcGNvdW50WzBdID0gLTE7XFxuIDc4NDpcXHRcXHRcXHRmb2xpby1cXHUwMDNlX21tX2lkX21hcGNvdW50WzFdID0gLTE7XFxuIDc4NTpcXHRcXHR9XFxuIDc4NjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIHx8IG9yZGVyIFxcdTAwM2UgMSkge1xcbiA3ODc6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2Zm9saW8tXFx1MDAzZV9waW5jb3VudCwgMCk7XFxuIDc4ODpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlX2VudGlyZV9tYXBjb3VudCwgLTEpO1xcbiA3ODk6XFx0XFx0fVxcbiA3OTA6XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSlcXG4gNzkxOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QpO1xcbiA3OTI6XFx0fVxcbiA3OTM6XFx0XFxuIDc5NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxcbiA3OTU6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gNzk2OlxcdHtcXG4gNzk3OlxcdFxcdHRhaWwtXFx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XFxuIDc5ODpcXHRcXHRzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7XFxuIDc5OTpcXHRcXHRWTV9XQVJOX09OX09OQ0UodGFpbC1cXHUwMDNlcHJpdmF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjI3OjU5LjExMDExNDU0MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjgzMTA0NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbmQgUmVtb3ZpbmcgUmVkdW5kYW50IExpc3QgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBgcHJlcF9jb21wb3VuZF9oZWFkYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5OlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF9oZWFkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG57XG5cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSAoc3RydWN0IGZvbGlvICopcGFnZTtcblxuXHRmb2xpb19zZXRfb3JkZXIoZm9saW8sIG9yZGVyKTtcblx0YXRvbWljX3NldChcdTAwMjZmb2xpby1cdTAwM2VfbGFyZ2VfbWFwY291bnQsIC0xKTtcblx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BBR0VfTUFQQ09VTlQpKVxuXHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX25yX3BhZ2VzX21hcHBlZCwgMCk7XG5cdGlmIChJU19FTkFCTEVEKENPTkZJR19NTV9JRCkpIHtcblx0XHRmb2xpby1cdTAwM2VfbW1faWRzID0gMDtcblx0XHRmb2xpby1cdTAwM2VfbW1faWRfbWFwY291bnRbMF0gPSAtMTtcblx0XHRmb2xpby1cdTAwM2VfbW1faWRfbWFwY291bnRbMV0gPSAtMTtcblx0fVxuXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIHx8IG9yZGVyIFx1MDAzZSAxKSB7XG5cdFx0YXRvbWljX3NldChcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQsIDApO1xuXHRcdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2VudGlyZV9tYXBjb3VudCwgLTEpO1xuXHR9XG5cdGlmIChvcmRlciBcdTAwM2UgMSlcblx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG59XG5gYGBcblxuTXkgY29uY2VybiB3YXMgdGhpcyByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gaW4gYGRheF9mb2xpb19pbml0KClgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO2AgY2FsbHMgYHByZXBfY29tcG91bmRfaGVhZGAuIEFuZCwgY3JpdGljYWxseSwgYHByZXBfY29tcG91bmRfaGVhZGAgKmFscmVhZHkqIGhhbmRsZXMgaW5pdGlhbGl6aW5nIHRoZSBgZm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3RgIGlmIGBvcmRlciBcdTAwM2UgMWAuIE1lYW5pbmcgdGhlIGR1cGxpY2F0ZSBpbml0aWFsaXphdGlvbiBpbiBgZGF4X2ZvbGlvX2luaXQoKWAgd2FzIGp1c3QgcGxhaW4gcmVkdW5kYW50LlxuXG5Ob3csIHRoZSBtYWluIGNvbmNlcm4gaGVyZSBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MuIEJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJJ3ZlIHdhbGtlZCB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LlxuXG4qICAgYHByZXBfY29tcG91bmRfaGVhZGAgKmRvZXMqIGluaXRpYWxpemUgYGZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0YCB3aGVuIGBvcmRlciBcdTAwM2UgMWAuXG4qICAgUmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBgSU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpYCBpbiBgZGF4X2ZvbGlvX2luaXRgICpkb2Vzbid0KiBsZWF2ZSBhbnkgZmllbGQgdW5pbml0aWFsaXplZC5cbiogICBObyB1c2VyLXNwYWNlIGNvcHksIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgb3IgYnJhbmNoLCBubyBhbGxvY2F0aW9uIGNoYW5nZXMsIG5vdGhpbmcgdGhhdCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha3MuXG4qICAgU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scyBzaG91bGQgYmUgYWRlcXVhdGUgaGVyZTsgS01TQU4gaXNuJ3QgbmVlZGVkLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIGNsZWFuIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhlIGd1aWRlbGluZXMgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYDogdGhlIHBhdGNoIGF2b2lkcyBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLCBhbmQgYWxsIHRvdWNoZWQgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQuIEl0J3MgYSB0ZXh0Ym9vayBjbGVhbnVwLlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiB0aGlzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTcsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6Mjg6MDQuMzkzMjIyODI5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgcmVkdW5kYW50IGBJTklUX0xJU1RfSEVBRChcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KWAgY2FsbCBmcm9tIGBkYXhfZm9saW9faW5pdCgpYC4gVGhlIHByZWNlZGluZyBjYWxsIHRvIGBwcmVwX2NvbXBvdW5kX3BhZ2UoKWAgaW50ZXJuYWxseSBpbnZva2VzIGBwcmVwX2NvbXBvdW5kX2hlYWQoKWAsIHdoaWNoIGFscmVhZHkgaW5pdGlhbGl6ZXMgYF9kZWZlcnJlZF9saXN0YCB3aGVuIGBvcmRlciBcXHUwMDNlIDFgLiBSZW1vdmluZyB0aGlzIHJlZHVuZGFudCBjYWxsIGRvZXMgbm90IGxlYXZlIGFueSBzdHJ1Y3QgZmllbGRzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGFmZmVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgYW5kIGludHJvZHVjZXMgbm8gaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBgSU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdClgIGNhbGwgZnJvbSBgZGF4X2ZvbGlvX2luaXQoKWAuIFRoZSBwcmVjZWRpbmcgY2FsbCB0byBgcHJlcF9jb21wb3VuZF9wYWdlKClgIGludGVybmFsbHkgaW52b2tlcyBgcHJlcF9jb21wb3VuZF9oZWFkKClgLCB3aGljaCBhbHJlYWR5IGluaXRpYWxpemVzIGBfZGVmZXJyZWRfbGlzdGAgd2hlbiBgb3JkZXIgXFx1MDAzZSAxYC4gUmVtb3ZpbmcgdGhpcyByZWR1bmRhbnQgY2FsbCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBhZmZlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7f6g[1] Phase: Succeeded StartedAt: 2026-09-04 05:28:15 +0000 UTC FinishedAt: 2026-09-04 05:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 05:28:15 +0000 UTC FinishedAt: 2026-09-04 05:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2] Phase: Succeeded StartedAt: 2026-09-04 05:28:15 +0000 UTC FinishedAt: 2026-09-04 09:09:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:28:15 +0000 UTC FinishedAt: 2026-09-04 09:09:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:28:15 +0000 UTC FinishedAt: 2026-09-04 05:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:28:15 +0000 UTC FinishedAt: 2026-09-04 05:28:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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-workflowr7f6g/series-workflowr7f6g-convert-artifact-3600044077/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:28:25 +0000 UTC FinishedAt: 2026-09-04 05:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:28:25 +0000 UTC FinishedAt: 2026-09-04 05:45:52 +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:*9e6e989e-fee7-4a89-8f25-4fb79d0c61e8,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-workflowr7f6g/series-workflowr7f6g-convert-artifact-3600044077/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": "76928b55-92ab-4240-a99b-958b2eb1664c", "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-workflowr7f6g/series-workflowr7f6g-build-action-2727513123/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:28:25 +0000 UTC FinishedAt: 2026-09-04 05:45:42 +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:*9e6e989e-fee7-4a89-8f25-4fb79d0c61e8,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-workflowr7f6g/series-workflowr7f6g-convert-artifact-3600044077/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": "76928b55-92ab-4240-a99b-958b2eb1664c", "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-workflowr7f6g/series-workflowr7f6g-build-action-2727513123/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:45:52 +0000 UTC FinishedAt: 2026-09-04 05:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:45:52 +0000 UTC FinishedAt: 2026-09-04 05:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:45:52 +0000 UTC FinishedAt: 2026-09-04 05:46:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:45:52 +0000 UTC FinishedAt: 2026-09-04 05:45:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-workflowr7f6g/series-workflowr7f6g-convert-artifact-2495091080/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:46:02 +0000 UTC FinishedAt: 2026-09-04 05:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:46:02 +0000 UTC FinishedAt: 2026-09-04 05:47:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76928b55-92ab-4240-a99b-958b2eb1664c,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-workflowr7f6g/series-workflowr7f6g-build-action-2727513123/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-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:47:57 +0000 UTC FinishedAt: 2026-09-04 05:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:47:57 +0000 UTC FinishedAt: 2026-09-04 05:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:47:57 +0000 UTC FinishedAt: 2026-09-04 06:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:47:57 +0000 UTC FinishedAt: 2026-09-04 06:04:52 +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:*9e6e989e-fee7-4a89-8f25-4fb79d0c61e8,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-workflowr7f6g/series-workflowr7f6g-convert-artifact-2495091080/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": "3044977f-9694-4959-92c0-6d1aa4899d2e", "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-workflowr7f6g/series-workflowr7f6g-build-action-2207298868/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 05:47:57 +0000 UTC FinishedAt: 2026-09-04 06:04:42 +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:*9e6e989e-fee7-4a89-8f25-4fb79d0c61e8,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-workflowr7f6g/series-workflowr7f6g-convert-artifact-2495091080/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": "3044977f-9694-4959-92c0-6d1aa4899d2e", "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-workflowr7f6g/series-workflowr7f6g-build-action-2207298868/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:04:52 +0000 UTC FinishedAt: 2026-09-04 06:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:04:52 +0000 UTC FinishedAt: 2026-09-04 06:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:04:52 +0000 UTC FinishedAt: 2026-09-04 06:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:04:52 +0000 UTC FinishedAt: 2026-09-04 06:06:53 +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:*3044977f-9694-4959-92c0-6d1aa4899d2e,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-workflowr7f6g/series-workflowr7f6g-build-action-2207298868/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-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:07:03 +0000 UTC FinishedAt: 2026-09-04 09:09:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:07:03 +0000 UTC FinishedAt: 2026-09-04 09:09:34 +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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"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:*76928b55-92ab-4240-a99b-958b2eb1664c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3044977f-9694-4959-92c0-6d1aa4899d2e,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-workflowr7f6g/series-workflowr7f6g-build-action-2727513123/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-workflowr7f6g/series-workflowr7f6g-build-action-2207298868/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:07:03 +0000 UTC FinishedAt: 2026-09-04 06:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:07:03 +0000 UTC FinishedAt: 2026-09-04 06:07:08 +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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"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-workflowr7f6g/series-workflowr7f6g-convert-artifact-2083972673/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:07:03 +0000 UTC FinishedAt: 2026-09-04 06:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:07:03 +0000 UTC FinishedAt: 2026-09-04 06:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:07:03 +0000 UTC FinishedAt: 2026-09-04 06:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:07:13 +0000 UTC FinishedAt: 2026-09-04 09:09:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7f6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"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":["dax_folio_init","dax_associate_entry","dax_insert_entry","dax_iomap_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","FS_DAX_PMD","BLK_DEV_PMEM","MEMORY_HOTREMOVE"],"series_id":"d92cfc9b-85e2-4b0b-bb16-94b02f48c26b","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-09-04 06:07:13 +0000 UTC FinishedAt: 2026-09-04 09:09:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76928b55-92ab-4240-a99b-958b2eb1664c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3044977f-9694-4959-92c0-6d1aa4899d2e,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-workflowr7f6g/series-workflowr7f6g-build-action-2727513123/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-workflowr7f6g/series-workflowr7f6g-build-action-2207298868/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-workflowr7f6g/series-workflowr7f6g-convert-artifact-2083972673/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,}