Name: series-workflownhls6 Phase: Succeeded StartedAt: 2026-09-02 21:00:36 +0000 UTC FinishedAt: 2026-09-03 01:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[0] Phase: Succeeded StartedAt: 2026-09-02 21:00:36 +0000 UTC FinishedAt: 2026-09-02 21:25:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 21:00:36 +0000 UTC FinishedAt: 2026-09-02 21:25:03 +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": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "USER_NS", "AIO", "PID_NS", "CGROUPS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "USER_NS", "AIO", "PID_NS", "CGROUPS" ], "series_id": "40c76fa0-4db7-462b-b766-6b51c68c50d9" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_resize_fs", "ext4_group_add", "ext4_group_extend", "ext4_get_group_info", "map_id_range_up", "map_id_range_down", "pidfs_exit", "pidfs_coredump" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtBSU8mIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtleHQ0X2dyb3VwX2FkZCYjMzQ7LAogICAgJiMzNDtleHQ0X2dyb3VwX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtleHQ0X2dldF9ncm91cF9pbmZvJiMzNDssCiAgICAmIzM0O21hcF9pZF9yYW5nZV91cCYjMzQ7LAogICAgJiMzNDttYXBfaWRfcmFuZ2VfZG93biYjMzQ7LAogICAgJiMzNDtwaWRmc19leGl0JiMzNDssCiAgICAmIzM0O3BpZGZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBvciBhbHRlciBob3cgYnVmZmVycyBhcmUgaW5pdGlhbGl6ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCByZW1haW4gZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kZXJuaXplcyBhbmQgYWRqdXN0cyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYWNyb3NzIGNvcmUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGNvbXBvbmVudHMgKEFJTyByaW5nIGJ1ZmZlcnMsIGV4dDQgcmVzaXppbmcgYW5kIGdyb3VwIGFsbG9jYXRpb24sIGZkIGluc3RhbGxhdGlvbi9leHBhbnNpb24sIHBpZGZzIGF0dHJpYnV0ZSByZXRyaWV2YWwsIGFuZCB1c2VyIG5hbWVzcGFjZSBpZCBtYXBwaW5nKSBieSBjb252ZXJ0aW5nIGV4cGxpY2l0IHNtcF9ybWIvc21wX3dtYiBwYWlycyBpbnRvIGFjcXVpcmUvcmVsZWFzZSBtZW1vcnkgb3JkZXJzIChlLmcuIHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFRoZXNlIGFyZSByZWFjaGFibGUgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMGVkNDliZTFmYWYzOTNjZjliYzI5ZmNmY2Q3MWMyMGI4NjcyNjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMToyMzoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXG5pbmRleCBkNzhhY2M2OWY0ODcwLi5hMDI3OWUwNTllOTcyIDEwMDY0NFxuLS0tIGEvZnMvYWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fpby5jXG5AQCAtMTIwNiwxMyAmIzQzOzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4gXHQvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZVxuIFx0ICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1x0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4tXG4gXHRjdHgtXHUwMDNldGFpbCA9IHRhaWw7XG4gXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHJpbmctXHUwMDNldGFpbCA9IHRhaWw7XG4mIzQzO1x0LyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cmluZy1cdTAwM2V0YWlsLCB0YWlsKTtcbiBcdGZsdXNoX2RjYWNoZV9mb2xpbyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFxuIFx0Y3R4LVx1MDAzZWNvbXBsZXRlZF9ldmVudHMmIzQzOyYjNDM7O1xuQEAgLTEyODgsMTMgJiM0MzsxMjg3LDEyIEBAIHN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCxcbiBcdC8qIEFjY2VzcyB0byAtXHUwMDNlcmluZ19mb2xpb3MgaGVyZSBpcyBwcm90ZWN0ZWQgYnkgY3R4LVx1MDAzZXJpbmdfbG9jay4gKi9cbiBcdHJpbmcgPSBmb2xpb19hZGRyZXNzKGN0eC1cdTAwM2VyaW5nX2ZvbGlvc1swXSk7XG4gXHRoZWFkID0gcmluZy1cdTAwM2VoZWFkO1xuLVx0dGFpbCA9IHJpbmctXHUwMDNldGFpbDtcbi1cbiBcdC8qXG4gXHQgKiBFbnN1cmUgdGhhdCBvbmNlIHdlJiMzOTt2ZSByZWFkIHRoZSBjdXJyZW50IHRhaWwgcG9pbnRlciwgdGhhdFxuIFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxuJiM0MztcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS5cbiBcdCAqL1xuLVx0c21wX3JtYigpO1xuJiM0MztcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJpbmctXHUwMDNldGFpbCk7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtoJXUgdCV1IG0ldVxcblwmIzM0OywgaGVhZCwgdGFpbCwgY3R4LVx1MDAzZW5yX2V2ZW50cyk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmNcbmluZGV4IDUyZjRjNTE2OWY5MTQuLjc3OGZlODc4OGYwNmUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2JhbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2JhbGxvYy5jXG5AQCAtMzI5LDcgJiM0MzszMjksNyBAQCBzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpleHQ0X2dldF9ncm91cF9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICoqZ3JwX2luZm87XG4gXHRsb25nIGluZGV4diwgaW5kZXhoO1xuIFxuLVx0aWYgKHVubGlrZWx5KGdyb3VwIFx1MDAzZT0gRVhUNF9TQihzYiktXHUwMDNlc19ncm91cHNfY291bnQpKVxuJiM0MztcdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzYikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICh1bmxpa2VseSghRVhUNF9TQihzYiktXHUwMDNlc19ncm91cF9pbmZvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM1NDIsMTYgJiM0MzszNTQyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lzaXplX3NldChzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBsb2ZmX3QgaV9zaXplKVxuIH1cbiBcbiAvKlxuLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWVcbi0gKiB0aGUgbG9ja2luZyBwcm90b2NvbCBkb2N1bWVudGVkIGluIHRoZSBjb21tZW50cyBvZiBleHQ0X2dyb3VwX2FkZCgpXG4tICogaW4gcmVzaXplLmNcbiYjNDM7ICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCB1c2VzIGFjcXVpcmUgc2VtYW50aWNzLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbi1cdGV4dDRfZ3JvdXBfdFx0bmdyb3VwcyA9IEVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50O1xuLVxuLVx0c21wX3JtYigpO1xuLVx0cmV0dXJuIG5ncm91cHM7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbiYjNDM7XHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudCk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZXh0NF9ncm91cF90IGV4dDRfZmxleF9ncm91cChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuY1xuaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21iYWxsb2MuY1xuQEAgLTg5OSwxMCAmIzQzOzg5OSw4IEBAIHN0YXRpYyBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoXG4gXG4gXHQvKiBub24tZXh0ZW50IGZpbGVzIGFyZSBsaW1pdGVkIHRvIGxvdyBibG9ja3MvZ3JvdXBzICovXG4gXHRpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhhYy1cdTAwM2VhY19pbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpXG4tXHRcdG5ncm91cHMgPSBFWFQ0X1NCKGFjLVx1MDAzZWFjX3NiKS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHM7XG4tXG4tXHQvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXG4tXHRzbXBfcm1iKCk7XG4mIzQzO1x0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuJiM0MztcdFx0bmdyb3VwcyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2RVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzKTtcbiBcbiBcdHJldHVybiBuZ3JvdXBzO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuY1xuaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvcmVzaXplLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvcmVzaXplLmNcbkBAIC0xNDYyLDExICYjNDM7MTQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICpcbiBcdCAqIFRoZSBwcmVjaXNlIHJ1bGVzIHdlIHVzZSBhcmU6XG4gXHQgKlxuLVx0ICogKiBXcml0ZXJzIG11c3QgcGVyZm9ybSBhIHNtcF93bWIoKSBhZnRlciB1cGRhdGluZyBhbGxcbi1cdCAqICAgZGVwZW5kZW50IGRhdGEgYW5kIGJlZm9yZSBtb2RpZnlpbmcgdGhlIGdyb3VwcyBjb3VudFxuJiM0MztcdCAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50XG4mIzQzO1x0ICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZFxuIFx0ICpcbi1cdCAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3Vwc1xuLVx0ICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLlxuJiM0MztcdCAqICogUmVhZGVycyBtdXN0IHVzZSBhbiBhY3F1aXJlIGxvYWQgd2hlbiByZWFkaW5nIHRoZSBncm91cHNcbiYjNDM7XHQgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiBcdCAqXG4gXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcbiBcdCAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrXG5AQCAtMTQ3NCwxMiAmIzQzOzE0NzQsMTUgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0XG4gXHQgKiBhbGxvY2F0aW9uLlxuIFx0ICovXG4tXHRzbXBfd21iKCk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqL1xuLVx0c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICYjNDM7PSBmbGV4X2dkLVx1MDAzZWNvdW50O1xuLVx0c2JpLVx1MDAzZXNfYmxvY2tmaWxlX2dyb3VwcyA9IG1pbihzYmktXHUwMDNlc19ncm91cHNfY291bnQsXG4tXHRcdFx0KEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKTtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbiYjNDM7XHRcdFx0ICBzYmktXHUwMDNlc19ncm91cHNfY291bnQgJiM0MzsgZmxleF9nZC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMsXG4mIzQzO1x0XHRcdCAgbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbiYjNDM7XHRcdFx0ICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpc1xuIFx0ICogYWN0aXZlLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuY1xuaW5kZXggNjI4Y2EwN2RjNGIxNy4uODZjMDM1ZDQ1OWYyYSAxMDA2NDRcbi0tLSBhL2ZzL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZS5jXG5AQCAtMjczLDggJiM0MzsyNzMsNiBAQCBzdGF0aWMgaW50IGV4cGFuZF9mZHRhYmxlKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoZmlsZXMtXHUwMDNlZmR0LCBuZXdfZmR0KTtcbiBcdGlmIChjdXJfZmR0ICE9IFx1MDAyNmZpbGVzLVx1MDAzZWZkdGFiKVxuIFx0XHRjYWxsX3JjdShcdTAwMjZjdXJfZmR0LVx1MDAzZXJjdSwgZnJlZV9mZHRhYmxlX3JjdSk7XG4tXHQvKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGZkX2luc3RhbGwoKSAqL1xuLVx0c21wX3dtYigpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMyw3ICYjNDM7MzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdC8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi9cbiBcdGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcyA9IHRydWU7XG4gXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XG4tXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbiYjNDM7XHQvKiBjb3VwbGVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGZkX2luc3RhbGwoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcywgZmFsc2UpO1xuIFxuIFx0d2FrZV91cF9hbGwoXHUwMDI2ZmlsZXMtXHUwMDNlcmVzaXplX3dhaXQpO1xuIFx0cmV0dXJuIGVycm9yO1xuQEAgLTY4NSwxMyAmIzQzOzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xuLVx0aWYgKHVubGlrZWx5KGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcbiYjNDM7XHQvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqL1xuJiM0MztcdGlmICh1bmxpa2VseShzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpKSB7XG4gXHRcdHJjdV9yZWFkX3VubG9ja19zY2hlZCgpO1xuIFx0XHRmZF9pbnN0YWxsX3Nsb3dwYXRoKGZkLCBmaWxlKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0LyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiBleHBhbmRfZmR0YWJsZSgpICovXG4tXHRzbXBfcm1iKCk7XG4gXHRmZHQgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoZmlsZXMtXHUwMDNlZmR0KTtcbiBcdFZGU19CVUdfT04ocmN1X2FjY2Vzc19wb2ludGVyKGZkdC1cdTAwM2VmZFtmZF0pICE9IE5VTEwpO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZkdC1cdTAwM2VmZFtmZF0sIGZpbGUpO1xuZGlmZiAtLWdpdCBhL2ZzL21udF9pZG1hcHBpbmcuYyBiL2ZzL21udF9pZG1hcHBpbmcuY1xuaW5kZXggY2I2MWZiZGI1MmU5MC4uNjEyYjI2NmFiM2RhMCAxMDA2NDRcbi0tLSBhL2ZzL21udF9pZG1hcHBpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbW50X2lkbWFwcGluZy5jXG5AQCAtMjE5LDEwICYjNDM7MjE5LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmZzZ2lkX2luX2dyb3VwX3ApO1xuIHN0YXRpYyBpbnQgY29weV9tbnRfaWRtYXAoc3RydWN0IHVpZF9naWRfbWFwICptYXBfZnJvbSxcbiBcdFx0XHQgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX3RvKVxuIHtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4mIzQzO1x0dTMyIG5yX2V4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcF9mcm9tLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpmb3J3YXJkLCAqcmV2ZXJzZTtcbi1cdHUzMiBucl9leHRlbnRzID0gUkVBRF9PTkNFKG1hcF9mcm9tLVx1MDAzZW5yX2V4dGVudHMpO1xuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgd2hlbiB3cml0aW5nIHRoZSBpZG1hcHBpbmcuICovXG4tXHRzbXBfcm1iKCk7XG4gXG4gXHQvKlxuIFx0ICogRG9uJiMzOTt0IGJsaW5kbHkgY29weSBAbWFwX3RvIGludG8gQG1hcF9mcm9tIGlmIG5yX2V4dGVudHMgaXNcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCAmIzQzOzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFxuIFx0YXR0ciA9IFJFQURfT05DRShwaWQtXHUwMDNlYXR0cik7XG4gXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19FWElUKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbi1cdFx0XHRzbXBfcm1iKCk7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbiBcdFx0XHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUFNcbiBcdFx0XHRraW5mby5jZ3JvdXBpZCA9IGF0dHItXHUwMDNlY2dyb3VwaWQ7XG5AQCAtNDA1LDggJiM0Mzs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuJiM0MztcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuIFx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFO1xuIFx0XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX21hc2s7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci1cdTAwM2Vjb3JlZHVtcF9zaWduYWw7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLmNhYTYxODllNDA1NzIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jXG5AQCAtMjY3LDEyICYjNDM7MjY3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIFx0ICogSG93ZXZlciwgaWYgd2UgYXJlIGN1cnJlbnRseSBtb3VudGluZyB0aGUgc3VwZXJibG9jaywgdGhlIHVuZGVybHlpbmdcbiBcdCAqIGZpbGVzeXN0ZW0gbWlnaHQgYmUgaW4gYSBzdGF0ZSBvZiBwYXJ0aWFsIGNvbnN0cnVjdGlvbiBhbmQgaGVuY2UgaXRcbiBcdCAqIGlzIGRhbmdlcm91cyB0byBhY2Nlc3MgaXQuICBzdXBlcl90cnlsb2NrX3NoYXJlZCgpIHVzZXMgYSBTQl9CT1JOIGNoZWNrXG4tXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIG1lbW9yeSBiYXJyaWVyIGlzXG4tXHQgKiBtYXRjaGVkIHdpdGggdGhlIG9uZSBpbiBtb3VudF9mcygpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuXG4mIzQzO1x0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuXG4gXHQgKi9cbi1cdGlmICghKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX0JPUk4pKVxuJiM0MztcdGlmICghc3VwZXJfZmxhZ3Moc2IsIFNCX0JPUk4pKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbkBAIC0zMTcsOSAmIzQzOzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvXG4gXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xuQEAgLTM4Myw5ICYjNDM7MzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnRcbiBcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuJiM0MztcdHVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZtYXAtXHUwMDNlbnJfZXh0ZW50cyk7XG4gXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDtcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChleHRlbnRzIFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcbiBcdFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX3VwX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xuQEAgLTY3Niw5ICYjNDM7Njc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0bG9mZl90IHBvcyA9ICpwcG9zO1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKHBvcyBcdTAwM2U9IGV4dGVudHMpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTk2Nyw5ICYjNDM7OTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxuIFx0ICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuXG4gXHQgKlxuLVx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcbi1cdCAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGNyYXp5XG4tXHQgKiBhcmNoaXRlY3R1cmVzIHJldHVybmluZyBzdGFsZSBkYXRhLlxuJiM0MztcdCAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50XG4mIzQzO1x0ICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnRcbiYjNDM7XHQgKiBkYXRhIGlzIHZpc2libGUgYmVmb3JlIG5yX2V4dGVudHMgaXMgdXBkYXRlZC4gIFJlYWRlcnMgdXNlXG4mIzQzO1x0ICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZlxuJiM0MztcdCAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xuIFxuQEAgLTEwOTgsOCAmIzQzOzExMDAsOCBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHRcdG1hcC1cdTAwM2Vmb3J3YXJkID0gbmV3X21hcC5mb3J3YXJkO1xuIFx0XHRtYXAtXHUwMDNlcmV2ZXJzZSA9IG5ld19tYXAucmV2ZXJzZTtcbiBcdH1cbi1cdHNtcF93bWIoKTtcbi1cdG1hcC1cdTAwM2Vucl9leHRlbnRzID0gbmV3X21hcC5ucl9leHRlbnRzO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xuIFxuIFx0KnBwb3MgPSBjb3VudDtcbiBcdHJldCA9IGNvdW50O1xuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcbmluZGV4IDFkOTVhYjkzMTRiZjcuLjkwZDBhNzI0ZWFkZDggMTAwNjQ0XG4tLS0gYS9saWIvdnNwcmludGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3ZzcHJpbnRmLmNcbkBAIC03NjIsOSAmIzQzOzc2Miw4IEBAIHN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkXG4ge1xuIFx0Z2V0X3JhbmRvbV9ieXRlcyhcdTAwMjZwdHJfa2V5LCBzaXplb2YocHRyX2tleSkpO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfcm1iKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbi1cdHNtcF93bWIoKTtcbi1cdFdSSVRFX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuQEAgLTc4MSwxMiAmIzQzOzc4MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl90b19oYXNodmFsKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyAqaGFzaHZhbF9vdXQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBoYXNodmFsO1xuIFxuLVx0aWYgKCFSRUFEX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSlcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuJiM0MztcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3JtYigpO1xuLVxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFx1MDAyNnB0cl9rZXkpO1xuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OywKICAgICYjMzQ7QUlPJiMzNDssCiAgICAmIzM0O1BJRF9OUyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9yZXNpemVfZnMmIzM0OywKICAgICYjMzQ7ZXh0NF9ncm91cF9hZGQmIzM0OywKICAgICYjMzQ7ZXh0NF9ncm91cF9leHRlbmQmIzM0OywKICAgICYjMzQ7ZXh0NF9nZXRfZ3JvdXBfaW5mbyYjMzQ7LAogICAgJiMzNDttYXBfaWRfcmFuZ2VfdXAmIzM0OywKICAgICYjMzQ7bWFwX2lkX3JhbmdlX2Rvd24mIzM0OywKICAgICYjMzQ7cGlkZnNfZXhpdCYjMzQ7LAogICAgJiMzNDtwaWRmc19jb3JlZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2Rlcm5pemVzIGFuZCBhZGp1c3RzIG1lbW9yeSBiYXJyaWVyIHNlbWFudGljcyBhY3Jvc3MgY29yZSBrZXJuZWwgYW5kIGZpbGVzeXN0ZW0gY29tcG9uZW50cyAoQUlPIHJpbmcgYnVmZmVycywgZXh0NCByZXNpemluZyBhbmQgZ3JvdXAgYWxsb2NhdGlvbiwgZmQgaW5zdGFsbGF0aW9uL2V4cGFuc2lvbiwgcGlkZnMgYXR0cmlidXRlIHJldHJpZXZhbCwgYW5kIHVzZXIgbmFtZXNwYWNlIGlkIG1hcHBpbmcpIGJ5IGNvbnZlcnRpbmcgZXhwbGljaXQgc21wX3JtYi9zbXBfd21iIHBhaXJzIGludG8gYWNxdWlyZS9yZWxlYXNlIG1lbW9yeSBvcmRlcnMgKGUuZy4gc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UsIHRlc3RfYml0X2FjcXVpcmUsIHN1cGVyX2ZsYWdzKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHN5bmNocm9uaXphdGlvbiBjaGFuZ2VzIGluIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwZWQ0OWJlMWZhZjM5M2NmOWJjMjlmY2ZjZDcxYzIwYjg2NzI2OTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIxOjIzOjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBkNzhhY2M2OWY0ODcwLi5hMDI3OWUwNTllOTcyIDEwMDY0NAotLS0gYS9mcy9haW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9haW8uYwpAQCAtMTIwNiwxMyAmIzQzOzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpCiAJLyogYWZ0ZXIgZmxhZ2dpbmcgdGhlIHJlcXVlc3QgYXMgZG9uZSwgd2UKIAkgKiBtdXN0IG5ldmVyIGV2ZW4gbG9vayBhdCBpdCBhZ2FpbgogCSAqLwotCXNtcF93bWIoKTsJLyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovCi0KIAljdHgtJmd0O3RhaWwgPSB0YWlsOwogCiAJcmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LSZndDtyaW5nX2ZvbGlvc1swXSk7CiAJaGVhZCA9IHJpbmctJmd0O2hlYWQ7Ci0JcmluZy0mZ3Q7dGFpbCA9IHRhaWw7CiYjNDM7CS8qIE1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3JpbmctJmd0O3RhaWwsIHRhaWwpOwogCWZsdXNoX2RjYWNoZV9mb2xpbyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAogCWN0eC0mZ3Q7Y29tcGxldGVkX2V2ZW50cyYjNDM7JiM0Mzs7CkBAIC0xMjg4LDEzICYjNDM7MTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsCiAJLyogQWNjZXNzIHRvIC0mZ3Q7cmluZ19mb2xpb3MgaGVyZSBpcyBwcm90ZWN0ZWQgYnkgY3R4LSZndDtyaW5nX2xvY2suICovCiAJcmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LSZndDtyaW5nX2ZvbGlvc1swXSk7CiAJaGVhZCA9IHJpbmctJmd0O2hlYWQ7Ci0JdGFpbCA9IHJpbmctJmd0O3RhaWw7Ci0KIAkvKgogCSAqIEVuc3VyZSB0aGF0IG9uY2Ugd2UmIzM5O3ZlIHJlYWQgdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyLCB0aGF0CiAJICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLgomIzQzOwkgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuCiAJICovCi0Jc21wX3JtYigpOwomIzQzOwl0YWlsID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO3JpbmctJmd0O3RhaWwpOwogCiAJcHJfZGVidWcoJiMzNDtoJXUgdCV1IG0ldVxuJiMzNDssIGhlYWQsIHRhaWwsIGN0eC0mZ3Q7bnJfZXZlbnRzKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggNTJmNGM1MTY5ZjkxNC4uNzc4ZmU4Nzg4ZjA2ZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmV4dDRfZ2V0X2dyb3VwX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICoqZ3JwX2luZm87CiAJbG9uZyBpbmRleHYsIGluZGV4aDsKIAotCWlmICh1bmxpa2VseShncm91cCAmZ3Q7PSBFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQpKQomIzQzOwlpZiAodW5saWtlbHkoZ3JvdXAgJmd0Oz0gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHNiKSkpCiAJCXJldHVybiBOVUxMOwogCWlmICh1bmxpa2VseSghRVhUNF9TQihzYiktJmd0O3NfZ3JvdXBfaW5mbykpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCA3MjRhMjdlOGJlNjEzLi5kNzBiOWNiMDkxNTUzIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMzU0MiwxNiAmIzQzOzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpCiB9CiAKIC8qCi0gKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHJlcXVpcmVzIHVzaW5nIHNtcF9ybWIoKSBhZnRlcndhcmRzLiAgU2VlCi0gKiB0aGUgbG9ja2luZyBwcm90b2NvbCBkb2N1bWVudGVkIGluIHRoZSBjb21tZW50cyBvZiBleHQ0X2dyb3VwX2FkZCgpCi0gKiBpbiByZXNpemUuYwomIzQzOyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy4KICAqLwogc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JZXh0NF9ncm91cF90CW5ncm91cHMgPSBFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQ7Ci0KLQlzbXBfcm1iKCk7Ci0JcmV0dXJuIG5ncm91cHM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCiYjNDM7CXJldHVybiBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7RVhUNF9TQihzYiktJmd0O3NfZ3JvdXBzX2NvdW50KTsKIH0KIAogc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTg5OSwxMCAmIzQzOzg5OSw4IEBAIHN0YXRpYyBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoCiAKIAkvKiBub24tZXh0ZW50IGZpbGVzIGFyZSBsaW1pdGVkIHRvIGxvdyBibG9ja3MvZ3JvdXBzICovCiAJaWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtJmd0O2FjX2lub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkKLQkJbmdyb3VwcyA9IEVYVDRfU0IoYWMtJmd0O2FjX3NiKS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzOwotCi0JLyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqLwotCXNtcF9ybWIoKTsKJiM0MzsJCS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCiYjNDM7CQluZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO0VYVDRfU0IoYWMtJmd0O2FjX3NiKS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzKTsKIAogCXJldHVybiBuZ3JvdXBzOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9yZXNpemUuYyBiL2ZzL2V4dDQvcmVzaXplLmMKaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9yZXNpemUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Jlc2l6ZS5jCkBAIC0xNDYyLDExICYjNDM7MTQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqCiAJICogVGhlIHByZWNpc2UgcnVsZXMgd2UgdXNlIGFyZToKIAkgKgotCSAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsCi0JICogICBkZXBlbmRlbnQgZGF0YSBhbmQgYmVmb3JlIG1vZGlmeWluZyB0aGUgZ3JvdXBzIGNvdW50CiYjNDM7CSAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50CiYjNDM7CSAqICAgYWZ0ZXIgYWxsIGRlcGVuZGVudCBkYXRhIGhhcyBiZWVuIHVwZGF0ZWQKIAkgKgotCSAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3VwcwotCSAqICAgY291bnQgYW5kIGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KJiM0MzsJICogKiBSZWFkZXJzIG11c3QgdXNlIGFuIGFjcXVpcmUgbG9hZCB3aGVuIHJlYWRpbmcgdGhlIGdyb3VwcwomIzQzOwkgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KIAkgKgogCSAqIE5CLiBUaGVzZSBydWxlcyBjYW4gYmUgcmVsYXhlZCB3aGVuIGNoZWNraW5nIHRoZSBncm91cCBjb3VudAogCSAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrCkBAIC0xNDc0LDEyICYjNDM7MTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0CiAJICogYWxsb2NhdGlvbi4KIAkgKi8KLQlzbXBfd21iKCk7CiAKIAkvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqLwotCXNiaS0mZ3Q7c19ncm91cHNfY291bnQgJiM0Mzs9IGZsZXhfZ2QtJmd0O2NvdW50OwotCXNiaS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzID0gbWluKHNiaS0mZ3Q7c19ncm91cHNfY291bnQsCi0JCQkoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NiaS0mZ3Q7c19ncm91cHNfY291bnQsCiYjNDM7CQkJICBzYmktJmd0O3NfZ3JvdXBzX2NvdW50ICYjNDM7IGZsZXhfZ2QtJmd0O2NvdW50KTsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NiaS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzLAomIzQzOwkJCSAgbWluKHNiaS0mZ3Q7c19ncm91cHNfY291bnQsCiYjNDM7CQkJICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7CiAKIAkvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpcwogCSAqIGFjdGl2ZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZS5jCkBAIC0yNzMsOCAmIzQzOzI3Myw2IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZkdGFibGUoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucikKIAlyY3VfYXNzaWduX3BvaW50ZXIoZmlsZXMtJmd0O2ZkdCwgbmV3X2ZkdCk7CiAJaWYgKGN1cl9mZHQgIT0gJmFtcDtmaWxlcy0mZ3Q7ZmR0YWIpCiAJCWNhbGxfcmN1KCZhbXA7Y3VyX2ZkdC0mZ3Q7cmN1LCBmcmVlX2ZkdGFibGVfcmN1KTsKLQkvKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGZkX2luc3RhbGwoKSAqLwotCXNtcF93bWIoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEzLDcgJiM0MzszMTEsOCBAQCBzdGF0aWMgaW50IGV4cGFuZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKQogCS8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi8KIAlmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzID0gdHJ1ZTsKIAllcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7Ci0JZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcyA9IGZhbHNlOwomIzQzOwkvKiBjb3VwbGVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGZkX2luc3RhbGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2ZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTsKIAogCXdha2VfdXBfYWxsKCZhbXA7ZmlsZXMtJmd0O3Jlc2l6ZV93YWl0KTsKIAlyZXR1cm4gZXJyb3I7CkBAIC02ODUsMTMgJiM0Mzs2ODQsMTIgQEAgdm9pZCBmZF9pbnN0YWxsKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpCiAJCXJldHVybjsKIAogCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKLQlpZiAodW5saWtlbHkoZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcykpIHsKJiM0MzsJLyogY291cGxlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXhwYW5kX2ZpbGVzKCkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzKSkpIHsKIAkJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CiAJCWZkX2luc3RhbGxfc2xvd3BhdGgoZmQsIGZpbGUpOwogCQlyZXR1cm47CiAJfQotCS8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqLwotCXNtcF9ybWIoKTsKIAlmZHQgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoZmlsZXMtJmd0O2ZkdCk7CiAJVkZTX0JVR19PTihyY3VfYWNjZXNzX3BvaW50ZXIoZmR0LSZndDtmZFtmZF0pICE9IE5VTEwpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihmZHQtJmd0O2ZkW2ZkXSwgZmlsZSk7CmRpZmYgLS1naXQgYS9mcy9tbnRfaWRtYXBwaW5nLmMgYi9mcy9tbnRfaWRtYXBwaW5nLmMKaW5kZXggY2I2MWZiZGI1MmU5MC4uNjEyYjI2NmFiM2RhMCAxMDA2NDQKLS0tIGEvZnMvbW50X2lkbWFwcGluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21udF9pZG1hcHBpbmcuYwpAQCAtMjE5LDEwICYjNDM7MjE5LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmZzZ2lkX2luX2dyb3VwX3ApOwogc3RhdGljIGludCBjb3B5X21udF9pZG1hcChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcF9mcm9tLAogCQkJICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcF90bykKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1MzIgbnJfZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXBfZnJvbS0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpmb3J3YXJkLCAqcmV2ZXJzZTsKLQl1MzIgbnJfZXh0ZW50cyA9IFJFQURfT05DRShtYXBfZnJvbS0mZ3Q7bnJfZXh0ZW50cyk7Ci0JLyogUGFpcnMgd2l0aCBzbXBfd21iKCkgd2hlbiB3cml0aW5nIHRoZSBpZG1hcHBpbmcuICovCi0Jc21wX3JtYigpOwogCiAJLyoKIAkgKiBEb24mIzM5O3QgYmxpbmRseSBjb3B5IEBtYXBfdG8gaW50byBAbWFwX2Zyb20gaWYgbnJfZXh0ZW50cyBpcwpkaWZmIC0tZ2l0IGEvZnMvcGlkZnMuYyBiL2ZzL3BpZGZzLmMKaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDQKLS0tIGEvZnMvcGlkZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9waWRmcy5jCkBAIC0zOTMsOCAmIzQzOzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCiAJYXR0ciA9IFJFQURfT05DRShwaWQtJmd0O2F0dHIpOwogCWlmIChtYXNrICZhbXA7IFBJREZEX0lORk9fRVhJVCkgewotCQlpZiAodGVzdF9iaXQoUElERlNfQVRUUl9CSVRfRVhJVCwgJmFtcDthdHRyLSZndDthdHRyX21hc2spKSB7Ci0JCQlzbXBfcm1iKCk7CiYjNDM7CQlpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9FWElULCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKIAkJCWtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUOwogI2lmZGVmIENPTkZJR19DR1JPVVBTCiAJCQlraW5mby5jZ3JvdXBpZCA9IGF0dHItJmd0O2Nncm91cGlkOwpAQCAtNDA1LDggJiM0Mzs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAl9CiAKIAlpZiAobWFzayAmYW1wOyBQSURGRF9JTkZPX0NPUkVEVU1QKSB7Ci0JCWlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgJmFtcDthdHRyLSZndDthdHRyX21hc2spKSB7Ci0JCQlzbXBfcm1iKCk7CiYjNDM7CQlpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgJmFtcDthdHRyLSZndDthdHRyX21hc2spKSB7CiAJCQlraW5mby5tYXNrIHw9IFBJREZEX0lORk9fQ09SRURVTVAgfCBQSURGRF9JTkZPX0NPUkVEVU1QX1NJR05BTCB8IFBJREZEX0lORk9fQ09SRURVTVBfQ09ERTsKIAkJCWtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLSZndDtjb3JlZHVtcF9tYXNrOwogCQkJa2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci0mZ3Q7Y29yZWR1bXBfc2lnbmFsOwpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggMDVlNDQzMTczMDM4Ny4uY2FhNjE4OWU0MDU3MiAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0yNjcsMTIgJiM0MzsyNjcsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssCiAJICogSG93ZXZlciwgaWYgd2UgYXJlIGN1cnJlbnRseSBtb3VudGluZyB0aGUgc3VwZXJibG9jaywgdGhlIHVuZGVybHlpbmcKIAkgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0CiAJICogaXMgZGFuZ2Vyb3VzIHRvIGFjY2VzcyBpdC4gIHN1cGVyX3RyeWxvY2tfc2hhcmVkKCkgdXNlcyBhIFNCX0JPUk4gY2hlY2sKLQkgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIG1lbW9yeSBiYXJyaWVyIGlzCi0JICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24mIzM5O3QgaG9sZCBsb2NrcyBoZXJlLgomIzQzOwkgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4KIAkgKi8KLQlpZiAoIShzYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9CT1JOKSkKJiM0MzsJaWYgKCFzdXBlcl9mbGFncyhzYiwgU0JfQk9STikpCiAJCXJldHVybiAwOwotCXNtcF9ybWIoKTsKIAogCWlmIChzYi0mZ3Q7c19vcCAmYW1wOyZhbXA7IHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cyAmYW1wOyZhbXA7CiAJICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKQpkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwppbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwpAQCAtMzE3LDkgJiM0MzszMTcsOSBAQCBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjbwogCiBzdGF0aWMgdTMyIG1hcF9pZF9yYW5nZV9kb3duKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudCkKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXAtJmd0O25yX2V4dGVudHMpOwogCXN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50OwotCXVuc2lnbmVkIGV4dGVudHMgPSBtYXAtJmd0O25yX2V4dGVudHM7Ci0Jc21wX3JtYigpOwogCiAJaWYgKGV4dGVudHMgJmx0Oz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykKIAkJZXh0ZW50ID0gbWFwX2lkX3JhbmdlX2Rvd25fYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7CkBAIC0zODMsOSAmIzQzOzM4Myw5IEBAIG1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50CiAKIHUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAoZXh0ZW50cyAmbHQ7PSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKQogCQlleHRlbnQgPSBtYXBfaWRfcmFuZ2VfdXBfYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7CkBAIC02NzYsOSAmIzQzOzY3Niw5IEBAIHN0YXRpYyBpbnQgcHJvamlkX21fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsCiAJCSAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApCiB7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi8KJiM0MzsJdW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bWFwLSZndDtucl9leHRlbnRzKTsKIAlsb2ZmX3QgcG9zID0gKnBwb3M7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAocG9zICZndDs9IGV4dGVudHMpCiAJCXJldHVybiBOVUxMOwpAQCAtOTY3LDkgJiM0Mzs5NjcsMTEgQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCSAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdAogCSAqIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvdW50IG9mIHRoZSBleHRlbnRzLgogCSAqCi0JICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGUKLQkgKiBvcmRlciBhbmQgc21wX3JtYigpIGlzIGd1YXJhbnRlZWQgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBjcmF6eQotCSAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuCiYjNDM7CSAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50CiYjNDM7CSAqIGRhdGEuICBXcml0ZXJzIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHRvIGVuc3VyZSBhbGwgZXh0ZW50CiYjNDM7CSAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2UKJiM0MzsJICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZgomIzQzOwkgKiB0aGUgZXh0ZW50IGRhdGEgd2hlbiByZWFkaW5nIG5yX2V4dGVudHMuCiAJICovCiAJbXV0ZXhfbG9jaygmYW1wO3VzZXJuc19zdGF0ZV9tdXRleCk7CiAKQEAgLTEwOTgsOCAmIzQzOzExMDAsOCBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCW1hcC0mZ3Q7Zm9yd2FyZCA9IG5ld19tYXAuZm9yd2FyZDsKIAkJbWFwLSZndDtyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlOwogCX0KLQlzbXBfd21iKCk7Ci0JbWFwLSZndDtucl9leHRlbnRzID0gbmV3X21hcC5ucl9leHRlbnRzOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDttYXAtJmd0O25yX2V4dGVudHMsIG5ld19tYXAubnJfZXh0ZW50cyk7CiAKIAkqcHBvcyA9IGNvdW50OwogCXJldCA9IGNvdW50OwpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCAxZDk1YWI5MzE0YmY3Li45MGQwYTcyNGVhZGQ4IDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdnNwcmludGYuYwpAQCAtNzYyLDkgJiM0Mzs3NjIsOCBAQCBzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZAogewogCWdldF9yYW5kb21fYnl0ZXMoJmFtcDtwdHJfa2V5LCBzaXplb2YocHRyX2tleSkpOwogCi0JLyogUGFpcnMgd2l0aCBzbXBfcm1iKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi8KLQlzbXBfd21iKCk7Ci0JV1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2ZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCkBAIC03ODEsMTIgJiM0Mzs3ODAsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfdG9faGFzaHZhbChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgKmhhc2h2YWxfb3V0KQogewogCXVuc2lnbmVkIGxvbmcgaGFzaHZhbDsKIAotCWlmICghUkVBRF9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSkpCiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO2ZpbGxlZF9yYW5kb21fcHRyX2tleSkpCiAJCXJldHVybiAtRUJVU1k7CiAKLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovCi0Jc21wX3JtYigpOwotCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJaGFzaHZhbCA9ICh1bnNpZ25lZCBsb25nKXNpcGhhc2hfMXU2NCgodTY0KXB0ciwgJmFtcDtwdHJfa2V5KTsKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTM0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBxdWl0ZSBhIGZldyBmaWxlczogYGZzL2Fpby5jYCwgYGZzL2V4dDQvKmAsIGBmcy9maWxlLmNgLCBgZnMvbW50X2lkbWFwcGluZy5jYCwgYGZzL3BpZGZzLmNgLCBgZnMvc3VwZXIuY2AsIGFuZCBgbGliL3ZzcHJpbnRmLmNgIHByaW1hcmlseS4gVGhhdCBpbW1lZGlhdGVseSBzaWduYWxzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBjb3JlIG9yIHdpZGVzcHJlYWQgaXMgYmVpbmcgdG91Y2hlZC4KCk15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyBhIG1lbW9yeSBiYXJyaWVyIG1vZGVybml6YXRpb24gZWZmb3J0LiBJdCBzZWVtcyB0byBiZSBjb252ZXJ0aW5nIGBzbXBfd21iKClgIGFuZCBhc3NpZ25tZW50LyBgc21wX3JtYigpYCBhbmQgbG9hZCBwYWlycyB0byBgc21wX3N0b3JlX3JlbGVhc2UoKWAvYHNtcF9sb2FkX2FjcXVpcmUoKWAgaW4gbW9zdCBpbnN0YW5jZXMuIFRoZXJlJiMzOTtzIGFsc28gc29tZSByZWZhY3RvcmluZyBpbiBgZnMvZXh0NC9iYWxsb2MuY2Agd2l0aCB0aGUgZ3JvdXAgY291bnQgY2hlY2ssIHVwZGF0ZXMgaW4gYGZzL2ZpbGUuY2AgcmVsYXRlZCB0byBmaWxlIGRlc2NyaXB0b3IgdGFibGUgZXhwYW5zaW9uIGFuZCByZXNpemUgaW4gcHJvZ3Jlc3MgZmxhZ3MsIGFuZCBhbiB1cGRhdGUgaW4gYHN1cGVyLmNgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCBvciBqdXN0IGEgcmVmYWN0b3Jpbmcgb3IgY2xlYW51cC4gQmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBmdXp6aW5nLCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIHBhdGNoJiMzOTtzIHNjb3BlIGFuZCBpZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgcnVuIHRlc3RzLgoKSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBndWlkZWxpbmVzLiBNeSBtZW50YWwgY2hlY2tsaXN0IHRlbGxzIG1lIEkgc2hvdWxkIGV4Y2x1ZGU6IGRvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIHNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMgb3IgLnJlbW92ZSBjYWxsYmFja3MpLgoKQWxyaWdodCwgc28gKmlzKiB0aGlzIHNvbWV0aGluZyB0aGF0IGlzIHJlYWNoYWJsZT8gRG9lcyB0aGlzIHRvdWNoIGNvcmUgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXM/IFRoZSBjaGFuZ2VzIHRvIGBmcy9maWxlLmNgIGFuZCBgZnMvc3VwZXIuY2AgYXJlIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcuCgpJJiMzOTttIGdvaW5nIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdpdCBsb2dgIG9yIGFub3RoZXIgdG9vbCB0byBnZXQgYSBjb25jaXNlIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgdG8gcXVpY2tseSBzdW1tYXJpemUgdGhlbS4gSSBuZWVkIHRvIGtub3cgdGhlICpwdXJwb3NlKiBiZWZvcmUgSSBjYW4gbWFrZSBhIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3VwZXJfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9ODM9c3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3VubG9ja19zaGFyZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTg3LVxuZnMvc3VwZXIuYzo4ODpzdGF0aWMgYm9vbCBzdXBlcl9mbGFncyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5mcy9zdXBlci5jLTg5LXtcbi0tXG5mcy9zdXBlci5jPTExMz1zdGF0aWMgX19tdXN0X2NoZWNrIGJvb2wgc3VwZXJfbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIGV4Y2wpXG4tLVxuZnMvc3VwZXIuYy0xMTctXHQvKiB3YWl0IHVudGlsIHRoZSBzdXBlcmJsb2NrIGlzIHJlYWR5IG9yIGR5aW5nICovXG5mcy9zdXBlci5jOjExODpcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MsIHN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOIHwgU0JfRFlJTkcpKTtcbmZzL3N1cGVyLmMtMTE5LVxuZnMvc3VwZXIuYy0xMjAtXHQvKiBEb24mIzM5O3QgcG9pbnRsZXNzbHkgYWNxdWlyZSBzX3Vtb3VudC4gKi9cbmZzL3N1cGVyLmM6MTIxOlx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXG5mcy9zdXBlci5jLTEyMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL3N1cGVyLmM9MjUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbmZzL3N1cGVyLmMtMjcxLVx0ICovXG5mcy9zdXBlci5jOjI3MjpcdGlmICghc3VwZXJfZmxhZ3Moc2IsIFNCX0JPUk4pKVxuZnMvc3VwZXIuYy0yNzMtXHRcdHJldHVybiAwO1xuLS1cbmZzL3N1cGVyLmM9NjQ4PXN0YXRpYyBib29sIGdyYWJfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTY2MS1cdH1cbmZzL3N1cGVyLmM6NjYyOlx0d2FpdF92YXJfZXZlbnQoXHUwMDI2c2ItXHUwMDNlc19mbGFncywgc3VwZXJfZmxhZ3Moc2IsIFNCX0RFQUQpKTtcbmZzL3N1cGVyLmMtNjYzLVx0cHV0X3N1cGVyKHNiKTtcbi0tXG5mcy9zdXBlci5jPTk3MT1zdGF0aWMgdm9pZCBfX2l0ZXJhdGVfc3VwZXJzKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnLFxuLS1cbmZzL3N1cGVyLmMtOTgxLVx0ICAgICBzYiA9IG5leHRfc3VwZXIoc2IsIGZsYWdzKSkge1xuZnMvc3VwZXIuYzo5ODI6XHRcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxuZnMvc3VwZXIuYy05ODMtXHRcdFx0Y29udGludWU7XG4tLVxuZnMvc3VwZXIuYz0xMDIxPXZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcbi0tXG5mcy9zdXBlci5jLTEwMjktXG5mcy9zdXBlci5jOjEwMzA6XHRcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxuZnMvc3VwZXIuYy0xMDMxLVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgc3VwZXJfZmxhZ3NgIGluIGBmcy9zdXBlci5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgZmlsZXN5c3RlbXMgYXJlIG1hbmFnZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYHN1cGVyX2ZsYWdzYCB2YXJpYWJsZS4gSXQmIzM5O3MgaW4gYGZzL3N1cGVyLmNgLCB3aGljaCwgYXMgd2Uga25vdywgaXMgdGhlIGNlbnRyYWwgbG9jYXRpb24gZm9yIHN1cGVyYmxvY2stcmVsYXRlZCBvcGVyYXRpb25zLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhlIHBsYWNlIHdoZXJlIGFsbCBvZiB0aGUgY3J1Y2lhbCBmaWxlc3lzdGVtIHBhcmFtZXRlcnMgYXJlIHN0b3JlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBmbGFncyBhcmUgc2V0IGFuZCB3aGF0IGVmZmVjdHMgdGhvc2UgZmxhZ3MgaGF2ZSBvbiB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZXNlIGZsYWdzIGluZmx1ZW5jZSB0aGluZ3MgbGlrZSBmaWxlc3lzdGVtIG1vdW50aW5nLCB1bm1vdW50aW5nLCBhbmQgb3ZlcmFsbCBpbnRlZ3JpdHkuIEhvcGVmdWxseSB0aGUgZmxhZ3MgYXJlIHdlbGwgZG9jdW1lbnRlZCBpbiB0aGUgY29kZSwgb3IgYXQgbGVhc3QgaGF2ZSBtZWFuaW5nZnVsIGNvbW1lbnRzIHNvIEkgY2FuIHF1aWNrbHkgZ3JvayB0aGVpciBtZWFuaW5nLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIGZsYWdzIHdpbGwgb2ZmZXIgaW5zaWdodHMgaW50byBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzLCBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgd2l0aGluIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIHdlIGNhbiB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODU6XHRcdHN1cGVyX3VubG9jayhzYiwgZmFsc2UpO1xuICA4NjpcdH1cbiAgODc6XHRcbiAgODg6XHRzdGF0aWMgYm9vbCBzdXBlcl9mbGFncyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gIDg5Olx0e1xuICA5MDpcdFx0LypcbiAgOTE6XHRcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBzdXBlcl93YWtlKCkgYW5kIGVuc3VyZXNcbiAgOTI6XHRcdCAqIHRoYXQgd2Ugc2VlIEBmbGFncyBhZnRlciB3ZSYjMzk7cmUgd29rZW4uXG4gIDkzOlx0XHQgKi9cbiAgOTQ6XHRcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MpIFx1MDAyNiBmbGFncztcbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0LyoqXG4gIDk4Olx0ICogc3VwZXJfbG9jayAtIHdhaXQgZm9yIHN1cGVyYmxvY2sgdG8gYmVjb21lIHJlYWR5IGFuZCBsb2NrIGl0XG4gIDk5Olx0ICogQHNiOiBzdXBlcmJsb2NrIHRvIHdhaXQgZm9yXG4gMTAwOlx0ICogQGV4Y2w6IHdoZXRoZXIgZXhjbHVzaXZlIGFjY2VzcyBpcyByZXF1aXJlZFxuIDEwMTpcdCAqXG4gMTAyOlx0ICogSWYgdGhlIHN1cGVyYmxvY2sgaGFzIG5laXRoZXIgcGFzc2VkIHRocm91Z2ggdmZzX2dldF90cmVlKCkgb3JcbiAxMDM6XHQgKiBnZW5lcmljX3NodXRkb3duX3N1cGVyKCkgeWV0IHdhaXQgZm9yIGl0IHRvIGhhcHBlbi4gRWl0aGVyIHN1cGVyYmxvY2tcbiAxMDQ6XHQgKiBjcmVhdGlvbiB3aWxsIHN1Y2NlZWQgYW5kIFNCX0JPUk4gaXMgc2V0IGJ5IHZmc19nZXRfdHJlZSgpIG9yIHdlJiMzOTtyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS2VybmVsIENvbmN1cnJlbmN5IGFuZCBNZW1vcnkgT3JkZXJpbmcgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBzZXQgb2Yga2VybmVsIG1vZGlmaWNhdGlvbnMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhlc2UgY2hhbmdlcyBhcmUgaGl0dGluZyBjb3JlIGtlcm5lbCBtZW1vcnkgb3JkZXJpbmcgcHJpbWl0aXZlcyBhbmQgY29uY3VycmVuY3kgc3luY2hyb25pemF0aW9uIGFjcm9zcyBzZXZlcmFsIGtleSBmaWxlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBmdXp6ZXItcmVsZXZhbnQgcG9pbnRzLgoKVGhlIGxpc3RlZCBmaWxlcyBhcmU6IGBmcy9haW8uY2AsIGBmcy9leHQ0L2JhbGxvYy5jYCwgYGZzL2V4dDQvZXh0NC5oYCwgYGZzL2V4dDQvbWJhbGxvYy5jYCwgYGZzL2V4dDQvcmVzaXplLmNgLCBgZnMvZmlsZS5jYCwgYGZzL21udF9pZG1hcHBpbmcuY2AsIGBmcy9waWRmcy5jYCwgYGZzL3N1cGVyLmNgLCBgZnMvdXNlcl9uYW1lc3BhY2UuY2AsIGFuZCBgbGliL3ZzcHJpbnRmLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBhcmVhcyBsaWtlIEFJTyBjb21wbGV0aW9uLCBFeHQ0IGJsb2NrIGFsbG9jYXRpb24gYW5kIHJlc2l6ZSBvcGVyYXRpb25zLCBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCwgbW91bnQgSUQgbWFwcGluZywgUElERkQgaW5mb3JtYXRpb24sIHN1cGVyYmxvY2sgaGFuZGxpbmcsIHVzZXIgbmFtZXNwYWNlIElEIG1hcHBpbmcsIGFuZCB2c3ByaW50ZiBwb2ludGVyIGhhc2hpbmcuCgpDcnVjaWFsbHksIHRoaXMgbW9kaWZpY2F0aW9uIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBWRlMgZnVuY3Rpb25hbGl0eS4gVGhpcyBtZWFucyB0aGVzZSBjb25jdXJyZW5jeSBjaGFuZ2VzICphcmUqIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXJpbmcgbXkgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGZsYWcuIEkgaGF2ZSB0byBiZSBleHRyZW1lbHkgbWV0aWN1bG91cyBoZXJlLgoKTm93LCBJIG5lZWQgdG8gYWRoZXJlIHRvIHRoZSBydWxlcy4gQmVjYXVzZSB0aGlzIGhpdHMgY29yZSBrZXJuZWwgbG9naWMsIEkgKm11c3QqIGlkZW50aWZ5IHN1aXRhYmxlIGBGb2N1c1N5bWJvbHNgIGZvciBmdXp6aW5nLCBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyByZXF1aXJlcyBtZSB0byBmaW5kIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGFueSBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBhbHNvIGhhdmUgdG8gaWRlbnRpZnkgdGhlIG5lZWRlZCBgRW5hYmxlQ29uZmlnc2AuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGVhY2ggZmlsZSwgc3RhcnRpbmcgd2l0aCBgZnMvYWlvLmNgLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBhaW9fY29tcGxldGVgIGFuZCBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgLiBIbW0sIGBhaW9fY29tcGxldGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBub3QgaWRlYWwsIGJ1dCBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgIGlzIGNhbGxlZCBieSBgaW9fZ2V0ZXZlbnRzYCBhbmQgYGlvX3BnZXRldmVudHNgLCBtYWtpbmcgaXQgbXVjaCBtb3JlIHByb21pc2luZy4gSSBuZWVkIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gY29uZmlybS4gSSBzaG91bGQgZGVmaW5pdGVseSBsb29rIGF0IGFsbCBvZiBgZnMvYWlvLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyhpb19nZXRldmVudHN8cmVhZF9ldmVudHN8YWlvX2NvbXBsZXRlKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTU2PXN0cnVjdCBhaW9fcmluZyB7XG4tLVxuZnMvYWlvLmMtNTktXHR1bnNpZ25lZFx0aGVhZDtcdC8qIFdyaXR0ZW4gdG8gYnkgdXNlcmxhbmQgb3IgdW5kZXIgcmluZ19sb2NrXG5mcy9haW8uYzo2MDpcdFx0XHRcdCAqIG11dGV4IGJ5IGFpb19yZWFkX2V2ZW50c19yaW5nKCkuICovXG5mcy9haW8uYy02MS1cdHVuc2lnbmVkXHR0YWlsO1xuLS1cbmZzL2Fpby5jPTQ2MD1zdGF0aWMgaW50IGFpb19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5mcy9haW8uYy00NzYtXG5mcy9haW8uYzo0Nzc6XHQvKiBUaGUgcmluZ19sb2NrIG11dGV4LiAgVGhlIHByZXZlbnRzIGFpb19yZWFkX2V2ZW50cygpIGZyb20gd3JpdGluZ1xuZnMvYWlvLmMtNDc4LVx0ICogdG8gdGhlIHJpbmcmIzM5O3MgaGVhZCwgYW5kIHByZXZlbnRzIHBhZ2UgbWlncmF0aW9uIGZyb20gbXVja2luZyBpblxuLS1cbmZzL2Fpby5jPTEwMDQ9c3RhdGljIGJvb2wgX19nZXRfcmVxc19hdmFpbGFibGUoc3RydWN0IGtpb2N0eCAqY3R4KVxuLS1cbmZzL2Fpby5jLTEwMzMtICpcdG51bWJlciBvZiBmcmVlIHNsb3RzIGluIHRoZSBjb21wbGV0aW9uIHJpbmcuICBUaGlzIGNhbiBiZSBjYWxsZWRcbmZzL2Fpby5jOjEwMzQ6ICpcdGZyb20gYWlvX2NvbXBsZXRlKCkgKHRvIG9wdGltaXN0aWNhbGx5IHVwZGF0ZSByZXFzX2F2YWlsYWJsZSkgb3JcbmZzL2Fpby5jLTEwMzUtICpcdGZyb20gYWlvX2dldF9yZXEoKSAodGhlIHdlJiMzOTtyZSBvdXQgb2YgZXZlbnRzIGNhc2UpLiAgSXQgbXVzdCBiZVxuLS1cbmZzL2Fpby5jPTEwNjc9c3RhdGljIHZvaWQgdXNlcl9yZWZpbGxfcmVxc19hdmFpbGFibGUoc3RydWN0IGtpb2N0eCAqY3R4KVxuLS1cbmZzL2Fpby5jLTEwNzMtXG5mcy9haW8uYzoxMDc0Olx0XHQvKiBBY2Nlc3Mgb2YgcmluZy1cdTAwM2VoZWFkIG1heSByYWNlIHdpdGggYWlvX3JlYWRfZXZlbnRzX3JpbmcoKVxuZnMvYWlvLmMtMTA3NS1cdFx0ICogaGVyZSwgYnV0IHRoYXQmIzM5O3Mgb2theSBzaW5jZSB3aGV0aGVyIHdlIHJlYWQgdGhlIG9sZCB2ZXJzaW9uXG4tLVxuZnMvYWlvLmMtMTA3Ny1cdFx0ICogcGFydCBpcyB0aGF0IGhlYWQgY2Fubm90IHBhc3MgdGFpbCBzaW5jZSB3ZSBwcmV2ZW50XG5mcy9haW8uYzoxMDc4Olx0XHQgKiBhaW9fY29tcGxldGUoKSBmcm9tIHVwZGF0aW5nIHRhaWwgYnkgaG9sZGluZ1xuZnMvYWlvLmMtMTA3OS1cdFx0ICogY3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jay4gIEV2ZW4gaWYgaGVhZCBpcyBpbnZhbGlkLCB0aGUgY2hlY2tcbi0tXG5mcy9haW8uYz0xMTY2PXN0cnVjdCBhaW9fd2FpdGVyIHtcbi0tXG5mcy9haW8uYy0xMTcwLVxuZnMvYWlvLmM6MTE3MTovKiBhaW9fY29tcGxldGVcbmZzL2Fpby5jLTExNzItICpcdENhbGxlZCB3aGVuIHRoZSBpbyByZXF1ZXN0IG9uIHRoZSBnaXZlbiBpb2NiIGlzIGNvbXBsZXRlLlxuZnMvYWlvLmMtMTE3My0gKi9cbmZzL2Fpby5jOjExNzQ6c3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG5mcy9haW8uYy0xMTc1LXtcbi0tXG5mcy9haW8uYz0xMjU4PXN0YXRpYyBpbmxpbmUgdm9pZCBpb2NiX3B1dChzdHJ1Y3QgYWlvX2tpb2NiICppb2NiKVxuLS1cbmZzL2Fpby5jLTEyNjAtXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmlvY2ItXHUwMDNla2lfcmVmY250KSkge1xuZnMvYWlvLmM6MTI2MTpcdFx0YWlvX2NvbXBsZXRlKGlvY2IpO1xuZnMvYWlvLmMtMTI2Mi1cdFx0aW9jYl9kZXN0cm95KGlvY2IpO1xuLS1cbmZzL2Fpby5jLTEyNjUtXG5mcy9haW8uYzoxMjY2Oi8qIGFpb19yZWFkX2V2ZW50c19yaW5nXG5mcy9haW8uYy0xMjY3LSAqXHRQdWxsIGFuIGV2ZW50IG9mZiBvZiB0aGUgaW9jdHgmIzM5O3MgZXZlbnQgcmluZy4gIFJldHVybnMgdGhlIG51bWJlciBvZlxuLS1cbmZzL2Fpby5jLTEyNjktICovXG5mcy9haW8uYzoxMjcwOnN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCxcbmZzL2Fpby5jLTEyNzEtXHRcdFx0XHQgc3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsIGxvbmcgbnIpXG4tLVxuZnMvYWlvLmMtMTI4MS1cdCAqIGFuZCByZXBlYXQuIFRoaXMgc2hvdWxkIGJlIHJhcmUgZW5vdWdoIHRoYXQgaXQgZG9lc24mIzM5O3QgY2F1c2VcbmZzL2Fpby5jOjEyODI6XHQgKiBwZWZvcm1hbmNlIGlzc3Vlcy4gU2VlIHRoZSBjb21tZW50IGluIHJlYWRfZXZlbnRzKCkgZm9yIG1vcmUgZGV0YWlsLlxuZnMvYWlvLmMtMTI4My1cdCAqL1xuLS1cbmZzL2Fpby5jLTEyOTItXHQgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuXG5mcy9haW8uYzoxMjkzOlx0ICogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGFpb19jb21wbGV0ZSgpLlxuZnMvYWlvLmMtMTI5NC1cdCAqL1xuLS1cbmZzL2Fpby5jLTEzNDUtXG5mcy9haW8uYzoxMzQ2OnN0YXRpYyBib29sIGFpb19yZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxuZnMvYWlvLmMtMTM0Ny1cdFx0XHQgICAgc3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsIGxvbmcgKmkpXG5mcy9haW8uYy0xMzQ4LXtcbmZzL2Fpby5jOjEzNDk6XHRsb25nIHJldCA9IGFpb19yZWFkX2V2ZW50c19yaW5nKGN0eCwgZXZlbnQgJiM0MzsgKmksIG5yIC0gKmkpO1xuZnMvYWlvLmMtMTM1MC1cbi0tXG5mcy9haW8uYy0xMzYyLVxuZnMvYWlvLmM6MTM2MzpzdGF0aWMgbG9uZyByZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxuZnMvYWlvLmMtMTM2NC1cdFx0XHRzdHJ1Y3QgaW9fZXZlbnQgX191c2VyICpldmVudCxcbi0tXG5mcy9haW8uYy0xMzcxLVx0LypcbmZzL2Fpby5jOjEzNzI6XHQgKiBOb3RlIHRoYXQgYWlvX3JlYWRfZXZlbnRzKCkgaXMgYmVpbmcgY2FsbGVkIGFzIHRoZSBjb25kaXRpb25hbCAtIGkuZS5cbmZzL2Fpby5jLTEzNzMtXHQgKiB3ZSYjMzk7cmUgY2FsbGluZyBpdCBhZnRlciBwcmVwYXJlX3RvX3dhaXQoKSBoYXMgc2V0IHRhc2sgc3RhdGUgdG9cbi0tXG5mcy9haW8uYy0xMzc1LVx0ICpcbmZzL2Fpby5jOjEzNzY6XHQgKiBCdXQgYWlvX3JlYWRfZXZlbnRzKCkgY2FuIGJsb2NrLCBhbmQgaWYgaXQgYmxvY2tzIGl0JiMzOTtzIGdvaW5nIHRvIGZsaXBcbmZzL2Fpby5jLTEzNzctXHQgKiB0aGUgdGFzayBzdGF0ZSBiYWNrIHRvIFRBU0tfUlVOTklORy5cbi0tXG5mcy9haW8uYy0xMzg0LVx0ICovXG5mcy9haW8uYzoxMzg1Olx0YWlvX3JlYWRfZXZlbnRzKGN0eCwgbWluX25yLCBuciwgZXZlbnQsIFx1MDAyNnJldCk7XG5mcy9haW8uYy0xMzg2LVx0aWYgKHVudGlsID09IDAgfHwgcmV0IFx1MDAzYyAwIHx8IHJldCBcdTAwM2U9IG1pbl9ucilcbi0tXG5mcy9haW8uYy0xNDA1LVxuZnMvYWlvLmM6MTQwNjpcdFx0aWYgKGFpb19yZWFkX2V2ZW50cyhjdHgsIG1pbl9uciwgbnIsIGV2ZW50LCBcdTAwMjZyZXQpIHx8IHJldDIpXG5mcy9haW8uYy0xNDA3LVx0XHRcdGJyZWFrO1xuLS1cbmZzL2Fpby5jPTE1MzI9c3RhdGljIHZvaWQgYWlvX3JlbW92ZV9pb2NiKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4tLVxuZnMvYWlvLmMtMTU0MS1cbmZzL2Fpby5jOjE1NDI6c3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlX3J3KHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKVxuZnMvYWlvLmMtMTU0My17XG4tLVxuZnMvYWlvLmM9MTU2MT1zdGF0aWMgaW50IGFpb19wcmVwX3J3KHN0cnVjdCBraW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYiwgaW50IHJ3X3R5cGUpXG4tLVxuZnMvYWlvLmMtMTU2NS1cdHJlcS1cdTAwM2VraV93cml0ZV9zdHJlYW0gPSAwO1xuZnMvYWlvLmM6MTU2NjpcdHJlcS1cdTAwM2VraV9jb21wbGV0ZSA9IGFpb19jb21wbGV0ZV9ydztcbmZzL2Fpby5jLTE1NjctXHRyZXEtXHUwMDNlcHJpdmF0ZSA9IE5VTEw7XG4tLVxuZnMvYWlvLmM9MjA3ND1zdGF0aWMgaW50IGlvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBzdHJ1Y3QgaW9jYiBfX3VzZXIgKnVzZXJfaW9jYixcbi0tXG5mcy9haW8uYy0yMTA5LVx0LypcbmZzL2Fpby5jOjIxMTA6XHQgKiBJZiBlcnIgaXMgMCwgd2UmIzM5O2QgZWl0aGVyIGRvbmUgYWlvX2NvbXBsZXRlKCkgb3Vyc2VsdmVzIG9yIGhhdmVcbmZzL2Fpby5jLTIxMTEtXHQgKiBhcnJhbmdlZCBmb3IgdGhhdCB0byBiZSBkb25lIGFzeW5jaHJvbm91c2x5LiAgQW55dGhpbmcgbm9uLXplcm9cbi0tXG5mcy9haW8uYz0yMjI3PVNZU0NBTExfREVGSU5FMyhpb19jYW5jZWwsIGFpb19jb250ZXh0X3QsIGN0eF9pZCwgc3RydWN0IGlvY2IgX191c2VyICosIGlvY2IsXG4tLVxuZnMvYWlvLmMtMjI2OC1cbmZzL2Fpby5jOjIyNjk6c3RhdGljIGxvbmcgZG9faW9fZ2V0ZXZlbnRzKGFpb19jb250ZXh0X3QgY3R4X2lkLFxuZnMvYWlvLmMtMjI3MC1cdFx0bG9uZyBtaW5fbnIsXG4tLVxuZnMvYWlvLmMtMjI4MC1cdFx0aWYgKGxpa2VseShtaW5fbnIgXHUwMDNjPSBuciBcdTAwMjZcdTAwMjYgbWluX25yIFx1MDAzZT0gMCkpXG5mcy9haW8uYzoyMjgxOlx0XHRcdHJldCA9IHJlYWRfZXZlbnRzKGlvY3R4LCBtaW5fbnIsIG5yLCBldmVudHMsIHVudGlsKTtcbmZzL2Fpby5jLTIyODItXHRcdHBlcmNwdV9yZWZfcHV0KFx1MDAyNmlvY3R4LVx1MDAzZXVzZXJzKTtcbi0tXG5mcy9haW8uYy0yMjg3LVxuZnMvYWlvLmM6MjI4ODovKiBpb19nZXRldmVudHM6XG5mcy9haW8uYy0yMjg5LSAqXHRBdHRlbXB0cyB0byByZWFkIGF0IGxlYXN0IG1pbl9uciBldmVudHMgYW5kIHVwIHRvIG5yIGV2ZW50cyBmcm9tXG4tLVxuZnMvYWlvLmMtMjMwMS1cbmZzL2Fpby5jOjIzMDI6U1lTQ0FMTF9ERUZJTkU1KGlvX2dldGV2ZW50cywgYWlvX2NvbnRleHRfdCwgY3R4X2lkLFxuZnMvYWlvLmMtMjMwMy1cdFx0bG9uZywgbWluX25yLFxuLS1cbmZzL2Fpby5jLTIzMTMtXG5mcy9haW8uYzoyMzE0Olx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXHUwMDI2dHMgOiBOVUxMKTtcbmZzL2Fpby5jLTIzMTUtXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4tLVxuZnMvYWlvLmM9MjMyNz1TWVNDQUxMX0RFRklORTYoaW9fcGdldGV2ZW50cyxcbi0tXG5mcy9haW8uYy0yMzQ5LVxuZnMvYWlvLmM6MjM1MDpcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFx1MDAyNnRzIDogTlVMTCk7XG5mcy9haW8uYy0yMzUxLVxuLS1cbmZzL2Fpby5jPTIzNjI9U1lTQ0FMTF9ERUZJTkU2KGlvX3BnZXRldmVudHNfdGltZTMyLFxuLS1cbmZzL2Fpby5jLTIzODUtXG5mcy9haW8uYzoyMzg2Olx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXHUwMDI2dHMgOiBOVUxMKTtcbmZzL2Fpby5jLTIzODctXG4tLVxuZnMvYWlvLmMtMjM5OS1cbmZzL2Fpby5jOjI0MDA6U1lTQ0FMTF9ERUZJTkU1KGlvX2dldGV2ZW50c190aW1lMzIsIF9fdTMyLCBjdHhfaWQsXG5mcy9haW8uYy0yNDAxLVx0XHRfX3MzMiwgbWluX25yLFxuLS1cbmZzL2Fpby5jLTI0MTEtXG5mcy9haW8uYzoyNDEyOlx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXHUwMDI2dCA6IE5VTEwpO1xuZnMvYWlvLmMtMjQxMy1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbi0tXG5mcy9haW8uYz0yNDI5PUNPTVBBVF9TWVNDQUxMX0RFRklORTYoaW9fcGdldGV2ZW50cyxcbi0tXG5mcy9haW8uYy0yNDUxLVxuZnMvYWlvLmM6MjQ1MjpcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFx1MDAyNnQgOiBOVUxMKTtcbmZzL2Fpby5jLTI0NTMtXG4tLVxuZnMvYWlvLmM9MjQ2ND1DT01QQVRfU1lTQ0FMTF9ERUZJTkU2KGlvX3BnZXRldmVudHNfdGltZTY0LFxuLS1cbmZzL2Fpby5jLTI0ODYtXG5mcy9haW8uYzoyNDg3Olx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXHUwMDI2dCA6IE5VTEwpO1xuZnMvYWlvLmMtMjQ4OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeHQ0IFJlc2l6ZSBDb2RlIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHJlc2l6aW5nIGNvZGUuIFRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgb3V0IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhlIGdyb3VwIGFuZCBibG9jayBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoYXQgbWVhbnMgc3RhcnRpbmcgd2l0aCBhIGZldyBrZXkgZnVuY3Rpb25zOiBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AgaW4gYGZzL2V4dDQvYmFsbG9jLmNgLCBgZXh0NF9nZXRfZ3JvdXBzX2NvdW50YCBpbiBgZnMvZXh0NC9leHQ0LmhgLCBhbmQgYGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50YCBpbiBgZnMvZXh0NC9tYmFsbG9jLmNgLiBUaGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgbWV0YWRhdGEgaXMgc3RydWN0dXJlZCBhbmQgYWNjZXNzZWQuIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGV4dDRfdXBkYXRlX3N1cGVyYCBpbiBgZnMvZXh0NC9yZXNpemUuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN1cGVyYmxvY2sgaXMgbW9kaWZpZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSByZXNpemUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHRoZSBub24tc3RhdGljIG9uZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4dGVybmFsIGNhbGxzIGludGVyYWN0IHdpdGggdGhlIGNvcmUgcmVzaXplIG9wZXJhdGlvbnMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgb3V0IGBleHQ0X3Jlc2l6ZV9mc2AsIGBleHQ0X2dyb3VwX2FkZGAsIGFuZCBgZXh0NF9ncm91cF9leHRlbmRgLiBTaW5jZSB0aGVzZSBhcmUgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBvcmNoZXN0cmF0ZSB0aGUgcmVzaXppbmcuIFRvIHVuZGVyc3RhbmQgdGhhdCwgSSBuZWVkIHRvIGxvb2sgaW50byBgZnMvZXh0NC9yZXNpemUuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIGluIGBmcy9leHQ0L3Jlc2l6ZS5jYCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaG93IHRoZSB3aG9sZSB0aGluZyBoYW5ncyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF8uKnJlc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTMyODY9ZXh0ZXJuIGludCBleHQ0X2dyb3VwX2V4dGVuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTMyODgtXHRcdFx0XHRleHQ0X2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQpO1xuZnMvZXh0NC9leHQ0Lmg6MzI4OTpleHRlcm4gaW50IGV4dDRfcmVzaXplX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudCk7XG5mcy9leHQ0L2V4dDQuaC0zMjkwLWV4dGVybiB1bnNpZ25lZCBpbnQgZXh0NF9saXN0X2JhY2t1cHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2V4dDQuaD00MDE3PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0bWFwX3VwdG9kYXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvZXh0NC9leHQ0LmgtNDAyMS1cbmZzL2V4dDQvZXh0NC5oOjQwMjI6ZXh0ZXJuIGludCBleHQ0X3Jlc2l6ZV9iZWdpbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvZXh0NC5oOjQwMjM6ZXh0ZXJuIGludCBleHQ0X3Jlc2l6ZV9lbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCB1cGRhdGVfYmFja3Vwcyk7XG5mcy9leHQ0L2V4dDQuaC00MDI0LVxuLS1cbmZzL2V4dDQvaW9jdGwuYz05NTQ9c3RhdGljIGxvbmcgZXh0NF9pb2N0bF9ncm91cF9hZGQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTk1OS1cbmZzL2V4dDQvaW9jdGwuYzo5NjA6XHRlcnIgPSBleHQ0X3Jlc2l6ZV9iZWdpbihzYik7XG5mcy9leHQ0L2lvY3RsLmMtOTYxLVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtOTg4LWdyb3VwX2FkZF9vdXQ6XG5mcy9leHQ0L2lvY3RsLmM6OTg5Olx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgZmFsc2UpO1xuZnMvZXh0NC9pb2N0bC5jLTk5MC1cdGlmIChlcnIgPT0gMClcbi0tXG5mcy9leHQ0L2lvY3RsLmM9MTUzOD1zdGF0aWMgbG9uZyBfX2V4dDRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNjAwLVxuZnMvZXh0NC9pb2N0bC5jOjE2MDE6XHRcdGVyciA9IGV4dDRfcmVzaXplX2JlZ2luKHNiKTtcbmZzL2V4dDQvaW9jdGwuYy0xNjAyLVx0XHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNjMyLWdyb3VwX2V4dGVuZF9vdXQ6XG5mcy9leHQ0L2lvY3RsLmM6MTYzMzpcdFx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgZmFsc2UpO1xuZnMvZXh0NC9pb2N0bC5jLTE2MzQtXHRcdGlmIChlcnIgPT0gMClcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTc0NC1cbmZzL2V4dDQvaW9jdGwuYzoxNzQ1Olx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9iZWdpbihzYik7XG5mcy9leHQ0L2lvY3RsLmMtMTc0Ni1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTc1Mi1cbmZzL2V4dDQvaW9jdGwuYzoxNzUzOlx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9mcyhzYiwgbl9ibG9ja3NfY291bnQpO1xuZnMvZXh0NC9pb2N0bC5jLTE3NTQtXHRcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2VzX2pvdXJuYWwpIHtcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTc2OC1yZXNpemVmc19vdXQ6XG5mcy9leHQ0L2lvY3RsLmM6MTc2OTpcdFx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgdHJ1ZSk7XG5mcy9leHQ0L2lvY3RsLmMtMTc3MC1cdFx0aWYgKGVyciA9PSAwKVxuLS1cbmZzL2V4dDQvcmVzaXplLmM9MzM9dm9pZCBleHQ0X2t2ZnJlZV9hcnJheV9yY3Uodm9pZCAqdG9fZnJlZSlcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTQ1LVxuZnMvZXh0NC9yZXNpemUuYzo0NjppbnQgZXh0NF9yZXNpemVfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvcmVzaXplLmMtNDcte1xuLS1cbmZzL2V4dDQvcmVzaXplLmMtNTgtXHRpZiAoc2JpLVx1MDAzZXNfZXMtXHUwMDNlc19yZXNlcnZlZF9nZHRfYmxvY2tzIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9yZXNpemUuYzo1OTpcdCAgICAhZXh0NF9oYXNfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjYwOlx0XHRleHQ0X2Vycm9yKHNiLCBcJiMzNDtyZXNpemVfaW5vZGUgZGlzYWJsZWQgYnV0IHJlc2VydmVkIEdEVCBibG9ja3Mgbm9uLXplcm9cJiMzNDspO1xuZnMvZXh0NC9yZXNpemUuYy02MS1cdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG4tLVxuZnMvZXh0NC9yZXNpemUuYy03MC1cdCAgICBsZTMyX3RvX2NwdShzYmktXHUwMDNlc19lcy1cdTAwM2VzX2ZpcnN0X2RhdGFfYmxvY2spKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjcxOlx0XHRleHQ0X3dhcm5pbmcoc2IsIFwmIzM0O3dvbiYjMzk7dCByZXNpemUgdXNpbmcgYmFja3VwIHN1cGVyYmxvY2sgYXQgJWxsdVwmIzM0OyxcbmZzL2V4dDQvcmVzaXplLmMtNzItXHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZylzYmktXHUwMDNlc19zYmgtXHUwMDNlYl9ibG9ja25yKTtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTk3LVxuZnMvZXh0NC9yZXNpemUuYzo5ODppbnQgZXh0NF9yZXNpemVfZW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgdXBkYXRlX2JhY2t1cHMpXG5mcy9leHQ0L3Jlc2l6ZS5jLTk5LXtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jPTEyMD1zdGF0aWMgaW50IHZlcmlmeV9ncm91cF9pbnB1dChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMjEyLS8qXG5mcy9leHQ0L3Jlc2l6ZS5jOjIxMzogKiBleHQ0X25ld19mbGV4X2dyb3VwX2RhdGEgaXMgdXNlZCBieSA2NGJpdC1yZXNpemUgaW50ZXJmYWNlIHRvIGFkZCBhIGZsZXhcbmZzL2V4dDQvcmVzaXplLmMtMjE0LSAqIGdyb3VwIGVhY2ggdGltZS5cbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jPTIxNj1zdHJ1Y3QgZXh0NF9uZXdfZmxleF9ncm91cF9kYXRhIHtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTIyMC1cdFx0XHRcdFx0XHQgICBpbiBAZ3JvdXBzICovXG5mcy9leHQ0L3Jlc2l6ZS5jOjIyMTpcdGV4dDRfZ3JvdXBfdCByZXNpemVfYmc7XHRcdFx0LyogbnVtYmVyIG9mIGFsbG9jYXRlZFxuZnMvZXh0NC9yZXNpemUuYy0yMjItXHRcdFx0XHRcdFx0ICAgbmV3X2dyb3VwX2RhdGEgKi9cbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jPTQyMj1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiY2xlYW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTQ0My1cbmZzL2V4dDQvcmVzaXplLmM6NDQ0OnN0YXRpYyBpbnQgZXh0NF9yZXNpemVfZW5zdXJlX2NyZWRpdHNfYmF0Y2goaGFuZGxlX3QgKmhhbmRsZSwgaW50IGNyZWRpdHMpXG5mcy9leHQ0L3Jlc2l6ZS5jLTQ0NS17XG4tLVxuZnMvZXh0NC9yZXNpemUuYz00NTk9c3RhdGljIGludCBzZXRfZmxleGJnX2Jsb2NrX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtNDg3LVxuZnMvZXh0NC9yZXNpemUuYzo0ODg6XHRcdGVyciA9IGV4dDRfcmVzaXplX2Vuc3VyZV9jcmVkaXRzX2JhdGNoKGhhbmRsZSwgMSk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTQ4OS1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jPTUzMD1zdGF0aWMgaW50IHNldHVwX25ld19mbGV4X2dyb3VwX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtNTc2LVx0XHRcdGV4dDRfZGVidWcoXCYjMzQ7dXBkYXRlIGJhY2t1cCBncm91cCAlIzA0bGx4XFxuXCYjMzQ7LCBibG9jayk7XG5mcy9leHQ0L3Jlc2l6ZS5jOjU3NzpcdFx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xuZnMvZXh0NC9yZXNpemUuYy01NzgtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTYzNS1cdFx0YmxvY2sgPSBncm91cF9kYXRhW2ldLmJsb2NrX2JpdG1hcDtcbmZzL2V4dDQvcmVzaXplLmM6NjM2Olx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xuZnMvZXh0NC9yZXNpemUuYy02MzctXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZnMvZXh0NC9yZXNpemUuYy02NjQtXHRcdGJsb2NrID0gZ3JvdXBfZGF0YVtpXS5pbm9kZV9iaXRtYXA7XG5mcy9leHQ0L3Jlc2l6ZS5jOjY2NTpcdFx0ZXJyID0gZXh0NF9yZXNpemVfZW5zdXJlX2NyZWRpdHNfYmF0Y2goaGFuZGxlLCAxKTtcbmZzL2V4dDQvcmVzaXplLmMtNjY2LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTE0MD1zdGF0aWMgdm9pZCB1cGRhdGVfYmFja3VwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibGtfb2ZmLCBjaGFyICpkYXRhLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMTE3NS1cdFx0LyogT3V0IG9mIGpvdXJuYWwgc3BhY2UsIGFuZCBjYW4mIzM5O3QgZ2V0IG1vcmUgLSBhYm9ydCAtIHNvIHNhZCAqL1xuZnMvZXh0NC9yZXNpemUuYzoxMTc2Olx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xuZnMvZXh0NC9yZXNpemUuYy0xMTc3LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTI1Mj1zdGF0aWMgaW50IGV4dDRfYWRkX25ld19kZXNjcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9yZXNpemUuYzoxMjUzOlx0XHRcdCAgICAgIGV4dDRfZ3JvdXBfdCBncm91cCwgc3RydWN0IGlub2RlICpyZXNpemVfaW5vZGUsXG5mcy9leHQ0L3Jlc2l6ZS5jLTEyNTQtXHRcdFx0ICAgICAgZXh0NF9ncm91cF90IGNvdW50KVxuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTcwMz1pbnQgZXh0NF9ncm91cF9hZGQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfbmV3X2dyb3VwX2RhdGEgKmlucHV0KVxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMTcxNy1cdGlmIChnZGJfb2ZmID09IDAgXHUwMDI2XHUwMDI2ICFleHQ0X2hhc19mZWF0dXJlX3NwYXJzZV9zdXBlcihzYikpIHtcbmZzL2V4dDQvcmVzaXplLmM6MTcxODpcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtDYW4mIzM5O3QgcmVzaXplIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSBmdXJ0aGVyXCYjMzQ7KTtcbmZzL2V4dDQvcmVzaXplLmMtMTcxOS1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3MzQtXHRpZiAocmVzZXJ2ZWRfZ2RiIHx8IGdkYl9vZmYgPT0gMCkge1xuZnMvZXh0NC9yZXNpemUuYzoxNzM1Olx0XHRpZiAoIWV4dDRfaGFzX2ZlYXR1cmVfcmVzaXplX2lub2RlKHNiKSB8fFxuZnMvZXh0NC9yZXNpemUuYy0xNzM2LVx0XHQgICAgIWxlMTZfdG9fY3B1KGVzLVx1MDAzZXNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcykpIHtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3NDItXHRcdGlmIChJU19FUlIoaW5vZGUpKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjE3NDM6XHRcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtFcnJvciBvcGVuaW5nIHJlc2l6ZSBpbm9kZVwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTE3NDQtXHRcdFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTgzNz1pbnQgZXh0NF9ncm91cF9leHRlbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMTg2My1cdGlmIChuX2Jsb2Nrc19jb3VudCBcdTAwM2Mgb19ibG9ja3NfY291bnQpIHtcbmZzL2V4dDQvcmVzaXplLmM6MTg2NDpcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtjYW4mIzM5O3Qgc2hyaW5rIEZTIC0gcmVzaXplIGFib3J0ZWRcJiMzNDspO1xuZnMvZXh0NC9yZXNpemUuYy0xODY1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NzEtXHRpZiAobGFzdCA9PSAwKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjE4NzI6XHRcdGV4dDRfd2FybmluZyhzYiwgXCYjMzQ7bmVlZCB0byB1c2UgZXh0Mm9ubGluZSB0byByZXNpemUgZnVydGhlclwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NzMtXHRcdHJldHVybiAtRVBFUk07XG4tLVxuZnMvZXh0NC9yZXNpemUuYy0xODkyLVx0aWYgKElTX0VSUihiaCkpIHtcbmZzL2V4dDQvcmVzaXplLmM6MTg5MzpcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtjYW4mIzM5O3QgcmVhZCBsYXN0IGJsb2NrLCByZXNpemUgYWJvcnRlZFwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTE4OTQtXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTkxMj1zdGF0aWMgaW50IGV4dDRfY29udmVydF9tZXRhX2JnKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9yZXNpemUuYy0xOTU3LVx0bG9ja19idWZmZXIoc2JpLVx1MDAzZXNfc2JoKTtcbmZzL2V4dDQvcmVzaXplLmM6MTk1ODpcdGV4dDRfY2xlYXJfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpO1xuZnMvZXh0NC9yZXNpemUuYy0xOTU5LVx0ZXh0NF9zZXRfZmVhdHVyZV9tZXRhX2JnKHNiKTtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5ODgtaW52YWxpZF9yZXNpemVfaW5vZGU6XG5mcy9leHQ0L3Jlc2l6ZS5jOjE5ODk6XHRleHQ0X2Vycm9yKHNiLCBcJiMzNDtjb3JydXB0ZWQvaW5jb25zaXN0ZW50IHJlc2l6ZSBpbm9kZVwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTAtXHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTMtLypcbmZzL2V4dDQvcmVzaXplLmM6MTk5NDogKiBleHQ0X3Jlc2l6ZV9mcygpIHJlc2l6ZXMgYSBmcyB0byBuZXcgc2l6ZSBzcGVjaWZpZWQgYnkgQG5fYmxvY2tzX2NvdW50XG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTUtICpcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTgtICovXG5mcy9leHQ0L3Jlc2l6ZS5jOjE5OTk6aW50IGV4dDRfcmVzaXplX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudClcbmZzL2V4dDQvcmVzaXplLmMtMjAwMC17XG4tLVxuZnMvZXh0NC9yZXNpemUuYy0yMDIwLVx0aWYgKElTX0VSUihiaCkpIHtcbmZzL2V4dDQvcmVzaXplLmM6MjAyMTpcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtjYW4mIzM5O3QgcmVhZCBsYXN0IGJsb2NrLCByZXNpemUgYWJvcnRlZFwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTIwMjItXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmZzL2V4dDQvcmVzaXplLmMtMjA0My1cdFx0LyogT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCAqL1xuZnMvZXh0NC9yZXNpemUuYzoyMDQ0Olx0XHRleHQ0X3dhcm5pbmcoc2IsIFwmIzM0O2NhbiYjMzk7dCBzaHJpbmsgRlMgLSByZXNpemUgYWJvcnRlZFwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTIwNDUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL2V4dDQvcmVzaXplLmMtMjA1My1cdGlmIChuX2dyb3VwIFx1MDAzZT0gKDB4RkZGRkZGRkZVTCAvIEVYVDRfSU5PREVTX1BFUl9HUk9VUChzYikpKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjIwNTQ6XHRcdGV4dDRfd2FybmluZyhzYiwgXCYjMzQ7cmVzaXplIHdvdWxkIGNhdXNlIGlub2Rlc19jb3VudCBvdmVyZmxvd1wmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTIwNTUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL2V4dDQvcmVzaXplLmMtMjA2My1cbmZzL2V4dDQvcmVzaXplLmM6MjA2NDpcdGlmIChleHQ0X2hhc19mZWF0dXJlX3Jlc2l6ZV9pbm9kZShzYikpIHtcbmZzL2V4dDQvcmVzaXplLmMtMjA2NS1cdFx0aWYgKG1ldGFfYmcpIHtcbmZzL2V4dDQvcmVzaXplLmM6MjA2NjpcdFx0XHRleHQ0X2Vycm9yKHNiLCBcJiMzNDtyZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZW5hYmxlZCBcJiMzNDtcbmZzL2V4dDQvcmVzaXplLmMtMjA2Ny1cdFx0XHRcdCAgIFwmIzM0O3NpbXVsdGFuZW91c2x5XCYjMzQ7KTtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTIwODUtXHRcdGlmIChJU19FUlIocmVzaXplX2lub2RlKSkge1xuZnMvZXh0NC9yZXNpemUuYzoyMDg2Olx0XHRcdGV4dDRfd2FybmluZyhzYiwgXCYjMzQ7RXJyb3Igb3BlbmluZyByZXNpemUgaW5vZGVcJiMzNDspO1xuZnMvZXh0NC9yZXNpemUuYy0yMDg3LVx0XHRcdHJldHVybiBQVFJfRVJSKHJlc2l6ZV9pbm9kZSk7XG4tLVxuZnMvZXh0NC9yZXNpemUuYy0yMDkxLVx0aWYgKCghcmVzaXplX2lub2RlIFx1MDAyNlx1MDAyNiAhbWV0YV9iZyBcdTAwMjZcdTAwMjYgbl9kZXNjX2Jsb2NrcyBcdTAwM2Ugb19kZXNjX2Jsb2NrcykgfHwgbl9ibG9ja3NfY291bnQgPT0gb19ibG9ja3NfY291bnQpIHtcbmZzL2V4dDQvcmVzaXplLmM6MjA5MjpcdFx0ZXJyID0gZXh0NF9jb252ZXJ0X21ldGFfYmcoc2IsIHJlc2l6ZV9pbm9kZSk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTIwOTMtXHRcdGlmIChlcnIpXG4tLVxuZnMvZXh0NC9yZXNpemUuYy0yMTY2LVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9yZXNpemUuYzoyMTY3Olx0XHRlcnIgPSBleHQ0X2ZsZXhfZ3JvdXBfYWRkKHNiLCByZXNpemVfaW5vZGUsIGZsZXhfZ2QpO1xuZnMvZXh0NC9yZXNpemUuYy0yMTY4LVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTIxOTEtXHRcdFx0ICAgICBcJiMzNDtmaWxlIHN5c3RlbSByZXNpemVcJiMzNDssIGVycik7XG5mcy9leHQ0L3Jlc2l6ZS5jOjIxOTI6XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcJiMzNDtyZXNpemVkIGZpbGVzeXN0ZW0gdG8gJWxsdVwmIzM0OyxcbmZzL2V4dDQvcmVzaXplLmMtMjE5My1cdFx0IGV4dDRfYmxvY2tzX2NvdW50KGVzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTE5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIEZvY3VzIGZvciBJbXByb3ZlZCBUZXN0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB3ZSYjMzk7cmUgZGVmaW5pbmcgdGhlIGZvY3VzIGZvciBvdXIga2VybmVsIHN5bWJvbCBhbmFseXNpcy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gZ2V0IHRoZSBtb3N0IGluc2lnaHRmdWwgdGVzdCBkaXN0cmlidXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZnMvZmlsZS5jYC4gU3BlY2lmaWNhbGx5LCBgZmRfaW5zdGFsbGAg4oCTIGl0JiMzOTtzIGEgKnNlcmlvdXNseSogaG90IGZ1bmN0aW9uLiBDYWxsZWQgZXZlcnkgdGltZSB3ZSBkbyBhIGZpbGUgZGVzY3JpcHRvciBhY3Rpb24uIFRoaXMgc2NyZWFtcyAmIzM0O2dlbmVyaWMgaG90IHBhdGgmIzM0OyBhbmQgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHdlIHdhbnQgdG8gYXZvaWQgcHV0dGluZyBGb2N1c1N5bWJvbHMgb24sIGFzIGl0JiMzOTtsbCBza2V3IHRoZSBkaXN0cmlidXRpb25zIGJhZGx5LgoKUmlnaHQsIHNvIHRvIHJlbWluZCBteXNlbGYsIEkmIzM5O20gZ29pbmcgdG8gcmUtY2hlY2sgdGhlIGd1aWRlbGluZXM6ICYjMzQ7QXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFdlIHdhbnQgZ29vZCBkYXRhLiYjMzQ7IE9rYXksIHBvaW50IHRha2VuLiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsgTWFrZXMgc2Vuc2UuIFdlIG5lZWQgZGlzdGluY3QgYWRkcmVzc2VzIHRvIGFuYWx5emUgdGhlIGJlaGF2aW9yLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBgZnMvcGlkZnMuY2AuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgbG9vayBhdCBgcGlkZmRfaW5mb2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2FsbGluZyBgcGlkZmRfaW5mb2Agb3IgcGlkZnMgaW9jdGwsIHNvIEkga25vdyB3aGVyZSB0aGUgc3ltYm9sIGxhbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaWRmZF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9waWRmcy5jPTMzOT1zdGF0aWMgX191MzIgcGlkZnNfY29yZWR1bXBfbWFzayhlbnVtIHRhc2tfZHVtcGFibGUgZHVtcGFibGUpXG4tLVxuZnMvcGlkZnMuYy0zNjQtXG5mcy9waWRmcy5jOjM2NTpzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL3BpZGZzLmMtMzY2LXtcbmZzL3BpZGZzLmM6MzY3Olx0c3RydWN0IHBpZGZkX2luZm8gX191c2VyICp1aW5mbyA9IChzdHJ1Y3QgcGlkZmRfaW5mbyBfX3VzZXIgKilhcmc7XG5mcy9waWRmcy5jLTM2OC1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayBfX2ZyZWUocHV0X3Rhc2spID0gTlVMTDtcbi0tXG5mcy9waWRmcy5jLTM3MC1cdHNpemVfdCB1c2l6ZSA9IF9JT0NfU0laRShjbWQpO1xuZnMvcGlkZnMuYzozNzE6XHRzdHJ1Y3QgcGlkZmRfaW5mbyBraW5mbyA9IHt9O1xuZnMvcGlkZnMuYy0zNzItXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG4tLVxuZnMvcGlkZnMuYy0zNzYtXG5mcy9waWRmcy5jOjM3NzpcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHBpZGZkX2luZm8pICE9IFBJREZEX0lORk9fU0laRV9WRVIzKTtcbmZzL3BpZGZzLmMtMzc4LVxuLS1cbmZzL3BpZGZzLmM9NTI4PXN0YXRpYyBsb25nIHBpZGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9waWRmcy5jLTU0Ny1cdGlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihQSURGRF9HRVRfSU5GTykpXG5mcy9waWRmcy5jOjU0ODpcdFx0cmV0dXJuIHBpZGZkX2luZm8oZmlsZSwgY21kLCBhcmcpO1xuZnMvcGlkZnMuYy01NDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdXNlciBuYW1lc3BhY2UgbWFwcGluZyBwcm9jZXNzLCBzbyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBsb29rIGlzIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwcm9jZXNzIGZpbGVzIGZvciBVSUQsIEdJRCwgYW5kIHByb2plY3QgSUQgbWFwcGluZ3MgYXJlIHdyaXR0ZW4uIFRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGUgYG1hcF93cml0ZWAgZnVuY3Rpb24sIHNpbmNlIHRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgcHJvYyBmaWxlIHdyaXRlIG9wZXJhdGlvbnMgcmVzaWRlcy4gVGhlbiBJJiMzOTtsbCBjaGVjayBgbWFwX2lkX3JhbmdlX2Rvd25gIGFuZCBgbWFwX2lkX3JhbmdlX3VwYCwgYXMgdGhvc2UgYXJlIHByb2JhYmx5IGludm9sdmVkIGluIG1hbmlwdWxhdGluZyB0aGUgSUQgbWFwcGluZ3MgdGhlbXNlbHZlcy4gRnJvbSB0aGVyZSwgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3LCBJIHdpbGwgY2hlY2sgdGhlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgdXNlcl9uYW1lc3BhY2UuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXBfaWRfcmFuZ2VfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3VzZXJfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9MjUxPXN0YXRpYyBpbnQgY21wX21hcF9pZChjb25zdCB2b2lkICprLCBjb25zdCB2b2lkICplKVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI3Ny0vKlxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6Mjc4OiAqIG1hcF9pZF9yYW5nZV9kb3duX21heCAtIEZpbmQgaWRtYXAgdmlhIGJpbmFyeSBzZWFyY2ggaW4gb3JkZXJlZCBpZG1hcCBhcnJheS5cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI3OS0gKiBDYW4gb25seSBiZSBjYWxsZWQgaWYgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHMgVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz0yODE9c3RhdGljIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoyODI6bWFwX2lkX3JhbmdlX2Rvd25fbWF4KHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI4My17XG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMjk0LS8qXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoyOTU6ICogbWFwX2lkX3JhbmdlX2Rvd25fYmFzZSAtIEZpbmQgaWRtYXAgdmlhIGJpbmFyeSBzZWFyY2ggaW4gc3RhdGljIGV4dGVudCBhcnJheS5cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI5Ni0gKiBDYW4gb25seSBiZSBjYWxsZWQgaWYgbnVtYmVyIG9mIG1hcHBpbmdzIGlzIGVxdWFsIG9yIGxlc3MgdGhhblxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTI5OT1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjMwMDptYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMwMS17XG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzE3LVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MzE4OnN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzE5LXtcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zMjQtXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozMjU6XHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzI2LVx0ZWxzZVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MzI3Olx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9tYXgoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzI4LVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTMzOD11MzIgbWFwX2lkX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMzOS17XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozNDA6XHRyZXR1cm4gbWFwX2lkX3JhbmdlX2Rvd24obWFwLCBpZCwgMSk7XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zNDEtfVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTM0OD1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjM0OTptYXBfaWRfcmFuZ2VfdXBfYmFzZSh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zNTAte1xuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTM3MT1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjM3MjptYXBfaWRfcmFuZ2VfdXBfbWF4KHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM3My17XG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzgzLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6Mzg0OnUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzg1LXtcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zOTAtXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozOTE6XHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM5Mi1cdGVsc2Vcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjM5MzpcdFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX3VwX21heChleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zOTQtXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9NDA0PXUzMiBtYXBfaWRfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTQwNS17XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo0MDY6XHRyZXR1cm4gbWFwX2lkX3JhbmdlX3VwKG1hcCwgaWQsIDEpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNDA3LX1cbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz05MzI9c3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTEwNzMtXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoxMDc0Olx0XHRsb3dlcl9maXJzdCA9IG1hcF9pZF9yYW5nZV9kb3duKHBhcmVudF9tYXAsXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMDc1LVx0XHRcdFx0XHRcdGUtXHUwMDNlbG93ZXJfZmlyc3QsXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTEwMi1cdH1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjExMDM6XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTExMDQtXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZtYXAtXHUwMDNlbnJfZXh0ZW50cywgbmV3X21hcC5ucl9leHRlbnRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlbGV2YW50IEtlcm5lbCBGaWxlcyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGZzL2Fpby5jYCBlbnRyeXBvaW50cyDigJMgc3BlY2lmaWNhbGx5IGBzeXNfaW9fZ2V0ZXZlbnRzYCwgYHN5c19pb19wZ2V0ZXZlbnRzYCwgYW5kIGBpb19zdWJtaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAsIEkgc2hvdWxkIHZlcmlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBpcyBlbmFibGVkIGFuZCBkaXNhYmxlZC4KCkhlcmUmIzM5O3MgbXkgY2hlY2tsaXN0OgoKMS4gIGBmcy9haW8uY2Ag4oCTIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgQUlPYC4gTWFrZXMgc2Vuc2UuCjIuICBgZnMvZXh0NC9gIOKAkyBgRVhUNF9GU2AsIG9mIGNvdXJzZS4gU3RhbmRhcmQuCjMuICBgZnMvcGlkZnMuY2Ag4oCTIFRoaXMgb25lIHJlcXVpcmVzIGEgY2hlY2suIElzIHRoaXMgYnVpbHQtaW4gb3IgY29uZGl0aW9uYWw/IEkmIzM5O2xsIGxvb2sgYXQgYGZzL01ha2VmaWxlYCB0byBjb25maXJtLgo0LiAgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCDigJMgVGhpcyB1c2VzIHRoZSBgVVNFUl9OU2AgY29uZmlndXJhdGlvbiBvcHRpb24uCjUuICBgZnMvbW50X2lkbWFwcGluZy5jYCDigJMgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGZzL01ha2VmaWxlYCBhZ2FpbiBmb3IgdGhpcyBvbmUuCjYuICBgbGliL3ZzcHJpbnRmLmNgIOKAkyBUaGlzIGlzIGNvcmUsIGFsd2F5cyBidWlsdC1pbiwgbm8gY29uZmlndXJhdGlvbi4KCk5vdywgSSYjMzk7bGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBmcy9NYWtlZmlsZWAgYW5kIGBmcy9LY29uZmlnYCwgYW5kLCBmb3IgZ29vZCBtZWFzdXJlLCBJJiMzOTtsbCBpbmNsdWRlIGBpbml0L0tjb25maWdgIGluIG15IHJldmlldy4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGNvbmRpdGlvbmFsIGJ1aWxkIGFzcGVjdHMuIFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gZm9yIHByb3BlciBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoYWlvfHBpZGZzfG1udF9pZG1hcHBpbmd8ZXh0NCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuLS1cbmZzL01ha2VmaWxlLTE3LVx0XHRmc19kaXJlbnQubyBmc19jb250ZXh0Lm8gZnNfcGFyc2VyLm8gZnNvcGVuLm8gaW5pdC5vIFxcXG5mcy9NYWtlZmlsZToxODpcdFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcbmZzL01ha2VmaWxlLTE5LVx0XHRmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm9cbi0tXG5mcy9NYWtlZmlsZT0yOT1vYmotJChDT05GSUdfRVZFTlRGRClcdFx0JiM0Mzs9IGV2ZW50ZmQub1xuZnMvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX0FJTykgICAgICAgICAgICAgICAmIzQzOz0gYWlvLm9cbmZzL01ha2VmaWxlLTMxLW9iai0kKENPTkZJR19GU19EQVgpXHRcdCYjNDM7PSBkYXgub1xuLS1cbmZzL01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19ORVRGU19TVVBQT1JUKVx0JiM0Mzs9IG5ldGZzL1xuZnMvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0VYVDRfRlMpXHRcdCYjNDM7PSBleHQ0L1xuZnMvTWFrZWZpbGU6NjY6IyBXZSBwbGFjZSBleHQ0IGJlZm9yZSBleHQyIHNvIHRoYXQgY2xlYW4gZXh0MyByb290IGZzJiMzOTtzIGRvIE5PVCBtb3VudCB1c2luZyB0aGVcbmZzL01ha2VmaWxlLTY3LSMgZXh0MiBkcml2ZXIsIHdoaWNoIGRvZXNuJiMzOTt0IGtub3cgYWJvdXQgam91cm5hbGxpbmchICBFeHBsaWNpdGx5IHJlcXVlc3QgZXh0MlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI3OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBVc2VyIE5hbWVzcGFjZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlciBuYW1lc3BhY2VzIGFyZSBoYW5kbGVkIGluIHRoaXMgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgaXMgaW50ZWdyYXRlZC4gU28sIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IHdvdWxkIGJlIGVpdGhlciBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgIGl0c2VsZiwgdG8gc2VlIHRoZSBkaXJlY3QgY29kZSBpbnZvbHZlZCwgb3IgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIGxpa2VseSBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyB0aGVyZS4gVGhlIG1vc3QgcHJvYmFibGUgZmlsZXMgd291bGQgYmUgd2l0aGluIGVpdGhlciBgaW5pdC9LY29uZmlnYCAoZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMpIG9yIGBrZXJuZWwvTWFrZWZpbGVgIChmb3IgaG93IHRoZSBjb21waWxhdGlvbiB1bml0cyBhcmUgYnJvdWdodCB0b2dldGhlcikuIExldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX25hbWVzcGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvTWFrZWZpbGU9OTE9b2JqLSQoQ09ORklHX1VUU19OUykgJiM0Mzs9IHV0c25hbWUub1xua2VybmVsL01ha2VmaWxlOjkyOm9iai0kKENPTkZJR19VU0VSX05TKSAmIzQzOz0gdXNlcl9uYW1lc3BhY2Uub1xua2VybmVsL01ha2VmaWxlLTkzLW9iai0kKENPTkZJR19QSURfTlMpICYjNDM7PSBwaWRfbmFtZXNwYWNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgQUlPIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgQXN5bmNocm9ub3VzIEkvTyAoYEFJT2ApLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBrZXkgdG8gdGhpcyBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaW5pdC9LY29uZmlnYCBhbmQgYGZzL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gaXQgY29tZXMgdG8gZmVhdHVyZSBlbmFibGVtZW50IGFuZCBtb2R1bGUgY29tcGlsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIHRvIGVpdGhlciBmaW5kIGl0IGRpcmVjdGx5IG9yIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgdGhhdCBwb2ludCBtZSB0byBpdHMgbG9jYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5lYXJ0aC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBkaXJlY3QgZGVmaW5pdGlvbiBvZiB0aGUgYEFJT2Agb3B0aW9uIG9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBjb250cm9scyBpdHMgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSU9cXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5NDE9Y29uZmlnIFNITUVNXG4tLVxuaW5pdC9LY29uZmlnLTE5NTEtXG5pbml0L0tjb25maWc6MTk1Mjpjb25maWcgQUlPXG5pbml0L0tjb25maWctMTk1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFJTyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gdGV4dDoKCioqQ2hlY2tpbmcgdGhlIGV4dDQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBleHQ0YCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgd2hpY2ggbWVhbnMgSSBzaG91bGQgc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgQ09ORklHX0VYVDRfRlNgLiBJIGtub3cgd2hlcmUgdGhhdCYjMzk7cyBsb2NhdGVkLCBzbyBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgZmlyc3Qgc3RlcCB3aGVuIGRlYnVnZ2luZyBvciBjdXN0b21pemluZyB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0LCBzbyBpdCYjMzk7cyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgbmFtZXNwYWNlIHN0dWZmIGlzIGJlaW5nIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0LCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbml0L0tjb25maWdgIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBgVVNFUl9OU2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgdmFsdWUgb3IgcG9zc2libGUgY2hvaWNlcyBtaWdodCBiZS4gSG9wZWZ1bGx5LCB0aGUgY29tbWVudHMgYXJvdW5kIGl0IHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkZXNpZ24gZGVjaXNpb25zIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGlmIGl0JiMzOTtzIGRpc2FibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2YgYFVTRVJfTlNgIGFuZCBpdHMgYXNzb2NpYXRlZCBvcHRpb25zIGlzIHRoZSBmb3VuZGF0aW9uIGZvciBkZXRlcm1pbmluZyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBiZWhhdmlvciBvZiB1c2VyIG5hbWVzcGFjZXMgd2l0aGluIHRoaXMgc3lzdGVtLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkmIzM5O3JlIGJlaW5nIG1hbmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSX05TXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNDM4PWNvbmZpZyBJUENfTlNcbi0tXG5pbml0L0tjb25maWctMTQ0NS1cbmluaXQvS2NvbmZpZzoxNDQ2OmNvbmZpZyBVU0VSX05TXG5pbml0L0tjb25maWctMTQ0Ny1cdGJvb2wgXCYjMzQ7VXNlciBuYW1lc3BhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uCgoqKkluc3BlY3RpbmcgdGhlIGBwaWRmcy5jYCBDb2RlKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBva2UgYXJvdW5kIGluIGBwaWRmcy5jYC4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBzZWUgaWYgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXQgcGxheS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBTbywgbGV0JiMzOTtzIG9wZW4gdXAgYGZzL3BpZGZzLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9waWRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3BpZGZzLmM9MjA5PXZvaWQgcGlkZnNfZnJlZV9waWQoc3RydWN0IHBpZCAqcGlkKVxuLS1cbmZzL3BpZGZzLmMtMjM1LVxuZnMvcGlkZnMuYzoyMzY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5mcy9waWRmcy5jLTIzNy0vKipcbi0tXG5mcy9waWRmcy5jPTI3Mj1zdGF0aWMgdm9pZCBwaWRmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxuLS1cbmZzL3BpZGZzLmMtMjg0LVxuZnMvcGlkZnMuYzoyODU6I2lmZGVmIENPTkZJR19QSURfTlNcbmZzL3BpZGZzLmMtMjg2LVx0c2VxX3B1dF9kZWNpbWFsX2xsKG0sIFwmIzM0O1xcbk5TcGlkOlxcdFwmIzM0OywgbnIpO1xuLS1cbmZzL3BpZGZzLmM9MzY1PXN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL3BpZGZzLmMtMzk3LVx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUO1xuZnMvcGlkZnMuYzozOTg6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5mcy9waWRmcy5jLTM5OS1cdFx0XHRraW5mby5jZ3JvdXBpZCA9IGF0dHItXHUwMDNlY2dyb3VwaWQ7XG4tLVxuZnMvcGlkZnMuYy00NTAtXG5mcy9waWRmcy5jOjQ1MTojaWZkZWYgQ09ORklHX0NHUk9VUFNcbmZzL3BpZGZzLmMtNDUyLVx0aWYgKCFraW5mby5jZ3JvdXBpZCkge1xuLS1cbmZzL3BpZGZzLmM9NTI4PXN0YXRpYyBsb25nIHBpZGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9waWRmcy5jLTU4Ny1cdGNhc2UgUElERkRfR0VUX0NHUk9VUF9OQU1FU1BBQ0U6XG5mcy9waWRmcy5jOjU4ODojaWZkZWYgQ09ORklHX0NHUk9VUFNcbmZzL3BpZGZzLmMtNTg5LVx0XHRpZiAoIW5zX3JlZl9nZXQobnNwLVx1MDAzZWNncm91cF9ucykpXG4tLVxuZnMvcGlkZnMuYy01OTQtXHRjYXNlIFBJREZEX0dFVF9JUENfTkFNRVNQQUNFOlxuZnMvcGlkZnMuYzo1OTU6I2lmZGVmIENPTkZJR19JUENfTlNcbmZzL3BpZGZzLmMtNTk2LVx0XHRpZiAoIW5zX3JlZl9nZXQobnNwLVx1MDAzZWlwY19ucykpXG4tLVxuZnMvcGlkZnMuYy02MDYtXHRjYXNlIFBJREZEX0dFVF9ORVRfTkFNRVNQQUNFOlxuZnMvcGlkZnMuYzo2MDc6I2lmZGVmIENPTkZJR19ORVRfTlNcbmZzL3BpZGZzLmMtNjA4LVx0XHRpZiAoIW5zX3JlZl9nZXQobnNwLVx1MDAzZW5ldF9ucykpXG4tLVxuZnMvcGlkZnMuYy02MTMtXHRjYXNlIFBJREZEX0dFVF9QSURfRk9SX0NISUxEUkVOX05BTUVTUEFDRTpcbmZzL3BpZGZzLmM6NjE0OiNpZmRlZiBDT05GSUdfUElEX05TXG5mcy9waWRmcy5jLTYxNS1cdFx0aWYgKCFuc19yZWZfZ2V0KG5zcC1cdTAwM2VwaWRfbnNfZm9yX2NoaWxkcmVuKSlcbi0tXG5mcy9waWRmcy5jLTYyMC1cdGNhc2UgUElERkRfR0VUX1RJTUVfTkFNRVNQQUNFOlxuZnMvcGlkZnMuYzo2MjE6I2lmZGVmIENPTkZJR19USU1FX05TXG5mcy9waWRmcy5jLTYyMi1cdFx0aWYgKCFuc19yZWZfZ2V0KG5zcC1cdTAwM2V0aW1lX25zKSlcbi0tXG5mcy9waWRmcy5jLTYyNy1cdGNhc2UgUElERkRfR0VUX1RJTUVfRk9SX0NISUxEUkVOX05BTUVTUEFDRTpcbmZzL3BpZGZzLmM6NjI4OiNpZmRlZiBDT05GSUdfVElNRV9OU1xuZnMvcGlkZnMuYy02MjktXHRcdGlmICghbnNfcmVmX2dldChuc3AtXHUwMDNldGltZV9uc19mb3JfY2hpbGRyZW4pKVxuLS1cbmZzL3BpZGZzLmMtNjM0LVx0Y2FzZSBQSURGRF9HRVRfVVRTX05BTUVTUEFDRTpcbmZzL3BpZGZzLmM6NjM1OiNpZmRlZiBDT05GSUdfVVRTX05TXG5mcy9waWRmcy5jLTYzNi1cdFx0aWYgKCFuc19yZWZfZ2V0KG5zcC1cdTAwM2V1dHNfbnMpKVxuLS1cbmZzL3BpZGZzLmMtNjQyLVx0Y2FzZSBQSURGRF9HRVRfVVNFUl9OQU1FU1BBQ0U6XG5mcy9waWRmcy5jOjY0MzojaWZkZWYgQ09ORklHX1VTRVJfTlNcbmZzL3BpZGZzLmMtNjQ0LVx0XHRzY29wZWRfZ3VhcmQocmN1KSB7XG4tLVxuZnMvcGlkZnMuYy02NTMtXHRjYXNlIFBJREZEX0dFVF9QSURfTkFNRVNQQUNFOlxuZnMvcGlkZnMuYzo2NTQ6I2lmZGVmIENPTkZJR19QSURfTlNcbmZzL3BpZGZzLmMtNjU1LVx0XHRzY29wZWRfZ3VhcmQocmN1KSB7XG4tLVxuZnMvcGlkZnMuYy02NzktXG5mcy9waWRmcy5jOjY4MDojaWZkZWYgQ09ORklHX0NPTVBBVFxuZnMvcGlkZnMuYy02ODEtc3RhdGljIGxvbmcgcGlkZmRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL3BpZGZzLmM9NzExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBpZGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9waWRmcy5jLTcxMy1cdC5wb2xsXHRcdD0gcGlkZmRfcG9sbCxcbmZzL3BpZGZzLmM6NzE0OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZnMvcGlkZnMuYy03MTUtXHQuc2hvd19mZGluZm9cdD0gcGlkZmRfc2hvd19mZGluZm8sXG4tLVxuZnMvcGlkZnMuYy03MTctXHQudW5sb2NrZWRfaW9jdGxcdD0gcGlkZmRfaW9jdGwsXG5mcy9waWRmcy5jOjcxODojaWZkZWYgQ09ORklHX0NPTVBBVFxuZnMvcGlkZnMuYy03MTktXHQuY29tcGF0X2lvY3RsXHQ9IHBpZGZkX2NvbXBhdF9pb2N0bCxcbi0tXG5mcy9waWRmcy5jPTc0Nz12b2lkIHBpZGZzX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuZnMvcGlkZnMuYy03NTAtXHRzdHJ1Y3QgcGlkZnNfYXR0ciAqYXR0cjtcbmZzL3BpZGZzLmM6NzUxOiNpZmRlZiBDT05GSUdfQ0dST1VQU1xuZnMvcGlkZnMuYy03NTItXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xuLS1cbmZzL3BpZGZzLmMtNzc5LVxuZnMvcGlkZnMuYzo3ODA6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5mcy9waWRmcy5jLTc4MS1cdHJjdV9yZWFkX2xvY2soKTtcbi0tXG5mcy9waWRmcy5jLTc5Mi1cbmZzL3BpZGZzLmM6NzkzOiNpZmRlZiBDT05GSUdfQ09SRURVTVBcbmZzL3BpZGZzLmMtNzk0LXZvaWQgcGlkZnNfY29yZWR1bXAoY29uc3Qgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNDYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIEludmVzdGlnYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBpZGVudGlmeWluZyBzb21lIHN0cm9uZyBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvbmVzIGFyZSBwcmltZSBjYW5kaWRhdGVzLiBGaXJzdCBpbnN0aW5jdDogSSBzaG91bGQgc2NydXRpbml6ZSBgRm9jdXNTeW1ib2xzYC4gQWxyaWdodCwgd2hhdCYjMzk7cyBhIGdvb2QgbGlzdCBvZiBzeW1ib2xzIHRvIGxvb2sgYXQ/IEhtbW0uLi4gbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIG1heWJlIHNvbWV0aGluZyBsaWtlIGBfX2RvX3N5c19pb19nZXRldmVudHNgLCBgX19kb19zeXNfaW9fcGdldGV2ZW50c2AsIG9yIG1heWJlIGBhaW9fcmVhZF9ldmVudHNgIGFuZCBgYWlvX2NvbXBsZXRlYC4gQnV0IGhvbGQgb24sIEkgcmVjYWxsIHRoYXQgd2Ugc2hvdWxkICpwcmVmZXIqIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIHRob3NlIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBDb21waWxlciBpbmxpbmluZyBtdWRkaWVzIHRoZSB3YXRlcnMgd2l0aCB0aG9zZSBpbnRlcm5hbCBvbmVzLCBubyBkaXN0aW5jdCBhZGRyZXNzZXMuCgpSaWdodCwgU1lTQ0FMTF9ERUZJTkUgY3JlYXRlcyB0aGluZ3MgbGlrZSBgX19kb19zeXNfaW9fZ2V0ZXZlbnRzYCBhbmQgYF9feDY0X3N5c19pb19nZXRldmVudHNgIGFuZCBzdWNoLiBPa2F5LCBJJiMzOTttIGdldHRpbmcgYSBoYW5kbGUgb24gaXQuIE9yLCB0aGlua2luZyBvdXRzaWRlIHRoYXQgYm94LCBtYXliZSBzdHVmZiBsaWtlIGBleHQ0X3Jlc2l6ZV9mc2AsIG9yIHBlcmhhcHMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGxpa2UgYGV4dDRfZ3JvdXBfYWRkYCwgYGV4dDRfZ3JvdXBfZXh0ZW5kYCwgc29tZSBvZiB0aGUgYG1hcF9pZF9yYW5nZV9gIHN0dWZmIGluIGB1c2VyX25hbWVzcGFjZS5jYCBzdWNoIGFzIGBtYXBfaWRfcmFuZ2VfdXBgLCBgbWFwX2lkX3JhbmdlX2Rvd25gLCBvciBwZXJoYXBzIGV2ZW4gc29tZXRoaW5nIGluIHRoZSBtb3VudCBJRCBtYXBwaW5nLCBzdWNoIGFzIGBjb3B5X21udF9pZG1hcGAuCgpPa2F5LCBuZXh0IHN0ZXA6IGxldCBtZSByZS1ldmFsdWF0ZSBiYXNlZCBvbiB0aGUgbm9uLXN0YXRpYyBjcml0ZXJpb24uIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBgZnMvZXh0NC9yZXNpemUuY2A6IEkgc2VlIGBleHQ0X3Jlc2l6ZV9mc2AsIGBleHQ0X2dyb3VwX2FkZGAsIGFuZCBgZXh0NF9ncm91cF9leHRlbmRgLiBJbiBgZnMvZXh0NC9iYWxsb2MuY2AsIEkgaGF2ZSBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AuIFRoZSBlYXJsaWVyIGBmcy9haW8uY2AgaGFzIGBfX2RvX3N5c19pb19nZXRldmVudHNgIGFuZCBgX19kb19zeXNfaW9fcGdldGV2ZW50c2AuIEZyb20gYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCwgSSBzZWUgYG1hcF9pZF9yYW5nZV91cGAgYW5kIGBtYXBfaWRfcmFuZ2VfZG93bmAuIEZyb20gYGZzL3BpZGZzLmNgIEkgc2VlIGBwaWRmZF9zaG93X2ZkaW5mb2AgaXMgcHJvbWlzaW5nLCBvciBtYXliZSBmdW5jdGlvbnMgbGlrZSBgcGlkZnNfZXhpdGAgb3IgYHBpZGZzX2NvcmVkdW1wYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBmcy9waWRmcy5jYCBmaWxlIGFuZCBzZWUgd2hhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3ZSBoYXZlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGxvbmd8c3RydWN0KSBbYS16MC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3BpZGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYz00MT1zdGF0aWMgc3RydWN0IHNpbXBsZV94YXR0cl9jYWNoZSBwaWRmc194YV9jYWNoZTtcbmZzL3BpZGZzLmMtNDItXG5mcy9waWRmcy5jOjQzOnZvaWQgcGlkZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpXG5mcy9waWRmcy5jLTQ0LXtcbi0tXG5mcy9waWRmcy5jPTE1Mz1zdGF0aWMgdTY0IHBpZGZzX2FsbG9jX2lubyh2b2lkKVxuLS1cbmZzL3BpZGZzLmMtMTY2LVxuZnMvcGlkZnMuYzoxNjc6dm9pZCBwaWRmc19wcmVwYXJlX3BpZChzdHJ1Y3QgcGlkICpwaWQpXG5mcy9waWRmcy5jLTE2OC17XG4tLVxuZnMvcGlkZnMuYy0xNzMtXG5mcy9waWRmcy5jOjE3NDppbnQgcGlkZnNfYWRkX3BpZChzdHJ1Y3QgcGlkICpwaWQpXG5mcy9waWRmcy5jLTE3NS17XG4tLVxuZnMvcGlkZnMuYy0xODUtXG5mcy9waWRmcy5jOjE4Njp2b2lkIHBpZGZzX3JlbW92ZV9waWQoc3RydWN0IHBpZCAqcGlkKVxuZnMvcGlkZnMuYy0xODcte1xuLS1cbmZzL3BpZGZzLmM9MjA3PXN0YXRpYyBERUNMQVJFX1dPUksocGlkZnNfZnJlZV93b3JrLCBwaWRmc19mcmVlX2F0dHJfd29yayk7XG5mcy9waWRmcy5jLTIwOC1cbmZzL3BpZGZzLmM6MjA5OnZvaWQgcGlkZnNfZnJlZV9waWQoc3RydWN0IHBpZCAqcGlkKVxuZnMvcGlkZnMuYy0yMTAte1xuLS1cbmZzL3BpZGZzLmM9NzIzPXN0cnVjdCBwaWQgKnBpZGZkX3BpZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9waWRmcy5jLTc0Ni0gKi9cbmZzL3BpZGZzLmM6NzQ3OnZvaWQgcGlkZnNfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmZzL3BpZGZzLmMtNzQ4LXtcbi0tXG5mcy9waWRmcy5jLTc5My0jaWZkZWYgQ09ORklHX0NPUkVEVU1QXG5mcy9waWRmcy5jOjc5NDp2b2lkIHBpZGZzX2NvcmVkdW1wKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG5mcy9waWRmcy5jLTc5NS17XG4tLVxuZnMvcGlkZnMuYz0xMDIwPXN0YXRpYyB2b2lkIHBpZGZzX3B1dF9kYXRhKHZvaWQgKmRhdGEpXG4tLVxuZnMvcGlkZnMuYy0xMDM1LSAqL1xuZnMvcGlkZnMuYzoxMDM2OmludCBwaWRmc19yZWdpc3Rlcl9waWRfZ2ZwKHN0cnVjdCBwaWQgKnBpZCwgZ2ZwX3QgZ2ZwKVxuZnMvcGlkZnMuYy0xMDM3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1ODkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXIuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgc29tZSBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AgaW4gYGZzL2V4dDQvYmFsbG9jLmNgLiBBaCwgZ29vZCwgaXQmIzM5O3Mgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGZpbGUuIE1ha2VzIGl0IGVhc2llciB0byB0cmFjZSBpdHMgdXNhZ2UuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IGBleHQ0X3Jlc2l6ZV9mc2AsIGBleHQ0X2dyb3VwX2FkZGAsIGFuZCBgZXh0NF9ncm91cF9leHRlbmRgLiBUaG9zZSBiZWluZyBub24tc3RhdGljIGFyZSBhbHNvIGhlbHBmdWwuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBhdCBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgLCBzcGVjaWZpY2FsbHkgYG1hcF9pZF9yYW5nZV91cGAsIGBtYXBfaWRfcmFuZ2VfZG93bmAsIGBtYXBfaWRfdXBgLCBhbmQgYG1hcF9pZF9kb3duYC4gSW1wb3J0YW50IHRvIGtub3cgaG93IHRoZXNlIGFyZSBleHBvc2VkLiBNb3Zpbmcgb24gdG8gYGZzL3BpZGZzLmNgLCBjaGVja2luZyBgcGlkZnNfZXhpdGAgYW5kIGBwaWRmc19jb3JlZHVtcGAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgaW1wbGVtZW50ZWQgYW5kIGlmIHRoZXkgYXJlIHB1YmxpYy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBzaWRlIG9mIHRoaW5ncy4gSSYjMzk7bSBnb2luZyB0byBqb3QgZG93biB0aGUga2V5IGNvbmZpZ3MgdGhhdCBzZWVtIHJlbGV2YW50OiBgQUlPYCwgYEVYVDRfRlNgLCBgVVNFUl9OU2AsIGBQSURfTlNgIChlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHBpZGZzIG5hbWVzcGFjZSBpb2N0bHMgYW5kIGF0dHJpYnV0ZXMpLCBhbmQgYENHUk9VUFNgIChmb3IgcGlkZnMgY2dyb3VwIGluZm9ybWF0aW9uKS4KCk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdGhhdCBJJiMzOTttIG1pc3NpbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYEVYVDRfRlNgLCBgVVNFUl9OU2AsIG9yIGBBSU9gLiBJJiMzOTtsbCBzdGFydCBieSByZWFkaW5nIHRocm91Z2ggYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRVhUNF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IEpCRDJcbiAgIDY6XHRcdHNlbGVjdCBDUkMxNlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDk6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxuICAxNDpcdFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXG4gIDE1Olx0XHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcbiAgMTY6XHRcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXG4gIDE3Olx0XHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxuICAxODpcdFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcbiAgMTk6XHRcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxuICAyMDpcdFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxuICAyMzpcdFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXG4gIDI0Olx0XHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XG4gIDI1Olx0XHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcbiAgMjY6XHRcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXG4gIDI3Olx0XHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXG4gIDI4Olx0XHQgIGNvbXBhdGlibGUuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcbiAgMzE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4gIDM2Olx0XHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDM4Olx0XHRkZXBlbmRzIG9uIEVYVDJfRlM9blxuICAzOTpcdFx0ZGVmYXVsdCB5XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTA4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHVzZXIgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb24gKGBVU0VSX05TYCkgaXMgcHJvcGVybHkgc2V0IHVwIGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlIChgaW5pdC9LY29uZmlnYCkuIFRoYXQmIzM5O3MgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJIHdhbnQgdG8gdmVyaWZ5IGlmIGl0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gc29tZSBvdGhlciB2YWx1ZSDigJMgbGlrZWx5IGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHN5c3RlbSBhbmQgc2VjdXJpdHkgcmVxdWlyZW1lbnRzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaGFuZGxlZCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyB0aGUgYWJpbGl0eSB0byB1dGlsaXplIHVzZXIgbmFtZXNwYWNlcywgd2hpY2ggaXMgZm91bmRhdGlvbmFsIHRvIGEgbG90IG9mIGNvbnRhaW5lcml6YXRpb24gYW5kIHNlY3VyaXR5IHRlY2hub2xvZ2llcyBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCwgYW5kIEkgZXhwZWN0IEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaG93IGBVU0VSX05TYCBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSBpcyBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0NTpcdFxuMTQ0NjpcdGNvbmZpZyBVU0VSX05TXG4xNDQ3Olx0XHRib29sIFwmIzM0O1VzZXIgbmFtZXNwYWNlXCYjMzQ7XG4xNDQ4Olx0XHRkZWZhdWx0IG5cbjE0NDk6XHRcdGhlbHBcbjE0NTA6XHRcdCAgVGhpcyBhbGxvd3MgY29udGFpbmVycywgaS5lLiB2c2VydmVycywgdG8gdXNlIHVzZXIgbmFtZXNwYWNlc1xuMTQ1MTpcdFx0ICB0byBwcm92aWRlIGRpZmZlcmVudCB1c2VyIGluZm8gZm9yIGRpZmZlcmVudCBzZXJ2ZXJzLlxuMTQ1MjpcdFxuMTQ1MzpcdFx0ICBXaGVuIHVzZXIgbmFtZXNwYWNlcyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGl0IGlzXG4xNDU0Olx0XHQgIHJlY29tbWVuZGVkIHRoYXQgdGhlIE1FTUNHIG9wdGlvbiBhbHNvIGJlIGVuYWJsZWQgYW5kIHRoYXRcbjE0NTU6XHRcdCAgdXNlci1zcGFjZSB1c2UgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwcyB0byBsaW1pdCB0aGUgYW1vdW50XG4xNDU2Olx0XHQgIG9mIG1lbW9yeSBhIG1lbW9yeSB1bnByaXZpbGVnZWQgdXNlcnMgY2FuIHVzZS5cbjE0NTc6XHRcbjE0NTg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE0NTk6XHRcbjE0NjA6XHRjb25maWcgUElEX05TXG4xNDYxOlx0XHRib29sIFwmIzM0O1BJRCBOYW1lc3BhY2VzXCYjMzQ7XG4xNDYyOlx0XHRkZWZhdWx0IHlcbjE0NjM6XHRcdGhlbHBcbjE0NjQ6XHRcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgYEFJT2AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBBSU9gIOKAkyBBc3luY2hyb25vdXMgSS9PIOKAkyBpcyBwcm9wZXJseSBjb25maWd1cmVkLiBJdCYjMzk7cyBjcnVjaWFsLCBzbyBJIG5lZWQgdG8gZ28gaW4gYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoaW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG9wdGlvbnMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gdGhlaXIgcHJvcGVyIGRlZmF1bHRzLiBHb3R0YSBzdGF5IG9uIHRvcCBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk1MDpcdFx0ICB3aGljaCBtYXkgYmUgYXBwcm9wcmlhdGUgb24gc21hbGwgc3lzdGVtcyB3aXRob3V0IHN3YXAuXG4xOTUxOlx0XG4xOTUyOlx0Y29uZmlnIEFJT1xuMTk1MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQUlPIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTU0Olx0XHRkZWZhdWx0IHlcbjE5NTU6XHRcdGhlbHBcbjE5NTY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBQT1NJWCBhc3luY2hyb25vdXMgSS9PIHdoaWNoIG1heSBieSB1c2VkXG4xOTU3Olx0XHQgIGJ5IHNvbWUgaGlnaCBwZXJmb3JtYW5jZSB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuIERpc2FibGluZ1xuMTk1ODpcdFx0ICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay5cbjE5NTk6XHRcbjE5NjA6XHRjb25maWcgSU9fVVJJTkdcbjE5NjE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTYyOlx0XHRzZWxlY3QgSU9fV1FcbjE5NjM6XHRcdGRlZmF1bHQgeVxuMTk2NDpcdFx0aGVscFxuMTk2NTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBpb191cmluZyBpbnRlcmZhY2UsIGVuYWJsaW5nXG4xOTY2Olx0XHQgIGFwcGxpY2F0aW9ucyB0byBzdWJtaXQgYW5kIGNvbXBsZXRlIElPIHRocm91Z2ggc3VibWlzc2lvbiBhbmRcbjE5Njc6XHRcdCAgY29tcGxldGlvbiByaW5ncyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUga2VybmVsIGFuZCBhcHBsaWNhdGlvbi5cbjE5Njg6XHRcbjE5Njk6XHRjb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODM3CgkJCQkJCQlvdXRwdXQ6IDI0NwoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipSZWZpbmluZyB0aGUgU3RyYXRlZ3kgQmVmb3JlIERlbGl2ZXJ5KioKCk9rYXksIGJlZm9yZSBJIGNvbW1pdCB0byBhIGZpbmFsIGNvbmNsdXNpb24sIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgdmVyaWZ5IGV2ZXJ5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHBvdGVudGlhbCBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIGltcGFjdGluZyBtZW1vcnkgYmFycmllciBiZWhhdmlvcnMgYW5kIGNvbmN1cnJlbmN5IG1lY2hhbmlzbXMuIFRoaXMgaXMgdG91Y2hpbmcgY3J1Y2lhbCBhcmVhcyBhY3Jvc3MgdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUyksIGV4dDQgZmlsZXN5c3RlbSwgQXN5bmNocm9ub3VzIEkvTyAoQUlPKSwgdGhlIHByb2Nlc3MgSUQgZmlsZXN5c3RlbSAocGlkZnMpLCBhbmQgdXNlciBuYW1lc3BhY2VzLiBUaGUgKldvcnRoRnV6emluZyogZmxhZyBiZWluZyBzZXQgdG8gKnRydWUqIGluZGljYXRlcyB0aGVzZSBhcmUgYXJlYXMgcmlwZSBmb3IgbW9yZSByaWdvcm91cyBleGFtaW5hdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIGxvdy1sZXZlbCBrZXJuZWwgY29tcG9uZW50cy4KCk15IGZvY3VzIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBzeW1ib2xzIHdpdGhpbiB0aGF0IHNjb3BlOiBgZXh0NF9yZXNpemVfZnNgLCBgZXh0NF9ncm91cF9hZGRgLCBgZXh0NF9ncm91cF9leHRlbmRgLCBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AsIGBtYXBfaWRfcmFuZ2VfdXBgLCBgbWFwX2lkX3JhbmdlX2Rvd25gLCBgcGlkZnNfZXhpdGAsIGFuZCBgcGlkZnNfY29yZWR1bXBgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBlbnRyeSBwb2ludHMgdG8gdGhlIG1vZGlmaWVkIG9yIG5ld2x5IGludHJvZHVjZWQgY29kZSB3aXRoaW4gdGhvc2Ugc3Vic3lzdGVtcywgb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb3N0IGxpa2VseSB0byBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLCBhbmQgdGhlcmVmb3JlIG5lZWQgZnVydGhlciBzY3J1dGlueS4KCkkmIzM5O2xsIGFsc28gaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uIFRoYXQgbWVhbnMgY29uZmlybWluZyB0aGUgZm9sbG93aW5nIGFyZSBwcmVzZW50IGFuZCBhY3RpdmU6IGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgQUlPYCwgYFBJRF9OU2AsIGFuZCBgQ0dST1VQU2AuCgpXaXRoIGFsbCB0aGF0IGRvbmUsIGl0JiMzOTtzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O0FJTyYjMzQ7LAogICAgJiMzNDtQSURfTlMmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfcmVzaXplX2ZzJiMzNDssCiAgICAmIzM0O2V4dDRfZ3JvdXBfYWRkJiMzNDssCiAgICAmIzM0O2V4dDRfZ3JvdXBfZXh0ZW5kJiMzNDssCiAgICAmIzM0O2V4dDRfZ2V0X2dyb3VwX2luZm8mIzM0OywKICAgICYjMzQ7bWFwX2lkX3JhbmdlX3VwJiMzNDssCiAgICAmIzM0O21hcF9pZF9yYW5nZV9kb3duJiMzNDssCiAgICAmIzM0O3BpZGZzX2V4aXQmIzM0OywKICAgICYjMzQ7cGlkZnNfY29yZWR1bXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kZXJuaXplcyBhbmQgYWRqdXN0cyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYWNyb3NzIGNvcmUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGNvbXBvbmVudHMgKEFJTyByaW5nIGJ1ZmZlcnMsIGV4dDQgcmVzaXppbmcgYW5kIGdyb3VwIGFsbG9jYXRpb24sIGZkIGluc3RhbGxhdGlvbi9leHBhbnNpb24sIHBpZGZzIGF0dHJpYnV0ZSByZXRyaWV2YWwsIGFuZCB1c2VyIG5hbWVzcGFjZSBpZCBtYXBwaW5nKSBieSBjb252ZXJ0aW5nIGV4cGxpY2l0IHNtcF9ybWIvc21wX3dtYiBwYWlycyBpbnRvIGFjcXVpcmUvcmVsZWFzZSBtZW1vcnkgb3JkZXJzIChlLmcuIHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFRoZXNlIGFyZSByZWFjaGFibGUgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtBSU8mIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtleHQ0X2dyb3VwX2FkZCYjMzQ7LAogICAgJiMzNDtleHQ0X2dyb3VwX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtleHQ0X2dldF9ncm91cF9pbmZvJiMzNDssCiAgICAmIzM0O21hcF9pZF9yYW5nZV91cCYjMzQ7LAogICAgJiMzNDttYXBfaWRfcmFuZ2VfZG93biYjMzQ7LAogICAgJiMzNDtwaWRmc19leGl0JiMzNDssCiAgICAmIzM0O3BpZGZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGVybml6ZXMgYW5kIGFkanVzdHMgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGFjcm9zcyBjb3JlIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBjb21wb25lbnRzIChBSU8gcmluZyBidWZmZXJzLCBleHQ0IHJlc2l6aW5nIGFuZCBncm91cCBhbGxvY2F0aW9uLCBmZCBpbnN0YWxsYXRpb24vZXhwYW5zaW9uLCBwaWRmcyBhdHRyaWJ1dGUgcmV0cmlldmFsLCBhbmQgdXNlciBuYW1lc3BhY2UgaWQgbWFwcGluZykgYnkgY29udmVydGluZyBleHBsaWNpdCBzbXBfcm1iL3NtcF93bWIgcGFpcnMgaW50byBhY3F1aXJlL3JlbGVhc2UgbWVtb3J5IG9yZGVycyAoZS5nLiBzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc3luY2hyb25pemF0aW9uIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgb3JkZXJpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBvciBhbHRlciBob3cgYnVmZmVycyBhcmUgaW5pdGlhbGl6ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCByZW1haW4gZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzBlZDQ5YmUxZmFmMzkzY2Y5YmMyOWZjZmNkNzFjMjBiODY3MjY5NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMjE6MjM6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IGQ3OGFjYzY5ZjQ4NzAuLmEwMjc5ZTA1OWU5NzIgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fpby5jCkBAIC0xMjA2LDEzICYjNDM7MTIwNiwxMiBAQCBzdGF0aWMgdm9pZCBhaW9fY29tcGxldGUoc3RydWN0IGFpb19raW9jYiAqaW9jYikKIAkvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZQogCSAqIG11c3QgbmV2ZXIgZXZlbiBsb29rIGF0IGl0IGFnYWluCiAJICovCi0Jc21wX3dtYigpOwkvKiBtYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi8KLQogCWN0eC0mZ3Q7dGFpbCA9IHRhaWw7CiAKIAlyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAloZWFkID0gcmluZy0mZ3Q7aGVhZDsKLQlyaW5nLSZndDt0YWlsID0gdGFpbDsKJiM0MzsJLyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7cmluZy0mZ3Q7dGFpbCwgdGFpbCk7CiAJZmx1c2hfZGNhY2hlX2ZvbGlvKGN0eC0mZ3Q7cmluZ19mb2xpb3NbMF0pOwogCiAJY3R4LSZndDtjb21wbGV0ZWRfZXZlbnRzJiM0MzsmIzQzOzsKQEAgLTEyODgsMTMgJiM0MzsxMjg3LDEyIEBAIHN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwKIAkvKiBBY2Nlc3MgdG8gLSZndDtyaW5nX2ZvbGlvcyBoZXJlIGlzIHByb3RlY3RlZCBieSBjdHgtJmd0O3JpbmdfbG9jay4gKi8KIAlyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAloZWFkID0gcmluZy0mZ3Q7aGVhZDsKLQl0YWlsID0gcmluZy0mZ3Q7dGFpbDsKLQogCS8qCiAJICogRW5zdXJlIHRoYXQgb25jZSB3ZSYjMzk7dmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXQKIAkgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuCiYjNDM7CSAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS4KIAkgKi8KLQlzbXBfcm1iKCk7CiYjNDM7CXRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cmluZy0mZ3Q7dGFpbCk7CiAKIAlwcl9kZWJ1ZygmIzM0O2gldSB0JXUgbSV1XG4mIzM0OywgaGVhZCwgdGFpbCwgY3R4LSZndDtucl9ldmVudHMpOwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2JhbGxvYy5jIGIvZnMvZXh0NC9iYWxsb2MuYwppbmRleCA1MmY0YzUxNjlmOTE0Li43NzhmZTg3ODhmMDZlIDEwMDY0NAotLS0gYS9mcy9leHQ0L2JhbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvYmFsbG9jLmMKQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZXh0NF9nZXRfZ3JvdXBfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCXN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKipncnBfaW5mbzsKIAlsb25nIGluZGV4diwgaW5kZXhoOwogCi0JaWYgKHVubGlrZWx5KGdyb3VwICZndDs9IEVYVDRfU0Ioc2IpLSZndDtzX2dyb3Vwc19jb3VudCkpCiYjNDM7CWlmICh1bmxpa2VseShncm91cCAmZ3Q7PSBleHQ0X2dldF9ncm91cHNfY291bnQoc2IpKSkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHVubGlrZWx5KCFFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cF9pbmZvKSkKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0zNTQyLDE2ICYjNDM7MzU0MiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9pc2l6ZV9zZXQoc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgbG9mZl90IGlfc2l6ZSkKIH0KIAogLyoKLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWUKLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKCkKLSAqIGluIHJlc2l6ZS5jCiYjNDM7ICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCB1c2VzIGFjcXVpcmUgc2VtYW50aWNzLgogICovCiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlleHQ0X2dyb3VwX3QJbmdyb3VwcyA9IEVYVDRfU0Ioc2IpLSZndDtzX2dyb3Vwc19jb3VudDsKLQotCXNtcF9ybWIoKTsKLQlyZXR1cm4gbmdyb3VwczsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi8KJiM0MzsJcmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2ZsZXhfZ3JvdXAoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtODk5LDEwICYjNDM7ODk5LDggQEAgc3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgKIAogCS8qIG5vbi1leHRlbnQgZmlsZXMgYXJlIGxpbWl0ZWQgdG8gbG93IGJsb2Nrcy9ncm91cHMgKi8KIAlpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhhYy0mZ3Q7YWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKQotCQluZ3JvdXBzID0gRVhUNF9TQihhYy0mZ3Q7YWNfc2IpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHM7Ci0KLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCi0Jc21wX3JtYigpOwomIzQzOwkJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi8KJiM0MzsJCW5ncm91cHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7RVhUNF9TQihhYy0mZ3Q7YWNfc2IpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMpOwogCiAJcmV0dXJuIG5ncm91cHM7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuYwppbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NAotLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvcmVzaXplLmMKQEAgLTE0NjIsMTEgJiM0MzsxNDYyLDExIEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICoKIAkgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOgogCSAqCi0JICogKiBXcml0ZXJzIG11c3QgcGVyZm9ybSBhIHNtcF93bWIoKSBhZnRlciB1cGRhdGluZyBhbGwKLQkgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnQKJiM0MzsJICogKiBXcml0ZXJzIG11c3QgdXNlIGEgcmVsZWFzZSBzdG9yZSB3aGVuIHVwZGF0aW5nIHRoZSBncm91cHMgY291bnQKJiM0MzsJICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZAogCSAqCi0JICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzCi0JICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgomIzQzOwkgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzCiYjNDM7CSAqICAgY291bnQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgogCSAqCiAJICogTkIuIFRoZXNlIHJ1bGVzIGNhbiBiZSByZWxheGVkIHdoZW4gY2hlY2tpbmcgdGhlIGdyb3VwIGNvdW50CiAJICogd2hpbGUgZnJlZWluZyBkYXRhLCBhcyB3ZSBjYW4gb25seSBhbGxvY2F0ZSBmcm9tIGEgYmxvY2sKQEAgLTE0NzQsMTIgJiM0MzsxNDc0LDE1IEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXQKIAkgKiBhbGxvY2F0aW9uLgogCSAqLwotCXNtcF93bWIoKTsKIAogCS8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovCi0Jc2JpLSZndDtzX2dyb3Vwc19jb3VudCAmIzQzOz0gZmxleF9nZC0mZ3Q7Y291bnQ7Ci0Jc2JpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLSZndDtzX2dyb3Vwc19jb3VudCwKLQkJCShFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGV4dDRfZ2V0X2dyb3Vwc19jb3VudCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c2JpLSZndDtzX2dyb3Vwc19jb3VudCwKJiM0MzsJCQkgIHNiaS0mZ3Q7c19ncm91cHNfY291bnQgJiM0MzsgZmxleF9nZC0mZ3Q7Y291bnQpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c2JpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMsCiYjNDM7CQkJICBtaW4oc2JpLSZndDtzX2dyb3Vwc19jb3VudCwKJiM0MzsJCQkgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTsKIAogCS8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzCiAJICogYWN0aXZlLiAqLwpkaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jCmluZGV4IDYyOGNhMDdkYzRiMTcuLjg2YzAzNWQ0NTlmMmEgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9maWxlLmMKQEAgLTI3Myw4ICYjNDM7MjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKQogCXJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy0mZ3Q7ZmR0LCBuZXdfZmR0KTsKIAlpZiAoY3VyX2ZkdCAhPSAmYW1wO2ZpbGVzLSZndDtmZHRhYikKIAkJY2FsbF9yY3UoJmFtcDtjdXJfZmR0LSZndDtyY3UsIGZyZWVfZmR0YWJsZV9yY3UpOwotCS8qIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZmRfaW5zdGFsbCgpICovCi0Jc21wX3dtYigpOwogCXJldHVybiAwOwogfQogCkBAIC0zMTMsNyAmIzQzOzMxMSw4IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpCiAJLyogQWxsIGdvb2QsIHNvIHdlIHRyeSAqLwogCWZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlOwogCWVycm9yID0gZXhwYW5kX2ZkdGFibGUoZmlsZXMsIG5yKTsKLQlmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7CiYjNDM7CS8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7ZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcywgZmFsc2UpOwogCiAJd2FrZV91cF9hbGwoJmFtcDtmaWxlcy0mZ3Q7cmVzaXplX3dhaXQpOwogCXJldHVybiBlcnJvcjsKQEAgLTY4NSwxMyAmIzQzOzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJcmV0dXJuOwogCiAJcmN1X3JlYWRfbG9ja19zY2hlZCgpOwotCWlmICh1bmxpa2VseShmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzKSkgewomIzQzOwkvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqLwomIzQzOwlpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZSgmYW1wO2ZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MpKSkgewogCQlyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTsKIAkJZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7CiAJCXJldHVybjsKIAl9Ci0JLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiBleHBhbmRfZmR0YWJsZSgpICovCi0Jc21wX3JtYigpOwogCWZkdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChmaWxlcy0mZ3Q7ZmR0KTsKIAlWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtJmd0O2ZkW2ZkXSkgIT0gTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGZkdC0mZ3Q7ZmRbZmRdLCBmaWxlKTsKZGlmZiAtLWdpdCBhL2ZzL21udF9pZG1hcHBpbmcuYyBiL2ZzL21udF9pZG1hcHBpbmcuYwppbmRleCBjYjYxZmJkYjUyZTkwLi42MTJiMjY2YWIzZGEwIDEwMDY0NAotLS0gYS9mcy9tbnRfaWRtYXBwaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbW50X2lkbWFwcGluZy5jCkBAIC0yMTksMTAgJiM0MzsyMTksOSBAQCBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNnaWRfaW5fZ3JvdXBfcCk7CiBzdGF0aWMgaW50IGNvcHlfbW50X2lkbWFwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX2Zyb20sCiAJCQkgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX3RvKQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXUzMiBucl9leHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcF9mcm9tLSZndDtucl9leHRlbnRzKTsKIAlzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmZvcndhcmQsICpyZXZlcnNlOwotCXUzMiBucl9leHRlbnRzID0gUkVBRF9PTkNFKG1hcF9mcm9tLSZndDtucl9leHRlbnRzKTsKLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSB3aGVuIHdyaXRpbmcgdGhlIGlkbWFwcGluZy4gKi8KLQlzbXBfcm1iKCk7CiAKIAkvKgogCSAqIERvbiYjMzk7dCBibGluZGx5IGNvcHkgQG1hcF90byBpbnRvIEBtYXBfZnJvbSBpZiBucl9leHRlbnRzIGlzCmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuYwppbmRleCBhNmE2NDNmMTVkMDhhLi4yY2QwZmFiNzMxODBlIDEwMDY0NAotLS0gYS9mcy9waWRmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpZGZzLmMKQEAgLTM5Myw4ICYjNDM7MzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAKIAlhdHRyID0gUkVBRF9PTkNFKHBpZC0mZ3Q7YXR0cik7CiAJaWYgKG1hc2sgJmFtcDsgUElERkRfSU5GT19FWElUKSB7Ci0JCWlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKLQkJCXNtcF9ybWIoKTsKJiM0MzsJCWlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewogCQkJa2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7CiAjaWZkZWYgQ09ORklHX0NHUk9VUFMKIAkJCWtpbmZvLmNncm91cGlkID0gYXR0ci0mZ3Q7Y2dyb3VwaWQ7CkBAIC00MDUsOCAmIzQzOzQwNCw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCX0KIAogCWlmIChtYXNrICZhbXA7IFBJREZEX0lORk9fQ09SRURVTVApIHsKLQkJaWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKLQkJCXNtcF9ybWIoKTsKJiM0MzsJCWlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKIAkJCWtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFOwogCQkJa2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItJmd0O2NvcmVkdW1wX21hc2s7CiAJCQlraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLSZndDtjb3JlZHVtcF9zaWduYWw7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwNWU0NDMxNzMwMzg3Li5jYWE2MTg5ZTQwNTcyIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTI2NywxMiAmIzQzOzI2NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKIAkgKiBIb3dldmVyLCBpZiB3ZSBhcmUgY3VycmVudGx5IG1vdW50aW5nIHRoZSBzdXBlcmJsb2NrLCB0aGUgdW5kZXJseWluZwogCSAqIGZpbGVzeXN0ZW0gbWlnaHQgYmUgaW4gYSBzdGF0ZSBvZiBwYXJ0aWFsIGNvbnN0cnVjdGlvbiBhbmQgaGVuY2UgaXQKIAkgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVjawotCSAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgbWVtb3J5IGJhcnJpZXIgaXMKLQkgKiBtYXRjaGVkIHdpdGggdGhlIG9uZSBpbiBtb3VudF9mcygpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuCiYjNDM7CSAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLgogCSAqLwotCWlmICghKHNiLSZndDtzX2ZsYWdzICZhbXA7IFNCX0JPUk4pKQomIzQzOwlpZiAoIXN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOKSkKIAkJcmV0dXJuIDA7Ci0Jc21wX3JtYigpOwogCiAJaWYgKHNiLSZndDtzX29wICZhbXA7JmFtcDsgc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzICZhbXA7JmFtcDsKIAkgICAgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCkBAIC0zMTcsOSAmIzQzOzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvCiAKIHN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAoZXh0ZW50cyAmbHQ7PSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKQogCQlleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTsKQEAgLTM4Myw5ICYjNDM7MzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQKIAogdTMyIG1hcF9pZF9yYW5nZV91cChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpCiB7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi8KJiM0MzsJdW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bWFwLSZndDtucl9leHRlbnRzKTsKIAlzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDsKLQl1bnNpZ25lZCBleHRlbnRzID0gbWFwLSZndDtucl9leHRlbnRzOwotCXNtcF9ybWIoKTsKIAogCWlmIChleHRlbnRzICZsdDs9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpCiAJCWV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTsKQEAgLTY3Niw5ICYjNDM7Njc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcHBvcywKIAkJICAgICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCkKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXAtJmd0O25yX2V4dGVudHMpOwogCWxvZmZfdCBwb3MgPSAqcHBvczsKLQl1bnNpZ25lZCBleHRlbnRzID0gbWFwLSZndDtucl9leHRlbnRzOwotCXNtcF9ybWIoKTsKIAogCWlmIChwb3MgJmd0Oz0gZXh0ZW50cykKIAkJcmV0dXJuIE5VTEw7CkBAIC05NjcsOSAmIzQzOzk2NywxMSBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJICogZGVzaXJlZCBiZWhhdmlvciBpcyB0byBzZWUgdGhlIHZhbHVlcyBvZiB0aGUgZXh0ZW50cyB0aGF0CiAJICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuCiAJICoKLQkgKiBUbyBhY2hpZXZlIHRoaXMgc21wX3dtYigpIGlzIHVzZWQgb24gZ3VhcmFudGVlIHRoZSB3cml0ZQotCSAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGNyYXp5Ci0JICogYXJjaGl0ZWN0dXJlcyByZXR1cm5pbmcgc3RhbGUgZGF0YS4KJiM0MzsJICogVGhlIG5yX2V4dGVudHMgZmllbGQgaXMgdGhlIHB1Ymxpc2ggcG9pbnQgZm9yIHRoZSBleHRlbnQKJiM0MzsJICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnQKJiM0MzsJICogZGF0YSBpcyB2aXNpYmxlIGJlZm9yZSBucl9leHRlbnRzIGlzIHVwZGF0ZWQuICBSZWFkZXJzIHVzZQomIzQzOwkgKiBzbXBfbG9hZF9hY3F1aXJlKCkgdG8gZW5zdXJlIHRoZXkgc2VlIGEgY29uc2lzdGVudCB2aWV3IG9mCiYjNDM7CSAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy4KIAkgKi8KIAltdXRleF9sb2NrKCZhbXA7dXNlcm5zX3N0YXRlX211dGV4KTsKIApAQCAtMTA5OCw4ICYjNDM7MTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJbWFwLSZndDtmb3J3YXJkID0gbmV3X21hcC5mb3J3YXJkOwogCQltYXAtJmd0O3JldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7CiAJfQotCXNtcF93bWIoKTsKLQltYXAtJmd0O25yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cywgbmV3X21hcC5ucl9leHRlbnRzKTsKIAogCSpwcG9zID0gY291bnQ7CiAJcmV0ID0gY291bnQ7CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IDFkOTVhYjkzMTRiZjcuLjkwZDBhNzI0ZWFkZDggMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi92c3ByaW50Zi5jCkBAIC03NjIsOSAmIzQzOzc2Miw4IEBAIHN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkCiB7CiAJZ2V0X3JhbmRvbV9ieXRlcygmYW1wO3B0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7CiAKLQkvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqLwotCXNtcF93bWIoKTsKLQlXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7ZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKQEAgLTc4MSwxMiAmIzQzOzc4MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl90b19oYXNodmFsKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyAqaGFzaHZhbF9vdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBoYXNodmFsOwogCi0JaWYgKCFSRUFEX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSkKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7ZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCS8qIFBhaXJzIHdpdGggc21wX3dtYigpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi8KLQlzbXBfcm1iKCk7Ci0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAloYXNodmFsID0gKHVuc2lnbmVkIGxvbmcpc2lwaGFzaF8xdTY0KCh1NjQpcHRyLCAmYW1wO3B0cl9rZXkpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTMxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBCYXJyaWVyIE9wdGltaXphdGlvbiBhbmQgS01TQU4gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaXMgbWFraW5nIHNvbWUgbWVtb3J5IGJhcnJpZXIgY2hhbmdlcyBhY3Jvc3MgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBpbnN0YW5jZXMgb2YgYHNtcF93bWIoKWAgYW5kIGBzbXBfcm1iKClgIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBtb3JlIG1vZGVybiBhbmQgcHJlY2lzZSBgc21wX3N0b3JlX3JlbGVhc2VgIGFuZCBgc21wX2xvYWRfYWNxdWlyZWAgcHJpbWl0aXZlcy4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgb3B0aW1pemF0aW9uLCBidXQgd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBMZXQmIzM5O3MgcmVjYXAgd2hhdCB3ZSYjMzk7cmUgc2VlaW5nOiBjaGFuZ2VzIGluIGBmcy9haW8uY2AsIGBmcy9leHQ0L2JhbGxvYy5jYCwgYGZzL2V4dDQuaGAsIGBmcy9leHQ0L21iYWxsb2MuY2AsIGBmcy9leHQ0L3Jlc2l6ZS5jYCwgYGZzL2ZpbGUuY2AsIGBmcy9tbnRfaWRtYXBwaW5nLmNgLCBgZnMvcGlkZnMuY2AsIGBmcy9zdXBlci5jYCwgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCwgYW5kIGBsaWIvdnNwcmludGYuY2AuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgZW5zdXJpbmcgbm8gcmVncmVzc2lvbnMgYXJlIGludHJvZHVjZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiAgV2UgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbCBvbiB3aGV0aGVyIHRvIHJ1biBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgc2Vzc2lvbiwgd2hpY2ggaXMgcmVzb3VyY2UgaW50ZW5zaXZlIGFuZCBzaG91bGQgb25seSBiZSBlbXBsb3llZCBpZiBuZWNlc3NhcnkuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBjcml0aWNhbCBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gaXMgb3VyIHByaW1hcnkgdG9vbCwgY2F0Y2hpbmcgdGhpbmdzIGxpa2UgVXNlLUFmdGVyLUZyZWUsIE91dC1vZi1Cb3VuZHMsIGFuZCBsb2NrIGlzc3Vlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiAgSWYgd2UgKmNhbiogY2F0Y2ggYSBidWcgd2l0aCBLQVNBTiwgTG9ja0RlcCwgb3Igb3RoZXIgc3RhbmRhcmQgZGV0ZWN0b3JzLCB3ZSAqc2hvdWxkIG5vdCogZmlyZSB1cCBhIEtNU0FOIHNlc3Npb24uCgpUaGUgZ3VpZGVsaW5lcyBhcmUgdmVyeSBjbGVhcjogd2Ugb25seSBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgY29kZSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgKm9ubHkqIGRldGVjdGVkIGJ5IEtNU0FOLiAgVGhpcyBpbmNsdWRlcyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIGFuZCBzY2VuYXJpb3MgdGhhdCBhbGxvdyB1bmluaXRpYWxpemVkIGJ5dGVzIHRvIGJlIGFjY2Vzc2VkLiBJZiBhbGwgdGhlIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCwgb3IgaWYgdGhlIHJpc2sgaXMgbGltaXRlZCB0byB0aGluZ3MgdGhhdCBLQVNBTiB3aWxsIGNhdGNoLCB0aGVuIGBOZWVkc0tNU0FOPWZhbHNlYC4KCkkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZXNlIHNwZWNpZmljIGNoYW5nZXMuIExldCYjMzk7cyBzdGFydCBieSBpbnNwZWN0aW5nIHRob3NlIGZpbGVzLCBlc3BlY2lhbGx5OiBgZnMvcGlkZnMuY2AsIGBmcy9zdXBlci5jYCwgYGZzL2ZpbGUuY2AsIGBmcy9haW8uY2AsIGFuZCB0aGUgZXh0NCBjaGFuZ2VzLCBhbmQgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCBhbmQgYGxpYi92c3ByaW50Zi5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHJpc2suCgpTcGVjaWZpY2FsbHksIGluIGBmcy9waWRmcy5jYCwgSSBzZWUgYSBtZW1vcnkgYmFycmllciBjaGFuZ2UsIGdvaW5nIGZyb20gYSBgdGVzdF9iaXRgIHdpdGggYHNtcF9ybWIoKWAgdG8gYHRlc3RfYml0X2FjcXVpcmVgLiBUaGlzIGlzIGxpa2VseSBhIHNhZmUgYW5kIGNvcnJlY3Qgb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBhdHRyYCBzdHJ1Y3QgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHRoYXQgdGhlIHJlYWQgb2YgdGhlIGJpdCBpcyBzYWZlLiBJdCYjMzk7cyB0aW1lIHRvIHJlYWQgdGhlIGZ1bGwgY29udGV4dCBpbiBgZnMvcGlkZnMuY2AgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJIHdpbGwgYWxzbyBjaGVjayB3aGF0IGBraW5mb2AgaXMgaW5pdGlhbGl6ZWQgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9waWRmcy5jLTM3MC1cdHNpemVfdCB1c2l6ZSA9IF9JT0NfU0laRShjbWQpO1xuZnMvcGlkZnMuYzozNzE6XHRzdHJ1Y3QgcGlkZmRfaW5mbyBraW5mbyA9IHt9O1xuZnMvcGlkZnMuYy0zNzItXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG4tLVxuZnMvcGlkZnMuYy0zOTYtXHRcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuZnMvcGlkZnMuYzozOTc6XHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7XG5mcy9waWRmcy5jLTM5OC0jaWZkZWYgQ09ORklHX0NHUk9VUFNcbmZzL3BpZGZzLmM6Mzk5Olx0XHRcdGtpbmZvLmNncm91cGlkID0gYXR0ci1cdTAwM2VjZ3JvdXBpZDtcbmZzL3BpZGZzLmM6NDAwOlx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DR1JPVVBJRDtcbmZzL3BpZGZzLmMtNDAxLSNlbmRpZlxuZnMvcGlkZnMuYzo0MDI6XHRcdFx0a2luZm8uZXhpdF9jb2RlID0gYXR0ci1cdTAwM2VleGl0X2NvZGU7XG5mcy9waWRmcy5jLTQwMy1cdFx0fVxuLS1cbmZzL3BpZGZzLmMtNDA3LVx0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG5mcy9waWRmcy5jOjQwODpcdFx0XHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fQ09SRURVTVAgfCBQSURGRF9JTkZPX0NPUkVEVU1QX1NJR05BTCB8IFBJREZEX0lORk9fQ09SRURVTVBfQ09ERTtcbmZzL3BpZGZzLmM6NDA5Olx0XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX21hc2s7XG5mcy9waWRmcy5jOjQxMDpcdFx0XHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcbmZzL3BpZGZzLmM6NDExOlx0XHRcdGtpbmZvLmNvcmVkdW1wX2NvZGUgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX2NvZGU7XG5mcy9waWRmcy5jLTQxMi1cdFx0fVxuLS1cbmZzL3BpZGZzLmMtNDMwLVxuZnMvcGlkZnMuYzo0MzE6XHRpZiAoKG1hc2sgXHUwMDI2IFBJREZEX0lORk9fQ09SRURVTVApIFx1MDAyNlx1MDAyNiAha2luZm8uY29yZWR1bXBfbWFzaykge1xuZnMvcGlkZnMuYzo0MzI6XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBwaWRmc19jb3JlZHVtcF9tYXNrKHRhc2tfZXhlY19zdGF0ZV9nZXRfZHVtcGFibGUodGFzaykpO1xuZnMvcGlkZnMuYzo0MzM6XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUDtcbmZzL3BpZGZzLmMtNDM0LVx0XHQvKiBObyBjb3JlZHVtcCBhY3R1YWxseSB0b29rIHBsYWNlLCBzbyBubyBjb3JlZHVtcCBzaWduYWwuICovXG4tLVxuZnMvcGlkZnMuYy00MzktXHR1c2VyX25zID0gY3VycmVudF91c2VyX25zKCk7XG5mcy9waWRmcy5jOjQ0MDpcdGtpbmZvLnJ1aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKHVzZXJfbnMsIGMtXHUwMDNldWlkKTtcbmZzL3BpZGZzLmM6NDQxOlx0a2luZm8ucmdpZCA9IGZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgYy1cdTAwM2VnaWQpO1xuZnMvcGlkZnMuYzo0NDI6XHRraW5mby5ldWlkID0gZnJvbV9rdWlkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZWV1aWQpO1xuZnMvcGlkZnMuYzo0NDM6XHRraW5mby5lZ2lkID0gZnJvbV9rZ2lkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZWVnaWQpO1xuZnMvcGlkZnMuYzo0NDQ6XHRraW5mby5zdWlkID0gZnJvbV9rdWlkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZXN1aWQpO1xuZnMvcGlkZnMuYzo0NDU6XHRraW5mby5zZ2lkID0gZnJvbV9rZ2lkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZXNnaWQpO1xuZnMvcGlkZnMuYzo0NDY6XHRraW5mby5mc3VpZCA9IGZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgYy1cdTAwM2Vmc3VpZCk7XG5mcy9waWRmcy5jOjQ0NzpcdGtpbmZvLmZzZ2lkID0gZnJvbV9rZ2lkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZWZzZ2lkKTtcbmZzL3BpZGZzLmM6NDQ4Olx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NSRURTO1xuZnMvcGlkZnMuYy00NDktXHRwdXRfY3JlZChjKTtcbi0tXG5mcy9waWRmcy5jLTQ1MS0jaWZkZWYgQ09ORklHX0NHUk9VUFNcbmZzL3BpZGZzLmM6NDUyOlx0aWYgKCFraW5mby5jZ3JvdXBpZCkge1xuZnMvcGlkZnMuYy00NTMtXHRcdHN0cnVjdCBjZ3JvdXAgKmNncnA7XG4tLVxuZnMvcGlkZnMuYy00NTYtXHRcdGNncnAgPSB0YXNrX2RmbF9jZ3JvdXAodGFzayk7XG5mcy9waWRmcy5jOjQ1NzpcdFx0a2luZm8uY2dyb3VwaWQgPSBjZ3JvdXBfaWQoY2dycCk7XG5mcy9waWRmcy5jOjQ1ODpcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NHUk9VUElEO1xuZnMvcGlkZnMuYy00NTktXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmZzL3BpZGZzLmMtNDcxLVxuZnMvcGlkZnMuYzo0NzI6XHRraW5mby5wcGlkID0gdGFza19wcGlkX3Zucih0YXNrKTtcbmZzL3BpZGZzLmM6NDczOlx0a2luZm8udGdpZCA9IHRhc2tfdGdpZF92bnIodGFzayk7XG5mcy9waWRmcy5jOjQ3NDpcdGtpbmZvLnBpZCA9IHRhc2tfcGlkX3Zucih0YXNrKTtcbmZzL3BpZGZzLmM6NDc1Olx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX1BJRDtcbmZzL3BpZGZzLmMtNDc2LVxuZnMvcGlkZnMuYzo0Nzc6XHRpZiAoa2luZm8ucGlkID09IDAgfHwga2luZm8udGdpZCA9PSAwKVxuZnMvcGlkZnMuYy00NzgtXHRcdHJldHVybiAtRVNSQ0g7XG4tLVxuZnMvcGlkZnMuYy00ODEtXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19TVVBQT1JURURfTUFTSykge1xuZnMvcGlkZnMuYzo0ODI6XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19TVVBQT1JURURfTUFTSztcbmZzL3BpZGZzLmM6NDgzOlx0XHRraW5mby5zdXBwb3J0ZWRfbWFzayA9IFBJREZEX0lORk9fU1VQUE9SVEVEO1xuZnMvcGlkZnMuYy00ODQtXHR9XG4tLVxuZnMvcGlkZnMuYy00ODYtXHQvKiBBcmUgdGhlcmUgYml0cyBpbiB0aGUgcmV0dXJuIG1hc2sgbm90IHByZXNlbnQgaW4gUElERkRfSU5GT19TVVBQT1JURUQ/ICovXG5mcy9waWRmcy5jOjQ4NzpcdFdBUk5fT05fT05DRSh+UElERkRfSU5GT19TVVBQT1JURUQgXHUwMDI2IGtpbmZvLm1hc2spO1xuZnMvcGlkZnMuYy00ODgtXHQvKlxuLS1cbmZzL3BpZGZzLmMtNDkzLVx0ICovXG5mcy9waWRmcy5jOjQ5NDpcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKHVpbmZvLCB1c2l6ZSwgXHUwMDI2a2luZm8sIHNpemVvZihraW5mbyksIE5VTEwpO1xuZnMvcGlkZnMuYy00OTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzNwoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEJhcnJpZXIgUmVmYWN0b3JpbmcgYW5kIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIGEgc2VyaWVzIG9mIGNoYW5nZXMgYWNyb3NzIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW1zIGFuZCBjb3JlIGNvbXBvbmVudHMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gVGhlIGNvbW1vbiB0aHJlYWQgaGVyZSBpcyB0aGUgbW9kZXJuaXphdGlvbiBvZiBtZW1vcnkgYmFycmllciBwcmltaXRpdmVzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0cmFuc2l0aW9uaW5nIGZyb20gdGhlIG9sZGVyLCBtb3JlIGV4cGxpY2l0IGBzbXBfd21iKClgICh3cml0ZSBtZW1vcnkgYmFycmllcikgYW5kIGBzbXBfcm1iKClgIChyZWFkIG1lbW9yeSBiYXJyaWVyKSBwYXR0ZXJucyB0byB0aGUgbW9yZSByZWZpbmVkIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCBhbmQgYHNtcF9sb2FkX2FjcXVpcmUoKWAgc2VtYW50aWNzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBzZWVuIHRoZXNlIHJlZmFjdG9yaW5ncyBpbjoKCjEuICBgZnMvYWlvLmNgCjIuICBgZnMvZXh0NC9iYWxsb2MuY2AsIGBleHQ0LmhgLCBgbWJhbGxvYy5jYCwgYHJlc2l6ZS5jYAozLiAgYGZzL2ZpbGUuY2AKNC4gIGBmcy9tbnRfaWRtYXBwaW5nLmNgCjUuICBgZnMvcGlkZnMuY2AKNi4gIGBmcy9zdXBlci5jYAo3LiAgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYAo4LiAgYGxpYi92c3ByaW50Zi5jYAoKQWNyb3NzIGFsbCB0aGVzZSBmaWxlcywgdGhlIGZvY3VzIGlzIG9uIGltcHJvdmluZyB0aGUgd2F5IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgc3luY2hyb25pemF0aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuICBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIEhvd2V2ZXIsIGFuZCB0aGlzIGlzICpjcnVjaWFsKiwgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gSSYjMzk7dmUgY2FyZWZ1bGx5IHNjcnV0aW5pemVkIHRoZSBwYXRjaCBkZXNjcmlwdGlvbnMsIGFuZCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZjoKCiogICBVbmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uCiogICBFeHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGZpZWxkcwoqICAgQ2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocyBvciBwYWRkaW5nIHdoZW4gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlCiogICBDb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgdmFsdWVzCgpUaGlzIGlzIHB1cmVseSBhYm91dCBvcHRpbWl6aW5nIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGZvciBiZXR0ZXIgY29uY3VycmVuY3ksIGVuc3VyaW5nIHRoZSBjb3JyZWN0IG9yZGVyaW5nIG9mIG1lbW9yeSBvcGVyYXRpb25zIGZvciB0aHJlYWRzIG9yIHByb2Nlc3Nlcy4gSXQgbWVhbnMgd2UgaGF2ZSB0aGUgYmVuZWZpdHMgb2Ygc3Ryb25nZXIgc3luY2hyb25pemF0aW9uIGFuZCBiZXR0ZXIgY29kZSByZWFkYWJpbGl0eSwgYnV0IHdlIGhhdmUgKm5vKiBuZXcgcmlza3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZXJlZm9yZSwgKm15KiBhc3Nlc3NtZW50IGlzIHRoYXQgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGNvbnN0cnVjdCBhIGNsZWFyIGBLTVNBTlJlYXNvbmluZ2Agc3RhdGVtZW50LiAgVGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1vcnkgYmFycmllcnMgKGZyb20gYHNtcF9ybWIvc21wX3dtYmAgdG8gYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcykgdGhyb3VnaG91dCB0aGUgZmlsZSBzeXN0ZW0gYW5kIGtlcm5lbCBzdWJzeXN0ZW1zLiAgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlIGJlY2F1c2UgdGhlc2UgY2hhbmdlcyBkbyAqbm90KiB0b3VjaCBzdHJ1Y3QgYWxsb2NhdGlvbnMsIHplcm9pbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLiBUaGUgcGF0Y2jigJlzIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgYXJlIGFscmVhZHkgbWV0aWN1bG91c2x5IGhhbmRsZWQgYW5kIHZhbGlkYXRlZCBieSB0aGUgc3RhbmRhcmQgdG9vbGNoYWlucyBsaWtlIEtBU0FOLCBLQ1NBTiwgZXRjLiBUaGUgcmVmYWN0b3JpbmcgaXRzZWxmIGlzIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kZXJuaXplcyBhbmQgc3RyZWFtbGluZXMgbWVtb3J5IGJhcnJpZXIgdXNhZ2UgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbSBhbmQgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoYWlvLCBleHQ0LCBmcy9maWxlLmMsIG1udF9pZG1hcHBpbmcsIHBpZGZzLCBzdXBlciwgdXNlcl9uYW1lc3BhY2UsIGFuZCB2c3ByaW50ZikgYnkgcmVwbGFjaW5nIGV4cGxpY2l0IHNtcF9ybWIoKS9zbXBfd21iKCkgYmFycmllciBwYWlycyB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcsIG9yIGFsdGVyIGhvdyBidWZmZXJzIGFyZSBpbml0aWFsaXplZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBvciBhbHRlciBob3cgYnVmZmVycyBhcmUgaW5pdGlhbGl6ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCByZW1haW4gZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjM6MTkuMDU2NDg1NzE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1MjMwMDE4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiVVNFUl9OU1wiLFxuICAgIFwiQUlPXCIsXG4gICAgXCJQSURfTlNcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwiZXh0NF9ncm91cF9hZGRcIixcbiAgICBcImV4dDRfZ3JvdXBfZXh0ZW5kXCIsXG4gICAgXCJleHQ0X2dldF9ncm91cF9pbmZvXCIsXG4gICAgXCJtYXBfaWRfcmFuZ2VfdXBcIixcbiAgICBcIm1hcF9pZF9yYW5nZV9kb3duXCIsXG4gICAgXCJwaWRmc19leGl0XCIsXG4gICAgXCJwaWRmc19jb3JlZHVtcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcsIG9yIGFsdGVyIGhvdyBidWZmZXJzIGFyZSBpbml0aWFsaXplZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGVybml6ZXMgYW5kIGFkanVzdHMgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGFjcm9zcyBjb3JlIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBjb21wb25lbnRzIChBSU8gcmluZyBidWZmZXJzLCBleHQ0IHJlc2l6aW5nIGFuZCBncm91cCBhbGxvY2F0aW9uLCBmZCBpbnN0YWxsYXRpb24vZXhwYW5zaW9uLCBwaWRmcyBhdHRyaWJ1dGUgcmV0cmlldmFsLCBhbmQgdXNlciBuYW1lc3BhY2UgaWQgbWFwcGluZykgYnkgY29udmVydGluZyBleHBsaWNpdCBzbXBfcm1iL3NtcF93bWIgcGFpcnMgaW50byBhY3F1aXJlL3JlbGVhc2UgbWVtb3J5IG9yZGVycyAoZS5nLiBzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc3luY2hyb25pemF0aW9uIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgb3JkZXJpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzoxOS4wNTY0OTE4MzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDI3ODczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwZWQ0OWJlMWZhZjM5M2NmOWJjMjlmY2ZjZDcxYzIwYjg2NzI2OTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMToyMzoxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXFxuaW5kZXggZDc4YWNjNjlmNDg3MC4uYTAyNzllMDU5ZTk3MiAxMDA2NDRcXG4tLS0gYS9mcy9haW8uY1xcbisrKyBiL2ZzL2Fpby5jXFxuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXFxuIFxcdC8qIGFmdGVyIGZsYWdnaW5nIHRoZSByZXF1ZXN0IGFzIGRvbmUsIHdlXFxuIFxcdCAqIG11c3QgbmV2ZXIgZXZlbiBsb29rIGF0IGl0IGFnYWluXFxuIFxcdCAqL1xcbi1cXHRzbXBfd21iKCk7XFx0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXFxuLVxcbiBcXHRjdHgtXFx1MDAzZXRhaWwgPSB0YWlsO1xcbiBcXG4gXFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVxcdTAwM2VyaW5nX2ZvbGlvc1swXSk7XFxuIFxcdGhlYWQgPSByaW5nLVxcdTAwM2VoZWFkO1xcbi1cXHRyaW5nLVxcdTAwM2V0YWlsID0gdGFpbDtcXG4rXFx0LyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZyaW5nLVxcdTAwM2V0YWlsLCB0YWlsKTtcXG4gXFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGN0eC1cXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xcbiBcXG4gXFx0Y3R4LVxcdTAwM2Vjb21wbGV0ZWRfZXZlbnRzKys7XFxuQEAgLTEyODgsMTMgKzEyODcsMTIgQEAgc3RhdGljIGxvbmcgYWlvX3JlYWRfZXZlbnRzX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LFxcbiBcXHQvKiBBY2Nlc3MgdG8gLVxcdTAwM2VyaW5nX2ZvbGlvcyBoZXJlIGlzIHByb3RlY3RlZCBieSBjdHgtXFx1MDAzZXJpbmdfbG9jay4gKi9cXG4gXFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVxcdTAwM2VyaW5nX2ZvbGlvc1swXSk7XFxuIFxcdGhlYWQgPSByaW5nLVxcdTAwM2VoZWFkO1xcbi1cXHR0YWlsID0gcmluZy1cXHUwMDNldGFpbDtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIEVuc3VyZSB0aGF0IG9uY2Ugd2UndmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXRcXG4gXFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxcbitcXHQgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuXFxuIFxcdCAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuK1xcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZyaW5nLVxcdTAwM2V0YWlsKTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJoJXUgdCV1IG0ldVxcXFxuXFxcIiwgaGVhZCwgdGFpbCwgY3R4LVxcdTAwM2Vucl9ldmVudHMpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmNcXG5pbmRleCA1MmY0YzUxNjlmOTE0Li43NzhmZTg3ODhmMDZlIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvYmFsbG9jLmNcXG4rKysgYi9mcy9leHQ0L2JhbGxvYy5jXFxuQEAgLTMyOSw3ICszMjksNyBAQCBzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpleHQ0X2dldF9ncm91cF9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKipncnBfaW5mbztcXG4gXFx0bG9uZyBpbmRleHYsIGluZGV4aDtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShncm91cCBcXHUwMDNlPSBFWFQ0X1NCKHNiKS1cXHUwMDNlc19ncm91cHNfY291bnQpKVxcbitcXHRpZiAodW5saWtlbHkoZ3JvdXAgXFx1MDAzZT0gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHNiKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRpZiAodW5saWtlbHkoIUVYVDRfU0Ioc2IpLVxcdTAwM2VzX2dyb3VwX2luZm8pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxcbmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0zNTQyLDE2ICszNTQyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lzaXplX3NldChzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBsb2ZmX3QgaV9zaXplKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHJlcXVpcmVzIHVzaW5nIHNtcF9ybWIoKSBhZnRlcndhcmRzLiAgU2VlXFxuLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKClcXG4tICogaW4gcmVzaXplLmNcXG4rICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCB1c2VzIGFjcXVpcmUgc2VtYW50aWNzLlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIHtcXG4tXFx0ZXh0NF9ncm91cF90XFx0bmdyb3VwcyA9IEVYVDRfU0Ioc2IpLVxcdTAwM2VzX2dyb3Vwc19jb3VudDtcXG4tXFxuLVxcdHNtcF9ybWIoKTtcXG4tXFx0cmV0dXJuIG5ncm91cHM7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXFxuK1xcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc19ncm91cHNfY291bnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2ZsZXhfZ3JvdXAoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXFxuaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L21iYWxsb2MuY1xcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXFxuQEAgLTg5OSwxMCArODk5LDggQEAgc3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudChcXG4gXFxuIFxcdC8qIG5vbi1leHRlbnQgZmlsZXMgYXJlIGxpbWl0ZWQgdG8gbG93IGJsb2Nrcy9ncm91cHMgKi9cXG4gXFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXFx1MDAzZWFjX2lub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSlcXG4tXFx0XFx0bmdyb3VwcyA9IEVYVDRfU0IoYWMtXFx1MDAzZWFjX3NiKS1cXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xcbi1cXG4tXFx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuK1xcdFxcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXFxuK1xcdFxcdG5ncm91cHMgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZFWFQ0X1NCKGFjLVxcdTAwM2VhY19zYiktXFx1MDAzZXNfYmxvY2tmaWxlX2dyb3Vwcyk7XFxuIFxcbiBcXHRyZXR1cm4gbmdyb3VwcztcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuY1xcbmluZGV4IDJjNWI4NTFjNTUyYTYuLjVlM2FkODM5M2NmODMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9yZXNpemUuY1xcbisrKyBiL2ZzL2V4dDQvcmVzaXplLmNcXG5AQCAtMTQ2MiwxMSArMTQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHQgKlxcbiBcXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxcbiBcXHQgKlxcbi1cXHQgKiAqIFdyaXRlcnMgbXVzdCBwZXJmb3JtIGEgc21wX3dtYigpIGFmdGVyIHVwZGF0aW5nIGFsbFxcbi1cXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcXG4rXFx0ICogKiBXcml0ZXJzIG11c3QgdXNlIGEgcmVsZWFzZSBzdG9yZSB3aGVuIHVwZGF0aW5nIHRoZSBncm91cHMgY291bnRcXG4rXFx0ICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZFxcbiBcXHQgKlxcbi1cXHQgKiAqIFJlYWRlcnMgbXVzdCBwZXJmb3JtIGFuIHNtcF9ybWIoKSBhZnRlciByZWFkaW5nIHRoZSBncm91cHNcXG4tXFx0ICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLlxcbitcXHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXFxuK1xcdCAqICAgY291bnQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLlxcbiBcXHQgKlxcbiBcXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcXG4gXFx0ICogd2hpbGUgZnJlZWluZyBkYXRhLCBhcyB3ZSBjYW4gb25seSBhbGxvY2F0ZSBmcm9tIGEgYmxvY2tcXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHQgKiBvbmx5IHRoZW4gZnJlZSBhZnRlciBzZXJpYWxpc2luZyBpbiB0dXJuIGFnYWluc3QgdGhhdFxcbiBcXHQgKiBhbGxvY2F0aW9uLlxcbiBcXHQgKi9cXG4tXFx0c21wX3dtYigpO1xcbiBcXG4gXFx0LyogVXBkYXRlIHRoZSBnbG9iYWwgZnMgc2l6ZSBmaWVsZHMgKi9cXG4tXFx0c2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCArPSBmbGV4X2dkLVxcdTAwM2Vjb3VudDtcXG4tXFx0c2JpLVxcdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCxcXG4tXFx0XFx0XFx0KEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKTtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KCkgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnNiaS1cXHUwMDNlc19ncm91cHNfY291bnQsXFxuK1xcdFxcdFxcdCAgc2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCArIGZsZXhfZ2QtXFx1MDAzZWNvdW50KTtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2c2JpLVxcdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMsXFxuK1xcdFxcdFxcdCAgbWluKHNiaS1cXHUwMDNlc19ncm91cHNfY291bnQsXFxuK1xcdFxcdFxcdCAgICAgIChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSkpO1xcbiBcXG4gXFx0LyogVXBkYXRlIHRoZSByZXNlcnZlZCBibG9jayBjb3VudHMgb25seSBvbmNlIHRoZSBuZXcgZ3JvdXAgaXNcXG4gXFx0ICogYWN0aXZlLiAqL1xcbmRpZmYgLS1naXQgYS9mcy9maWxlLmMgYi9mcy9maWxlLmNcXG5pbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NFxcbi0tLSBhL2ZzL2ZpbGUuY1xcbisrKyBiL2ZzL2ZpbGUuY1xcbkBAIC0yNzMsOCArMjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIoZmlsZXMtXFx1MDAzZWZkdCwgbmV3X2ZkdCk7XFxuIFxcdGlmIChjdXJfZmR0ICE9IFxcdTAwMjZmaWxlcy1cXHUwMDNlZmR0YWIpXFxuIFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZjdXJfZmR0LVxcdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xcbi1cXHQvKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGZkX2luc3RhbGwoKSAqL1xcbi1cXHRzbXBfd21iKCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0zMTMsNyArMzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcXG4gXFx0LyogQWxsIGdvb2QsIHNvIHdlIHRyeSAqL1xcbiBcXHRmaWxlcy1cXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzID0gdHJ1ZTtcXG4gXFx0ZXJyb3IgPSBleHBhbmRfZmR0YWJsZShmaWxlcywgbnIpO1xcbi1cXHRmaWxlcy1cXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7XFxuK1xcdC8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZmaWxlcy1cXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzLCBmYWxzZSk7XFxuIFxcbiBcXHR3YWtlX3VwX2FsbChcXHUwMDI2ZmlsZXMtXFx1MDAzZXJlc2l6ZV93YWl0KTtcXG4gXFx0cmV0dXJuIGVycm9yO1xcbkBAIC02ODUsMTMgKzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xcbi1cXHRpZiAodW5saWtlbHkoZmlsZXMtXFx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcXG4rXFx0LyogY291cGxlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXhwYW5kX2ZpbGVzKCkgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmZpbGVzLVxcdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcXG4gXFx0XFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIGV4cGFuZF9mZHRhYmxlKCkgKi9cXG4tXFx0c21wX3JtYigpO1xcbiBcXHRmZHQgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoZmlsZXMtXFx1MDAzZWZkdCk7XFxuIFxcdFZGU19CVUdfT04ocmN1X2FjY2Vzc19wb2ludGVyKGZkdC1cXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZkdC1cXHUwMDNlZmRbZmRdLCBmaWxlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbW50X2lkbWFwcGluZy5jIGIvZnMvbW50X2lkbWFwcGluZy5jXFxuaW5kZXggY2I2MWZiZGI1MmU5MC4uNjEyYjI2NmFiM2RhMCAxMDA2NDRcXG4tLS0gYS9mcy9tbnRfaWRtYXBwaW5nLmNcXG4rKysgYi9mcy9tbnRfaWRtYXBwaW5nLmNcXG5AQCAtMjE5LDEwICsyMTksOSBAQCBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNnaWRfaW5fZ3JvdXBfcCk7XFxuIHN0YXRpYyBpbnQgY29weV9tbnRfaWRtYXAoc3RydWN0IHVpZF9naWRfbWFwICptYXBfZnJvbSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcF90bylcXG4ge1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXFxuK1xcdHUzMiBucl9leHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bWFwX2Zyb20tXFx1MDAzZW5yX2V4dGVudHMpO1xcbiBcXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmZvcndhcmQsICpyZXZlcnNlO1xcbi1cXHR1MzIgbnJfZXh0ZW50cyA9IFJFQURfT05DRShtYXBfZnJvbS1cXHUwMDNlbnJfZXh0ZW50cyk7XFxuLVxcdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIHdoZW4gd3JpdGluZyB0aGUgaWRtYXBwaW5nLiAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEb24ndCBibGluZGx5IGNvcHkgQG1hcF90byBpbnRvIEBtYXBfZnJvbSBpZiBucl9leHRlbnRzIGlzXFxuZGlmZiAtLWdpdCBhL2ZzL3BpZGZzLmMgYi9mcy9waWRmcy5jXFxuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcXG4tLS0gYS9mcy9waWRmcy5jXFxuKysrIGIvZnMvcGlkZnMuY1xcbkBAIC0zOTMsOCArMzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcbiBcXHRhdHRyID0gUkVBRF9PTkNFKHBpZC1cXHUwMDNlYXR0cik7XFxuIFxcdGlmIChtYXNrIFxcdTAwMjYgUElERkRfSU5GT19FWElUKSB7XFxuLVxcdFxcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0cl9tYXNrKSkge1xcbi1cXHRcXHRcXHRzbXBfcm1iKCk7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyX21hc2spKSB7XFxuIFxcdFxcdFxcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUO1xcbiAjaWZkZWYgQ09ORklHX0NHUk9VUFNcXG4gXFx0XFx0XFx0a2luZm8uY2dyb3VwaWQgPSBhdHRyLVxcdTAwM2VjZ3JvdXBpZDtcXG5AQCAtNDA1LDggKzQwNCw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAobWFzayBcXHUwMDI2IFBJREZEX0lORk9fQ09SRURVTVApIHtcXG4tXFx0XFx0aWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0cl9tYXNrKSkge1xcbi1cXHRcXHRcXHRzbXBfcm1iKCk7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0cl9tYXNrKSkge1xcbiBcXHRcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fQ09SRURVTVAgfCBQSURGRF9JTkZPX0NPUkVEVU1QX1NJR05BTCB8IFBJREZEX0lORk9fQ09SRURVTVBfQ09ERTtcXG4gXFx0XFx0XFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXFx1MDAzZWNvcmVkdW1wX21hc2s7XFxuIFxcdFxcdFxcdGtpbmZvLmNvcmVkdW1wX3NpZ25hbCA9IGF0dHItXFx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcXG5pbmRleCAwNWU0NDMxNzMwMzg3Li5jYWE2MTg5ZTQwNTcyIDEwMDY0NFxcbi0tLSBhL2ZzL3N1cGVyLmNcXG4rKysgYi9mcy9zdXBlci5jXFxuQEAgLTI2NywxMiArMjY3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbiBcXHQgKiBIb3dldmVyLCBpZiB3ZSBhcmUgY3VycmVudGx5IG1vdW50aW5nIHRoZSBzdXBlcmJsb2NrLCB0aGUgdW5kZXJseWluZ1xcbiBcXHQgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0XFxuIFxcdCAqIGlzIGRhbmdlcm91cyB0byBhY2Nlc3MgaXQuICBzdXBlcl90cnlsb2NrX3NoYXJlZCgpIHVzZXMgYSBTQl9CT1JOIGNoZWNrXFxuLVxcdCAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgbWVtb3J5IGJhcnJpZXIgaXNcXG4tXFx0ICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXFxuK1xcdCAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCEoc2ItXFx1MDAzZXNfZmxhZ3MgXFx1MDAyNiBTQl9CT1JOKSlcXG4rXFx0aWYgKCFzdXBlcl9mbGFncyhzYiwgU0JfQk9STikpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRpZiAoc2ItXFx1MDAzZXNfb3AgXFx1MDAyNlxcdTAwMjYgc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xcbmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcXG4rKysgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xcbkBAIC0zMTcsOSArMzE3LDkgQEAgbWFwX2lkX3JhbmdlX2Rvd25fYmFzZSh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY29cXG4gXFxuIHN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbiB7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cXG4rXFx0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZtYXAtXFx1MDAzZW5yX2V4dGVudHMpO1xcbiBcXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDtcXG4tXFx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cXHUwMDNlbnJfZXh0ZW50cztcXG4tXFx0c21wX3JtYigpO1xcbiBcXG4gXFx0aWYgKGV4dGVudHMgXFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcXG4gXFx0XFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX2Rvd25fYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7XFxuQEAgLTM4Myw5ICszODMsOSBAQCBtYXBfaWRfcmFuZ2VfdXBfbWF4KHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudFxcbiBcXG4gdTMyIG1hcF9pZF9yYW5nZV91cChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXFxuIHtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xcbitcXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm1hcC1cXHUwMDNlbnJfZXh0ZW50cyk7XFxuIFxcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xcbi1cXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVxcdTAwM2Vucl9leHRlbnRzO1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRpZiAoZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbiBcXHRcXHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfdXBfYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7XFxuQEAgLTY3Niw5ICs2NzYsOSBAQCBzdGF0aWMgaW50IHByb2ppZF9tX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXFxuIFxcdFxcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXFxuIHtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xcbitcXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm1hcC1cXHUwMDNlbnJfZXh0ZW50cyk7XFxuIFxcdGxvZmZfdCBwb3MgPSAqcHBvcztcXG4tXFx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cXHUwMDNlbnJfZXh0ZW50cztcXG4tXFx0c21wX3JtYigpO1xcbiBcXG4gXFx0aWYgKHBvcyBcXHUwMDNlPSBleHRlbnRzKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtOTY3LDkgKzk2NywxMSBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuIFxcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxcbiBcXHQgKiB3ZXJlIHdyaXR0ZW4gYmVmb3JlIHRoZSBjb3VudCBvZiB0aGUgZXh0ZW50cy5cXG4gXFx0ICpcXG4tXFx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcXG4tXFx0ICogb3JkZXIgYW5kIHNtcF9ybWIoKSBpcyBndWFyYW50ZWVkIHRoYXQgd2UgZG9uJ3QgaGF2ZSBjcmF6eVxcbi1cXHQgKiBhcmNoaXRlY3R1cmVzIHJldHVybmluZyBzdGFsZSBkYXRhLlxcbitcXHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxcbitcXHQgKiBkYXRhLiAgV3JpdGVycyB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoKSB0byBlbnN1cmUgYWxsIGV4dGVudFxcbitcXHQgKiBkYXRhIGlzIHZpc2libGUgYmVmb3JlIG5yX2V4dGVudHMgaXMgdXBkYXRlZC4gIFJlYWRlcnMgdXNlXFxuK1xcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcXG4rXFx0ICogdGhlIGV4dGVudCBkYXRhIHdoZW4gcmVhZGluZyBucl9leHRlbnRzLlxcbiBcXHQgKi9cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2dXNlcm5zX3N0YXRlX211dGV4KTtcXG4gXFxuQEAgLTEwOTgsOCArMTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0bWFwLVxcdTAwM2Vmb3J3YXJkID0gbmV3X21hcC5mb3J3YXJkO1xcbiBcXHRcXHRtYXAtXFx1MDAzZXJldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7XFxuIFxcdH1cXG4tXFx0c21wX3dtYigpO1xcbi1cXHRtYXAtXFx1MDAzZW5yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bWFwLVxcdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xcbiBcXG4gXFx0KnBwb3MgPSBjb3VudDtcXG4gXFx0cmV0ID0gY291bnQ7XFxuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcXG5pbmRleCAxZDk1YWI5MzE0YmY3Li45MGQwYTcyNGVhZGQ4IDEwMDY0NFxcbi0tLSBhL2xpYi92c3ByaW50Zi5jXFxuKysrIGIvbGliL3ZzcHJpbnRmLmNcXG5AQCAtNzYyLDkgKzc2Miw4IEBAIHN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkXFxuIHtcXG4gXFx0Z2V0X3JhbmRvbV9ieXRlcyhcXHUwMDI2cHRyX2tleSwgc2l6ZW9mKHB0cl9rZXkpKTtcXG4gXFxuLVxcdC8qIFBhaXJzIHdpdGggc21wX3JtYigpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovXFxuLVxcdHNtcF93bWIoKTtcXG4tXFx0V1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2ZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTtcXG4gXFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiB9XFxuIFxcbkBAIC03ODEsMTIgKzc4MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl90b19oYXNodmFsKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyAqaGFzaHZhbF9vdXQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYXNodmFsO1xcbiBcXG4tXFx0aWYgKCFSRUFEX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSlcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cXG4rXFx0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4tXFx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuLVxcbiAjaWZkZWYgQ09ORklHXzY0QklUXFxuIFxcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFxcdTAwMjZwdHJfa2V5KTtcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjM6MTkuNzcxOTk1NTU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NzY3NDc1MDM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlBJRF9OU1wiLFxuICAgIFwiQ0dST1VQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcmVzaXplX2ZzXCIsXG4gICAgXCJleHQ0X2dyb3VwX2FkZFwiLFxuICAgIFwiZXh0NF9ncm91cF9leHRlbmRcIixcbiAgICBcImV4dDRfZ2V0X2dyb3VwX2luZm9cIixcbiAgICBcIm1hcF9pZF9yYW5nZV91cFwiLFxuICAgIFwibWFwX2lkX3JhbmdlX2Rvd25cIixcbiAgICBcInBpZGZzX2V4aXRcIixcbiAgICBcInBpZGZzX2NvcmVkdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kZXJuaXplcyBhbmQgYWRqdXN0cyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYWNyb3NzIGNvcmUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGNvbXBvbmVudHMgKEFJTyByaW5nIGJ1ZmZlcnMsIGV4dDQgcmVzaXppbmcgYW5kIGdyb3VwIGFsbG9jYXRpb24sIGZkIGluc3RhbGxhdGlvbi9leHBhbnNpb24sIHBpZGZzIGF0dHJpYnV0ZSByZXRyaWV2YWwsIGFuZCB1c2VyIG5hbWVzcGFjZSBpZCBtYXBwaW5nKSBieSBjb252ZXJ0aW5nIGV4cGxpY2l0IHNtcF9ybWIvc21wX3dtYiBwYWlycyBpbnRvIGFjcXVpcmUvcmVsZWFzZSBtZW1vcnkgb3JkZXJzIChlLmcuIHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFRoZXNlIGFyZSByZWFjaGFibGUgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwZWQ0OWJlMWZhZjM5M2NmOWJjMjlmY2ZjZDcxYzIwYjg2NzI2OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIxOjIzOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xuaW5kZXggZDc4YWNjNjlmNDg3MC4uYTAyNzllMDU5ZTk3MiAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4rKysgYi9mcy9haW8uY1xuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4gXHQvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZVxuIFx0ICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1x0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4tXG4gXHRjdHgtXHUwMDNldGFpbCA9IHRhaWw7XG4gXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHJpbmctXHUwMDNldGFpbCA9IHRhaWw7XG4rXHQvKiBNYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJpbmctXHUwMDNldGFpbCwgdGFpbCk7XG4gXHRmbHVzaF9kY2FjaGVfZm9saW8oY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcbiBcdGN0eC1cdTAwM2Vjb21wbGV0ZWRfZXZlbnRzKys7XG5AQCAtMTI4OCwxMyArMTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsXG4gXHQvKiBBY2Nlc3MgdG8gLVx1MDAzZXJpbmdfZm9saW9zIGhlcmUgaXMgcHJvdGVjdGVkIGJ5IGN0eC1cdTAwM2VyaW5nX2xvY2suICovXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHRhaWwgPSByaW5nLVx1MDAzZXRhaWw7XG4tXG4gXHQvKlxuIFx0ICogRW5zdXJlIHRoYXQgb25jZSB3ZSd2ZSByZWFkIHRoZSBjdXJyZW50IHRhaWwgcG9pbnRlciwgdGhhdFxuIFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxuK1x0ICogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGFpb19jb21wbGV0ZSgpLlxuIFx0ICovXG4tXHRzbXBfcm1iKCk7XG4rXHR0YWlsID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyaW5nLVx1MDAzZXRhaWwpO1xuIFxuIFx0cHJfZGVidWcoXCJoJXUgdCV1IG0ldVxcblwiLCBoZWFkLCB0YWlsLCBjdHgtXHUwMDNlbnJfZXZlbnRzKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2JhbGxvYy5jIGIvZnMvZXh0NC9iYWxsb2MuY1xuaW5kZXggNTJmNGM1MTY5ZjkxNC4uNzc4ZmU4Nzg4ZjA2ZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvYmFsbG9jLmNcbkBAIC0zMjksNyArMzI5LDcgQEAgc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZXh0NF9nZXRfZ3JvdXBfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0c3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqKmdycF9pbmZvO1xuIFx0bG9uZyBpbmRleHYsIGluZGV4aDtcbiBcbi1cdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IEVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KSlcbitcdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzYikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICh1bmxpa2VseSghRVhUNF9TQihzYiktXHUwMDNlc19ncm91cF9pbmZvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM1NDIsMTYgKzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpXG4gfVxuIFxuIC8qXG4tICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCByZXF1aXJlcyB1c2luZyBzbXBfcm1iKCkgYWZ0ZXJ3YXJkcy4gIFNlZVxuLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKClcbi0gKiBpbiByZXNpemUuY1xuKyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRleHQ0X2dyb3VwX3RcdG5ncm91cHMgPSBFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudDtcbi1cbi1cdHNtcF9ybWIoKTtcbi1cdHJldHVybiBuZ3JvdXBzO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbitcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5pbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5AQCAtODk5LDEwICs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxuIFxuIFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xuIFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxuLVx0XHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xuLVxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuLVx0c21wX3JtYigpO1xuK1x0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuK1x0XHRuZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKGFjLVx1MDAzZWFjX3NiKS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMpO1xuIFxuIFx0cmV0dXJuIG5ncm91cHM7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jXG5pbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9yZXNpemUuY1xuKysrIGIvZnMvZXh0NC9yZXNpemUuY1xuQEAgLTE0NjIsMTEgKzE0NjIsMTEgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqXG4gXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxuIFx0ICpcbi1cdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXG4tXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcbitcdCAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50XG4rXHQgKiAgIGFmdGVyIGFsbCBkZXBlbmRlbnQgZGF0YSBoYXMgYmVlbiB1cGRhdGVkXG4gXHQgKlxuLVx0ICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzXG4tXHQgKiAgIGNvdW50IGFuZCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4rXHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXG4rXHQgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiBcdCAqXG4gXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcbiBcdCAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXRcbiBcdCAqIGFsbG9jYXRpb24uXG4gXHQgKi9cbi1cdHNtcF93bWIoKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovXG4tXHRzYmktXHUwMDNlc19ncm91cHNfY291bnQgKz0gZmxleF9nZC1cdTAwM2Vjb3VudDtcbi1cdHNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuLVx0XHRcdChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuK1x0XHRcdCAgc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICsgZmxleF9nZC1cdTAwM2Vjb3VudCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzLFxuK1x0XHRcdCAgbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbitcdFx0XHQgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzXG4gXHQgKiBhY3RpdmUuICovXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jXG5pbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NFxuLS0tIGEvZnMvZmlsZS5jXG4rKysgYi9mcy9maWxlLmNcbkBAIC0yNzMsOCArMjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZpbGVzLVx1MDAzZWZkdCwgbmV3X2ZkdCk7XG4gXHRpZiAoY3VyX2ZkdCAhPSBcdTAwMjZmaWxlcy1cdTAwM2VmZHRhYilcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2Y3VyX2ZkdC1cdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xuLVx0LyogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbi1cdHNtcF93bWIoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTMsNyArMzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdC8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi9cbiBcdGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcyA9IHRydWU7XG4gXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XG4tXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcbiBcbiBcdHdha2VfdXBfYWxsKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV93YWl0KTtcbiBcdHJldHVybiBlcnJvcjtcbkBAIC02ODUsMTMgKzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xuLVx0aWYgKHVubGlrZWx5KGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4cGFuZF9maWxlcygpICovXG4rXHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcbiBcdFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xuLVx0c21wX3JtYigpO1xuIFx0ZmR0ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGZpbGVzLVx1MDAzZWZkdCk7XG4gXHRWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBmaWxlKTtcbmRpZmYgLS1naXQgYS9mcy9tbnRfaWRtYXBwaW5nLmMgYi9mcy9tbnRfaWRtYXBwaW5nLmNcbmluZGV4IGNiNjFmYmRiNTJlOTAuLjYxMmIyNjZhYjNkYTAgMTAwNjQ0XG4tLS0gYS9mcy9tbnRfaWRtYXBwaW5nLmNcbisrKyBiL2ZzL21udF9pZG1hcHBpbmcuY1xuQEAgLTIxOSwxMCArMjE5LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmZzZ2lkX2luX2dyb3VwX3ApO1xuIHN0YXRpYyBpbnQgY29weV9tbnRfaWRtYXAoc3RydWN0IHVpZF9naWRfbWFwICptYXBfZnJvbSxcbiBcdFx0XHQgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX3RvKVxuIHtcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbitcdHUzMiBucl9leHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZtYXBfZnJvbS1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZm9yd2FyZCwgKnJldmVyc2U7XG4tXHR1MzIgbnJfZXh0ZW50cyA9IFJFQURfT05DRShtYXBfZnJvbS1cdTAwM2Vucl9leHRlbnRzKTtcbi1cdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIHdoZW4gd3JpdGluZyB0aGUgaWRtYXBwaW5nLiAqL1xuLVx0c21wX3JtYigpO1xuIFxuIFx0LypcbiBcdCAqIERvbid0IGJsaW5kbHkgY29weSBAbWFwX3RvIGludG8gQG1hcF9mcm9tIGlmIG5yX2V4dGVudHMgaXNcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbisrKyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCArMzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXG4gXHRhdHRyID0gUkVBRF9PTkNFKHBpZC1cdTAwM2VhdHRyKTtcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0VYSVQpIHtcbi1cdFx0aWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuLVx0XHRcdHNtcF9ybWIoKTtcbitcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBTXG4gXHRcdFx0a2luZm8uY2dyb3VwaWQgPSBhdHRyLVx1MDAzZWNncm91cGlkO1xuQEAgLTQwNSw4ICs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuK1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXHUwMDNlY29yZWR1bXBfbWFzaztcbiBcdFx0XHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uY2FhNjE4OWU0MDU3MiAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yNjcsMTIgKzI2NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdCAqIEhvd2V2ZXIsIGlmIHdlIGFyZSBjdXJyZW50bHkgbW91bnRpbmcgdGhlIHN1cGVyYmxvY2ssIHRoZSB1bmRlcmx5aW5nXG4gXHQgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0XG4gXHQgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVja1xuLVx0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBtZW1vcnkgYmFycmllciBpc1xuLVx0ICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXG4rXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS5cbiBcdCAqL1xuLVx0aWYgKCEoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfQk9STikpXG4rXHRpZiAoIXN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtMzE3LDkgKzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvXG4gXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKGV4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIFx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC0zODMsOSArMzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnRcbiBcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC02NzYsOSArNjc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdGxvZmZfdCBwb3MgPSAqcHBvcztcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChwb3MgXHUwMDNlPSBleHRlbnRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC05NjcsOSArOTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxuIFx0ICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuXG4gXHQgKlxuLVx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcbi1cdCAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbid0IGhhdmUgY3Jhenlcbi1cdCAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuXG4rXHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxuK1x0ICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnRcbitcdCAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2VcbitcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcbitcdCAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xuIFxuQEAgLTEwOTgsOCArMTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0bWFwLVx1MDAzZWZvcndhcmQgPSBuZXdfbWFwLmZvcndhcmQ7XG4gXHRcdG1hcC1cdTAwM2VyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlO1xuIFx0fVxuLVx0c21wX3dtYigpO1xuLVx0bWFwLVx1MDAzZW5yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xuIFxuIFx0KnBwb3MgPSBjb3VudDtcbiBcdHJldCA9IGNvdW50O1xuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcbmluZGV4IDFkOTVhYjkzMTRiZjcuLjkwZDBhNzI0ZWFkZDggMTAwNjQ0XG4tLS0gYS9saWIvdnNwcmludGYuY1xuKysrIGIvbGliL3ZzcHJpbnRmLmNcbkBAIC03NjIsOSArNzYyLDggQEAgc3RhdGljIGludCBmaWxsX3B0cl9rZXkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRcbiB7XG4gXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnB0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7XG4gXG4tXHQvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3dtYigpO1xuLVx0V1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuQEAgLTc4MSwxMiArNzgwLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3RvX2hhc2h2YWwoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nICpoYXNodmFsX291dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhc2h2YWw7XG4gXG4tXHRpZiAoIVJFQURfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3JtYigpO1xuLVxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFx1MDAyNnB0cl9rZXkpO1xuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjE5Ljc3MTk5NzkzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNTk4MzU0OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIHNlcmllcyBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgcXVpdGUgYSBmZXcgZmlsZXM6IGBmcy9haW8uY2AsIGBmcy9leHQ0LypgLCBgZnMvZmlsZS5jYCwgYGZzL21udF9pZG1hcHBpbmcuY2AsIGBmcy9waWRmcy5jYCwgYGZzL3N1cGVyLmNgLCBhbmQgYGxpYi92c3ByaW50Zi5jYCBwcmltYXJpbHkuIFRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBzb21ldGhpbmcgcG90ZW50aWFsbHkgY29yZSBvciB3aWRlc3ByZWFkIGlzIGJlaW5nIHRvdWNoZWQuXG5cbk15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyBhIG1lbW9yeSBiYXJyaWVyIG1vZGVybml6YXRpb24gZWZmb3J0LiBJdCBzZWVtcyB0byBiZSBjb252ZXJ0aW5nIGBzbXBfd21iKClgIGFuZCBhc3NpZ25tZW50LyBgc21wX3JtYigpYCBhbmQgbG9hZCBwYWlycyB0byBgc21wX3N0b3JlX3JlbGVhc2UoKWAvYHNtcF9sb2FkX2FjcXVpcmUoKWAgaW4gbW9zdCBpbnN0YW5jZXMuIFRoZXJlJ3MgYWxzbyBzb21lIHJlZmFjdG9yaW5nIGluIGBmcy9leHQ0L2JhbGxvYy5jYCB3aXRoIHRoZSBncm91cCBjb3VudCBjaGVjaywgdXBkYXRlcyBpbiBgZnMvZmlsZS5jYCByZWxhdGVkIHRvIGZpbGUgZGVzY3JpcHRvciB0YWJsZSBleHBhbnNpb24gYW5kIHJlc2l6ZSBpbiBwcm9ncmVzcyBmbGFncywgYW5kIGFuIHVwZGF0ZSBpbiBgc3VwZXIuY2AuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZywgb3IganVzdCBhIHJlZmFjdG9yaW5nIG9yIGNsZWFudXAuIEJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgZnV6emluZywgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwYXRjaCdzIHNjb3BlIGFuZCBpZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgcnVuIHRlc3RzLlxuXG5JIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGd1aWRlbGluZXMuIE15IG1lbnRhbCBjaGVja2xpc3QgdGVsbHMgbWUgSSBzaG91bGQgZXhjbHVkZTogZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBjb25zdGFudCBjaGFuZ2VzIHRoYXQgZG9uJ3QgYWx0ZXIgZXhlY3V0aW9uLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBzcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzIG9yIC5yZW1vdmUgY2FsbGJhY2tzKS5cblxuQWxyaWdodCwgc28gKmlzKiB0aGlzIHNvbWV0aGluZyB0aGF0IGlzIHJlYWNoYWJsZT8gRG9lcyB0aGlzIHRvdWNoIGNvcmUgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXM/IFRoZSBjaGFuZ2VzIHRvIGBmcy9maWxlLmNgIGFuZCBgZnMvc3VwZXIuY2AgYXJlIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcuXG5cbkknbSBnb2luZyB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB1c2UgYGdpdCBsb2dgIG9yIGFub3RoZXIgdG9vbCB0byBnZXQgYSBjb25jaXNlIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgdG8gcXVpY2tseSBzdW1tYXJpemUgdGhlbS4gSSBuZWVkIHRvIGtub3cgdGhlICpwdXJwb3NlKiBiZWZvcmUgSSBjYW4gbWFrZSBhIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzozMy4zNzAzNTcwMTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxOTcwNDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN1cGVyX2ZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYz04Mz1zdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfdW5sb2NrX3NoYXJlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvc3VwZXIuYy04Ny1cXG5mcy9zdXBlci5jOjg4OnN0YXRpYyBib29sIHN1cGVyX2ZsYWdzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBmbGFncylcXG5mcy9zdXBlci5jLTg5LXtcXG4tLVxcbmZzL3N1cGVyLmM9MTEzPXN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzdXBlcl9sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgZXhjbClcXG4tLVxcbmZzL3N1cGVyLmMtMTE3LVxcdC8qIHdhaXQgdW50aWwgdGhlIHN1cGVyYmxvY2sgaXMgcmVhZHkgb3IgZHlpbmcgKi9cXG5mcy9zdXBlci5jOjExODpcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2c2ItXFx1MDAzZXNfZmxhZ3MsIHN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOIHwgU0JfRFlJTkcpKTtcXG5mcy9zdXBlci5jLTExOS1cXG5mcy9zdXBlci5jLTEyMC1cXHQvKiBEb24ndCBwb2ludGxlc3NseSBhY3F1aXJlIHNfdW1vdW50LiAqL1xcbmZzL3N1cGVyLmM6MTIxOlxcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxcbmZzL3N1cGVyLmMtMTIyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL3N1cGVyLmM9MjUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbi0tXFxuZnMvc3VwZXIuYy0yNzEtXFx0ICovXFxuZnMvc3VwZXIuYzoyNzI6XFx0aWYgKCFzdXBlcl9mbGFncyhzYiwgU0JfQk9STikpXFxuZnMvc3VwZXIuYy0yNzMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9zdXBlci5jPTY0OD1zdGF0aWMgYm9vbCBncmFiX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTY2MS1cXHR9XFxuZnMvc3VwZXIuYzo2NjI6XFx0d2FpdF92YXJfZXZlbnQoXFx1MDAyNnNiLVxcdTAwM2VzX2ZsYWdzLCBzdXBlcl9mbGFncyhzYiwgU0JfREVBRCkpO1xcbmZzL3N1cGVyLmMtNjYzLVxcdHB1dF9zdXBlcihzYik7XFxuLS1cXG5mcy9zdXBlci5jPTk3MT1zdGF0aWMgdm9pZCBfX2l0ZXJhdGVfc3VwZXJzKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnLFxcbi0tXFxuZnMvc3VwZXIuYy05ODEtXFx0ICAgICBzYiA9IG5leHRfc3VwZXIoc2IsIGZsYWdzKSkge1xcbmZzL3N1cGVyLmM6OTgyOlxcdFxcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxcbmZzL3N1cGVyLmMtOTgzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvc3VwZXIuYz0xMDIxPXZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcXG4tLVxcbmZzL3N1cGVyLmMtMTAyOS1cXG5mcy9zdXBlci5jOjEwMzA6XFx0XFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXFxuZnMvc3VwZXIuYy0xMDMxLVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzozMy44MDIzMzQyODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxNzI1ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc3VwZXJfZmxhZ3NgIGluIGBmcy9zdXBlci5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIGhvdyBmaWxlc3lzdGVtcyBhcmUgbWFuYWdlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgc3VwZXJfZmxhZ3NgIHZhcmlhYmxlLiBJdCdzIGluIGBmcy9zdXBlci5jYCwgd2hpY2gsIGFzIHdlIGtub3csIGlzIHRoZSBjZW50cmFsIGxvY2F0aW9uIGZvciBzdXBlcmJsb2NrLXJlbGF0ZWQgb3BlcmF0aW9ucy4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhlIHBsYWNlIHdoZXJlIGFsbCBvZiB0aGUgY3J1Y2lhbCBmaWxlc3lzdGVtIHBhcmFtZXRlcnMgYXJlIHN0b3JlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBmbGFncyBhcmUgc2V0IGFuZCB3aGF0IGVmZmVjdHMgdGhvc2UgZmxhZ3MgaGF2ZSBvbiB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlc2UgZmxhZ3MgaW5mbHVlbmNlIHRoaW5ncyBsaWtlIGZpbGVzeXN0ZW0gbW91bnRpbmcsIHVubW91bnRpbmcsIGFuZCBvdmVyYWxsIGludGVncml0eS4gSG9wZWZ1bGx5IHRoZSBmbGFncyBhcmUgd2VsbCBkb2N1bWVudGVkIGluIHRoZSBjb2RlLCBvciBhdCBsZWFzdCBoYXZlIG1lYW5pbmdmdWwgY29tbWVudHMgc28gSSBjYW4gcXVpY2tseSBncm9rIHRoZWlyIG1lYW5pbmcuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBmbGFncyB3aWxsIG9mZmVyIGluc2lnaHRzIGludG8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ2llcywgYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIHdlIGNhbiB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjM6MzUuOTQ0MDY0MTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXHRzdXBlcl91bmxvY2soc2IsIGZhbHNlKTtcXG4gIDg2OlxcdH1cXG4gIDg3OlxcdFxcbiAgODg6XFx0c3RhdGljIGJvb2wgc3VwZXJfZmxhZ3MoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWdzKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0LypcXG4gIDkxOlxcdFxcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBzdXBlcl93YWtlKCkgYW5kIGVuc3VyZXNcXG4gIDkyOlxcdFxcdCAqIHRoYXQgd2Ugc2VlIEBmbGFncyBhZnRlciB3ZSdyZSB3b2tlbi5cXG4gIDkzOlxcdFxcdCAqL1xcbiAgOTQ6XFx0XFx0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnNiLVxcdTAwM2VzX2ZsYWdzKSBcXHUwMDI2IGZsYWdzO1xcbiAgOTU6XFx0fVxcbiAgOTY6XFx0XFxuICA5NzpcXHQvKipcXG4gIDk4OlxcdCAqIHN1cGVyX2xvY2sgLSB3YWl0IGZvciBzdXBlcmJsb2NrIHRvIGJlY29tZSByZWFkeSBhbmQgbG9jayBpdFxcbiAgOTk6XFx0ICogQHNiOiBzdXBlcmJsb2NrIHRvIHdhaXQgZm9yXFxuIDEwMDpcXHQgKiBAZXhjbDogd2hldGhlciBleGNsdXNpdmUgYWNjZXNzIGlzIHJlcXVpcmVkXFxuIDEwMTpcXHQgKlxcbiAxMDI6XFx0ICogSWYgdGhlIHN1cGVyYmxvY2sgaGFzIG5laXRoZXIgcGFzc2VkIHRocm91Z2ggdmZzX2dldF90cmVlKCkgb3JcXG4gMTAzOlxcdCAqIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoKSB5ZXQgd2FpdCBmb3IgaXQgdG8gaGFwcGVuLiBFaXRoZXIgc3VwZXJibG9ja1xcbiAxMDQ6XFx0ICogY3JlYXRpb24gd2lsbCBzdWNjZWVkIGFuZCBTQl9CT1JOIGlzIHNldCBieSB2ZnNfZ2V0X3RyZWUoKSBvciB3ZSdyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzozNS45NDQyNDM2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NTY0OTE3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS2VybmVsIENvbmN1cnJlbmN5IGFuZCBNZW1vcnkgT3JkZXJpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgc2V0IG9mIGtlcm5lbCBtb2RpZmljYXRpb25zIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoZXNlIGNoYW5nZXMgYXJlIGhpdHRpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgYW5kIGNvbmN1cnJlbmN5IHN5bmNocm9uaXphdGlvbiBhY3Jvc3Mgc2V2ZXJhbCBrZXkgZmlsZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZnV6emVyLXJlbGV2YW50IHBvaW50cy5cblxuVGhlIGxpc3RlZCBmaWxlcyBhcmU6IGBmcy9haW8uY2AsIGBmcy9leHQ0L2JhbGxvYy5jYCwgYGZzL2V4dDQvZXh0NC5oYCwgYGZzL2V4dDQvbWJhbGxvYy5jYCwgYGZzL2V4dDQvcmVzaXplLmNgLCBgZnMvZmlsZS5jYCwgYGZzL21udF9pZG1hcHBpbmcuY2AsIGBmcy9waWRmcy5jYCwgYGZzL3N1cGVyLmNgLCBgZnMvdXNlcl9uYW1lc3BhY2UuY2AsIGFuZCBgbGliL3ZzcHJpbnRmLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBhcmVhcyBsaWtlIEFJTyBjb21wbGV0aW9uLCBFeHQ0IGJsb2NrIGFsbG9jYXRpb24gYW5kIHJlc2l6ZSBvcGVyYXRpb25zLCBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCwgbW91bnQgSUQgbWFwcGluZywgUElERkQgaW5mb3JtYXRpb24sIHN1cGVyYmxvY2sgaGFuZGxpbmcsIHVzZXIgbmFtZXNwYWNlIElEIG1hcHBpbmcsIGFuZCB2c3ByaW50ZiBwb2ludGVyIGhhc2hpbmcuXG5cbkNydWNpYWxseSwgdGhpcyBtb2RpZmljYXRpb24gZGlyZWN0bHkgYWZmZWN0cyBjb3JlIFZGUyBmdW5jdGlvbmFsaXR5LiBUaGlzIG1lYW5zIHRoZXNlIGNvbmN1cnJlbmN5IGNoYW5nZXMgKmFyZSogcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBteSBcIldvcnRoRnV6emluZz10cnVlXCIgZmxhZy4gSSBoYXZlIHRvIGJlIGV4dHJlbWVseSBtZXRpY3Vsb3VzIGhlcmUuXG5cbk5vdywgSSBuZWVkIHRvIGFkaGVyZSB0byB0aGUgcnVsZXMuIEJlY2F1c2UgdGhpcyBoaXRzIGNvcmUga2VybmVsIGxvZ2ljLCBJICptdXN0KiBpZGVudGlmeSBzdWl0YWJsZSBgRm9jdXNTeW1ib2xzYCBmb3IgZnV6emluZywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgcmVxdWlyZXMgbWUgdG8gZmluZCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBhbnkgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgYWxzbyBoYXZlIHRvIGlkZW50aWZ5IHRoZSBuZWVkZWQgYEVuYWJsZUNvbmZpZ3NgLlxuXG5MZXQncyBkaXZlIGludG8gZWFjaCBmaWxlLCBzdGFydGluZyB3aXRoIGBmcy9haW8uY2AuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGFpb19jb21wbGV0ZWAgYW5kIGBhaW9fcmVhZF9ldmVudHNfcmluZ2AuIEhtbSwgYGFpb19jb21wbGV0ZWAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCwgYnV0IGBhaW9fcmVhZF9ldmVudHNfcmluZ2AgaXMgY2FsbGVkIGJ5IGBpb19nZXRldmVudHNgIGFuZCBgaW9fcGdldGV2ZW50c2AsIG1ha2luZyBpdCBtdWNoIG1vcmUgcHJvbWlzaW5nLiBJIG5lZWQgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBjb25maXJtLiBJIHNob3VsZCBkZWZpbml0ZWx5IGxvb2sgYXQgYWxsIG9mIGBmcy9haW8uY2AgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo0MS44MDA3Mzk3ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMDQ3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihpb19nZXRldmVudHN8cmVhZF9ldmVudHN8YWlvX2NvbXBsZXRlKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9haW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9haW8uYz01Nj1zdHJ1Y3QgYWlvX3Jpbmcge1xcbi0tXFxuZnMvYWlvLmMtNTktXFx0dW5zaWduZWRcXHRoZWFkO1xcdC8qIFdyaXR0ZW4gdG8gYnkgdXNlcmxhbmQgb3IgdW5kZXIgcmluZ19sb2NrXFxuZnMvYWlvLmM6NjA6XFx0XFx0XFx0XFx0ICogbXV0ZXggYnkgYWlvX3JlYWRfZXZlbnRzX3JpbmcoKS4gKi9cXG5mcy9haW8uYy02MS1cXHR1bnNpZ25lZFxcdHRhaWw7XFxuLS1cXG5mcy9haW8uYz00NjA9c3RhdGljIGludCBhaW9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5mcy9haW8uYy00NzYtXFxuZnMvYWlvLmM6NDc3OlxcdC8qIFRoZSByaW5nX2xvY2sgbXV0ZXguICBUaGUgcHJldmVudHMgYWlvX3JlYWRfZXZlbnRzKCkgZnJvbSB3cml0aW5nXFxuZnMvYWlvLmMtNDc4LVxcdCAqIHRvIHRoZSByaW5nJ3MgaGVhZCwgYW5kIHByZXZlbnRzIHBhZ2UgbWlncmF0aW9uIGZyb20gbXVja2luZyBpblxcbi0tXFxuZnMvYWlvLmM9MTAwND1zdGF0aWMgYm9vbCBfX2dldF9yZXFzX2F2YWlsYWJsZShzdHJ1Y3Qga2lvY3R4ICpjdHgpXFxuLS1cXG5mcy9haW8uYy0xMDMzLSAqXFx0bnVtYmVyIG9mIGZyZWUgc2xvdHMgaW4gdGhlIGNvbXBsZXRpb24gcmluZy4gIFRoaXMgY2FuIGJlIGNhbGxlZFxcbmZzL2Fpby5jOjEwMzQ6ICpcXHRmcm9tIGFpb19jb21wbGV0ZSgpICh0byBvcHRpbWlzdGljYWxseSB1cGRhdGUgcmVxc19hdmFpbGFibGUpIG9yXFxuZnMvYWlvLmMtMTAzNS0gKlxcdGZyb20gYWlvX2dldF9yZXEoKSAodGhlIHdlJ3JlIG91dCBvZiBldmVudHMgY2FzZSkuICBJdCBtdXN0IGJlXFxuLS1cXG5mcy9haW8uYz0xMDY3PXN0YXRpYyB2b2lkIHVzZXJfcmVmaWxsX3JlcXNfYXZhaWxhYmxlKHN0cnVjdCBraW9jdHggKmN0eClcXG4tLVxcbmZzL2Fpby5jLTEwNzMtXFxuZnMvYWlvLmM6MTA3NDpcXHRcXHQvKiBBY2Nlc3Mgb2YgcmluZy1cXHUwMDNlaGVhZCBtYXkgcmFjZSB3aXRoIGFpb19yZWFkX2V2ZW50c19yaW5nKClcXG5mcy9haW8uYy0xMDc1LVxcdFxcdCAqIGhlcmUsIGJ1dCB0aGF0J3Mgb2theSBzaW5jZSB3aGV0aGVyIHdlIHJlYWQgdGhlIG9sZCB2ZXJzaW9uXFxuLS1cXG5mcy9haW8uYy0xMDc3LVxcdFxcdCAqIHBhcnQgaXMgdGhhdCBoZWFkIGNhbm5vdCBwYXNzIHRhaWwgc2luY2Ugd2UgcHJldmVudFxcbmZzL2Fpby5jOjEwNzg6XFx0XFx0ICogYWlvX2NvbXBsZXRlKCkgZnJvbSB1cGRhdGluZyB0YWlsIGJ5IGhvbGRpbmdcXG5mcy9haW8uYy0xMDc5LVxcdFxcdCAqIGN0eC1cXHUwMDNlY29tcGxldGlvbl9sb2NrLiAgRXZlbiBpZiBoZWFkIGlzIGludmFsaWQsIHRoZSBjaGVja1xcbi0tXFxuZnMvYWlvLmM9MTE2Nj1zdHJ1Y3QgYWlvX3dhaXRlciB7XFxuLS1cXG5mcy9haW8uYy0xMTcwLVxcbmZzL2Fpby5jOjExNzE6LyogYWlvX2NvbXBsZXRlXFxuZnMvYWlvLmMtMTE3Mi0gKlxcdENhbGxlZCB3aGVuIHRoZSBpbyByZXF1ZXN0IG9uIHRoZSBnaXZlbiBpb2NiIGlzIGNvbXBsZXRlLlxcbmZzL2Fpby5jLTExNzMtICovXFxuZnMvYWlvLmM6MTE3NDpzdGF0aWMgdm9pZCBhaW9fY29tcGxldGUoc3RydWN0IGFpb19raW9jYiAqaW9jYilcXG5mcy9haW8uYy0xMTc1LXtcXG4tLVxcbmZzL2Fpby5jPTEyNTg9c3RhdGljIGlubGluZSB2b2lkIGlvY2JfcHV0KHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXFxuLS1cXG5mcy9haW8uYy0xMjYwLVxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmlvY2ItXFx1MDAzZWtpX3JlZmNudCkpIHtcXG5mcy9haW8uYzoxMjYxOlxcdFxcdGFpb19jb21wbGV0ZShpb2NiKTtcXG5mcy9haW8uYy0xMjYyLVxcdFxcdGlvY2JfZGVzdHJveShpb2NiKTtcXG4tLVxcbmZzL2Fpby5jLTEyNjUtXFxuZnMvYWlvLmM6MTI2NjovKiBhaW9fcmVhZF9ldmVudHNfcmluZ1xcbmZzL2Fpby5jLTEyNjctICpcXHRQdWxsIGFuIGV2ZW50IG9mZiBvZiB0aGUgaW9jdHgncyBldmVudCByaW5nLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mXFxuLS1cXG5mcy9haW8uYy0xMjY5LSAqL1xcbmZzL2Fpby5jOjEyNzA6c3RhdGljIGxvbmcgYWlvX3JlYWRfZXZlbnRzX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LFxcbmZzL2Fpby5jLTEyNzEtXFx0XFx0XFx0XFx0IHN0cnVjdCBpb19ldmVudCBfX3VzZXIgKmV2ZW50LCBsb25nIG5yKVxcbi0tXFxuZnMvYWlvLmMtMTI4MS1cXHQgKiBhbmQgcmVwZWF0LiBUaGlzIHNob3VsZCBiZSByYXJlIGVub3VnaCB0aGF0IGl0IGRvZXNuJ3QgY2F1c2VcXG5mcy9haW8uYzoxMjgyOlxcdCAqIHBlZm9ybWFuY2UgaXNzdWVzLiBTZWUgdGhlIGNvbW1lbnQgaW4gcmVhZF9ldmVudHMoKSBmb3IgbW9yZSBkZXRhaWwuXFxuZnMvYWlvLmMtMTI4My1cXHQgKi9cXG4tLVxcbmZzL2Fpby5jLTEyOTItXFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxcbmZzL2Fpby5jOjEyOTM6XFx0ICogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGFpb19jb21wbGV0ZSgpLlxcbmZzL2Fpby5jLTEyOTQtXFx0ICovXFxuLS1cXG5mcy9haW8uYy0xMzQ1LVxcbmZzL2Fpby5jOjEzNDY6c3RhdGljIGJvb2wgYWlvX3JlYWRfZXZlbnRzKHN0cnVjdCBraW9jdHggKmN0eCwgbG9uZyBtaW5fbnIsIGxvbmcgbnIsXFxuZnMvYWlvLmMtMTM0Ny1cXHRcXHRcXHQgICAgc3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsIGxvbmcgKmkpXFxuZnMvYWlvLmMtMTM0OC17XFxuZnMvYWlvLmM6MTM0OTpcXHRsb25nIHJldCA9IGFpb19yZWFkX2V2ZW50c19yaW5nKGN0eCwgZXZlbnQgKyAqaSwgbnIgLSAqaSk7XFxuZnMvYWlvLmMtMTM1MC1cXG4tLVxcbmZzL2Fpby5jLTEzNjItXFxuZnMvYWlvLmM6MTM2MzpzdGF0aWMgbG9uZyByZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxcbmZzL2Fpby5jLTEzNjQtXFx0XFx0XFx0c3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsXFxuLS1cXG5mcy9haW8uYy0xMzcxLVxcdC8qXFxuZnMvYWlvLmM6MTM3MjpcXHQgKiBOb3RlIHRoYXQgYWlvX3JlYWRfZXZlbnRzKCkgaXMgYmVpbmcgY2FsbGVkIGFzIHRoZSBjb25kaXRpb25hbCAtIGkuZS5cXG5mcy9haW8uYy0xMzczLVxcdCAqIHdlJ3JlIGNhbGxpbmcgaXQgYWZ0ZXIgcHJlcGFyZV90b193YWl0KCkgaGFzIHNldCB0YXNrIHN0YXRlIHRvXFxuLS1cXG5mcy9haW8uYy0xMzc1LVxcdCAqXFxuZnMvYWlvLmM6MTM3NjpcXHQgKiBCdXQgYWlvX3JlYWRfZXZlbnRzKCkgY2FuIGJsb2NrLCBhbmQgaWYgaXQgYmxvY2tzIGl0J3MgZ29pbmcgdG8gZmxpcFxcbmZzL2Fpby5jLTEzNzctXFx0ICogdGhlIHRhc2sgc3RhdGUgYmFjayB0byBUQVNLX1JVTk5JTkcuXFxuLS1cXG5mcy9haW8uYy0xMzg0LVxcdCAqL1xcbmZzL2Fpby5jOjEzODU6XFx0YWlvX3JlYWRfZXZlbnRzKGN0eCwgbWluX25yLCBuciwgZXZlbnQsIFxcdTAwMjZyZXQpO1xcbmZzL2Fpby5jLTEzODYtXFx0aWYgKHVudGlsID09IDAgfHwgcmV0IFxcdTAwM2MgMCB8fCByZXQgXFx1MDAzZT0gbWluX25yKVxcbi0tXFxuZnMvYWlvLmMtMTQwNS1cXG5mcy9haW8uYzoxNDA2OlxcdFxcdGlmIChhaW9fcmVhZF9ldmVudHMoY3R4LCBtaW5fbnIsIG5yLCBldmVudCwgXFx1MDAyNnJldCkgfHwgcmV0MilcXG5mcy9haW8uYy0xNDA3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvYWlvLmM9MTUzMj1zdGF0aWMgdm9pZCBhaW9fcmVtb3ZlX2lvY2Ioc3RydWN0IGFpb19raW9jYiAqaW9jYilcXG4tLVxcbmZzL2Fpby5jLTE1NDEtXFxuZnMvYWlvLmM6MTU0MjpzdGF0aWMgdm9pZCBhaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXFxuZnMvYWlvLmMtMTU0My17XFxuLS1cXG5mcy9haW8uYz0xNTYxPXN0YXRpYyBpbnQgYWlvX3ByZXBfcncoc3RydWN0IGtpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiLCBpbnQgcndfdHlwZSlcXG4tLVxcbmZzL2Fpby5jLTE1NjUtXFx0cmVxLVxcdTAwM2VraV93cml0ZV9zdHJlYW0gPSAwO1xcbmZzL2Fpby5jOjE1NjY6XFx0cmVxLVxcdTAwM2VraV9jb21wbGV0ZSA9IGFpb19jb21wbGV0ZV9ydztcXG5mcy9haW8uYy0xNTY3LVxcdHJlcS1cXHUwMDNlcHJpdmF0ZSA9IE5VTEw7XFxuLS1cXG5mcy9haW8uYz0yMDc0PXN0YXRpYyBpbnQgaW9fc3VibWl0X29uZShzdHJ1Y3Qga2lvY3R4ICpjdHgsIHN0cnVjdCBpb2NiIF9fdXNlciAqdXNlcl9pb2NiLFxcbi0tXFxuZnMvYWlvLmMtMjEwOS1cXHQvKlxcbmZzL2Fpby5jOjIxMTA6XFx0ICogSWYgZXJyIGlzIDAsIHdlJ2QgZWl0aGVyIGRvbmUgYWlvX2NvbXBsZXRlKCkgb3Vyc2VsdmVzIG9yIGhhdmVcXG5mcy9haW8uYy0yMTExLVxcdCAqIGFycmFuZ2VkIGZvciB0aGF0IHRvIGJlIGRvbmUgYXN5bmNocm9ub3VzbHkuICBBbnl0aGluZyBub24temVyb1xcbi0tXFxuZnMvYWlvLmM9MjIyNz1TWVNDQUxMX0RFRklORTMoaW9fY2FuY2VsLCBhaW9fY29udGV4dF90LCBjdHhfaWQsIHN0cnVjdCBpb2NiIF9fdXNlciAqLCBpb2NiLFxcbi0tXFxuZnMvYWlvLmMtMjI2OC1cXG5mcy9haW8uYzoyMjY5OnN0YXRpYyBsb25nIGRvX2lvX2dldGV2ZW50cyhhaW9fY29udGV4dF90IGN0eF9pZCxcXG5mcy9haW8uYy0yMjcwLVxcdFxcdGxvbmcgbWluX25yLFxcbi0tXFxuZnMvYWlvLmMtMjI4MC1cXHRcXHRpZiAobGlrZWx5KG1pbl9uciBcXHUwMDNjPSBuciBcXHUwMDI2XFx1MDAyNiBtaW5fbnIgXFx1MDAzZT0gMCkpXFxuZnMvYWlvLmM6MjI4MTpcXHRcXHRcXHRyZXQgPSByZWFkX2V2ZW50cyhpb2N0eCwgbWluX25yLCBuciwgZXZlbnRzLCB1bnRpbCk7XFxuZnMvYWlvLmMtMjI4Mi1cXHRcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2aW9jdHgtXFx1MDAzZXVzZXJzKTtcXG4tLVxcbmZzL2Fpby5jLTIyODctXFxuZnMvYWlvLmM6MjI4ODovKiBpb19nZXRldmVudHM6XFxuZnMvYWlvLmMtMjI4OS0gKlxcdEF0dGVtcHRzIHRvIHJlYWQgYXQgbGVhc3QgbWluX25yIGV2ZW50cyBhbmQgdXAgdG8gbnIgZXZlbnRzIGZyb21cXG4tLVxcbmZzL2Fpby5jLTIzMDEtXFxuZnMvYWlvLmM6MjMwMjpTWVNDQUxMX0RFRklORTUoaW9fZ2V0ZXZlbnRzLCBhaW9fY29udGV4dF90LCBjdHhfaWQsXFxuZnMvYWlvLmMtMjMwMy1cXHRcXHRsb25nLCBtaW5fbnIsXFxuLS1cXG5mcy9haW8uYy0yMzEzLVxcbmZzL2Fpby5jOjIzMTQ6XFx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXFx1MDAyNnRzIDogTlVMTCk7XFxuZnMvYWlvLmMtMjMxNS1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4tLVxcbmZzL2Fpby5jPTIzMjc9U1lTQ0FMTF9ERUZJTkU2KGlvX3BnZXRldmVudHMsXFxuLS1cXG5mcy9haW8uYy0yMzQ5LVxcbmZzL2Fpby5jOjIzNTA6XFx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXFx1MDAyNnRzIDogTlVMTCk7XFxuZnMvYWlvLmMtMjM1MS1cXG4tLVxcbmZzL2Fpby5jPTIzNjI9U1lTQ0FMTF9ERUZJTkU2KGlvX3BnZXRldmVudHNfdGltZTMyLFxcbi0tXFxuZnMvYWlvLmMtMjM4NS1cXG5mcy9haW8uYzoyMzg2OlxcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFxcdTAwMjZ0cyA6IE5VTEwpO1xcbmZzL2Fpby5jLTIzODctXFxuLS1cXG5mcy9haW8uYy0yMzk5LVxcbmZzL2Fpby5jOjI0MDA6U1lTQ0FMTF9ERUZJTkU1KGlvX2dldGV2ZW50c190aW1lMzIsIF9fdTMyLCBjdHhfaWQsXFxuZnMvYWlvLmMtMjQwMS1cXHRcXHRfX3MzMiwgbWluX25yLFxcbi0tXFxuZnMvYWlvLmMtMjQxMS1cXG5mcy9haW8uYzoyNDEyOlxcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFxcdTAwMjZ0IDogTlVMTCk7XFxuZnMvYWlvLmMtMjQxMy1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4tLVxcbmZzL2Fpby5jPTI0Mjk9Q09NUEFUX1NZU0NBTExfREVGSU5FNihpb19wZ2V0ZXZlbnRzLFxcbi0tXFxuZnMvYWlvLmMtMjQ1MS1cXG5mcy9haW8uYzoyNDUyOlxcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFxcdTAwMjZ0IDogTlVMTCk7XFxuZnMvYWlvLmMtMjQ1My1cXG4tLVxcbmZzL2Fpby5jPTI0NjQ9Q09NUEFUX1NZU0NBTExfREVGSU5FNihpb19wZ2V0ZXZlbnRzX3RpbWU2NCxcXG4tLVxcbmZzL2Fpby5jLTI0ODYtXFxuZnMvYWlvLmM6MjQ4NzpcXHRyZXQgPSBkb19pb19nZXRldmVudHMoY3R4X2lkLCBtaW5fbnIsIG5yLCBldmVudHMsIHRpbWVvdXQgPyBcXHUwMDI2dCA6IE5VTEwpO1xcbmZzL2Fpby5jLTI0ODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjQyLjAyMzc5ODA3MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzE4MTI1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXh0NCBSZXNpemUgQ29kZSBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHJlc2l6aW5nIGNvZGUuIFRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgb3V0IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhlIGdyb3VwIGFuZCBibG9jayBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoYXQgbWVhbnMgc3RhcnRpbmcgd2l0aCBhIGZldyBrZXkgZnVuY3Rpb25zOiBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AgaW4gYGZzL2V4dDQvYmFsbG9jLmNgLCBgZXh0NF9nZXRfZ3JvdXBzX2NvdW50YCBpbiBgZnMvZXh0NC9leHQ0LmhgLCBhbmQgYGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50YCBpbiBgZnMvZXh0NC9tYmFsbG9jLmNgLiBUaGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgbWV0YWRhdGEgaXMgc3RydWN0dXJlZCBhbmQgYWNjZXNzZWQuIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGV4dDRfdXBkYXRlX3N1cGVyYCBpbiBgZnMvZXh0NC9yZXNpemUuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN1cGVyYmxvY2sgaXMgbW9kaWZpZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgcmVzaXplIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB0aGUgbm9uLXN0YXRpYyBvbmVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4dGVybmFsIGNhbGxzIGludGVyYWN0IHdpdGggdGhlIGNvcmUgcmVzaXplIG9wZXJhdGlvbnMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgb3V0IGBleHQ0X3Jlc2l6ZV9mc2AsIGBleHQ0X2dyb3VwX2FkZGAsIGFuZCBgZXh0NF9ncm91cF9leHRlbmRgLiBTaW5jZSB0aGVzZSBhcmUgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBvcmNoZXN0cmF0ZSB0aGUgcmVzaXppbmcuIFRvIHVuZGVyc3RhbmQgdGhhdCwgSSBuZWVkIHRvIGxvb2sgaW50byBgZnMvZXh0NC9yZXNpemUuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGNhbGxzLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgaW4gYGZzL2V4dDQvcmVzaXplLmNgIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgdGhlIHdob2xlIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo0NC45OTU2MTMzMjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Njg1OTE4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0Xy4qcmVzaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTMyODY9ZXh0ZXJuIGludCBleHQ0X2dyb3VwX2V4dGVuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMzI4OC1cXHRcXHRcXHRcXHRleHQ0X2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQpO1xcbmZzL2V4dDQvZXh0NC5oOjMyODk6ZXh0ZXJuIGludCBleHQ0X3Jlc2l6ZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQpO1xcbmZzL2V4dDQvZXh0NC5oLTMyOTAtZXh0ZXJuIHVuc2lnbmVkIGludCBleHQ0X2xpc3RfYmFja3VwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9NDAxNz1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdG1hcF91cHRvZGF0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNDAyMS1cXG5mcy9leHQ0L2V4dDQuaDo0MDIyOmV4dGVybiBpbnQgZXh0NF9yZXNpemVfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvZXh0NC9leHQ0Lmg6NDAyMzpleHRlcm4gaW50IGV4dDRfcmVzaXplX2VuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIHVwZGF0ZV9iYWNrdXBzKTtcXG5mcy9leHQ0L2V4dDQuaC00MDI0LVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTk1ND1zdGF0aWMgbG9uZyBleHQ0X2lvY3RsX2dyb3VwX2FkZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy05NTktXFxuZnMvZXh0NC9pb2N0bC5jOjk2MDpcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9iZWdpbihzYik7XFxuZnMvZXh0NC9pb2N0bC5jLTk2MS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTk4OC1ncm91cF9hZGRfb3V0OlxcbmZzL2V4dDQvaW9jdGwuYzo5ODk6XFx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgZmFsc2UpO1xcbmZzL2V4dDQvaW9jdGwuYy05OTAtXFx0aWYgKGVyciA9PSAwKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xNjAwLVxcbmZzL2V4dDQvaW9jdGwuYzoxNjAxOlxcdFxcdGVyciA9IGV4dDRfcmVzaXplX2JlZ2luKHNiKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTYwMi1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE2MzItZ3JvdXBfZXh0ZW5kX291dDpcXG5mcy9leHQ0L2lvY3RsLmM6MTYzMzpcXHRcXHRlcnIyID0gZXh0NF9yZXNpemVfZW5kKHNiLCBmYWxzZSk7XFxuZnMvZXh0NC9pb2N0bC5jLTE2MzQtXFx0XFx0aWYgKGVyciA9PSAwKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE3NDQtXFxuZnMvZXh0NC9pb2N0bC5jOjE3NDU6XFx0XFx0ZXJyID0gZXh0NF9yZXNpemVfYmVnaW4oc2IpO1xcbmZzL2V4dDQvaW9jdGwuYy0xNzQ2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTc1Mi1cXG5mcy9leHQ0L2lvY3RsLmM6MTc1MzpcXHRcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9mcyhzYiwgbl9ibG9ja3NfY291bnQpO1xcbmZzL2V4dDQvaW9jdGwuYy0xNzU0LVxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlc19qb3VybmFsKSB7XFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTc2OC1yZXNpemVmc19vdXQ6XFxuZnMvZXh0NC9pb2N0bC5jOjE3Njk6XFx0XFx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgdHJ1ZSk7XFxuZnMvZXh0NC9pb2N0bC5jLTE3NzAtXFx0XFx0aWYgKGVyciA9PSAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz0zMz12b2lkIGV4dDRfa3ZmcmVlX2FycmF5X3JjdSh2b2lkICp0b19mcmVlKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy00NS1cXG5mcy9leHQ0L3Jlc2l6ZS5jOjQ2OmludCBleHQ0X3Jlc2l6ZV9iZWdpbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvcmVzaXplLmMtNDcte1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy01OC1cXHRpZiAoc2JpLVxcdTAwM2VzX2VzLVxcdTAwM2VzX3Jlc2VydmVkX2dkdF9ibG9ja3MgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3Jlc2l6ZS5jOjU5OlxcdCAgICAhZXh0NF9oYXNfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpKSB7XFxuZnMvZXh0NC9yZXNpemUuYzo2MDpcXHRcXHRleHQ0X2Vycm9yKHNiLCBcXFwicmVzaXplX2lub2RlIGRpc2FibGVkIGJ1dCByZXNlcnZlZCBHRFQgYmxvY2tzIG5vbi16ZXJvXFxcIik7XFxuZnMvZXh0NC9yZXNpemUuYy02MS1cXHRcXHRyZXR1cm4gLUVGU0NPUlJVUFRFRDtcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtNzAtXFx0ICAgIGxlMzJfdG9fY3B1KHNiaS1cXHUwMDNlc19lcy1cXHUwMDNlc19maXJzdF9kYXRhX2Jsb2NrKSkge1xcbmZzL2V4dDQvcmVzaXplLmM6NzE6XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwid29uJ3QgcmVzaXplIHVzaW5nIGJhY2t1cCBzdXBlcmJsb2NrIGF0ICVsbHVcXFwiLFxcbmZzL2V4dDQvcmVzaXplLmMtNzItXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZylzYmktXFx1MDAzZXNfc2JoLVxcdTAwM2ViX2Jsb2NrbnIpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy05Ny1cXG5mcy9leHQ0L3Jlc2l6ZS5jOjk4OmludCBleHQ0X3Jlc2l6ZV9lbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCB1cGRhdGVfYmFja3VwcylcXG5mcy9leHQ0L3Jlc2l6ZS5jLTk5LXtcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MTIwPXN0YXRpYyBpbnQgdmVyaWZ5X2dyb3VwX2lucHV0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTIxMi0vKlxcbmZzL2V4dDQvcmVzaXplLmM6MjEzOiAqIGV4dDRfbmV3X2ZsZXhfZ3JvdXBfZGF0YSBpcyB1c2VkIGJ5IDY0Yml0LXJlc2l6ZSBpbnRlcmZhY2UgdG8gYWRkIGEgZmxleFxcbmZzL2V4dDQvcmVzaXplLmMtMjE0LSAqIGdyb3VwIGVhY2ggdGltZS5cXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MjE2PXN0cnVjdCBleHQ0X25ld19mbGV4X2dyb3VwX2RhdGEge1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW4gQGdyb3VwcyAqL1xcbmZzL2V4dDQvcmVzaXplLmM6MjIxOlxcdGV4dDRfZ3JvdXBfdCByZXNpemVfYmc7XFx0XFx0XFx0LyogbnVtYmVyIG9mIGFsbG9jYXRlZFxcbmZzL2V4dDQvcmVzaXplLmMtMjIyLVxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19ncm91cF9kYXRhICovXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jPTQyMj1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiY2xlYW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtNDQzLVxcbmZzL2V4dDQvcmVzaXplLmM6NDQ0OnN0YXRpYyBpbnQgZXh0NF9yZXNpemVfZW5zdXJlX2NyZWRpdHNfYmF0Y2goaGFuZGxlX3QgKmhhbmRsZSwgaW50IGNyZWRpdHMpXFxuZnMvZXh0NC9yZXNpemUuYy00NDUte1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz00NTk9c3RhdGljIGludCBzZXRfZmxleGJnX2Jsb2NrX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy00ODctXFxuZnMvZXh0NC9yZXNpemUuYzo0ODg6XFx0XFx0ZXJyID0gZXh0NF9yZXNpemVfZW5zdXJlX2NyZWRpdHNfYmF0Y2goaGFuZGxlLCAxKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTQ4OS1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9NTMwPXN0YXRpYyBpbnQgc2V0dXBfbmV3X2ZsZXhfZ3JvdXBfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTU3Ni1cXHRcXHRcXHRleHQ0X2RlYnVnKFxcXCJ1cGRhdGUgYmFja3VwIGdyb3VwICUjMDRsbHhcXFxcblxcXCIsIGJsb2NrKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjU3NzpcXHRcXHRcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xcbmZzL2V4dDQvcmVzaXplLmMtNTc4LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy02MzUtXFx0XFx0YmxvY2sgPSBncm91cF9kYXRhW2ldLmJsb2NrX2JpdG1hcDtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjYzNjpcXHRcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xcbmZzL2V4dDQvcmVzaXplLmMtNjM3LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy02NjQtXFx0XFx0YmxvY2sgPSBncm91cF9kYXRhW2ldLmlub2RlX2JpdG1hcDtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjY2NTpcXHRcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xcbmZzL2V4dDQvcmVzaXplLmMtNjY2LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz0xMTQwPXN0YXRpYyB2b2lkIHVwZGF0ZV9iYWNrdXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsa19vZmYsIGNoYXIgKmRhdGEsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTExNzUtXFx0XFx0LyogT3V0IG9mIGpvdXJuYWwgc3BhY2UsIGFuZCBjYW4ndCBnZXQgbW9yZSAtIGFib3J0IC0gc28gc2FkICovXFxuZnMvZXh0NC9yZXNpemUuYzoxMTc2OlxcdFxcdGVyciA9IGV4dDRfcmVzaXplX2Vuc3VyZV9jcmVkaXRzX2JhdGNoKGhhbmRsZSwgMSk7XFxuZnMvZXh0NC9yZXNpemUuYy0xMTc3LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz0xMjUyPXN0YXRpYyBpbnQgZXh0NF9hZGRfbmV3X2Rlc2NzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9yZXNpemUuYzoxMjUzOlxcdFxcdFxcdCAgICAgIGV4dDRfZ3JvdXBfdCBncm91cCwgc3RydWN0IGlub2RlICpyZXNpemVfaW5vZGUsXFxuZnMvZXh0NC9yZXNpemUuYy0xMjU0LVxcdFxcdFxcdCAgICAgIGV4dDRfZ3JvdXBfdCBjb3VudClcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MTcwMz1pbnQgZXh0NF9ncm91cF9hZGQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfbmV3X2dyb3VwX2RhdGEgKmlucHV0KVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xNzE3LVxcdGlmIChnZGJfb2ZmID09IDAgXFx1MDAyNlxcdTAwMjYgIWV4dDRfaGFzX2ZlYXR1cmVfc3BhcnNlX3N1cGVyKHNiKSkge1xcbmZzL2V4dDQvcmVzaXplLmM6MTcxODpcXHRcXHRleHQ0X3dhcm5pbmcoc2IsIFxcXCJDYW4ndCByZXNpemUgbm9uLXNwYXJzZSBmaWxlc3lzdGVtIGZ1cnRoZXJcXFwiKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3MTktXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtMTczNC1cXHRpZiAocmVzZXJ2ZWRfZ2RiIHx8IGdkYl9vZmYgPT0gMCkge1xcbmZzL2V4dDQvcmVzaXplLmM6MTczNTpcXHRcXHRpZiAoIWV4dDRfaGFzX2ZlYXR1cmVfcmVzaXplX2lub2RlKHNiKSB8fFxcbmZzL2V4dDQvcmVzaXplLmMtMTczNi1cXHRcXHQgICAgIWxlMTZfdG9fY3B1KGVzLVxcdTAwM2VzX3Jlc2VydmVkX2dkdF9ibG9ja3MpKSB7XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3NDItXFx0XFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE3NDM6XFx0XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwiRXJyb3Igb3BlbmluZyByZXNpemUgaW5vZGVcXFwiKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3NDQtXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz0xODM3PWludCBleHQ0X2dyb3VwX2V4dGVuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NjMtXFx0aWYgKG5fYmxvY2tzX2NvdW50IFxcdTAwM2Mgb19ibG9ja3NfY291bnQpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE4NjQ6XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwiY2FuJ3Qgc2hyaW5rIEZTIC0gcmVzaXplIGFib3J0ZWRcXFwiKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NjUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NzEtXFx0aWYgKGxhc3QgPT0gMCkge1xcbmZzL2V4dDQvcmVzaXplLmM6MTg3MjpcXHRcXHRleHQ0X3dhcm5pbmcoc2IsIFxcXCJuZWVkIHRvIHVzZSBleHQyb25saW5lIHRvIHJlc2l6ZSBmdXJ0aGVyXFxcIik7XFxuZnMvZXh0NC9yZXNpemUuYy0xODczLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4OTItXFx0aWYgKElTX0VSUihiaCkpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE4OTM6XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwiY2FuJ3QgcmVhZCBsYXN0IGJsb2NrLCByZXNpemUgYWJvcnRlZFxcXCIpO1xcbmZzL2V4dDQvcmVzaXplLmMtMTg5NC1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MTkxMj1zdGF0aWMgaW50IGV4dDRfY29udmVydF9tZXRhX2JnKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5NTctXFx0bG9ja19idWZmZXIoc2JpLVxcdTAwM2VzX3NiaCk7XFxuZnMvZXh0NC9yZXNpemUuYzoxOTU4OlxcdGV4dDRfY2xlYXJfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpO1xcbmZzL2V4dDQvcmVzaXplLmMtMTk1OS1cXHRleHQ0X3NldF9mZWF0dXJlX21ldGFfYmcoc2IpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xOTg4LWludmFsaWRfcmVzaXplX2lub2RlOlxcbmZzL2V4dDQvcmVzaXplLmM6MTk4OTpcXHRleHQ0X2Vycm9yKHNiLCBcXFwiY29ycnVwdGVkL2luY29uc2lzdGVudCByZXNpemUgaW5vZGVcXFwiKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTAtXFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTMtLypcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE5OTQ6ICogZXh0NF9yZXNpemVfZnMoKSByZXNpemVzIGEgZnMgdG8gbmV3IHNpemUgc3BlY2lmaWVkIGJ5IEBuX2Jsb2Nrc19jb3VudFxcbmZzL2V4dDQvcmVzaXplLmMtMTk5NS0gKlxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xOTk4LSAqL1xcbmZzL2V4dDQvcmVzaXplLmM6MTk5OTppbnQgZXh0NF9yZXNpemVfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IG5fYmxvY2tzX2NvdW50KVxcbmZzL2V4dDQvcmVzaXplLmMtMjAwMC17XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTIwMjAtXFx0aWYgKElTX0VSUihiaCkpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjIwMjE6XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwiY2FuJ3QgcmVhZCBsYXN0IGJsb2NrLCByZXNpemUgYWJvcnRlZFxcXCIpO1xcbmZzL2V4dDQvcmVzaXplLmMtMjAyMi1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtMjA0My1cXHRcXHQvKiBPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkICovXFxuZnMvZXh0NC9yZXNpemUuYzoyMDQ0OlxcdFxcdGV4dDRfd2FybmluZyhzYiwgXFxcImNhbid0IHNocmluayBGUyAtIHJlc2l6ZSBhYm9ydGVkXFxcIik7XFxuZnMvZXh0NC9yZXNpemUuYy0yMDQ1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMDUzLVxcdGlmIChuX2dyb3VwIFxcdTAwM2U9ICgweEZGRkZGRkZGVUwgLyBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpKSkge1xcbmZzL2V4dDQvcmVzaXplLmM6MjA1NDpcXHRcXHRleHQ0X3dhcm5pbmcoc2IsIFxcXCJyZXNpemUgd291bGQgY2F1c2UgaW5vZGVzX2NvdW50IG92ZXJmbG93XFxcIik7XFxuZnMvZXh0NC9yZXNpemUuYy0yMDU1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMDYzLVxcbmZzL2V4dDQvcmVzaXplLmM6MjA2NDpcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpKSB7XFxuZnMvZXh0NC9yZXNpemUuYy0yMDY1LVxcdFxcdGlmIChtZXRhX2JnKSB7XFxuZnMvZXh0NC9yZXNpemUuYzoyMDY2OlxcdFxcdFxcdGV4dDRfZXJyb3Ioc2IsIFxcXCJyZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZW5hYmxlZCBcXFwiXFxuZnMvZXh0NC9yZXNpemUuYy0yMDY3LVxcdFxcdFxcdFxcdCAgIFxcXCJzaW11bHRhbmVvdXNseVxcXCIpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMDg1LVxcdFxcdGlmIChJU19FUlIocmVzaXplX2lub2RlKSkge1xcbmZzL2V4dDQvcmVzaXplLmM6MjA4NjpcXHRcXHRcXHRleHQ0X3dhcm5pbmcoc2IsIFxcXCJFcnJvciBvcGVuaW5nIHJlc2l6ZSBpbm9kZVxcXCIpO1xcbmZzL2V4dDQvcmVzaXplLmMtMjA4Ny1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXNpemVfaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMDkxLVxcdGlmICgoIXJlc2l6ZV9pbm9kZSBcXHUwMDI2XFx1MDAyNiAhbWV0YV9iZyBcXHUwMDI2XFx1MDAyNiBuX2Rlc2NfYmxvY2tzIFxcdTAwM2Ugb19kZXNjX2Jsb2NrcykgfHwgbl9ibG9ja3NfY291bnQgPT0gb19ibG9ja3NfY291bnQpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjIwOTI6XFx0XFx0ZXJyID0gZXh0NF9jb252ZXJ0X21ldGFfYmcoc2IsIHJlc2l6ZV9pbm9kZSk7XFxuZnMvZXh0NC9yZXNpemUuYy0yMDkzLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTIxNjYtXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9yZXNpemUuYzoyMTY3OlxcdFxcdGVyciA9IGV4dDRfZmxleF9ncm91cF9hZGQoc2IsIHJlc2l6ZV9pbm9kZSwgZmxleF9nZCk7XFxuZnMvZXh0NC9yZXNpemUuYy0yMTY4LVxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMTkxLVxcdFxcdFxcdCAgICAgXFxcImZpbGUgc3lzdGVtIHJlc2l6ZVxcXCIsIGVycik7XFxuZnMvZXh0NC9yZXNpemUuYzoyMTkyOlxcdGV4dDRfbXNnKHNiLCBLRVJOX0lORk8sIFxcXCJyZXNpemVkIGZpbGVzeXN0ZW0gdG8gJWxsdVxcXCIsXFxuZnMvZXh0NC9yZXNpemUuYy0yMTkzLVxcdFxcdCBleHQ0X2Jsb2Nrc19jb3VudChlcykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo0NS4xNDI0ODE5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzkyNDk2NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIEZvY3VzIGZvciBJbXByb3ZlZCBUZXN0aW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd2UncmUgZGVmaW5pbmcgdGhlIGZvY3VzIGZvciBvdXIga2VybmVsIHN5bWJvbCBhbmFseXNpcy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gZ2V0IHRoZSBtb3N0IGluc2lnaHRmdWwgdGVzdCBkaXN0cmlidXRpb25zLiBMZXQncyBzdGFydCB3aXRoIGBmcy9maWxlLmNgLiBTcGVjaWZpY2FsbHksIGBmZF9pbnN0YWxsYCDigJMgaXQncyBhICpzZXJpb3VzbHkqIGhvdCBmdW5jdGlvbi4gQ2FsbGVkIGV2ZXJ5IHRpbWUgd2UgZG8gYSBmaWxlIGRlc2NyaXB0b3IgYWN0aW9uLiBUaGlzIHNjcmVhbXMgXCJnZW5lcmljIGhvdCBwYXRoXCIgYW5kIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB3ZSB3YW50IHRvIGF2b2lkIHB1dHRpbmcgRm9jdXNTeW1ib2xzIG9uLCBhcyBpdCdsbCBza2V3IHRoZSBkaXN0cmlidXRpb25zIGJhZGx5LlxuXG5SaWdodCwgc28gdG8gcmVtaW5kIG15c2VsZiwgSSdtIGdvaW5nIHRvIHJlLWNoZWNrIHRoZSBndWlkZWxpbmVzOiBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBXZSB3YW50IGdvb2QgZGF0YS5cIiBPa2F5LCBwb2ludCB0YWtlbi4gUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlwiIE1ha2VzIHNlbnNlLiBXZSBuZWVkIGRpc3RpbmN0IGFkZHJlc3NlcyB0byBhbmFseXplIHRoZSBiZWhhdmlvci5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGNoZWNrIGBmcy9waWRmcy5jYC4gTGV0J3Mgc3BlY2lmaWNhbGx5IGxvb2sgYXQgYHBpZGZkX2luZm9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2FsbGluZyBgcGlkZmRfaW5mb2Agb3IgcGlkZnMgaW9jdGwsIHNvIEkga25vdyB3aGVyZSB0aGUgc3ltYm9sIGxhbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo0Ny45MzQ5ODI2MzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTgyMDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaWRmZF9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3BpZGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcGlkZnMuYz0zMzk9c3RhdGljIF9fdTMyIHBpZGZzX2NvcmVkdW1wX21hc2soZW51bSB0YXNrX2R1bXBhYmxlIGR1bXBhYmxlKVxcbi0tXFxuZnMvcGlkZnMuYy0zNjQtXFxuZnMvcGlkZnMuYzozNjU6c3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvcGlkZnMuYy0zNjYte1xcbmZzL3BpZGZzLmM6MzY3OlxcdHN0cnVjdCBwaWRmZF9pbmZvIF9fdXNlciAqdWluZm8gPSAoc3RydWN0IHBpZGZkX2luZm8gX191c2VyICopYXJnO1xcbmZzL3BpZGZzLmMtMzY4LVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayBfX2ZyZWUocHV0X3Rhc2spID0gTlVMTDtcXG4tLVxcbmZzL3BpZGZzLmMtMzcwLVxcdHNpemVfdCB1c2l6ZSA9IF9JT0NfU0laRShjbWQpO1xcbmZzL3BpZGZzLmM6MzcxOlxcdHN0cnVjdCBwaWRmZF9pbmZvIGtpbmZvID0ge307XFxuZnMvcGlkZnMuYy0zNzItXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zO1xcbi0tXFxuZnMvcGlkZnMuYy0zNzYtXFxuZnMvcGlkZnMuYzozNzc6XFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcGlkZmRfaW5mbykgIT0gUElERkRfSU5GT19TSVpFX1ZFUjMpO1xcbmZzL3BpZGZzLmMtMzc4LVxcbi0tXFxuZnMvcGlkZnMuYz01Mjg9c3RhdGljIGxvbmcgcGlkZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvcGlkZnMuYy01NDctXFx0aWYgKF9JT0NfTlIoY21kKSA9PSBfSU9DX05SKFBJREZEX0dFVF9JTkZPKSlcXG5mcy9waWRmcy5jOjU0ODpcXHRcXHRyZXR1cm4gcGlkZmRfaW5mbyhmaWxlLCBjbWQsIGFyZyk7XFxuZnMvcGlkZnMuYy01NDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjQ4LjA0NjgwODg2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM2Nzg4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdXNlciBuYW1lc3BhY2UgbWFwcGluZyBwcm9jZXNzLCBzbyB0aGUgZmlyc3QgcGxhY2UgSSdtIGdvaW5nIHRvIGxvb2sgaXMgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByb2Nlc3MgZmlsZXMgZm9yIFVJRCwgR0lELCBhbmQgcHJvamVjdCBJRCBtYXBwaW5ncyBhcmUgd3JpdHRlbi4gVGhhdCBtZWFucyBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBtYXBfd3JpdGVgIGZ1bmN0aW9uLCBzaW5jZSB0aGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgcHJvYyBmaWxlIHdyaXRlIG9wZXJhdGlvbnMgcmVzaWRlcy4gVGhlbiBJJ2xsIGNoZWNrIGBtYXBfaWRfcmFuZ2VfZG93bmAgYW5kIGBtYXBfaWRfcmFuZ2VfdXBgLCBhcyB0aG9zZSBhcmUgcHJvYmFibHkgaW52b2x2ZWQgaW4gbWFuaXB1bGF0aW5nIHRoZSBJRCBtYXBwaW5ncyB0aGVtc2VsdmVzLiBGcm9tIHRoZXJlLCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcsIEkgd2lsbCBjaGVjayB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGB1c2VyX25hbWVzcGFjZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo1MC4wODM2MDEzMTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTMwMzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXBfaWRfcmFuZ2VfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC91c2VyX25hbWVzcGFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTI1MT1zdGF0aWMgaW50IGNtcF9tYXBfaWQoY29uc3Qgdm9pZCAqaywgY29uc3Qgdm9pZCAqZSlcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI3Ny0vKlxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjI3ODogKiBtYXBfaWRfcmFuZ2VfZG93bl9tYXggLSBGaW5kIGlkbWFwIHZpYSBiaW5hcnkgc2VhcmNoIGluIG9yZGVyZWQgaWRtYXAgYXJyYXkuXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMjc5LSAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9MjgxPXN0YXRpYyBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKlxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjI4MjptYXBfaWRfcmFuZ2VfZG93bl9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI4My17XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0yOTQtLypcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoyOTU6ICogbWFwX2lkX3JhbmdlX2Rvd25fYmFzZSAtIEZpbmQgaWRtYXAgdmlhIGJpbmFyeSBzZWFyY2ggaW4gc3RhdGljIGV4dGVudCBhcnJheS5cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0yOTYtICogQ2FuIG9ubHkgYmUgY2FsbGVkIGlmIG51bWJlciBvZiBtYXBwaW5ncyBpcyBlcXVhbCBvciBsZXNzIHRoYW5cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTI5OT1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozMDA6bWFwX2lkX3JhbmdlX2Rvd25fYmFzZSh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzAxLXtcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMxNy1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozMTg6c3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzE5LXtcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMyNC1cXHRpZiAoZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjMyNTpcXHRcXHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zMjYtXFx0ZWxzZVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjMyNzpcXHRcXHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9tYXgoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMyOC1cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTMzOD11MzIgbWFwX2lkX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZClcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zMzkte1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjM0MDpcXHRyZXR1cm4gbWFwX2lkX3JhbmdlX2Rvd24obWFwLCBpZCwgMSk7XFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzQxLX1cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTM0OD1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozNDk6bWFwX2lkX3JhbmdlX3VwX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM1MC17XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz0zNzE9c3RhdGljIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MzcyOm1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM3My17XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zODMtXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6Mzg0OnUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM4NS17XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zOTAtXFx0aWYgKGV4dGVudHMgXFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozOTE6XFx0XFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX3VwX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM5Mi1cXHRlbHNlXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MzkzOlxcdFxcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9tYXgoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM5NC1cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTQwND11MzIgbWFwX2lkX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQpXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNDA1LXtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo0MDY6XFx0cmV0dXJuIG1hcF9pZF9yYW5nZV91cChtYXAsIGlkLCAxKTtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy00MDctfVxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9OTMyPXN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTEwNzMtXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MTA3NDpcXHRcXHRsb3dlcl9maXJzdCA9IG1hcF9pZF9yYW5nZV9kb3duKHBhcmVudF9tYXAsXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTA3NS1cXHRcXHRcXHRcXHRcXHRcXHRlLVxcdTAwM2Vsb3dlcl9maXJzdCxcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTExMDItXFx0fVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjExMDM6XFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gbWFwX2lkX3JhbmdlX3t1cCxkb3dufSgpIGFuZCBtX3N0YXJ0KCkuICovXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTEwNC1cXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bWFwLVxcdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo1MC4xODQ5MDk5NzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjczMjMxOTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVsZXZhbnQgS2VybmVsIEZpbGVzIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGZzL2Fpby5jYCBlbnRyeXBvaW50cyDigJMgc3BlY2lmaWNhbGx5IGBzeXNfaW9fZ2V0ZXZlbnRzYCwgYHN5c19pb19wZ2V0ZXZlbnRzYCwgYW5kIGBpb19zdWJtaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAsIEkgc2hvdWxkIHZlcmlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoYXQncyBhIGNyaXRpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB3aGF0IGlzIGVuYWJsZWQgYW5kIGRpc2FibGVkLlxuXG5IZXJlJ3MgbXkgY2hlY2tsaXN0OlxuXG4xLiAgYGZzL2Fpby5jYCDigJMgVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBBSU9gLiBNYWtlcyBzZW5zZS5cbjIuICBgZnMvZXh0NC9gIOKAkyBgRVhUNF9GU2AsIG9mIGNvdXJzZS4gU3RhbmRhcmQuXG4zLiAgYGZzL3BpZGZzLmNgIOKAkyBUaGlzIG9uZSByZXF1aXJlcyBhIGNoZWNrLiBJcyB0aGlzIGJ1aWx0LWluIG9yIGNvbmRpdGlvbmFsPyBJJ2xsIGxvb2sgYXQgYGZzL01ha2VmaWxlYCB0byBjb25maXJtLlxuNC4gIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2Ag4oCTIFRoaXMgdXNlcyB0aGUgYFVTRVJfTlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuNS4gIGBmcy9tbnRfaWRtYXBwaW5nLmNgIOKAkyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9NYWtlZmlsZWAgYWdhaW4gZm9yIHRoaXMgb25lLlxuNi4gIGBsaWIvdnNwcmludGYuY2Ag4oCTIFRoaXMgaXMgY29yZSwgYWx3YXlzIGJ1aWx0LWluLCBubyBjb25maWd1cmF0aW9uLlxuXG5Ob3csIEknbGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBmcy9NYWtlZmlsZWAgYW5kIGBmcy9LY29uZmlnYCwgYW5kLCBmb3IgZ29vZCBtZWFzdXJlLCBJJ2xsIGluY2x1ZGUgYGluaXQvS2NvbmZpZ2AgaW4gbXkgcmV2aWV3LiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgY29uZGl0aW9uYWwgYnVpbGQgYXNwZWN0cy4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgcHJvcGVyIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjU2LjkxNzIzMjk3MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NTUyMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihhaW98cGlkZnN8bW50X2lkbWFwcGluZ3xleHQ0KVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVxcdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcXFxcbi0tXFxuZnMvTWFrZWZpbGUtMTctXFx0XFx0ZnNfZGlyZW50Lm8gZnNfY29udGV4dC5vIGZzX3BhcnNlci5vIGZzb3Blbi5vIGluaXQubyBcXFxcXFxuZnMvTWFrZWZpbGU6MTg6XFx0XFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcXFxcbmZzL01ha2VmaWxlLTE5LVxcdFxcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMubyBmYWlsZnMub1xcbi0tXFxuZnMvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX0VWRU5URkQpXFx0XFx0Kz0gZXZlbnRmZC5vXFxuZnMvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX0FJTykgICAgICAgICAgICAgICArPSBhaW8ub1xcbmZzL01ha2VmaWxlLTMxLW9iai0kKENPTkZJR19GU19EQVgpXFx0XFx0Kz0gZGF4Lm9cXG4tLVxcbmZzL01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19ORVRGU19TVVBQT1JUKVxcdCs9IG5ldGZzL1xcbmZzL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19FWFQ0X0ZTKVxcdFxcdCs9IGV4dDQvXFxuZnMvTWFrZWZpbGU6NjY6IyBXZSBwbGFjZSBleHQ0IGJlZm9yZSBleHQyIHNvIHRoYXQgY2xlYW4gZXh0MyByb290IGZzJ3MgZG8gTk9UIG1vdW50IHVzaW5nIHRoZVxcbmZzL01ha2VmaWxlLTY3LSMgZXh0MiBkcml2ZXIsIHdoaWNoIGRvZXNuJ3Qga25vdyBhYm91dCBqb3VybmFsbGluZyEgIEV4cGxpY2l0bHkgcmVxdWVzdCBleHQyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjU3LjA1MTc5MTk0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM5NTk4MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVXNlciBOYW1lc3BhY2UgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlciBuYW1lc3BhY2VzIGFyZSBoYW5kbGVkIGluIHRoaXMgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgaXMgaW50ZWdyYXRlZC4gU28sIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgd291bGQgYmUgZWl0aGVyIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AgaXRzZWxmLCB0byBzZWUgdGhlIGRpcmVjdCBjb2RlIGludm9sdmVkLCBvciB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdsbCBsaWtlbHkgZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhlcmUuIFRoZSBtb3N0IHByb2JhYmxlIGZpbGVzIHdvdWxkIGJlIHdpdGhpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2AgKGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zKSBvciBga2VybmVsL01ha2VmaWxlYCAoZm9yIGhvdyB0aGUgY29tcGlsYXRpb24gdW5pdHMgYXJlIGJyb3VnaHQgdG9nZXRoZXIpLiBMZXQncyBzdGFydCB3aXRoIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI3OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjU5LjA5MTM5NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQwNTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX25hbWVzcGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19VVFNfTlMpICs9IHV0c25hbWUub1xcbmtlcm5lbC9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfVVNFUl9OUykgKz0gdXNlcl9uYW1lc3BhY2Uub1xcbmtlcm5lbC9NYWtlZmlsZS05My1vYmotJChDT05GSUdfUElEX05TKSArPSBwaWRfbmFtZXNwYWNlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjM6NTkuMjgyODEyMzkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NDE4MzUwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIEFJTyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBBc3luY2hyb25vdXMgSS9PIChgQUlPYCkuIE15IGluc3RpbmN0IHNheXMgdGhlIGtleSB0byB0aGlzIGxpa2VseSBsaWVzIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaW5pdC9LY29uZmlnYCBhbmQgYGZzL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gaXQgY29tZXMgdG8gZmVhdHVyZSBlbmFibGVtZW50IGFuZCBtb2R1bGUgY29tcGlsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIHRvIGVpdGhlciBmaW5kIGl0IGRpcmVjdGx5IG9yIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgdGhhdCBwb2ludCBtZSB0byBpdHMgbG9jYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5lYXJ0aC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGRpcmVjdCBkZWZpbml0aW9uIG9mIHRoZSBgQUlPYCBvcHRpb24gb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRyb2xzIGl0cyBpbmNsdXNpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTYwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MDIuODI0NjUwNTkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDE3NDQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUlPXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTQxPWNvbmZpZyBTSE1FTVxcbi0tXFxuaW5pdC9LY29uZmlnLTE5NTEtXFxuaW5pdC9LY29uZmlnOjE5NTI6Y29uZmlnIEFJT1xcbmluaXQvS2NvbmZpZy0xOTUzLVxcdGJvb2wgXFxcIkVuYWJsZSBBSU8gc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjAyLjkwODgzNDkyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzIxNTI3MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBnaXZlbiB0ZXh0OlxuXG4qKkNoZWNraW5nIHRoZSBleHQ0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBleHQ0YCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgd2hpY2ggbWVhbnMgSSBzaG91bGQgc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQncyBkaWcgaW50byB0aGF0IGBmcy9leHQ0L0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfRVhUNF9GU2AuIEkga25vdyB3aGVyZSB0aGF0J3MgbG9jYXRlZCwgc28gbGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBJdCdzIHRoZSBzdGFuZGFyZCBmaXJzdCBzdGVwIHdoZW4gZGVidWdnaW5nIG9yIGN1c3RvbWl6aW5nIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnQsIHNvIGl0J3MgYSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjA0LjYzMDM2NTI4NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcwNDI3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjA0LjcyNzQxMzM0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTUyOTA0MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBuYW1lc3BhY2Ugc3R1ZmYgaXMgYmVpbmcgY29uZmlndXJlZC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdCwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbml0L0tjb25maWdgIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBgVVNFUl9OU2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCB2YWx1ZSBvciBwb3NzaWJsZSBjaG9pY2VzIG1pZ2h0IGJlLiBIb3BlZnVsbHksIHRoZSBjb21tZW50cyBhcm91bmQgaXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGRlc2lnbiBkZWNpc2lvbnMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaWYgaXQncyBkaXNhYmxlZC4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIGBVU0VSX05TYCBhbmQgaXRzIGFzc29jaWF0ZWQgb3B0aW9ucyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgZGV0ZXJtaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2YgdXNlciBuYW1lc3BhY2VzIHdpdGhpbiB0aGlzIHN5c3RlbSwgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGV5J3JlIGJlaW5nIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTI3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MDYuNjgwMzIxNjg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE5MDIxNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTRVJfTlNcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE0Mzg9Y29uZmlnIElQQ19OU1xcbi0tXFxuaW5pdC9LY29uZmlnLTE0NDUtXFxuaW5pdC9LY29uZmlnOjE0NDY6Y29uZmlnIFVTRVJfTlNcXG5pbml0L0tjb25maWctMTQ0Ny1cXHRib29sIFxcXCJVc2VyIG5hbWVzcGFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MDYuODUyMjI5OTkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTUzNTIxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqSW5zcGVjdGluZyB0aGUgYHBpZGZzLmNgIENvZGUqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwb2tlIGFyb3VuZCBpbiBgcGlkZnMuY2AuIEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gc2VlIGlmIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF0IHBsYXkuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBTbywgbGV0J3Mgb3BlbiB1cCBgZnMvcGlkZnMuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIGdldCBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQzMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjA4LjgwNzU4NDk3OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2NDY5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9waWRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3BpZGZzLmM9MjA5PXZvaWQgcGlkZnNfZnJlZV9waWQoc3RydWN0IHBpZCAqcGlkKVxcbi0tXFxuZnMvcGlkZnMuYy0yMzUtXFxuZnMvcGlkZnMuYzoyMzY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuZnMvcGlkZnMuYy0yMzctLyoqXFxuLS1cXG5mcy9waWRmcy5jPTI3Mj1zdGF0aWMgdm9pZCBwaWRmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxcbi0tXFxuZnMvcGlkZnMuYy0yODQtXFxuZnMvcGlkZnMuYzoyODU6I2lmZGVmIENPTkZJR19QSURfTlNcXG5mcy9waWRmcy5jLTI4Ni1cXHRzZXFfcHV0X2RlY2ltYWxfbGwobSwgXFxcIlxcXFxuTlNwaWQ6XFxcXHRcXFwiLCBucik7XFxuLS1cXG5mcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL3BpZGZzLmMtMzk3LVxcdFxcdFxcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUO1xcbmZzL3BpZGZzLmM6Mzk4OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xcbmZzL3BpZGZzLmMtMzk5LVxcdFxcdFxcdGtpbmZvLmNncm91cGlkID0gYXR0ci1cXHUwMDNlY2dyb3VwaWQ7XFxuLS1cXG5mcy9waWRmcy5jLTQ1MC1cXG5mcy9waWRmcy5jOjQ1MTojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5mcy9waWRmcy5jLTQ1Mi1cXHRpZiAoIWtpbmZvLmNncm91cGlkKSB7XFxuLS1cXG5mcy9waWRmcy5jPTUyOD1zdGF0aWMgbG9uZyBwaWRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9waWRmcy5jLTU4Ny1cXHRjYXNlIFBJREZEX0dFVF9DR1JPVVBfTkFNRVNQQUNFOlxcbmZzL3BpZGZzLmM6NTg4OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xcbmZzL3BpZGZzLmMtNTg5LVxcdFxcdGlmICghbnNfcmVmX2dldChuc3AtXFx1MDAzZWNncm91cF9ucykpXFxuLS1cXG5mcy9waWRmcy5jLTU5NC1cXHRjYXNlIFBJREZEX0dFVF9JUENfTkFNRVNQQUNFOlxcbmZzL3BpZGZzLmM6NTk1OiNpZmRlZiBDT05GSUdfSVBDX05TXFxuZnMvcGlkZnMuYy01OTYtXFx0XFx0aWYgKCFuc19yZWZfZ2V0KG5zcC1cXHUwMDNlaXBjX25zKSlcXG4tLVxcbmZzL3BpZGZzLmMtNjA2LVxcdGNhc2UgUElERkRfR0VUX05FVF9OQU1FU1BBQ0U6XFxuZnMvcGlkZnMuYzo2MDc6I2lmZGVmIENPTkZJR19ORVRfTlNcXG5mcy9waWRmcy5jLTYwOC1cXHRcXHRpZiAoIW5zX3JlZl9nZXQobnNwLVxcdTAwM2VuZXRfbnMpKVxcbi0tXFxuZnMvcGlkZnMuYy02MTMtXFx0Y2FzZSBQSURGRF9HRVRfUElEX0ZPUl9DSElMRFJFTl9OQU1FU1BBQ0U6XFxuZnMvcGlkZnMuYzo2MTQ6I2lmZGVmIENPTkZJR19QSURfTlNcXG5mcy9waWRmcy5jLTYxNS1cXHRcXHRpZiAoIW5zX3JlZl9nZXQobnNwLVxcdTAwM2VwaWRfbnNfZm9yX2NoaWxkcmVuKSlcXG4tLVxcbmZzL3BpZGZzLmMtNjIwLVxcdGNhc2UgUElERkRfR0VUX1RJTUVfTkFNRVNQQUNFOlxcbmZzL3BpZGZzLmM6NjIxOiNpZmRlZiBDT05GSUdfVElNRV9OU1xcbmZzL3BpZGZzLmMtNjIyLVxcdFxcdGlmICghbnNfcmVmX2dldChuc3AtXFx1MDAzZXRpbWVfbnMpKVxcbi0tXFxuZnMvcGlkZnMuYy02MjctXFx0Y2FzZSBQSURGRF9HRVRfVElNRV9GT1JfQ0hJTERSRU5fTkFNRVNQQUNFOlxcbmZzL3BpZGZzLmM6NjI4OiNpZmRlZiBDT05GSUdfVElNRV9OU1xcbmZzL3BpZGZzLmMtNjI5LVxcdFxcdGlmICghbnNfcmVmX2dldChuc3AtXFx1MDAzZXRpbWVfbnNfZm9yX2NoaWxkcmVuKSlcXG4tLVxcbmZzL3BpZGZzLmMtNjM0LVxcdGNhc2UgUElERkRfR0VUX1VUU19OQU1FU1BBQ0U6XFxuZnMvcGlkZnMuYzo2MzU6I2lmZGVmIENPTkZJR19VVFNfTlNcXG5mcy9waWRmcy5jLTYzNi1cXHRcXHRpZiAoIW5zX3JlZl9nZXQobnNwLVxcdTAwM2V1dHNfbnMpKVxcbi0tXFxuZnMvcGlkZnMuYy02NDItXFx0Y2FzZSBQSURGRF9HRVRfVVNFUl9OQU1FU1BBQ0U6XFxuZnMvcGlkZnMuYzo2NDM6I2lmZGVmIENPTkZJR19VU0VSX05TXFxuZnMvcGlkZnMuYy02NDQtXFx0XFx0c2NvcGVkX2d1YXJkKHJjdSkge1xcbi0tXFxuZnMvcGlkZnMuYy02NTMtXFx0Y2FzZSBQSURGRF9HRVRfUElEX05BTUVTUEFDRTpcXG5mcy9waWRmcy5jOjY1NDojaWZkZWYgQ09ORklHX1BJRF9OU1xcbmZzL3BpZGZzLmMtNjU1LVxcdFxcdHNjb3BlZF9ndWFyZChyY3UpIHtcXG4tLVxcbmZzL3BpZGZzLmMtNjc5LVxcbmZzL3BpZGZzLmM6NjgwOiNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZnMvcGlkZnMuYy02ODEtc3RhdGljIGxvbmcgcGlkZmRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcGlkZnMuYz03MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGlkZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvcGlkZnMuYy03MTMtXFx0LnBvbGxcXHRcXHQ9IHBpZGZkX3BvbGwsXFxuZnMvcGlkZnMuYzo3MTQ6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuZnMvcGlkZnMuYy03MTUtXFx0LnNob3dfZmRpbmZvXFx0PSBwaWRmZF9zaG93X2ZkaW5mbyxcXG4tLVxcbmZzL3BpZGZzLmMtNzE3LVxcdC51bmxvY2tlZF9pb2N0bFxcdD0gcGlkZmRfaW9jdGwsXFxuZnMvcGlkZnMuYzo3MTg6I2lmZGVmIENPTkZJR19DT01QQVRcXG5mcy9waWRmcy5jLTcxOS1cXHQuY29tcGF0X2lvY3RsXFx0PSBwaWRmZF9jb21wYXRfaW9jdGwsXFxuLS1cXG5mcy9waWRmcy5jPTc0Nz12b2lkIHBpZGZzX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5mcy9waWRmcy5jLTc1MC1cXHRzdHJ1Y3QgcGlkZnNfYXR0ciAqYXR0cjtcXG5mcy9waWRmcy5jOjc1MTojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5mcy9waWRmcy5jLTc1Mi1cXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xcbi0tXFxuZnMvcGlkZnMuYy03NzktXFxuZnMvcGlkZnMuYzo3ODA6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxuZnMvcGlkZnMuYy03ODEtXFx0cmN1X3JlYWRfbG9jaygpO1xcbi0tXFxuZnMvcGlkZnMuYy03OTItXFxuZnMvcGlkZnMuYzo3OTM6I2lmZGVmIENPTkZJR19DT1JFRFVNUFxcbmZzL3BpZGZzLmMtNzk0LXZvaWQgcGlkZnNfY29yZWR1bXAoY29uc3Qgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MDguOTA3MjM3NTY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyMDExODIwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gaWRlbnRpZnlpbmcgc29tZSBzdHJvbmcgZm9jdXMgc3ltYm9scy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lcyBhcmUgcHJpbWUgY2FuZGlkYXRlcy4gRmlyc3QgaW5zdGluY3Q6IEkgc2hvdWxkIHNjcnV0aW5pemUgYEZvY3VzU3ltYm9sc2AuIEFscmlnaHQsIHdoYXQncyBhIGdvb2QgbGlzdCBvZiBzeW1ib2xzIHRvIGxvb2sgYXQ/IEhtbW0uLi4gbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbWF5YmUgc29tZXRoaW5nIGxpa2UgYF9fZG9fc3lzX2lvX2dldGV2ZW50c2AsIGBfX2RvX3N5c19pb19wZ2V0ZXZlbnRzYCwgb3IgbWF5YmUgYGFpb19yZWFkX2V2ZW50c2AgYW5kIGBhaW9fY29tcGxldGVgLiBCdXQgaG9sZCBvbiwgSSByZWNhbGwgdGhhdCB3ZSBzaG91bGQgKnByZWZlciogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgdGhvc2UgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIENvbXBpbGVyIGlubGluaW5nIG11ZGRpZXMgdGhlIHdhdGVycyB3aXRoIHRob3NlIGludGVybmFsIG9uZXMsIG5vIGRpc3RpbmN0IGFkZHJlc3Nlcy5cblxuUmlnaHQsIFNZU0NBTExfREVGSU5FIGNyZWF0ZXMgdGhpbmdzIGxpa2UgYF9fZG9fc3lzX2lvX2dldGV2ZW50c2AgYW5kIGBfX3g2NF9zeXNfaW9fZ2V0ZXZlbnRzYCBhbmQgc3VjaC4gT2theSwgSSdtIGdldHRpbmcgYSBoYW5kbGUgb24gaXQuIE9yLCB0aGlua2luZyBvdXRzaWRlIHRoYXQgYm94LCBtYXliZSBzdHVmZiBsaWtlIGBleHQ0X3Jlc2l6ZV9mc2AsIG9yIHBlcmhhcHMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGxpa2UgYGV4dDRfZ3JvdXBfYWRkYCwgYGV4dDRfZ3JvdXBfZXh0ZW5kYCwgc29tZSBvZiB0aGUgYG1hcF9pZF9yYW5nZV9gIHN0dWZmIGluIGB1c2VyX25hbWVzcGFjZS5jYCBzdWNoIGFzIGBtYXBfaWRfcmFuZ2VfdXBgLCBgbWFwX2lkX3JhbmdlX2Rvd25gLCBvciBwZXJoYXBzIGV2ZW4gc29tZXRoaW5nIGluIHRoZSBtb3VudCBJRCBtYXBwaW5nLCBzdWNoIGFzIGBjb3B5X21udF9pZG1hcGAuXG5cbk9rYXksIG5leHQgc3RlcDogbGV0IG1lIHJlLWV2YWx1YXRlIGJhc2VkIG9uIHRoZSBub24tc3RhdGljIGNyaXRlcmlvbi4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGZzL2V4dDQvcmVzaXplLmNgOiBJIHNlZSBgZXh0NF9yZXNpemVfZnNgLCBgZXh0NF9ncm91cF9hZGRgLCBhbmQgYGV4dDRfZ3JvdXBfZXh0ZW5kYC4gSW4gYGZzL2V4dDQvYmFsbG9jLmNgLCBJIGhhdmUgYGV4dDRfZ2V0X2dyb3VwX2luZm9gLiBUaGUgZWFybGllciBgZnMvYWlvLmNgIGhhcyBgX19kb19zeXNfaW9fZ2V0ZXZlbnRzYCBhbmQgYF9fZG9fc3lzX2lvX3BnZXRldmVudHNgLiBGcm9tIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AsIEkgc2VlIGBtYXBfaWRfcmFuZ2VfdXBgIGFuZCBgbWFwX2lkX3JhbmdlX2Rvd25gLiBGcm9tIGBmcy9waWRmcy5jYCBJIHNlZSBgcGlkZmRfc2hvd19mZGluZm9gIGlzIHByb21pc2luZywgb3IgbWF5YmUgZnVuY3Rpb25zIGxpa2UgYHBpZGZzX2V4aXRgIG9yIGBwaWRmc19jb3JlZHVtcGAuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBmcy9waWRmcy5jYCBmaWxlIGFuZCBzZWUgd2hhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3ZSBoYXZlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA0NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDoxNi4xMDg0MjI5MThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUwMzkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfGxvbmd8c3RydWN0KSBbYS16MC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcGlkZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9waWRmcy5jPTQxPXN0YXRpYyBzdHJ1Y3Qgc2ltcGxlX3hhdHRyX2NhY2hlIHBpZGZzX3hhX2NhY2hlO1xcbmZzL3BpZGZzLmMtNDItXFxuZnMvcGlkZnMuYzo0Mzp2b2lkIHBpZGZzX2dldF9yb290KHN0cnVjdCBwYXRoICpwYXRoKVxcbmZzL3BpZGZzLmMtNDQte1xcbi0tXFxuZnMvcGlkZnMuYz0xNTM9c3RhdGljIHU2NCBwaWRmc19hbGxvY19pbm8odm9pZClcXG4tLVxcbmZzL3BpZGZzLmMtMTY2LVxcbmZzL3BpZGZzLmM6MTY3OnZvaWQgcGlkZnNfcHJlcGFyZV9waWQoc3RydWN0IHBpZCAqcGlkKVxcbmZzL3BpZGZzLmMtMTY4LXtcXG4tLVxcbmZzL3BpZGZzLmMtMTczLVxcbmZzL3BpZGZzLmM6MTc0OmludCBwaWRmc19hZGRfcGlkKHN0cnVjdCBwaWQgKnBpZClcXG5mcy9waWRmcy5jLTE3NS17XFxuLS1cXG5mcy9waWRmcy5jLTE4NS1cXG5mcy9waWRmcy5jOjE4Njp2b2lkIHBpZGZzX3JlbW92ZV9waWQoc3RydWN0IHBpZCAqcGlkKVxcbmZzL3BpZGZzLmMtMTg3LXtcXG4tLVxcbmZzL3BpZGZzLmM9MjA3PXN0YXRpYyBERUNMQVJFX1dPUksocGlkZnNfZnJlZV93b3JrLCBwaWRmc19mcmVlX2F0dHJfd29yayk7XFxuZnMvcGlkZnMuYy0yMDgtXFxuZnMvcGlkZnMuYzoyMDk6dm9pZCBwaWRmc19mcmVlX3BpZChzdHJ1Y3QgcGlkICpwaWQpXFxuZnMvcGlkZnMuYy0yMTAte1xcbi0tXFxuZnMvcGlkZnMuYz03MjM9c3RydWN0IHBpZCAqcGlkZmRfcGlkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcGlkZnMuYy03NDYtICovXFxuZnMvcGlkZnMuYzo3NDc6dm9pZCBwaWRmc19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmZzL3BpZGZzLmMtNzQ4LXtcXG4tLVxcbmZzL3BpZGZzLmMtNzkzLSNpZmRlZiBDT05GSUdfQ09SRURVTVBcXG5mcy9waWRmcy5jOjc5NDp2b2lkIHBpZGZzX2NvcmVkdW1wKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuZnMvcGlkZnMuYy03OTUte1xcbi0tXFxuZnMvcGlkZnMuYz0xMDIwPXN0YXRpYyB2b2lkIHBpZGZzX3B1dF9kYXRhKHZvaWQgKmRhdGEpXFxuLS1cXG5mcy9waWRmcy5jLTEwMzUtICovXFxuZnMvcGlkZnMuYzoxMDM2OmludCBwaWRmc19yZWdpc3Rlcl9waWRfZ2ZwKHN0cnVjdCBwaWQgKnBpZCwgZ2ZwX3QgZ2ZwKVxcbmZzL3BpZGZzLmMtMTAzNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjE2LjU0ODkzMjUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NDMxMzc1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgc29tZSBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIEknbSBzdGFydGluZyB3aXRoIGBleHQ0X2dldF9ncm91cF9pbmZvYCBpbiBgZnMvZXh0NC9iYWxsb2MuY2AuIEFoLCBnb29kLCBpdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGZpbGUuIE1ha2VzIGl0IGVhc2llciB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgYWxzbyBnbGFuY2UgYXQgYGV4dDRfcmVzaXplX2ZzYCwgYGV4dDRfZ3JvdXBfYWRkYCwgYW5kIGBleHQ0X2dyb3VwX2V4dGVuZGAuIFRob3NlIGJlaW5nIG5vbi1zdGF0aWMgYXJlIGFsc28gaGVscGZ1bC5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCwgc3BlY2lmaWNhbGx5IGBtYXBfaWRfcmFuZ2VfdXBgLCBgbWFwX2lkX3JhbmdlX2Rvd25gLCBgbWFwX2lkX3VwYCwgYW5kIGBtYXBfaWRfZG93bmAuIEltcG9ydGFudCB0byBrbm93IGhvdyB0aGVzZSBhcmUgZXhwb3NlZC4gTW92aW5nIG9uIHRvIGBmcy9waWRmcy5jYCwgY2hlY2tpbmcgYHBpZGZzX2V4aXRgIGFuZCBgcGlkZnNfY29yZWR1bXBgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGltcGxlbWVudGVkIGFuZCBpZiB0aGV5IGFyZSBwdWJsaWMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLiBJJ20gZ29pbmcgdG8gam90IGRvd24gdGhlIGtleSBjb25maWdzIHRoYXQgc2VlbSByZWxldmFudDogYEFJT2AsIGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgUElEX05TYCAoZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBwaWRmcyBuYW1lc3BhY2UgaW9jdGxzIGFuZCBhdHRyaWJ1dGVzKSwgYW5kIGBDR1JPVVBTYCAoZm9yIHBpZGZzIGNncm91cCBpbmZvcm1hdGlvbikuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdGhhdCBJJ20gbWlzc2luZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgRVhUNF9GU2AsIGBVU0VSX05TYCwgb3IgYEFJT2AuIEknbGwgc3RhcnQgYnkgcmVhZGluZyB0aHJvdWdoIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTg5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjIwLjI5MjA3NjM0MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRVhUNF9GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRzZWxlY3QgSkJEMlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQzE2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDk6XFx0XFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcXG4gIDE0OlxcdFxcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxcbiAgMTU6XFx0XFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XFxuICAxNjpcXHRcXHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxcbiAgMTc6XFx0XFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcXG4gIDE4OlxcdFxcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXFxuICAxOTpcXHRcXHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcXG4gIDIwOlxcdFxcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxcbiAgMjM6XFx0XFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXFxuICAyNDpcXHRcXHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XFxuICAyNTpcXHRcXHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcXG4gIDI2OlxcdFxcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXFxuICAyNzpcXHRcXHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXFxuICAyODpcXHRcXHQgIGNvbXBhdGlibGUuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxcbiAgMzE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cXG4gIDM5OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDoyMC4yOTIyMTU2MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0MjIzMDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBuYW1lc3BhY2UgY29uZmlndXJhdGlvbiAoYFVTRVJfTlNgKSBpcyBwcm9wZXJseSBzZXQgdXAgaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZSAoYGluaXQvS2NvbmZpZ2ApLiBUaGF0J3MgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJIHdhbnQgdG8gdmVyaWZ5IGlmIGl0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCB0byBzb21lIG90aGVyIHZhbHVlIOKAkyBsaWtlbHkgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgc3lzdGVtIGFuZCBzZWN1cml0eSByZXF1aXJlbWVudHMuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkIGlzIGFic29sdXRlbHkgY3JpdGljYWwgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBhYmlsaXR5IHRvIHV0aWxpemUgdXNlciBuYW1lc3BhY2VzLCB3aGljaCBpcyBmb3VuZGF0aW9uYWwgdG8gYSBsb3Qgb2YgY29udGFpbmVyaXphdGlvbiBhbmQgc2VjdXJpdHkgdGVjaG5vbG9naWVzIEknbSB3b3JraW5nIHdpdGguIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaG93IGBVU0VSX05TYCBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSBpcyBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjkwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MjIuMjM0NDUwNTg5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ0NTpcXHRcXG4xNDQ2OlxcdGNvbmZpZyBVU0VSX05TXFxuMTQ0NzpcXHRcXHRib29sIFxcXCJVc2VyIG5hbWVzcGFjZVxcXCJcXG4xNDQ4OlxcdFxcdGRlZmF1bHQgblxcbjE0NDk6XFx0XFx0aGVscFxcbjE0NTA6XFx0XFx0ICBUaGlzIGFsbG93cyBjb250YWluZXJzLCBpLmUuIHZzZXJ2ZXJzLCB0byB1c2UgdXNlciBuYW1lc3BhY2VzXFxuMTQ1MTpcXHRcXHQgIHRvIHByb3ZpZGUgZGlmZmVyZW50IHVzZXIgaW5mbyBmb3IgZGlmZmVyZW50IHNlcnZlcnMuXFxuMTQ1MjpcXHRcXG4xNDUzOlxcdFxcdCAgV2hlbiB1c2VyIG5hbWVzcGFjZXMgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBpdCBpc1xcbjE0NTQ6XFx0XFx0ICByZWNvbW1lbmRlZCB0aGF0IHRoZSBNRU1DRyBvcHRpb24gYWxzbyBiZSBlbmFibGVkIGFuZCB0aGF0XFxuMTQ1NTpcXHRcXHQgIHVzZXItc3BhY2UgdXNlIHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMgdG8gbGltaXQgdGhlIGFtb3VudFxcbjE0NTY6XFx0XFx0ICBvZiBtZW1vcnkgYSBtZW1vcnkgdW5wcml2aWxlZ2VkIHVzZXJzIGNhbiB1c2UuXFxuMTQ1NzpcXHRcXG4xNDU4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xNDU5OlxcdFxcbjE0NjA6XFx0Y29uZmlnIFBJRF9OU1xcbjE0NjE6XFx0XFx0Ym9vbCBcXFwiUElEIE5hbWVzcGFjZXNcXFwiXFxuMTQ2MjpcXHRcXHRkZWZhdWx0IHlcXG4xNDYzOlxcdFxcdGhlbHBcXG4xNDY0OlxcdFxcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MjIuMjM0NjI4NTQ5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MDg5NTcwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBgQUlPYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYEFJT2Ag4oCTIEFzeW5jaHJvbm91cyBJL08g4oCTIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEl0J3MgY3J1Y2lhbCwgc28gSSBuZWVkIHRvIGdvIGluIGFuZCBtYWtlIHN1cmUgaXQncyBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoaW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG9wdGlvbnMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gdGhlaXIgcHJvcGVyIGRlZmF1bHRzLiBHb3R0YSBzdGF5IG9uIHRvcCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MjMuNzQzNTkxMjI1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk1MDpcXHRcXHQgIHdoaWNoIG1heSBiZSBhcHByb3ByaWF0ZSBvbiBzbWFsbCBzeXN0ZW1zIHdpdGhvdXQgc3dhcC5cXG4xOTUxOlxcdFxcbjE5NTI6XFx0Y29uZmlnIEFJT1xcbjE5NTM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEFJTyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4xOTU0OlxcdFxcdGRlZmF1bHQgeVxcbjE5NTU6XFx0XFx0aGVscFxcbjE5NTY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIFBPU0lYIGFzeW5jaHJvbm91cyBJL08gd2hpY2ggbWF5IGJ5IHVzZWRcXG4xOTU3OlxcdFxcdCAgYnkgc29tZSBoaWdoIHBlcmZvcm1hbmNlIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4gRGlzYWJsaW5nXFxuMTk1ODpcXHRcXHQgIHRoaXMgb3B0aW9uIHNhdmVzIGFib3V0IDdrLlxcbjE5NTk6XFx0XFxuMTk2MDpcXHRjb25maWcgSU9fVVJJTkdcXG4xOTYxOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4xOTYyOlxcdFxcdHNlbGVjdCBJT19XUVxcbjE5NjM6XFx0XFx0ZGVmYXVsdCB5XFxuMTk2NDpcXHRcXHRoZWxwXFxuMTk2NTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGlvX3VyaW5nIGludGVyZmFjZSwgZW5hYmxpbmdcXG4xOTY2OlxcdFxcdCAgYXBwbGljYXRpb25zIHRvIHN1Ym1pdCBhbmQgY29tcGxldGUgSU8gdGhyb3VnaCBzdWJtaXNzaW9uIGFuZFxcbjE5Njc6XFx0XFx0ICBjb21wbGV0aW9uIHJpbmdzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIGFwcGxpY2F0aW9uLlxcbjE5Njg6XFx0XFxuMTk2OTpcXHRjb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjIzLjc0MzgxNTg0NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTMyMjU5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipSZWZpbmluZyB0aGUgU3RyYXRlZ3kgQmVmb3JlIERlbGl2ZXJ5KipcblxuT2theSwgYmVmb3JlIEkgY29tbWl0IHRvIGEgZmluYWwgY29uY2x1c2lvbiwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB2ZXJpZnkgZXZlcnkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgcG90ZW50aWFsIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgaW1wYWN0aW5nIG1lbW9yeSBiYXJyaWVyIGJlaGF2aW9ycyBhbmQgY29uY3VycmVuY3kgbWVjaGFuaXNtcy4gVGhpcyBpcyB0b3VjaGluZyBjcnVjaWFsIGFyZWFzIGFjcm9zcyB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKSwgZXh0NCBmaWxlc3lzdGVtLCBBc3luY2hyb25vdXMgSS9PIChBSU8pLCB0aGUgcHJvY2VzcyBJRCBmaWxlc3lzdGVtIChwaWRmcyksIGFuZCB1c2VyIG5hbWVzcGFjZXMuIFRoZSAqV29ydGhGdXp6aW5nKiBmbGFnIGJlaW5nIHNldCB0byAqdHJ1ZSogaW5kaWNhdGVzIHRoZXNlIGFyZSBhcmVhcyByaXBlIGZvciBtb3JlIHJpZ29yb3VzIGV4YW1pbmF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc2NvcGUgb2YgdGhlc2UgbG93LWxldmVsIGtlcm5lbCBjb21wb25lbnRzLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgY2VudGVyZWQgYXJvdW5kIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWMgc3ltYm9scyB3aXRoaW4gdGhhdCBzY29wZTogYGV4dDRfcmVzaXplX2ZzYCwgYGV4dDRfZ3JvdXBfYWRkYCwgYGV4dDRfZ3JvdXBfZXh0ZW5kYCwgYGV4dDRfZ2V0X2dyb3VwX2luZm9gLCBgbWFwX2lkX3JhbmdlX3VwYCwgYG1hcF9pZF9yYW5nZV9kb3duYCwgYHBpZGZzX2V4aXRgLCBhbmQgYHBpZGZzX2NvcmVkdW1wYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIHRvIHRoZSBtb2RpZmllZCBvciBuZXdseSBpbnRyb2R1Y2VkIGNvZGUgd2l0aGluIHRob3NlIHN1YnN5c3RlbXMsIG9yIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlc2UgY2hhbmdlcywgYW5kIHRoZXJlZm9yZSBuZWVkIGZ1cnRoZXIgc2NydXRpbnkuXG5cbkknbGwgYWxzbyBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgYSB0aG9yb3VnaCBleGFtaW5hdGlvbi4gVGhhdCBtZWFucyBjb25maXJtaW5nIHRoZSBmb2xsb3dpbmcgYXJlIHByZXNlbnQgYW5kIGFjdGl2ZTogYEVYVDRfRlNgLCBgVVNFUl9OU2AsIGBBSU9gLCBgUElEX05TYCwgYW5kIGBDR1JPVVBTYC5cblxuV2l0aCBhbGwgdGhhdCBkb25lLCBpdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgzNywiT3V0cHV0VG9rZW5zIjoyNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDoyNy4yNzYwNzgzMDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA2NjE5NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlVTRVJfTlNcIixcbiAgICBcIkFJT1wiLFxuICAgIFwiUElEX05TXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9yZXNpemVfZnNcIixcbiAgICBcImV4dDRfZ3JvdXBfYWRkXCIsXG4gICAgXCJleHQ0X2dyb3VwX2V4dGVuZFwiLFxuICAgIFwiZXh0NF9nZXRfZ3JvdXBfaW5mb1wiLFxuICAgIFwibWFwX2lkX3JhbmdlX3VwXCIsXG4gICAgXCJtYXBfaWRfcmFuZ2VfZG93blwiLFxuICAgIFwicGlkZnNfZXhpdFwiLFxuICAgIFwicGlkZnNfY29yZWR1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2Rlcm5pemVzIGFuZCBhZGp1c3RzIG1lbW9yeSBiYXJyaWVyIHNlbWFudGljcyBhY3Jvc3MgY29yZSBrZXJuZWwgYW5kIGZpbGVzeXN0ZW0gY29tcG9uZW50cyAoQUlPIHJpbmcgYnVmZmVycywgZXh0NCByZXNpemluZyBhbmQgZ3JvdXAgYWxsb2NhdGlvbiwgZmQgaW5zdGFsbGF0aW9uL2V4cGFuc2lvbiwgcGlkZnMgYXR0cmlidXRlIHJldHJpZXZhbCwgYW5kIHVzZXIgbmFtZXNwYWNlIGlkIG1hcHBpbmcpIGJ5IGNvbnZlcnRpbmcgZXhwbGljaXQgc21wX3JtYi9zbXBfd21iIHBhaXJzIGludG8gYWNxdWlyZS9yZWxlYXNlIG1lbW9yeSBvcmRlcnMgKGUuZy4gc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UsIHRlc3RfYml0X2FjcXVpcmUsIHN1cGVyX2ZsYWdzKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHN5bmNocm9uaXphdGlvbiBjaGFuZ2VzIGluIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlBJRF9OU1wiLFxuICAgIFwiQ0dST1VQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcmVzaXplX2ZzXCIsXG4gICAgXCJleHQ0X2dyb3VwX2FkZFwiLFxuICAgIFwiZXh0NF9ncm91cF9leHRlbmRcIixcbiAgICBcImV4dDRfZ2V0X2dyb3VwX2luZm9cIixcbiAgICBcIm1hcF9pZF9yYW5nZV91cFwiLFxuICAgIFwibWFwX2lkX3JhbmdlX2Rvd25cIixcbiAgICBcInBpZGZzX2V4aXRcIixcbiAgICBcInBpZGZzX2NvcmVkdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kZXJuaXplcyBhbmQgYWRqdXN0cyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYWNyb3NzIGNvcmUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGNvbXBvbmVudHMgKEFJTyByaW5nIGJ1ZmZlcnMsIGV4dDQgcmVzaXppbmcgYW5kIGdyb3VwIGFsbG9jYXRpb24sIGZkIGluc3RhbGxhdGlvbi9leHBhbnNpb24sIHBpZGZzIGF0dHJpYnV0ZSByZXRyaWV2YWwsIGFuZCB1c2VyIG5hbWVzcGFjZSBpZCBtYXBwaW5nKSBieSBjb252ZXJ0aW5nIGV4cGxpY2l0IHNtcF9ybWIvc21wX3dtYiBwYWlycyBpbnRvIGFjcXVpcmUvcmVsZWFzZSBtZW1vcnkgb3JkZXJzIChlLmcuIHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFRoZXNlIGFyZSByZWFjaGFibGUgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjI3LjQ0Njc1MTY5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzI3MjE3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDoyNy40NDc4Nzk5MDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNTEzMTU4NzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcsIG9yIGFsdGVyIGhvdyBidWZmZXJzIGFyZSBpbml0aWFsaXplZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwZWQ0OWJlMWZhZjM5M2NmOWJjMjlmY2ZjZDcxYzIwYjg2NzI2OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIxOjIzOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xuaW5kZXggZDc4YWNjNjlmNDg3MC4uYTAyNzllMDU5ZTk3MiAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4rKysgYi9mcy9haW8uY1xuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4gXHQvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZVxuIFx0ICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1x0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4tXG4gXHRjdHgtXHUwMDNldGFpbCA9IHRhaWw7XG4gXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHJpbmctXHUwMDNldGFpbCA9IHRhaWw7XG4rXHQvKiBNYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJpbmctXHUwMDNldGFpbCwgdGFpbCk7XG4gXHRmbHVzaF9kY2FjaGVfZm9saW8oY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcbiBcdGN0eC1cdTAwM2Vjb21wbGV0ZWRfZXZlbnRzKys7XG5AQCAtMTI4OCwxMyArMTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsXG4gXHQvKiBBY2Nlc3MgdG8gLVx1MDAzZXJpbmdfZm9saW9zIGhlcmUgaXMgcHJvdGVjdGVkIGJ5IGN0eC1cdTAwM2VyaW5nX2xvY2suICovXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHRhaWwgPSByaW5nLVx1MDAzZXRhaWw7XG4tXG4gXHQvKlxuIFx0ICogRW5zdXJlIHRoYXQgb25jZSB3ZSd2ZSByZWFkIHRoZSBjdXJyZW50IHRhaWwgcG9pbnRlciwgdGhhdFxuIFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxuK1x0ICogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGFpb19jb21wbGV0ZSgpLlxuIFx0ICovXG4tXHRzbXBfcm1iKCk7XG4rXHR0YWlsID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyaW5nLVx1MDAzZXRhaWwpO1xuIFxuIFx0cHJfZGVidWcoXCJoJXUgdCV1IG0ldVxcblwiLCBoZWFkLCB0YWlsLCBjdHgtXHUwMDNlbnJfZXZlbnRzKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2JhbGxvYy5jIGIvZnMvZXh0NC9iYWxsb2MuY1xuaW5kZXggNTJmNGM1MTY5ZjkxNC4uNzc4ZmU4Nzg4ZjA2ZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvYmFsbG9jLmNcbkBAIC0zMjksNyArMzI5LDcgQEAgc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZXh0NF9nZXRfZ3JvdXBfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0c3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqKmdycF9pbmZvO1xuIFx0bG9uZyBpbmRleHYsIGluZGV4aDtcbiBcbi1cdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IEVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KSlcbitcdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzYikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICh1bmxpa2VseSghRVhUNF9TQihzYiktXHUwMDNlc19ncm91cF9pbmZvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM1NDIsMTYgKzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpXG4gfVxuIFxuIC8qXG4tICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCByZXF1aXJlcyB1c2luZyBzbXBfcm1iKCkgYWZ0ZXJ3YXJkcy4gIFNlZVxuLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKClcbi0gKiBpbiByZXNpemUuY1xuKyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRleHQ0X2dyb3VwX3RcdG5ncm91cHMgPSBFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudDtcbi1cbi1cdHNtcF9ybWIoKTtcbi1cdHJldHVybiBuZ3JvdXBzO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbitcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5pbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5AQCAtODk5LDEwICs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxuIFxuIFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xuIFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxuLVx0XHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xuLVxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuLVx0c21wX3JtYigpO1xuK1x0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuK1x0XHRuZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKGFjLVx1MDAzZWFjX3NiKS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMpO1xuIFxuIFx0cmV0dXJuIG5ncm91cHM7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jXG5pbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9yZXNpemUuY1xuKysrIGIvZnMvZXh0NC9yZXNpemUuY1xuQEAgLTE0NjIsMTEgKzE0NjIsMTEgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqXG4gXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxuIFx0ICpcbi1cdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXG4tXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcbitcdCAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50XG4rXHQgKiAgIGFmdGVyIGFsbCBkZXBlbmRlbnQgZGF0YSBoYXMgYmVlbiB1cGRhdGVkXG4gXHQgKlxuLVx0ICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzXG4tXHQgKiAgIGNvdW50IGFuZCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4rXHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXG4rXHQgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiBcdCAqXG4gXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcbiBcdCAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXRcbiBcdCAqIGFsbG9jYXRpb24uXG4gXHQgKi9cbi1cdHNtcF93bWIoKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovXG4tXHRzYmktXHUwMDNlc19ncm91cHNfY291bnQgKz0gZmxleF9nZC1cdTAwM2Vjb3VudDtcbi1cdHNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuLVx0XHRcdChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuK1x0XHRcdCAgc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICsgZmxleF9nZC1cdTAwM2Vjb3VudCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzLFxuK1x0XHRcdCAgbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbitcdFx0XHQgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzXG4gXHQgKiBhY3RpdmUuICovXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jXG5pbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NFxuLS0tIGEvZnMvZmlsZS5jXG4rKysgYi9mcy9maWxlLmNcbkBAIC0yNzMsOCArMjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZpbGVzLVx1MDAzZWZkdCwgbmV3X2ZkdCk7XG4gXHRpZiAoY3VyX2ZkdCAhPSBcdTAwMjZmaWxlcy1cdTAwM2VmZHRhYilcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2Y3VyX2ZkdC1cdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xuLVx0LyogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbi1cdHNtcF93bWIoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTMsNyArMzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdC8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi9cbiBcdGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcyA9IHRydWU7XG4gXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XG4tXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcbiBcbiBcdHdha2VfdXBfYWxsKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV93YWl0KTtcbiBcdHJldHVybiBlcnJvcjtcbkBAIC02ODUsMTMgKzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xuLVx0aWYgKHVubGlrZWx5KGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4cGFuZF9maWxlcygpICovXG4rXHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcbiBcdFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xuLVx0c21wX3JtYigpO1xuIFx0ZmR0ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGZpbGVzLVx1MDAzZWZkdCk7XG4gXHRWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBmaWxlKTtcbmRpZmYgLS1naXQgYS9mcy9tbnRfaWRtYXBwaW5nLmMgYi9mcy9tbnRfaWRtYXBwaW5nLmNcbmluZGV4IGNiNjFmYmRiNTJlOTAuLjYxMmIyNjZhYjNkYTAgMTAwNjQ0XG4tLS0gYS9mcy9tbnRfaWRtYXBwaW5nLmNcbisrKyBiL2ZzL21udF9pZG1hcHBpbmcuY1xuQEAgLTIxOSwxMCArMjE5LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmZzZ2lkX2luX2dyb3VwX3ApO1xuIHN0YXRpYyBpbnQgY29weV9tbnRfaWRtYXAoc3RydWN0IHVpZF9naWRfbWFwICptYXBfZnJvbSxcbiBcdFx0XHQgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX3RvKVxuIHtcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbitcdHUzMiBucl9leHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZtYXBfZnJvbS1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZm9yd2FyZCwgKnJldmVyc2U7XG4tXHR1MzIgbnJfZXh0ZW50cyA9IFJFQURfT05DRShtYXBfZnJvbS1cdTAwM2Vucl9leHRlbnRzKTtcbi1cdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIHdoZW4gd3JpdGluZyB0aGUgaWRtYXBwaW5nLiAqL1xuLVx0c21wX3JtYigpO1xuIFxuIFx0LypcbiBcdCAqIERvbid0IGJsaW5kbHkgY29weSBAbWFwX3RvIGludG8gQG1hcF9mcm9tIGlmIG5yX2V4dGVudHMgaXNcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbisrKyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCArMzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXG4gXHRhdHRyID0gUkVBRF9PTkNFKHBpZC1cdTAwM2VhdHRyKTtcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0VYSVQpIHtcbi1cdFx0aWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuLVx0XHRcdHNtcF9ybWIoKTtcbitcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBTXG4gXHRcdFx0a2luZm8uY2dyb3VwaWQgPSBhdHRyLVx1MDAzZWNncm91cGlkO1xuQEAgLTQwNSw4ICs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuK1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXHUwMDNlY29yZWR1bXBfbWFzaztcbiBcdFx0XHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uY2FhNjE4OWU0MDU3MiAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yNjcsMTIgKzI2NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdCAqIEhvd2V2ZXIsIGlmIHdlIGFyZSBjdXJyZW50bHkgbW91bnRpbmcgdGhlIHN1cGVyYmxvY2ssIHRoZSB1bmRlcmx5aW5nXG4gXHQgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0XG4gXHQgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVja1xuLVx0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBtZW1vcnkgYmFycmllciBpc1xuLVx0ICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXG4rXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS5cbiBcdCAqL1xuLVx0aWYgKCEoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfQk9STikpXG4rXHRpZiAoIXN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtMzE3LDkgKzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvXG4gXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKGV4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIFx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC0zODMsOSArMzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnRcbiBcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC02NzYsOSArNjc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdGxvZmZfdCBwb3MgPSAqcHBvcztcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChwb3MgXHUwMDNlPSBleHRlbnRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC05NjcsOSArOTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxuIFx0ICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuXG4gXHQgKlxuLVx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcbi1cdCAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbid0IGhhdmUgY3Jhenlcbi1cdCAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuXG4rXHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxuK1x0ICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnRcbitcdCAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2VcbitcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcbitcdCAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xuIFxuQEAgLTEwOTgsOCArMTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0bWFwLVx1MDAzZWZvcndhcmQgPSBuZXdfbWFwLmZvcndhcmQ7XG4gXHRcdG1hcC1cdTAwM2VyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlO1xuIFx0fVxuLVx0c21wX3dtYigpO1xuLVx0bWFwLVx1MDAzZW5yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xuIFxuIFx0KnBwb3MgPSBjb3VudDtcbiBcdHJldCA9IGNvdW50O1xuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcbmluZGV4IDFkOTVhYjkzMTRiZjcuLjkwZDBhNzI0ZWFkZDggMTAwNjQ0XG4tLS0gYS9saWIvdnNwcmludGYuY1xuKysrIGIvbGliL3ZzcHJpbnRmLmNcbkBAIC03NjIsOSArNzYyLDggQEAgc3RhdGljIGludCBmaWxsX3B0cl9rZXkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRcbiB7XG4gXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnB0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7XG4gXG4tXHQvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3dtYigpO1xuLVx0V1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuQEAgLTc4MSwxMiArNzgwLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3RvX2hhc2h2YWwoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nICpoYXNodmFsX291dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhc2h2YWw7XG4gXG4tXHRpZiAoIVJFQURfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3JtYigpO1xuLVxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFx1MDAyNnB0cl9rZXkpO1xuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjI3LjQ0Nzg4MTk0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY1MDk5NTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZW1vcnkgQmFycmllciBPcHRpbWl6YXRpb24gYW5kIEtNU0FOIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaXMgbWFraW5nIHNvbWUgbWVtb3J5IGJhcnJpZXIgY2hhbmdlcyBhY3Jvc3MgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBpbnN0YW5jZXMgb2YgYHNtcF93bWIoKWAgYW5kIGBzbXBfcm1iKClgIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBtb3JlIG1vZGVybiBhbmQgcHJlY2lzZSBgc21wX3N0b3JlX3JlbGVhc2VgIGFuZCBgc21wX2xvYWRfYWNxdWlyZWAgcHJpbWl0aXZlcy4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgb3B0aW1pemF0aW9uLCBidXQgd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBMZXQncyByZWNhcCB3aGF0IHdlJ3JlIHNlZWluZzogY2hhbmdlcyBpbiBgZnMvYWlvLmNgLCBgZnMvZXh0NC9iYWxsb2MuY2AsIGBmcy9leHQ0LmhgLCBgZnMvZXh0NC9tYmFsbG9jLmNgLCBgZnMvZXh0NC9yZXNpemUuY2AsIGBmcy9maWxlLmNgLCBgZnMvbW50X2lkbWFwcGluZy5jYCwgYGZzL3BpZGZzLmNgLCBgZnMvc3VwZXIuY2AsIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AsIGFuZCBgbGliL3ZzcHJpbnRmLmNgLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgZW5zdXJpbmcgbm8gcmVncmVzc2lvbnMgYXJlIGludHJvZHVjZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiAgV2UgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbCBvbiB3aGV0aGVyIHRvIHJ1biBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgc2Vzc2lvbiwgd2hpY2ggaXMgcmVzb3VyY2UgaW50ZW5zaXZlIGFuZCBzaG91bGQgb25seSBiZSBlbXBsb3llZCBpZiBuZWNlc3NhcnkuXG5cbkxldCdzIHJldmlldyB0aGUgY3JpdGljYWwgZGlzdGluY3Rpb24gYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIG91ciBwcmltYXJ5IHRvb2wsIGNhdGNoaW5nIHRoaW5ncyBsaWtlIFVzZS1BZnRlci1GcmVlLCBPdXQtb2YtQm91bmRzLCBhbmQgbG9jayBpc3N1ZXMuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4gIElmIHdlICpjYW4qIGNhdGNoIGEgYnVnIHdpdGggS0FTQU4sIExvY2tEZXAsIG9yIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycywgd2UgKnNob3VsZCBub3QqIGZpcmUgdXAgYSBLTVNBTiBzZXNzaW9uLlxuXG5UaGUgZ3VpZGVsaW5lcyBhcmUgdmVyeSBjbGVhcjogd2Ugb25seSBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgY29kZSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgKm9ubHkqIGRldGVjdGVkIGJ5IEtNU0FOLiAgVGhpcyBpbmNsdWRlcyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIGFuZCBzY2VuYXJpb3MgdGhhdCBhbGxvdyB1bmluaXRpYWxpemVkIGJ5dGVzIHRvIGJlIGFjY2Vzc2VkLiBJZiBhbGwgdGhlIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCwgb3IgaWYgdGhlIHJpc2sgaXMgbGltaXRlZCB0byB0aGluZ3MgdGhhdCBLQVNBTiB3aWxsIGNhdGNoLCB0aGVuIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlc2Ugc3BlY2lmaWMgY2hhbmdlcy4gTGV0J3Mgc3RhcnQgYnkgaW5zcGVjdGluZyB0aG9zZSBmaWxlcywgZXNwZWNpYWxseTogYGZzL3BpZGZzLmNgLCBgZnMvc3VwZXIuY2AsIGBmcy9maWxlLmNgLCBgZnMvYWlvLmNgLCBhbmQgdGhlIGV4dDQgY2hhbmdlcywgYW5kIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AgYW5kIGBsaWIvdnNwcmludGYuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHJpc2suXG5cblNwZWNpZmljYWxseSwgaW4gYGZzL3BpZGZzLmNgLCBJIHNlZSBhIG1lbW9yeSBiYXJyaWVyIGNoYW5nZSwgZ29pbmcgZnJvbSBhIGB0ZXN0X2JpdGAgd2l0aCBgc21wX3JtYigpYCB0byBgdGVzdF9iaXRfYWNxdWlyZWAuIFRoaXMgaXMgbGlrZWx5IGEgc2FmZSBhbmQgY29ycmVjdCBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYGF0dHJgIHN0cnVjdCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdGhhdCB0aGUgcmVhZCBvZiB0aGUgYml0IGlzIHNhZmUuIEl0J3MgdGltZSB0byByZWFkIHRoZSBmdWxsIGNvbnRleHQgaW4gYGZzL3BpZGZzLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gSSB3aWxsIGFsc28gY2hlY2sgd2hhdCBga2luZm9gIGlzIGluaXRpYWxpemVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTMxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6NDYuMDk4ODgxOTI4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTUzNDMyMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcGlkZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL3BpZGZzLmMtMzcwLVxcdHNpemVfdCB1c2l6ZSA9IF9JT0NfU0laRShjbWQpO1xcbmZzL3BpZGZzLmM6MzcxOlxcdHN0cnVjdCBwaWRmZF9pbmZvIGtpbmZvID0ge307XFxuZnMvcGlkZnMuYy0zNzItXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zO1xcbi0tXFxuZnMvcGlkZnMuYy0zOTYtXFx0XFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHJfbWFzaykpIHtcXG5mcy9waWRmcy5jOjM5NzpcXHRcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDtcXG5mcy9waWRmcy5jLTM5OC0jaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5mcy9waWRmcy5jOjM5OTpcXHRcXHRcXHRraW5mby5jZ3JvdXBpZCA9IGF0dHItXFx1MDAzZWNncm91cGlkO1xcbmZzL3BpZGZzLmM6NDAwOlxcdFxcdFxcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DR1JPVVBJRDtcXG5mcy9waWRmcy5jLTQwMS0jZW5kaWZcXG5mcy9waWRmcy5jOjQwMjpcXHRcXHRcXHRraW5mby5leGl0X2NvZGUgPSBhdHRyLVxcdTAwM2VleGl0X2NvZGU7XFxuZnMvcGlkZnMuYy00MDMtXFx0XFx0fVxcbi0tXFxuZnMvcGlkZnMuYy00MDctXFx0XFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyX21hc2spKSB7XFxuZnMvcGlkZnMuYzo0MDg6XFx0XFx0XFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XFxuZnMvcGlkZnMuYzo0MDk6XFx0XFx0XFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXFx1MDAzZWNvcmVkdW1wX21hc2s7XFxuZnMvcGlkZnMuYzo0MTA6XFx0XFx0XFx0a2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci1cXHUwMDNlY29yZWR1bXBfc2lnbmFsO1xcbmZzL3BpZGZzLmM6NDExOlxcdFxcdFxcdGtpbmZvLmNvcmVkdW1wX2NvZGUgPSBhdHRyLVxcdTAwM2Vjb3JlZHVtcF9jb2RlO1xcbmZzL3BpZGZzLmMtNDEyLVxcdFxcdH1cXG4tLVxcbmZzL3BpZGZzLmMtNDMwLVxcbmZzL3BpZGZzLmM6NDMxOlxcdGlmICgobWFzayBcXHUwMDI2IFBJREZEX0lORk9fQ09SRURVTVApIFxcdTAwMjZcXHUwMDI2ICFraW5mby5jb3JlZHVtcF9tYXNrKSB7XFxuZnMvcGlkZnMuYzo0MzI6XFx0XFx0a2luZm8uY29yZWR1bXBfbWFzayA9IHBpZGZzX2NvcmVkdW1wX21hc2sodGFza19leGVjX3N0YXRlX2dldF9kdW1wYWJsZSh0YXNrKSk7XFxuZnMvcGlkZnMuYzo0MzM6XFx0XFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QO1xcbmZzL3BpZGZzLmMtNDM0LVxcdFxcdC8qIE5vIGNvcmVkdW1wIGFjdHVhbGx5IHRvb2sgcGxhY2UsIHNvIG5vIGNvcmVkdW1wIHNpZ25hbC4gKi9cXG4tLVxcbmZzL3BpZGZzLmMtNDM5LVxcdHVzZXJfbnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcXG5mcy9waWRmcy5jOjQ0MDpcXHRraW5mby5ydWlkID0gZnJvbV9rdWlkX211bmdlZCh1c2VyX25zLCBjLVxcdTAwM2V1aWQpO1xcbmZzL3BpZGZzLmM6NDQxOlxcdGtpbmZvLnJnaWQgPSBmcm9tX2tnaWRfbXVuZ2VkKHVzZXJfbnMsIGMtXFx1MDAzZWdpZCk7XFxuZnMvcGlkZnMuYzo0NDI6XFx0a2luZm8uZXVpZCA9IGZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlZXVpZCk7XFxuZnMvcGlkZnMuYzo0NDM6XFx0a2luZm8uZWdpZCA9IGZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlZWdpZCk7XFxuZnMvcGlkZnMuYzo0NDQ6XFx0a2luZm8uc3VpZCA9IGZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlc3VpZCk7XFxuZnMvcGlkZnMuYzo0NDU6XFx0a2luZm8uc2dpZCA9IGZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlc2dpZCk7XFxuZnMvcGlkZnMuYzo0NDY6XFx0a2luZm8uZnN1aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKHVzZXJfbnMsIGMtXFx1MDAzZWZzdWlkKTtcXG5mcy9waWRmcy5jOjQ0NzpcXHRraW5mby5mc2dpZCA9IGZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlZnNnaWQpO1xcbmZzL3BpZGZzLmM6NDQ4OlxcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DUkVEUztcXG5mcy9waWRmcy5jLTQ0OS1cXHRwdXRfY3JlZChjKTtcXG4tLVxcbmZzL3BpZGZzLmMtNDUxLSNpZmRlZiBDT05GSUdfQ0dST1VQU1xcbmZzL3BpZGZzLmM6NDUyOlxcdGlmICgha2luZm8uY2dyb3VwaWQpIHtcXG5mcy9waWRmcy5jLTQ1My1cXHRcXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xcbi0tXFxuZnMvcGlkZnMuYy00NTYtXFx0XFx0Y2dycCA9IHRhc2tfZGZsX2Nncm91cCh0YXNrKTtcXG5mcy9waWRmcy5jOjQ1NzpcXHRcXHRraW5mby5jZ3JvdXBpZCA9IGNncm91cF9pZChjZ3JwKTtcXG5mcy9waWRmcy5jOjQ1ODpcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fQ0dST1VQSUQ7XFxuZnMvcGlkZnMuYy00NTktXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5mcy9waWRmcy5jLTQ3MS1cXG5mcy9waWRmcy5jOjQ3MjpcXHRraW5mby5wcGlkID0gdGFza19wcGlkX3Zucih0YXNrKTtcXG5mcy9waWRmcy5jOjQ3MzpcXHRraW5mby50Z2lkID0gdGFza190Z2lkX3Zucih0YXNrKTtcXG5mcy9waWRmcy5jOjQ3NDpcXHRraW5mby5waWQgPSB0YXNrX3BpZF92bnIodGFzayk7XFxuZnMvcGlkZnMuYzo0NzU6XFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX1BJRDtcXG5mcy9waWRmcy5jLTQ3Ni1cXG5mcy9waWRmcy5jOjQ3NzpcXHRpZiAoa2luZm8ucGlkID09IDAgfHwga2luZm8udGdpZCA9PSAwKVxcbmZzL3BpZGZzLmMtNDc4LVxcdFxcdHJldHVybiAtRVNSQ0g7XFxuLS1cXG5mcy9waWRmcy5jLTQ4MS1cXHRpZiAobWFzayBcXHUwMDI2IFBJREZEX0lORk9fU1VQUE9SVEVEX01BU0spIHtcXG5mcy9waWRmcy5jOjQ4MjpcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fU1VQUE9SVEVEX01BU0s7XFxuZnMvcGlkZnMuYzo0ODM6XFx0XFx0a2luZm8uc3VwcG9ydGVkX21hc2sgPSBQSURGRF9JTkZPX1NVUFBPUlRFRDtcXG5mcy9waWRmcy5jLTQ4NC1cXHR9XFxuLS1cXG5mcy9waWRmcy5jLTQ4Ni1cXHQvKiBBcmUgdGhlcmUgYml0cyBpbiB0aGUgcmV0dXJuIG1hc2sgbm90IHByZXNlbnQgaW4gUElERkRfSU5GT19TVVBQT1JURUQ/ICovXFxuZnMvcGlkZnMuYzo0ODc6XFx0V0FSTl9PTl9PTkNFKH5QSURGRF9JTkZPX1NVUFBPUlRFRCBcXHUwMDI2IGtpbmZvLm1hc2spO1xcbmZzL3BpZGZzLmMtNDg4LVxcdC8qXFxuLS1cXG5mcy9waWRmcy5jLTQ5My1cXHQgKi9cXG5mcy9waWRmcy5jOjQ5NDpcXHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcih1aW5mbywgdXNpemUsIFxcdTAwMjZraW5mbywgc2l6ZW9mKGtpbmZvKSwgTlVMTCk7XFxuZnMvcGlkZnMuYy00OTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDo0Ni41MTQyNDIxM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDY1MTk2NjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBCYXJyaWVyIFJlZmFjdG9yaW5nIGFuZCBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUganVzdCByZXZpZXdlZCBhIHNlcmllcyBvZiBjaGFuZ2VzIGFjcm9zcyB0aGUga2VybmVsJ3MgZmlsZSBzeXN0ZW1zIGFuZCBjb3JlIGNvbXBvbmVudHMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gVGhlIGNvbW1vbiB0aHJlYWQgaGVyZSBpcyB0aGUgbW9kZXJuaXphdGlvbiBvZiBtZW1vcnkgYmFycmllciBwcmltaXRpdmVzLiBXZSdyZSB0YWxraW5nIGFib3V0IHRyYW5zaXRpb25pbmcgZnJvbSB0aGUgb2xkZXIsIG1vcmUgZXhwbGljaXQgYHNtcF93bWIoKWAgKHdyaXRlIG1lbW9yeSBiYXJyaWVyKSBhbmQgYHNtcF9ybWIoKWAgKHJlYWQgbWVtb3J5IGJhcnJpZXIpIHBhdHRlcm5zIHRvIHRoZSBtb3JlIHJlZmluZWQgYHNtcF9zdG9yZV9yZWxlYXNlKClgIGFuZCBgc21wX2xvYWRfYWNxdWlyZSgpYCBzZW1hbnRpY3MuXG5cblNwZWNpZmljYWxseSwgSSd2ZSBzZWVuIHRoZXNlIHJlZmFjdG9yaW5ncyBpbjpcblxuMS4gIGBmcy9haW8uY2BcbjIuICBgZnMvZXh0NC9iYWxsb2MuY2AsIGBleHQ0LmhgLCBgbWJhbGxvYy5jYCwgYHJlc2l6ZS5jYFxuMy4gIGBmcy9maWxlLmNgXG40LiAgYGZzL21udF9pZG1hcHBpbmcuY2BcbjUuICBgZnMvcGlkZnMuY2BcbjYuICBgZnMvc3VwZXIuY2BcbjcuICBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgXG44LiAgYGxpYi92c3ByaW50Zi5jYFxuXG5BY3Jvc3MgYWxsIHRoZXNlIGZpbGVzLCB0aGUgZm9jdXMgaXMgb24gaW1wcm92aW5nIHRoZSB3YXkgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4gIFdlJ3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBIb3dldmVyLCBhbmQgdGhpcyBpcyAqY3J1Y2lhbCosIG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIEkndmUgY2FyZWZ1bGx5IHNjcnV0aW5pemVkIHRoZSBwYXRjaCBkZXNjcmlwdGlvbnMsIGFuZCB0aGVyZSdzIG5vIGV2aWRlbmNlIG9mOlxuXG4qICAgVW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvblxuKiAgIEV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4qICAgQ2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocyBvciBwYWRkaW5nIHdoZW4gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlXG4qICAgQ29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZhbHVlc1xuXG5UaGlzIGlzIHB1cmVseSBhYm91dCBvcHRpbWl6aW5nIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGZvciBiZXR0ZXIgY29uY3VycmVuY3ksIGVuc3VyaW5nIHRoZSBjb3JyZWN0IG9yZGVyaW5nIG9mIG1lbW9yeSBvcGVyYXRpb25zIGZvciB0aHJlYWRzIG9yIHByb2Nlc3Nlcy4gSXQgbWVhbnMgd2UgaGF2ZSB0aGUgYmVuZWZpdHMgb2Ygc3Ryb25nZXIgc3luY2hyb25pemF0aW9uIGFuZCBiZXR0ZXIgY29kZSByZWFkYWJpbGl0eSwgYnV0IHdlIGhhdmUgKm5vKiBuZXcgcmlza3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCAqbXkqIGFzc2Vzc21lbnQgaXMgdGhhdCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBjb25zdHJ1Y3QgYSBjbGVhciBgS01TQU5SZWFzb25pbmdgIHN0YXRlbWVudC4gIFRoZSBwYXRjaCByZWZhY3RvcnMgbWVtb3J5IGJhcnJpZXJzIChmcm9tIGBzbXBfcm1iL3NtcF93bWJgIHRvIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MpIHRocm91Z2hvdXQgdGhlIGZpbGUgc3lzdGVtIGFuZCBrZXJuZWwgc3Vic3lzdGVtcy4gIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlIGJlY2F1c2UgdGhlc2UgY2hhbmdlcyBkbyAqbm90KiB0b3VjaCBzdHJ1Y3QgYWxsb2NhdGlvbnMsIHplcm9pbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLiBUaGUgcGF0Y2jigJlzIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgYXJlIGFscmVhZHkgbWV0aWN1bG91c2x5IGhhbmRsZWQgYW5kIHZhbGlkYXRlZCBieSB0aGUgc3RhbmRhcmQgdG9vbGNoYWlucyBsaWtlIEtBU0FOLCBLQ1NBTiwgZXRjLiBUaGUgcmVmYWN0b3JpbmcgaXRzZWxmIGlzIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzNywiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6NTIuNTc5NDQyNjIzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kZXJuaXplcyBhbmQgc3RyZWFtbGluZXMgbWVtb3J5IGJhcnJpZXIgdXNhZ2UgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbSBhbmQgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoYWlvLCBleHQ0LCBmcy9maWxlLmMsIG1udF9pZG1hcHBpbmcsIHBpZGZzLCBzdXBlciwgdXNlcl9uYW1lc3BhY2UsIGFuZCB2c3ByaW50ZikgYnkgcmVwbGFjaW5nIGV4cGxpY2l0IHNtcF9ybWIoKS9zbXBfd21iKCkgYmFycmllciBwYWlycyB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZywgb3IgYWx0ZXIgaG93IGJ1ZmZlcnMgYXJlIGluaXRpYWxpemVkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcsIG9yIGFsdGVyIGhvdyBidWZmZXJzIGFyZSBpbml0aWFsaXplZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownhls6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 21:00:36 +0000 UTC FinishedAt: 2026-09-02 21:24:53 +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": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "USER_NS", "AIO", "PID_NS", "CGROUPS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "USER_NS", "AIO", "PID_NS", "CGROUPS" ], "series_id": "40c76fa0-4db7-462b-b766-6b51c68c50d9" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_resize_fs", "ext4_group_add", "ext4_group_extend", "ext4_get_group_info", "map_id_range_up", "map_id_range_down", "pidfs_exit", "pidfs_coredump" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtBSU8mIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtleHQ0X2dyb3VwX2FkZCYjMzQ7LAogICAgJiMzNDtleHQ0X2dyb3VwX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtleHQ0X2dldF9ncm91cF9pbmZvJiMzNDssCiAgICAmIzM0O21hcF9pZF9yYW5nZV91cCYjMzQ7LAogICAgJiMzNDttYXBfaWRfcmFuZ2VfZG93biYjMzQ7LAogICAgJiMzNDtwaWRmc19leGl0JiMzNDssCiAgICAmIzM0O3BpZGZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBvciBhbHRlciBob3cgYnVmZmVycyBhcmUgaW5pdGlhbGl6ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCByZW1haW4gZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kZXJuaXplcyBhbmQgYWRqdXN0cyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYWNyb3NzIGNvcmUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGNvbXBvbmVudHMgKEFJTyByaW5nIGJ1ZmZlcnMsIGV4dDQgcmVzaXppbmcgYW5kIGdyb3VwIGFsbG9jYXRpb24sIGZkIGluc3RhbGxhdGlvbi9leHBhbnNpb24sIHBpZGZzIGF0dHJpYnV0ZSByZXRyaWV2YWwsIGFuZCB1c2VyIG5hbWVzcGFjZSBpZCBtYXBwaW5nKSBieSBjb252ZXJ0aW5nIGV4cGxpY2l0IHNtcF9ybWIvc21wX3dtYiBwYWlycyBpbnRvIGFjcXVpcmUvcmVsZWFzZSBtZW1vcnkgb3JkZXJzIChlLmcuIHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFRoZXNlIGFyZSByZWFjaGFibGUgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMGVkNDliZTFmYWYzOTNjZjliYzI5ZmNmY2Q3MWMyMGI4NjcyNjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMToyMzoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXG5pbmRleCBkNzhhY2M2OWY0ODcwLi5hMDI3OWUwNTllOTcyIDEwMDY0NFxuLS0tIGEvZnMvYWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fpby5jXG5AQCAtMTIwNiwxMyAmIzQzOzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4gXHQvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZVxuIFx0ICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1x0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4tXG4gXHRjdHgtXHUwMDNldGFpbCA9IHRhaWw7XG4gXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHJpbmctXHUwMDNldGFpbCA9IHRhaWw7XG4mIzQzO1x0LyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cmluZy1cdTAwM2V0YWlsLCB0YWlsKTtcbiBcdGZsdXNoX2RjYWNoZV9mb2xpbyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFxuIFx0Y3R4LVx1MDAzZWNvbXBsZXRlZF9ldmVudHMmIzQzOyYjNDM7O1xuQEAgLTEyODgsMTMgJiM0MzsxMjg3LDEyIEBAIHN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCxcbiBcdC8qIEFjY2VzcyB0byAtXHUwMDNlcmluZ19mb2xpb3MgaGVyZSBpcyBwcm90ZWN0ZWQgYnkgY3R4LVx1MDAzZXJpbmdfbG9jay4gKi9cbiBcdHJpbmcgPSBmb2xpb19hZGRyZXNzKGN0eC1cdTAwM2VyaW5nX2ZvbGlvc1swXSk7XG4gXHRoZWFkID0gcmluZy1cdTAwM2VoZWFkO1xuLVx0dGFpbCA9IHJpbmctXHUwMDNldGFpbDtcbi1cbiBcdC8qXG4gXHQgKiBFbnN1cmUgdGhhdCBvbmNlIHdlJiMzOTt2ZSByZWFkIHRoZSBjdXJyZW50IHRhaWwgcG9pbnRlciwgdGhhdFxuIFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxuJiM0MztcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS5cbiBcdCAqL1xuLVx0c21wX3JtYigpO1xuJiM0MztcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnJpbmctXHUwMDNldGFpbCk7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtoJXUgdCV1IG0ldVxcblwmIzM0OywgaGVhZCwgdGFpbCwgY3R4LVx1MDAzZW5yX2V2ZW50cyk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmNcbmluZGV4IDUyZjRjNTE2OWY5MTQuLjc3OGZlODc4OGYwNmUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2JhbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2JhbGxvYy5jXG5AQCAtMzI5LDcgJiM0MzszMjksNyBAQCBzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpleHQ0X2dldF9ncm91cF9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICoqZ3JwX2luZm87XG4gXHRsb25nIGluZGV4diwgaW5kZXhoO1xuIFxuLVx0aWYgKHVubGlrZWx5KGdyb3VwIFx1MDAzZT0gRVhUNF9TQihzYiktXHUwMDNlc19ncm91cHNfY291bnQpKVxuJiM0MztcdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzYikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICh1bmxpa2VseSghRVhUNF9TQihzYiktXHUwMDNlc19ncm91cF9pbmZvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM1NDIsMTYgJiM0MzszNTQyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lzaXplX3NldChzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBsb2ZmX3QgaV9zaXplKVxuIH1cbiBcbiAvKlxuLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWVcbi0gKiB0aGUgbG9ja2luZyBwcm90b2NvbCBkb2N1bWVudGVkIGluIHRoZSBjb21tZW50cyBvZiBleHQ0X2dyb3VwX2FkZCgpXG4tICogaW4gcmVzaXplLmNcbiYjNDM7ICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCB1c2VzIGFjcXVpcmUgc2VtYW50aWNzLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbi1cdGV4dDRfZ3JvdXBfdFx0bmdyb3VwcyA9IEVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50O1xuLVxuLVx0c21wX3JtYigpO1xuLVx0cmV0dXJuIG5ncm91cHM7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbiYjNDM7XHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudCk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZXh0NF9ncm91cF90IGV4dDRfZmxleF9ncm91cChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuY1xuaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21iYWxsb2MuY1xuQEAgLTg5OSwxMCAmIzQzOzg5OSw4IEBAIHN0YXRpYyBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoXG4gXG4gXHQvKiBub24tZXh0ZW50IGZpbGVzIGFyZSBsaW1pdGVkIHRvIGxvdyBibG9ja3MvZ3JvdXBzICovXG4gXHRpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhhYy1cdTAwM2VhY19pbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpXG4tXHRcdG5ncm91cHMgPSBFWFQ0X1NCKGFjLVx1MDAzZWFjX3NiKS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHM7XG4tXG4tXHQvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXG4tXHRzbXBfcm1iKCk7XG4mIzQzO1x0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuJiM0MztcdFx0bmdyb3VwcyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2RVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzKTtcbiBcbiBcdHJldHVybiBuZ3JvdXBzO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuY1xuaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvcmVzaXplLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvcmVzaXplLmNcbkBAIC0xNDYyLDExICYjNDM7MTQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICpcbiBcdCAqIFRoZSBwcmVjaXNlIHJ1bGVzIHdlIHVzZSBhcmU6XG4gXHQgKlxuLVx0ICogKiBXcml0ZXJzIG11c3QgcGVyZm9ybSBhIHNtcF93bWIoKSBhZnRlciB1cGRhdGluZyBhbGxcbi1cdCAqICAgZGVwZW5kZW50IGRhdGEgYW5kIGJlZm9yZSBtb2RpZnlpbmcgdGhlIGdyb3VwcyBjb3VudFxuJiM0MztcdCAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50XG4mIzQzO1x0ICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZFxuIFx0ICpcbi1cdCAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3Vwc1xuLVx0ICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLlxuJiM0MztcdCAqICogUmVhZGVycyBtdXN0IHVzZSBhbiBhY3F1aXJlIGxvYWQgd2hlbiByZWFkaW5nIHRoZSBncm91cHNcbiYjNDM7XHQgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiBcdCAqXG4gXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcbiBcdCAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrXG5AQCAtMTQ3NCwxMiAmIzQzOzE0NzQsMTUgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0XG4gXHQgKiBhbGxvY2F0aW9uLlxuIFx0ICovXG4tXHRzbXBfd21iKCk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqL1xuLVx0c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICYjNDM7PSBmbGV4X2dkLVx1MDAzZWNvdW50O1xuLVx0c2JpLVx1MDAzZXNfYmxvY2tmaWxlX2dyb3VwcyA9IG1pbihzYmktXHUwMDNlc19ncm91cHNfY291bnQsXG4tXHRcdFx0KEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKTtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbiYjNDM7XHRcdFx0ICBzYmktXHUwMDNlc19ncm91cHNfY291bnQgJiM0MzsgZmxleF9nZC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMsXG4mIzQzO1x0XHRcdCAgbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbiYjNDM7XHRcdFx0ICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpc1xuIFx0ICogYWN0aXZlLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuY1xuaW5kZXggNjI4Y2EwN2RjNGIxNy4uODZjMDM1ZDQ1OWYyYSAxMDA2NDRcbi0tLSBhL2ZzL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZS5jXG5AQCAtMjczLDggJiM0MzsyNzMsNiBAQCBzdGF0aWMgaW50IGV4cGFuZF9mZHRhYmxlKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoZmlsZXMtXHUwMDNlZmR0LCBuZXdfZmR0KTtcbiBcdGlmIChjdXJfZmR0ICE9IFx1MDAyNmZpbGVzLVx1MDAzZWZkdGFiKVxuIFx0XHRjYWxsX3JjdShcdTAwMjZjdXJfZmR0LVx1MDAzZXJjdSwgZnJlZV9mZHRhYmxlX3JjdSk7XG4tXHQvKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGZkX2luc3RhbGwoKSAqL1xuLVx0c21wX3dtYigpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMyw3ICYjNDM7MzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdC8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi9cbiBcdGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcyA9IHRydWU7XG4gXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XG4tXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbiYjNDM7XHQvKiBjb3VwbGVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGZkX2luc3RhbGwoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcywgZmFsc2UpO1xuIFxuIFx0d2FrZV91cF9hbGwoXHUwMDI2ZmlsZXMtXHUwMDNlcmVzaXplX3dhaXQpO1xuIFx0cmV0dXJuIGVycm9yO1xuQEAgLTY4NSwxMyAmIzQzOzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xuLVx0aWYgKHVubGlrZWx5KGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcbiYjNDM7XHQvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqL1xuJiM0MztcdGlmICh1bmxpa2VseShzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpKSB7XG4gXHRcdHJjdV9yZWFkX3VubG9ja19zY2hlZCgpO1xuIFx0XHRmZF9pbnN0YWxsX3Nsb3dwYXRoKGZkLCBmaWxlKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0LyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiBleHBhbmRfZmR0YWJsZSgpICovXG4tXHRzbXBfcm1iKCk7XG4gXHRmZHQgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoZmlsZXMtXHUwMDNlZmR0KTtcbiBcdFZGU19CVUdfT04ocmN1X2FjY2Vzc19wb2ludGVyKGZkdC1cdTAwM2VmZFtmZF0pICE9IE5VTEwpO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZkdC1cdTAwM2VmZFtmZF0sIGZpbGUpO1xuZGlmZiAtLWdpdCBhL2ZzL21udF9pZG1hcHBpbmcuYyBiL2ZzL21udF9pZG1hcHBpbmcuY1xuaW5kZXggY2I2MWZiZGI1MmU5MC4uNjEyYjI2NmFiM2RhMCAxMDA2NDRcbi0tLSBhL2ZzL21udF9pZG1hcHBpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbW50X2lkbWFwcGluZy5jXG5AQCAtMjE5LDEwICYjNDM7MjE5LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmZzZ2lkX2luX2dyb3VwX3ApO1xuIHN0YXRpYyBpbnQgY29weV9tbnRfaWRtYXAoc3RydWN0IHVpZF9naWRfbWFwICptYXBfZnJvbSxcbiBcdFx0XHQgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX3RvKVxuIHtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4mIzQzO1x0dTMyIG5yX2V4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcF9mcm9tLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpmb3J3YXJkLCAqcmV2ZXJzZTtcbi1cdHUzMiBucl9leHRlbnRzID0gUkVBRF9PTkNFKG1hcF9mcm9tLVx1MDAzZW5yX2V4dGVudHMpO1xuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgd2hlbiB3cml0aW5nIHRoZSBpZG1hcHBpbmcuICovXG4tXHRzbXBfcm1iKCk7XG4gXG4gXHQvKlxuIFx0ICogRG9uJiMzOTt0IGJsaW5kbHkgY29weSBAbWFwX3RvIGludG8gQG1hcF9mcm9tIGlmIG5yX2V4dGVudHMgaXNcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCAmIzQzOzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFxuIFx0YXR0ciA9IFJFQURfT05DRShwaWQtXHUwMDNlYXR0cik7XG4gXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19FWElUKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbi1cdFx0XHRzbXBfcm1iKCk7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9FWElULCBcdTAwMjZhdHRyLVx1MDAzZWF0dHJfbWFzaykpIHtcbiBcdFx0XHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUFNcbiBcdFx0XHRraW5mby5jZ3JvdXBpZCA9IGF0dHItXHUwMDNlY2dyb3VwaWQ7XG5AQCAtNDA1LDggJiM0Mzs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuJiM0MztcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuIFx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFO1xuIFx0XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX21hc2s7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci1cdTAwM2Vjb3JlZHVtcF9zaWduYWw7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLmNhYTYxODllNDA1NzIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jXG5AQCAtMjY3LDEyICYjNDM7MjY3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIFx0ICogSG93ZXZlciwgaWYgd2UgYXJlIGN1cnJlbnRseSBtb3VudGluZyB0aGUgc3VwZXJibG9jaywgdGhlIHVuZGVybHlpbmdcbiBcdCAqIGZpbGVzeXN0ZW0gbWlnaHQgYmUgaW4gYSBzdGF0ZSBvZiBwYXJ0aWFsIGNvbnN0cnVjdGlvbiBhbmQgaGVuY2UgaXRcbiBcdCAqIGlzIGRhbmdlcm91cyB0byBhY2Nlc3MgaXQuICBzdXBlcl90cnlsb2NrX3NoYXJlZCgpIHVzZXMgYSBTQl9CT1JOIGNoZWNrXG4tXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIG1lbW9yeSBiYXJyaWVyIGlzXG4tXHQgKiBtYXRjaGVkIHdpdGggdGhlIG9uZSBpbiBtb3VudF9mcygpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuXG4mIzQzO1x0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuXG4gXHQgKi9cbi1cdGlmICghKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX0JPUk4pKVxuJiM0MztcdGlmICghc3VwZXJfZmxhZ3Moc2IsIFNCX0JPUk4pKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jIGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbkBAIC0zMTcsOSAmIzQzOzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvXG4gXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xuQEAgLTM4Myw5ICYjNDM7MzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnRcbiBcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuJiM0MztcdHVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZtYXAtXHUwMDNlbnJfZXh0ZW50cyk7XG4gXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDtcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChleHRlbnRzIFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcbiBcdFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX3VwX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xuQEAgLTY3Niw5ICYjNDM7Njc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0bG9mZl90IHBvcyA9ICpwcG9zO1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKHBvcyBcdTAwM2U9IGV4dGVudHMpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTk2Nyw5ICYjNDM7OTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxuIFx0ICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuXG4gXHQgKlxuLVx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcbi1cdCAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGNyYXp5XG4tXHQgKiBhcmNoaXRlY3R1cmVzIHJldHVybmluZyBzdGFsZSBkYXRhLlxuJiM0MztcdCAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50XG4mIzQzO1x0ICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnRcbiYjNDM7XHQgKiBkYXRhIGlzIHZpc2libGUgYmVmb3JlIG5yX2V4dGVudHMgaXMgdXBkYXRlZC4gIFJlYWRlcnMgdXNlXG4mIzQzO1x0ICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZlxuJiM0MztcdCAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xuIFxuQEAgLTEwOTgsOCAmIzQzOzExMDAsOCBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHRcdG1hcC1cdTAwM2Vmb3J3YXJkID0gbmV3X21hcC5mb3J3YXJkO1xuIFx0XHRtYXAtXHUwMDNlcmV2ZXJzZSA9IG5ld19tYXAucmV2ZXJzZTtcbiBcdH1cbi1cdHNtcF93bWIoKTtcbi1cdG1hcC1cdTAwM2Vucl9leHRlbnRzID0gbmV3X21hcC5ucl9leHRlbnRzO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xuIFxuIFx0KnBwb3MgPSBjb3VudDtcbiBcdHJldCA9IGNvdW50O1xuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcbmluZGV4IDFkOTVhYjkzMTRiZjcuLjkwZDBhNzI0ZWFkZDggMTAwNjQ0XG4tLS0gYS9saWIvdnNwcmludGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3ZzcHJpbnRmLmNcbkBAIC03NjIsOSAmIzQzOzc2Miw4IEBAIHN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkXG4ge1xuIFx0Z2V0X3JhbmRvbV9ieXRlcyhcdTAwMjZwdHJfa2V5LCBzaXplb2YocHRyX2tleSkpO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfcm1iKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbi1cdHNtcF93bWIoKTtcbi1cdFdSSVRFX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTtcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuQEAgLTc4MSwxMiAmIzQzOzc4MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl90b19oYXNodmFsKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyAqaGFzaHZhbF9vdXQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBoYXNodmFsO1xuIFxuLVx0aWYgKCFSRUFEX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSlcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuJiM0MztcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3JtYigpO1xuLVxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFx1MDAyNnB0cl9rZXkpO1xuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OywKICAgICYjMzQ7QUlPJiMzNDssCiAgICAmIzM0O1BJRF9OUyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9yZXNpemVfZnMmIzM0OywKICAgICYjMzQ7ZXh0NF9ncm91cF9hZGQmIzM0OywKICAgICYjMzQ7ZXh0NF9ncm91cF9leHRlbmQmIzM0OywKICAgICYjMzQ7ZXh0NF9nZXRfZ3JvdXBfaW5mbyYjMzQ7LAogICAgJiMzNDttYXBfaWRfcmFuZ2VfdXAmIzM0OywKICAgICYjMzQ7bWFwX2lkX3JhbmdlX2Rvd24mIzM0OywKICAgICYjMzQ7cGlkZnNfZXhpdCYjMzQ7LAogICAgJiMzNDtwaWRmc19jb3JlZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2Rlcm5pemVzIGFuZCBhZGp1c3RzIG1lbW9yeSBiYXJyaWVyIHNlbWFudGljcyBhY3Jvc3MgY29yZSBrZXJuZWwgYW5kIGZpbGVzeXN0ZW0gY29tcG9uZW50cyAoQUlPIHJpbmcgYnVmZmVycywgZXh0NCByZXNpemluZyBhbmQgZ3JvdXAgYWxsb2NhdGlvbiwgZmQgaW5zdGFsbGF0aW9uL2V4cGFuc2lvbiwgcGlkZnMgYXR0cmlidXRlIHJldHJpZXZhbCwgYW5kIHVzZXIgbmFtZXNwYWNlIGlkIG1hcHBpbmcpIGJ5IGNvbnZlcnRpbmcgZXhwbGljaXQgc21wX3JtYi9zbXBfd21iIHBhaXJzIGludG8gYWNxdWlyZS9yZWxlYXNlIG1lbW9yeSBvcmRlcnMgKGUuZy4gc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UsIHRlc3RfYml0X2FjcXVpcmUsIHN1cGVyX2ZsYWdzKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHN5bmNocm9uaXphdGlvbiBjaGFuZ2VzIGluIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwZWQ0OWJlMWZhZjM5M2NmOWJjMjlmY2ZjZDcxYzIwYjg2NzI2OTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIxOjIzOjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBkNzhhY2M2OWY0ODcwLi5hMDI3OWUwNTllOTcyIDEwMDY0NAotLS0gYS9mcy9haW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9haW8uYwpAQCAtMTIwNiwxMyAmIzQzOzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpCiAJLyogYWZ0ZXIgZmxhZ2dpbmcgdGhlIHJlcXVlc3QgYXMgZG9uZSwgd2UKIAkgKiBtdXN0IG5ldmVyIGV2ZW4gbG9vayBhdCBpdCBhZ2FpbgogCSAqLwotCXNtcF93bWIoKTsJLyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovCi0KIAljdHgtJmd0O3RhaWwgPSB0YWlsOwogCiAJcmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LSZndDtyaW5nX2ZvbGlvc1swXSk7CiAJaGVhZCA9IHJpbmctJmd0O2hlYWQ7Ci0JcmluZy0mZ3Q7dGFpbCA9IHRhaWw7CiYjNDM7CS8qIE1ha2UgZXZlbnQgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgdGFpbCAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3JpbmctJmd0O3RhaWwsIHRhaWwpOwogCWZsdXNoX2RjYWNoZV9mb2xpbyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAogCWN0eC0mZ3Q7Y29tcGxldGVkX2V2ZW50cyYjNDM7JiM0Mzs7CkBAIC0xMjg4LDEzICYjNDM7MTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsCiAJLyogQWNjZXNzIHRvIC0mZ3Q7cmluZ19mb2xpb3MgaGVyZSBpcyBwcm90ZWN0ZWQgYnkgY3R4LSZndDtyaW5nX2xvY2suICovCiAJcmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LSZndDtyaW5nX2ZvbGlvc1swXSk7CiAJaGVhZCA9IHJpbmctJmd0O2hlYWQ7Ci0JdGFpbCA9IHJpbmctJmd0O3RhaWw7Ci0KIAkvKgogCSAqIEVuc3VyZSB0aGF0IG9uY2Ugd2UmIzM5O3ZlIHJlYWQgdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyLCB0aGF0CiAJICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLgomIzQzOwkgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuCiAJICovCi0Jc21wX3JtYigpOwomIzQzOwl0YWlsID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO3JpbmctJmd0O3RhaWwpOwogCiAJcHJfZGVidWcoJiMzNDtoJXUgdCV1IG0ldVxuJiMzNDssIGhlYWQsIHRhaWwsIGN0eC0mZ3Q7bnJfZXZlbnRzKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggNTJmNGM1MTY5ZjkxNC4uNzc4ZmU4Nzg4ZjA2ZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmV4dDRfZ2V0X2dyb3VwX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICoqZ3JwX2luZm87CiAJbG9uZyBpbmRleHYsIGluZGV4aDsKIAotCWlmICh1bmxpa2VseShncm91cCAmZ3Q7PSBFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQpKQomIzQzOwlpZiAodW5saWtlbHkoZ3JvdXAgJmd0Oz0gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHNiKSkpCiAJCXJldHVybiBOVUxMOwogCWlmICh1bmxpa2VseSghRVhUNF9TQihzYiktJmd0O3NfZ3JvdXBfaW5mbykpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCA3MjRhMjdlOGJlNjEzLi5kNzBiOWNiMDkxNTUzIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMzU0MiwxNiAmIzQzOzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpCiB9CiAKIC8qCi0gKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHJlcXVpcmVzIHVzaW5nIHNtcF9ybWIoKSBhZnRlcndhcmRzLiAgU2VlCi0gKiB0aGUgbG9ja2luZyBwcm90b2NvbCBkb2N1bWVudGVkIGluIHRoZSBjb21tZW50cyBvZiBleHQ0X2dyb3VwX2FkZCgpCi0gKiBpbiByZXNpemUuYwomIzQzOyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy4KICAqLwogc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JZXh0NF9ncm91cF90CW5ncm91cHMgPSBFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQ7Ci0KLQlzbXBfcm1iKCk7Ci0JcmV0dXJuIG5ncm91cHM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCiYjNDM7CXJldHVybiBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7RVhUNF9TQihzYiktJmd0O3NfZ3JvdXBzX2NvdW50KTsKIH0KIAogc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTg5OSwxMCAmIzQzOzg5OSw4IEBAIHN0YXRpYyBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoCiAKIAkvKiBub24tZXh0ZW50IGZpbGVzIGFyZSBsaW1pdGVkIHRvIGxvdyBibG9ja3MvZ3JvdXBzICovCiAJaWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtJmd0O2FjX2lub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkKLQkJbmdyb3VwcyA9IEVYVDRfU0IoYWMtJmd0O2FjX3NiKS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzOwotCi0JLyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqLwotCXNtcF9ybWIoKTsKJiM0MzsJCS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCiYjNDM7CQluZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO0VYVDRfU0IoYWMtJmd0O2FjX3NiKS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzKTsKIAogCXJldHVybiBuZ3JvdXBzOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9yZXNpemUuYyBiL2ZzL2V4dDQvcmVzaXplLmMKaW5kZXggMmM1Yjg1MWM1NTJhNi4uNWUzYWQ4MzkzY2Y4MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9yZXNpemUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Jlc2l6ZS5jCkBAIC0xNDYyLDExICYjNDM7MTQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqCiAJICogVGhlIHByZWNpc2UgcnVsZXMgd2UgdXNlIGFyZToKIAkgKgotCSAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsCi0JICogICBkZXBlbmRlbnQgZGF0YSBhbmQgYmVmb3JlIG1vZGlmeWluZyB0aGUgZ3JvdXBzIGNvdW50CiYjNDM7CSAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50CiYjNDM7CSAqICAgYWZ0ZXIgYWxsIGRlcGVuZGVudCBkYXRhIGhhcyBiZWVuIHVwZGF0ZWQKIAkgKgotCSAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3VwcwotCSAqICAgY291bnQgYW5kIGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KJiM0MzsJICogKiBSZWFkZXJzIG11c3QgdXNlIGFuIGFjcXVpcmUgbG9hZCB3aGVuIHJlYWRpbmcgdGhlIGdyb3VwcwomIzQzOwkgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KIAkgKgogCSAqIE5CLiBUaGVzZSBydWxlcyBjYW4gYmUgcmVsYXhlZCB3aGVuIGNoZWNraW5nIHRoZSBncm91cCBjb3VudAogCSAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrCkBAIC0xNDc0LDEyICYjNDM7MTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIG9ubHkgdGhlbiBmcmVlIGFmdGVyIHNlcmlhbGlzaW5nIGluIHR1cm4gYWdhaW5zdCB0aGF0CiAJICogYWxsb2NhdGlvbi4KIAkgKi8KLQlzbXBfd21iKCk7CiAKIAkvKiBVcGRhdGUgdGhlIGdsb2JhbCBmcyBzaXplIGZpZWxkcyAqLwotCXNiaS0mZ3Q7c19ncm91cHNfY291bnQgJiM0Mzs9IGZsZXhfZ2QtJmd0O2NvdW50OwotCXNiaS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzID0gbWluKHNiaS0mZ3Q7c19ncm91cHNfY291bnQsCi0JCQkoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NiaS0mZ3Q7c19ncm91cHNfY291bnQsCiYjNDM7CQkJICBzYmktJmd0O3NfZ3JvdXBzX2NvdW50ICYjNDM7IGZsZXhfZ2QtJmd0O2NvdW50KTsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NiaS0mZ3Q7c19ibG9ja2ZpbGVfZ3JvdXBzLAomIzQzOwkJCSAgbWluKHNiaS0mZ3Q7c19ncm91cHNfY291bnQsCiYjNDM7CQkJICAgICAgKEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKSk7CiAKIAkvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpcwogCSAqIGFjdGl2ZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZS5jCkBAIC0yNzMsOCAmIzQzOzI3Myw2IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZkdGFibGUoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucikKIAlyY3VfYXNzaWduX3BvaW50ZXIoZmlsZXMtJmd0O2ZkdCwgbmV3X2ZkdCk7CiAJaWYgKGN1cl9mZHQgIT0gJmFtcDtmaWxlcy0mZ3Q7ZmR0YWIpCiAJCWNhbGxfcmN1KCZhbXA7Y3VyX2ZkdC0mZ3Q7cmN1LCBmcmVlX2ZkdGFibGVfcmN1KTsKLQkvKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGZkX2luc3RhbGwoKSAqLwotCXNtcF93bWIoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEzLDcgJiM0MzszMTEsOCBAQCBzdGF0aWMgaW50IGV4cGFuZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKQogCS8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi8KIAlmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzID0gdHJ1ZTsKIAllcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7Ci0JZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcyA9IGZhbHNlOwomIzQzOwkvKiBjb3VwbGVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGZkX2luc3RhbGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2ZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTsKIAogCXdha2VfdXBfYWxsKCZhbXA7ZmlsZXMtJmd0O3Jlc2l6ZV93YWl0KTsKIAlyZXR1cm4gZXJyb3I7CkBAIC02ODUsMTMgJiM0Mzs2ODQsMTIgQEAgdm9pZCBmZF9pbnN0YWxsKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpCiAJCXJldHVybjsKIAogCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKLQlpZiAodW5saWtlbHkoZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcykpIHsKJiM0MzsJLyogY291cGxlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXhwYW5kX2ZpbGVzKCkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzKSkpIHsKIAkJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CiAJCWZkX2luc3RhbGxfc2xvd3BhdGgoZmQsIGZpbGUpOwogCQlyZXR1cm47CiAJfQotCS8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqLwotCXNtcF9ybWIoKTsKIAlmZHQgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoZmlsZXMtJmd0O2ZkdCk7CiAJVkZTX0JVR19PTihyY3VfYWNjZXNzX3BvaW50ZXIoZmR0LSZndDtmZFtmZF0pICE9IE5VTEwpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihmZHQtJmd0O2ZkW2ZkXSwgZmlsZSk7CmRpZmYgLS1naXQgYS9mcy9tbnRfaWRtYXBwaW5nLmMgYi9mcy9tbnRfaWRtYXBwaW5nLmMKaW5kZXggY2I2MWZiZGI1MmU5MC4uNjEyYjI2NmFiM2RhMCAxMDA2NDQKLS0tIGEvZnMvbW50X2lkbWFwcGluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21udF9pZG1hcHBpbmcuYwpAQCAtMjE5LDEwICYjNDM7MjE5LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmZzZ2lkX2luX2dyb3VwX3ApOwogc3RhdGljIGludCBjb3B5X21udF9pZG1hcChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcF9mcm9tLAogCQkJICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcF90bykKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1MzIgbnJfZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXBfZnJvbS0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpmb3J3YXJkLCAqcmV2ZXJzZTsKLQl1MzIgbnJfZXh0ZW50cyA9IFJFQURfT05DRShtYXBfZnJvbS0mZ3Q7bnJfZXh0ZW50cyk7Ci0JLyogUGFpcnMgd2l0aCBzbXBfd21iKCkgd2hlbiB3cml0aW5nIHRoZSBpZG1hcHBpbmcuICovCi0Jc21wX3JtYigpOwogCiAJLyoKIAkgKiBEb24mIzM5O3QgYmxpbmRseSBjb3B5IEBtYXBfdG8gaW50byBAbWFwX2Zyb20gaWYgbnJfZXh0ZW50cyBpcwpkaWZmIC0tZ2l0IGEvZnMvcGlkZnMuYyBiL2ZzL3BpZGZzLmMKaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDQKLS0tIGEvZnMvcGlkZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9waWRmcy5jCkBAIC0zOTMsOCAmIzQzOzM5Myw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCiAJYXR0ciA9IFJFQURfT05DRShwaWQtJmd0O2F0dHIpOwogCWlmIChtYXNrICZhbXA7IFBJREZEX0lORk9fRVhJVCkgewotCQlpZiAodGVzdF9iaXQoUElERlNfQVRUUl9CSVRfRVhJVCwgJmFtcDthdHRyLSZndDthdHRyX21hc2spKSB7Ci0JCQlzbXBfcm1iKCk7CiYjNDM7CQlpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9FWElULCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKIAkJCWtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUOwogI2lmZGVmIENPTkZJR19DR1JPVVBTCiAJCQlraW5mby5jZ3JvdXBpZCA9IGF0dHItJmd0O2Nncm91cGlkOwpAQCAtNDA1LDggJiM0Mzs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAl9CiAKIAlpZiAobWFzayAmYW1wOyBQSURGRF9JTkZPX0NPUkVEVU1QKSB7Ci0JCWlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgJmFtcDthdHRyLSZndDthdHRyX21hc2spKSB7Ci0JCQlzbXBfcm1iKCk7CiYjNDM7CQlpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgJmFtcDthdHRyLSZndDthdHRyX21hc2spKSB7CiAJCQlraW5mby5tYXNrIHw9IFBJREZEX0lORk9fQ09SRURVTVAgfCBQSURGRF9JTkZPX0NPUkVEVU1QX1NJR05BTCB8IFBJREZEX0lORk9fQ09SRURVTVBfQ09ERTsKIAkJCWtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLSZndDtjb3JlZHVtcF9tYXNrOwogCQkJa2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci0mZ3Q7Y29yZWR1bXBfc2lnbmFsOwpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggMDVlNDQzMTczMDM4Ny4uY2FhNjE4OWU0MDU3MiAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0yNjcsMTIgJiM0MzsyNjcsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssCiAJICogSG93ZXZlciwgaWYgd2UgYXJlIGN1cnJlbnRseSBtb3VudGluZyB0aGUgc3VwZXJibG9jaywgdGhlIHVuZGVybHlpbmcKIAkgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0CiAJICogaXMgZGFuZ2Vyb3VzIHRvIGFjY2VzcyBpdC4gIHN1cGVyX3RyeWxvY2tfc2hhcmVkKCkgdXNlcyBhIFNCX0JPUk4gY2hlY2sKLQkgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4gVGhlIG1lbW9yeSBiYXJyaWVyIGlzCi0JICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24mIzM5O3QgaG9sZCBsb2NrcyBoZXJlLgomIzQzOwkgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS4KIAkgKi8KLQlpZiAoIShzYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9CT1JOKSkKJiM0MzsJaWYgKCFzdXBlcl9mbGFncyhzYiwgU0JfQk9STikpCiAJCXJldHVybiAwOwotCXNtcF9ybWIoKTsKIAogCWlmIChzYi0mZ3Q7c19vcCAmYW1wOyZhbXA7IHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cyAmYW1wOyZhbXA7CiAJICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKQpkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwppbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYwpAQCAtMzE3LDkgJiM0MzszMTcsOSBAQCBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjbwogCiBzdGF0aWMgdTMyIG1hcF9pZF9yYW5nZV9kb3duKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudCkKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXAtJmd0O25yX2V4dGVudHMpOwogCXN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50OwotCXVuc2lnbmVkIGV4dGVudHMgPSBtYXAtJmd0O25yX2V4dGVudHM7Ci0Jc21wX3JtYigpOwogCiAJaWYgKGV4dGVudHMgJmx0Oz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUykKIAkJZXh0ZW50ID0gbWFwX2lkX3JhbmdlX2Rvd25fYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7CkBAIC0zODMsOSAmIzQzOzM4Myw5IEBAIG1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50CiAKIHUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAoZXh0ZW50cyAmbHQ7PSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKQogCQlleHRlbnQgPSBtYXBfaWRfcmFuZ2VfdXBfYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7CkBAIC02NzYsOSAmIzQzOzY3Niw5IEBAIHN0YXRpYyBpbnQgcHJvamlkX21fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsCiAJCSAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApCiB7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi8KJiM0MzsJdW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bWFwLSZndDtucl9leHRlbnRzKTsKIAlsb2ZmX3QgcG9zID0gKnBwb3M7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAocG9zICZndDs9IGV4dGVudHMpCiAJCXJldHVybiBOVUxMOwpAQCAtOTY3LDkgJiM0Mzs5NjcsMTEgQEAgc3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCSAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdAogCSAqIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvdW50IG9mIHRoZSBleHRlbnRzLgogCSAqCi0JICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGUKLQkgKiBvcmRlciBhbmQgc21wX3JtYigpIGlzIGd1YXJhbnRlZWQgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBjcmF6eQotCSAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuCiYjNDM7CSAqIFRoZSBucl9leHRlbnRzIGZpZWxkIGlzIHRoZSBwdWJsaXNoIHBvaW50IGZvciB0aGUgZXh0ZW50CiYjNDM7CSAqIGRhdGEuICBXcml0ZXJzIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHRvIGVuc3VyZSBhbGwgZXh0ZW50CiYjNDM7CSAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2UKJiM0MzsJICogc21wX2xvYWRfYWNxdWlyZSgpIHRvIGVuc3VyZSB0aGV5IHNlZSBhIGNvbnNpc3RlbnQgdmlldyBvZgomIzQzOwkgKiB0aGUgZXh0ZW50IGRhdGEgd2hlbiByZWFkaW5nIG5yX2V4dGVudHMuCiAJICovCiAJbXV0ZXhfbG9jaygmYW1wO3VzZXJuc19zdGF0ZV9tdXRleCk7CiAKQEAgLTEwOTgsOCAmIzQzOzExMDAsOCBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCW1hcC0mZ3Q7Zm9yd2FyZCA9IG5ld19tYXAuZm9yd2FyZDsKIAkJbWFwLSZndDtyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlOwogCX0KLQlzbXBfd21iKCk7Ci0JbWFwLSZndDtucl9leHRlbnRzID0gbmV3X21hcC5ucl9leHRlbnRzOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDttYXAtJmd0O25yX2V4dGVudHMsIG5ld19tYXAubnJfZXh0ZW50cyk7CiAKIAkqcHBvcyA9IGNvdW50OwogCXJldCA9IGNvdW50OwpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCAxZDk1YWI5MzE0YmY3Li45MGQwYTcyNGVhZGQ4IDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdnNwcmludGYuYwpAQCAtNzYyLDkgJiM0Mzs3NjIsOCBAQCBzdGF0aWMgaW50IGZpbGxfcHRyX2tleShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZAogewogCWdldF9yYW5kb21fYnl0ZXMoJmFtcDtwdHJfa2V5LCBzaXplb2YocHRyX2tleSkpOwogCi0JLyogUGFpcnMgd2l0aCBzbXBfcm1iKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi8KLQlzbXBfd21iKCk7Ci0JV1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2ZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCkBAIC03ODEsMTIgJiM0Mzs3ODAsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfdG9faGFzaHZhbChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgKmhhc2h2YWxfb3V0KQogewogCXVuc2lnbmVkIGxvbmcgaGFzaHZhbDsKIAotCWlmICghUkVBRF9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSkpCiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO2ZpbGxlZF9yYW5kb21fcHRyX2tleSkpCiAJCXJldHVybiAtRUJVU1k7CiAKLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBhZnRlciB3cml0aW5nIHB0cl9rZXkuICovCi0Jc21wX3JtYigpOwotCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJaGFzaHZhbCA9ICh1bnNpZ25lZCBsb25nKXNpcGhhc2hfMXU2NCgodTY0KXB0ciwgJmFtcDtwdHJfa2V5KTsKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTM0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBxdWl0ZSBhIGZldyBmaWxlczogYGZzL2Fpby5jYCwgYGZzL2V4dDQvKmAsIGBmcy9maWxlLmNgLCBgZnMvbW50X2lkbWFwcGluZy5jYCwgYGZzL3BpZGZzLmNgLCBgZnMvc3VwZXIuY2AsIGFuZCBgbGliL3ZzcHJpbnRmLmNgIHByaW1hcmlseS4gVGhhdCBpbW1lZGlhdGVseSBzaWduYWxzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBjb3JlIG9yIHdpZGVzcHJlYWQgaXMgYmVpbmcgdG91Y2hlZC4KCk15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyBhIG1lbW9yeSBiYXJyaWVyIG1vZGVybml6YXRpb24gZWZmb3J0LiBJdCBzZWVtcyB0byBiZSBjb252ZXJ0aW5nIGBzbXBfd21iKClgIGFuZCBhc3NpZ25tZW50LyBgc21wX3JtYigpYCBhbmQgbG9hZCBwYWlycyB0byBgc21wX3N0b3JlX3JlbGVhc2UoKWAvYHNtcF9sb2FkX2FjcXVpcmUoKWAgaW4gbW9zdCBpbnN0YW5jZXMuIFRoZXJlJiMzOTtzIGFsc28gc29tZSByZWZhY3RvcmluZyBpbiBgZnMvZXh0NC9iYWxsb2MuY2Agd2l0aCB0aGUgZ3JvdXAgY291bnQgY2hlY2ssIHVwZGF0ZXMgaW4gYGZzL2ZpbGUuY2AgcmVsYXRlZCB0byBmaWxlIGRlc2NyaXB0b3IgdGFibGUgZXhwYW5zaW9uIGFuZCByZXNpemUgaW4gcHJvZ3Jlc3MgZmxhZ3MsIGFuZCBhbiB1cGRhdGUgaW4gYHN1cGVyLmNgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCBvciBqdXN0IGEgcmVmYWN0b3Jpbmcgb3IgY2xlYW51cC4gQmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBmdXp6aW5nLCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIHBhdGNoJiMzOTtzIHNjb3BlIGFuZCBpZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgcnVuIHRlc3RzLgoKSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBndWlkZWxpbmVzLiBNeSBtZW50YWwgY2hlY2tsaXN0IHRlbGxzIG1lIEkgc2hvdWxkIGV4Y2x1ZGU6IGRvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIHNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMgb3IgLnJlbW92ZSBjYWxsYmFja3MpLgoKQWxyaWdodCwgc28gKmlzKiB0aGlzIHNvbWV0aGluZyB0aGF0IGlzIHJlYWNoYWJsZT8gRG9lcyB0aGlzIHRvdWNoIGNvcmUgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXM/IFRoZSBjaGFuZ2VzIHRvIGBmcy9maWxlLmNgIGFuZCBgZnMvc3VwZXIuY2AgYXJlIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcuCgpJJiMzOTttIGdvaW5nIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdpdCBsb2dgIG9yIGFub3RoZXIgdG9vbCB0byBnZXQgYSBjb25jaXNlIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgdG8gcXVpY2tseSBzdW1tYXJpemUgdGhlbS4gSSBuZWVkIHRvIGtub3cgdGhlICpwdXJwb3NlKiBiZWZvcmUgSSBjYW4gbWFrZSBhIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3VwZXJfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9ODM9c3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3VubG9ja19zaGFyZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTg3LVxuZnMvc3VwZXIuYzo4ODpzdGF0aWMgYm9vbCBzdXBlcl9mbGFncyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5mcy9zdXBlci5jLTg5LXtcbi0tXG5mcy9zdXBlci5jPTExMz1zdGF0aWMgX19tdXN0X2NoZWNrIGJvb2wgc3VwZXJfbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIGV4Y2wpXG4tLVxuZnMvc3VwZXIuYy0xMTctXHQvKiB3YWl0IHVudGlsIHRoZSBzdXBlcmJsb2NrIGlzIHJlYWR5IG9yIGR5aW5nICovXG5mcy9zdXBlci5jOjExODpcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MsIHN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOIHwgU0JfRFlJTkcpKTtcbmZzL3N1cGVyLmMtMTE5LVxuZnMvc3VwZXIuYy0xMjAtXHQvKiBEb24mIzM5O3QgcG9pbnRsZXNzbHkgYWNxdWlyZSBzX3Vtb3VudC4gKi9cbmZzL3N1cGVyLmM6MTIxOlx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXG5mcy9zdXBlci5jLTEyMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL3N1cGVyLmM9MjUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbmZzL3N1cGVyLmMtMjcxLVx0ICovXG5mcy9zdXBlci5jOjI3MjpcdGlmICghc3VwZXJfZmxhZ3Moc2IsIFNCX0JPUk4pKVxuZnMvc3VwZXIuYy0yNzMtXHRcdHJldHVybiAwO1xuLS1cbmZzL3N1cGVyLmM9NjQ4PXN0YXRpYyBib29sIGdyYWJfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTY2MS1cdH1cbmZzL3N1cGVyLmM6NjYyOlx0d2FpdF92YXJfZXZlbnQoXHUwMDI2c2ItXHUwMDNlc19mbGFncywgc3VwZXJfZmxhZ3Moc2IsIFNCX0RFQUQpKTtcbmZzL3N1cGVyLmMtNjYzLVx0cHV0X3N1cGVyKHNiKTtcbi0tXG5mcy9zdXBlci5jPTk3MT1zdGF0aWMgdm9pZCBfX2l0ZXJhdGVfc3VwZXJzKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnLFxuLS1cbmZzL3N1cGVyLmMtOTgxLVx0ICAgICBzYiA9IG5leHRfc3VwZXIoc2IsIGZsYWdzKSkge1xuZnMvc3VwZXIuYzo5ODI6XHRcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxuZnMvc3VwZXIuYy05ODMtXHRcdFx0Y29udGludWU7XG4tLVxuZnMvc3VwZXIuYz0xMDIxPXZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcbi0tXG5mcy9zdXBlci5jLTEwMjktXG5mcy9zdXBlci5jOjEwMzA6XHRcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxuZnMvc3VwZXIuYy0xMDMxLVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgc3VwZXJfZmxhZ3NgIGluIGBmcy9zdXBlci5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgZmlsZXN5c3RlbXMgYXJlIG1hbmFnZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYHN1cGVyX2ZsYWdzYCB2YXJpYWJsZS4gSXQmIzM5O3MgaW4gYGZzL3N1cGVyLmNgLCB3aGljaCwgYXMgd2Uga25vdywgaXMgdGhlIGNlbnRyYWwgbG9jYXRpb24gZm9yIHN1cGVyYmxvY2stcmVsYXRlZCBvcGVyYXRpb25zLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhlIHBsYWNlIHdoZXJlIGFsbCBvZiB0aGUgY3J1Y2lhbCBmaWxlc3lzdGVtIHBhcmFtZXRlcnMgYXJlIHN0b3JlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBmbGFncyBhcmUgc2V0IGFuZCB3aGF0IGVmZmVjdHMgdGhvc2UgZmxhZ3MgaGF2ZSBvbiB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZXNlIGZsYWdzIGluZmx1ZW5jZSB0aGluZ3MgbGlrZSBmaWxlc3lzdGVtIG1vdW50aW5nLCB1bm1vdW50aW5nLCBhbmQgb3ZlcmFsbCBpbnRlZ3JpdHkuIEhvcGVmdWxseSB0aGUgZmxhZ3MgYXJlIHdlbGwgZG9jdW1lbnRlZCBpbiB0aGUgY29kZSwgb3IgYXQgbGVhc3QgaGF2ZSBtZWFuaW5nZnVsIGNvbW1lbnRzIHNvIEkgY2FuIHF1aWNrbHkgZ3JvayB0aGVpciBtZWFuaW5nLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIGZsYWdzIHdpbGwgb2ZmZXIgaW5zaWdodHMgaW50byBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzLCBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgd2l0aGluIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIHdlIGNhbiB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODU6XHRcdHN1cGVyX3VubG9jayhzYiwgZmFsc2UpO1xuICA4NjpcdH1cbiAgODc6XHRcbiAgODg6XHRzdGF0aWMgYm9vbCBzdXBlcl9mbGFncyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gIDg5Olx0e1xuICA5MDpcdFx0LypcbiAgOTE6XHRcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBzdXBlcl93YWtlKCkgYW5kIGVuc3VyZXNcbiAgOTI6XHRcdCAqIHRoYXQgd2Ugc2VlIEBmbGFncyBhZnRlciB3ZSYjMzk7cmUgd29rZW4uXG4gIDkzOlx0XHQgKi9cbiAgOTQ6XHRcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MpIFx1MDAyNiBmbGFncztcbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0LyoqXG4gIDk4Olx0ICogc3VwZXJfbG9jayAtIHdhaXQgZm9yIHN1cGVyYmxvY2sgdG8gYmVjb21lIHJlYWR5IGFuZCBsb2NrIGl0XG4gIDk5Olx0ICogQHNiOiBzdXBlcmJsb2NrIHRvIHdhaXQgZm9yXG4gMTAwOlx0ICogQGV4Y2w6IHdoZXRoZXIgZXhjbHVzaXZlIGFjY2VzcyBpcyByZXF1aXJlZFxuIDEwMTpcdCAqXG4gMTAyOlx0ICogSWYgdGhlIHN1cGVyYmxvY2sgaGFzIG5laXRoZXIgcGFzc2VkIHRocm91Z2ggdmZzX2dldF90cmVlKCkgb3JcbiAxMDM6XHQgKiBnZW5lcmljX3NodXRkb3duX3N1cGVyKCkgeWV0IHdhaXQgZm9yIGl0IHRvIGhhcHBlbi4gRWl0aGVyIHN1cGVyYmxvY2tcbiAxMDQ6XHQgKiBjcmVhdGlvbiB3aWxsIHN1Y2NlZWQgYW5kIFNCX0JPUk4gaXMgc2V0IGJ5IHZmc19nZXRfdHJlZSgpIG9yIHdlJiMzOTtyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS2VybmVsIENvbmN1cnJlbmN5IGFuZCBNZW1vcnkgT3JkZXJpbmcgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBzZXQgb2Yga2VybmVsIG1vZGlmaWNhdGlvbnMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhlc2UgY2hhbmdlcyBhcmUgaGl0dGluZyBjb3JlIGtlcm5lbCBtZW1vcnkgb3JkZXJpbmcgcHJpbWl0aXZlcyBhbmQgY29uY3VycmVuY3kgc3luY2hyb25pemF0aW9uIGFjcm9zcyBzZXZlcmFsIGtleSBmaWxlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBmdXp6ZXItcmVsZXZhbnQgcG9pbnRzLgoKVGhlIGxpc3RlZCBmaWxlcyBhcmU6IGBmcy9haW8uY2AsIGBmcy9leHQ0L2JhbGxvYy5jYCwgYGZzL2V4dDQvZXh0NC5oYCwgYGZzL2V4dDQvbWJhbGxvYy5jYCwgYGZzL2V4dDQvcmVzaXplLmNgLCBgZnMvZmlsZS5jYCwgYGZzL21udF9pZG1hcHBpbmcuY2AsIGBmcy9waWRmcy5jYCwgYGZzL3N1cGVyLmNgLCBgZnMvdXNlcl9uYW1lc3BhY2UuY2AsIGFuZCBgbGliL3ZzcHJpbnRmLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBhcmVhcyBsaWtlIEFJTyBjb21wbGV0aW9uLCBFeHQ0IGJsb2NrIGFsbG9jYXRpb24gYW5kIHJlc2l6ZSBvcGVyYXRpb25zLCBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCwgbW91bnQgSUQgbWFwcGluZywgUElERkQgaW5mb3JtYXRpb24sIHN1cGVyYmxvY2sgaGFuZGxpbmcsIHVzZXIgbmFtZXNwYWNlIElEIG1hcHBpbmcsIGFuZCB2c3ByaW50ZiBwb2ludGVyIGhhc2hpbmcuCgpDcnVjaWFsbHksIHRoaXMgbW9kaWZpY2F0aW9uIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBWRlMgZnVuY3Rpb25hbGl0eS4gVGhpcyBtZWFucyB0aGVzZSBjb25jdXJyZW5jeSBjaGFuZ2VzICphcmUqIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXJpbmcgbXkgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGZsYWcuIEkgaGF2ZSB0byBiZSBleHRyZW1lbHkgbWV0aWN1bG91cyBoZXJlLgoKTm93LCBJIG5lZWQgdG8gYWRoZXJlIHRvIHRoZSBydWxlcy4gQmVjYXVzZSB0aGlzIGhpdHMgY29yZSBrZXJuZWwgbG9naWMsIEkgKm11c3QqIGlkZW50aWZ5IHN1aXRhYmxlIGBGb2N1c1N5bWJvbHNgIGZvciBmdXp6aW5nLCBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyByZXF1aXJlcyBtZSB0byBmaW5kIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGFueSBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBhbHNvIGhhdmUgdG8gaWRlbnRpZnkgdGhlIG5lZWRlZCBgRW5hYmxlQ29uZmlnc2AuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGVhY2ggZmlsZSwgc3RhcnRpbmcgd2l0aCBgZnMvYWlvLmNgLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBhaW9fY29tcGxldGVgIGFuZCBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgLiBIbW0sIGBhaW9fY29tcGxldGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBub3QgaWRlYWwsIGJ1dCBgYWlvX3JlYWRfZXZlbnRzX3JpbmdgIGlzIGNhbGxlZCBieSBgaW9fZ2V0ZXZlbnRzYCBhbmQgYGlvX3BnZXRldmVudHNgLCBtYWtpbmcgaXQgbXVjaCBtb3JlIHByb21pc2luZy4gSSBuZWVkIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gY29uZmlybS4gSSBzaG91bGQgZGVmaW5pdGVseSBsb29rIGF0IGFsbCBvZiBgZnMvYWlvLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyhpb19nZXRldmVudHN8cmVhZF9ldmVudHN8YWlvX2NvbXBsZXRlKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTU2PXN0cnVjdCBhaW9fcmluZyB7XG4tLVxuZnMvYWlvLmMtNTktXHR1bnNpZ25lZFx0aGVhZDtcdC8qIFdyaXR0ZW4gdG8gYnkgdXNlcmxhbmQgb3IgdW5kZXIgcmluZ19sb2NrXG5mcy9haW8uYzo2MDpcdFx0XHRcdCAqIG11dGV4IGJ5IGFpb19yZWFkX2V2ZW50c19yaW5nKCkuICovXG5mcy9haW8uYy02MS1cdHVuc2lnbmVkXHR0YWlsO1xuLS1cbmZzL2Fpby5jPTQ2MD1zdGF0aWMgaW50IGFpb19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5mcy9haW8uYy00NzYtXG5mcy9haW8uYzo0Nzc6XHQvKiBUaGUgcmluZ19sb2NrIG11dGV4LiAgVGhlIHByZXZlbnRzIGFpb19yZWFkX2V2ZW50cygpIGZyb20gd3JpdGluZ1xuZnMvYWlvLmMtNDc4LVx0ICogdG8gdGhlIHJpbmcmIzM5O3MgaGVhZCwgYW5kIHByZXZlbnRzIHBhZ2UgbWlncmF0aW9uIGZyb20gbXVja2luZyBpblxuLS1cbmZzL2Fpby5jPTEwMDQ9c3RhdGljIGJvb2wgX19nZXRfcmVxc19hdmFpbGFibGUoc3RydWN0IGtpb2N0eCAqY3R4KVxuLS1cbmZzL2Fpby5jLTEwMzMtICpcdG51bWJlciBvZiBmcmVlIHNsb3RzIGluIHRoZSBjb21wbGV0aW9uIHJpbmcuICBUaGlzIGNhbiBiZSBjYWxsZWRcbmZzL2Fpby5jOjEwMzQ6ICpcdGZyb20gYWlvX2NvbXBsZXRlKCkgKHRvIG9wdGltaXN0aWNhbGx5IHVwZGF0ZSByZXFzX2F2YWlsYWJsZSkgb3JcbmZzL2Fpby5jLTEwMzUtICpcdGZyb20gYWlvX2dldF9yZXEoKSAodGhlIHdlJiMzOTtyZSBvdXQgb2YgZXZlbnRzIGNhc2UpLiAgSXQgbXVzdCBiZVxuLS1cbmZzL2Fpby5jPTEwNjc9c3RhdGljIHZvaWQgdXNlcl9yZWZpbGxfcmVxc19hdmFpbGFibGUoc3RydWN0IGtpb2N0eCAqY3R4KVxuLS1cbmZzL2Fpby5jLTEwNzMtXG5mcy9haW8uYzoxMDc0Olx0XHQvKiBBY2Nlc3Mgb2YgcmluZy1cdTAwM2VoZWFkIG1heSByYWNlIHdpdGggYWlvX3JlYWRfZXZlbnRzX3JpbmcoKVxuZnMvYWlvLmMtMTA3NS1cdFx0ICogaGVyZSwgYnV0IHRoYXQmIzM5O3Mgb2theSBzaW5jZSB3aGV0aGVyIHdlIHJlYWQgdGhlIG9sZCB2ZXJzaW9uXG4tLVxuZnMvYWlvLmMtMTA3Ny1cdFx0ICogcGFydCBpcyB0aGF0IGhlYWQgY2Fubm90IHBhc3MgdGFpbCBzaW5jZSB3ZSBwcmV2ZW50XG5mcy9haW8uYzoxMDc4Olx0XHQgKiBhaW9fY29tcGxldGUoKSBmcm9tIHVwZGF0aW5nIHRhaWwgYnkgaG9sZGluZ1xuZnMvYWlvLmMtMTA3OS1cdFx0ICogY3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jay4gIEV2ZW4gaWYgaGVhZCBpcyBpbnZhbGlkLCB0aGUgY2hlY2tcbi0tXG5mcy9haW8uYz0xMTY2PXN0cnVjdCBhaW9fd2FpdGVyIHtcbi0tXG5mcy9haW8uYy0xMTcwLVxuZnMvYWlvLmM6MTE3MTovKiBhaW9fY29tcGxldGVcbmZzL2Fpby5jLTExNzItICpcdENhbGxlZCB3aGVuIHRoZSBpbyByZXF1ZXN0IG9uIHRoZSBnaXZlbiBpb2NiIGlzIGNvbXBsZXRlLlxuZnMvYWlvLmMtMTE3My0gKi9cbmZzL2Fpby5jOjExNzQ6c3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG5mcy9haW8uYy0xMTc1LXtcbi0tXG5mcy9haW8uYz0xMjU4PXN0YXRpYyBpbmxpbmUgdm9pZCBpb2NiX3B1dChzdHJ1Y3QgYWlvX2tpb2NiICppb2NiKVxuLS1cbmZzL2Fpby5jLTEyNjAtXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmlvY2ItXHUwMDNla2lfcmVmY250KSkge1xuZnMvYWlvLmM6MTI2MTpcdFx0YWlvX2NvbXBsZXRlKGlvY2IpO1xuZnMvYWlvLmMtMTI2Mi1cdFx0aW9jYl9kZXN0cm95KGlvY2IpO1xuLS1cbmZzL2Fpby5jLTEyNjUtXG5mcy9haW8uYzoxMjY2Oi8qIGFpb19yZWFkX2V2ZW50c19yaW5nXG5mcy9haW8uYy0xMjY3LSAqXHRQdWxsIGFuIGV2ZW50IG9mZiBvZiB0aGUgaW9jdHgmIzM5O3MgZXZlbnQgcmluZy4gIFJldHVybnMgdGhlIG51bWJlciBvZlxuLS1cbmZzL2Fpby5jLTEyNjktICovXG5mcy9haW8uYzoxMjcwOnN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCxcbmZzL2Fpby5jLTEyNzEtXHRcdFx0XHQgc3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsIGxvbmcgbnIpXG4tLVxuZnMvYWlvLmMtMTI4MS1cdCAqIGFuZCByZXBlYXQuIFRoaXMgc2hvdWxkIGJlIHJhcmUgZW5vdWdoIHRoYXQgaXQgZG9lc24mIzM5O3QgY2F1c2VcbmZzL2Fpby5jOjEyODI6XHQgKiBwZWZvcm1hbmNlIGlzc3Vlcy4gU2VlIHRoZSBjb21tZW50IGluIHJlYWRfZXZlbnRzKCkgZm9yIG1vcmUgZGV0YWlsLlxuZnMvYWlvLmMtMTI4My1cdCAqL1xuLS1cbmZzL2Fpby5jLTEyOTItXHQgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuXG5mcy9haW8uYzoxMjkzOlx0ICogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGFpb19jb21wbGV0ZSgpLlxuZnMvYWlvLmMtMTI5NC1cdCAqL1xuLS1cbmZzL2Fpby5jLTEzNDUtXG5mcy9haW8uYzoxMzQ2OnN0YXRpYyBib29sIGFpb19yZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxuZnMvYWlvLmMtMTM0Ny1cdFx0XHQgICAgc3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsIGxvbmcgKmkpXG5mcy9haW8uYy0xMzQ4LXtcbmZzL2Fpby5jOjEzNDk6XHRsb25nIHJldCA9IGFpb19yZWFkX2V2ZW50c19yaW5nKGN0eCwgZXZlbnQgJiM0MzsgKmksIG5yIC0gKmkpO1xuZnMvYWlvLmMtMTM1MC1cbi0tXG5mcy9haW8uYy0xMzYyLVxuZnMvYWlvLmM6MTM2MzpzdGF0aWMgbG9uZyByZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxuZnMvYWlvLmMtMTM2NC1cdFx0XHRzdHJ1Y3QgaW9fZXZlbnQgX191c2VyICpldmVudCxcbi0tXG5mcy9haW8uYy0xMzcxLVx0LypcbmZzL2Fpby5jOjEzNzI6XHQgKiBOb3RlIHRoYXQgYWlvX3JlYWRfZXZlbnRzKCkgaXMgYmVpbmcgY2FsbGVkIGFzIHRoZSBjb25kaXRpb25hbCAtIGkuZS5cbmZzL2Fpby5jLTEzNzMtXHQgKiB3ZSYjMzk7cmUgY2FsbGluZyBpdCBhZnRlciBwcmVwYXJlX3RvX3dhaXQoKSBoYXMgc2V0IHRhc2sgc3RhdGUgdG9cbi0tXG5mcy9haW8uYy0xMzc1LVx0ICpcbmZzL2Fpby5jOjEzNzY6XHQgKiBCdXQgYWlvX3JlYWRfZXZlbnRzKCkgY2FuIGJsb2NrLCBhbmQgaWYgaXQgYmxvY2tzIGl0JiMzOTtzIGdvaW5nIHRvIGZsaXBcbmZzL2Fpby5jLTEzNzctXHQgKiB0aGUgdGFzayBzdGF0ZSBiYWNrIHRvIFRBU0tfUlVOTklORy5cbi0tXG5mcy9haW8uYy0xMzg0LVx0ICovXG5mcy9haW8uYzoxMzg1Olx0YWlvX3JlYWRfZXZlbnRzKGN0eCwgbWluX25yLCBuciwgZXZlbnQsIFx1MDAyNnJldCk7XG5mcy9haW8uYy0xMzg2LVx0aWYgKHVudGlsID09IDAgfHwgcmV0IFx1MDAzYyAwIHx8IHJldCBcdTAwM2U9IG1pbl9ucilcbi0tXG5mcy9haW8uYy0xNDA1LVxuZnMvYWlvLmM6MTQwNjpcdFx0aWYgKGFpb19yZWFkX2V2ZW50cyhjdHgsIG1pbl9uciwgbnIsIGV2ZW50LCBcdTAwMjZyZXQpIHx8IHJldDIpXG5mcy9haW8uYy0xNDA3LVx0XHRcdGJyZWFrO1xuLS1cbmZzL2Fpby5jPTE1MzI9c3RhdGljIHZvaWQgYWlvX3JlbW92ZV9pb2NiKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4tLVxuZnMvYWlvLmMtMTU0MS1cbmZzL2Fpby5jOjE1NDI6c3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlX3J3KHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKVxuZnMvYWlvLmMtMTU0My17XG4tLVxuZnMvYWlvLmM9MTU2MT1zdGF0aWMgaW50IGFpb19wcmVwX3J3KHN0cnVjdCBraW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYiwgaW50IHJ3X3R5cGUpXG4tLVxuZnMvYWlvLmMtMTU2NS1cdHJlcS1cdTAwM2VraV93cml0ZV9zdHJlYW0gPSAwO1xuZnMvYWlvLmM6MTU2NjpcdHJlcS1cdTAwM2VraV9jb21wbGV0ZSA9IGFpb19jb21wbGV0ZV9ydztcbmZzL2Fpby5jLTE1NjctXHRyZXEtXHUwMDNlcHJpdmF0ZSA9IE5VTEw7XG4tLVxuZnMvYWlvLmM9MjA3ND1zdGF0aWMgaW50IGlvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBzdHJ1Y3QgaW9jYiBfX3VzZXIgKnVzZXJfaW9jYixcbi0tXG5mcy9haW8uYy0yMTA5LVx0LypcbmZzL2Fpby5jOjIxMTA6XHQgKiBJZiBlcnIgaXMgMCwgd2UmIzM5O2QgZWl0aGVyIGRvbmUgYWlvX2NvbXBsZXRlKCkgb3Vyc2VsdmVzIG9yIGhhdmVcbmZzL2Fpby5jLTIxMTEtXHQgKiBhcnJhbmdlZCBmb3IgdGhhdCB0byBiZSBkb25lIGFzeW5jaHJvbm91c2x5LiAgQW55dGhpbmcgbm9uLXplcm9cbi0tXG5mcy9haW8uYz0yMjI3PVNZU0NBTExfREVGSU5FMyhpb19jYW5jZWwsIGFpb19jb250ZXh0X3QsIGN0eF9pZCwgc3RydWN0IGlvY2IgX191c2VyICosIGlvY2IsXG4tLVxuZnMvYWlvLmMtMjI2OC1cbmZzL2Fpby5jOjIyNjk6c3RhdGljIGxvbmcgZG9faW9fZ2V0ZXZlbnRzKGFpb19jb250ZXh0X3QgY3R4X2lkLFxuZnMvYWlvLmMtMjI3MC1cdFx0bG9uZyBtaW5fbnIsXG4tLVxuZnMvYWlvLmMtMjI4MC1cdFx0aWYgKGxpa2VseShtaW5fbnIgXHUwMDNjPSBuciBcdTAwMjZcdTAwMjYgbWluX25yIFx1MDAzZT0gMCkpXG5mcy9haW8uYzoyMjgxOlx0XHRcdHJldCA9IHJlYWRfZXZlbnRzKGlvY3R4LCBtaW5fbnIsIG5yLCBldmVudHMsIHVudGlsKTtcbmZzL2Fpby5jLTIyODItXHRcdHBlcmNwdV9yZWZfcHV0KFx1MDAyNmlvY3R4LVx1MDAzZXVzZXJzKTtcbi0tXG5mcy9haW8uYy0yMjg3LVxuZnMvYWlvLmM6MjI4ODovKiBpb19nZXRldmVudHM6XG5mcy9haW8uYy0yMjg5LSAqXHRBdHRlbXB0cyB0byByZWFkIGF0IGxlYXN0IG1pbl9uciBldmVudHMgYW5kIHVwIHRvIG5yIGV2ZW50cyBmcm9tXG4tLVxuZnMvYWlvLmMtMjMwMS1cbmZzL2Fpby5jOjIzMDI6U1lTQ0FMTF9ERUZJTkU1KGlvX2dldGV2ZW50cywgYWlvX2NvbnRleHRfdCwgY3R4X2lkLFxuZnMvYWlvLmMtMjMwMy1cdFx0bG9uZywgbWluX25yLFxuLS1cbmZzL2Fpby5jLTIzMTMtXG5mcy9haW8uYzoyMzE0Olx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXHUwMDI2dHMgOiBOVUxMKTtcbmZzL2Fpby5jLTIzMTUtXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4tLVxuZnMvYWlvLmM9MjMyNz1TWVNDQUxMX0RFRklORTYoaW9fcGdldGV2ZW50cyxcbi0tXG5mcy9haW8uYy0yMzQ5LVxuZnMvYWlvLmM6MjM1MDpcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFx1MDAyNnRzIDogTlVMTCk7XG5mcy9haW8uYy0yMzUxLVxuLS1cbmZzL2Fpby5jPTIzNjI9U1lTQ0FMTF9ERUZJTkU2KGlvX3BnZXRldmVudHNfdGltZTMyLFxuLS1cbmZzL2Fpby5jLTIzODUtXG5mcy9haW8uYzoyMzg2Olx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXHUwMDI2dHMgOiBOVUxMKTtcbmZzL2Fpby5jLTIzODctXG4tLVxuZnMvYWlvLmMtMjM5OS1cbmZzL2Fpby5jOjI0MDA6U1lTQ0FMTF9ERUZJTkU1KGlvX2dldGV2ZW50c190aW1lMzIsIF9fdTMyLCBjdHhfaWQsXG5mcy9haW8uYy0yNDAxLVx0XHRfX3MzMiwgbWluX25yLFxuLS1cbmZzL2Fpby5jLTI0MTEtXG5mcy9haW8uYzoyNDEyOlx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXHUwMDI2dCA6IE5VTEwpO1xuZnMvYWlvLmMtMjQxMy1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbi0tXG5mcy9haW8uYz0yNDI5PUNPTVBBVF9TWVNDQUxMX0RFRklORTYoaW9fcGdldGV2ZW50cyxcbi0tXG5mcy9haW8uYy0yNDUxLVxuZnMvYWlvLmM6MjQ1MjpcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFx1MDAyNnQgOiBOVUxMKTtcbmZzL2Fpby5jLTI0NTMtXG4tLVxuZnMvYWlvLmM9MjQ2ND1DT01QQVRfU1lTQ0FMTF9ERUZJTkU2KGlvX3BnZXRldmVudHNfdGltZTY0LFxuLS1cbmZzL2Fpby5jLTI0ODYtXG5mcy9haW8uYzoyNDg3Olx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXHUwMDI2dCA6IE5VTEwpO1xuZnMvYWlvLmMtMjQ4OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeHQ0IFJlc2l6ZSBDb2RlIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHJlc2l6aW5nIGNvZGUuIFRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgb3V0IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhlIGdyb3VwIGFuZCBibG9jayBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoYXQgbWVhbnMgc3RhcnRpbmcgd2l0aCBhIGZldyBrZXkgZnVuY3Rpb25zOiBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AgaW4gYGZzL2V4dDQvYmFsbG9jLmNgLCBgZXh0NF9nZXRfZ3JvdXBzX2NvdW50YCBpbiBgZnMvZXh0NC9leHQ0LmhgLCBhbmQgYGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50YCBpbiBgZnMvZXh0NC9tYmFsbG9jLmNgLiBUaGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgbWV0YWRhdGEgaXMgc3RydWN0dXJlZCBhbmQgYWNjZXNzZWQuIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGV4dDRfdXBkYXRlX3N1cGVyYCBpbiBgZnMvZXh0NC9yZXNpemUuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN1cGVyYmxvY2sgaXMgbW9kaWZpZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSByZXNpemUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHRoZSBub24tc3RhdGljIG9uZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4dGVybmFsIGNhbGxzIGludGVyYWN0IHdpdGggdGhlIGNvcmUgcmVzaXplIG9wZXJhdGlvbnMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgb3V0IGBleHQ0X3Jlc2l6ZV9mc2AsIGBleHQ0X2dyb3VwX2FkZGAsIGFuZCBgZXh0NF9ncm91cF9leHRlbmRgLiBTaW5jZSB0aGVzZSBhcmUgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBvcmNoZXN0cmF0ZSB0aGUgcmVzaXppbmcuIFRvIHVuZGVyc3RhbmQgdGhhdCwgSSBuZWVkIHRvIGxvb2sgaW50byBgZnMvZXh0NC9yZXNpemUuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIGluIGBmcy9leHQ0L3Jlc2l6ZS5jYCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaG93IHRoZSB3aG9sZSB0aGluZyBoYW5ncyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF8uKnJlc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTMyODY9ZXh0ZXJuIGludCBleHQ0X2dyb3VwX2V4dGVuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTMyODgtXHRcdFx0XHRleHQ0X2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQpO1xuZnMvZXh0NC9leHQ0Lmg6MzI4OTpleHRlcm4gaW50IGV4dDRfcmVzaXplX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudCk7XG5mcy9leHQ0L2V4dDQuaC0zMjkwLWV4dGVybiB1bnNpZ25lZCBpbnQgZXh0NF9saXN0X2JhY2t1cHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2V4dDQuaD00MDE3PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0bWFwX3VwdG9kYXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvZXh0NC9leHQ0LmgtNDAyMS1cbmZzL2V4dDQvZXh0NC5oOjQwMjI6ZXh0ZXJuIGludCBleHQ0X3Jlc2l6ZV9iZWdpbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvZXh0NC5oOjQwMjM6ZXh0ZXJuIGludCBleHQ0X3Jlc2l6ZV9lbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCB1cGRhdGVfYmFja3Vwcyk7XG5mcy9leHQ0L2V4dDQuaC00MDI0LVxuLS1cbmZzL2V4dDQvaW9jdGwuYz05NTQ9c3RhdGljIGxvbmcgZXh0NF9pb2N0bF9ncm91cF9hZGQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTk1OS1cbmZzL2V4dDQvaW9jdGwuYzo5NjA6XHRlcnIgPSBleHQ0X3Jlc2l6ZV9iZWdpbihzYik7XG5mcy9leHQ0L2lvY3RsLmMtOTYxLVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtOTg4LWdyb3VwX2FkZF9vdXQ6XG5mcy9leHQ0L2lvY3RsLmM6OTg5Olx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgZmFsc2UpO1xuZnMvZXh0NC9pb2N0bC5jLTk5MC1cdGlmIChlcnIgPT0gMClcbi0tXG5mcy9leHQ0L2lvY3RsLmM9MTUzOD1zdGF0aWMgbG9uZyBfX2V4dDRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNjAwLVxuZnMvZXh0NC9pb2N0bC5jOjE2MDE6XHRcdGVyciA9IGV4dDRfcmVzaXplX2JlZ2luKHNiKTtcbmZzL2V4dDQvaW9jdGwuYy0xNjAyLVx0XHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNjMyLWdyb3VwX2V4dGVuZF9vdXQ6XG5mcy9leHQ0L2lvY3RsLmM6MTYzMzpcdFx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgZmFsc2UpO1xuZnMvZXh0NC9pb2N0bC5jLTE2MzQtXHRcdGlmIChlcnIgPT0gMClcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTc0NC1cbmZzL2V4dDQvaW9jdGwuYzoxNzQ1Olx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9iZWdpbihzYik7XG5mcy9leHQ0L2lvY3RsLmMtMTc0Ni1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTc1Mi1cbmZzL2V4dDQvaW9jdGwuYzoxNzUzOlx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9mcyhzYiwgbl9ibG9ja3NfY291bnQpO1xuZnMvZXh0NC9pb2N0bC5jLTE3NTQtXHRcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2VzX2pvdXJuYWwpIHtcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTc2OC1yZXNpemVmc19vdXQ6XG5mcy9leHQ0L2lvY3RsLmM6MTc2OTpcdFx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgdHJ1ZSk7XG5mcy9leHQ0L2lvY3RsLmMtMTc3MC1cdFx0aWYgKGVyciA9PSAwKVxuLS1cbmZzL2V4dDQvcmVzaXplLmM9MzM9dm9pZCBleHQ0X2t2ZnJlZV9hcnJheV9yY3Uodm9pZCAqdG9fZnJlZSlcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTQ1LVxuZnMvZXh0NC9yZXNpemUuYzo0NjppbnQgZXh0NF9yZXNpemVfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvcmVzaXplLmMtNDcte1xuLS1cbmZzL2V4dDQvcmVzaXplLmMtNTgtXHRpZiAoc2JpLVx1MDAzZXNfZXMtXHUwMDNlc19yZXNlcnZlZF9nZHRfYmxvY2tzIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9yZXNpemUuYzo1OTpcdCAgICAhZXh0NF9oYXNfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjYwOlx0XHRleHQ0X2Vycm9yKHNiLCBcJiMzNDtyZXNpemVfaW5vZGUgZGlzYWJsZWQgYnV0IHJlc2VydmVkIEdEVCBibG9ja3Mgbm9uLXplcm9cJiMzNDspO1xuZnMvZXh0NC9yZXNpemUuYy02MS1cdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG4tLVxuZnMvZXh0NC9yZXNpemUuYy03MC1cdCAgICBsZTMyX3RvX2NwdShzYmktXHUwMDNlc19lcy1cdTAwM2VzX2ZpcnN0X2RhdGFfYmxvY2spKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjcxOlx0XHRleHQ0X3dhcm5pbmcoc2IsIFwmIzM0O3dvbiYjMzk7dCByZXNpemUgdXNpbmcgYmFja3VwIHN1cGVyYmxvY2sgYXQgJWxsdVwmIzM0OyxcbmZzL2V4dDQvcmVzaXplLmMtNzItXHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZylzYmktXHUwMDNlc19zYmgtXHUwMDNlYl9ibG9ja25yKTtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTk3LVxuZnMvZXh0NC9yZXNpemUuYzo5ODppbnQgZXh0NF9yZXNpemVfZW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgdXBkYXRlX2JhY2t1cHMpXG5mcy9leHQ0L3Jlc2l6ZS5jLTk5LXtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jPTEyMD1zdGF0aWMgaW50IHZlcmlmeV9ncm91cF9pbnB1dChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMjEyLS8qXG5mcy9leHQ0L3Jlc2l6ZS5jOjIxMzogKiBleHQ0X25ld19mbGV4X2dyb3VwX2RhdGEgaXMgdXNlZCBieSA2NGJpdC1yZXNpemUgaW50ZXJmYWNlIHRvIGFkZCBhIGZsZXhcbmZzL2V4dDQvcmVzaXplLmMtMjE0LSAqIGdyb3VwIGVhY2ggdGltZS5cbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jPTIxNj1zdHJ1Y3QgZXh0NF9uZXdfZmxleF9ncm91cF9kYXRhIHtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTIyMC1cdFx0XHRcdFx0XHQgICBpbiBAZ3JvdXBzICovXG5mcy9leHQ0L3Jlc2l6ZS5jOjIyMTpcdGV4dDRfZ3JvdXBfdCByZXNpemVfYmc7XHRcdFx0LyogbnVtYmVyIG9mIGFsbG9jYXRlZFxuZnMvZXh0NC9yZXNpemUuYy0yMjItXHRcdFx0XHRcdFx0ICAgbmV3X2dyb3VwX2RhdGEgKi9cbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jPTQyMj1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiY2xlYW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTQ0My1cbmZzL2V4dDQvcmVzaXplLmM6NDQ0OnN0YXRpYyBpbnQgZXh0NF9yZXNpemVfZW5zdXJlX2NyZWRpdHNfYmF0Y2goaGFuZGxlX3QgKmhhbmRsZSwgaW50IGNyZWRpdHMpXG5mcy9leHQ0L3Jlc2l6ZS5jLTQ0NS17XG4tLVxuZnMvZXh0NC9yZXNpemUuYz00NTk9c3RhdGljIGludCBzZXRfZmxleGJnX2Jsb2NrX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtNDg3LVxuZnMvZXh0NC9yZXNpemUuYzo0ODg6XHRcdGVyciA9IGV4dDRfcmVzaXplX2Vuc3VyZV9jcmVkaXRzX2JhdGNoKGhhbmRsZSwgMSk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTQ4OS1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jPTUzMD1zdGF0aWMgaW50IHNldHVwX25ld19mbGV4X2dyb3VwX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtNTc2LVx0XHRcdGV4dDRfZGVidWcoXCYjMzQ7dXBkYXRlIGJhY2t1cCBncm91cCAlIzA0bGx4XFxuXCYjMzQ7LCBibG9jayk7XG5mcy9leHQ0L3Jlc2l6ZS5jOjU3NzpcdFx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xuZnMvZXh0NC9yZXNpemUuYy01NzgtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTYzNS1cdFx0YmxvY2sgPSBncm91cF9kYXRhW2ldLmJsb2NrX2JpdG1hcDtcbmZzL2V4dDQvcmVzaXplLmM6NjM2Olx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xuZnMvZXh0NC9yZXNpemUuYy02MzctXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZnMvZXh0NC9yZXNpemUuYy02NjQtXHRcdGJsb2NrID0gZ3JvdXBfZGF0YVtpXS5pbm9kZV9iaXRtYXA7XG5mcy9leHQ0L3Jlc2l6ZS5jOjY2NTpcdFx0ZXJyID0gZXh0NF9yZXNpemVfZW5zdXJlX2NyZWRpdHNfYmF0Y2goaGFuZGxlLCAxKTtcbmZzL2V4dDQvcmVzaXplLmMtNjY2LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTE0MD1zdGF0aWMgdm9pZCB1cGRhdGVfYmFja3VwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibGtfb2ZmLCBjaGFyICpkYXRhLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMTE3NS1cdFx0LyogT3V0IG9mIGpvdXJuYWwgc3BhY2UsIGFuZCBjYW4mIzM5O3QgZ2V0IG1vcmUgLSBhYm9ydCAtIHNvIHNhZCAqL1xuZnMvZXh0NC9yZXNpemUuYzoxMTc2Olx0XHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xuZnMvZXh0NC9yZXNpemUuYy0xMTc3LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTI1Mj1zdGF0aWMgaW50IGV4dDRfYWRkX25ld19kZXNjcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9yZXNpemUuYzoxMjUzOlx0XHRcdCAgICAgIGV4dDRfZ3JvdXBfdCBncm91cCwgc3RydWN0IGlub2RlICpyZXNpemVfaW5vZGUsXG5mcy9leHQ0L3Jlc2l6ZS5jLTEyNTQtXHRcdFx0ICAgICAgZXh0NF9ncm91cF90IGNvdW50KVxuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTcwMz1pbnQgZXh0NF9ncm91cF9hZGQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfbmV3X2dyb3VwX2RhdGEgKmlucHV0KVxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMTcxNy1cdGlmIChnZGJfb2ZmID09IDAgXHUwMDI2XHUwMDI2ICFleHQ0X2hhc19mZWF0dXJlX3NwYXJzZV9zdXBlcihzYikpIHtcbmZzL2V4dDQvcmVzaXplLmM6MTcxODpcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtDYW4mIzM5O3QgcmVzaXplIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSBmdXJ0aGVyXCYjMzQ7KTtcbmZzL2V4dDQvcmVzaXplLmMtMTcxOS1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3MzQtXHRpZiAocmVzZXJ2ZWRfZ2RiIHx8IGdkYl9vZmYgPT0gMCkge1xuZnMvZXh0NC9yZXNpemUuYzoxNzM1Olx0XHRpZiAoIWV4dDRfaGFzX2ZlYXR1cmVfcmVzaXplX2lub2RlKHNiKSB8fFxuZnMvZXh0NC9yZXNpemUuYy0xNzM2LVx0XHQgICAgIWxlMTZfdG9fY3B1KGVzLVx1MDAzZXNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcykpIHtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3NDItXHRcdGlmIChJU19FUlIoaW5vZGUpKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjE3NDM6XHRcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtFcnJvciBvcGVuaW5nIHJlc2l6ZSBpbm9kZVwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTE3NDQtXHRcdFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTgzNz1pbnQgZXh0NF9ncm91cF9leHRlbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuLS1cbmZzL2V4dDQvcmVzaXplLmMtMTg2My1cdGlmIChuX2Jsb2Nrc19jb3VudCBcdTAwM2Mgb19ibG9ja3NfY291bnQpIHtcbmZzL2V4dDQvcmVzaXplLmM6MTg2NDpcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtjYW4mIzM5O3Qgc2hyaW5rIEZTIC0gcmVzaXplIGFib3J0ZWRcJiMzNDspO1xuZnMvZXh0NC9yZXNpemUuYy0xODY1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NzEtXHRpZiAobGFzdCA9PSAwKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjE4NzI6XHRcdGV4dDRfd2FybmluZyhzYiwgXCYjMzQ7bmVlZCB0byB1c2UgZXh0Mm9ubGluZSB0byByZXNpemUgZnVydGhlclwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NzMtXHRcdHJldHVybiAtRVBFUk07XG4tLVxuZnMvZXh0NC9yZXNpemUuYy0xODkyLVx0aWYgKElTX0VSUihiaCkpIHtcbmZzL2V4dDQvcmVzaXplLmM6MTg5MzpcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtjYW4mIzM5O3QgcmVhZCBsYXN0IGJsb2NrLCByZXNpemUgYWJvcnRlZFwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTE4OTQtXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmZzL2V4dDQvcmVzaXplLmM9MTkxMj1zdGF0aWMgaW50IGV4dDRfY29udmVydF9tZXRhX2JnKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9yZXNpemUuYy0xOTU3LVx0bG9ja19idWZmZXIoc2JpLVx1MDAzZXNfc2JoKTtcbmZzL2V4dDQvcmVzaXplLmM6MTk1ODpcdGV4dDRfY2xlYXJfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpO1xuZnMvZXh0NC9yZXNpemUuYy0xOTU5LVx0ZXh0NF9zZXRfZmVhdHVyZV9tZXRhX2JnKHNiKTtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5ODgtaW52YWxpZF9yZXNpemVfaW5vZGU6XG5mcy9leHQ0L3Jlc2l6ZS5jOjE5ODk6XHRleHQ0X2Vycm9yKHNiLCBcJiMzNDtjb3JydXB0ZWQvaW5jb25zaXN0ZW50IHJlc2l6ZSBpbm9kZVwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTAtXHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTMtLypcbmZzL2V4dDQvcmVzaXplLmM6MTk5NDogKiBleHQ0X3Jlc2l6ZV9mcygpIHJlc2l6ZXMgYSBmcyB0byBuZXcgc2l6ZSBzcGVjaWZpZWQgYnkgQG5fYmxvY2tzX2NvdW50XG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTUtICpcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTgtICovXG5mcy9leHQ0L3Jlc2l6ZS5jOjE5OTk6aW50IGV4dDRfcmVzaXplX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudClcbmZzL2V4dDQvcmVzaXplLmMtMjAwMC17XG4tLVxuZnMvZXh0NC9yZXNpemUuYy0yMDIwLVx0aWYgKElTX0VSUihiaCkpIHtcbmZzL2V4dDQvcmVzaXplLmM6MjAyMTpcdFx0ZXh0NF93YXJuaW5nKHNiLCBcJiMzNDtjYW4mIzM5O3QgcmVhZCBsYXN0IGJsb2NrLCByZXNpemUgYWJvcnRlZFwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTIwMjItXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmZzL2V4dDQvcmVzaXplLmMtMjA0My1cdFx0LyogT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCAqL1xuZnMvZXh0NC9yZXNpemUuYzoyMDQ0Olx0XHRleHQ0X3dhcm5pbmcoc2IsIFwmIzM0O2NhbiYjMzk7dCBzaHJpbmsgRlMgLSByZXNpemUgYWJvcnRlZFwmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTIwNDUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL2V4dDQvcmVzaXplLmMtMjA1My1cdGlmIChuX2dyb3VwIFx1MDAzZT0gKDB4RkZGRkZGRkZVTCAvIEVYVDRfSU5PREVTX1BFUl9HUk9VUChzYikpKSB7XG5mcy9leHQ0L3Jlc2l6ZS5jOjIwNTQ6XHRcdGV4dDRfd2FybmluZyhzYiwgXCYjMzQ7cmVzaXplIHdvdWxkIGNhdXNlIGlub2Rlc19jb3VudCBvdmVyZmxvd1wmIzM0Oyk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTIwNTUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL2V4dDQvcmVzaXplLmMtMjA2My1cbmZzL2V4dDQvcmVzaXplLmM6MjA2NDpcdGlmIChleHQ0X2hhc19mZWF0dXJlX3Jlc2l6ZV9pbm9kZShzYikpIHtcbmZzL2V4dDQvcmVzaXplLmMtMjA2NS1cdFx0aWYgKG1ldGFfYmcpIHtcbmZzL2V4dDQvcmVzaXplLmM6MjA2NjpcdFx0XHRleHQ0X2Vycm9yKHNiLCBcJiMzNDtyZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZW5hYmxlZCBcJiMzNDtcbmZzL2V4dDQvcmVzaXplLmMtMjA2Ny1cdFx0XHRcdCAgIFwmIzM0O3NpbXVsdGFuZW91c2x5XCYjMzQ7KTtcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTIwODUtXHRcdGlmIChJU19FUlIocmVzaXplX2lub2RlKSkge1xuZnMvZXh0NC9yZXNpemUuYzoyMDg2Olx0XHRcdGV4dDRfd2FybmluZyhzYiwgXCYjMzQ7RXJyb3Igb3BlbmluZyByZXNpemUgaW5vZGVcJiMzNDspO1xuZnMvZXh0NC9yZXNpemUuYy0yMDg3LVx0XHRcdHJldHVybiBQVFJfRVJSKHJlc2l6ZV9pbm9kZSk7XG4tLVxuZnMvZXh0NC9yZXNpemUuYy0yMDkxLVx0aWYgKCghcmVzaXplX2lub2RlIFx1MDAyNlx1MDAyNiAhbWV0YV9iZyBcdTAwMjZcdTAwMjYgbl9kZXNjX2Jsb2NrcyBcdTAwM2Ugb19kZXNjX2Jsb2NrcykgfHwgbl9ibG9ja3NfY291bnQgPT0gb19ibG9ja3NfY291bnQpIHtcbmZzL2V4dDQvcmVzaXplLmM6MjA5MjpcdFx0ZXJyID0gZXh0NF9jb252ZXJ0X21ldGFfYmcoc2IsIHJlc2l6ZV9pbm9kZSk7XG5mcy9leHQ0L3Jlc2l6ZS5jLTIwOTMtXHRcdGlmIChlcnIpXG4tLVxuZnMvZXh0NC9yZXNpemUuYy0yMTY2LVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9yZXNpemUuYzoyMTY3Olx0XHRlcnIgPSBleHQ0X2ZsZXhfZ3JvdXBfYWRkKHNiLCByZXNpemVfaW5vZGUsIGZsZXhfZ2QpO1xuZnMvZXh0NC9yZXNpemUuYy0yMTY4LVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5mcy9leHQ0L3Jlc2l6ZS5jLTIxOTEtXHRcdFx0ICAgICBcJiMzNDtmaWxlIHN5c3RlbSByZXNpemVcJiMzNDssIGVycik7XG5mcy9leHQ0L3Jlc2l6ZS5jOjIxOTI6XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcJiMzNDtyZXNpemVkIGZpbGVzeXN0ZW0gdG8gJWxsdVwmIzM0OyxcbmZzL2V4dDQvcmVzaXplLmMtMjE5My1cdFx0IGV4dDRfYmxvY2tzX2NvdW50KGVzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTE5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIEZvY3VzIGZvciBJbXByb3ZlZCBUZXN0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB3ZSYjMzk7cmUgZGVmaW5pbmcgdGhlIGZvY3VzIGZvciBvdXIga2VybmVsIHN5bWJvbCBhbmFseXNpcy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gZ2V0IHRoZSBtb3N0IGluc2lnaHRmdWwgdGVzdCBkaXN0cmlidXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZnMvZmlsZS5jYC4gU3BlY2lmaWNhbGx5LCBgZmRfaW5zdGFsbGAg4oCTIGl0JiMzOTtzIGEgKnNlcmlvdXNseSogaG90IGZ1bmN0aW9uLiBDYWxsZWQgZXZlcnkgdGltZSB3ZSBkbyBhIGZpbGUgZGVzY3JpcHRvciBhY3Rpb24uIFRoaXMgc2NyZWFtcyAmIzM0O2dlbmVyaWMgaG90IHBhdGgmIzM0OyBhbmQgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHdlIHdhbnQgdG8gYXZvaWQgcHV0dGluZyBGb2N1c1N5bWJvbHMgb24sIGFzIGl0JiMzOTtsbCBza2V3IHRoZSBkaXN0cmlidXRpb25zIGJhZGx5LgoKUmlnaHQsIHNvIHRvIHJlbWluZCBteXNlbGYsIEkmIzM5O20gZ29pbmcgdG8gcmUtY2hlY2sgdGhlIGd1aWRlbGluZXM6ICYjMzQ7QXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFdlIHdhbnQgZ29vZCBkYXRhLiYjMzQ7IE9rYXksIHBvaW50IHRha2VuLiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsgTWFrZXMgc2Vuc2UuIFdlIG5lZWQgZGlzdGluY3QgYWRkcmVzc2VzIHRvIGFuYWx5emUgdGhlIGJlaGF2aW9yLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBgZnMvcGlkZnMuY2AuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgbG9vayBhdCBgcGlkZmRfaW5mb2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2FsbGluZyBgcGlkZmRfaW5mb2Agb3IgcGlkZnMgaW9jdGwsIHNvIEkga25vdyB3aGVyZSB0aGUgc3ltYm9sIGxhbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaWRmZF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9waWRmcy5jPTMzOT1zdGF0aWMgX191MzIgcGlkZnNfY29yZWR1bXBfbWFzayhlbnVtIHRhc2tfZHVtcGFibGUgZHVtcGFibGUpXG4tLVxuZnMvcGlkZnMuYy0zNjQtXG5mcy9waWRmcy5jOjM2NTpzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL3BpZGZzLmMtMzY2LXtcbmZzL3BpZGZzLmM6MzY3Olx0c3RydWN0IHBpZGZkX2luZm8gX191c2VyICp1aW5mbyA9IChzdHJ1Y3QgcGlkZmRfaW5mbyBfX3VzZXIgKilhcmc7XG5mcy9waWRmcy5jLTM2OC1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayBfX2ZyZWUocHV0X3Rhc2spID0gTlVMTDtcbi0tXG5mcy9waWRmcy5jLTM3MC1cdHNpemVfdCB1c2l6ZSA9IF9JT0NfU0laRShjbWQpO1xuZnMvcGlkZnMuYzozNzE6XHRzdHJ1Y3QgcGlkZmRfaW5mbyBraW5mbyA9IHt9O1xuZnMvcGlkZnMuYy0zNzItXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG4tLVxuZnMvcGlkZnMuYy0zNzYtXG5mcy9waWRmcy5jOjM3NzpcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHBpZGZkX2luZm8pICE9IFBJREZEX0lORk9fU0laRV9WRVIzKTtcbmZzL3BpZGZzLmMtMzc4LVxuLS1cbmZzL3BpZGZzLmM9NTI4PXN0YXRpYyBsb25nIHBpZGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9waWRmcy5jLTU0Ny1cdGlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihQSURGRF9HRVRfSU5GTykpXG5mcy9waWRmcy5jOjU0ODpcdFx0cmV0dXJuIHBpZGZkX2luZm8oZmlsZSwgY21kLCBhcmcpO1xuZnMvcGlkZnMuYy01NDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdXNlciBuYW1lc3BhY2UgbWFwcGluZyBwcm9jZXNzLCBzbyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBsb29rIGlzIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwcm9jZXNzIGZpbGVzIGZvciBVSUQsIEdJRCwgYW5kIHByb2plY3QgSUQgbWFwcGluZ3MgYXJlIHdyaXR0ZW4uIFRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGUgYG1hcF93cml0ZWAgZnVuY3Rpb24sIHNpbmNlIHRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgcHJvYyBmaWxlIHdyaXRlIG9wZXJhdGlvbnMgcmVzaWRlcy4gVGhlbiBJJiMzOTtsbCBjaGVjayBgbWFwX2lkX3JhbmdlX2Rvd25gIGFuZCBgbWFwX2lkX3JhbmdlX3VwYCwgYXMgdGhvc2UgYXJlIHByb2JhYmx5IGludm9sdmVkIGluIG1hbmlwdWxhdGluZyB0aGUgSUQgbWFwcGluZ3MgdGhlbXNlbHZlcy4gRnJvbSB0aGVyZSwgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3LCBJIHdpbGwgY2hlY2sgdGhlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgdXNlcl9uYW1lc3BhY2UuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXBfaWRfcmFuZ2VfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3VzZXJfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9MjUxPXN0YXRpYyBpbnQgY21wX21hcF9pZChjb25zdCB2b2lkICprLCBjb25zdCB2b2lkICplKVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI3Ny0vKlxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6Mjc4OiAqIG1hcF9pZF9yYW5nZV9kb3duX21heCAtIEZpbmQgaWRtYXAgdmlhIGJpbmFyeSBzZWFyY2ggaW4gb3JkZXJlZCBpZG1hcCBhcnJheS5cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI3OS0gKiBDYW4gb25seSBiZSBjYWxsZWQgaWYgbnVtYmVyIG9mIG1hcHBpbmdzIGV4Y2VlZHMgVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUy5cbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz0yODE9c3RhdGljIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoyODI6bWFwX2lkX3JhbmdlX2Rvd25fbWF4KHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI4My17XG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMjk0LS8qXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoyOTU6ICogbWFwX2lkX3JhbmdlX2Rvd25fYmFzZSAtIEZpbmQgaWRtYXAgdmlhIGJpbmFyeSBzZWFyY2ggaW4gc3RhdGljIGV4dGVudCBhcnJheS5cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI5Ni0gKiBDYW4gb25seSBiZSBjYWxsZWQgaWYgbnVtYmVyIG9mIG1hcHBpbmdzIGlzIGVxdWFsIG9yIGxlc3MgdGhhblxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTI5OT1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjMwMDptYXBfaWRfcmFuZ2VfZG93bl9iYXNlKHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMwMS17XG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzE3LVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MzE4OnN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzE5LXtcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zMjQtXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozMjU6XHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzI2LVx0ZWxzZVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MzI3Olx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9tYXgoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzI4LVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTMzOD11MzIgbWFwX2lkX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMzOS17XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozNDA6XHRyZXR1cm4gbWFwX2lkX3JhbmdlX2Rvd24obWFwLCBpZCwgMSk7XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zNDEtfVxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTM0OD1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjM0OTptYXBfaWRfcmFuZ2VfdXBfYmFzZSh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zNTAte1xuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTM3MT1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjM3MjptYXBfaWRfcmFuZ2VfdXBfbWF4KHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM3My17XG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzgzLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6Mzg0OnUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzg1LXtcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zOTAtXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozOTE6XHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM5Mi1cdGVsc2Vcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjM5MzpcdFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX3VwX21heChleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zOTQtXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9NDA0PXUzMiBtYXBfaWRfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZClcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTQwNS17XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo0MDY6XHRyZXR1cm4gbWFwX2lkX3JhbmdlX3VwKG1hcCwgaWQsIDEpO1xua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNDA3LX1cbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz05MzI9c3RhdGljIHNzaXplX3QgbWFwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTEwNzMtXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoxMDc0Olx0XHRsb3dlcl9maXJzdCA9IG1hcF9pZF9yYW5nZV9kb3duKHBhcmVudF9tYXAsXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMDc1LVx0XHRcdFx0XHRcdGUtXHUwMDNlbG93ZXJfZmlyc3QsXG4tLVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTEwMi1cdH1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjExMDM6XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTExMDQtXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZtYXAtXHUwMDNlbnJfZXh0ZW50cywgbmV3X21hcC5ucl9leHRlbnRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlbGV2YW50IEtlcm5lbCBGaWxlcyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGZzL2Fpby5jYCBlbnRyeXBvaW50cyDigJMgc3BlY2lmaWNhbGx5IGBzeXNfaW9fZ2V0ZXZlbnRzYCwgYHN5c19pb19wZ2V0ZXZlbnRzYCwgYW5kIGBpb19zdWJtaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAsIEkgc2hvdWxkIHZlcmlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBpcyBlbmFibGVkIGFuZCBkaXNhYmxlZC4KCkhlcmUmIzM5O3MgbXkgY2hlY2tsaXN0OgoKMS4gIGBmcy9haW8uY2Ag4oCTIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgQUlPYC4gTWFrZXMgc2Vuc2UuCjIuICBgZnMvZXh0NC9gIOKAkyBgRVhUNF9GU2AsIG9mIGNvdXJzZS4gU3RhbmRhcmQuCjMuICBgZnMvcGlkZnMuY2Ag4oCTIFRoaXMgb25lIHJlcXVpcmVzIGEgY2hlY2suIElzIHRoaXMgYnVpbHQtaW4gb3IgY29uZGl0aW9uYWw/IEkmIzM5O2xsIGxvb2sgYXQgYGZzL01ha2VmaWxlYCB0byBjb25maXJtLgo0LiAgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCDigJMgVGhpcyB1c2VzIHRoZSBgVVNFUl9OU2AgY29uZmlndXJhdGlvbiBvcHRpb24uCjUuICBgZnMvbW50X2lkbWFwcGluZy5jYCDigJMgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGZzL01ha2VmaWxlYCBhZ2FpbiBmb3IgdGhpcyBvbmUuCjYuICBgbGliL3ZzcHJpbnRmLmNgIOKAkyBUaGlzIGlzIGNvcmUsIGFsd2F5cyBidWlsdC1pbiwgbm8gY29uZmlndXJhdGlvbi4KCk5vdywgSSYjMzk7bGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBmcy9NYWtlZmlsZWAgYW5kIGBmcy9LY29uZmlnYCwgYW5kLCBmb3IgZ29vZCBtZWFzdXJlLCBJJiMzOTtsbCBpbmNsdWRlIGBpbml0L0tjb25maWdgIGluIG15IHJldmlldy4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGNvbmRpdGlvbmFsIGJ1aWxkIGFzcGVjdHMuIFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gZm9yIHByb3BlciBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoYWlvfHBpZGZzfG1udF9pZG1hcHBpbmd8ZXh0NCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuLS1cbmZzL01ha2VmaWxlLTE3LVx0XHRmc19kaXJlbnQubyBmc19jb250ZXh0Lm8gZnNfcGFyc2VyLm8gZnNvcGVuLm8gaW5pdC5vIFxcXG5mcy9NYWtlZmlsZToxODpcdFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcbmZzL01ha2VmaWxlLTE5LVx0XHRmaWxlX2F0dHIubyBmc2Vycm9yLm8gbnVsbGZzLm8gZmFpbGZzLm9cbi0tXG5mcy9NYWtlZmlsZT0yOT1vYmotJChDT05GSUdfRVZFTlRGRClcdFx0JiM0Mzs9IGV2ZW50ZmQub1xuZnMvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX0FJTykgICAgICAgICAgICAgICAmIzQzOz0gYWlvLm9cbmZzL01ha2VmaWxlLTMxLW9iai0kKENPTkZJR19GU19EQVgpXHRcdCYjNDM7PSBkYXgub1xuLS1cbmZzL01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19ORVRGU19TVVBQT1JUKVx0JiM0Mzs9IG5ldGZzL1xuZnMvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0VYVDRfRlMpXHRcdCYjNDM7PSBleHQ0L1xuZnMvTWFrZWZpbGU6NjY6IyBXZSBwbGFjZSBleHQ0IGJlZm9yZSBleHQyIHNvIHRoYXQgY2xlYW4gZXh0MyByb290IGZzJiMzOTtzIGRvIE5PVCBtb3VudCB1c2luZyB0aGVcbmZzL01ha2VmaWxlLTY3LSMgZXh0MiBkcml2ZXIsIHdoaWNoIGRvZXNuJiMzOTt0IGtub3cgYWJvdXQgam91cm5hbGxpbmchICBFeHBsaWNpdGx5IHJlcXVlc3QgZXh0MlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI3OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBVc2VyIE5hbWVzcGFjZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlciBuYW1lc3BhY2VzIGFyZSBoYW5kbGVkIGluIHRoaXMgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgaXMgaW50ZWdyYXRlZC4gU28sIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IHdvdWxkIGJlIGVpdGhlciBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgIGl0c2VsZiwgdG8gc2VlIHRoZSBkaXJlY3QgY29kZSBpbnZvbHZlZCwgb3IgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIGxpa2VseSBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyB0aGVyZS4gVGhlIG1vc3QgcHJvYmFibGUgZmlsZXMgd291bGQgYmUgd2l0aGluIGVpdGhlciBgaW5pdC9LY29uZmlnYCAoZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMpIG9yIGBrZXJuZWwvTWFrZWZpbGVgIChmb3IgaG93IHRoZSBjb21waWxhdGlvbiB1bml0cyBhcmUgYnJvdWdodCB0b2dldGhlcikuIExldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX25hbWVzcGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvTWFrZWZpbGU9OTE9b2JqLSQoQ09ORklHX1VUU19OUykgJiM0Mzs9IHV0c25hbWUub1xua2VybmVsL01ha2VmaWxlOjkyOm9iai0kKENPTkZJR19VU0VSX05TKSAmIzQzOz0gdXNlcl9uYW1lc3BhY2Uub1xua2VybmVsL01ha2VmaWxlLTkzLW9iai0kKENPTkZJR19QSURfTlMpICYjNDM7PSBwaWRfbmFtZXNwYWNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgQUlPIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgQXN5bmNocm9ub3VzIEkvTyAoYEFJT2ApLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBrZXkgdG8gdGhpcyBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaW5pdC9LY29uZmlnYCBhbmQgYGZzL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gaXQgY29tZXMgdG8gZmVhdHVyZSBlbmFibGVtZW50IGFuZCBtb2R1bGUgY29tcGlsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIHRvIGVpdGhlciBmaW5kIGl0IGRpcmVjdGx5IG9yIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgdGhhdCBwb2ludCBtZSB0byBpdHMgbG9jYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5lYXJ0aC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBkaXJlY3QgZGVmaW5pdGlvbiBvZiB0aGUgYEFJT2Agb3B0aW9uIG9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBjb250cm9scyBpdHMgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSU9cXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5NDE9Y29uZmlnIFNITUVNXG4tLVxuaW5pdC9LY29uZmlnLTE5NTEtXG5pbml0L0tjb25maWc6MTk1Mjpjb25maWcgQUlPXG5pbml0L0tjb25maWctMTk1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFJTyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gdGV4dDoKCioqQ2hlY2tpbmcgdGhlIGV4dDQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBleHQ0YCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgd2hpY2ggbWVhbnMgSSBzaG91bGQgc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgQ09ORklHX0VYVDRfRlNgLiBJIGtub3cgd2hlcmUgdGhhdCYjMzk7cyBsb2NhdGVkLCBzbyBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgZmlyc3Qgc3RlcCB3aGVuIGRlYnVnZ2luZyBvciBjdXN0b21pemluZyB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0LCBzbyBpdCYjMzk7cyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgbmFtZXNwYWNlIHN0dWZmIGlzIGJlaW5nIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0LCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbml0L0tjb25maWdgIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBgVVNFUl9OU2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgdmFsdWUgb3IgcG9zc2libGUgY2hvaWNlcyBtaWdodCBiZS4gSG9wZWZ1bGx5LCB0aGUgY29tbWVudHMgYXJvdW5kIGl0IHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkZXNpZ24gZGVjaXNpb25zIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGlmIGl0JiMzOTtzIGRpc2FibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2YgYFVTRVJfTlNgIGFuZCBpdHMgYXNzb2NpYXRlZCBvcHRpb25zIGlzIHRoZSBmb3VuZGF0aW9uIGZvciBkZXRlcm1pbmluZyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBiZWhhdmlvciBvZiB1c2VyIG5hbWVzcGFjZXMgd2l0aGluIHRoaXMgc3lzdGVtLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkmIzM5O3JlIGJlaW5nIG1hbmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSX05TXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNDM4PWNvbmZpZyBJUENfTlNcbi0tXG5pbml0L0tjb25maWctMTQ0NS1cbmluaXQvS2NvbmZpZzoxNDQ2OmNvbmZpZyBVU0VSX05TXG5pbml0L0tjb25maWctMTQ0Ny1cdGJvb2wgXCYjMzQ7VXNlciBuYW1lc3BhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uCgoqKkluc3BlY3RpbmcgdGhlIGBwaWRmcy5jYCBDb2RlKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBva2UgYXJvdW5kIGluIGBwaWRmcy5jYC4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBzZWUgaWYgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXQgcGxheS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBTbywgbGV0JiMzOTtzIG9wZW4gdXAgYGZzL3BpZGZzLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9waWRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3BpZGZzLmM9MjA5PXZvaWQgcGlkZnNfZnJlZV9waWQoc3RydWN0IHBpZCAqcGlkKVxuLS1cbmZzL3BpZGZzLmMtMjM1LVxuZnMvcGlkZnMuYzoyMzY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5mcy9waWRmcy5jLTIzNy0vKipcbi0tXG5mcy9waWRmcy5jPTI3Mj1zdGF0aWMgdm9pZCBwaWRmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxuLS1cbmZzL3BpZGZzLmMtMjg0LVxuZnMvcGlkZnMuYzoyODU6I2lmZGVmIENPTkZJR19QSURfTlNcbmZzL3BpZGZzLmMtMjg2LVx0c2VxX3B1dF9kZWNpbWFsX2xsKG0sIFwmIzM0O1xcbk5TcGlkOlxcdFwmIzM0OywgbnIpO1xuLS1cbmZzL3BpZGZzLmM9MzY1PXN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL3BpZGZzLmMtMzk3LVx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUO1xuZnMvcGlkZnMuYzozOTg6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5mcy9waWRmcy5jLTM5OS1cdFx0XHRraW5mby5jZ3JvdXBpZCA9IGF0dHItXHUwMDNlY2dyb3VwaWQ7XG4tLVxuZnMvcGlkZnMuYy00NTAtXG5mcy9waWRmcy5jOjQ1MTojaWZkZWYgQ09ORklHX0NHUk9VUFNcbmZzL3BpZGZzLmMtNDUyLVx0aWYgKCFraW5mby5jZ3JvdXBpZCkge1xuLS1cbmZzL3BpZGZzLmM9NTI4PXN0YXRpYyBsb25nIHBpZGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9waWRmcy5jLTU4Ny1cdGNhc2UgUElERkRfR0VUX0NHUk9VUF9OQU1FU1BBQ0U6XG5mcy9waWRmcy5jOjU4ODojaWZkZWYgQ09ORklHX0NHUk9VUFNcbmZzL3BpZGZzLmMtNTg5LVx0XHRpZiAoIW5zX3JlZl9nZXQobnNwLVx1MDAzZWNncm91cF9ucykpXG4tLVxuZnMvcGlkZnMuYy01OTQtXHRjYXNlIFBJREZEX0dFVF9JUENfTkFNRVNQQUNFOlxuZnMvcGlkZnMuYzo1OTU6I2lmZGVmIENPTkZJR19JUENfTlNcbmZzL3BpZGZzLmMtNTk2LVx0XHRpZiAoIW5zX3JlZl9nZXQobnNwLVx1MDAzZWlwY19ucykpXG4tLVxuZnMvcGlkZnMuYy02MDYtXHRjYXNlIFBJREZEX0dFVF9ORVRfTkFNRVNQQUNFOlxuZnMvcGlkZnMuYzo2MDc6I2lmZGVmIENPTkZJR19ORVRfTlNcbmZzL3BpZGZzLmMtNjA4LVx0XHRpZiAoIW5zX3JlZl9nZXQobnNwLVx1MDAzZW5ldF9ucykpXG4tLVxuZnMvcGlkZnMuYy02MTMtXHRjYXNlIFBJREZEX0dFVF9QSURfRk9SX0NISUxEUkVOX05BTUVTUEFDRTpcbmZzL3BpZGZzLmM6NjE0OiNpZmRlZiBDT05GSUdfUElEX05TXG5mcy9waWRmcy5jLTYxNS1cdFx0aWYgKCFuc19yZWZfZ2V0KG5zcC1cdTAwM2VwaWRfbnNfZm9yX2NoaWxkcmVuKSlcbi0tXG5mcy9waWRmcy5jLTYyMC1cdGNhc2UgUElERkRfR0VUX1RJTUVfTkFNRVNQQUNFOlxuZnMvcGlkZnMuYzo2MjE6I2lmZGVmIENPTkZJR19USU1FX05TXG5mcy9waWRmcy5jLTYyMi1cdFx0aWYgKCFuc19yZWZfZ2V0KG5zcC1cdTAwM2V0aW1lX25zKSlcbi0tXG5mcy9waWRmcy5jLTYyNy1cdGNhc2UgUElERkRfR0VUX1RJTUVfRk9SX0NISUxEUkVOX05BTUVTUEFDRTpcbmZzL3BpZGZzLmM6NjI4OiNpZmRlZiBDT05GSUdfVElNRV9OU1xuZnMvcGlkZnMuYy02MjktXHRcdGlmICghbnNfcmVmX2dldChuc3AtXHUwMDNldGltZV9uc19mb3JfY2hpbGRyZW4pKVxuLS1cbmZzL3BpZGZzLmMtNjM0LVx0Y2FzZSBQSURGRF9HRVRfVVRTX05BTUVTUEFDRTpcbmZzL3BpZGZzLmM6NjM1OiNpZmRlZiBDT05GSUdfVVRTX05TXG5mcy9waWRmcy5jLTYzNi1cdFx0aWYgKCFuc19yZWZfZ2V0KG5zcC1cdTAwM2V1dHNfbnMpKVxuLS1cbmZzL3BpZGZzLmMtNjQyLVx0Y2FzZSBQSURGRF9HRVRfVVNFUl9OQU1FU1BBQ0U6XG5mcy9waWRmcy5jOjY0MzojaWZkZWYgQ09ORklHX1VTRVJfTlNcbmZzL3BpZGZzLmMtNjQ0LVx0XHRzY29wZWRfZ3VhcmQocmN1KSB7XG4tLVxuZnMvcGlkZnMuYy02NTMtXHRjYXNlIFBJREZEX0dFVF9QSURfTkFNRVNQQUNFOlxuZnMvcGlkZnMuYzo2NTQ6I2lmZGVmIENPTkZJR19QSURfTlNcbmZzL3BpZGZzLmMtNjU1LVx0XHRzY29wZWRfZ3VhcmQocmN1KSB7XG4tLVxuZnMvcGlkZnMuYy02NzktXG5mcy9waWRmcy5jOjY4MDojaWZkZWYgQ09ORklHX0NPTVBBVFxuZnMvcGlkZnMuYy02ODEtc3RhdGljIGxvbmcgcGlkZmRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL3BpZGZzLmM9NzExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBpZGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9waWRmcy5jLTcxMy1cdC5wb2xsXHRcdD0gcGlkZmRfcG9sbCxcbmZzL3BpZGZzLmM6NzE0OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZnMvcGlkZnMuYy03MTUtXHQuc2hvd19mZGluZm9cdD0gcGlkZmRfc2hvd19mZGluZm8sXG4tLVxuZnMvcGlkZnMuYy03MTctXHQudW5sb2NrZWRfaW9jdGxcdD0gcGlkZmRfaW9jdGwsXG5mcy9waWRmcy5jOjcxODojaWZkZWYgQ09ORklHX0NPTVBBVFxuZnMvcGlkZnMuYy03MTktXHQuY29tcGF0X2lvY3RsXHQ9IHBpZGZkX2NvbXBhdF9pb2N0bCxcbi0tXG5mcy9waWRmcy5jPTc0Nz12b2lkIHBpZGZzX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuZnMvcGlkZnMuYy03NTAtXHRzdHJ1Y3QgcGlkZnNfYXR0ciAqYXR0cjtcbmZzL3BpZGZzLmM6NzUxOiNpZmRlZiBDT05GSUdfQ0dST1VQU1xuZnMvcGlkZnMuYy03NTItXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xuLS1cbmZzL3BpZGZzLmMtNzc5LVxuZnMvcGlkZnMuYzo3ODA6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5mcy9waWRmcy5jLTc4MS1cdHJjdV9yZWFkX2xvY2soKTtcbi0tXG5mcy9waWRmcy5jLTc5Mi1cbmZzL3BpZGZzLmM6NzkzOiNpZmRlZiBDT05GSUdfQ09SRURVTVBcbmZzL3BpZGZzLmMtNzk0LXZvaWQgcGlkZnNfY29yZWR1bXAoY29uc3Qgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNDYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIEludmVzdGlnYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBpZGVudGlmeWluZyBzb21lIHN0cm9uZyBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvbmVzIGFyZSBwcmltZSBjYW5kaWRhdGVzLiBGaXJzdCBpbnN0aW5jdDogSSBzaG91bGQgc2NydXRpbml6ZSBgRm9jdXNTeW1ib2xzYC4gQWxyaWdodCwgd2hhdCYjMzk7cyBhIGdvb2QgbGlzdCBvZiBzeW1ib2xzIHRvIGxvb2sgYXQ/IEhtbW0uLi4gbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIG1heWJlIHNvbWV0aGluZyBsaWtlIGBfX2RvX3N5c19pb19nZXRldmVudHNgLCBgX19kb19zeXNfaW9fcGdldGV2ZW50c2AsIG9yIG1heWJlIGBhaW9fcmVhZF9ldmVudHNgIGFuZCBgYWlvX2NvbXBsZXRlYC4gQnV0IGhvbGQgb24sIEkgcmVjYWxsIHRoYXQgd2Ugc2hvdWxkICpwcmVmZXIqIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIHRob3NlIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBDb21waWxlciBpbmxpbmluZyBtdWRkaWVzIHRoZSB3YXRlcnMgd2l0aCB0aG9zZSBpbnRlcm5hbCBvbmVzLCBubyBkaXN0aW5jdCBhZGRyZXNzZXMuCgpSaWdodCwgU1lTQ0FMTF9ERUZJTkUgY3JlYXRlcyB0aGluZ3MgbGlrZSBgX19kb19zeXNfaW9fZ2V0ZXZlbnRzYCBhbmQgYF9feDY0X3N5c19pb19nZXRldmVudHNgIGFuZCBzdWNoLiBPa2F5LCBJJiMzOTttIGdldHRpbmcgYSBoYW5kbGUgb24gaXQuIE9yLCB0aGlua2luZyBvdXRzaWRlIHRoYXQgYm94LCBtYXliZSBzdHVmZiBsaWtlIGBleHQ0X3Jlc2l6ZV9mc2AsIG9yIHBlcmhhcHMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGxpa2UgYGV4dDRfZ3JvdXBfYWRkYCwgYGV4dDRfZ3JvdXBfZXh0ZW5kYCwgc29tZSBvZiB0aGUgYG1hcF9pZF9yYW5nZV9gIHN0dWZmIGluIGB1c2VyX25hbWVzcGFjZS5jYCBzdWNoIGFzIGBtYXBfaWRfcmFuZ2VfdXBgLCBgbWFwX2lkX3JhbmdlX2Rvd25gLCBvciBwZXJoYXBzIGV2ZW4gc29tZXRoaW5nIGluIHRoZSBtb3VudCBJRCBtYXBwaW5nLCBzdWNoIGFzIGBjb3B5X21udF9pZG1hcGAuCgpPa2F5LCBuZXh0IHN0ZXA6IGxldCBtZSByZS1ldmFsdWF0ZSBiYXNlZCBvbiB0aGUgbm9uLXN0YXRpYyBjcml0ZXJpb24uIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBgZnMvZXh0NC9yZXNpemUuY2A6IEkgc2VlIGBleHQ0X3Jlc2l6ZV9mc2AsIGBleHQ0X2dyb3VwX2FkZGAsIGFuZCBgZXh0NF9ncm91cF9leHRlbmRgLiBJbiBgZnMvZXh0NC9iYWxsb2MuY2AsIEkgaGF2ZSBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AuIFRoZSBlYXJsaWVyIGBmcy9haW8uY2AgaGFzIGBfX2RvX3N5c19pb19nZXRldmVudHNgIGFuZCBgX19kb19zeXNfaW9fcGdldGV2ZW50c2AuIEZyb20gYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCwgSSBzZWUgYG1hcF9pZF9yYW5nZV91cGAgYW5kIGBtYXBfaWRfcmFuZ2VfZG93bmAuIEZyb20gYGZzL3BpZGZzLmNgIEkgc2VlIGBwaWRmZF9zaG93X2ZkaW5mb2AgaXMgcHJvbWlzaW5nLCBvciBtYXliZSBmdW5jdGlvbnMgbGlrZSBgcGlkZnNfZXhpdGAgb3IgYHBpZGZzX2NvcmVkdW1wYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBmcy9waWRmcy5jYCBmaWxlIGFuZCBzZWUgd2hhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3ZSBoYXZlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGxvbmd8c3RydWN0KSBbYS16MC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3BpZGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYz00MT1zdGF0aWMgc3RydWN0IHNpbXBsZV94YXR0cl9jYWNoZSBwaWRmc194YV9jYWNoZTtcbmZzL3BpZGZzLmMtNDItXG5mcy9waWRmcy5jOjQzOnZvaWQgcGlkZnNfZ2V0X3Jvb3Qoc3RydWN0IHBhdGggKnBhdGgpXG5mcy9waWRmcy5jLTQ0LXtcbi0tXG5mcy9waWRmcy5jPTE1Mz1zdGF0aWMgdTY0IHBpZGZzX2FsbG9jX2lubyh2b2lkKVxuLS1cbmZzL3BpZGZzLmMtMTY2LVxuZnMvcGlkZnMuYzoxNjc6dm9pZCBwaWRmc19wcmVwYXJlX3BpZChzdHJ1Y3QgcGlkICpwaWQpXG5mcy9waWRmcy5jLTE2OC17XG4tLVxuZnMvcGlkZnMuYy0xNzMtXG5mcy9waWRmcy5jOjE3NDppbnQgcGlkZnNfYWRkX3BpZChzdHJ1Y3QgcGlkICpwaWQpXG5mcy9waWRmcy5jLTE3NS17XG4tLVxuZnMvcGlkZnMuYy0xODUtXG5mcy9waWRmcy5jOjE4Njp2b2lkIHBpZGZzX3JlbW92ZV9waWQoc3RydWN0IHBpZCAqcGlkKVxuZnMvcGlkZnMuYy0xODcte1xuLS1cbmZzL3BpZGZzLmM9MjA3PXN0YXRpYyBERUNMQVJFX1dPUksocGlkZnNfZnJlZV93b3JrLCBwaWRmc19mcmVlX2F0dHJfd29yayk7XG5mcy9waWRmcy5jLTIwOC1cbmZzL3BpZGZzLmM6MjA5OnZvaWQgcGlkZnNfZnJlZV9waWQoc3RydWN0IHBpZCAqcGlkKVxuZnMvcGlkZnMuYy0yMTAte1xuLS1cbmZzL3BpZGZzLmM9NzIzPXN0cnVjdCBwaWQgKnBpZGZkX3BpZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9waWRmcy5jLTc0Ni0gKi9cbmZzL3BpZGZzLmM6NzQ3OnZvaWQgcGlkZnNfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmZzL3BpZGZzLmMtNzQ4LXtcbi0tXG5mcy9waWRmcy5jLTc5My0jaWZkZWYgQ09ORklHX0NPUkVEVU1QXG5mcy9waWRmcy5jOjc5NDp2b2lkIHBpZGZzX2NvcmVkdW1wKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG5mcy9waWRmcy5jLTc5NS17XG4tLVxuZnMvcGlkZnMuYz0xMDIwPXN0YXRpYyB2b2lkIHBpZGZzX3B1dF9kYXRhKHZvaWQgKmRhdGEpXG4tLVxuZnMvcGlkZnMuYy0xMDM1LSAqL1xuZnMvcGlkZnMuYzoxMDM2OmludCBwaWRmc19yZWdpc3Rlcl9waWRfZ2ZwKHN0cnVjdCBwaWQgKnBpZCwgZ2ZwX3QgZ2ZwKVxuZnMvcGlkZnMuYy0xMDM3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1ODkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXIuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgc29tZSBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AgaW4gYGZzL2V4dDQvYmFsbG9jLmNgLiBBaCwgZ29vZCwgaXQmIzM5O3Mgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGZpbGUuIE1ha2VzIGl0IGVhc2llciB0byB0cmFjZSBpdHMgdXNhZ2UuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IGBleHQ0X3Jlc2l6ZV9mc2AsIGBleHQ0X2dyb3VwX2FkZGAsIGFuZCBgZXh0NF9ncm91cF9leHRlbmRgLiBUaG9zZSBiZWluZyBub24tc3RhdGljIGFyZSBhbHNvIGhlbHBmdWwuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBhdCBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgLCBzcGVjaWZpY2FsbHkgYG1hcF9pZF9yYW5nZV91cGAsIGBtYXBfaWRfcmFuZ2VfZG93bmAsIGBtYXBfaWRfdXBgLCBhbmQgYG1hcF9pZF9kb3duYC4gSW1wb3J0YW50IHRvIGtub3cgaG93IHRoZXNlIGFyZSBleHBvc2VkLiBNb3Zpbmcgb24gdG8gYGZzL3BpZGZzLmNgLCBjaGVja2luZyBgcGlkZnNfZXhpdGAgYW5kIGBwaWRmc19jb3JlZHVtcGAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgaW1wbGVtZW50ZWQgYW5kIGlmIHRoZXkgYXJlIHB1YmxpYy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBzaWRlIG9mIHRoaW5ncy4gSSYjMzk7bSBnb2luZyB0byBqb3QgZG93biB0aGUga2V5IGNvbmZpZ3MgdGhhdCBzZWVtIHJlbGV2YW50OiBgQUlPYCwgYEVYVDRfRlNgLCBgVVNFUl9OU2AsIGBQSURfTlNgIChlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHBpZGZzIG5hbWVzcGFjZSBpb2N0bHMgYW5kIGF0dHJpYnV0ZXMpLCBhbmQgYENHUk9VUFNgIChmb3IgcGlkZnMgY2dyb3VwIGluZm9ybWF0aW9uKS4KCk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdGhhdCBJJiMzOTttIG1pc3NpbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYEVYVDRfRlNgLCBgVVNFUl9OU2AsIG9yIGBBSU9gLiBJJiMzOTtsbCBzdGFydCBieSByZWFkaW5nIHRocm91Z2ggYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRVhUNF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IEpCRDJcbiAgIDY6XHRcdHNlbGVjdCBDUkMxNlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDk6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxuICAxNDpcdFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXG4gIDE1Olx0XHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcbiAgMTY6XHRcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXG4gIDE3Olx0XHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxuICAxODpcdFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcbiAgMTk6XHRcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxuICAyMDpcdFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxuICAyMzpcdFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXG4gIDI0Olx0XHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XG4gIDI1Olx0XHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcbiAgMjY6XHRcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXG4gIDI3Olx0XHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXG4gIDI4Olx0XHQgIGNvbXBhdGlibGUuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcbiAgMzE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4gIDM2Olx0XHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDM4Olx0XHRkZXBlbmRzIG9uIEVYVDJfRlM9blxuICAzOTpcdFx0ZGVmYXVsdCB5XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTA4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHVzZXIgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb24gKGBVU0VSX05TYCkgaXMgcHJvcGVybHkgc2V0IHVwIGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlIChgaW5pdC9LY29uZmlnYCkuIFRoYXQmIzM5O3MgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJIHdhbnQgdG8gdmVyaWZ5IGlmIGl0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gc29tZSBvdGhlciB2YWx1ZSDigJMgbGlrZWx5IGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHN5c3RlbSBhbmQgc2VjdXJpdHkgcmVxdWlyZW1lbnRzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaGFuZGxlZCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyB0aGUgYWJpbGl0eSB0byB1dGlsaXplIHVzZXIgbmFtZXNwYWNlcywgd2hpY2ggaXMgZm91bmRhdGlvbmFsIHRvIGEgbG90IG9mIGNvbnRhaW5lcml6YXRpb24gYW5kIHNlY3VyaXR5IHRlY2hub2xvZ2llcyBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCwgYW5kIEkgZXhwZWN0IEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaG93IGBVU0VSX05TYCBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSBpcyBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0NTpcdFxuMTQ0NjpcdGNvbmZpZyBVU0VSX05TXG4xNDQ3Olx0XHRib29sIFwmIzM0O1VzZXIgbmFtZXNwYWNlXCYjMzQ7XG4xNDQ4Olx0XHRkZWZhdWx0IG5cbjE0NDk6XHRcdGhlbHBcbjE0NTA6XHRcdCAgVGhpcyBhbGxvd3MgY29udGFpbmVycywgaS5lLiB2c2VydmVycywgdG8gdXNlIHVzZXIgbmFtZXNwYWNlc1xuMTQ1MTpcdFx0ICB0byBwcm92aWRlIGRpZmZlcmVudCB1c2VyIGluZm8gZm9yIGRpZmZlcmVudCBzZXJ2ZXJzLlxuMTQ1MjpcdFxuMTQ1MzpcdFx0ICBXaGVuIHVzZXIgbmFtZXNwYWNlcyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGl0IGlzXG4xNDU0Olx0XHQgIHJlY29tbWVuZGVkIHRoYXQgdGhlIE1FTUNHIG9wdGlvbiBhbHNvIGJlIGVuYWJsZWQgYW5kIHRoYXRcbjE0NTU6XHRcdCAgdXNlci1zcGFjZSB1c2UgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwcyB0byBsaW1pdCB0aGUgYW1vdW50XG4xNDU2Olx0XHQgIG9mIG1lbW9yeSBhIG1lbW9yeSB1bnByaXZpbGVnZWQgdXNlcnMgY2FuIHVzZS5cbjE0NTc6XHRcbjE0NTg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE0NTk6XHRcbjE0NjA6XHRjb25maWcgUElEX05TXG4xNDYxOlx0XHRib29sIFwmIzM0O1BJRCBOYW1lc3BhY2VzXCYjMzQ7XG4xNDYyOlx0XHRkZWZhdWx0IHlcbjE0NjM6XHRcdGhlbHBcbjE0NjQ6XHRcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgYEFJT2AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBBSU9gIOKAkyBBc3luY2hyb25vdXMgSS9PIOKAkyBpcyBwcm9wZXJseSBjb25maWd1cmVkLiBJdCYjMzk7cyBjcnVjaWFsLCBzbyBJIG5lZWQgdG8gZ28gaW4gYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoaW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG9wdGlvbnMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gdGhlaXIgcHJvcGVyIGRlZmF1bHRzLiBHb3R0YSBzdGF5IG9uIHRvcCBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk1MDpcdFx0ICB3aGljaCBtYXkgYmUgYXBwcm9wcmlhdGUgb24gc21hbGwgc3lzdGVtcyB3aXRob3V0IHN3YXAuXG4xOTUxOlx0XG4xOTUyOlx0Y29uZmlnIEFJT1xuMTk1MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQUlPIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTU0Olx0XHRkZWZhdWx0IHlcbjE5NTU6XHRcdGhlbHBcbjE5NTY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBQT1NJWCBhc3luY2hyb25vdXMgSS9PIHdoaWNoIG1heSBieSB1c2VkXG4xOTU3Olx0XHQgIGJ5IHNvbWUgaGlnaCBwZXJmb3JtYW5jZSB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuIERpc2FibGluZ1xuMTk1ODpcdFx0ICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay5cbjE5NTk6XHRcbjE5NjA6XHRjb25maWcgSU9fVVJJTkdcbjE5NjE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTYyOlx0XHRzZWxlY3QgSU9fV1FcbjE5NjM6XHRcdGRlZmF1bHQgeVxuMTk2NDpcdFx0aGVscFxuMTk2NTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBpb191cmluZyBpbnRlcmZhY2UsIGVuYWJsaW5nXG4xOTY2Olx0XHQgIGFwcGxpY2F0aW9ucyB0byBzdWJtaXQgYW5kIGNvbXBsZXRlIElPIHRocm91Z2ggc3VibWlzc2lvbiBhbmRcbjE5Njc6XHRcdCAgY29tcGxldGlvbiByaW5ncyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUga2VybmVsIGFuZCBhcHBsaWNhdGlvbi5cbjE5Njg6XHRcbjE5Njk6XHRjb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODM3CgkJCQkJCQlvdXRwdXQ6IDI0NwoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipSZWZpbmluZyB0aGUgU3RyYXRlZ3kgQmVmb3JlIERlbGl2ZXJ5KioKCk9rYXksIGJlZm9yZSBJIGNvbW1pdCB0byBhIGZpbmFsIGNvbmNsdXNpb24sIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgdmVyaWZ5IGV2ZXJ5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHBvdGVudGlhbCBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIGltcGFjdGluZyBtZW1vcnkgYmFycmllciBiZWhhdmlvcnMgYW5kIGNvbmN1cnJlbmN5IG1lY2hhbmlzbXMuIFRoaXMgaXMgdG91Y2hpbmcgY3J1Y2lhbCBhcmVhcyBhY3Jvc3MgdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUyksIGV4dDQgZmlsZXN5c3RlbSwgQXN5bmNocm9ub3VzIEkvTyAoQUlPKSwgdGhlIHByb2Nlc3MgSUQgZmlsZXN5c3RlbSAocGlkZnMpLCBhbmQgdXNlciBuYW1lc3BhY2VzLiBUaGUgKldvcnRoRnV6emluZyogZmxhZyBiZWluZyBzZXQgdG8gKnRydWUqIGluZGljYXRlcyB0aGVzZSBhcmUgYXJlYXMgcmlwZSBmb3IgbW9yZSByaWdvcm91cyBleGFtaW5hdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIGxvdy1sZXZlbCBrZXJuZWwgY29tcG9uZW50cy4KCk15IGZvY3VzIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBzeW1ib2xzIHdpdGhpbiB0aGF0IHNjb3BlOiBgZXh0NF9yZXNpemVfZnNgLCBgZXh0NF9ncm91cF9hZGRgLCBgZXh0NF9ncm91cF9leHRlbmRgLCBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AsIGBtYXBfaWRfcmFuZ2VfdXBgLCBgbWFwX2lkX3JhbmdlX2Rvd25gLCBgcGlkZnNfZXhpdGAsIGFuZCBgcGlkZnNfY29yZWR1bXBgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBlbnRyeSBwb2ludHMgdG8gdGhlIG1vZGlmaWVkIG9yIG5ld2x5IGludHJvZHVjZWQgY29kZSB3aXRoaW4gdGhvc2Ugc3Vic3lzdGVtcywgb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb3N0IGxpa2VseSB0byBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLCBhbmQgdGhlcmVmb3JlIG5lZWQgZnVydGhlciBzY3J1dGlueS4KCkkmIzM5O2xsIGFsc28gaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uIFRoYXQgbWVhbnMgY29uZmlybWluZyB0aGUgZm9sbG93aW5nIGFyZSBwcmVzZW50IGFuZCBhY3RpdmU6IGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgQUlPYCwgYFBJRF9OU2AsIGFuZCBgQ0dST1VQU2AuCgpXaXRoIGFsbCB0aGF0IGRvbmUsIGl0JiMzOTtzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O0FJTyYjMzQ7LAogICAgJiMzNDtQSURfTlMmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfcmVzaXplX2ZzJiMzNDssCiAgICAmIzM0O2V4dDRfZ3JvdXBfYWRkJiMzNDssCiAgICAmIzM0O2V4dDRfZ3JvdXBfZXh0ZW5kJiMzNDssCiAgICAmIzM0O2V4dDRfZ2V0X2dyb3VwX2luZm8mIzM0OywKICAgICYjMzQ7bWFwX2lkX3JhbmdlX3VwJiMzNDssCiAgICAmIzM0O21hcF9pZF9yYW5nZV9kb3duJiMzNDssCiAgICAmIzM0O3BpZGZzX2V4aXQmIzM0OywKICAgICYjMzQ7cGlkZnNfY29yZWR1bXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kZXJuaXplcyBhbmQgYWRqdXN0cyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYWNyb3NzIGNvcmUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGNvbXBvbmVudHMgKEFJTyByaW5nIGJ1ZmZlcnMsIGV4dDQgcmVzaXppbmcgYW5kIGdyb3VwIGFsbG9jYXRpb24sIGZkIGluc3RhbGxhdGlvbi9leHBhbnNpb24sIHBpZGZzIGF0dHJpYnV0ZSByZXRyaWV2YWwsIGFuZCB1c2VyIG5hbWVzcGFjZSBpZCBtYXBwaW5nKSBieSBjb252ZXJ0aW5nIGV4cGxpY2l0IHNtcF9ybWIvc21wX3dtYiBwYWlycyBpbnRvIGFjcXVpcmUvcmVsZWFzZSBtZW1vcnkgb3JkZXJzIChlLmcuIHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFRoZXNlIGFyZSByZWFjaGFibGUgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtBSU8mIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3Jlc2l6ZV9mcyYjMzQ7LAogICAgJiMzNDtleHQ0X2dyb3VwX2FkZCYjMzQ7LAogICAgJiMzNDtleHQ0X2dyb3VwX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtleHQ0X2dldF9ncm91cF9pbmZvJiMzNDssCiAgICAmIzM0O21hcF9pZF9yYW5nZV91cCYjMzQ7LAogICAgJiMzNDttYXBfaWRfcmFuZ2VfZG93biYjMzQ7LAogICAgJiMzNDtwaWRmc19leGl0JiMzNDssCiAgICAmIzM0O3BpZGZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGVybml6ZXMgYW5kIGFkanVzdHMgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGFjcm9zcyBjb3JlIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBjb21wb25lbnRzIChBSU8gcmluZyBidWZmZXJzLCBleHQ0IHJlc2l6aW5nIGFuZCBncm91cCBhbGxvY2F0aW9uLCBmZCBpbnN0YWxsYXRpb24vZXhwYW5zaW9uLCBwaWRmcyBhdHRyaWJ1dGUgcmV0cmlldmFsLCBhbmQgdXNlciBuYW1lc3BhY2UgaWQgbWFwcGluZykgYnkgY29udmVydGluZyBleHBsaWNpdCBzbXBfcm1iL3NtcF93bWIgcGFpcnMgaW50byBhY3F1aXJlL3JlbGVhc2UgbWVtb3J5IG9yZGVycyAoZS5nLiBzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc3luY2hyb25pemF0aW9uIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgb3JkZXJpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBvciBhbHRlciBob3cgYnVmZmVycyBhcmUgaW5pdGlhbGl6ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCByZW1haW4gZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzBlZDQ5YmUxZmFmMzkzY2Y5YmMyOWZjZmNkNzFjMjBiODY3MjY5NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMjE6MjM6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IGQ3OGFjYzY5ZjQ4NzAuLmEwMjc5ZTA1OWU5NzIgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fpby5jCkBAIC0xMjA2LDEzICYjNDM7MTIwNiwxMiBAQCBzdGF0aWMgdm9pZCBhaW9fY29tcGxldGUoc3RydWN0IGFpb19raW9jYiAqaW9jYikKIAkvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZQogCSAqIG11c3QgbmV2ZXIgZXZlbiBsb29rIGF0IGl0IGFnYWluCiAJICovCi0Jc21wX3dtYigpOwkvKiBtYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi8KLQogCWN0eC0mZ3Q7dGFpbCA9IHRhaWw7CiAKIAlyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAloZWFkID0gcmluZy0mZ3Q7aGVhZDsKLQlyaW5nLSZndDt0YWlsID0gdGFpbDsKJiM0MzsJLyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7cmluZy0mZ3Q7dGFpbCwgdGFpbCk7CiAJZmx1c2hfZGNhY2hlX2ZvbGlvKGN0eC0mZ3Q7cmluZ19mb2xpb3NbMF0pOwogCiAJY3R4LSZndDtjb21wbGV0ZWRfZXZlbnRzJiM0MzsmIzQzOzsKQEAgLTEyODgsMTMgJiM0MzsxMjg3LDEyIEBAIHN0YXRpYyBsb25nIGFpb19yZWFkX2V2ZW50c19yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwKIAkvKiBBY2Nlc3MgdG8gLSZndDtyaW5nX2ZvbGlvcyBoZXJlIGlzIHByb3RlY3RlZCBieSBjdHgtJmd0O3JpbmdfbG9jay4gKi8KIAlyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtJmd0O3JpbmdfZm9saW9zWzBdKTsKIAloZWFkID0gcmluZy0mZ3Q7aGVhZDsKLQl0YWlsID0gcmluZy0mZ3Q7dGFpbDsKLQogCS8qCiAJICogRW5zdXJlIHRoYXQgb25jZSB3ZSYjMzk7dmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXQKIAkgKiB3ZSBhbHNvIHNlZSB0aGUgZXZlbnRzIHRoYXQgd2VyZSBzdG9yZWQgdXAgdG8gdGhlIHRhaWwuCiYjNDM7CSAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBhaW9fY29tcGxldGUoKS4KIAkgKi8KLQlzbXBfcm1iKCk7CiYjNDM7CXRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cmluZy0mZ3Q7dGFpbCk7CiAKIAlwcl9kZWJ1ZygmIzM0O2gldSB0JXUgbSV1XG4mIzM0OywgaGVhZCwgdGFpbCwgY3R4LSZndDtucl9ldmVudHMpOwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2JhbGxvYy5jIGIvZnMvZXh0NC9iYWxsb2MuYwppbmRleCA1MmY0YzUxNjlmOTE0Li43NzhmZTg3ODhmMDZlIDEwMDY0NAotLS0gYS9mcy9leHQ0L2JhbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvYmFsbG9jLmMKQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZXh0NF9nZXRfZ3JvdXBfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCXN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKipncnBfaW5mbzsKIAlsb25nIGluZGV4diwgaW5kZXhoOwogCi0JaWYgKHVubGlrZWx5KGdyb3VwICZndDs9IEVYVDRfU0Ioc2IpLSZndDtzX2dyb3Vwc19jb3VudCkpCiYjNDM7CWlmICh1bmxpa2VseShncm91cCAmZ3Q7PSBleHQ0X2dldF9ncm91cHNfY291bnQoc2IpKSkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHVubGlrZWx5KCFFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cF9pbmZvKSkKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0zNTQyLDE2ICYjNDM7MzU0MiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9pc2l6ZV9zZXQoc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgbG9mZl90IGlfc2l6ZSkKIH0KIAogLyoKLSAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgcmVxdWlyZXMgdXNpbmcgc21wX3JtYigpIGFmdGVyd2FyZHMuICBTZWUKLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKCkKLSAqIGluIHJlc2l6ZS5jCiYjNDM7ICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCB1c2VzIGFjcXVpcmUgc2VtYW50aWNzLgogICovCiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlleHQ0X2dyb3VwX3QJbmdyb3VwcyA9IEVYVDRfU0Ioc2IpLSZndDtzX2dyb3Vwc19jb3VudDsKLQotCXNtcF9ybWIoKTsKLQlyZXR1cm4gbmdyb3VwczsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi8KJiM0MzsJcmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtFWFQ0X1NCKHNiKS0mZ3Q7c19ncm91cHNfY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2ZsZXhfZ3JvdXAoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtODk5LDEwICYjNDM7ODk5LDggQEAgc3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgKIAogCS8qIG5vbi1leHRlbnQgZmlsZXMgYXJlIGxpbWl0ZWQgdG8gbG93IGJsb2Nrcy9ncm91cHMgKi8KIAlpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhhYy0mZ3Q7YWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKQotCQluZ3JvdXBzID0gRVhUNF9TQihhYy0mZ3Q7YWNfc2IpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHM7Ci0KLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovCi0Jc21wX3JtYigpOwomIzQzOwkJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi8KJiM0MzsJCW5ncm91cHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7RVhUNF9TQihhYy0mZ3Q7YWNfc2IpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMpOwogCiAJcmV0dXJuIG5ncm91cHM7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuYwppbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NAotLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvcmVzaXplLmMKQEAgLTE0NjIsMTEgJiM0MzsxNDYyLDExIEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICoKIAkgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOgogCSAqCi0JICogKiBXcml0ZXJzIG11c3QgcGVyZm9ybSBhIHNtcF93bWIoKSBhZnRlciB1cGRhdGluZyBhbGwKLQkgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnQKJiM0MzsJICogKiBXcml0ZXJzIG11c3QgdXNlIGEgcmVsZWFzZSBzdG9yZSB3aGVuIHVwZGF0aW5nIHRoZSBncm91cHMgY291bnQKJiM0MzsJICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZAogCSAqCi0JICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzCi0JICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgomIzQzOwkgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzCiYjNDM7CSAqICAgY291bnQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgogCSAqCiAJICogTkIuIFRoZXNlIHJ1bGVzIGNhbiBiZSByZWxheGVkIHdoZW4gY2hlY2tpbmcgdGhlIGdyb3VwIGNvdW50CiAJICogd2hpbGUgZnJlZWluZyBkYXRhLCBhcyB3ZSBjYW4gb25seSBhbGxvY2F0ZSBmcm9tIGEgYmxvY2sKQEAgLTE0NzQsMTIgJiM0MzsxNDc0LDE1IEBAIHN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXQKIAkgKiBhbGxvY2F0aW9uLgogCSAqLwotCXNtcF93bWIoKTsKIAogCS8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovCi0Jc2JpLSZndDtzX2dyb3Vwc19jb3VudCAmIzQzOz0gZmxleF9nZC0mZ3Q7Y291bnQ7Ci0Jc2JpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLSZndDtzX2dyb3Vwc19jb3VudCwKLQkJCShFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGV4dDRfZ2V0X2dyb3Vwc19jb3VudCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c2JpLSZndDtzX2dyb3Vwc19jb3VudCwKJiM0MzsJCQkgIHNiaS0mZ3Q7c19ncm91cHNfY291bnQgJiM0MzsgZmxleF9nZC0mZ3Q7Y291bnQpOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c2JpLSZndDtzX2Jsb2NrZmlsZV9ncm91cHMsCiYjNDM7CQkJICBtaW4oc2JpLSZndDtzX2dyb3Vwc19jb3VudCwKJiM0MzsJCQkgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTsKIAogCS8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzCiAJICogYWN0aXZlLiAqLwpkaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jCmluZGV4IDYyOGNhMDdkYzRiMTcuLjg2YzAzNWQ0NTlmMmEgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9maWxlLmMKQEAgLTI3Myw4ICYjNDM7MjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKQogCXJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy0mZ3Q7ZmR0LCBuZXdfZmR0KTsKIAlpZiAoY3VyX2ZkdCAhPSAmYW1wO2ZpbGVzLSZndDtmZHRhYikKIAkJY2FsbF9yY3UoJmFtcDtjdXJfZmR0LSZndDtyY3UsIGZyZWVfZmR0YWJsZV9yY3UpOwotCS8qIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gZmRfaW5zdGFsbCgpICovCi0Jc21wX3dtYigpOwogCXJldHVybiAwOwogfQogCkBAIC0zMTMsNyAmIzQzOzMxMSw4IEBAIHN0YXRpYyBpbnQgZXhwYW5kX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzLCB1bnNpZ25lZCBpbnQgbnIpCiAJLyogQWxsIGdvb2QsIHNvIHdlIHRyeSAqLwogCWZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MgPSB0cnVlOwogCWVycm9yID0gZXhwYW5kX2ZkdGFibGUoZmlsZXMsIG5yKTsKLQlmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7CiYjNDM7CS8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7ZmlsZXMtJmd0O3Jlc2l6ZV9pbl9wcm9ncmVzcywgZmFsc2UpOwogCiAJd2FrZV91cF9hbGwoJmFtcDtmaWxlcy0mZ3Q7cmVzaXplX3dhaXQpOwogCXJldHVybiBlcnJvcjsKQEAgLTY4NSwxMyAmIzQzOzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJcmV0dXJuOwogCiAJcmN1X3JlYWRfbG9ja19zY2hlZCgpOwotCWlmICh1bmxpa2VseShmaWxlcy0mZ3Q7cmVzaXplX2luX3Byb2dyZXNzKSkgewomIzQzOwkvKiBjb3VwbGVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHBhbmRfZmlsZXMoKSAqLwomIzQzOwlpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZSgmYW1wO2ZpbGVzLSZndDtyZXNpemVfaW5fcHJvZ3Jlc3MpKSkgewogCQlyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTsKIAkJZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7CiAJCXJldHVybjsKIAl9Ci0JLyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiBleHBhbmRfZmR0YWJsZSgpICovCi0Jc21wX3JtYigpOwogCWZkdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChmaWxlcy0mZ3Q7ZmR0KTsKIAlWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtJmd0O2ZkW2ZkXSkgIT0gTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGZkdC0mZ3Q7ZmRbZmRdLCBmaWxlKTsKZGlmZiAtLWdpdCBhL2ZzL21udF9pZG1hcHBpbmcuYyBiL2ZzL21udF9pZG1hcHBpbmcuYwppbmRleCBjYjYxZmJkYjUyZTkwLi42MTJiMjY2YWIzZGEwIDEwMDY0NAotLS0gYS9mcy9tbnRfaWRtYXBwaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbW50X2lkbWFwcGluZy5jCkBAIC0yMTksMTAgJiM0MzsyMTksOSBAQCBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNnaWRfaW5fZ3JvdXBfcCk7CiBzdGF0aWMgaW50IGNvcHlfbW50X2lkbWFwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX2Zyb20sCiAJCQkgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX3RvKQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXUzMiBucl9leHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcF9mcm9tLSZndDtucl9leHRlbnRzKTsKIAlzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmZvcndhcmQsICpyZXZlcnNlOwotCXUzMiBucl9leHRlbnRzID0gUkVBRF9PTkNFKG1hcF9mcm9tLSZndDtucl9leHRlbnRzKTsKLQkvKiBQYWlycyB3aXRoIHNtcF93bWIoKSB3aGVuIHdyaXRpbmcgdGhlIGlkbWFwcGluZy4gKi8KLQlzbXBfcm1iKCk7CiAKIAkvKgogCSAqIERvbiYjMzk7dCBibGluZGx5IGNvcHkgQG1hcF90byBpbnRvIEBtYXBfZnJvbSBpZiBucl9leHRlbnRzIGlzCmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuYwppbmRleCBhNmE2NDNmMTVkMDhhLi4yY2QwZmFiNzMxODBlIDEwMDY0NAotLS0gYS9mcy9waWRmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpZGZzLmMKQEAgLTM5Myw4ICYjNDM7MzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAKIAlhdHRyID0gUkVBRF9PTkNFKHBpZC0mZ3Q7YXR0cik7CiAJaWYgKG1hc2sgJmFtcDsgUElERkRfSU5GT19FWElUKSB7Ci0JCWlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKLQkJCXNtcF9ybWIoKTsKJiM0MzsJCWlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsICZhbXA7YXR0ci0mZ3Q7YXR0cl9tYXNrKSkgewogCQkJa2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7CiAjaWZkZWYgQ09ORklHX0NHUk9VUFMKIAkJCWtpbmZvLmNncm91cGlkID0gYXR0ci0mZ3Q7Y2dyb3VwaWQ7CkBAIC00MDUsOCAmIzQzOzQwNCw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCX0KIAogCWlmIChtYXNrICZhbXA7IFBJREZEX0lORk9fQ09SRURVTVApIHsKLQkJaWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKLQkJCXNtcF9ybWIoKTsKJiM0MzsJCWlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCAmYW1wO2F0dHItJmd0O2F0dHJfbWFzaykpIHsKIAkJCWtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUCB8IFBJREZEX0lORk9fQ09SRURVTVBfU0lHTkFMIHwgUElERkRfSU5GT19DT1JFRFVNUF9DT0RFOwogCQkJa2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItJmd0O2NvcmVkdW1wX21hc2s7CiAJCQlraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLSZndDtjb3JlZHVtcF9zaWduYWw7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwNWU0NDMxNzMwMzg3Li5jYWE2MTg5ZTQwNTcyIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTI2NywxMiAmIzQzOzI2NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKIAkgKiBIb3dldmVyLCBpZiB3ZSBhcmUgY3VycmVudGx5IG1vdW50aW5nIHRoZSBzdXBlcmJsb2NrLCB0aGUgdW5kZXJseWluZwogCSAqIGZpbGVzeXN0ZW0gbWlnaHQgYmUgaW4gYSBzdGF0ZSBvZiBwYXJ0aWFsIGNvbnN0cnVjdGlvbiBhbmQgaGVuY2UgaXQKIAkgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVjawotCSAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgbWVtb3J5IGJhcnJpZXIgaXMKLQkgKiBtYXRjaGVkIHdpdGggdGhlIG9uZSBpbiBtb3VudF9mcygpIGFzIHdlIGRvbiYjMzk7dCBob2xkIGxvY2tzIGhlcmUuCiYjNDM7CSAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLgogCSAqLwotCWlmICghKHNiLSZndDtzX2ZsYWdzICZhbXA7IFNCX0JPUk4pKQomIzQzOwlpZiAoIXN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOKSkKIAkJcmV0dXJuIDA7Ci0Jc21wX3JtYigpOwogCiAJaWYgKHNiLSZndDtzX29wICZhbXA7JmFtcDsgc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzICZhbXA7JmFtcDsKIAkgICAgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCkBAIC0zMTcsOSAmIzQzOzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvCiAKIHN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KQogewomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovCiYjNDM7CXVuc2lnbmVkIGludCBleHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cyk7CiAJc3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7Ci0JdW5zaWduZWQgZXh0ZW50cyA9IG1hcC0mZ3Q7bnJfZXh0ZW50czsKLQlzbXBfcm1iKCk7CiAKIAlpZiAoZXh0ZW50cyAmbHQ7PSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKQogCQlleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTsKQEAgLTM4Myw5ICYjNDM7MzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQKIAogdTMyIG1hcF9pZF9yYW5nZV91cChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpCiB7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi8KJiM0MzsJdW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bWFwLSZndDtucl9leHRlbnRzKTsKIAlzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDsKLQl1bnNpZ25lZCBleHRlbnRzID0gbWFwLSZndDtucl9leHRlbnRzOwotCXNtcF9ybWIoKTsKIAogCWlmIChleHRlbnRzICZsdDs9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpCiAJCWV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTsKQEAgLTY3Niw5ICYjNDM7Njc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcHBvcywKIAkJICAgICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCkKIHsKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDttYXAtJmd0O25yX2V4dGVudHMpOwogCWxvZmZfdCBwb3MgPSAqcHBvczsKLQl1bnNpZ25lZCBleHRlbnRzID0gbWFwLSZndDtucl9leHRlbnRzOwotCXNtcF9ybWIoKTsKIAogCWlmIChwb3MgJmd0Oz0gZXh0ZW50cykKIAkJcmV0dXJuIE5VTEw7CkBAIC05NjcsOSAmIzQzOzk2NywxMSBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJICogZGVzaXJlZCBiZWhhdmlvciBpcyB0byBzZWUgdGhlIHZhbHVlcyBvZiB0aGUgZXh0ZW50cyB0aGF0CiAJICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuCiAJICoKLQkgKiBUbyBhY2hpZXZlIHRoaXMgc21wX3dtYigpIGlzIHVzZWQgb24gZ3VhcmFudGVlIHRoZSB3cml0ZQotCSAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGNyYXp5Ci0JICogYXJjaGl0ZWN0dXJlcyByZXR1cm5pbmcgc3RhbGUgZGF0YS4KJiM0MzsJICogVGhlIG5yX2V4dGVudHMgZmllbGQgaXMgdGhlIHB1Ymxpc2ggcG9pbnQgZm9yIHRoZSBleHRlbnQKJiM0MzsJICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnQKJiM0MzsJICogZGF0YSBpcyB2aXNpYmxlIGJlZm9yZSBucl9leHRlbnRzIGlzIHVwZGF0ZWQuICBSZWFkZXJzIHVzZQomIzQzOwkgKiBzbXBfbG9hZF9hY3F1aXJlKCkgdG8gZW5zdXJlIHRoZXkgc2VlIGEgY29uc2lzdGVudCB2aWV3IG9mCiYjNDM7CSAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy4KIAkgKi8KIAltdXRleF9sb2NrKCZhbXA7dXNlcm5zX3N0YXRlX211dGV4KTsKIApAQCAtMTA5OCw4ICYjNDM7MTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJbWFwLSZndDtmb3J3YXJkID0gbmV3X21hcC5mb3J3YXJkOwogCQltYXAtJmd0O3JldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7CiAJfQotCXNtcF93bWIoKTsKLQltYXAtJmd0O25yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO21hcC0mZ3Q7bnJfZXh0ZW50cywgbmV3X21hcC5ucl9leHRlbnRzKTsKIAogCSpwcG9zID0gY291bnQ7CiAJcmV0ID0gY291bnQ7CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IDFkOTVhYjkzMTRiZjcuLjkwZDBhNzI0ZWFkZDggMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi92c3ByaW50Zi5jCkBAIC03NjIsOSAmIzQzOzc2Miw4IEBAIHN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkCiB7CiAJZ2V0X3JhbmRvbV9ieXRlcygmYW1wO3B0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7CiAKLQkvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqLwotCXNtcF93bWIoKTsKLQlXUklURV9PTkNFKGZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7ZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKQEAgLTc4MSwxMiAmIzQzOzc4MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl90b19oYXNodmFsKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyAqaGFzaHZhbF9vdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBoYXNodmFsOwogCi0JaWYgKCFSRUFEX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSkKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7ZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCS8qIFBhaXJzIHdpdGggc21wX3dtYigpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi8KLQlzbXBfcm1iKCk7Ci0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAloYXNodmFsID0gKHVuc2lnbmVkIGxvbmcpc2lwaGFzaF8xdTY0KCh1NjQpcHRyLCAmYW1wO3B0cl9rZXkpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTMxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBCYXJyaWVyIE9wdGltaXphdGlvbiBhbmQgS01TQU4gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaXMgbWFraW5nIHNvbWUgbWVtb3J5IGJhcnJpZXIgY2hhbmdlcyBhY3Jvc3MgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBpbnN0YW5jZXMgb2YgYHNtcF93bWIoKWAgYW5kIGBzbXBfcm1iKClgIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBtb3JlIG1vZGVybiBhbmQgcHJlY2lzZSBgc21wX3N0b3JlX3JlbGVhc2VgIGFuZCBgc21wX2xvYWRfYWNxdWlyZWAgcHJpbWl0aXZlcy4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgb3B0aW1pemF0aW9uLCBidXQgd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBMZXQmIzM5O3MgcmVjYXAgd2hhdCB3ZSYjMzk7cmUgc2VlaW5nOiBjaGFuZ2VzIGluIGBmcy9haW8uY2AsIGBmcy9leHQ0L2JhbGxvYy5jYCwgYGZzL2V4dDQuaGAsIGBmcy9leHQ0L21iYWxsb2MuY2AsIGBmcy9leHQ0L3Jlc2l6ZS5jYCwgYGZzL2ZpbGUuY2AsIGBmcy9tbnRfaWRtYXBwaW5nLmNgLCBgZnMvcGlkZnMuY2AsIGBmcy9zdXBlci5jYCwgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCwgYW5kIGBsaWIvdnNwcmludGYuY2AuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgZW5zdXJpbmcgbm8gcmVncmVzc2lvbnMgYXJlIGludHJvZHVjZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiAgV2UgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbCBvbiB3aGV0aGVyIHRvIHJ1biBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgc2Vzc2lvbiwgd2hpY2ggaXMgcmVzb3VyY2UgaW50ZW5zaXZlIGFuZCBzaG91bGQgb25seSBiZSBlbXBsb3llZCBpZiBuZWNlc3NhcnkuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBjcml0aWNhbCBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gaXMgb3VyIHByaW1hcnkgdG9vbCwgY2F0Y2hpbmcgdGhpbmdzIGxpa2UgVXNlLUFmdGVyLUZyZWUsIE91dC1vZi1Cb3VuZHMsIGFuZCBsb2NrIGlzc3Vlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiAgSWYgd2UgKmNhbiogY2F0Y2ggYSBidWcgd2l0aCBLQVNBTiwgTG9ja0RlcCwgb3Igb3RoZXIgc3RhbmRhcmQgZGV0ZWN0b3JzLCB3ZSAqc2hvdWxkIG5vdCogZmlyZSB1cCBhIEtNU0FOIHNlc3Npb24uCgpUaGUgZ3VpZGVsaW5lcyBhcmUgdmVyeSBjbGVhcjogd2Ugb25seSBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgY29kZSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgKm9ubHkqIGRldGVjdGVkIGJ5IEtNU0FOLiAgVGhpcyBpbmNsdWRlcyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIGFuZCBzY2VuYXJpb3MgdGhhdCBhbGxvdyB1bmluaXRpYWxpemVkIGJ5dGVzIHRvIGJlIGFjY2Vzc2VkLiBJZiBhbGwgdGhlIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCwgb3IgaWYgdGhlIHJpc2sgaXMgbGltaXRlZCB0byB0aGluZ3MgdGhhdCBLQVNBTiB3aWxsIGNhdGNoLCB0aGVuIGBOZWVkc0tNU0FOPWZhbHNlYC4KCkkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZXNlIHNwZWNpZmljIGNoYW5nZXMuIExldCYjMzk7cyBzdGFydCBieSBpbnNwZWN0aW5nIHRob3NlIGZpbGVzLCBlc3BlY2lhbGx5OiBgZnMvcGlkZnMuY2AsIGBmcy9zdXBlci5jYCwgYGZzL2ZpbGUuY2AsIGBmcy9haW8uY2AsIGFuZCB0aGUgZXh0NCBjaGFuZ2VzLCBhbmQgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCBhbmQgYGxpYi92c3ByaW50Zi5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHJpc2suCgpTcGVjaWZpY2FsbHksIGluIGBmcy9waWRmcy5jYCwgSSBzZWUgYSBtZW1vcnkgYmFycmllciBjaGFuZ2UsIGdvaW5nIGZyb20gYSBgdGVzdF9iaXRgIHdpdGggYHNtcF9ybWIoKWAgdG8gYHRlc3RfYml0X2FjcXVpcmVgLiBUaGlzIGlzIGxpa2VseSBhIHNhZmUgYW5kIGNvcnJlY3Qgb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBhdHRyYCBzdHJ1Y3QgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHRoYXQgdGhlIHJlYWQgb2YgdGhlIGJpdCBpcyBzYWZlLiBJdCYjMzk7cyB0aW1lIHRvIHJlYWQgdGhlIGZ1bGwgY29udGV4dCBpbiBgZnMvcGlkZnMuY2AgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJIHdpbGwgYWxzbyBjaGVjayB3aGF0IGBraW5mb2AgaXMgaW5pdGlhbGl6ZWQgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcGlkZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9waWRmcy5jLTM3MC1cdHNpemVfdCB1c2l6ZSA9IF9JT0NfU0laRShjbWQpO1xuZnMvcGlkZnMuYzozNzE6XHRzdHJ1Y3QgcGlkZmRfaW5mbyBraW5mbyA9IHt9O1xuZnMvcGlkZnMuYy0zNzItXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG4tLVxuZnMvcGlkZnMuYy0zOTYtXHRcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuZnMvcGlkZnMuYzozOTc6XHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7XG5mcy9waWRmcy5jLTM5OC0jaWZkZWYgQ09ORklHX0NHUk9VUFNcbmZzL3BpZGZzLmM6Mzk5Olx0XHRcdGtpbmZvLmNncm91cGlkID0gYXR0ci1cdTAwM2VjZ3JvdXBpZDtcbmZzL3BpZGZzLmM6NDAwOlx0XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DR1JPVVBJRDtcbmZzL3BpZGZzLmMtNDAxLSNlbmRpZlxuZnMvcGlkZnMuYzo0MDI6XHRcdFx0a2luZm8uZXhpdF9jb2RlID0gYXR0ci1cdTAwM2VleGl0X2NvZGU7XG5mcy9waWRmcy5jLTQwMy1cdFx0fVxuLS1cbmZzL3BpZGZzLmMtNDA3LVx0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG5mcy9waWRmcy5jOjQwODpcdFx0XHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fQ09SRURVTVAgfCBQSURGRF9JTkZPX0NPUkVEVU1QX1NJR05BTCB8IFBJREZEX0lORk9fQ09SRURVTVBfQ09ERTtcbmZzL3BpZGZzLmM6NDA5Olx0XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX21hc2s7XG5mcy9waWRmcy5jOjQxMDpcdFx0XHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcbmZzL3BpZGZzLmM6NDExOlx0XHRcdGtpbmZvLmNvcmVkdW1wX2NvZGUgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX2NvZGU7XG5mcy9waWRmcy5jLTQxMi1cdFx0fVxuLS1cbmZzL3BpZGZzLmMtNDMwLVxuZnMvcGlkZnMuYzo0MzE6XHRpZiAoKG1hc2sgXHUwMDI2IFBJREZEX0lORk9fQ09SRURVTVApIFx1MDAyNlx1MDAyNiAha2luZm8uY29yZWR1bXBfbWFzaykge1xuZnMvcGlkZnMuYzo0MzI6XHRcdGtpbmZvLmNvcmVkdW1wX21hc2sgPSBwaWRmc19jb3JlZHVtcF9tYXNrKHRhc2tfZXhlY19zdGF0ZV9nZXRfZHVtcGFibGUodGFzaykpO1xuZnMvcGlkZnMuYzo0MzM6XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DT1JFRFVNUDtcbmZzL3BpZGZzLmMtNDM0LVx0XHQvKiBObyBjb3JlZHVtcCBhY3R1YWxseSB0b29rIHBsYWNlLCBzbyBubyBjb3JlZHVtcCBzaWduYWwuICovXG4tLVxuZnMvcGlkZnMuYy00MzktXHR1c2VyX25zID0gY3VycmVudF91c2VyX25zKCk7XG5mcy9waWRmcy5jOjQ0MDpcdGtpbmZvLnJ1aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKHVzZXJfbnMsIGMtXHUwMDNldWlkKTtcbmZzL3BpZGZzLmM6NDQxOlx0a2luZm8ucmdpZCA9IGZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgYy1cdTAwM2VnaWQpO1xuZnMvcGlkZnMuYzo0NDI6XHRraW5mby5ldWlkID0gZnJvbV9rdWlkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZWV1aWQpO1xuZnMvcGlkZnMuYzo0NDM6XHRraW5mby5lZ2lkID0gZnJvbV9rZ2lkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZWVnaWQpO1xuZnMvcGlkZnMuYzo0NDQ6XHRraW5mby5zdWlkID0gZnJvbV9rdWlkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZXN1aWQpO1xuZnMvcGlkZnMuYzo0NDU6XHRraW5mby5zZ2lkID0gZnJvbV9rZ2lkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZXNnaWQpO1xuZnMvcGlkZnMuYzo0NDY6XHRraW5mby5mc3VpZCA9IGZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgYy1cdTAwM2Vmc3VpZCk7XG5mcy9waWRmcy5jOjQ0NzpcdGtpbmZvLmZzZ2lkID0gZnJvbV9rZ2lkX211bmdlZCh1c2VyX25zLCBjLVx1MDAzZWZzZ2lkKTtcbmZzL3BpZGZzLmM6NDQ4Olx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NSRURTO1xuZnMvcGlkZnMuYy00NDktXHRwdXRfY3JlZChjKTtcbi0tXG5mcy9waWRmcy5jLTQ1MS0jaWZkZWYgQ09ORklHX0NHUk9VUFNcbmZzL3BpZGZzLmM6NDUyOlx0aWYgKCFraW5mby5jZ3JvdXBpZCkge1xuZnMvcGlkZnMuYy00NTMtXHRcdHN0cnVjdCBjZ3JvdXAgKmNncnA7XG4tLVxuZnMvcGlkZnMuYy00NTYtXHRcdGNncnAgPSB0YXNrX2RmbF9jZ3JvdXAodGFzayk7XG5mcy9waWRmcy5jOjQ1NzpcdFx0a2luZm8uY2dyb3VwaWQgPSBjZ3JvdXBfaWQoY2dycCk7XG5mcy9waWRmcy5jOjQ1ODpcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NHUk9VUElEO1xuZnMvcGlkZnMuYy00NTktXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmZzL3BpZGZzLmMtNDcxLVxuZnMvcGlkZnMuYzo0NzI6XHRraW5mby5wcGlkID0gdGFza19wcGlkX3Zucih0YXNrKTtcbmZzL3BpZGZzLmM6NDczOlx0a2luZm8udGdpZCA9IHRhc2tfdGdpZF92bnIodGFzayk7XG5mcy9waWRmcy5jOjQ3NDpcdGtpbmZvLnBpZCA9IHRhc2tfcGlkX3Zucih0YXNrKTtcbmZzL3BpZGZzLmM6NDc1Olx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX1BJRDtcbmZzL3BpZGZzLmMtNDc2LVxuZnMvcGlkZnMuYzo0Nzc6XHRpZiAoa2luZm8ucGlkID09IDAgfHwga2luZm8udGdpZCA9PSAwKVxuZnMvcGlkZnMuYy00NzgtXHRcdHJldHVybiAtRVNSQ0g7XG4tLVxuZnMvcGlkZnMuYy00ODEtXHRpZiAobWFzayBcdTAwMjYgUElERkRfSU5GT19TVVBQT1JURURfTUFTSykge1xuZnMvcGlkZnMuYzo0ODI6XHRcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19TVVBQT1JURURfTUFTSztcbmZzL3BpZGZzLmM6NDgzOlx0XHRraW5mby5zdXBwb3J0ZWRfbWFzayA9IFBJREZEX0lORk9fU1VQUE9SVEVEO1xuZnMvcGlkZnMuYy00ODQtXHR9XG4tLVxuZnMvcGlkZnMuYy00ODYtXHQvKiBBcmUgdGhlcmUgYml0cyBpbiB0aGUgcmV0dXJuIG1hc2sgbm90IHByZXNlbnQgaW4gUElERkRfSU5GT19TVVBQT1JURUQ/ICovXG5mcy9waWRmcy5jOjQ4NzpcdFdBUk5fT05fT05DRSh+UElERkRfSU5GT19TVVBQT1JURUQgXHUwMDI2IGtpbmZvLm1hc2spO1xuZnMvcGlkZnMuYy00ODgtXHQvKlxuLS1cbmZzL3BpZGZzLmMtNDkzLVx0ICovXG5mcy9waWRmcy5jOjQ5NDpcdHJldHVybiBjb3B5X3N0cnVjdF90b191c2VyKHVpbmZvLCB1c2l6ZSwgXHUwMDI2a2luZm8sIHNpemVvZihraW5mbyksIE5VTEwpO1xuZnMvcGlkZnMuYy00OTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzNwoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEJhcnJpZXIgUmVmYWN0b3JpbmcgYW5kIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIGEgc2VyaWVzIG9mIGNoYW5nZXMgYWNyb3NzIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW1zIGFuZCBjb3JlIGNvbXBvbmVudHMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gVGhlIGNvbW1vbiB0aHJlYWQgaGVyZSBpcyB0aGUgbW9kZXJuaXphdGlvbiBvZiBtZW1vcnkgYmFycmllciBwcmltaXRpdmVzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0cmFuc2l0aW9uaW5nIGZyb20gdGhlIG9sZGVyLCBtb3JlIGV4cGxpY2l0IGBzbXBfd21iKClgICh3cml0ZSBtZW1vcnkgYmFycmllcikgYW5kIGBzbXBfcm1iKClgIChyZWFkIG1lbW9yeSBiYXJyaWVyKSBwYXR0ZXJucyB0byB0aGUgbW9yZSByZWZpbmVkIGBzbXBfc3RvcmVfcmVsZWFzZSgpYCBhbmQgYHNtcF9sb2FkX2FjcXVpcmUoKWAgc2VtYW50aWNzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBzZWVuIHRoZXNlIHJlZmFjdG9yaW5ncyBpbjoKCjEuICBgZnMvYWlvLmNgCjIuICBgZnMvZXh0NC9iYWxsb2MuY2AsIGBleHQ0LmhgLCBgbWJhbGxvYy5jYCwgYHJlc2l6ZS5jYAozLiAgYGZzL2ZpbGUuY2AKNC4gIGBmcy9tbnRfaWRtYXBwaW5nLmNgCjUuICBgZnMvcGlkZnMuY2AKNi4gIGBmcy9zdXBlci5jYAo3LiAgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYAo4LiAgYGxpYi92c3ByaW50Zi5jYAoKQWNyb3NzIGFsbCB0aGVzZSBmaWxlcywgdGhlIGZvY3VzIGlzIG9uIGltcHJvdmluZyB0aGUgd2F5IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgc3luY2hyb25pemF0aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuICBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIEhvd2V2ZXIsIGFuZCB0aGlzIGlzICpjcnVjaWFsKiwgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gSSYjMzk7dmUgY2FyZWZ1bGx5IHNjcnV0aW5pemVkIHRoZSBwYXRjaCBkZXNjcmlwdGlvbnMsIGFuZCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZjoKCiogICBVbmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uCiogICBFeHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGZpZWxkcwoqICAgQ2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocyBvciBwYWRkaW5nIHdoZW4gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlCiogICBDb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgdmFsdWVzCgpUaGlzIGlzIHB1cmVseSBhYm91dCBvcHRpbWl6aW5nIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGZvciBiZXR0ZXIgY29uY3VycmVuY3ksIGVuc3VyaW5nIHRoZSBjb3JyZWN0IG9yZGVyaW5nIG9mIG1lbW9yeSBvcGVyYXRpb25zIGZvciB0aHJlYWRzIG9yIHByb2Nlc3Nlcy4gSXQgbWVhbnMgd2UgaGF2ZSB0aGUgYmVuZWZpdHMgb2Ygc3Ryb25nZXIgc3luY2hyb25pemF0aW9uIGFuZCBiZXR0ZXIgY29kZSByZWFkYWJpbGl0eSwgYnV0IHdlIGhhdmUgKm5vKiBuZXcgcmlza3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZXJlZm9yZSwgKm15KiBhc3Nlc3NtZW50IGlzIHRoYXQgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGNvbnN0cnVjdCBhIGNsZWFyIGBLTVNBTlJlYXNvbmluZ2Agc3RhdGVtZW50LiAgVGhlIHBhdGNoIHJlZmFjdG9ycyBtZW1vcnkgYmFycmllcnMgKGZyb20gYHNtcF9ybWIvc21wX3dtYmAgdG8gYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcykgdGhyb3VnaG91dCB0aGUgZmlsZSBzeXN0ZW0gYW5kIGtlcm5lbCBzdWJzeXN0ZW1zLiAgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlIGJlY2F1c2UgdGhlc2UgY2hhbmdlcyBkbyAqbm90KiB0b3VjaCBzdHJ1Y3QgYWxsb2NhdGlvbnMsIHplcm9pbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLiBUaGUgcGF0Y2jigJlzIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgYXJlIGFscmVhZHkgbWV0aWN1bG91c2x5IGhhbmRsZWQgYW5kIHZhbGlkYXRlZCBieSB0aGUgc3RhbmRhcmQgdG9vbGNoYWlucyBsaWtlIEtBU0FOLCBLQ1NBTiwgZXRjLiBUaGUgcmVmYWN0b3JpbmcgaXRzZWxmIGlzIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kZXJuaXplcyBhbmQgc3RyZWFtbGluZXMgbWVtb3J5IGJhcnJpZXIgdXNhZ2UgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbSBhbmQgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoYWlvLCBleHQ0LCBmcy9maWxlLmMsIG1udF9pZG1hcHBpbmcsIHBpZGZzLCBzdXBlciwgdXNlcl9uYW1lc3BhY2UsIGFuZCB2c3ByaW50ZikgYnkgcmVwbGFjaW5nIGV4cGxpY2l0IHNtcF9ybWIoKS9zbXBfd21iKCkgYmFycmllciBwYWlycyB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcsIG9yIGFsdGVyIGhvdyBidWZmZXJzIGFyZSBpbml0aWFsaXplZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBvciBhbHRlciBob3cgYnVmZmVycyBhcmUgaW5pdGlhbGl6ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCByZW1haW4gZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjM6MTkuMDU2NDg1NzE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1MjMwMDE4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiVVNFUl9OU1wiLFxuICAgIFwiQUlPXCIsXG4gICAgXCJQSURfTlNcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3Jlc2l6ZV9mc1wiLFxuICAgIFwiZXh0NF9ncm91cF9hZGRcIixcbiAgICBcImV4dDRfZ3JvdXBfZXh0ZW5kXCIsXG4gICAgXCJleHQ0X2dldF9ncm91cF9pbmZvXCIsXG4gICAgXCJtYXBfaWRfcmFuZ2VfdXBcIixcbiAgICBcIm1hcF9pZF9yYW5nZV9kb3duXCIsXG4gICAgXCJwaWRmc19leGl0XCIsXG4gICAgXCJwaWRmc19jb3JlZHVtcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcsIG9yIGFsdGVyIGhvdyBidWZmZXJzIGFyZSBpbml0aWFsaXplZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGVybml6ZXMgYW5kIGFkanVzdHMgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGFjcm9zcyBjb3JlIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBjb21wb25lbnRzIChBSU8gcmluZyBidWZmZXJzLCBleHQ0IHJlc2l6aW5nIGFuZCBncm91cCBhbGxvY2F0aW9uLCBmZCBpbnN0YWxsYXRpb24vZXhwYW5zaW9uLCBwaWRmcyBhdHRyaWJ1dGUgcmV0cmlldmFsLCBhbmQgdXNlciBuYW1lc3BhY2UgaWQgbWFwcGluZykgYnkgY29udmVydGluZyBleHBsaWNpdCBzbXBfcm1iL3NtcF93bWIgcGFpcnMgaW50byBhY3F1aXJlL3JlbGVhc2UgbWVtb3J5IG9yZGVycyAoZS5nLiBzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc3luY2hyb25pemF0aW9uIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgb3JkZXJpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzoxOS4wNTY0OTE4MzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDI3ODczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwZWQ0OWJlMWZhZjM5M2NmOWJjMjlmY2ZjZDcxYzIwYjg2NzI2OTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMToyMzoxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXFxuaW5kZXggZDc4YWNjNjlmNDg3MC4uYTAyNzllMDU5ZTk3MiAxMDA2NDRcXG4tLS0gYS9mcy9haW8uY1xcbisrKyBiL2ZzL2Fpby5jXFxuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXFxuIFxcdC8qIGFmdGVyIGZsYWdnaW5nIHRoZSByZXF1ZXN0IGFzIGRvbmUsIHdlXFxuIFxcdCAqIG11c3QgbmV2ZXIgZXZlbiBsb29rIGF0IGl0IGFnYWluXFxuIFxcdCAqL1xcbi1cXHRzbXBfd21iKCk7XFx0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXFxuLVxcbiBcXHRjdHgtXFx1MDAzZXRhaWwgPSB0YWlsO1xcbiBcXG4gXFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVxcdTAwM2VyaW5nX2ZvbGlvc1swXSk7XFxuIFxcdGhlYWQgPSByaW5nLVxcdTAwM2VoZWFkO1xcbi1cXHRyaW5nLVxcdTAwM2V0YWlsID0gdGFpbDtcXG4rXFx0LyogTWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZyaW5nLVxcdTAwM2V0YWlsLCB0YWlsKTtcXG4gXFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGN0eC1cXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xcbiBcXG4gXFx0Y3R4LVxcdTAwM2Vjb21wbGV0ZWRfZXZlbnRzKys7XFxuQEAgLTEyODgsMTMgKzEyODcsMTIgQEAgc3RhdGljIGxvbmcgYWlvX3JlYWRfZXZlbnRzX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LFxcbiBcXHQvKiBBY2Nlc3MgdG8gLVxcdTAwM2VyaW5nX2ZvbGlvcyBoZXJlIGlzIHByb3RlY3RlZCBieSBjdHgtXFx1MDAzZXJpbmdfbG9jay4gKi9cXG4gXFx0cmluZyA9IGZvbGlvX2FkZHJlc3MoY3R4LVxcdTAwM2VyaW5nX2ZvbGlvc1swXSk7XFxuIFxcdGhlYWQgPSByaW5nLVxcdTAwM2VoZWFkO1xcbi1cXHR0YWlsID0gcmluZy1cXHUwMDNldGFpbDtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIEVuc3VyZSB0aGF0IG9uY2Ugd2UndmUgcmVhZCB0aGUgY3VycmVudCB0YWlsIHBvaW50ZXIsIHRoYXRcXG4gXFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxcbitcXHQgKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gYWlvX2NvbXBsZXRlKCkuXFxuIFxcdCAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuK1xcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZyaW5nLVxcdTAwM2V0YWlsKTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJoJXUgdCV1IG0ldVxcXFxuXFxcIiwgaGVhZCwgdGFpbCwgY3R4LVxcdTAwM2Vucl9ldmVudHMpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmNcXG5pbmRleCA1MmY0YzUxNjlmOTE0Li43NzhmZTg3ODhmMDZlIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvYmFsbG9jLmNcXG4rKysgYi9mcy9leHQ0L2JhbGxvYy5jXFxuQEAgLTMyOSw3ICszMjksNyBAQCBzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpleHQ0X2dldF9ncm91cF9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKipncnBfaW5mbztcXG4gXFx0bG9uZyBpbmRleHYsIGluZGV4aDtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShncm91cCBcXHUwMDNlPSBFWFQ0X1NCKHNiKS1cXHUwMDNlc19ncm91cHNfY291bnQpKVxcbitcXHRpZiAodW5saWtlbHkoZ3JvdXAgXFx1MDAzZT0gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHNiKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRpZiAodW5saWtlbHkoIUVYVDRfU0Ioc2IpLVxcdTAwM2VzX2dyb3VwX2luZm8pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxcbmluZGV4IDcyNGEyN2U4YmU2MTMuLmQ3MGI5Y2IwOTE1NTMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0zNTQyLDE2ICszNTQyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lzaXplX3NldChzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBsb2ZmX3QgaV9zaXplKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBSZWFkaW5nIHNfZ3JvdXBzX2NvdW50IHJlcXVpcmVzIHVzaW5nIHNtcF9ybWIoKSBhZnRlcndhcmRzLiAgU2VlXFxuLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKClcXG4tICogaW4gcmVzaXplLmNcXG4rICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCB1c2VzIGFjcXVpcmUgc2VtYW50aWNzLlxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIHtcXG4tXFx0ZXh0NF9ncm91cF90XFx0bmdyb3VwcyA9IEVYVDRfU0Ioc2IpLVxcdTAwM2VzX2dyb3Vwc19jb3VudDtcXG4tXFxuLVxcdHNtcF9ybWIoKTtcXG4tXFx0cmV0dXJuIG5ncm91cHM7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXFxuK1xcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc19ncm91cHNfY291bnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2ZsZXhfZ3JvdXAoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXFxuaW5kZXggMDYxNzFhMTFkYjEyNS4uYTE1Mjg1MjI0Y2RmNiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L21iYWxsb2MuY1xcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXFxuQEAgLTg5OSwxMCArODk5LDggQEAgc3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudChcXG4gXFxuIFxcdC8qIG5vbi1leHRlbnQgZmlsZXMgYXJlIGxpbWl0ZWQgdG8gbG93IGJsb2Nrcy9ncm91cHMgKi9cXG4gXFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXFx1MDAzZWFjX2lub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSlcXG4tXFx0XFx0bmdyb3VwcyA9IEVYVDRfU0IoYWMtXFx1MDAzZWFjX3NiKS1cXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xcbi1cXG4tXFx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuK1xcdFxcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBleHQ0X3VwZGF0ZV9zdXBlcigpICovXFxuK1xcdFxcdG5ncm91cHMgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZFWFQ0X1NCKGFjLVxcdTAwM2VhY19zYiktXFx1MDAzZXNfYmxvY2tmaWxlX2dyb3Vwcyk7XFxuIFxcbiBcXHRyZXR1cm4gbmdyb3VwcztcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuY1xcbmluZGV4IDJjNWI4NTFjNTUyYTYuLjVlM2FkODM5M2NmODMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9yZXNpemUuY1xcbisrKyBiL2ZzL2V4dDQvcmVzaXplLmNcXG5AQCAtMTQ2MiwxMSArMTQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHQgKlxcbiBcXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxcbiBcXHQgKlxcbi1cXHQgKiAqIFdyaXRlcnMgbXVzdCBwZXJmb3JtIGEgc21wX3dtYigpIGFmdGVyIHVwZGF0aW5nIGFsbFxcbi1cXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcXG4rXFx0ICogKiBXcml0ZXJzIG11c3QgdXNlIGEgcmVsZWFzZSBzdG9yZSB3aGVuIHVwZGF0aW5nIHRoZSBncm91cHMgY291bnRcXG4rXFx0ICogICBhZnRlciBhbGwgZGVwZW5kZW50IGRhdGEgaGFzIGJlZW4gdXBkYXRlZFxcbiBcXHQgKlxcbi1cXHQgKiAqIFJlYWRlcnMgbXVzdCBwZXJmb3JtIGFuIHNtcF9ybWIoKSBhZnRlciByZWFkaW5nIHRoZSBncm91cHNcXG4tXFx0ICogICBjb3VudCBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLlxcbitcXHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXFxuK1xcdCAqICAgY291bnQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLlxcbiBcXHQgKlxcbiBcXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcXG4gXFx0ICogd2hpbGUgZnJlZWluZyBkYXRhLCBhcyB3ZSBjYW4gb25seSBhbGxvY2F0ZSBmcm9tIGEgYmxvY2tcXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHQgKiBvbmx5IHRoZW4gZnJlZSBhZnRlciBzZXJpYWxpc2luZyBpbiB0dXJuIGFnYWluc3QgdGhhdFxcbiBcXHQgKiBhbGxvY2F0aW9uLlxcbiBcXHQgKi9cXG4tXFx0c21wX3dtYigpO1xcbiBcXG4gXFx0LyogVXBkYXRlIHRoZSBnbG9iYWwgZnMgc2l6ZSBmaWVsZHMgKi9cXG4tXFx0c2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCArPSBmbGV4X2dkLVxcdTAwM2Vjb3VudDtcXG4tXFx0c2JpLVxcdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCxcXG4tXFx0XFx0XFx0KEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyAvIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpKTtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KCkgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnNiaS1cXHUwMDNlc19ncm91cHNfY291bnQsXFxuK1xcdFxcdFxcdCAgc2JpLVxcdTAwM2VzX2dyb3Vwc19jb3VudCArIGZsZXhfZ2QtXFx1MDAzZWNvdW50KTtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZXh0NF9nZXRfYWxsb2NhdGlvbl9ncm91cHNfY291bnQoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2c2JpLVxcdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMsXFxuK1xcdFxcdFxcdCAgbWluKHNiaS1cXHUwMDNlc19ncm91cHNfY291bnQsXFxuK1xcdFxcdFxcdCAgICAgIChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSkpO1xcbiBcXG4gXFx0LyogVXBkYXRlIHRoZSByZXNlcnZlZCBibG9jayBjb3VudHMgb25seSBvbmNlIHRoZSBuZXcgZ3JvdXAgaXNcXG4gXFx0ICogYWN0aXZlLiAqL1xcbmRpZmYgLS1naXQgYS9mcy9maWxlLmMgYi9mcy9maWxlLmNcXG5pbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NFxcbi0tLSBhL2ZzL2ZpbGUuY1xcbisrKyBiL2ZzL2ZpbGUuY1xcbkBAIC0yNzMsOCArMjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIoZmlsZXMtXFx1MDAzZWZkdCwgbmV3X2ZkdCk7XFxuIFxcdGlmIChjdXJfZmR0ICE9IFxcdTAwMjZmaWxlcy1cXHUwMDNlZmR0YWIpXFxuIFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZjdXJfZmR0LVxcdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xcbi1cXHQvKiBjb3VwbGVkIHdpdGggc21wX3JtYigpIGluIGZkX2luc3RhbGwoKSAqL1xcbi1cXHRzbXBfd21iKCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0zMTMsNyArMzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcXG4gXFx0LyogQWxsIGdvb2QsIHNvIHdlIHRyeSAqL1xcbiBcXHRmaWxlcy1cXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzID0gdHJ1ZTtcXG4gXFx0ZXJyb3IgPSBleHBhbmRfZmR0YWJsZShmaWxlcywgbnIpO1xcbi1cXHRmaWxlcy1cXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzID0gZmFsc2U7XFxuK1xcdC8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZmaWxlcy1cXHUwMDNlcmVzaXplX2luX3Byb2dyZXNzLCBmYWxzZSk7XFxuIFxcbiBcXHR3YWtlX3VwX2FsbChcXHUwMDI2ZmlsZXMtXFx1MDAzZXJlc2l6ZV93YWl0KTtcXG4gXFx0cmV0dXJuIGVycm9yO1xcbkBAIC02ODUsMTMgKzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xcbi1cXHRpZiAodW5saWtlbHkoZmlsZXMtXFx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcXG4rXFx0LyogY291cGxlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXhwYW5kX2ZpbGVzKCkgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmZpbGVzLVxcdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcXG4gXFx0XFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIGV4cGFuZF9mZHRhYmxlKCkgKi9cXG4tXFx0c21wX3JtYigpO1xcbiBcXHRmZHQgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoZmlsZXMtXFx1MDAzZWZkdCk7XFxuIFxcdFZGU19CVUdfT04ocmN1X2FjY2Vzc19wb2ludGVyKGZkdC1cXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZkdC1cXHUwMDNlZmRbZmRdLCBmaWxlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbW50X2lkbWFwcGluZy5jIGIvZnMvbW50X2lkbWFwcGluZy5jXFxuaW5kZXggY2I2MWZiZGI1MmU5MC4uNjEyYjI2NmFiM2RhMCAxMDA2NDRcXG4tLS0gYS9mcy9tbnRfaWRtYXBwaW5nLmNcXG4rKysgYi9mcy9tbnRfaWRtYXBwaW5nLmNcXG5AQCAtMjE5LDEwICsyMTksOSBAQCBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNnaWRfaW5fZ3JvdXBfcCk7XFxuIHN0YXRpYyBpbnQgY29weV9tbnRfaWRtYXAoc3RydWN0IHVpZF9naWRfbWFwICptYXBfZnJvbSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcF90bylcXG4ge1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXFxuK1xcdHUzMiBucl9leHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bWFwX2Zyb20tXFx1MDAzZW5yX2V4dGVudHMpO1xcbiBcXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmZvcndhcmQsICpyZXZlcnNlO1xcbi1cXHR1MzIgbnJfZXh0ZW50cyA9IFJFQURfT05DRShtYXBfZnJvbS1cXHUwMDNlbnJfZXh0ZW50cyk7XFxuLVxcdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIHdoZW4gd3JpdGluZyB0aGUgaWRtYXBwaW5nLiAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEb24ndCBibGluZGx5IGNvcHkgQG1hcF90byBpbnRvIEBtYXBfZnJvbSBpZiBucl9leHRlbnRzIGlzXFxuZGlmZiAtLWdpdCBhL2ZzL3BpZGZzLmMgYi9mcy9waWRmcy5jXFxuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcXG4tLS0gYS9mcy9waWRmcy5jXFxuKysrIGIvZnMvcGlkZnMuY1xcbkBAIC0zOTMsOCArMzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcbiBcXHRhdHRyID0gUkVBRF9PTkNFKHBpZC1cXHUwMDNlYXR0cik7XFxuIFxcdGlmIChtYXNrIFxcdTAwMjYgUElERkRfSU5GT19FWElUKSB7XFxuLVxcdFxcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9FWElULCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0cl9tYXNrKSkge1xcbi1cXHRcXHRcXHRzbXBfcm1iKCk7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0VYSVQsIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyX21hc2spKSB7XFxuIFxcdFxcdFxcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUO1xcbiAjaWZkZWYgQ09ORklHX0NHUk9VUFNcXG4gXFx0XFx0XFx0a2luZm8uY2dyb3VwaWQgPSBhdHRyLVxcdTAwM2VjZ3JvdXBpZDtcXG5AQCAtNDA1LDggKzQwNCw3IEBAIHN0YXRpYyBsb25nIHBpZGZkX2luZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAobWFzayBcXHUwMDI2IFBJREZEX0lORk9fQ09SRURVTVApIHtcXG4tXFx0XFx0aWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0cl9tYXNrKSkge1xcbi1cXHRcXHRcXHRzbXBfcm1iKCk7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKFBJREZTX0FUVFJfQklUX0NPUkVEVU1QLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0cl9tYXNrKSkge1xcbiBcXHRcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fQ09SRURVTVAgfCBQSURGRF9JTkZPX0NPUkVEVU1QX1NJR05BTCB8IFBJREZEX0lORk9fQ09SRURVTVBfQ09ERTtcXG4gXFx0XFx0XFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXFx1MDAzZWNvcmVkdW1wX21hc2s7XFxuIFxcdFxcdFxcdGtpbmZvLmNvcmVkdW1wX3NpZ25hbCA9IGF0dHItXFx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcXG5pbmRleCAwNWU0NDMxNzMwMzg3Li5jYWE2MTg5ZTQwNTcyIDEwMDY0NFxcbi0tLSBhL2ZzL3N1cGVyLmNcXG4rKysgYi9mcy9zdXBlci5jXFxuQEAgLTI2NywxMiArMjY3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbiBcXHQgKiBIb3dldmVyLCBpZiB3ZSBhcmUgY3VycmVudGx5IG1vdW50aW5nIHRoZSBzdXBlcmJsb2NrLCB0aGUgdW5kZXJseWluZ1xcbiBcXHQgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0XFxuIFxcdCAqIGlzIGRhbmdlcm91cyB0byBhY2Nlc3MgaXQuICBzdXBlcl90cnlsb2NrX3NoYXJlZCgpIHVzZXMgYSBTQl9CT1JOIGNoZWNrXFxuLVxcdCAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLiBUaGUgbWVtb3J5IGJhcnJpZXIgaXNcXG4tXFx0ICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXFxuK1xcdCAqIHRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCBzbyBkbyB0aGUgc2FtZSBoZXJlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCEoc2ItXFx1MDAzZXNfZmxhZ3MgXFx1MDAyNiBTQl9CT1JOKSlcXG4rXFx0aWYgKCFzdXBlcl9mbGFncyhzYiwgU0JfQk9STikpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRpZiAoc2ItXFx1MDAzZXNfb3AgXFx1MDAyNlxcdTAwMjYgc2ItXFx1MDAzZXNfb3AtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmMgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xcbmluZGV4IDBiZWQ0NjJlOWIyYTIuLjU3NmI2NjdhODgxMzYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcXG4rKysgYi9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuY1xcbkBAIC0zMTcsOSArMzE3LDkgQEAgbWFwX2lkX3JhbmdlX2Rvd25fYmFzZSh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY29cXG4gXFxuIHN0YXRpYyB1MzIgbWFwX2lkX3JhbmdlX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbiB7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cXG4rXFx0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZtYXAtXFx1MDAzZW5yX2V4dGVudHMpO1xcbiBcXHRzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKmV4dGVudDtcXG4tXFx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cXHUwMDNlbnJfZXh0ZW50cztcXG4tXFx0c21wX3JtYigpO1xcbiBcXG4gXFx0aWYgKGV4dGVudHMgXFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcXG4gXFx0XFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX2Rvd25fYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7XFxuQEAgLTM4Myw5ICszODMsOSBAQCBtYXBfaWRfcmFuZ2VfdXBfbWF4KHVuc2lnbmVkIGV4dGVudHMsIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudFxcbiBcXG4gdTMyIG1hcF9pZF9yYW5nZV91cChzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXFxuIHtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xcbitcXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm1hcC1cXHUwMDNlbnJfZXh0ZW50cyk7XFxuIFxcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xcbi1cXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVxcdTAwM2Vucl9leHRlbnRzO1xcbi1cXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRpZiAoZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbiBcXHRcXHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfdXBfYmFzZShleHRlbnRzLCBtYXAsIGlkLCBjb3VudCk7XFxuQEAgLTY3Niw5ICs2NzYsOSBAQCBzdGF0aWMgaW50IHByb2ppZF9tX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXFxuIFxcdFxcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXFxuIHtcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xcbitcXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm1hcC1cXHUwMDNlbnJfZXh0ZW50cyk7XFxuIFxcdGxvZmZfdCBwb3MgPSAqcHBvcztcXG4tXFx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cXHUwMDNlbnJfZXh0ZW50cztcXG4tXFx0c21wX3JtYigpO1xcbiBcXG4gXFx0aWYgKHBvcyBcXHUwMDNlPSBleHRlbnRzKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtOTY3LDkgKzk2NywxMSBAQCBzdGF0aWMgc3NpemVfdCBtYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuIFxcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxcbiBcXHQgKiB3ZXJlIHdyaXR0ZW4gYmVmb3JlIHRoZSBjb3VudCBvZiB0aGUgZXh0ZW50cy5cXG4gXFx0ICpcXG4tXFx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcXG4tXFx0ICogb3JkZXIgYW5kIHNtcF9ybWIoKSBpcyBndWFyYW50ZWVkIHRoYXQgd2UgZG9uJ3QgaGF2ZSBjcmF6eVxcbi1cXHQgKiBhcmNoaXRlY3R1cmVzIHJldHVybmluZyBzdGFsZSBkYXRhLlxcbitcXHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxcbitcXHQgKiBkYXRhLiAgV3JpdGVycyB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoKSB0byBlbnN1cmUgYWxsIGV4dGVudFxcbitcXHQgKiBkYXRhIGlzIHZpc2libGUgYmVmb3JlIG5yX2V4dGVudHMgaXMgdXBkYXRlZC4gIFJlYWRlcnMgdXNlXFxuK1xcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcXG4rXFx0ICogdGhlIGV4dGVudCBkYXRhIHdoZW4gcmVhZGluZyBucl9leHRlbnRzLlxcbiBcXHQgKi9cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2dXNlcm5zX3N0YXRlX211dGV4KTtcXG4gXFxuQEAgLTEwOTgsOCArMTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0bWFwLVxcdTAwM2Vmb3J3YXJkID0gbmV3X21hcC5mb3J3YXJkO1xcbiBcXHRcXHRtYXAtXFx1MDAzZXJldmVyc2UgPSBuZXdfbWFwLnJldmVyc2U7XFxuIFxcdH1cXG4tXFx0c21wX3dtYigpO1xcbi1cXHRtYXAtXFx1MDAzZW5yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7XFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIG1hcF9pZF9yYW5nZV97dXAsZG93bn0oKSBhbmQgbV9zdGFydCgpLiAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bWFwLVxcdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xcbiBcXG4gXFx0KnBwb3MgPSBjb3VudDtcXG4gXFx0cmV0ID0gY291bnQ7XFxuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcXG5pbmRleCAxZDk1YWI5MzE0YmY3Li45MGQwYTcyNGVhZGQ4IDEwMDY0NFxcbi0tLSBhL2xpYi92c3ByaW50Zi5jXFxuKysrIGIvbGliL3ZzcHJpbnRmLmNcXG5AQCAtNzYyLDkgKzc2Miw4IEBAIHN0YXRpYyBpbnQgZmlsbF9wdHJfa2V5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkXFxuIHtcXG4gXFx0Z2V0X3JhbmRvbV9ieXRlcyhcXHUwMDI2cHRyX2tleSwgc2l6ZW9mKHB0cl9rZXkpKTtcXG4gXFxuLVxcdC8qIFBhaXJzIHdpdGggc21wX3JtYigpIGJlZm9yZSByZWFkaW5nIHB0cl9rZXkuICovXFxuLVxcdHNtcF93bWIoKTtcXG4tXFx0V1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xcbitcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2ZmlsbGVkX3JhbmRvbV9wdHJfa2V5LCB0cnVlKTtcXG4gXFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiB9XFxuIFxcbkBAIC03ODEsMTIgKzc4MCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl90b19oYXNodmFsKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyAqaGFzaHZhbF9vdXQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYXNodmFsO1xcbiBcXG4tXFx0aWYgKCFSRUFEX09OQ0UoZmlsbGVkX3JhbmRvbV9wdHJfa2V5KSlcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cXG4rXFx0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4tXFx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xcbi1cXHRzbXBfcm1iKCk7XFxuLVxcbiAjaWZkZWYgQ09ORklHXzY0QklUXFxuIFxcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFxcdTAwMjZwdHJfa2V5KTtcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjM6MTkuNzcxOTk1NTU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NzY3NDc1MDM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlBJRF9OU1wiLFxuICAgIFwiQ0dST1VQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcmVzaXplX2ZzXCIsXG4gICAgXCJleHQ0X2dyb3VwX2FkZFwiLFxuICAgIFwiZXh0NF9ncm91cF9leHRlbmRcIixcbiAgICBcImV4dDRfZ2V0X2dyb3VwX2luZm9cIixcbiAgICBcIm1hcF9pZF9yYW5nZV91cFwiLFxuICAgIFwibWFwX2lkX3JhbmdlX2Rvd25cIixcbiAgICBcInBpZGZzX2V4aXRcIixcbiAgICBcInBpZGZzX2NvcmVkdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kZXJuaXplcyBhbmQgYWRqdXN0cyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYWNyb3NzIGNvcmUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGNvbXBvbmVudHMgKEFJTyByaW5nIGJ1ZmZlcnMsIGV4dDQgcmVzaXppbmcgYW5kIGdyb3VwIGFsbG9jYXRpb24sIGZkIGluc3RhbGxhdGlvbi9leHBhbnNpb24sIHBpZGZzIGF0dHJpYnV0ZSByZXRyaWV2YWwsIGFuZCB1c2VyIG5hbWVzcGFjZSBpZCBtYXBwaW5nKSBieSBjb252ZXJ0aW5nIGV4cGxpY2l0IHNtcF9ybWIvc21wX3dtYiBwYWlycyBpbnRvIGFjcXVpcmUvcmVsZWFzZSBtZW1vcnkgb3JkZXJzIChlLmcuIHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFRoZXNlIGFyZSByZWFjaGFibGUgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwZWQ0OWJlMWZhZjM5M2NmOWJjMjlmY2ZjZDcxYzIwYjg2NzI2OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIxOjIzOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xuaW5kZXggZDc4YWNjNjlmNDg3MC4uYTAyNzllMDU5ZTk3MiAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4rKysgYi9mcy9haW8uY1xuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4gXHQvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZVxuIFx0ICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1x0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4tXG4gXHRjdHgtXHUwMDNldGFpbCA9IHRhaWw7XG4gXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHJpbmctXHUwMDNldGFpbCA9IHRhaWw7XG4rXHQvKiBNYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJpbmctXHUwMDNldGFpbCwgdGFpbCk7XG4gXHRmbHVzaF9kY2FjaGVfZm9saW8oY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcbiBcdGN0eC1cdTAwM2Vjb21wbGV0ZWRfZXZlbnRzKys7XG5AQCAtMTI4OCwxMyArMTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsXG4gXHQvKiBBY2Nlc3MgdG8gLVx1MDAzZXJpbmdfZm9saW9zIGhlcmUgaXMgcHJvdGVjdGVkIGJ5IGN0eC1cdTAwM2VyaW5nX2xvY2suICovXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHRhaWwgPSByaW5nLVx1MDAzZXRhaWw7XG4tXG4gXHQvKlxuIFx0ICogRW5zdXJlIHRoYXQgb25jZSB3ZSd2ZSByZWFkIHRoZSBjdXJyZW50IHRhaWwgcG9pbnRlciwgdGhhdFxuIFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxuK1x0ICogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGFpb19jb21wbGV0ZSgpLlxuIFx0ICovXG4tXHRzbXBfcm1iKCk7XG4rXHR0YWlsID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyaW5nLVx1MDAzZXRhaWwpO1xuIFxuIFx0cHJfZGVidWcoXCJoJXUgdCV1IG0ldVxcblwiLCBoZWFkLCB0YWlsLCBjdHgtXHUwMDNlbnJfZXZlbnRzKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2JhbGxvYy5jIGIvZnMvZXh0NC9iYWxsb2MuY1xuaW5kZXggNTJmNGM1MTY5ZjkxNC4uNzc4ZmU4Nzg4ZjA2ZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvYmFsbG9jLmNcbkBAIC0zMjksNyArMzI5LDcgQEAgc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZXh0NF9nZXRfZ3JvdXBfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0c3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqKmdycF9pbmZvO1xuIFx0bG9uZyBpbmRleHYsIGluZGV4aDtcbiBcbi1cdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IEVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KSlcbitcdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzYikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICh1bmxpa2VseSghRVhUNF9TQihzYiktXHUwMDNlc19ncm91cF9pbmZvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM1NDIsMTYgKzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpXG4gfVxuIFxuIC8qXG4tICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCByZXF1aXJlcyB1c2luZyBzbXBfcm1iKCkgYWZ0ZXJ3YXJkcy4gIFNlZVxuLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKClcbi0gKiBpbiByZXNpemUuY1xuKyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRleHQ0X2dyb3VwX3RcdG5ncm91cHMgPSBFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudDtcbi1cbi1cdHNtcF9ybWIoKTtcbi1cdHJldHVybiBuZ3JvdXBzO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbitcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5pbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5AQCAtODk5LDEwICs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxuIFxuIFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xuIFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxuLVx0XHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xuLVxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuLVx0c21wX3JtYigpO1xuK1x0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuK1x0XHRuZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKGFjLVx1MDAzZWFjX3NiKS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMpO1xuIFxuIFx0cmV0dXJuIG5ncm91cHM7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jXG5pbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9yZXNpemUuY1xuKysrIGIvZnMvZXh0NC9yZXNpemUuY1xuQEAgLTE0NjIsMTEgKzE0NjIsMTEgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqXG4gXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxuIFx0ICpcbi1cdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXG4tXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcbitcdCAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50XG4rXHQgKiAgIGFmdGVyIGFsbCBkZXBlbmRlbnQgZGF0YSBoYXMgYmVlbiB1cGRhdGVkXG4gXHQgKlxuLVx0ICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzXG4tXHQgKiAgIGNvdW50IGFuZCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4rXHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXG4rXHQgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiBcdCAqXG4gXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcbiBcdCAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXRcbiBcdCAqIGFsbG9jYXRpb24uXG4gXHQgKi9cbi1cdHNtcF93bWIoKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovXG4tXHRzYmktXHUwMDNlc19ncm91cHNfY291bnQgKz0gZmxleF9nZC1cdTAwM2Vjb3VudDtcbi1cdHNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuLVx0XHRcdChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuK1x0XHRcdCAgc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICsgZmxleF9nZC1cdTAwM2Vjb3VudCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzLFxuK1x0XHRcdCAgbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbitcdFx0XHQgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzXG4gXHQgKiBhY3RpdmUuICovXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jXG5pbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NFxuLS0tIGEvZnMvZmlsZS5jXG4rKysgYi9mcy9maWxlLmNcbkBAIC0yNzMsOCArMjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZpbGVzLVx1MDAzZWZkdCwgbmV3X2ZkdCk7XG4gXHRpZiAoY3VyX2ZkdCAhPSBcdTAwMjZmaWxlcy1cdTAwM2VmZHRhYilcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2Y3VyX2ZkdC1cdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xuLVx0LyogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbi1cdHNtcF93bWIoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTMsNyArMzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdC8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi9cbiBcdGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcyA9IHRydWU7XG4gXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XG4tXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcbiBcbiBcdHdha2VfdXBfYWxsKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV93YWl0KTtcbiBcdHJldHVybiBlcnJvcjtcbkBAIC02ODUsMTMgKzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xuLVx0aWYgKHVubGlrZWx5KGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4cGFuZF9maWxlcygpICovXG4rXHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcbiBcdFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xuLVx0c21wX3JtYigpO1xuIFx0ZmR0ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGZpbGVzLVx1MDAzZWZkdCk7XG4gXHRWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBmaWxlKTtcbmRpZmYgLS1naXQgYS9mcy9tbnRfaWRtYXBwaW5nLmMgYi9mcy9tbnRfaWRtYXBwaW5nLmNcbmluZGV4IGNiNjFmYmRiNTJlOTAuLjYxMmIyNjZhYjNkYTAgMTAwNjQ0XG4tLS0gYS9mcy9tbnRfaWRtYXBwaW5nLmNcbisrKyBiL2ZzL21udF9pZG1hcHBpbmcuY1xuQEAgLTIxOSwxMCArMjE5LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmZzZ2lkX2luX2dyb3VwX3ApO1xuIHN0YXRpYyBpbnQgY29weV9tbnRfaWRtYXAoc3RydWN0IHVpZF9naWRfbWFwICptYXBfZnJvbSxcbiBcdFx0XHQgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX3RvKVxuIHtcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbitcdHUzMiBucl9leHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZtYXBfZnJvbS1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZm9yd2FyZCwgKnJldmVyc2U7XG4tXHR1MzIgbnJfZXh0ZW50cyA9IFJFQURfT05DRShtYXBfZnJvbS1cdTAwM2Vucl9leHRlbnRzKTtcbi1cdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIHdoZW4gd3JpdGluZyB0aGUgaWRtYXBwaW5nLiAqL1xuLVx0c21wX3JtYigpO1xuIFxuIFx0LypcbiBcdCAqIERvbid0IGJsaW5kbHkgY29weSBAbWFwX3RvIGludG8gQG1hcF9mcm9tIGlmIG5yX2V4dGVudHMgaXNcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbisrKyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCArMzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXG4gXHRhdHRyID0gUkVBRF9PTkNFKHBpZC1cdTAwM2VhdHRyKTtcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0VYSVQpIHtcbi1cdFx0aWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuLVx0XHRcdHNtcF9ybWIoKTtcbitcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBTXG4gXHRcdFx0a2luZm8uY2dyb3VwaWQgPSBhdHRyLVx1MDAzZWNncm91cGlkO1xuQEAgLTQwNSw4ICs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuK1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXHUwMDNlY29yZWR1bXBfbWFzaztcbiBcdFx0XHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uY2FhNjE4OWU0MDU3MiAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yNjcsMTIgKzI2NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdCAqIEhvd2V2ZXIsIGlmIHdlIGFyZSBjdXJyZW50bHkgbW91bnRpbmcgdGhlIHN1cGVyYmxvY2ssIHRoZSB1bmRlcmx5aW5nXG4gXHQgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0XG4gXHQgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVja1xuLVx0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBtZW1vcnkgYmFycmllciBpc1xuLVx0ICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXG4rXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS5cbiBcdCAqL1xuLVx0aWYgKCEoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfQk9STikpXG4rXHRpZiAoIXN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtMzE3LDkgKzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvXG4gXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKGV4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIFx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC0zODMsOSArMzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnRcbiBcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC02NzYsOSArNjc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdGxvZmZfdCBwb3MgPSAqcHBvcztcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChwb3MgXHUwMDNlPSBleHRlbnRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC05NjcsOSArOTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxuIFx0ICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuXG4gXHQgKlxuLVx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcbi1cdCAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbid0IGhhdmUgY3Jhenlcbi1cdCAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuXG4rXHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxuK1x0ICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnRcbitcdCAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2VcbitcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcbitcdCAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xuIFxuQEAgLTEwOTgsOCArMTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0bWFwLVx1MDAzZWZvcndhcmQgPSBuZXdfbWFwLmZvcndhcmQ7XG4gXHRcdG1hcC1cdTAwM2VyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlO1xuIFx0fVxuLVx0c21wX3dtYigpO1xuLVx0bWFwLVx1MDAzZW5yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xuIFxuIFx0KnBwb3MgPSBjb3VudDtcbiBcdHJldCA9IGNvdW50O1xuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcbmluZGV4IDFkOTVhYjkzMTRiZjcuLjkwZDBhNzI0ZWFkZDggMTAwNjQ0XG4tLS0gYS9saWIvdnNwcmludGYuY1xuKysrIGIvbGliL3ZzcHJpbnRmLmNcbkBAIC03NjIsOSArNzYyLDggQEAgc3RhdGljIGludCBmaWxsX3B0cl9rZXkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRcbiB7XG4gXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnB0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7XG4gXG4tXHQvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3dtYigpO1xuLVx0V1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuQEAgLTc4MSwxMiArNzgwLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3RvX2hhc2h2YWwoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nICpoYXNodmFsX291dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhc2h2YWw7XG4gXG4tXHRpZiAoIVJFQURfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3JtYigpO1xuLVxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFx1MDAyNnB0cl9rZXkpO1xuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjE5Ljc3MTk5NzkzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNTk4MzU0OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIHNlcmllcyBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgcXVpdGUgYSBmZXcgZmlsZXM6IGBmcy9haW8uY2AsIGBmcy9leHQ0LypgLCBgZnMvZmlsZS5jYCwgYGZzL21udF9pZG1hcHBpbmcuY2AsIGBmcy9waWRmcy5jYCwgYGZzL3N1cGVyLmNgLCBhbmQgYGxpYi92c3ByaW50Zi5jYCBwcmltYXJpbHkuIFRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBzb21ldGhpbmcgcG90ZW50aWFsbHkgY29yZSBvciB3aWRlc3ByZWFkIGlzIGJlaW5nIHRvdWNoZWQuXG5cbk15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyBhIG1lbW9yeSBiYXJyaWVyIG1vZGVybml6YXRpb24gZWZmb3J0LiBJdCBzZWVtcyB0byBiZSBjb252ZXJ0aW5nIGBzbXBfd21iKClgIGFuZCBhc3NpZ25tZW50LyBgc21wX3JtYigpYCBhbmQgbG9hZCBwYWlycyB0byBgc21wX3N0b3JlX3JlbGVhc2UoKWAvYHNtcF9sb2FkX2FjcXVpcmUoKWAgaW4gbW9zdCBpbnN0YW5jZXMuIFRoZXJlJ3MgYWxzbyBzb21lIHJlZmFjdG9yaW5nIGluIGBmcy9leHQ0L2JhbGxvYy5jYCB3aXRoIHRoZSBncm91cCBjb3VudCBjaGVjaywgdXBkYXRlcyBpbiBgZnMvZmlsZS5jYCByZWxhdGVkIHRvIGZpbGUgZGVzY3JpcHRvciB0YWJsZSBleHBhbnNpb24gYW5kIHJlc2l6ZSBpbiBwcm9ncmVzcyBmbGFncywgYW5kIGFuIHVwZGF0ZSBpbiBgc3VwZXIuY2AuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZywgb3IganVzdCBhIHJlZmFjdG9yaW5nIG9yIGNsZWFudXAuIEJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgZnV6emluZywgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwYXRjaCdzIHNjb3BlIGFuZCBpZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgcnVuIHRlc3RzLlxuXG5JIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGd1aWRlbGluZXMuIE15IG1lbnRhbCBjaGVja2xpc3QgdGVsbHMgbWUgSSBzaG91bGQgZXhjbHVkZTogZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBjb25zdGFudCBjaGFuZ2VzIHRoYXQgZG9uJ3QgYWx0ZXIgZXhlY3V0aW9uLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBzcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzIG9yIC5yZW1vdmUgY2FsbGJhY2tzKS5cblxuQWxyaWdodCwgc28gKmlzKiB0aGlzIHNvbWV0aGluZyB0aGF0IGlzIHJlYWNoYWJsZT8gRG9lcyB0aGlzIHRvdWNoIGNvcmUgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXM/IFRoZSBjaGFuZ2VzIHRvIGBmcy9maWxlLmNgIGFuZCBgZnMvc3VwZXIuY2AgYXJlIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcuXG5cbkknbSBnb2luZyB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB1c2UgYGdpdCBsb2dgIG9yIGFub3RoZXIgdG9vbCB0byBnZXQgYSBjb25jaXNlIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgdG8gcXVpY2tseSBzdW1tYXJpemUgdGhlbS4gSSBuZWVkIHRvIGtub3cgdGhlICpwdXJwb3NlKiBiZWZvcmUgSSBjYW4gbWFrZSBhIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzozMy4zNzAzNTcwMTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxOTcwNDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN1cGVyX2ZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYz04Mz1zdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfdW5sb2NrX3NoYXJlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvc3VwZXIuYy04Ny1cXG5mcy9zdXBlci5jOjg4OnN0YXRpYyBib29sIHN1cGVyX2ZsYWdzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBmbGFncylcXG5mcy9zdXBlci5jLTg5LXtcXG4tLVxcbmZzL3N1cGVyLmM9MTEzPXN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzdXBlcl9sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgZXhjbClcXG4tLVxcbmZzL3N1cGVyLmMtMTE3LVxcdC8qIHdhaXQgdW50aWwgdGhlIHN1cGVyYmxvY2sgaXMgcmVhZHkgb3IgZHlpbmcgKi9cXG5mcy9zdXBlci5jOjExODpcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2c2ItXFx1MDAzZXNfZmxhZ3MsIHN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOIHwgU0JfRFlJTkcpKTtcXG5mcy9zdXBlci5jLTExOS1cXG5mcy9zdXBlci5jLTEyMC1cXHQvKiBEb24ndCBwb2ludGxlc3NseSBhY3F1aXJlIHNfdW1vdW50LiAqL1xcbmZzL3N1cGVyLmM6MTIxOlxcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxcbmZzL3N1cGVyLmMtMTIyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL3N1cGVyLmM9MjUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbi0tXFxuZnMvc3VwZXIuYy0yNzEtXFx0ICovXFxuZnMvc3VwZXIuYzoyNzI6XFx0aWYgKCFzdXBlcl9mbGFncyhzYiwgU0JfQk9STikpXFxuZnMvc3VwZXIuYy0yNzMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9zdXBlci5jPTY0OD1zdGF0aWMgYm9vbCBncmFiX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTY2MS1cXHR9XFxuZnMvc3VwZXIuYzo2NjI6XFx0d2FpdF92YXJfZXZlbnQoXFx1MDAyNnNiLVxcdTAwM2VzX2ZsYWdzLCBzdXBlcl9mbGFncyhzYiwgU0JfREVBRCkpO1xcbmZzL3N1cGVyLmMtNjYzLVxcdHB1dF9zdXBlcihzYik7XFxuLS1cXG5mcy9zdXBlci5jPTk3MT1zdGF0aWMgdm9pZCBfX2l0ZXJhdGVfc3VwZXJzKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnLFxcbi0tXFxuZnMvc3VwZXIuYy05ODEtXFx0ICAgICBzYiA9IG5leHRfc3VwZXIoc2IsIGZsYWdzKSkge1xcbmZzL3N1cGVyLmM6OTgyOlxcdFxcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxcbmZzL3N1cGVyLmMtOTgzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvc3VwZXIuYz0xMDIxPXZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcXG4tLVxcbmZzL3N1cGVyLmMtMTAyOS1cXG5mcy9zdXBlci5jOjEwMzA6XFx0XFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXFxuZnMvc3VwZXIuYy0xMDMxLVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzozMy44MDIzMzQyODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxNzI1ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc3VwZXJfZmxhZ3NgIGluIGBmcy9zdXBlci5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIGhvdyBmaWxlc3lzdGVtcyBhcmUgbWFuYWdlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgc3VwZXJfZmxhZ3NgIHZhcmlhYmxlLiBJdCdzIGluIGBmcy9zdXBlci5jYCwgd2hpY2gsIGFzIHdlIGtub3csIGlzIHRoZSBjZW50cmFsIGxvY2F0aW9uIGZvciBzdXBlcmJsb2NrLXJlbGF0ZWQgb3BlcmF0aW9ucy4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhlIHBsYWNlIHdoZXJlIGFsbCBvZiB0aGUgY3J1Y2lhbCBmaWxlc3lzdGVtIHBhcmFtZXRlcnMgYXJlIHN0b3JlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBmbGFncyBhcmUgc2V0IGFuZCB3aGF0IGVmZmVjdHMgdGhvc2UgZmxhZ3MgaGF2ZSBvbiB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlc2UgZmxhZ3MgaW5mbHVlbmNlIHRoaW5ncyBsaWtlIGZpbGVzeXN0ZW0gbW91bnRpbmcsIHVubW91bnRpbmcsIGFuZCBvdmVyYWxsIGludGVncml0eS4gSG9wZWZ1bGx5IHRoZSBmbGFncyBhcmUgd2VsbCBkb2N1bWVudGVkIGluIHRoZSBjb2RlLCBvciBhdCBsZWFzdCBoYXZlIG1lYW5pbmdmdWwgY29tbWVudHMgc28gSSBjYW4gcXVpY2tseSBncm9rIHRoZWlyIG1lYW5pbmcuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBmbGFncyB3aWxsIG9mZmVyIGluc2lnaHRzIGludG8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ2llcywgYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIHdlIGNhbiB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjM6MzUuOTQ0MDY0MTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXHRzdXBlcl91bmxvY2soc2IsIGZhbHNlKTtcXG4gIDg2OlxcdH1cXG4gIDg3OlxcdFxcbiAgODg6XFx0c3RhdGljIGJvb2wgc3VwZXJfZmxhZ3MoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWdzKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0LypcXG4gIDkxOlxcdFxcdCAqIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBzdXBlcl93YWtlKCkgYW5kIGVuc3VyZXNcXG4gIDkyOlxcdFxcdCAqIHRoYXQgd2Ugc2VlIEBmbGFncyBhZnRlciB3ZSdyZSB3b2tlbi5cXG4gIDkzOlxcdFxcdCAqL1xcbiAgOTQ6XFx0XFx0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnNiLVxcdTAwM2VzX2ZsYWdzKSBcXHUwMDI2IGZsYWdzO1xcbiAgOTU6XFx0fVxcbiAgOTY6XFx0XFxuICA5NzpcXHQvKipcXG4gIDk4OlxcdCAqIHN1cGVyX2xvY2sgLSB3YWl0IGZvciBzdXBlcmJsb2NrIHRvIGJlY29tZSByZWFkeSBhbmQgbG9jayBpdFxcbiAgOTk6XFx0ICogQHNiOiBzdXBlcmJsb2NrIHRvIHdhaXQgZm9yXFxuIDEwMDpcXHQgKiBAZXhjbDogd2hldGhlciBleGNsdXNpdmUgYWNjZXNzIGlzIHJlcXVpcmVkXFxuIDEwMTpcXHQgKlxcbiAxMDI6XFx0ICogSWYgdGhlIHN1cGVyYmxvY2sgaGFzIG5laXRoZXIgcGFzc2VkIHRocm91Z2ggdmZzX2dldF90cmVlKCkgb3JcXG4gMTAzOlxcdCAqIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoKSB5ZXQgd2FpdCBmb3IgaXQgdG8gaGFwcGVuLiBFaXRoZXIgc3VwZXJibG9ja1xcbiAxMDQ6XFx0ICogY3JlYXRpb24gd2lsbCBzdWNjZWVkIGFuZCBTQl9CT1JOIGlzIHNldCBieSB2ZnNfZ2V0X3RyZWUoKSBvciB3ZSdyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzozNS45NDQyNDM2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NTY0OTE3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS2VybmVsIENvbmN1cnJlbmN5IGFuZCBNZW1vcnkgT3JkZXJpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgc2V0IG9mIGtlcm5lbCBtb2RpZmljYXRpb25zIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoZXNlIGNoYW5nZXMgYXJlIGhpdHRpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG9yZGVyaW5nIHByaW1pdGl2ZXMgYW5kIGNvbmN1cnJlbmN5IHN5bmNocm9uaXphdGlvbiBhY3Jvc3Mgc2V2ZXJhbCBrZXkgZmlsZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZnV6emVyLXJlbGV2YW50IHBvaW50cy5cblxuVGhlIGxpc3RlZCBmaWxlcyBhcmU6IGBmcy9haW8uY2AsIGBmcy9leHQ0L2JhbGxvYy5jYCwgYGZzL2V4dDQvZXh0NC5oYCwgYGZzL2V4dDQvbWJhbGxvYy5jYCwgYGZzL2V4dDQvcmVzaXplLmNgLCBgZnMvZmlsZS5jYCwgYGZzL21udF9pZG1hcHBpbmcuY2AsIGBmcy9waWRmcy5jYCwgYGZzL3N1cGVyLmNgLCBgZnMvdXNlcl9uYW1lc3BhY2UuY2AsIGFuZCBgbGliL3ZzcHJpbnRmLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBhcmVhcyBsaWtlIEFJTyBjb21wbGV0aW9uLCBFeHQ0IGJsb2NrIGFsbG9jYXRpb24gYW5kIHJlc2l6ZSBvcGVyYXRpb25zLCBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCwgbW91bnQgSUQgbWFwcGluZywgUElERkQgaW5mb3JtYXRpb24sIHN1cGVyYmxvY2sgaGFuZGxpbmcsIHVzZXIgbmFtZXNwYWNlIElEIG1hcHBpbmcsIGFuZCB2c3ByaW50ZiBwb2ludGVyIGhhc2hpbmcuXG5cbkNydWNpYWxseSwgdGhpcyBtb2RpZmljYXRpb24gZGlyZWN0bHkgYWZmZWN0cyBjb3JlIFZGUyBmdW5jdGlvbmFsaXR5LiBUaGlzIG1lYW5zIHRoZXNlIGNvbmN1cnJlbmN5IGNoYW5nZXMgKmFyZSogcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBteSBcIldvcnRoRnV6emluZz10cnVlXCIgZmxhZy4gSSBoYXZlIHRvIGJlIGV4dHJlbWVseSBtZXRpY3Vsb3VzIGhlcmUuXG5cbk5vdywgSSBuZWVkIHRvIGFkaGVyZSB0byB0aGUgcnVsZXMuIEJlY2F1c2UgdGhpcyBoaXRzIGNvcmUga2VybmVsIGxvZ2ljLCBJICptdXN0KiBpZGVudGlmeSBzdWl0YWJsZSBgRm9jdXNTeW1ib2xzYCBmb3IgZnV6emluZywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgcmVxdWlyZXMgbWUgdG8gZmluZCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBhbnkgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgYWxzbyBoYXZlIHRvIGlkZW50aWZ5IHRoZSBuZWVkZWQgYEVuYWJsZUNvbmZpZ3NgLlxuXG5MZXQncyBkaXZlIGludG8gZWFjaCBmaWxlLCBzdGFydGluZyB3aXRoIGBmcy9haW8uY2AuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGFpb19jb21wbGV0ZWAgYW5kIGBhaW9fcmVhZF9ldmVudHNfcmluZ2AuIEhtbSwgYGFpb19jb21wbGV0ZWAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCwgYnV0IGBhaW9fcmVhZF9ldmVudHNfcmluZ2AgaXMgY2FsbGVkIGJ5IGBpb19nZXRldmVudHNgIGFuZCBgaW9fcGdldGV2ZW50c2AsIG1ha2luZyBpdCBtdWNoIG1vcmUgcHJvbWlzaW5nLiBJIG5lZWQgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBjb25maXJtLiBJIHNob3VsZCBkZWZpbml0ZWx5IGxvb2sgYXQgYWxsIG9mIGBmcy9haW8uY2AgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo0MS44MDA3Mzk3ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMDQ3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihpb19nZXRldmVudHN8cmVhZF9ldmVudHN8YWlvX2NvbXBsZXRlKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9haW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9haW8uYz01Nj1zdHJ1Y3QgYWlvX3Jpbmcge1xcbi0tXFxuZnMvYWlvLmMtNTktXFx0dW5zaWduZWRcXHRoZWFkO1xcdC8qIFdyaXR0ZW4gdG8gYnkgdXNlcmxhbmQgb3IgdW5kZXIgcmluZ19sb2NrXFxuZnMvYWlvLmM6NjA6XFx0XFx0XFx0XFx0ICogbXV0ZXggYnkgYWlvX3JlYWRfZXZlbnRzX3JpbmcoKS4gKi9cXG5mcy9haW8uYy02MS1cXHR1bnNpZ25lZFxcdHRhaWw7XFxuLS1cXG5mcy9haW8uYz00NjA9c3RhdGljIGludCBhaW9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5mcy9haW8uYy00NzYtXFxuZnMvYWlvLmM6NDc3OlxcdC8qIFRoZSByaW5nX2xvY2sgbXV0ZXguICBUaGUgcHJldmVudHMgYWlvX3JlYWRfZXZlbnRzKCkgZnJvbSB3cml0aW5nXFxuZnMvYWlvLmMtNDc4LVxcdCAqIHRvIHRoZSByaW5nJ3MgaGVhZCwgYW5kIHByZXZlbnRzIHBhZ2UgbWlncmF0aW9uIGZyb20gbXVja2luZyBpblxcbi0tXFxuZnMvYWlvLmM9MTAwND1zdGF0aWMgYm9vbCBfX2dldF9yZXFzX2F2YWlsYWJsZShzdHJ1Y3Qga2lvY3R4ICpjdHgpXFxuLS1cXG5mcy9haW8uYy0xMDMzLSAqXFx0bnVtYmVyIG9mIGZyZWUgc2xvdHMgaW4gdGhlIGNvbXBsZXRpb24gcmluZy4gIFRoaXMgY2FuIGJlIGNhbGxlZFxcbmZzL2Fpby5jOjEwMzQ6ICpcXHRmcm9tIGFpb19jb21wbGV0ZSgpICh0byBvcHRpbWlzdGljYWxseSB1cGRhdGUgcmVxc19hdmFpbGFibGUpIG9yXFxuZnMvYWlvLmMtMTAzNS0gKlxcdGZyb20gYWlvX2dldF9yZXEoKSAodGhlIHdlJ3JlIG91dCBvZiBldmVudHMgY2FzZSkuICBJdCBtdXN0IGJlXFxuLS1cXG5mcy9haW8uYz0xMDY3PXN0YXRpYyB2b2lkIHVzZXJfcmVmaWxsX3JlcXNfYXZhaWxhYmxlKHN0cnVjdCBraW9jdHggKmN0eClcXG4tLVxcbmZzL2Fpby5jLTEwNzMtXFxuZnMvYWlvLmM6MTA3NDpcXHRcXHQvKiBBY2Nlc3Mgb2YgcmluZy1cXHUwMDNlaGVhZCBtYXkgcmFjZSB3aXRoIGFpb19yZWFkX2V2ZW50c19yaW5nKClcXG5mcy9haW8uYy0xMDc1LVxcdFxcdCAqIGhlcmUsIGJ1dCB0aGF0J3Mgb2theSBzaW5jZSB3aGV0aGVyIHdlIHJlYWQgdGhlIG9sZCB2ZXJzaW9uXFxuLS1cXG5mcy9haW8uYy0xMDc3LVxcdFxcdCAqIHBhcnQgaXMgdGhhdCBoZWFkIGNhbm5vdCBwYXNzIHRhaWwgc2luY2Ugd2UgcHJldmVudFxcbmZzL2Fpby5jOjEwNzg6XFx0XFx0ICogYWlvX2NvbXBsZXRlKCkgZnJvbSB1cGRhdGluZyB0YWlsIGJ5IGhvbGRpbmdcXG5mcy9haW8uYy0xMDc5LVxcdFxcdCAqIGN0eC1cXHUwMDNlY29tcGxldGlvbl9sb2NrLiAgRXZlbiBpZiBoZWFkIGlzIGludmFsaWQsIHRoZSBjaGVja1xcbi0tXFxuZnMvYWlvLmM9MTE2Nj1zdHJ1Y3QgYWlvX3dhaXRlciB7XFxuLS1cXG5mcy9haW8uYy0xMTcwLVxcbmZzL2Fpby5jOjExNzE6LyogYWlvX2NvbXBsZXRlXFxuZnMvYWlvLmMtMTE3Mi0gKlxcdENhbGxlZCB3aGVuIHRoZSBpbyByZXF1ZXN0IG9uIHRoZSBnaXZlbiBpb2NiIGlzIGNvbXBsZXRlLlxcbmZzL2Fpby5jLTExNzMtICovXFxuZnMvYWlvLmM6MTE3NDpzdGF0aWMgdm9pZCBhaW9fY29tcGxldGUoc3RydWN0IGFpb19raW9jYiAqaW9jYilcXG5mcy9haW8uYy0xMTc1LXtcXG4tLVxcbmZzL2Fpby5jPTEyNTg9c3RhdGljIGlubGluZSB2b2lkIGlvY2JfcHV0KHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXFxuLS1cXG5mcy9haW8uYy0xMjYwLVxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmlvY2ItXFx1MDAzZWtpX3JlZmNudCkpIHtcXG5mcy9haW8uYzoxMjYxOlxcdFxcdGFpb19jb21wbGV0ZShpb2NiKTtcXG5mcy9haW8uYy0xMjYyLVxcdFxcdGlvY2JfZGVzdHJveShpb2NiKTtcXG4tLVxcbmZzL2Fpby5jLTEyNjUtXFxuZnMvYWlvLmM6MTI2NjovKiBhaW9fcmVhZF9ldmVudHNfcmluZ1xcbmZzL2Fpby5jLTEyNjctICpcXHRQdWxsIGFuIGV2ZW50IG9mZiBvZiB0aGUgaW9jdHgncyBldmVudCByaW5nLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mXFxuLS1cXG5mcy9haW8uYy0xMjY5LSAqL1xcbmZzL2Fpby5jOjEyNzA6c3RhdGljIGxvbmcgYWlvX3JlYWRfZXZlbnRzX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LFxcbmZzL2Fpby5jLTEyNzEtXFx0XFx0XFx0XFx0IHN0cnVjdCBpb19ldmVudCBfX3VzZXIgKmV2ZW50LCBsb25nIG5yKVxcbi0tXFxuZnMvYWlvLmMtMTI4MS1cXHQgKiBhbmQgcmVwZWF0LiBUaGlzIHNob3VsZCBiZSByYXJlIGVub3VnaCB0aGF0IGl0IGRvZXNuJ3QgY2F1c2VcXG5mcy9haW8uYzoxMjgyOlxcdCAqIHBlZm9ybWFuY2UgaXNzdWVzLiBTZWUgdGhlIGNvbW1lbnQgaW4gcmVhZF9ldmVudHMoKSBmb3IgbW9yZSBkZXRhaWwuXFxuZnMvYWlvLmMtMTI4My1cXHQgKi9cXG4tLVxcbmZzL2Fpby5jLTEyOTItXFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxcbmZzL2Fpby5jOjEyOTM6XFx0ICogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGFpb19jb21wbGV0ZSgpLlxcbmZzL2Fpby5jLTEyOTQtXFx0ICovXFxuLS1cXG5mcy9haW8uYy0xMzQ1LVxcbmZzL2Fpby5jOjEzNDY6c3RhdGljIGJvb2wgYWlvX3JlYWRfZXZlbnRzKHN0cnVjdCBraW9jdHggKmN0eCwgbG9uZyBtaW5fbnIsIGxvbmcgbnIsXFxuZnMvYWlvLmMtMTM0Ny1cXHRcXHRcXHQgICAgc3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsIGxvbmcgKmkpXFxuZnMvYWlvLmMtMTM0OC17XFxuZnMvYWlvLmM6MTM0OTpcXHRsb25nIHJldCA9IGFpb19yZWFkX2V2ZW50c19yaW5nKGN0eCwgZXZlbnQgKyAqaSwgbnIgLSAqaSk7XFxuZnMvYWlvLmMtMTM1MC1cXG4tLVxcbmZzL2Fpby5jLTEzNjItXFxuZnMvYWlvLmM6MTM2MzpzdGF0aWMgbG9uZyByZWFkX2V2ZW50cyhzdHJ1Y3Qga2lvY3R4ICpjdHgsIGxvbmcgbWluX25yLCBsb25nIG5yLFxcbmZzL2Fpby5jLTEzNjQtXFx0XFx0XFx0c3RydWN0IGlvX2V2ZW50IF9fdXNlciAqZXZlbnQsXFxuLS1cXG5mcy9haW8uYy0xMzcxLVxcdC8qXFxuZnMvYWlvLmM6MTM3MjpcXHQgKiBOb3RlIHRoYXQgYWlvX3JlYWRfZXZlbnRzKCkgaXMgYmVpbmcgY2FsbGVkIGFzIHRoZSBjb25kaXRpb25hbCAtIGkuZS5cXG5mcy9haW8uYy0xMzczLVxcdCAqIHdlJ3JlIGNhbGxpbmcgaXQgYWZ0ZXIgcHJlcGFyZV90b193YWl0KCkgaGFzIHNldCB0YXNrIHN0YXRlIHRvXFxuLS1cXG5mcy9haW8uYy0xMzc1LVxcdCAqXFxuZnMvYWlvLmM6MTM3NjpcXHQgKiBCdXQgYWlvX3JlYWRfZXZlbnRzKCkgY2FuIGJsb2NrLCBhbmQgaWYgaXQgYmxvY2tzIGl0J3MgZ29pbmcgdG8gZmxpcFxcbmZzL2Fpby5jLTEzNzctXFx0ICogdGhlIHRhc2sgc3RhdGUgYmFjayB0byBUQVNLX1JVTk5JTkcuXFxuLS1cXG5mcy9haW8uYy0xMzg0LVxcdCAqL1xcbmZzL2Fpby5jOjEzODU6XFx0YWlvX3JlYWRfZXZlbnRzKGN0eCwgbWluX25yLCBuciwgZXZlbnQsIFxcdTAwMjZyZXQpO1xcbmZzL2Fpby5jLTEzODYtXFx0aWYgKHVudGlsID09IDAgfHwgcmV0IFxcdTAwM2MgMCB8fCByZXQgXFx1MDAzZT0gbWluX25yKVxcbi0tXFxuZnMvYWlvLmMtMTQwNS1cXG5mcy9haW8uYzoxNDA2OlxcdFxcdGlmIChhaW9fcmVhZF9ldmVudHMoY3R4LCBtaW5fbnIsIG5yLCBldmVudCwgXFx1MDAyNnJldCkgfHwgcmV0MilcXG5mcy9haW8uYy0xNDA3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvYWlvLmM9MTUzMj1zdGF0aWMgdm9pZCBhaW9fcmVtb3ZlX2lvY2Ioc3RydWN0IGFpb19raW9jYiAqaW9jYilcXG4tLVxcbmZzL2Fpby5jLTE1NDEtXFxuZnMvYWlvLmM6MTU0MjpzdGF0aWMgdm9pZCBhaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXFxuZnMvYWlvLmMtMTU0My17XFxuLS1cXG5mcy9haW8uYz0xNTYxPXN0YXRpYyBpbnQgYWlvX3ByZXBfcncoc3RydWN0IGtpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiLCBpbnQgcndfdHlwZSlcXG4tLVxcbmZzL2Fpby5jLTE1NjUtXFx0cmVxLVxcdTAwM2VraV93cml0ZV9zdHJlYW0gPSAwO1xcbmZzL2Fpby5jOjE1NjY6XFx0cmVxLVxcdTAwM2VraV9jb21wbGV0ZSA9IGFpb19jb21wbGV0ZV9ydztcXG5mcy9haW8uYy0xNTY3LVxcdHJlcS1cXHUwMDNlcHJpdmF0ZSA9IE5VTEw7XFxuLS1cXG5mcy9haW8uYz0yMDc0PXN0YXRpYyBpbnQgaW9fc3VibWl0X29uZShzdHJ1Y3Qga2lvY3R4ICpjdHgsIHN0cnVjdCBpb2NiIF9fdXNlciAqdXNlcl9pb2NiLFxcbi0tXFxuZnMvYWlvLmMtMjEwOS1cXHQvKlxcbmZzL2Fpby5jOjIxMTA6XFx0ICogSWYgZXJyIGlzIDAsIHdlJ2QgZWl0aGVyIGRvbmUgYWlvX2NvbXBsZXRlKCkgb3Vyc2VsdmVzIG9yIGhhdmVcXG5mcy9haW8uYy0yMTExLVxcdCAqIGFycmFuZ2VkIGZvciB0aGF0IHRvIGJlIGRvbmUgYXN5bmNocm9ub3VzbHkuICBBbnl0aGluZyBub24temVyb1xcbi0tXFxuZnMvYWlvLmM9MjIyNz1TWVNDQUxMX0RFRklORTMoaW9fY2FuY2VsLCBhaW9fY29udGV4dF90LCBjdHhfaWQsIHN0cnVjdCBpb2NiIF9fdXNlciAqLCBpb2NiLFxcbi0tXFxuZnMvYWlvLmMtMjI2OC1cXG5mcy9haW8uYzoyMjY5OnN0YXRpYyBsb25nIGRvX2lvX2dldGV2ZW50cyhhaW9fY29udGV4dF90IGN0eF9pZCxcXG5mcy9haW8uYy0yMjcwLVxcdFxcdGxvbmcgbWluX25yLFxcbi0tXFxuZnMvYWlvLmMtMjI4MC1cXHRcXHRpZiAobGlrZWx5KG1pbl9uciBcXHUwMDNjPSBuciBcXHUwMDI2XFx1MDAyNiBtaW5fbnIgXFx1MDAzZT0gMCkpXFxuZnMvYWlvLmM6MjI4MTpcXHRcXHRcXHRyZXQgPSByZWFkX2V2ZW50cyhpb2N0eCwgbWluX25yLCBuciwgZXZlbnRzLCB1bnRpbCk7XFxuZnMvYWlvLmMtMjI4Mi1cXHRcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2aW9jdHgtXFx1MDAzZXVzZXJzKTtcXG4tLVxcbmZzL2Fpby5jLTIyODctXFxuZnMvYWlvLmM6MjI4ODovKiBpb19nZXRldmVudHM6XFxuZnMvYWlvLmMtMjI4OS0gKlxcdEF0dGVtcHRzIHRvIHJlYWQgYXQgbGVhc3QgbWluX25yIGV2ZW50cyBhbmQgdXAgdG8gbnIgZXZlbnRzIGZyb21cXG4tLVxcbmZzL2Fpby5jLTIzMDEtXFxuZnMvYWlvLmM6MjMwMjpTWVNDQUxMX0RFRklORTUoaW9fZ2V0ZXZlbnRzLCBhaW9fY29udGV4dF90LCBjdHhfaWQsXFxuZnMvYWlvLmMtMjMwMy1cXHRcXHRsb25nLCBtaW5fbnIsXFxuLS1cXG5mcy9haW8uYy0yMzEzLVxcbmZzL2Fpby5jOjIzMTQ6XFx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXFx1MDAyNnRzIDogTlVMTCk7XFxuZnMvYWlvLmMtMjMxNS1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4tLVxcbmZzL2Fpby5jPTIzMjc9U1lTQ0FMTF9ERUZJTkU2KGlvX3BnZXRldmVudHMsXFxuLS1cXG5mcy9haW8uYy0yMzQ5LVxcbmZzL2Fpby5jOjIzNTA6XFx0cmV0ID0gZG9faW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0ID8gXFx1MDAyNnRzIDogTlVMTCk7XFxuZnMvYWlvLmMtMjM1MS1cXG4tLVxcbmZzL2Fpby5jPTIzNjI9U1lTQ0FMTF9ERUZJTkU2KGlvX3BnZXRldmVudHNfdGltZTMyLFxcbi0tXFxuZnMvYWlvLmMtMjM4NS1cXG5mcy9haW8uYzoyMzg2OlxcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFxcdTAwMjZ0cyA6IE5VTEwpO1xcbmZzL2Fpby5jLTIzODctXFxuLS1cXG5mcy9haW8uYy0yMzk5LVxcbmZzL2Fpby5jOjI0MDA6U1lTQ0FMTF9ERUZJTkU1KGlvX2dldGV2ZW50c190aW1lMzIsIF9fdTMyLCBjdHhfaWQsXFxuZnMvYWlvLmMtMjQwMS1cXHRcXHRfX3MzMiwgbWluX25yLFxcbi0tXFxuZnMvYWlvLmMtMjQxMS1cXG5mcy9haW8uYzoyNDEyOlxcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFxcdTAwMjZ0IDogTlVMTCk7XFxuZnMvYWlvLmMtMjQxMy1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4tLVxcbmZzL2Fpby5jPTI0Mjk9Q09NUEFUX1NZU0NBTExfREVGSU5FNihpb19wZ2V0ZXZlbnRzLFxcbi0tXFxuZnMvYWlvLmMtMjQ1MS1cXG5mcy9haW8uYzoyNDUyOlxcdHJldCA9IGRvX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCA/IFxcdTAwMjZ0IDogTlVMTCk7XFxuZnMvYWlvLmMtMjQ1My1cXG4tLVxcbmZzL2Fpby5jPTI0NjQ9Q09NUEFUX1NZU0NBTExfREVGSU5FNihpb19wZ2V0ZXZlbnRzX3RpbWU2NCxcXG4tLVxcbmZzL2Fpby5jLTI0ODYtXFxuZnMvYWlvLmM6MjQ4NzpcXHRyZXQgPSBkb19pb19nZXRldmVudHMoY3R4X2lkLCBtaW5fbnIsIG5yLCBldmVudHMsIHRpbWVvdXQgPyBcXHUwMDI2dCA6IE5VTEwpO1xcbmZzL2Fpby5jLTI0ODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjQyLjAyMzc5ODA3MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzE4MTI1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXh0NCBSZXNpemUgQ29kZSBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHJlc2l6aW5nIGNvZGUuIFRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgb3V0IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhlIGdyb3VwIGFuZCBibG9jayBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoYXQgbWVhbnMgc3RhcnRpbmcgd2l0aCBhIGZldyBrZXkgZnVuY3Rpb25zOiBgZXh0NF9nZXRfZ3JvdXBfaW5mb2AgaW4gYGZzL2V4dDQvYmFsbG9jLmNgLCBgZXh0NF9nZXRfZ3JvdXBzX2NvdW50YCBpbiBgZnMvZXh0NC9leHQ0LmhgLCBhbmQgYGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50YCBpbiBgZnMvZXh0NC9tYmFsbG9jLmNgLiBUaGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgbWV0YWRhdGEgaXMgc3RydWN0dXJlZCBhbmQgYWNjZXNzZWQuIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGV4dDRfdXBkYXRlX3N1cGVyYCBpbiBgZnMvZXh0NC9yZXNpemUuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN1cGVyYmxvY2sgaXMgbW9kaWZpZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgcmVzaXplIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB0aGUgbm9uLXN0YXRpYyBvbmVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4dGVybmFsIGNhbGxzIGludGVyYWN0IHdpdGggdGhlIGNvcmUgcmVzaXplIG9wZXJhdGlvbnMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgb3V0IGBleHQ0X3Jlc2l6ZV9mc2AsIGBleHQ0X2dyb3VwX2FkZGAsIGFuZCBgZXh0NF9ncm91cF9leHRlbmRgLiBTaW5jZSB0aGVzZSBhcmUgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBvcmNoZXN0cmF0ZSB0aGUgcmVzaXppbmcuIFRvIHVuZGVyc3RhbmQgdGhhdCwgSSBuZWVkIHRvIGxvb2sgaW50byBgZnMvZXh0NC9yZXNpemUuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGNhbGxzLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgaW4gYGZzL2V4dDQvcmVzaXplLmNgIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgdGhlIHdob2xlIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo0NC45OTU2MTMzMjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Njg1OTE4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0Xy4qcmVzaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTMyODY9ZXh0ZXJuIGludCBleHQ0X2dyb3VwX2V4dGVuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMzI4OC1cXHRcXHRcXHRcXHRleHQ0X2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQpO1xcbmZzL2V4dDQvZXh0NC5oOjMyODk6ZXh0ZXJuIGludCBleHQ0X3Jlc2l6ZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQpO1xcbmZzL2V4dDQvZXh0NC5oLTMyOTAtZXh0ZXJuIHVuc2lnbmVkIGludCBleHQ0X2xpc3RfYmFja3VwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9NDAxNz1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdG1hcF91cHRvZGF0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNDAyMS1cXG5mcy9leHQ0L2V4dDQuaDo0MDIyOmV4dGVybiBpbnQgZXh0NF9yZXNpemVfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvZXh0NC9leHQ0Lmg6NDAyMzpleHRlcm4gaW50IGV4dDRfcmVzaXplX2VuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIHVwZGF0ZV9iYWNrdXBzKTtcXG5mcy9leHQ0L2V4dDQuaC00MDI0LVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTk1ND1zdGF0aWMgbG9uZyBleHQ0X2lvY3RsX2dyb3VwX2FkZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy05NTktXFxuZnMvZXh0NC9pb2N0bC5jOjk2MDpcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9iZWdpbihzYik7XFxuZnMvZXh0NC9pb2N0bC5jLTk2MS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTk4OC1ncm91cF9hZGRfb3V0OlxcbmZzL2V4dDQvaW9jdGwuYzo5ODk6XFx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgZmFsc2UpO1xcbmZzL2V4dDQvaW9jdGwuYy05OTAtXFx0aWYgKGVyciA9PSAwKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xNjAwLVxcbmZzL2V4dDQvaW9jdGwuYzoxNjAxOlxcdFxcdGVyciA9IGV4dDRfcmVzaXplX2JlZ2luKHNiKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTYwMi1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE2MzItZ3JvdXBfZXh0ZW5kX291dDpcXG5mcy9leHQ0L2lvY3RsLmM6MTYzMzpcXHRcXHRlcnIyID0gZXh0NF9yZXNpemVfZW5kKHNiLCBmYWxzZSk7XFxuZnMvZXh0NC9pb2N0bC5jLTE2MzQtXFx0XFx0aWYgKGVyciA9PSAwKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE3NDQtXFxuZnMvZXh0NC9pb2N0bC5jOjE3NDU6XFx0XFx0ZXJyID0gZXh0NF9yZXNpemVfYmVnaW4oc2IpO1xcbmZzL2V4dDQvaW9jdGwuYy0xNzQ2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTc1Mi1cXG5mcy9leHQ0L2lvY3RsLmM6MTc1MzpcXHRcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9mcyhzYiwgbl9ibG9ja3NfY291bnQpO1xcbmZzL2V4dDQvaW9jdGwuYy0xNzU0LVxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlc19qb3VybmFsKSB7XFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTc2OC1yZXNpemVmc19vdXQ6XFxuZnMvZXh0NC9pb2N0bC5jOjE3Njk6XFx0XFx0ZXJyMiA9IGV4dDRfcmVzaXplX2VuZChzYiwgdHJ1ZSk7XFxuZnMvZXh0NC9pb2N0bC5jLTE3NzAtXFx0XFx0aWYgKGVyciA9PSAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz0zMz12b2lkIGV4dDRfa3ZmcmVlX2FycmF5X3JjdSh2b2lkICp0b19mcmVlKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy00NS1cXG5mcy9leHQ0L3Jlc2l6ZS5jOjQ2OmludCBleHQ0X3Jlc2l6ZV9iZWdpbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvcmVzaXplLmMtNDcte1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy01OC1cXHRpZiAoc2JpLVxcdTAwM2VzX2VzLVxcdTAwM2VzX3Jlc2VydmVkX2dkdF9ibG9ja3MgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3Jlc2l6ZS5jOjU5OlxcdCAgICAhZXh0NF9oYXNfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpKSB7XFxuZnMvZXh0NC9yZXNpemUuYzo2MDpcXHRcXHRleHQ0X2Vycm9yKHNiLCBcXFwicmVzaXplX2lub2RlIGRpc2FibGVkIGJ1dCByZXNlcnZlZCBHRFQgYmxvY2tzIG5vbi16ZXJvXFxcIik7XFxuZnMvZXh0NC9yZXNpemUuYy02MS1cXHRcXHRyZXR1cm4gLUVGU0NPUlJVUFRFRDtcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtNzAtXFx0ICAgIGxlMzJfdG9fY3B1KHNiaS1cXHUwMDNlc19lcy1cXHUwMDNlc19maXJzdF9kYXRhX2Jsb2NrKSkge1xcbmZzL2V4dDQvcmVzaXplLmM6NzE6XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwid29uJ3QgcmVzaXplIHVzaW5nIGJhY2t1cCBzdXBlcmJsb2NrIGF0ICVsbHVcXFwiLFxcbmZzL2V4dDQvcmVzaXplLmMtNzItXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZylzYmktXFx1MDAzZXNfc2JoLVxcdTAwM2ViX2Jsb2NrbnIpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy05Ny1cXG5mcy9leHQ0L3Jlc2l6ZS5jOjk4OmludCBleHQ0X3Jlc2l6ZV9lbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCB1cGRhdGVfYmFja3VwcylcXG5mcy9leHQ0L3Jlc2l6ZS5jLTk5LXtcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MTIwPXN0YXRpYyBpbnQgdmVyaWZ5X2dyb3VwX2lucHV0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTIxMi0vKlxcbmZzL2V4dDQvcmVzaXplLmM6MjEzOiAqIGV4dDRfbmV3X2ZsZXhfZ3JvdXBfZGF0YSBpcyB1c2VkIGJ5IDY0Yml0LXJlc2l6ZSBpbnRlcmZhY2UgdG8gYWRkIGEgZmxleFxcbmZzL2V4dDQvcmVzaXplLmMtMjE0LSAqIGdyb3VwIGVhY2ggdGltZS5cXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MjE2PXN0cnVjdCBleHQ0X25ld19mbGV4X2dyb3VwX2RhdGEge1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW4gQGdyb3VwcyAqL1xcbmZzL2V4dDQvcmVzaXplLmM6MjIxOlxcdGV4dDRfZ3JvdXBfdCByZXNpemVfYmc7XFx0XFx0XFx0LyogbnVtYmVyIG9mIGFsbG9jYXRlZFxcbmZzL2V4dDQvcmVzaXplLmMtMjIyLVxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19ncm91cF9kYXRhICovXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jPTQyMj1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiY2xlYW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtNDQzLVxcbmZzL2V4dDQvcmVzaXplLmM6NDQ0OnN0YXRpYyBpbnQgZXh0NF9yZXNpemVfZW5zdXJlX2NyZWRpdHNfYmF0Y2goaGFuZGxlX3QgKmhhbmRsZSwgaW50IGNyZWRpdHMpXFxuZnMvZXh0NC9yZXNpemUuYy00NDUte1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz00NTk9c3RhdGljIGludCBzZXRfZmxleGJnX2Jsb2NrX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy00ODctXFxuZnMvZXh0NC9yZXNpemUuYzo0ODg6XFx0XFx0ZXJyID0gZXh0NF9yZXNpemVfZW5zdXJlX2NyZWRpdHNfYmF0Y2goaGFuZGxlLCAxKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTQ4OS1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9NTMwPXN0YXRpYyBpbnQgc2V0dXBfbmV3X2ZsZXhfZ3JvdXBfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTU3Ni1cXHRcXHRcXHRleHQ0X2RlYnVnKFxcXCJ1cGRhdGUgYmFja3VwIGdyb3VwICUjMDRsbHhcXFxcblxcXCIsIGJsb2NrKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjU3NzpcXHRcXHRcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xcbmZzL2V4dDQvcmVzaXplLmMtNTc4LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy02MzUtXFx0XFx0YmxvY2sgPSBncm91cF9kYXRhW2ldLmJsb2NrX2JpdG1hcDtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjYzNjpcXHRcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xcbmZzL2V4dDQvcmVzaXplLmMtNjM3LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy02NjQtXFx0XFx0YmxvY2sgPSBncm91cF9kYXRhW2ldLmlub2RlX2JpdG1hcDtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjY2NTpcXHRcXHRlcnIgPSBleHQ0X3Jlc2l6ZV9lbnN1cmVfY3JlZGl0c19iYXRjaChoYW5kbGUsIDEpO1xcbmZzL2V4dDQvcmVzaXplLmMtNjY2LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz0xMTQwPXN0YXRpYyB2b2lkIHVwZGF0ZV9iYWNrdXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsa19vZmYsIGNoYXIgKmRhdGEsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTExNzUtXFx0XFx0LyogT3V0IG9mIGpvdXJuYWwgc3BhY2UsIGFuZCBjYW4ndCBnZXQgbW9yZSAtIGFib3J0IC0gc28gc2FkICovXFxuZnMvZXh0NC9yZXNpemUuYzoxMTc2OlxcdFxcdGVyciA9IGV4dDRfcmVzaXplX2Vuc3VyZV9jcmVkaXRzX2JhdGNoKGhhbmRsZSwgMSk7XFxuZnMvZXh0NC9yZXNpemUuYy0xMTc3LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz0xMjUyPXN0YXRpYyBpbnQgZXh0NF9hZGRfbmV3X2Rlc2NzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9yZXNpemUuYzoxMjUzOlxcdFxcdFxcdCAgICAgIGV4dDRfZ3JvdXBfdCBncm91cCwgc3RydWN0IGlub2RlICpyZXNpemVfaW5vZGUsXFxuZnMvZXh0NC9yZXNpemUuYy0xMjU0LVxcdFxcdFxcdCAgICAgIGV4dDRfZ3JvdXBfdCBjb3VudClcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MTcwMz1pbnQgZXh0NF9ncm91cF9hZGQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfbmV3X2dyb3VwX2RhdGEgKmlucHV0KVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xNzE3LVxcdGlmIChnZGJfb2ZmID09IDAgXFx1MDAyNlxcdTAwMjYgIWV4dDRfaGFzX2ZlYXR1cmVfc3BhcnNlX3N1cGVyKHNiKSkge1xcbmZzL2V4dDQvcmVzaXplLmM6MTcxODpcXHRcXHRleHQ0X3dhcm5pbmcoc2IsIFxcXCJDYW4ndCByZXNpemUgbm9uLXNwYXJzZSBmaWxlc3lzdGVtIGZ1cnRoZXJcXFwiKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3MTktXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtMTczNC1cXHRpZiAocmVzZXJ2ZWRfZ2RiIHx8IGdkYl9vZmYgPT0gMCkge1xcbmZzL2V4dDQvcmVzaXplLmM6MTczNTpcXHRcXHRpZiAoIWV4dDRfaGFzX2ZlYXR1cmVfcmVzaXplX2lub2RlKHNiKSB8fFxcbmZzL2V4dDQvcmVzaXplLmMtMTczNi1cXHRcXHQgICAgIWxlMTZfdG9fY3B1KGVzLVxcdTAwM2VzX3Jlc2VydmVkX2dkdF9ibG9ja3MpKSB7XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3NDItXFx0XFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE3NDM6XFx0XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwiRXJyb3Igb3BlbmluZyByZXNpemUgaW5vZGVcXFwiKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTE3NDQtXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYz0xODM3PWludCBleHQ0X2dyb3VwX2V4dGVuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NjMtXFx0aWYgKG5fYmxvY2tzX2NvdW50IFxcdTAwM2Mgb19ibG9ja3NfY291bnQpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE4NjQ6XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwiY2FuJ3Qgc2hyaW5rIEZTIC0gcmVzaXplIGFib3J0ZWRcXFwiKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NjUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4NzEtXFx0aWYgKGxhc3QgPT0gMCkge1xcbmZzL2V4dDQvcmVzaXplLmM6MTg3MjpcXHRcXHRleHQ0X3dhcm5pbmcoc2IsIFxcXCJuZWVkIHRvIHVzZSBleHQyb25saW5lIHRvIHJlc2l6ZSBmdXJ0aGVyXFxcIik7XFxuZnMvZXh0NC9yZXNpemUuYy0xODczLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE4OTItXFx0aWYgKElTX0VSUihiaCkpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE4OTM6XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwiY2FuJ3QgcmVhZCBsYXN0IGJsb2NrLCByZXNpemUgYWJvcnRlZFxcXCIpO1xcbmZzL2V4dDQvcmVzaXplLmMtMTg5NC1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmM9MTkxMj1zdGF0aWMgaW50IGV4dDRfY29udmVydF9tZXRhX2JnKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5NTctXFx0bG9ja19idWZmZXIoc2JpLVxcdTAwM2VzX3NiaCk7XFxuZnMvZXh0NC9yZXNpemUuYzoxOTU4OlxcdGV4dDRfY2xlYXJfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpO1xcbmZzL2V4dDQvcmVzaXplLmMtMTk1OS1cXHRleHQ0X3NldF9mZWF0dXJlX21ldGFfYmcoc2IpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xOTg4LWludmFsaWRfcmVzaXplX2lub2RlOlxcbmZzL2V4dDQvcmVzaXplLmM6MTk4OTpcXHRleHQ0X2Vycm9yKHNiLCBcXFwiY29ycnVwdGVkL2luY29uc2lzdGVudCByZXNpemUgaW5vZGVcXFwiKTtcXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTAtXFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTE5OTMtLypcXG5mcy9leHQ0L3Jlc2l6ZS5jOjE5OTQ6ICogZXh0NF9yZXNpemVfZnMoKSByZXNpemVzIGEgZnMgdG8gbmV3IHNpemUgc3BlY2lmaWVkIGJ5IEBuX2Jsb2Nrc19jb3VudFxcbmZzL2V4dDQvcmVzaXplLmMtMTk5NS0gKlxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0xOTk4LSAqL1xcbmZzL2V4dDQvcmVzaXplLmM6MTk5OTppbnQgZXh0NF9yZXNpemVfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IG5fYmxvY2tzX2NvdW50KVxcbmZzL2V4dDQvcmVzaXplLmMtMjAwMC17XFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTIwMjAtXFx0aWYgKElTX0VSUihiaCkpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjIwMjE6XFx0XFx0ZXh0NF93YXJuaW5nKHNiLCBcXFwiY2FuJ3QgcmVhZCBsYXN0IGJsb2NrLCByZXNpemUgYWJvcnRlZFxcXCIpO1xcbmZzL2V4dDQvcmVzaXplLmMtMjAyMi1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQvcmVzaXplLmMtMjA0My1cXHRcXHQvKiBPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkICovXFxuZnMvZXh0NC9yZXNpemUuYzoyMDQ0OlxcdFxcdGV4dDRfd2FybmluZyhzYiwgXFxcImNhbid0IHNocmluayBGUyAtIHJlc2l6ZSBhYm9ydGVkXFxcIik7XFxuZnMvZXh0NC9yZXNpemUuYy0yMDQ1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMDUzLVxcdGlmIChuX2dyb3VwIFxcdTAwM2U9ICgweEZGRkZGRkZGVUwgLyBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpKSkge1xcbmZzL2V4dDQvcmVzaXplLmM6MjA1NDpcXHRcXHRleHQ0X3dhcm5pbmcoc2IsIFxcXCJyZXNpemUgd291bGQgY2F1c2UgaW5vZGVzX2NvdW50IG92ZXJmbG93XFxcIik7XFxuZnMvZXh0NC9yZXNpemUuYy0yMDU1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMDYzLVxcbmZzL2V4dDQvcmVzaXplLmM6MjA2NDpcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9yZXNpemVfaW5vZGUoc2IpKSB7XFxuZnMvZXh0NC9yZXNpemUuYy0yMDY1LVxcdFxcdGlmIChtZXRhX2JnKSB7XFxuZnMvZXh0NC9yZXNpemUuYzoyMDY2OlxcdFxcdFxcdGV4dDRfZXJyb3Ioc2IsIFxcXCJyZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZW5hYmxlZCBcXFwiXFxuZnMvZXh0NC9yZXNpemUuYy0yMDY3LVxcdFxcdFxcdFxcdCAgIFxcXCJzaW11bHRhbmVvdXNseVxcXCIpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMDg1LVxcdFxcdGlmIChJU19FUlIocmVzaXplX2lub2RlKSkge1xcbmZzL2V4dDQvcmVzaXplLmM6MjA4NjpcXHRcXHRcXHRleHQ0X3dhcm5pbmcoc2IsIFxcXCJFcnJvciBvcGVuaW5nIHJlc2l6ZSBpbm9kZVxcXCIpO1xcbmZzL2V4dDQvcmVzaXplLmMtMjA4Ny1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXNpemVfaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMDkxLVxcdGlmICgoIXJlc2l6ZV9pbm9kZSBcXHUwMDI2XFx1MDAyNiAhbWV0YV9iZyBcXHUwMDI2XFx1MDAyNiBuX2Rlc2NfYmxvY2tzIFxcdTAwM2Ugb19kZXNjX2Jsb2NrcykgfHwgbl9ibG9ja3NfY291bnQgPT0gb19ibG9ja3NfY291bnQpIHtcXG5mcy9leHQ0L3Jlc2l6ZS5jOjIwOTI6XFx0XFx0ZXJyID0gZXh0NF9jb252ZXJ0X21ldGFfYmcoc2IsIHJlc2l6ZV9pbm9kZSk7XFxuZnMvZXh0NC9yZXNpemUuYy0yMDkzLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3Jlc2l6ZS5jLTIxNjYtXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9yZXNpemUuYzoyMTY3OlxcdFxcdGVyciA9IGV4dDRfZmxleF9ncm91cF9hZGQoc2IsIHJlc2l6ZV9pbm9kZSwgZmxleF9nZCk7XFxuZnMvZXh0NC9yZXNpemUuYy0yMTY4LVxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbi0tXFxuZnMvZXh0NC9yZXNpemUuYy0yMTkxLVxcdFxcdFxcdCAgICAgXFxcImZpbGUgc3lzdGVtIHJlc2l6ZVxcXCIsIGVycik7XFxuZnMvZXh0NC9yZXNpemUuYzoyMTkyOlxcdGV4dDRfbXNnKHNiLCBLRVJOX0lORk8sIFxcXCJyZXNpemVkIGZpbGVzeXN0ZW0gdG8gJWxsdVxcXCIsXFxuZnMvZXh0NC9yZXNpemUuYy0yMTkzLVxcdFxcdCBleHQ0X2Jsb2Nrc19jb3VudChlcykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo0NS4xNDI0ODE5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzkyNDk2NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIEZvY3VzIGZvciBJbXByb3ZlZCBUZXN0aW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd2UncmUgZGVmaW5pbmcgdGhlIGZvY3VzIGZvciBvdXIga2VybmVsIHN5bWJvbCBhbmFseXNpcy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gZ2V0IHRoZSBtb3N0IGluc2lnaHRmdWwgdGVzdCBkaXN0cmlidXRpb25zLiBMZXQncyBzdGFydCB3aXRoIGBmcy9maWxlLmNgLiBTcGVjaWZpY2FsbHksIGBmZF9pbnN0YWxsYCDigJMgaXQncyBhICpzZXJpb3VzbHkqIGhvdCBmdW5jdGlvbi4gQ2FsbGVkIGV2ZXJ5IHRpbWUgd2UgZG8gYSBmaWxlIGRlc2NyaXB0b3IgYWN0aW9uLiBUaGlzIHNjcmVhbXMgXCJnZW5lcmljIGhvdCBwYXRoXCIgYW5kIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB3ZSB3YW50IHRvIGF2b2lkIHB1dHRpbmcgRm9jdXNTeW1ib2xzIG9uLCBhcyBpdCdsbCBza2V3IHRoZSBkaXN0cmlidXRpb25zIGJhZGx5LlxuXG5SaWdodCwgc28gdG8gcmVtaW5kIG15c2VsZiwgSSdtIGdvaW5nIHRvIHJlLWNoZWNrIHRoZSBndWlkZWxpbmVzOiBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBXZSB3YW50IGdvb2QgZGF0YS5cIiBPa2F5LCBwb2ludCB0YWtlbi4gUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlwiIE1ha2VzIHNlbnNlLiBXZSBuZWVkIGRpc3RpbmN0IGFkZHJlc3NlcyB0byBhbmFseXplIHRoZSBiZWhhdmlvci5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGNoZWNrIGBmcy9waWRmcy5jYC4gTGV0J3Mgc3BlY2lmaWNhbGx5IGxvb2sgYXQgYHBpZGZkX2luZm9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2FsbGluZyBgcGlkZmRfaW5mb2Agb3IgcGlkZnMgaW9jdGwsIHNvIEkga25vdyB3aGVyZSB0aGUgc3ltYm9sIGxhbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo0Ny45MzQ5ODI2MzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTgyMDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaWRmZF9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3BpZGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcGlkZnMuYz0zMzk9c3RhdGljIF9fdTMyIHBpZGZzX2NvcmVkdW1wX21hc2soZW51bSB0YXNrX2R1bXBhYmxlIGR1bXBhYmxlKVxcbi0tXFxuZnMvcGlkZnMuYy0zNjQtXFxuZnMvcGlkZnMuYzozNjU6c3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvcGlkZnMuYy0zNjYte1xcbmZzL3BpZGZzLmM6MzY3OlxcdHN0cnVjdCBwaWRmZF9pbmZvIF9fdXNlciAqdWluZm8gPSAoc3RydWN0IHBpZGZkX2luZm8gX191c2VyICopYXJnO1xcbmZzL3BpZGZzLmMtMzY4LVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayBfX2ZyZWUocHV0X3Rhc2spID0gTlVMTDtcXG4tLVxcbmZzL3BpZGZzLmMtMzcwLVxcdHNpemVfdCB1c2l6ZSA9IF9JT0NfU0laRShjbWQpO1xcbmZzL3BpZGZzLmM6MzcxOlxcdHN0cnVjdCBwaWRmZF9pbmZvIGtpbmZvID0ge307XFxuZnMvcGlkZnMuYy0zNzItXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zO1xcbi0tXFxuZnMvcGlkZnMuYy0zNzYtXFxuZnMvcGlkZnMuYzozNzc6XFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcGlkZmRfaW5mbykgIT0gUElERkRfSU5GT19TSVpFX1ZFUjMpO1xcbmZzL3BpZGZzLmMtMzc4LVxcbi0tXFxuZnMvcGlkZnMuYz01Mjg9c3RhdGljIGxvbmcgcGlkZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvcGlkZnMuYy01NDctXFx0aWYgKF9JT0NfTlIoY21kKSA9PSBfSU9DX05SKFBJREZEX0dFVF9JTkZPKSlcXG5mcy9waWRmcy5jOjU0ODpcXHRcXHRyZXR1cm4gcGlkZmRfaW5mbyhmaWxlLCBjbWQsIGFyZyk7XFxuZnMvcGlkZnMuYy01NDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjQ4LjA0NjgwODg2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM2Nzg4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdXNlciBuYW1lc3BhY2UgbWFwcGluZyBwcm9jZXNzLCBzbyB0aGUgZmlyc3QgcGxhY2UgSSdtIGdvaW5nIHRvIGxvb2sgaXMgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByb2Nlc3MgZmlsZXMgZm9yIFVJRCwgR0lELCBhbmQgcHJvamVjdCBJRCBtYXBwaW5ncyBhcmUgd3JpdHRlbi4gVGhhdCBtZWFucyBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBtYXBfd3JpdGVgIGZ1bmN0aW9uLCBzaW5jZSB0aGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgcHJvYyBmaWxlIHdyaXRlIG9wZXJhdGlvbnMgcmVzaWRlcy4gVGhlbiBJJ2xsIGNoZWNrIGBtYXBfaWRfcmFuZ2VfZG93bmAgYW5kIGBtYXBfaWRfcmFuZ2VfdXBgLCBhcyB0aG9zZSBhcmUgcHJvYmFibHkgaW52b2x2ZWQgaW4gbWFuaXB1bGF0aW5nIHRoZSBJRCBtYXBwaW5ncyB0aGVtc2VsdmVzLiBGcm9tIHRoZXJlLCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcsIEkgd2lsbCBjaGVjayB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGB1c2VyX25hbWVzcGFjZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo1MC4wODM2MDEzMTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTMwMzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXBfaWRfcmFuZ2VfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC91c2VyX25hbWVzcGFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTI1MT1zdGF0aWMgaW50IGNtcF9tYXBfaWQoY29uc3Qgdm9pZCAqaywgY29uc3Qgdm9pZCAqZSlcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI3Ny0vKlxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjI3ODogKiBtYXBfaWRfcmFuZ2VfZG93bl9tYXggLSBGaW5kIGlkbWFwIHZpYSBiaW5hcnkgc2VhcmNoIGluIG9yZGVyZWQgaWRtYXAgYXJyYXkuXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMjc5LSAqIENhbiBvbmx5IGJlIGNhbGxlZCBpZiBudW1iZXIgb2YgbWFwcGluZ3MgZXhjZWVkcyBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTLlxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9MjgxPXN0YXRpYyBzdHJ1Y3QgdWlkX2dpZF9leHRlbnQgKlxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjI4MjptYXBfaWRfcmFuZ2VfZG93bl9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTI4My17XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0yOTQtLypcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoyOTU6ICogbWFwX2lkX3JhbmdlX2Rvd25fYmFzZSAtIEZpbmQgaWRtYXAgdmlhIGJpbmFyeSBzZWFyY2ggaW4gc3RhdGljIGV4dGVudCBhcnJheS5cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0yOTYtICogQ2FuIG9ubHkgYmUgY2FsbGVkIGlmIG51bWJlciBvZiBtYXBwaW5ncyBpcyBlcXVhbCBvciBsZXNzIHRoYW5cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTI5OT1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozMDA6bWFwX2lkX3JhbmdlX2Rvd25fYmFzZSh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzAxLXtcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMxNy1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozMTg6c3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzE5LXtcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMyNC1cXHRpZiAoZXh0ZW50cyBcXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjMyNTpcXHRcXHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zMjYtXFx0ZWxzZVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjMyNzpcXHRcXHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9tYXgoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTMyOC1cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTMzOD11MzIgbWFwX2lkX2Rvd24oc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZClcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zMzkte1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjM0MDpcXHRyZXR1cm4gbWFwX2lkX3JhbmdlX2Rvd24obWFwLCBpZCwgMSk7XFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMzQxLX1cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTM0OD1zdGF0aWMgc3RydWN0IHVpZF9naWRfZXh0ZW50ICpcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozNDk6bWFwX2lkX3JhbmdlX3VwX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM1MC17XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz0zNzE9c3RhdGljIHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MzcyOm1hcF9pZF9yYW5nZV91cF9tYXgodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM3My17XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zODMtXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6Mzg0OnUzMiBtYXBfaWRfcmFuZ2VfdXAoc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvdW50KVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM4NS17XFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0zOTAtXFx0aWYgKGV4dGVudHMgXFx1MDAzYz0gVUlEX0dJRF9NQVBfTUFYX0JBU0VfRVhURU5UUylcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzozOTE6XFx0XFx0ZXh0ZW50ID0gbWFwX2lkX3JhbmdlX3VwX2Jhc2UoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM5Mi1cXHRlbHNlXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MzkzOlxcdFxcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9tYXgoZXh0ZW50cywgbWFwLCBpZCwgY291bnQpO1xcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTM5NC1cXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTQwND11MzIgbWFwX2lkX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQpXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtNDA1LXtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzo0MDY6XFx0cmV0dXJuIG1hcF9pZF9yYW5nZV91cChtYXAsIGlkLCAxKTtcXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy00MDctfVxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM9OTMyPXN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTEwNzMtXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MTA3NDpcXHRcXHRsb3dlcl9maXJzdCA9IG1hcF9pZF9yYW5nZV9kb3duKHBhcmVudF9tYXAsXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTA3NS1cXHRcXHRcXHRcXHRcXHRcXHRlLVxcdTAwM2Vsb3dlcl9maXJzdCxcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTExMDItXFx0fVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjExMDM6XFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gbWFwX2lkX3JhbmdlX3t1cCxkb3dufSgpIGFuZCBtX3N0YXJ0KCkuICovXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTEwNC1cXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bWFwLVxcdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyMzo1MC4xODQ5MDk5NzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjczMjMxOTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVsZXZhbnQgS2VybmVsIEZpbGVzIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGZzL2Fpby5jYCBlbnRyeXBvaW50cyDigJMgc3BlY2lmaWNhbGx5IGBzeXNfaW9fZ2V0ZXZlbnRzYCwgYHN5c19pb19wZ2V0ZXZlbnRzYCwgYW5kIGBpb19zdWJtaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAsIEkgc2hvdWxkIHZlcmlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoYXQncyBhIGNyaXRpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB3aGF0IGlzIGVuYWJsZWQgYW5kIGRpc2FibGVkLlxuXG5IZXJlJ3MgbXkgY2hlY2tsaXN0OlxuXG4xLiAgYGZzL2Fpby5jYCDigJMgVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBBSU9gLiBNYWtlcyBzZW5zZS5cbjIuICBgZnMvZXh0NC9gIOKAkyBgRVhUNF9GU2AsIG9mIGNvdXJzZS4gU3RhbmRhcmQuXG4zLiAgYGZzL3BpZGZzLmNgIOKAkyBUaGlzIG9uZSByZXF1aXJlcyBhIGNoZWNrLiBJcyB0aGlzIGJ1aWx0LWluIG9yIGNvbmRpdGlvbmFsPyBJJ2xsIGxvb2sgYXQgYGZzL01ha2VmaWxlYCB0byBjb25maXJtLlxuNC4gIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2Ag4oCTIFRoaXMgdXNlcyB0aGUgYFVTRVJfTlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuNS4gIGBmcy9tbnRfaWRtYXBwaW5nLmNgIOKAkyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9NYWtlZmlsZWAgYWdhaW4gZm9yIHRoaXMgb25lLlxuNi4gIGBsaWIvdnNwcmludGYuY2Ag4oCTIFRoaXMgaXMgY29yZSwgYWx3YXlzIGJ1aWx0LWluLCBubyBjb25maWd1cmF0aW9uLlxuXG5Ob3csIEknbGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBmcy9NYWtlZmlsZWAgYW5kIGBmcy9LY29uZmlnYCwgYW5kLCBmb3IgZ29vZCBtZWFzdXJlLCBJJ2xsIGluY2x1ZGUgYGluaXQvS2NvbmZpZ2AgaW4gbXkgcmV2aWV3LiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgY29uZGl0aW9uYWwgYnVpbGQgYXNwZWN0cy4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgcHJvcGVyIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjU2LjkxNzIzMjk3MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NTUyMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihhaW98cGlkZnN8bW50X2lkbWFwcGluZ3xleHQ0KVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVxcdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcXFxcbi0tXFxuZnMvTWFrZWZpbGUtMTctXFx0XFx0ZnNfZGlyZW50Lm8gZnNfY29udGV4dC5vIGZzX3BhcnNlci5vIGZzb3Blbi5vIGluaXQubyBcXFxcXFxuZnMvTWFrZWZpbGU6MTg6XFx0XFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcXFxcbmZzL01ha2VmaWxlLTE5LVxcdFxcdGZpbGVfYXR0ci5vIGZzZXJyb3IubyBudWxsZnMubyBmYWlsZnMub1xcbi0tXFxuZnMvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX0VWRU5URkQpXFx0XFx0Kz0gZXZlbnRmZC5vXFxuZnMvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX0FJTykgICAgICAgICAgICAgICArPSBhaW8ub1xcbmZzL01ha2VmaWxlLTMxLW9iai0kKENPTkZJR19GU19EQVgpXFx0XFx0Kz0gZGF4Lm9cXG4tLVxcbmZzL01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19ORVRGU19TVVBQT1JUKVxcdCs9IG5ldGZzL1xcbmZzL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19FWFQ0X0ZTKVxcdFxcdCs9IGV4dDQvXFxuZnMvTWFrZWZpbGU6NjY6IyBXZSBwbGFjZSBleHQ0IGJlZm9yZSBleHQyIHNvIHRoYXQgY2xlYW4gZXh0MyByb290IGZzJ3MgZG8gTk9UIG1vdW50IHVzaW5nIHRoZVxcbmZzL01ha2VmaWxlLTY3LSMgZXh0MiBkcml2ZXIsIHdoaWNoIGRvZXNuJ3Qga25vdyBhYm91dCBqb3VybmFsbGluZyEgIEV4cGxpY2l0bHkgcmVxdWVzdCBleHQyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjU3LjA1MTc5MTk0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM5NTk4MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVXNlciBOYW1lc3BhY2UgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlciBuYW1lc3BhY2VzIGFyZSBoYW5kbGVkIGluIHRoaXMgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgaXMgaW50ZWdyYXRlZC4gU28sIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgd291bGQgYmUgZWl0aGVyIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AgaXRzZWxmLCB0byBzZWUgdGhlIGRpcmVjdCBjb2RlIGludm9sdmVkLCBvciB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdsbCBsaWtlbHkgZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhlcmUuIFRoZSBtb3N0IHByb2JhYmxlIGZpbGVzIHdvdWxkIGJlIHdpdGhpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2AgKGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zKSBvciBga2VybmVsL01ha2VmaWxlYCAoZm9yIGhvdyB0aGUgY29tcGlsYXRpb24gdW5pdHMgYXJlIGJyb3VnaHQgdG9nZXRoZXIpLiBMZXQncyBzdGFydCB3aXRoIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI3OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjIzOjU5LjA5MTM5NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQwNTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX25hbWVzcGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19VVFNfTlMpICs9IHV0c25hbWUub1xcbmtlcm5lbC9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfVVNFUl9OUykgKz0gdXNlcl9uYW1lc3BhY2Uub1xcbmtlcm5lbC9NYWtlZmlsZS05My1vYmotJChDT05GSUdfUElEX05TKSArPSBwaWRfbmFtZXNwYWNlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjM6NTkuMjgyODEyMzkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NDE4MzUwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIEFJTyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBBc3luY2hyb25vdXMgSS9PIChgQUlPYCkuIE15IGluc3RpbmN0IHNheXMgdGhlIGtleSB0byB0aGlzIGxpa2VseSBsaWVzIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaW5pdC9LY29uZmlnYCBhbmQgYGZzL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gaXQgY29tZXMgdG8gZmVhdHVyZSBlbmFibGVtZW50IGFuZCBtb2R1bGUgY29tcGlsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIHRvIGVpdGhlciBmaW5kIGl0IGRpcmVjdGx5IG9yIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgdGhhdCBwb2ludCBtZSB0byBpdHMgbG9jYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5lYXJ0aC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGRpcmVjdCBkZWZpbml0aW9uIG9mIHRoZSBgQUlPYCBvcHRpb24gb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRyb2xzIGl0cyBpbmNsdXNpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTYwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MDIuODI0NjUwNTkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDE3NDQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUlPXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTQxPWNvbmZpZyBTSE1FTVxcbi0tXFxuaW5pdC9LY29uZmlnLTE5NTEtXFxuaW5pdC9LY29uZmlnOjE5NTI6Y29uZmlnIEFJT1xcbmluaXQvS2NvbmZpZy0xOTUzLVxcdGJvb2wgXFxcIkVuYWJsZSBBSU8gc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjAyLjkwODgzNDkyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzIxNTI3MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBnaXZlbiB0ZXh0OlxuXG4qKkNoZWNraW5nIHRoZSBleHQ0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBleHQ0YCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgd2hpY2ggbWVhbnMgSSBzaG91bGQgc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQncyBkaWcgaW50byB0aGF0IGBmcy9leHQ0L0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfRVhUNF9GU2AuIEkga25vdyB3aGVyZSB0aGF0J3MgbG9jYXRlZCwgc28gbGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBJdCdzIHRoZSBzdGFuZGFyZCBmaXJzdCBzdGVwIHdoZW4gZGVidWdnaW5nIG9yIGN1c3RvbWl6aW5nIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnQsIHNvIGl0J3MgYSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjA0LjYzMDM2NTI4NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcwNDI3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjA0LjcyNzQxMzM0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTUyOTA0MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBuYW1lc3BhY2Ugc3R1ZmYgaXMgYmVpbmcgY29uZmlndXJlZC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdCwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbml0L0tjb25maWdgIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBgVVNFUl9OU2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCB2YWx1ZSBvciBwb3NzaWJsZSBjaG9pY2VzIG1pZ2h0IGJlLiBIb3BlZnVsbHksIHRoZSBjb21tZW50cyBhcm91bmQgaXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGRlc2lnbiBkZWNpc2lvbnMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaWYgaXQncyBkaXNhYmxlZC4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIGBVU0VSX05TYCBhbmQgaXRzIGFzc29jaWF0ZWQgb3B0aW9ucyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgZGV0ZXJtaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2YgdXNlciBuYW1lc3BhY2VzIHdpdGhpbiB0aGlzIHN5c3RlbSwgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGV5J3JlIGJlaW5nIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTI3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MDYuNjgwMzIxNjg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE5MDIxNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTRVJfTlNcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE0Mzg9Y29uZmlnIElQQ19OU1xcbi0tXFxuaW5pdC9LY29uZmlnLTE0NDUtXFxuaW5pdC9LY29uZmlnOjE0NDY6Y29uZmlnIFVTRVJfTlNcXG5pbml0L0tjb25maWctMTQ0Ny1cXHRib29sIFxcXCJVc2VyIG5hbWVzcGFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MDYuODUyMjI5OTkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTUzNTIxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqSW5zcGVjdGluZyB0aGUgYHBpZGZzLmNgIENvZGUqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwb2tlIGFyb3VuZCBpbiBgcGlkZnMuY2AuIEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gc2VlIGlmIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF0IHBsYXkuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBTbywgbGV0J3Mgb3BlbiB1cCBgZnMvcGlkZnMuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIGdldCBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQzMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjA4LjgwNzU4NDk3OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2NDY5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9waWRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3BpZGZzLmM9MjA5PXZvaWQgcGlkZnNfZnJlZV9waWQoc3RydWN0IHBpZCAqcGlkKVxcbi0tXFxuZnMvcGlkZnMuYy0yMzUtXFxuZnMvcGlkZnMuYzoyMzY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuZnMvcGlkZnMuYy0yMzctLyoqXFxuLS1cXG5mcy9waWRmcy5jPTI3Mj1zdGF0aWMgdm9pZCBwaWRmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKVxcbi0tXFxuZnMvcGlkZnMuYy0yODQtXFxuZnMvcGlkZnMuYzoyODU6I2lmZGVmIENPTkZJR19QSURfTlNcXG5mcy9waWRmcy5jLTI4Ni1cXHRzZXFfcHV0X2RlY2ltYWxfbGwobSwgXFxcIlxcXFxuTlNwaWQ6XFxcXHRcXFwiLCBucik7XFxuLS1cXG5mcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL3BpZGZzLmMtMzk3LVxcdFxcdFxcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19FWElUO1xcbmZzL3BpZGZzLmM6Mzk4OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xcbmZzL3BpZGZzLmMtMzk5LVxcdFxcdFxcdGtpbmZvLmNncm91cGlkID0gYXR0ci1cXHUwMDNlY2dyb3VwaWQ7XFxuLS1cXG5mcy9waWRmcy5jLTQ1MC1cXG5mcy9waWRmcy5jOjQ1MTojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5mcy9waWRmcy5jLTQ1Mi1cXHRpZiAoIWtpbmZvLmNncm91cGlkKSB7XFxuLS1cXG5mcy9waWRmcy5jPTUyOD1zdGF0aWMgbG9uZyBwaWRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9waWRmcy5jLTU4Ny1cXHRjYXNlIFBJREZEX0dFVF9DR1JPVVBfTkFNRVNQQUNFOlxcbmZzL3BpZGZzLmM6NTg4OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xcbmZzL3BpZGZzLmMtNTg5LVxcdFxcdGlmICghbnNfcmVmX2dldChuc3AtXFx1MDAzZWNncm91cF9ucykpXFxuLS1cXG5mcy9waWRmcy5jLTU5NC1cXHRjYXNlIFBJREZEX0dFVF9JUENfTkFNRVNQQUNFOlxcbmZzL3BpZGZzLmM6NTk1OiNpZmRlZiBDT05GSUdfSVBDX05TXFxuZnMvcGlkZnMuYy01OTYtXFx0XFx0aWYgKCFuc19yZWZfZ2V0KG5zcC1cXHUwMDNlaXBjX25zKSlcXG4tLVxcbmZzL3BpZGZzLmMtNjA2LVxcdGNhc2UgUElERkRfR0VUX05FVF9OQU1FU1BBQ0U6XFxuZnMvcGlkZnMuYzo2MDc6I2lmZGVmIENPTkZJR19ORVRfTlNcXG5mcy9waWRmcy5jLTYwOC1cXHRcXHRpZiAoIW5zX3JlZl9nZXQobnNwLVxcdTAwM2VuZXRfbnMpKVxcbi0tXFxuZnMvcGlkZnMuYy02MTMtXFx0Y2FzZSBQSURGRF9HRVRfUElEX0ZPUl9DSElMRFJFTl9OQU1FU1BBQ0U6XFxuZnMvcGlkZnMuYzo2MTQ6I2lmZGVmIENPTkZJR19QSURfTlNcXG5mcy9waWRmcy5jLTYxNS1cXHRcXHRpZiAoIW5zX3JlZl9nZXQobnNwLVxcdTAwM2VwaWRfbnNfZm9yX2NoaWxkcmVuKSlcXG4tLVxcbmZzL3BpZGZzLmMtNjIwLVxcdGNhc2UgUElERkRfR0VUX1RJTUVfTkFNRVNQQUNFOlxcbmZzL3BpZGZzLmM6NjIxOiNpZmRlZiBDT05GSUdfVElNRV9OU1xcbmZzL3BpZGZzLmMtNjIyLVxcdFxcdGlmICghbnNfcmVmX2dldChuc3AtXFx1MDAzZXRpbWVfbnMpKVxcbi0tXFxuZnMvcGlkZnMuYy02MjctXFx0Y2FzZSBQSURGRF9HRVRfVElNRV9GT1JfQ0hJTERSRU5fTkFNRVNQQUNFOlxcbmZzL3BpZGZzLmM6NjI4OiNpZmRlZiBDT05GSUdfVElNRV9OU1xcbmZzL3BpZGZzLmMtNjI5LVxcdFxcdGlmICghbnNfcmVmX2dldChuc3AtXFx1MDAzZXRpbWVfbnNfZm9yX2NoaWxkcmVuKSlcXG4tLVxcbmZzL3BpZGZzLmMtNjM0LVxcdGNhc2UgUElERkRfR0VUX1VUU19OQU1FU1BBQ0U6XFxuZnMvcGlkZnMuYzo2MzU6I2lmZGVmIENPTkZJR19VVFNfTlNcXG5mcy9waWRmcy5jLTYzNi1cXHRcXHRpZiAoIW5zX3JlZl9nZXQobnNwLVxcdTAwM2V1dHNfbnMpKVxcbi0tXFxuZnMvcGlkZnMuYy02NDItXFx0Y2FzZSBQSURGRF9HRVRfVVNFUl9OQU1FU1BBQ0U6XFxuZnMvcGlkZnMuYzo2NDM6I2lmZGVmIENPTkZJR19VU0VSX05TXFxuZnMvcGlkZnMuYy02NDQtXFx0XFx0c2NvcGVkX2d1YXJkKHJjdSkge1xcbi0tXFxuZnMvcGlkZnMuYy02NTMtXFx0Y2FzZSBQSURGRF9HRVRfUElEX05BTUVTUEFDRTpcXG5mcy9waWRmcy5jOjY1NDojaWZkZWYgQ09ORklHX1BJRF9OU1xcbmZzL3BpZGZzLmMtNjU1LVxcdFxcdHNjb3BlZF9ndWFyZChyY3UpIHtcXG4tLVxcbmZzL3BpZGZzLmMtNjc5LVxcbmZzL3BpZGZzLmM6NjgwOiNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZnMvcGlkZnMuYy02ODEtc3RhdGljIGxvbmcgcGlkZmRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcGlkZnMuYz03MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGlkZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvcGlkZnMuYy03MTMtXFx0LnBvbGxcXHRcXHQ9IHBpZGZkX3BvbGwsXFxuZnMvcGlkZnMuYzo3MTQ6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuZnMvcGlkZnMuYy03MTUtXFx0LnNob3dfZmRpbmZvXFx0PSBwaWRmZF9zaG93X2ZkaW5mbyxcXG4tLVxcbmZzL3BpZGZzLmMtNzE3LVxcdC51bmxvY2tlZF9pb2N0bFxcdD0gcGlkZmRfaW9jdGwsXFxuZnMvcGlkZnMuYzo3MTg6I2lmZGVmIENPTkZJR19DT01QQVRcXG5mcy9waWRmcy5jLTcxOS1cXHQuY29tcGF0X2lvY3RsXFx0PSBwaWRmZF9jb21wYXRfaW9jdGwsXFxuLS1cXG5mcy9waWRmcy5jPTc0Nz12b2lkIHBpZGZzX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5mcy9waWRmcy5jLTc1MC1cXHRzdHJ1Y3QgcGlkZnNfYXR0ciAqYXR0cjtcXG5mcy9waWRmcy5jOjc1MTojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5mcy9waWRmcy5jLTc1Mi1cXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xcbi0tXFxuZnMvcGlkZnMuYy03NzktXFxuZnMvcGlkZnMuYzo3ODA6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxuZnMvcGlkZnMuYy03ODEtXFx0cmN1X3JlYWRfbG9jaygpO1xcbi0tXFxuZnMvcGlkZnMuYy03OTItXFxuZnMvcGlkZnMuYzo3OTM6I2lmZGVmIENPTkZJR19DT1JFRFVNUFxcbmZzL3BpZGZzLmMtNzk0LXZvaWQgcGlkZnNfY29yZWR1bXAoY29uc3Qgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MDguOTA3MjM3NTY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyMDExODIwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gaWRlbnRpZnlpbmcgc29tZSBzdHJvbmcgZm9jdXMgc3ltYm9scy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lcyBhcmUgcHJpbWUgY2FuZGlkYXRlcy4gRmlyc3QgaW5zdGluY3Q6IEkgc2hvdWxkIHNjcnV0aW5pemUgYEZvY3VzU3ltYm9sc2AuIEFscmlnaHQsIHdoYXQncyBhIGdvb2QgbGlzdCBvZiBzeW1ib2xzIHRvIGxvb2sgYXQ/IEhtbW0uLi4gbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbWF5YmUgc29tZXRoaW5nIGxpa2UgYF9fZG9fc3lzX2lvX2dldGV2ZW50c2AsIGBfX2RvX3N5c19pb19wZ2V0ZXZlbnRzYCwgb3IgbWF5YmUgYGFpb19yZWFkX2V2ZW50c2AgYW5kIGBhaW9fY29tcGxldGVgLiBCdXQgaG9sZCBvbiwgSSByZWNhbGwgdGhhdCB3ZSBzaG91bGQgKnByZWZlciogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgdGhvc2UgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIENvbXBpbGVyIGlubGluaW5nIG11ZGRpZXMgdGhlIHdhdGVycyB3aXRoIHRob3NlIGludGVybmFsIG9uZXMsIG5vIGRpc3RpbmN0IGFkZHJlc3Nlcy5cblxuUmlnaHQsIFNZU0NBTExfREVGSU5FIGNyZWF0ZXMgdGhpbmdzIGxpa2UgYF9fZG9fc3lzX2lvX2dldGV2ZW50c2AgYW5kIGBfX3g2NF9zeXNfaW9fZ2V0ZXZlbnRzYCBhbmQgc3VjaC4gT2theSwgSSdtIGdldHRpbmcgYSBoYW5kbGUgb24gaXQuIE9yLCB0aGlua2luZyBvdXRzaWRlIHRoYXQgYm94LCBtYXliZSBzdHVmZiBsaWtlIGBleHQ0X3Jlc2l6ZV9mc2AsIG9yIHBlcmhhcHMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGxpa2UgYGV4dDRfZ3JvdXBfYWRkYCwgYGV4dDRfZ3JvdXBfZXh0ZW5kYCwgc29tZSBvZiB0aGUgYG1hcF9pZF9yYW5nZV9gIHN0dWZmIGluIGB1c2VyX25hbWVzcGFjZS5jYCBzdWNoIGFzIGBtYXBfaWRfcmFuZ2VfdXBgLCBgbWFwX2lkX3JhbmdlX2Rvd25gLCBvciBwZXJoYXBzIGV2ZW4gc29tZXRoaW5nIGluIHRoZSBtb3VudCBJRCBtYXBwaW5nLCBzdWNoIGFzIGBjb3B5X21udF9pZG1hcGAuXG5cbk9rYXksIG5leHQgc3RlcDogbGV0IG1lIHJlLWV2YWx1YXRlIGJhc2VkIG9uIHRoZSBub24tc3RhdGljIGNyaXRlcmlvbi4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGZzL2V4dDQvcmVzaXplLmNgOiBJIHNlZSBgZXh0NF9yZXNpemVfZnNgLCBgZXh0NF9ncm91cF9hZGRgLCBhbmQgYGV4dDRfZ3JvdXBfZXh0ZW5kYC4gSW4gYGZzL2V4dDQvYmFsbG9jLmNgLCBJIGhhdmUgYGV4dDRfZ2V0X2dyb3VwX2luZm9gLiBUaGUgZWFybGllciBgZnMvYWlvLmNgIGhhcyBgX19kb19zeXNfaW9fZ2V0ZXZlbnRzYCBhbmQgYF9fZG9fc3lzX2lvX3BnZXRldmVudHNgLiBGcm9tIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AsIEkgc2VlIGBtYXBfaWRfcmFuZ2VfdXBgIGFuZCBgbWFwX2lkX3JhbmdlX2Rvd25gLiBGcm9tIGBmcy9waWRmcy5jYCBJIHNlZSBgcGlkZmRfc2hvd19mZGluZm9gIGlzIHByb21pc2luZywgb3IgbWF5YmUgZnVuY3Rpb25zIGxpa2UgYHBpZGZzX2V4aXRgIG9yIGBwaWRmc19jb3JlZHVtcGAuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBmcy9waWRmcy5jYCBmaWxlIGFuZCBzZWUgd2hhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3ZSBoYXZlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA0NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDoxNi4xMDg0MjI5MThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUwMzkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfGxvbmd8c3RydWN0KSBbYS16MC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcGlkZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9waWRmcy5jPTQxPXN0YXRpYyBzdHJ1Y3Qgc2ltcGxlX3hhdHRyX2NhY2hlIHBpZGZzX3hhX2NhY2hlO1xcbmZzL3BpZGZzLmMtNDItXFxuZnMvcGlkZnMuYzo0Mzp2b2lkIHBpZGZzX2dldF9yb290KHN0cnVjdCBwYXRoICpwYXRoKVxcbmZzL3BpZGZzLmMtNDQte1xcbi0tXFxuZnMvcGlkZnMuYz0xNTM9c3RhdGljIHU2NCBwaWRmc19hbGxvY19pbm8odm9pZClcXG4tLVxcbmZzL3BpZGZzLmMtMTY2LVxcbmZzL3BpZGZzLmM6MTY3OnZvaWQgcGlkZnNfcHJlcGFyZV9waWQoc3RydWN0IHBpZCAqcGlkKVxcbmZzL3BpZGZzLmMtMTY4LXtcXG4tLVxcbmZzL3BpZGZzLmMtMTczLVxcbmZzL3BpZGZzLmM6MTc0OmludCBwaWRmc19hZGRfcGlkKHN0cnVjdCBwaWQgKnBpZClcXG5mcy9waWRmcy5jLTE3NS17XFxuLS1cXG5mcy9waWRmcy5jLTE4NS1cXG5mcy9waWRmcy5jOjE4Njp2b2lkIHBpZGZzX3JlbW92ZV9waWQoc3RydWN0IHBpZCAqcGlkKVxcbmZzL3BpZGZzLmMtMTg3LXtcXG4tLVxcbmZzL3BpZGZzLmM9MjA3PXN0YXRpYyBERUNMQVJFX1dPUksocGlkZnNfZnJlZV93b3JrLCBwaWRmc19mcmVlX2F0dHJfd29yayk7XFxuZnMvcGlkZnMuYy0yMDgtXFxuZnMvcGlkZnMuYzoyMDk6dm9pZCBwaWRmc19mcmVlX3BpZChzdHJ1Y3QgcGlkICpwaWQpXFxuZnMvcGlkZnMuYy0yMTAte1xcbi0tXFxuZnMvcGlkZnMuYz03MjM9c3RydWN0IHBpZCAqcGlkZmRfcGlkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcGlkZnMuYy03NDYtICovXFxuZnMvcGlkZnMuYzo3NDc6dm9pZCBwaWRmc19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmZzL3BpZGZzLmMtNzQ4LXtcXG4tLVxcbmZzL3BpZGZzLmMtNzkzLSNpZmRlZiBDT05GSUdfQ09SRURVTVBcXG5mcy9waWRmcy5jOjc5NDp2b2lkIHBpZGZzX2NvcmVkdW1wKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuZnMvcGlkZnMuYy03OTUte1xcbi0tXFxuZnMvcGlkZnMuYz0xMDIwPXN0YXRpYyB2b2lkIHBpZGZzX3B1dF9kYXRhKHZvaWQgKmRhdGEpXFxuLS1cXG5mcy9waWRmcy5jLTEwMzUtICovXFxuZnMvcGlkZnMuYzoxMDM2OmludCBwaWRmc19yZWdpc3Rlcl9waWRfZ2ZwKHN0cnVjdCBwaWQgKnBpZCwgZ2ZwX3QgZ2ZwKVxcbmZzL3BpZGZzLmMtMTAzNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjE2LjU0ODkzMjUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NDMxMzc1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgc29tZSBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIEknbSBzdGFydGluZyB3aXRoIGBleHQ0X2dldF9ncm91cF9pbmZvYCBpbiBgZnMvZXh0NC9iYWxsb2MuY2AuIEFoLCBnb29kLCBpdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGZpbGUuIE1ha2VzIGl0IGVhc2llciB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgYWxzbyBnbGFuY2UgYXQgYGV4dDRfcmVzaXplX2ZzYCwgYGV4dDRfZ3JvdXBfYWRkYCwgYW5kIGBleHQ0X2dyb3VwX2V4dGVuZGAuIFRob3NlIGJlaW5nIG5vbi1zdGF0aWMgYXJlIGFsc28gaGVscGZ1bC5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYGtlcm5lbC91c2VyX25hbWVzcGFjZS5jYCwgc3BlY2lmaWNhbGx5IGBtYXBfaWRfcmFuZ2VfdXBgLCBgbWFwX2lkX3JhbmdlX2Rvd25gLCBgbWFwX2lkX3VwYCwgYW5kIGBtYXBfaWRfZG93bmAuIEltcG9ydGFudCB0byBrbm93IGhvdyB0aGVzZSBhcmUgZXhwb3NlZC4gTW92aW5nIG9uIHRvIGBmcy9waWRmcy5jYCwgY2hlY2tpbmcgYHBpZGZzX2V4aXRgIGFuZCBgcGlkZnNfY29yZWR1bXBgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGltcGxlbWVudGVkIGFuZCBpZiB0aGV5IGFyZSBwdWJsaWMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLiBJJ20gZ29pbmcgdG8gam90IGRvd24gdGhlIGtleSBjb25maWdzIHRoYXQgc2VlbSByZWxldmFudDogYEFJT2AsIGBFWFQ0X0ZTYCwgYFVTRVJfTlNgLCBgUElEX05TYCAoZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBwaWRmcyBuYW1lc3BhY2UgaW9jdGxzIGFuZCBhdHRyaWJ1dGVzKSwgYW5kIGBDR1JPVVBTYCAoZm9yIHBpZGZzIGNncm91cCBpbmZvcm1hdGlvbikuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdGhhdCBJJ20gbWlzc2luZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgRVhUNF9GU2AsIGBVU0VSX05TYCwgb3IgYEFJT2AuIEknbGwgc3RhcnQgYnkgcmVhZGluZyB0aHJvdWdoIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTg5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjIwLjI5MjA3NjM0MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRVhUNF9GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRzZWxlY3QgSkJEMlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQzE2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDk6XFx0XFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcXG4gIDE0OlxcdFxcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxcbiAgMTU6XFx0XFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XFxuICAxNjpcXHRcXHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxcbiAgMTc6XFx0XFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcXG4gIDE4OlxcdFxcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXFxuICAxOTpcXHRcXHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcXG4gIDIwOlxcdFxcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxcbiAgMjM6XFx0XFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXFxuICAyNDpcXHRcXHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XFxuICAyNTpcXHRcXHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcXG4gIDI2OlxcdFxcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXFxuICAyNzpcXHRcXHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXFxuICAyODpcXHRcXHQgIGNvbXBhdGlibGUuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxcbiAgMzE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cXG4gIDM5OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDoyMC4yOTIyMTU2MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0MjIzMDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBuYW1lc3BhY2UgY29uZmlndXJhdGlvbiAoYFVTRVJfTlNgKSBpcyBwcm9wZXJseSBzZXQgdXAgaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZSAoYGluaXQvS2NvbmZpZ2ApLiBUaGF0J3MgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJIHdhbnQgdG8gdmVyaWZ5IGlmIGl0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCB0byBzb21lIG90aGVyIHZhbHVlIOKAkyBsaWtlbHkgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgc3lzdGVtIGFuZCBzZWN1cml0eSByZXF1aXJlbWVudHMuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkIGlzIGFic29sdXRlbHkgY3JpdGljYWwgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBhYmlsaXR5IHRvIHV0aWxpemUgdXNlciBuYW1lc3BhY2VzLCB3aGljaCBpcyBmb3VuZGF0aW9uYWwgdG8gYSBsb3Qgb2YgY29udGFpbmVyaXphdGlvbiBhbmQgc2VjdXJpdHkgdGVjaG5vbG9naWVzIEknbSB3b3JraW5nIHdpdGguIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaG93IGBVU0VSX05TYCBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSBpcyBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjkwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MjIuMjM0NDUwNTg5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ0NTpcXHRcXG4xNDQ2OlxcdGNvbmZpZyBVU0VSX05TXFxuMTQ0NzpcXHRcXHRib29sIFxcXCJVc2VyIG5hbWVzcGFjZVxcXCJcXG4xNDQ4OlxcdFxcdGRlZmF1bHQgblxcbjE0NDk6XFx0XFx0aGVscFxcbjE0NTA6XFx0XFx0ICBUaGlzIGFsbG93cyBjb250YWluZXJzLCBpLmUuIHZzZXJ2ZXJzLCB0byB1c2UgdXNlciBuYW1lc3BhY2VzXFxuMTQ1MTpcXHRcXHQgIHRvIHByb3ZpZGUgZGlmZmVyZW50IHVzZXIgaW5mbyBmb3IgZGlmZmVyZW50IHNlcnZlcnMuXFxuMTQ1MjpcXHRcXG4xNDUzOlxcdFxcdCAgV2hlbiB1c2VyIG5hbWVzcGFjZXMgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBpdCBpc1xcbjE0NTQ6XFx0XFx0ICByZWNvbW1lbmRlZCB0aGF0IHRoZSBNRU1DRyBvcHRpb24gYWxzbyBiZSBlbmFibGVkIGFuZCB0aGF0XFxuMTQ1NTpcXHRcXHQgIHVzZXItc3BhY2UgdXNlIHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMgdG8gbGltaXQgdGhlIGFtb3VudFxcbjE0NTY6XFx0XFx0ICBvZiBtZW1vcnkgYSBtZW1vcnkgdW5wcml2aWxlZ2VkIHVzZXJzIGNhbiB1c2UuXFxuMTQ1NzpcXHRcXG4xNDU4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xNDU5OlxcdFxcbjE0NjA6XFx0Y29uZmlnIFBJRF9OU1xcbjE0NjE6XFx0XFx0Ym9vbCBcXFwiUElEIE5hbWVzcGFjZXNcXFwiXFxuMTQ2MjpcXHRcXHRkZWZhdWx0IHlcXG4xNDYzOlxcdFxcdGhlbHBcXG4xNDY0OlxcdFxcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MjIuMjM0NjI4NTQ5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MDg5NTcwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBgQUlPYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYEFJT2Ag4oCTIEFzeW5jaHJvbm91cyBJL08g4oCTIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEl0J3MgY3J1Y2lhbCwgc28gSSBuZWVkIHRvIGdvIGluIGFuZCBtYWtlIHN1cmUgaXQncyBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoaW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG9wdGlvbnMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgdG8gdGhlaXIgcHJvcGVyIGRlZmF1bHRzLiBHb3R0YSBzdGF5IG9uIHRvcCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6MjMuNzQzNTkxMjI1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk1MDpcXHRcXHQgIHdoaWNoIG1heSBiZSBhcHByb3ByaWF0ZSBvbiBzbWFsbCBzeXN0ZW1zIHdpdGhvdXQgc3dhcC5cXG4xOTUxOlxcdFxcbjE5NTI6XFx0Y29uZmlnIEFJT1xcbjE5NTM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEFJTyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4xOTU0OlxcdFxcdGRlZmF1bHQgeVxcbjE5NTU6XFx0XFx0aGVscFxcbjE5NTY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIFBPU0lYIGFzeW5jaHJvbm91cyBJL08gd2hpY2ggbWF5IGJ5IHVzZWRcXG4xOTU3OlxcdFxcdCAgYnkgc29tZSBoaWdoIHBlcmZvcm1hbmNlIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4gRGlzYWJsaW5nXFxuMTk1ODpcXHRcXHQgIHRoaXMgb3B0aW9uIHNhdmVzIGFib3V0IDdrLlxcbjE5NTk6XFx0XFxuMTk2MDpcXHRjb25maWcgSU9fVVJJTkdcXG4xOTYxOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4xOTYyOlxcdFxcdHNlbGVjdCBJT19XUVxcbjE5NjM6XFx0XFx0ZGVmYXVsdCB5XFxuMTk2NDpcXHRcXHRoZWxwXFxuMTk2NTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGlvX3VyaW5nIGludGVyZmFjZSwgZW5hYmxpbmdcXG4xOTY2OlxcdFxcdCAgYXBwbGljYXRpb25zIHRvIHN1Ym1pdCBhbmQgY29tcGxldGUgSU8gdGhyb3VnaCBzdWJtaXNzaW9uIGFuZFxcbjE5Njc6XFx0XFx0ICBjb21wbGV0aW9uIHJpbmdzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIGFwcGxpY2F0aW9uLlxcbjE5Njg6XFx0XFxuMTk2OTpcXHRjb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjIzLjc0MzgxNTg0NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTMyMjU5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipSZWZpbmluZyB0aGUgU3RyYXRlZ3kgQmVmb3JlIERlbGl2ZXJ5KipcblxuT2theSwgYmVmb3JlIEkgY29tbWl0IHRvIGEgZmluYWwgY29uY2x1c2lvbiwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB2ZXJpZnkgZXZlcnkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgcG90ZW50aWFsIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgaW1wYWN0aW5nIG1lbW9yeSBiYXJyaWVyIGJlaGF2aW9ycyBhbmQgY29uY3VycmVuY3kgbWVjaGFuaXNtcy4gVGhpcyBpcyB0b3VjaGluZyBjcnVjaWFsIGFyZWFzIGFjcm9zcyB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKSwgZXh0NCBmaWxlc3lzdGVtLCBBc3luY2hyb25vdXMgSS9PIChBSU8pLCB0aGUgcHJvY2VzcyBJRCBmaWxlc3lzdGVtIChwaWRmcyksIGFuZCB1c2VyIG5hbWVzcGFjZXMuIFRoZSAqV29ydGhGdXp6aW5nKiBmbGFnIGJlaW5nIHNldCB0byAqdHJ1ZSogaW5kaWNhdGVzIHRoZXNlIGFyZSBhcmVhcyByaXBlIGZvciBtb3JlIHJpZ29yb3VzIGV4YW1pbmF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc2NvcGUgb2YgdGhlc2UgbG93LWxldmVsIGtlcm5lbCBjb21wb25lbnRzLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgY2VudGVyZWQgYXJvdW5kIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWMgc3ltYm9scyB3aXRoaW4gdGhhdCBzY29wZTogYGV4dDRfcmVzaXplX2ZzYCwgYGV4dDRfZ3JvdXBfYWRkYCwgYGV4dDRfZ3JvdXBfZXh0ZW5kYCwgYGV4dDRfZ2V0X2dyb3VwX2luZm9gLCBgbWFwX2lkX3JhbmdlX3VwYCwgYG1hcF9pZF9yYW5nZV9kb3duYCwgYHBpZGZzX2V4aXRgLCBhbmQgYHBpZGZzX2NvcmVkdW1wYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIHRvIHRoZSBtb2RpZmllZCBvciBuZXdseSBpbnRyb2R1Y2VkIGNvZGUgd2l0aGluIHRob3NlIHN1YnN5c3RlbXMsIG9yIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlc2UgY2hhbmdlcywgYW5kIHRoZXJlZm9yZSBuZWVkIGZ1cnRoZXIgc2NydXRpbnkuXG5cbkknbGwgYWxzbyBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgYSB0aG9yb3VnaCBleGFtaW5hdGlvbi4gVGhhdCBtZWFucyBjb25maXJtaW5nIHRoZSBmb2xsb3dpbmcgYXJlIHByZXNlbnQgYW5kIGFjdGl2ZTogYEVYVDRfRlNgLCBgVVNFUl9OU2AsIGBBSU9gLCBgUElEX05TYCwgYW5kIGBDR1JPVVBTYC5cblxuV2l0aCBhbGwgdGhhdCBkb25lLCBpdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgzNywiT3V0cHV0VG9rZW5zIjoyNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDoyNy4yNzYwNzgzMDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA2NjE5NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlVTRVJfTlNcIixcbiAgICBcIkFJT1wiLFxuICAgIFwiUElEX05TXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9yZXNpemVfZnNcIixcbiAgICBcImV4dDRfZ3JvdXBfYWRkXCIsXG4gICAgXCJleHQ0X2dyb3VwX2V4dGVuZFwiLFxuICAgIFwiZXh0NF9nZXRfZ3JvdXBfaW5mb1wiLFxuICAgIFwibWFwX2lkX3JhbmdlX3VwXCIsXG4gICAgXCJtYXBfaWRfcmFuZ2VfZG93blwiLFxuICAgIFwicGlkZnNfZXhpdFwiLFxuICAgIFwicGlkZnNfY29yZWR1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2Rlcm5pemVzIGFuZCBhZGp1c3RzIG1lbW9yeSBiYXJyaWVyIHNlbWFudGljcyBhY3Jvc3MgY29yZSBrZXJuZWwgYW5kIGZpbGVzeXN0ZW0gY29tcG9uZW50cyAoQUlPIHJpbmcgYnVmZmVycywgZXh0NCByZXNpemluZyBhbmQgZ3JvdXAgYWxsb2NhdGlvbiwgZmQgaW5zdGFsbGF0aW9uL2V4cGFuc2lvbiwgcGlkZnMgYXR0cmlidXRlIHJldHJpZXZhbCwgYW5kIHVzZXIgbmFtZXNwYWNlIGlkIG1hcHBpbmcpIGJ5IGNvbnZlcnRpbmcgZXhwbGljaXQgc21wX3JtYi9zbXBfd21iIHBhaXJzIGludG8gYWNxdWlyZS9yZWxlYXNlIG1lbW9yeSBvcmRlcnMgKGUuZy4gc21wX2xvYWRfYWNxdWlyZSwgc21wX3N0b3JlX3JlbGVhc2UsIHRlc3RfYml0X2FjcXVpcmUsIHN1cGVyX2ZsYWdzKS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHN5bmNocm9uaXphdGlvbiBjaGFuZ2VzIGluIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIG9yZGVyaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJBSU9cIixcbiAgICBcIlBJRF9OU1wiLFxuICAgIFwiQ0dST1VQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcmVzaXplX2ZzXCIsXG4gICAgXCJleHQ0X2dyb3VwX2FkZFwiLFxuICAgIFwiZXh0NF9ncm91cF9leHRlbmRcIixcbiAgICBcImV4dDRfZ2V0X2dyb3VwX2luZm9cIixcbiAgICBcIm1hcF9pZF9yYW5nZV91cFwiLFxuICAgIFwibWFwX2lkX3JhbmdlX2Rvd25cIixcbiAgICBcInBpZGZzX2V4aXRcIixcbiAgICBcInBpZGZzX2NvcmVkdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kZXJuaXplcyBhbmQgYWRqdXN0cyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYWNyb3NzIGNvcmUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGNvbXBvbmVudHMgKEFJTyByaW5nIGJ1ZmZlcnMsIGV4dDQgcmVzaXppbmcgYW5kIGdyb3VwIGFsbG9jYXRpb24sIGZkIGluc3RhbGxhdGlvbi9leHBhbnNpb24sIHBpZGZzIGF0dHJpYnV0ZSByZXRyaWV2YWwsIGFuZCB1c2VyIG5hbWVzcGFjZSBpZCBtYXBwaW5nKSBieSBjb252ZXJ0aW5nIGV4cGxpY2l0IHNtcF9ybWIvc21wX3dtYiBwYWlycyBpbnRvIGFjcXVpcmUvcmVsZWFzZSBtZW1vcnkgb3JkZXJzIChlLmcuIHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFRoZXNlIGFyZSByZWFjaGFibGUgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBvcmRlcmluZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjI3LjQ0Njc1MTY5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzI3MjE3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDoyNy40NDc4Nzk5MDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNTEzMTU4NzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcsIG9yIGFsdGVyIGhvdyBidWZmZXJzIGFyZSBpbml0aWFsaXplZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwZWQ0OWJlMWZhZjM5M2NmOWJjMjlmY2ZjZDcxYzIwYjg2NzI2OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIxOjIzOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uY1xuaW5kZXggZDc4YWNjNjlmNDg3MC4uYTAyNzllMDU5ZTk3MiAxMDA2NDRcbi0tLSBhL2ZzL2Fpby5jXG4rKysgYi9mcy9haW8uY1xuQEAgLTEyMDYsMTMgKzEyMDYsMTIgQEAgc3RhdGljIHZvaWQgYWlvX2NvbXBsZXRlKHN0cnVjdCBhaW9fa2lvY2IgKmlvY2IpXG4gXHQvKiBhZnRlciBmbGFnZ2luZyB0aGUgcmVxdWVzdCBhcyBkb25lLCB3ZVxuIFx0ICogbXVzdCBuZXZlciBldmVuIGxvb2sgYXQgaXQgYWdhaW5cbiBcdCAqL1xuLVx0c21wX3dtYigpO1x0LyogbWFrZSBldmVudCB2aXNpYmxlIGJlZm9yZSB1cGRhdGluZyB0YWlsICovXG4tXG4gXHRjdHgtXHUwMDNldGFpbCA9IHRhaWw7XG4gXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHJpbmctXHUwMDNldGFpbCA9IHRhaWw7XG4rXHQvKiBNYWtlIGV2ZW50IHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIHRhaWwgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnJpbmctXHUwMDNldGFpbCwgdGFpbCk7XG4gXHRmbHVzaF9kY2FjaGVfZm9saW8oY3R4LVx1MDAzZXJpbmdfZm9saW9zWzBdKTtcbiBcbiBcdGN0eC1cdTAwM2Vjb21wbGV0ZWRfZXZlbnRzKys7XG5AQCAtMTI4OCwxMyArMTI4NywxMiBAQCBzdGF0aWMgbG9uZyBhaW9fcmVhZF9ldmVudHNfcmluZyhzdHJ1Y3Qga2lvY3R4ICpjdHgsXG4gXHQvKiBBY2Nlc3MgdG8gLVx1MDAzZXJpbmdfZm9saW9zIGhlcmUgaXMgcHJvdGVjdGVkIGJ5IGN0eC1cdTAwM2VyaW5nX2xvY2suICovXG4gXHRyaW5nID0gZm9saW9fYWRkcmVzcyhjdHgtXHUwMDNlcmluZ19mb2xpb3NbMF0pO1xuIFx0aGVhZCA9IHJpbmctXHUwMDNlaGVhZDtcbi1cdHRhaWwgPSByaW5nLVx1MDAzZXRhaWw7XG4tXG4gXHQvKlxuIFx0ICogRW5zdXJlIHRoYXQgb25jZSB3ZSd2ZSByZWFkIHRoZSBjdXJyZW50IHRhaWwgcG9pbnRlciwgdGhhdFxuIFx0ICogd2UgYWxzbyBzZWUgdGhlIGV2ZW50cyB0aGF0IHdlcmUgc3RvcmVkIHVwIHRvIHRoZSB0YWlsLlxuK1x0ICogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGFpb19jb21wbGV0ZSgpLlxuIFx0ICovXG4tXHRzbXBfcm1iKCk7XG4rXHR0YWlsID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZyaW5nLVx1MDAzZXRhaWwpO1xuIFxuIFx0cHJfZGVidWcoXCJoJXUgdCV1IG0ldVxcblwiLCBoZWFkLCB0YWlsLCBjdHgtXHUwMDNlbnJfZXZlbnRzKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2JhbGxvYy5jIGIvZnMvZXh0NC9iYWxsb2MuY1xuaW5kZXggNTJmNGM1MTY5ZjkxNC4uNzc4ZmU4Nzg4ZjA2ZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvYmFsbG9jLmNcbkBAIC0zMjksNyArMzI5LDcgQEAgc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZXh0NF9nZXRfZ3JvdXBfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0c3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqKmdycF9pbmZvO1xuIFx0bG9uZyBpbmRleHYsIGluZGV4aDtcbiBcbi1cdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IEVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KSlcbitcdGlmICh1bmxpa2VseShncm91cCBcdTAwM2U9IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzYikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGlmICh1bmxpa2VseSghRVhUNF9TQihzYiktXHUwMDNlc19ncm91cF9pbmZvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNzI0YTI3ZThiZTYxMy4uZDcwYjljYjA5MTU1MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM1NDIsMTYgKzM1NDIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfaXNpemVfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGxvZmZfdCBpX3NpemUpXG4gfVxuIFxuIC8qXG4tICogUmVhZGluZyBzX2dyb3Vwc19jb3VudCByZXF1aXJlcyB1c2luZyBzbXBfcm1iKCkgYWZ0ZXJ3YXJkcy4gIFNlZVxuLSAqIHRoZSBsb2NraW5nIHByb3RvY29sIGRvY3VtZW50ZWQgaW4gdGhlIGNvbW1lbnRzIG9mIGV4dDRfZ3JvdXBfYWRkKClcbi0gKiBpbiByZXNpemUuY1xuKyAqIFJlYWRpbmcgc19ncm91cHNfY291bnQgdXNlcyBhY3F1aXJlIHNlbWFudGljcy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGV4dDRfZ3JvdXBfdCBleHQ0X2dldF9ncm91cHNfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRleHQ0X2dyb3VwX3RcdG5ncm91cHMgPSBFWFQ0X1NCKHNiKS1cdTAwM2VzX2dyb3Vwc19jb3VudDtcbi1cbi1cdHNtcF9ybWIoKTtcbi1cdHJldHVybiBuZ3JvdXBzO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4dDRfdXBkYXRlX3N1cGVyKCkgKi9cbitcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZ3JvdXBzX2NvdW50KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBleHQ0X2dyb3VwX3QgZXh0NF9mbGV4X2dyb3VwKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5pbmRleCAwNjE3MWExMWRiMTI1Li5hMTUyODUyMjRjZGY2IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmNcbisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jXG5AQCAtODk5LDEwICs4OTksOCBAQCBzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfZ2V0X2FsbG9jYXRpb25fZ3JvdXBzX2NvdW50KFxuIFxuIFx0Lyogbm9uLWV4dGVudCBmaWxlcyBhcmUgbGltaXRlZCB0byBsb3cgYmxvY2tzL2dyb3VwcyAqL1xuIFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoYWMtXHUwMDNlYWNfaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKVxuLVx0XHRuZ3JvdXBzID0gRVhUNF9TQihhYy1cdTAwM2VhY19zYiktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzO1xuLVxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuLVx0c21wX3JtYigpO1xuK1x0XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZXh0NF91cGRhdGVfc3VwZXIoKSAqL1xuK1x0XHRuZ3JvdXBzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZFWFQ0X1NCKGFjLVx1MDAzZWFjX3NiKS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMpO1xuIFxuIFx0cmV0dXJuIG5ncm91cHM7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jXG5pbmRleCAyYzViODUxYzU1MmE2Li41ZTNhZDgzOTNjZjgzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9yZXNpemUuY1xuKysrIGIvZnMvZXh0NC9yZXNpemUuY1xuQEAgLTE0NjIsMTEgKzE0NjIsMTEgQEAgc3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqXG4gXHQgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOlxuIFx0ICpcbi1cdCAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsXG4tXHQgKiAgIGRlcGVuZGVudCBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnRcbitcdCAqICogV3JpdGVycyBtdXN0IHVzZSBhIHJlbGVhc2Ugc3RvcmUgd2hlbiB1cGRhdGluZyB0aGUgZ3JvdXBzIGNvdW50XG4rXHQgKiAgIGFmdGVyIGFsbCBkZXBlbmRlbnQgZGF0YSBoYXMgYmVlbiB1cGRhdGVkXG4gXHQgKlxuLVx0ICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzXG4tXHQgKiAgIGNvdW50IGFuZCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuXG4rXHQgKiAqIFJlYWRlcnMgbXVzdCB1c2UgYW4gYWNxdWlyZSBsb2FkIHdoZW4gcmVhZGluZyB0aGUgZ3JvdXBzXG4rXHQgKiAgIGNvdW50IGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS5cbiBcdCAqXG4gXHQgKiBOQi4gVGhlc2UgcnVsZXMgY2FuIGJlIHJlbGF4ZWQgd2hlbiBjaGVja2luZyB0aGUgZ3JvdXAgY291bnRcbiBcdCAqIHdoaWxlIGZyZWVpbmcgZGF0YSwgYXMgd2UgY2FuIG9ubHkgYWxsb2NhdGUgZnJvbSBhIGJsb2NrXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNSBAQCBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogb25seSB0aGVuIGZyZWUgYWZ0ZXIgc2VyaWFsaXNpbmcgaW4gdHVybiBhZ2FpbnN0IHRoYXRcbiBcdCAqIGFsbG9jYXRpb24uXG4gXHQgKi9cbi1cdHNtcF93bWIoKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovXG4tXHRzYmktXHUwMDNlc19ncm91cHNfY291bnQgKz0gZmxleF9nZC1cdTAwM2Vjb3VudDtcbi1cdHNiaS1cdTAwM2VzX2Jsb2NrZmlsZV9ncm91cHMgPSBtaW4oc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuLVx0XHRcdChFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMgLyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9ncm91cHNfY291bnQoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50LFxuK1x0XHRcdCAgc2JpLVx1MDAzZXNfZ3JvdXBzX2NvdW50ICsgZmxleF9nZC1cdTAwM2Vjb3VudCk7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBleHQ0X2dldF9hbGxvY2F0aW9uX2dyb3Vwc19jb3VudCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYmktXHUwMDNlc19ibG9ja2ZpbGVfZ3JvdXBzLFxuK1x0XHRcdCAgbWluKHNiaS1cdTAwM2VzX2dyb3Vwc19jb3VudCxcbitcdFx0XHQgICAgICAoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzXG4gXHQgKiBhY3RpdmUuICovXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jXG5pbmRleCA2MjhjYTA3ZGM0YjE3Li44NmMwMzVkNDU5ZjJhIDEwMDY0NFxuLS0tIGEvZnMvZmlsZS5jXG4rKysgYi9mcy9maWxlLmNcbkBAIC0yNzMsOCArMjczLDYgQEAgc3RhdGljIGludCBleHBhbmRfZmR0YWJsZShzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IG5yKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZpbGVzLVx1MDAzZWZkdCwgbmV3X2ZkdCk7XG4gXHRpZiAoY3VyX2ZkdCAhPSBcdTAwMjZmaWxlcy1cdTAwM2VmZHRhYilcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2Y3VyX2ZkdC1cdTAwM2VyY3UsIGZyZWVfZmR0YWJsZV9yY3UpO1xuLVx0LyogY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiBmZF9pbnN0YWxsKCkgKi9cbi1cdHNtcF93bWIoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTMsNyArMzExLDggQEAgc3RhdGljIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIHVuc2lnbmVkIGludCBucilcbiBcdC8qIEFsbCBnb29kLCBzbyB3ZSB0cnkgKi9cbiBcdGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcyA9IHRydWU7XG4gXHRlcnJvciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucik7XG4tXHRmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gZmRfaW5zdGFsbCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MsIGZhbHNlKTtcbiBcbiBcdHdha2VfdXBfYWxsKFx1MDAyNmZpbGVzLVx1MDAzZXJlc2l6ZV93YWl0KTtcbiBcdHJldHVybiBlcnJvcjtcbkBAIC02ODUsMTMgKzY4NCwxMiBAQCB2b2lkIGZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19zY2hlZCgpO1xuLVx0aWYgKHVubGlrZWx5KGZpbGVzLVx1MDAzZXJlc2l6ZV9pbl9wcm9ncmVzcykpIHtcbitcdC8qIGNvdXBsZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGV4cGFuZF9maWxlcygpICovXG4rXHRpZiAodW5saWtlbHkoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxlcy1cdTAwM2VyZXNpemVfaW5fcHJvZ3Jlc3MpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTtcbiBcdFx0ZmRfaW5zdGFsbF9zbG93cGF0aChmZCwgZmlsZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gZXhwYW5kX2ZkdGFibGUoKSAqL1xuLVx0c21wX3JtYigpO1xuIFx0ZmR0ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGZpbGVzLVx1MDAzZWZkdCk7XG4gXHRWRlNfQlVHX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdKSAhPSBOVUxMKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBmaWxlKTtcbmRpZmYgLS1naXQgYS9mcy9tbnRfaWRtYXBwaW5nLmMgYi9mcy9tbnRfaWRtYXBwaW5nLmNcbmluZGV4IGNiNjFmYmRiNTJlOTAuLjYxMmIyNjZhYjNkYTAgMTAwNjQ0XG4tLS0gYS9mcy9tbnRfaWRtYXBwaW5nLmNcbisrKyBiL2ZzL21udF9pZG1hcHBpbmcuY1xuQEAgLTIxOSwxMCArMjE5LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmZzZ2lkX2luX2dyb3VwX3ApO1xuIHN0YXRpYyBpbnQgY29weV9tbnRfaWRtYXAoc3RydWN0IHVpZF9naWRfbWFwICptYXBfZnJvbSxcbiBcdFx0XHQgIHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwX3RvKVxuIHtcbitcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBtYXBfd3JpdGUoKS4gKi9cbitcdHUzMiBucl9leHRlbnRzID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZtYXBfZnJvbS1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZm9yd2FyZCwgKnJldmVyc2U7XG4tXHR1MzIgbnJfZXh0ZW50cyA9IFJFQURfT05DRShtYXBfZnJvbS1cdTAwM2Vucl9leHRlbnRzKTtcbi1cdC8qIFBhaXJzIHdpdGggc21wX3dtYigpIHdoZW4gd3JpdGluZyB0aGUgaWRtYXBwaW5nLiAqL1xuLVx0c21wX3JtYigpO1xuIFxuIFx0LypcbiBcdCAqIERvbid0IGJsaW5kbHkgY29weSBAbWFwX3RvIGludG8gQG1hcF9mcm9tIGlmIG5yX2V4dGVudHMgaXNcbmRpZmYgLS1naXQgYS9mcy9waWRmcy5jIGIvZnMvcGlkZnMuY1xuaW5kZXggYTZhNjQzZjE1ZDA4YS4uMmNkMGZhYjczMTgwZSAxMDA2NDRcbi0tLSBhL2ZzL3BpZGZzLmNcbisrKyBiL2ZzL3BpZGZzLmNcbkBAIC0zOTMsOCArMzkzLDcgQEAgc3RhdGljIGxvbmcgcGlkZmRfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXG4gXHRhdHRyID0gUkVBRF9PTkNFKHBpZC1cdTAwM2VhdHRyKTtcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0VYSVQpIHtcbi1cdFx0aWYgKHRlc3RfYml0KFBJREZTX0FUVFJfQklUX0VYSVQsIFx1MDAyNmF0dHItXHUwMDNlYXR0cl9tYXNrKSkge1xuLVx0XHRcdHNtcF9ybWIoKTtcbitcdFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0VYSVQ7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBTXG4gXHRcdFx0a2luZm8uY2dyb3VwaWQgPSBhdHRyLVx1MDAzZWNncm91cGlkO1xuQEAgLTQwNSw4ICs0MDQsNyBAQCBzdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiBcbiBcdGlmIChtYXNrIFx1MDAyNiBQSURGRF9JTkZPX0NPUkVEVU1QKSB7XG4tXHRcdGlmICh0ZXN0X2JpdChQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4tXHRcdFx0c21wX3JtYigpO1xuK1x0XHRpZiAodGVzdF9iaXRfYWNxdWlyZShQSURGU19BVFRSX0JJVF9DT1JFRFVNUCwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyX21hc2spKSB7XG4gXHRcdFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XG4gXHRcdFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXHUwMDNlY29yZWR1bXBfbWFzaztcbiBcdFx0XHRraW5mby5jb3JlZHVtcF9zaWduYWwgPSBhdHRyLVx1MDAzZWNvcmVkdW1wX3NpZ25hbDtcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uY2FhNjE4OWU0MDU3MiAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yNjcsMTIgKzI2NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdCAqIEhvd2V2ZXIsIGlmIHdlIGFyZSBjdXJyZW50bHkgbW91bnRpbmcgdGhlIHN1cGVyYmxvY2ssIHRoZSB1bmRlcmx5aW5nXG4gXHQgKiBmaWxlc3lzdGVtIG1pZ2h0IGJlIGluIGEgc3RhdGUgb2YgcGFydGlhbCBjb25zdHJ1Y3Rpb24gYW5kIGhlbmNlIGl0XG4gXHQgKiBpcyBkYW5nZXJvdXMgdG8gYWNjZXNzIGl0LiAgc3VwZXJfdHJ5bG9ja19zaGFyZWQoKSB1c2VzIGEgU0JfQk9STiBjaGVja1xuLVx0ICogdG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHNvIGRvIHRoZSBzYW1lIGhlcmUuIFRoZSBtZW1vcnkgYmFycmllciBpc1xuLVx0ICogbWF0Y2hlZCB3aXRoIHRoZSBvbmUgaW4gbW91bnRfZnMoKSBhcyB3ZSBkb24ndCBob2xkIGxvY2tzIGhlcmUuXG4rXHQgKiB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgc28gZG8gdGhlIHNhbWUgaGVyZS5cbiBcdCAqL1xuLVx0aWYgKCEoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfQk9STikpXG4rXHRpZiAoIXN1cGVyX2ZsYWdzKHNiLCBTQl9CT1JOKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5pbmRleCAwYmVkNDYyZTliMmEyLi41NzZiNjY3YTg4MTM2IDEwMDY0NFxuLS0tIGEva2VybmVsL3VzZXJfbmFtZXNwYWNlLmNcbisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jXG5AQCAtMzE3LDkgKzMxNyw5IEBAIG1hcF9pZF9yYW5nZV9kb3duX2Jhc2UodW5zaWduZWQgZXh0ZW50cywgc3RydWN0IHVpZF9naWRfbWFwICptYXAsIHUzMiBpZCwgdTMyIGNvXG4gXG4gc3RhdGljIHUzMiBtYXBfaWRfcmFuZ2VfZG93bihzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnQpXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdHN0cnVjdCB1aWRfZ2lkX2V4dGVudCAqZXh0ZW50O1xuLVx0dW5zaWduZWQgZXh0ZW50cyA9IG1hcC1cdTAwM2Vucl9leHRlbnRzO1xuLVx0c21wX3JtYigpO1xuIFxuIFx0aWYgKGV4dGVudHMgXHUwMDNjPSBVSURfR0lEX01BUF9NQVhfQkFTRV9FWFRFTlRTKVxuIFx0XHRleHRlbnQgPSBtYXBfaWRfcmFuZ2VfZG93bl9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC0zODMsOSArMzgzLDkgQEAgbWFwX2lkX3JhbmdlX3VwX21heCh1bnNpZ25lZCBleHRlbnRzLCBzdHJ1Y3QgdWlkX2dpZF9tYXAgKm1hcCwgdTMyIGlkLCB1MzIgY291bnRcbiBcbiB1MzIgbWFwX2lkX3JhbmdlX3VwKHN0cnVjdCB1aWRfZ2lkX21hcCAqbWFwLCB1MzIgaWQsIHUzMiBjb3VudClcbiB7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gbWFwX3dyaXRlKCkuICovXG4rXHR1bnNpZ25lZCBpbnQgZXh0ZW50cyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bWFwLVx1MDAzZW5yX2V4dGVudHMpO1xuIFx0c3RydWN0IHVpZF9naWRfZXh0ZW50ICpleHRlbnQ7XG4tXHR1bnNpZ25lZCBleHRlbnRzID0gbWFwLVx1MDAzZW5yX2V4dGVudHM7XG4tXHRzbXBfcm1iKCk7XG4gXG4gXHRpZiAoZXh0ZW50cyBcdTAwM2M9IFVJRF9HSURfTUFQX01BWF9CQVNFX0VYVEVOVFMpXG4gXHRcdGV4dGVudCA9IG1hcF9pZF9yYW5nZV91cF9iYXNlKGV4dGVudHMsIG1hcCwgaWQsIGNvdW50KTtcbkBAIC02NzYsOSArNjc2LDkgQEAgc3RhdGljIGludCBwcm9qaWRfbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdCAgICAgc3RydWN0IHVpZF9naWRfbWFwICptYXApXG4ge1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIG1hcF93cml0ZSgpLiAqL1xuK1x0dW5zaWduZWQgaW50IGV4dGVudHMgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzKTtcbiBcdGxvZmZfdCBwb3MgPSAqcHBvcztcbi1cdHVuc2lnbmVkIGV4dGVudHMgPSBtYXAtXHUwMDNlbnJfZXh0ZW50cztcbi1cdHNtcF9ybWIoKTtcbiBcbiBcdGlmIChwb3MgXHUwMDNlPSBleHRlbnRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC05NjcsOSArOTY3LDExIEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdCAqIGRlc2lyZWQgYmVoYXZpb3IgaXMgdG8gc2VlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4dGVudHMgdGhhdFxuIFx0ICogd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY291bnQgb2YgdGhlIGV4dGVudHMuXG4gXHQgKlxuLVx0ICogVG8gYWNoaWV2ZSB0aGlzIHNtcF93bWIoKSBpcyB1c2VkIG9uIGd1YXJhbnRlZSB0aGUgd3JpdGVcbi1cdCAqIG9yZGVyIGFuZCBzbXBfcm1iKCkgaXMgZ3VhcmFudGVlZCB0aGF0IHdlIGRvbid0IGhhdmUgY3Jhenlcbi1cdCAqIGFyY2hpdGVjdHVyZXMgcmV0dXJuaW5nIHN0YWxlIGRhdGEuXG4rXHQgKiBUaGUgbnJfZXh0ZW50cyBmaWVsZCBpcyB0aGUgcHVibGlzaCBwb2ludCBmb3IgdGhlIGV4dGVudFxuK1x0ICogZGF0YS4gIFdyaXRlcnMgdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGFsbCBleHRlbnRcbitcdCAqIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgbnJfZXh0ZW50cyBpcyB1cGRhdGVkLiAgUmVhZGVycyB1c2VcbitcdCAqIHNtcF9sb2FkX2FjcXVpcmUoKSB0byBlbnN1cmUgdGhleSBzZWUgYSBjb25zaXN0ZW50IHZpZXcgb2ZcbitcdCAqIHRoZSBleHRlbnQgZGF0YSB3aGVuIHJlYWRpbmcgbnJfZXh0ZW50cy5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZ1c2VybnNfc3RhdGVfbXV0ZXgpO1xuIFxuQEAgLTEwOTgsOCArMTEwMCw4IEBAIHN0YXRpYyBzc2l6ZV90IG1hcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0bWFwLVx1MDAzZWZvcndhcmQgPSBuZXdfbWFwLmZvcndhcmQ7XG4gXHRcdG1hcC1cdTAwM2VyZXZlcnNlID0gbmV3X21hcC5yZXZlcnNlO1xuIFx0fVxuLVx0c21wX3dtYigpO1xuLVx0bWFwLVx1MDAzZW5yX2V4dGVudHMgPSBuZXdfbWFwLm5yX2V4dGVudHM7XG4rXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBtYXBfaWRfcmFuZ2Vfe3VwLGRvd259KCkgYW5kIG1fc3RhcnQoKS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm1hcC1cdTAwM2Vucl9leHRlbnRzLCBuZXdfbWFwLm5yX2V4dGVudHMpO1xuIFxuIFx0KnBwb3MgPSBjb3VudDtcbiBcdHJldCA9IGNvdW50O1xuZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmNcbmluZGV4IDFkOTVhYjkzMTRiZjcuLjkwZDBhNzI0ZWFkZDggMTAwNjQ0XG4tLS0gYS9saWIvdnNwcmludGYuY1xuKysrIGIvbGliL3ZzcHJpbnRmLmNcbkBAIC03NjIsOSArNzYyLDggQEAgc3RhdGljIGludCBmaWxsX3B0cl9rZXkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRcbiB7XG4gXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnB0cl9rZXksIHNpemVvZihwdHJfa2V5KSk7XG4gXG4tXHQvKiBQYWlycyB3aXRoIHNtcF9ybWIoKSBiZWZvcmUgcmVhZGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3dtYigpO1xuLVx0V1JJVEVfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXksIHRydWUpO1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgYmVmb3JlIHJlYWRpbmcgcHRyX2tleS4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmZpbGxlZF9yYW5kb21fcHRyX2tleSwgdHJ1ZSk7XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuQEAgLTc4MSwxMiArNzgwLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3RvX2hhc2h2YWwoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nICpoYXNodmFsX291dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhc2h2YWw7XG4gXG4tXHRpZiAoIVJFQURfT05DRShmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGFmdGVyIHdyaXRpbmcgcHRyX2tleS4gKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZmaWxsZWRfcmFuZG9tX3B0cl9rZXkpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0LyogUGFpcnMgd2l0aCBzbXBfd21iKCkgYWZ0ZXIgd3JpdGluZyBwdHJfa2V5LiAqL1xuLVx0c21wX3JtYigpO1xuLVxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdGhhc2h2YWwgPSAodW5zaWduZWQgbG9uZylzaXBoYXNoXzF1NjQoKHU2NClwdHIsIFx1MDAyNnB0cl9rZXkpO1xuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIxOjI0OjI3LjQ0Nzg4MTk0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY1MDk5NTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZW1vcnkgQmFycmllciBPcHRpbWl6YXRpb24gYW5kIEtNU0FOIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaXMgbWFraW5nIHNvbWUgbWVtb3J5IGJhcnJpZXIgY2hhbmdlcyBhY3Jvc3MgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBpbnN0YW5jZXMgb2YgYHNtcF93bWIoKWAgYW5kIGBzbXBfcm1iKClgIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBtb3JlIG1vZGVybiBhbmQgcHJlY2lzZSBgc21wX3N0b3JlX3JlbGVhc2VgIGFuZCBgc21wX2xvYWRfYWNxdWlyZWAgcHJpbWl0aXZlcy4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgb3B0aW1pemF0aW9uLCBidXQgd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBMZXQncyByZWNhcCB3aGF0IHdlJ3JlIHNlZWluZzogY2hhbmdlcyBpbiBgZnMvYWlvLmNgLCBgZnMvZXh0NC9iYWxsb2MuY2AsIGBmcy9leHQ0LmhgLCBgZnMvZXh0NC9tYmFsbG9jLmNgLCBgZnMvZXh0NC9yZXNpemUuY2AsIGBmcy9maWxlLmNgLCBgZnMvbW50X2lkbWFwcGluZy5jYCwgYGZzL3BpZGZzLmNgLCBgZnMvc3VwZXIuY2AsIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AsIGFuZCBgbGliL3ZzcHJpbnRmLmNgLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgZW5zdXJpbmcgbm8gcmVncmVzc2lvbnMgYXJlIGludHJvZHVjZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiAgV2UgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbCBvbiB3aGV0aGVyIHRvIHJ1biBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgc2Vzc2lvbiwgd2hpY2ggaXMgcmVzb3VyY2UgaW50ZW5zaXZlIGFuZCBzaG91bGQgb25seSBiZSBlbXBsb3llZCBpZiBuZWNlc3NhcnkuXG5cbkxldCdzIHJldmlldyB0aGUgY3JpdGljYWwgZGlzdGluY3Rpb24gYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIG91ciBwcmltYXJ5IHRvb2wsIGNhdGNoaW5nIHRoaW5ncyBsaWtlIFVzZS1BZnRlci1GcmVlLCBPdXQtb2YtQm91bmRzLCBhbmQgbG9jayBpc3N1ZXMuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4gIElmIHdlICpjYW4qIGNhdGNoIGEgYnVnIHdpdGggS0FTQU4sIExvY2tEZXAsIG9yIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycywgd2UgKnNob3VsZCBub3QqIGZpcmUgdXAgYSBLTVNBTiBzZXNzaW9uLlxuXG5UaGUgZ3VpZGVsaW5lcyBhcmUgdmVyeSBjbGVhcjogd2Ugb25seSBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgY29kZSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgKm9ubHkqIGRldGVjdGVkIGJ5IEtNU0FOLiAgVGhpcyBpbmNsdWRlcyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIGFuZCBzY2VuYXJpb3MgdGhhdCBhbGxvdyB1bmluaXRpYWxpemVkIGJ5dGVzIHRvIGJlIGFjY2Vzc2VkLiBJZiBhbGwgdGhlIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCwgb3IgaWYgdGhlIHJpc2sgaXMgbGltaXRlZCB0byB0aGluZ3MgdGhhdCBLQVNBTiB3aWxsIGNhdGNoLCB0aGVuIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlc2Ugc3BlY2lmaWMgY2hhbmdlcy4gTGV0J3Mgc3RhcnQgYnkgaW5zcGVjdGluZyB0aG9zZSBmaWxlcywgZXNwZWNpYWxseTogYGZzL3BpZGZzLmNgLCBgZnMvc3VwZXIuY2AsIGBmcy9maWxlLmNgLCBgZnMvYWlvLmNgLCBhbmQgdGhlIGV4dDQgY2hhbmdlcywgYW5kIGBrZXJuZWwvdXNlcl9uYW1lc3BhY2UuY2AgYW5kIGBsaWIvdnNwcmludGYuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHJpc2suXG5cblNwZWNpZmljYWxseSwgaW4gYGZzL3BpZGZzLmNgLCBJIHNlZSBhIG1lbW9yeSBiYXJyaWVyIGNoYW5nZSwgZ29pbmcgZnJvbSBhIGB0ZXN0X2JpdGAgd2l0aCBgc21wX3JtYigpYCB0byBgdGVzdF9iaXRfYWNxdWlyZWAuIFRoaXMgaXMgbGlrZWx5IGEgc2FmZSBhbmQgY29ycmVjdCBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYGF0dHJgIHN0cnVjdCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdGhhdCB0aGUgcmVhZCBvZiB0aGUgYml0IGlzIHNhZmUuIEl0J3MgdGltZSB0byByZWFkIHRoZSBmdWxsIGNvbnRleHQgaW4gYGZzL3BpZGZzLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gSSB3aWxsIGFsc28gY2hlY2sgd2hhdCBga2luZm9gIGlzIGluaXRpYWxpemVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTMxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6NDYuMDk4ODgxOTI4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTUzNDMyMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcGlkZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9waWRmcy5jPTM2NT1zdGF0aWMgbG9uZyBwaWRmZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL3BpZGZzLmMtMzcwLVxcdHNpemVfdCB1c2l6ZSA9IF9JT0NfU0laRShjbWQpO1xcbmZzL3BpZGZzLmM6MzcxOlxcdHN0cnVjdCBwaWRmZF9pbmZvIGtpbmZvID0ge307XFxuZnMvcGlkZnMuYy0zNzItXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zO1xcbi0tXFxuZnMvcGlkZnMuYy0zOTYtXFx0XFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfRVhJVCwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHJfbWFzaykpIHtcXG5mcy9waWRmcy5jOjM5NzpcXHRcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fRVhJVDtcXG5mcy9waWRmcy5jLTM5OC0jaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5mcy9waWRmcy5jOjM5OTpcXHRcXHRcXHRraW5mby5jZ3JvdXBpZCA9IGF0dHItXFx1MDAzZWNncm91cGlkO1xcbmZzL3BpZGZzLmM6NDAwOlxcdFxcdFxcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DR1JPVVBJRDtcXG5mcy9waWRmcy5jLTQwMS0jZW5kaWZcXG5mcy9waWRmcy5jOjQwMjpcXHRcXHRcXHRraW5mby5leGl0X2NvZGUgPSBhdHRyLVxcdTAwM2VleGl0X2NvZGU7XFxuZnMvcGlkZnMuYy00MDMtXFx0XFx0fVxcbi0tXFxuZnMvcGlkZnMuYy00MDctXFx0XFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoUElERlNfQVRUUl9CSVRfQ09SRURVTVAsIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyX21hc2spKSB7XFxuZnMvcGlkZnMuYzo0MDg6XFx0XFx0XFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QIHwgUElERkRfSU5GT19DT1JFRFVNUF9TSUdOQUwgfCBQSURGRF9JTkZPX0NPUkVEVU1QX0NPREU7XFxuZnMvcGlkZnMuYzo0MDk6XFx0XFx0XFx0a2luZm8uY29yZWR1bXBfbWFzayA9IGF0dHItXFx1MDAzZWNvcmVkdW1wX21hc2s7XFxuZnMvcGlkZnMuYzo0MTA6XFx0XFx0XFx0a2luZm8uY29yZWR1bXBfc2lnbmFsID0gYXR0ci1cXHUwMDNlY29yZWR1bXBfc2lnbmFsO1xcbmZzL3BpZGZzLmM6NDExOlxcdFxcdFxcdGtpbmZvLmNvcmVkdW1wX2NvZGUgPSBhdHRyLVxcdTAwM2Vjb3JlZHVtcF9jb2RlO1xcbmZzL3BpZGZzLmMtNDEyLVxcdFxcdH1cXG4tLVxcbmZzL3BpZGZzLmMtNDMwLVxcbmZzL3BpZGZzLmM6NDMxOlxcdGlmICgobWFzayBcXHUwMDI2IFBJREZEX0lORk9fQ09SRURVTVApIFxcdTAwMjZcXHUwMDI2ICFraW5mby5jb3JlZHVtcF9tYXNrKSB7XFxuZnMvcGlkZnMuYzo0MzI6XFx0XFx0a2luZm8uY29yZWR1bXBfbWFzayA9IHBpZGZzX2NvcmVkdW1wX21hc2sodGFza19leGVjX3N0YXRlX2dldF9kdW1wYWJsZSh0YXNrKSk7XFxuZnMvcGlkZnMuYzo0MzM6XFx0XFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX0NPUkVEVU1QO1xcbmZzL3BpZGZzLmMtNDM0LVxcdFxcdC8qIE5vIGNvcmVkdW1wIGFjdHVhbGx5IHRvb2sgcGxhY2UsIHNvIG5vIGNvcmVkdW1wIHNpZ25hbC4gKi9cXG4tLVxcbmZzL3BpZGZzLmMtNDM5LVxcdHVzZXJfbnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcXG5mcy9waWRmcy5jOjQ0MDpcXHRraW5mby5ydWlkID0gZnJvbV9rdWlkX211bmdlZCh1c2VyX25zLCBjLVxcdTAwM2V1aWQpO1xcbmZzL3BpZGZzLmM6NDQxOlxcdGtpbmZvLnJnaWQgPSBmcm9tX2tnaWRfbXVuZ2VkKHVzZXJfbnMsIGMtXFx1MDAzZWdpZCk7XFxuZnMvcGlkZnMuYzo0NDI6XFx0a2luZm8uZXVpZCA9IGZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlZXVpZCk7XFxuZnMvcGlkZnMuYzo0NDM6XFx0a2luZm8uZWdpZCA9IGZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlZWdpZCk7XFxuZnMvcGlkZnMuYzo0NDQ6XFx0a2luZm8uc3VpZCA9IGZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlc3VpZCk7XFxuZnMvcGlkZnMuYzo0NDU6XFx0a2luZm8uc2dpZCA9IGZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlc2dpZCk7XFxuZnMvcGlkZnMuYzo0NDY6XFx0a2luZm8uZnN1aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKHVzZXJfbnMsIGMtXFx1MDAzZWZzdWlkKTtcXG5mcy9waWRmcy5jOjQ0NzpcXHRraW5mby5mc2dpZCA9IGZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgYy1cXHUwMDNlZnNnaWQpO1xcbmZzL3BpZGZzLmM6NDQ4OlxcdGtpbmZvLm1hc2sgfD0gUElERkRfSU5GT19DUkVEUztcXG5mcy9waWRmcy5jLTQ0OS1cXHRwdXRfY3JlZChjKTtcXG4tLVxcbmZzL3BpZGZzLmMtNDUxLSNpZmRlZiBDT05GSUdfQ0dST1VQU1xcbmZzL3BpZGZzLmM6NDUyOlxcdGlmICgha2luZm8uY2dyb3VwaWQpIHtcXG5mcy9waWRmcy5jLTQ1My1cXHRcXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xcbi0tXFxuZnMvcGlkZnMuYy00NTYtXFx0XFx0Y2dycCA9IHRhc2tfZGZsX2Nncm91cCh0YXNrKTtcXG5mcy9waWRmcy5jOjQ1NzpcXHRcXHRraW5mby5jZ3JvdXBpZCA9IGNncm91cF9pZChjZ3JwKTtcXG5mcy9waWRmcy5jOjQ1ODpcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fQ0dST1VQSUQ7XFxuZnMvcGlkZnMuYy00NTktXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5mcy9waWRmcy5jLTQ3MS1cXG5mcy9waWRmcy5jOjQ3MjpcXHRraW5mby5wcGlkID0gdGFza19wcGlkX3Zucih0YXNrKTtcXG5mcy9waWRmcy5jOjQ3MzpcXHRraW5mby50Z2lkID0gdGFza190Z2lkX3Zucih0YXNrKTtcXG5mcy9waWRmcy5jOjQ3NDpcXHRraW5mby5waWQgPSB0YXNrX3BpZF92bnIodGFzayk7XFxuZnMvcGlkZnMuYzo0NzU6XFx0a2luZm8ubWFzayB8PSBQSURGRF9JTkZPX1BJRDtcXG5mcy9waWRmcy5jLTQ3Ni1cXG5mcy9waWRmcy5jOjQ3NzpcXHRpZiAoa2luZm8ucGlkID09IDAgfHwga2luZm8udGdpZCA9PSAwKVxcbmZzL3BpZGZzLmMtNDc4LVxcdFxcdHJldHVybiAtRVNSQ0g7XFxuLS1cXG5mcy9waWRmcy5jLTQ4MS1cXHRpZiAobWFzayBcXHUwMDI2IFBJREZEX0lORk9fU1VQUE9SVEVEX01BU0spIHtcXG5mcy9waWRmcy5jOjQ4MjpcXHRcXHRraW5mby5tYXNrIHw9IFBJREZEX0lORk9fU1VQUE9SVEVEX01BU0s7XFxuZnMvcGlkZnMuYzo0ODM6XFx0XFx0a2luZm8uc3VwcG9ydGVkX21hc2sgPSBQSURGRF9JTkZPX1NVUFBPUlRFRDtcXG5mcy9waWRmcy5jLTQ4NC1cXHR9XFxuLS1cXG5mcy9waWRmcy5jLTQ4Ni1cXHQvKiBBcmUgdGhlcmUgYml0cyBpbiB0aGUgcmV0dXJuIG1hc2sgbm90IHByZXNlbnQgaW4gUElERkRfSU5GT19TVVBQT1JURUQ/ICovXFxuZnMvcGlkZnMuYzo0ODc6XFx0V0FSTl9PTl9PTkNFKH5QSURGRF9JTkZPX1NVUFBPUlRFRCBcXHUwMDI2IGtpbmZvLm1hc2spO1xcbmZzL3BpZGZzLmMtNDg4LVxcdC8qXFxuLS1cXG5mcy9waWRmcy5jLTQ5My1cXHQgKi9cXG5mcy9waWRmcy5jOjQ5NDpcXHRyZXR1cm4gY29weV9zdHJ1Y3RfdG9fdXNlcih1aW5mbywgdXNpemUsIFxcdTAwMjZraW5mbywgc2l6ZW9mKGtpbmZvKSwgTlVMTCk7XFxuZnMvcGlkZnMuYy00OTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMToyNDo0Ni41MTQyNDIxM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDY1MTk2NjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBCYXJyaWVyIFJlZmFjdG9yaW5nIGFuZCBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUganVzdCByZXZpZXdlZCBhIHNlcmllcyBvZiBjaGFuZ2VzIGFjcm9zcyB0aGUga2VybmVsJ3MgZmlsZSBzeXN0ZW1zIGFuZCBjb3JlIGNvbXBvbmVudHMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gVGhlIGNvbW1vbiB0aHJlYWQgaGVyZSBpcyB0aGUgbW9kZXJuaXphdGlvbiBvZiBtZW1vcnkgYmFycmllciBwcmltaXRpdmVzLiBXZSdyZSB0YWxraW5nIGFib3V0IHRyYW5zaXRpb25pbmcgZnJvbSB0aGUgb2xkZXIsIG1vcmUgZXhwbGljaXQgYHNtcF93bWIoKWAgKHdyaXRlIG1lbW9yeSBiYXJyaWVyKSBhbmQgYHNtcF9ybWIoKWAgKHJlYWQgbWVtb3J5IGJhcnJpZXIpIHBhdHRlcm5zIHRvIHRoZSBtb3JlIHJlZmluZWQgYHNtcF9zdG9yZV9yZWxlYXNlKClgIGFuZCBgc21wX2xvYWRfYWNxdWlyZSgpYCBzZW1hbnRpY3MuXG5cblNwZWNpZmljYWxseSwgSSd2ZSBzZWVuIHRoZXNlIHJlZmFjdG9yaW5ncyBpbjpcblxuMS4gIGBmcy9haW8uY2BcbjIuICBgZnMvZXh0NC9iYWxsb2MuY2AsIGBleHQ0LmhgLCBgbWJhbGxvYy5jYCwgYHJlc2l6ZS5jYFxuMy4gIGBmcy9maWxlLmNgXG40LiAgYGZzL21udF9pZG1hcHBpbmcuY2BcbjUuICBgZnMvcGlkZnMuY2BcbjYuICBgZnMvc3VwZXIuY2BcbjcuICBga2VybmVsL3VzZXJfbmFtZXNwYWNlLmNgXG44LiAgYGxpYi92c3ByaW50Zi5jYFxuXG5BY3Jvc3MgYWxsIHRoZXNlIGZpbGVzLCB0aGUgZm9jdXMgaXMgb24gaW1wcm92aW5nIHRoZSB3YXkgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4gIFdlJ3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBIb3dldmVyLCBhbmQgdGhpcyBpcyAqY3J1Y2lhbCosIG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIEkndmUgY2FyZWZ1bGx5IHNjcnV0aW5pemVkIHRoZSBwYXRjaCBkZXNjcmlwdGlvbnMsIGFuZCB0aGVyZSdzIG5vIGV2aWRlbmNlIG9mOlxuXG4qICAgVW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvblxuKiAgIEV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4qICAgQ2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocyBvciBwYWRkaW5nIHdoZW4gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlXG4qICAgQ29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZhbHVlc1xuXG5UaGlzIGlzIHB1cmVseSBhYm91dCBvcHRpbWl6aW5nIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGZvciBiZXR0ZXIgY29uY3VycmVuY3ksIGVuc3VyaW5nIHRoZSBjb3JyZWN0IG9yZGVyaW5nIG9mIG1lbW9yeSBvcGVyYXRpb25zIGZvciB0aHJlYWRzIG9yIHByb2Nlc3Nlcy4gSXQgbWVhbnMgd2UgaGF2ZSB0aGUgYmVuZWZpdHMgb2Ygc3Ryb25nZXIgc3luY2hyb25pemF0aW9uIGFuZCBiZXR0ZXIgY29kZSByZWFkYWJpbGl0eSwgYnV0IHdlIGhhdmUgKm5vKiBuZXcgcmlza3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCAqbXkqIGFzc2Vzc21lbnQgaXMgdGhhdCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBjb25zdHJ1Y3QgYSBjbGVhciBgS01TQU5SZWFzb25pbmdgIHN0YXRlbWVudC4gIFRoZSBwYXRjaCByZWZhY3RvcnMgbWVtb3J5IGJhcnJpZXJzIChmcm9tIGBzbXBfcm1iL3NtcF93bWJgIHRvIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MpIHRocm91Z2hvdXQgdGhlIGZpbGUgc3lzdGVtIGFuZCBrZXJuZWwgc3Vic3lzdGVtcy4gIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlIGJlY2F1c2UgdGhlc2UgY2hhbmdlcyBkbyAqbm90KiB0b3VjaCBzdHJ1Y3QgYWxsb2NhdGlvbnMsIHplcm9pbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLiBUaGUgcGF0Y2jigJlzIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgYXJlIGFscmVhZHkgbWV0aWN1bG91c2x5IGhhbmRsZWQgYW5kIHZhbGlkYXRlZCBieSB0aGUgc3RhbmRhcmQgdG9vbGNoYWlucyBsaWtlIEtBU0FOLCBLQ1NBTiwgZXRjLiBUaGUgcmVmYWN0b3JpbmcgaXRzZWxmIGlzIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzNywiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjE6MjQ6NTIuNTc5NDQyNjIzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kZXJuaXplcyBhbmQgc3RyZWFtbGluZXMgbWVtb3J5IGJhcnJpZXIgdXNhZ2UgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbSBhbmQgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyAoYWlvLCBleHQ0LCBmcy9maWxlLmMsIG1udF9pZG1hcHBpbmcsIHBpZGZzLCBzdXBlciwgdXNlcl9uYW1lc3BhY2UsIGFuZCB2c3ByaW50ZikgYnkgcmVwbGFjaW5nIGV4cGxpY2l0IHNtcF9ybWIoKS9zbXBfd21iKCkgYmFycmllciBwYWlycyB3aXRoIGFjcXVpcmUvcmVsZWFzZSBzZW1hbnRpY3MgKHNtcF9sb2FkX2FjcXVpcmUsIHNtcF9zdG9yZV9yZWxlYXNlLCB0ZXN0X2JpdF9hY3F1aXJlLCBzdXBlcl9mbGFncykuIFxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZywgb3IgYWx0ZXIgaG93IGJ1ZmZlcnMgYXJlIGluaXRpYWxpemVkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgcmVtYWluIGZ1bGx5IGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGVybml6ZXMgYW5kIHN0cmVhbWxpbmVzIG1lbW9yeSBiYXJyaWVyIHVzYWdlIGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW0gYW5kIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgKGFpbywgZXh0NCwgZnMvZmlsZS5jLCBtbnRfaWRtYXBwaW5nLCBwaWRmcywgc3VwZXIsIHVzZXJfbmFtZXNwYWNlLCBhbmQgdnNwcmludGYpIGJ5IHJlcGxhY2luZyBleHBsaWNpdCBzbXBfcm1iKCkvc21wX3dtYigpIGJhcnJpZXIgcGFpcnMgd2l0aCBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50aWNzIChzbXBfbG9hZF9hY3F1aXJlLCBzbXBfc3RvcmVfcmVsZWFzZSwgdGVzdF9iaXRfYWNxdWlyZSwgc3VwZXJfZmxhZ3MpLiBcXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcsIG9yIGFsdGVyIGhvdyBidWZmZXJzIGFyZSBpbml0aWFsaXplZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHJlbWFpbiBmdWxseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownhls6[1] Phase: Succeeded StartedAt: 2026-09-02 21:25:03 +0000 UTC FinishedAt: 2026-09-02 21:25:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 21:25:03 +0000 UTC FinishedAt: 2026-09-02 21:25:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2] Phase: Succeeded StartedAt: 2026-09-02 21:25:03 +0000 UTC FinishedAt: 2026-09-03 01:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:25:03 +0000 UTC FinishedAt: 2026-09-03 01:11:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:25:03 +0000 UTC FinishedAt: 2026-09-02 21:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:25:03 +0000 UTC FinishedAt: 2026-09-02 21:25:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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-workflownhls6/series-workflownhls6-convert-artifact-1361433570/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:25:24 +0000 UTC FinishedAt: 2026-09-02 21:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:25:24 +0000 UTC FinishedAt: 2026-09-02 21:45:09 +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:*38ada3cc-484c-4ef8-a40e-dcb110dba013,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-workflownhls6/series-workflownhls6-convert-artifact-1361433570/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": "3a8a33ab-9795-412c-aa86-e2438d58c999", "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-workflownhls6/series-workflownhls6-build-action-1620126624/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:25:24 +0000 UTC FinishedAt: 2026-09-02 21:44:59 +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:*38ada3cc-484c-4ef8-a40e-dcb110dba013,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-workflownhls6/series-workflownhls6-convert-artifact-1361433570/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": "3a8a33ab-9795-412c-aa86-e2438d58c999", "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-workflownhls6/series-workflownhls6-build-action-1620126624/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:45:09 +0000 UTC FinishedAt: 2026-09-02 21:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:45:09 +0000 UTC FinishedAt: 2026-09-02 21:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:45:09 +0000 UTC FinishedAt: 2026-09-02 21:45:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:45:09 +0000 UTC FinishedAt: 2026-09-02 21:45:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-workflownhls6/series-workflownhls6-convert-artifact-4015200061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:45:19 +0000 UTC FinishedAt: 2026-09-02 21:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:45:19 +0000 UTC FinishedAt: 2026-09-02 21:47:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a8a33ab-9795-412c-aa86-e2438d58c999,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-workflownhls6/series-workflownhls6-build-action-1620126624/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-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:47:17 +0000 UTC FinishedAt: 2026-09-02 21:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:47:17 +0000 UTC FinishedAt: 2026-09-02 21:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:47:17 +0000 UTC FinishedAt: 2026-09-02 22:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:47:17 +0000 UTC FinishedAt: 2026-09-02 22:03:44 +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:*38ada3cc-484c-4ef8-a40e-dcb110dba013,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-workflownhls6/series-workflownhls6-convert-artifact-4015200061/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": "4a80a22c-8c1d-4c1c-92a4-56dcffc820f1", "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-workflownhls6/series-workflownhls6-build-action-1143060121/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 21:47:17 +0000 UTC FinishedAt: 2026-09-02 22:03:34 +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:*38ada3cc-484c-4ef8-a40e-dcb110dba013,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-workflownhls6/series-workflownhls6-convert-artifact-4015200061/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": "4a80a22c-8c1d-4c1c-92a4-56dcffc820f1", "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-workflownhls6/series-workflownhls6-build-action-1143060121/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:03:44 +0000 UTC FinishedAt: 2026-09-02 22:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:03:44 +0000 UTC FinishedAt: 2026-09-02 22:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:03:44 +0000 UTC FinishedAt: 2026-09-02 22:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:03:44 +0000 UTC FinishedAt: 2026-09-02 22:05:39 +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:*4a80a22c-8c1d-4c1c-92a4-56dcffc820f1,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-workflownhls6/series-workflownhls6-build-action-1143060121/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-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:05:49 +0000 UTC FinishedAt: 2026-09-03 01:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:05:49 +0000 UTC FinishedAt: 2026-09-03 01:11:55 +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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"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:*3a8a33ab-9795-412c-aa86-e2438d58c999,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4a80a22c-8c1d-4c1c-92a4-56dcffc820f1,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-workflownhls6/series-workflownhls6-build-action-1620126624/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-workflownhls6/series-workflownhls6-build-action-1143060121/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:05:49 +0000 UTC FinishedAt: 2026-09-02 22:05:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:05:49 +0000 UTC FinishedAt: 2026-09-02 22:05:55 +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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"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-workflownhls6/series-workflownhls6-convert-artifact-4151117506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:05:49 +0000 UTC FinishedAt: 2026-09-02 22:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:05:49 +0000 UTC FinishedAt: 2026-09-02 22:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:05:49 +0000 UTC FinishedAt: 2026-09-02 22:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:05:59 +0000 UTC FinishedAt: 2026-09-03 01:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhls6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"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":["ext4_resize_fs","ext4_group_add","ext4_group_extend","ext4_get_group_info","map_id_range_up","map_id_range_down","pidfs_exit","pidfs_coredump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","USER_NS","AIO","PID_NS","CGROUPS"],"series_id":"40c76fa0-4db7-462b-b766-6b51c68c50d9","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-02 22:05:59 +0000 UTC FinishedAt: 2026-09-03 01:11:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a8a33ab-9795-412c-aa86-e2438d58c999,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4a80a22c-8c1d-4c1c-92a4-56dcffc820f1,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-workflownhls6/series-workflownhls6-build-action-1620126624/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-workflownhls6/series-workflownhls6-build-action-1143060121/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-workflownhls6/series-workflownhls6-convert-artifact-4151117506/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,}