Name: series-workflowvq6sv Phase: Succeeded StartedAt: 2026-09-05 04:01:17 +0000 UTC FinishedAt: 2026-09-05 07:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[0] Phase: Succeeded StartedAt: 2026-09-05 04:01:17 +0000 UTC FinishedAt: 2026-09-05 04:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 04:01:17 +0000 UTC FinishedAt: 2026-09-05 04:03:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS" ], "series_id": "c5e9020d-26e2-47b8-83b0-8faca8ea362d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "iomap_dirty_folio_range", "iomap_page_mkwrite", "folio_mark_dirty_range", "folio_mkclean_dirtymap", "folio_clear_dirty_for_io" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlJiMzNDssCiAgICAmIzM0O2lvbWFwX3BhZ2VfbWt3cml0ZSYjMzQ7LAogICAgJiMzNDtmb2xpb19tYXJrX2RpcnR5X3JhbmdlJiMzNDssCiAgICAmIzM0O2ZvbGlvX21rY2xlYW5fZGlydHltYXAmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfZGlydHlfZm9yX2lvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByYW5nZS1iYXNlZCBkaXJ0eSB0cmFja2luZyBmb3IgbGFyZ2UgZm9saW9zIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlvbWFwIChzcGVjaWZpY2FsbHkgYGRpcnR5X2ZvbGlvX3JhbmdlYCwgYGZvbGlvX21hcmtfZGlydHlfcmFuZ2VgLCBhbmQgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgKS5cblxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcy4gQWxsIG5ldyBsb2NhbCB2YXJpYWJsZXMgKGBkaXJ0eV9vZmZgLCBgZGlydHlfbGVuYCwgYHN0YXRlYCwgYW5kIHN0YWNrIGJpdG1hcCBgbWFwYCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoYGJpdG1hcF96ZXJvYCwgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZXRjLikuIFRoZXJlIGFyZSBubyBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2ZWN0b3JzLlxuMi4gS0FTQU4gLyBzdGFuZGFyZCBkZXRlY3RvcnMgYXBwbGljYWJpbGl0eTogUG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIHJhbmdlIGNhbGN1bGF0aW9ucywgYml0bWFzayBvcGVyYXRpb25zLCBvciBwYWdlIHRhYmxlIHdhbGtzIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFzc2VydGlvbnMvbG9ja2luZyBpc3N1ZXMsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBleGlzdGluZyBrZXJuZWwgZGVidWcgY2hlY2tzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3ViLWZvbGlvIHJhbmdlIGRpcnR5aW5nIHZpYSAtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UsIGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoKSwgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCgpLCBhbmQgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UoKSBmb3IgWEZTL2lvbWFwLiBJdCBtb2RpZmllcyBjb3JlIE1NIGRpcnR5IGZvbGlvIHRyYWNraW5nLCB3cml0ZS1wcm90ZWN0L2NsZWFuIHRyYW5zaXRpb25zIGluIHdyaXRlYmFjayAoZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKSwgcm1hcCBQVEUvUE1EIGRpcnR5IHdhbGssIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBzaGFyZWQgbWFwcGluZ3MuIFRoZXNlIHJlYWNoYWJsZSBNTSBhbmQgZmlsZXN5c3RlbSBwYXRocyB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNTE5YjQ2MWM5YjNmZGVjYWE4ODBlMGM5M2I0ZGE5OTc3NTFjMWIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNDowMjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggMGE1ZWJmZGE5MGYxMi4uOGQ4YThhY2FiMDFhYyAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC04NDcsMTUgJiM0Mzs4NDcsMTkgQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xuIFxuLWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRzaXplX3QgbGVuID0gZm9saW9fc2l6ZShmb2xpbyk7XG4tXG4tXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcbi1cdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgMCwgbGVuKTtcbiYjNDM7XHRpZnNfYWxsb2MobWFwcGluZy1cdTAwM2Vob3N0LCBmb2xpbywgMCk7XG4mIzQzO1x0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBvZmYsIGxlbik7XG4gXHRyZXR1cm4gZmlsZW1hcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7XG4mIzQzO1xuJiM0Mztib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLCBmb2xpb19zaXplKGZvbGlvKSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpbyk7XG4gXG4gc3RhdGljIHZvaWRcbkBAIC0xODA0LDcgJiM0MzsxODA4LDcgQEAgaW9tYXBfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF90cnVuY2F0ZV9wYWdlKTtcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBkaXJ0eV9vZmYsIHNpemVfdCBkaXJ0eV9sZW4pXG4ge1xuIFx0bG9mZl90IGxlbmd0aCA9IGlvbWFwX2xlbmd0aChpdGVyKTtcbiBcdGludCByZXQ7XG5AQCAtMTgxNyw3ICYjNDM7MTgyMSw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0XHRibG9ja19jb21taXRfd3JpdGUoZm9saW8sIDAsIGxlbmd0aCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKTtcbi1cdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XG4gXHR9XG4gXG4gXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XG5AQCAtMTgzMiw2ICYjNDM7MTgzNiw3IEBAIHZtX2ZhdWx0X3QgaW9tYXBfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4gXHRcdC5wcml2YXRlXHQ9IHByaXZhdGUsXG4gXHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdHNpemVfdCBkaXJ0eV9vZmYsIGRpcnR5X2xlbjtcbiBcdHNzaXplX3QgcmV0O1xuIFxuIFx0Zm9saW9fbG9jayhmb2xpbyk7XG5AQCAtMTg0MCw4ICYjNDM7MTg0NSwyMiBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRpdGVyLnBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XG4gXHRpdGVyLmxlbiA9IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCbG9ja3MgYXJlIHN0aWxsIGFsbG9jYXRlZCBmb3IgdGhlIHdob2xlIGZvbGlvLCBidXQgb25seSB0aGUgcGFnZVxuJiM0MztcdCAqIHRoZSBmYXVsdCB3YXMgZm9yIGhhcyBiZWVuIHdyaXR0ZW4sIHNvIHRoYXQgaXMgYWxsIHRoYXQgaGFzIHRvIGJlXG4mIzQzO1x0ICogd3JpdHRlbiBiYWNrLiAgQSByYWNpbmcgdHJ1bmNhdGUgY2FuIGxlYXZlIHRoYXQgcGFnZSBiZXlvbmQgaV9zaXplLFxuJiM0MztcdCAqIGFuZCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlydHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGlydHlfb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cdTAwM2VwYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiYjNDM7XHRpZiAoZGlydHlfb2ZmIFx1MDAzYyByZXQpXG4mIzQzO1x0XHRkaXJ0eV9sZW4gPSBtaW5fdChzaXplX3QsIFBBR0VfU0laRSwgcmV0IC0gZGlydHlfb2ZmKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkaXJ0eV9sZW4gPSAwO1xuJiM0MztcbiBcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpdGVyLCBvcHMpKSBcdTAwM2UgMClcbi1cdFx0aXRlci5zdGF0dXMgPSBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoXHUwMDI2aXRlciwgZm9saW8pO1xuJiM0MztcdFx0aXRlci5zdGF0dXMgPSBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoXHUwMDI2aXRlciwgZm9saW8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xuaW5kZXggNzRhNjA4OWFiYWRmOS4uNjAwZTdkZTJlNTk5YyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2FvcHMuY1xuQEAgLTg2Myw3ICYjNDM7ODYzLDcgQEAgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRfZm9saW9cdFx0PSB4ZnNfdm1fcmVhZF9mb2xpbyxcbiBcdC5yZWFkYWhlYWRcdFx0PSB4ZnNfdm1fcmVhZGFoZWFkLFxuIFx0LndyaXRlcGFnZXNcdFx0PSB4ZnNfdm1fd3JpdGVwYWdlcyxcbi1cdC5kaXJ0eV9mb2xpb1x0XHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuJiM0MztcdC5kaXJ0eV9mb2xpb19yYW5nZVx0PSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSxcbiBcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQuYm1hcFx0XHRcdD0geGZzX3ZtX2JtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCAwNzJkOGNkMDlhMGIyLi4xZDk4YjZjMGI4ODA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC00MDYsNiAmIzQzOzQwNiw5IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMge1xuIFxuIFx0LyogTWFyayBhIGZvbGlvIGRpcnR5LiAgUmV0dXJuIHRydWUgaWYgdGhpcyBkaXJ0aWVkIGl0ICovXG4gXHRib29sICgqZGlydHlfZm9saW8pKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCBmb2xpbyAqKTtcbiYjNDM7XHQvKiBNYXJrIFtvZmYsIG9mZiAmIzQzOyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi9cbiYjNDM7XHRib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4gXG4gXHR2b2lkICgqcmVhZGFoZWFkKShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5pbmRleCBiYzdhZTYzMjdkYmY4Li4zY2YyYWM3NTE0MDljIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC00NDMsNiAmIzQzOzQ0Myw4IEBAIHN0cnVjdCBmb2xpbyAqaW9tYXBfZ2V0X2ZvbGlvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuKTtcbiBib29sIGlvbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcbiB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbik7XG4gYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcbiB2b2lkIGlvbWFwX2ZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gaW50IGlvbWFwX2ZpbGVfdW5zaGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLFxuIFx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA4N2ZlYWE1YTJiNzgwLi43NjI4MjYyYzE3ZTE0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zMzM3LDYgJiM0MzszMzM3LDcgQEAgc3RydWN0IGt2ZWM7XG4gc3RydWN0IHBhZ2UgKmdldF9kdW1wX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKmxvY2tlZCk7XG4gXG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0Mztib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5X2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCBzZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9wYWdlX2RpcnR5X2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbmluZGV4IDhkYzA4NzFlNWYwMDEuLjZmYzBhNjAyMDI1MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbkBAIC05MjcsNiAmIzQzOzkyNyw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjbGVhbmVkIFBURXMuXG4gICovXG4gaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICopO1xuJiM0MztpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApO1xuIFxuIGludCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZixcbiBcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuQEAgLTk5MCw2ICYjNDM7OTkxLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiAjZW5kaWZcdC8qIENPTkZJR19NTVUgKi9cbiBcbiAjZW5kaWZcdC8qIF9MSU5VWF9STUFQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4ZGEwZjk0NTE0MWI0Li4yN2EwNTllMGMwMTZmIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMzc3OCwxMCAmIzQzOzM3NzgsMTkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbiYjNDM7XHRzaXplX3Qgb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cdTAwM2VwYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcdGJvb2wgZGlydGllZDtcbiBcdGJvb2wgcGFnZV9ta3dyaXRlID0gdm1hLVx1MDAzZXZtX29wcyBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VwYWdlX21rd3JpdGU7XG4gXG4tXHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIFBNRCBlbnRyeSBoYXMgb25lIGRpcnR5IGJpdCBmb3IgdGhlIHdob2xlIGZvbGlvLCBzbyB0aGVyZSBpcyBub1xuJiM0MztcdCAqIGZpbmVyIGluZm9ybWF0aW9uIHRvIHBhc3Mgb24uIEEgUFRFLW1hcHBlZCBmb2xpbyBvbmx5IGhhcyB0aGUgcGFnZVxuJiM0MztcdCAqIHRoZSBmYXVsdCB3YXMgZm9yIGRpcnRpZWQgc28gZmFyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRwX2dldF9sb2NrbGVzcyh2bWYtXHUwMDNlcG1kKSkpXG4mIzQzO1x0XHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIG9mZiwgUEFHRV9TSVpFKTtcbiBcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogVGFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3Nfc3BhY2UgLSBmb2xpby5tYXBwaW5nIG1heSBiZSB6ZXJvZWRcbkBAIC01NjI1LDYgJiM0Mzs1NjM0LDMxIEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXG4gfVxuICNlbmRpZlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNYXkgdGhlIHdob2xlIGJhdGNoIGJlIG1hcmtlZCBkaXJ0eT9cbiYjNDM7ICpcbiYjNDM7ICogT25seSBhIHNoYXJlZCBtYXBwaW5nIG9mIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXIgYmxvY2sgc2F5c1xuJiM0MzsgKiBuby4gVGhlcmUgdGhlIHBhZ2UgdGFibGUgZGlydHkgYml0cyBhcmUgdGhlIG9ubHkgcmVjb3JkIG9mIHdoaWNoIHBhcnRzIG9mIGFcbiYjNDM7ICogbGFyZ2UgZm9saW8gd2VyZSB3cml0dGVuIHRocm91Z2ggdGhlIG1hcHBpbmcsIHNvIHBhZ2VzIG5vYm9keSBoYXMgc3RvcmVkIHRvXG4mIzQzOyAqIGhhdmUgdG8gc3RheSBjbGVhbiBhbmQgbGV0IHRoZSBoYXJkd2FyZSBzZXQgdGhlIGJpdCBvbiB0aGUgZmlyc3Qgc3RvcmUuXG4mIzQzOyAqXG4mIzQzOyAqIEV2ZXJ5d2hlcmUgZWxzZSBub3RoaW5nIGV2ZXIgcmVhZHMgdGhvc2UgYml0cywgYW5kIG9uIGhhcmR3YXJlIHdpdGhvdXQgYVxuJiM0MzsgKiBkaXJ0eSBiaXQgbGVhdmluZyB0aGVtIGNsZWFuIGNvc3RzIGEgZmF1bHQgcGVyIHBhZ2UgZm9yIG5vdGhpbmcuIFRoYXQgY292ZXJzXG4mIzQzOyAqIHNobWVtLCB3aGljaCBoYXMgbm8gZGlydHkgc3RhdGUgYmVsb3cgdGhlIGZvbGlvLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsXG4mIzQzO1x0XHRcdFx0ICBib29sIHByZWZhdWx0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuJiM0MztcbiYjNDM7XHRpZiAoISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpIHx8IHByZWZhdWx0IHx8IG5yID09IDEpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICF2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2U7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2V0X3B0ZV9yYW5nZSAtIFNldCBhIHJhbmdlIG9mIFBURXMgdG8gcG9pbnQgdG8gcGFnZXMgaW4gYSBmb2xpby5cbiAgKiBAdm1mOiBGYXVsdCBkZXNjcmlwdGlvbi5cbkBAIC01NjM5LDYgJiM0Mzs1NjczLDcgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuIFx0Ym9vbCB3cml0ZSA9IHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURTtcbiBcdGJvb2wgcHJlZmF1bHQgPSAhaW5fcmFuZ2Uodm1mLVx1MDAzZWFkZHJlc3MsIGFkZHIsIG5yICogUEFHRV9TSVpFKTtcbiYjNDM7XHRib29sIGRpcnR5X2JhdGNoID0gY2FuX2RpcnR5X3dob2xlX2JhdGNoKHZtZiwgbnIsIHByZWZhdWx0KTtcbiBcdHB0ZV90IGVudHJ5O1xuIFxuIFx0Zmx1c2hfaWNhY2hlX3BhZ2VzKHZtYSwgcGFnZSwgbnIpO1xuQEAgLTU2NDksMTAgJiM0Mzs1Njg0LDEzIEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGVsc2VcbiBcdFx0ZW50cnkgPSBwdGVfc3dfbWt5b3VuZyhlbnRyeSk7XG4gXG4tXHRpZiAod3JpdGUpXG4tXHRcdGVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7XG4tXHRlbHNlIGlmIChwdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbiYjNDM7XHRpZiAod3JpdGUpIHtcbiYjNDM7XHRcdGlmIChkaXJ0eV9iYXRjaClcbiYjNDM7XHRcdFx0ZW50cnkgPSBwdGVfbWtkaXJ0eShlbnRyeSk7XG4mIzQzO1x0XHRlbnRyeSA9IG1heWJlX21rd3JpdGUoZW50cnksIHZtYSk7XG4mIzQzO1x0fSBlbHNlIGlmIChwdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xuIFx0XHRlbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTtcbiYjNDM7XHR9XG4gXHRpZiAodW5saWtlbHkodm1mX29yaWdfcHRlX3VmZmRfd3Aodm1mKSkpXG4gXHRcdGVudHJ5ID0gcHRlX21rdWZmZChlbnRyeSk7XG4gXHQvKiBjb3B5LW9uLXdyaXRlIHBhZ2UgKi9cbkBAIC01NjY1LDYgJiM0Mzs1NzAzLDE4IEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdH1cbiBcdHNldF9wdGVzKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgdm1mLVx1MDAzZXB0ZSwgZW50cnksIG5yKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBwYWdlIHRoZSBmYXVsdCB3YXMgZm9yIGlzIGFib3V0IHRvIGJlIHN0b3JlZCB0bywgc28gZGlydHkgaXRcbiYjNDM7XHQgKiBoZXJlIHJhdGhlciB0aGFuIGxlYXZlIHRoZSBzdG9yZSB0byBhIHNlY29uZCBwYWdlIHRhYmxlIHdhbGssIG9yIHRvXG4mIzQzO1x0ICogYSBzZWNvbmQgZmF1bHQgd2hlcmUgdGhlIGRpcnR5IGJpdCBpcyBtYWludGFpbmVkIGluIHNvZnR3YXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGlydHlfYmF0Y2gpIHtcbiYjNDM7XHRcdHB0ZV90ICpwdGVwID0gdm1mLVx1MDAzZXB0ZSAmIzQzOyAoKHZtZi1cdTAwM2VhZGRyZXNzIC0gYWRkcikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdHB0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBwdGVwLFxuJiM0MztcdFx0XHRcdCAgICAgIHB0ZV9ta2RpcnR5KHB0ZXBfZ2V0KHB0ZXApKSwgMSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbiYjMzk7dCBiZSBjYWNoZWQgKi9cbiBcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uodm1mLCB2bWEsIGFkZHIsIHZtZi1cdTAwM2VwdGUsIG5yKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmNcbmluZGV4IDZjOWM3YmE4OWI4YTkuLjM5YjU0YzI1YTlmYWIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlLXdyaXRlYmFjay5jXG5AQCAtMjc1MSw2ICYjNDM7Mjc1MSwyMSBAQCBib29sIGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbiB9XG4gRVhQT1JUX1NZTUJPTChmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2UpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBIYW5kIGEgZGlydGllZCByYW5nZSBvZiBAZm9saW8gdG8gdGhlIGZpbGVzeXN0ZW0uICAtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UoKSBjYW5cbiYjNDM7ICogZXhwcmVzcyBldmVyeXRoaW5nIC1cdTAwM2VkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdFxuJiM0MzsgKiBkb2VzIG5vdCBuZWVkIGJvdGgsIGFuZCBhIHdob2xlLWZvbGlvIGRpcnR5IGNvbWVzIHRocm91Z2ggaGVyZSBhcyBhIHJhbmdlXG4mIzQzOyAqIGNvdmVyaW5nIHRoZSBmb2xpby5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1hcHBpbmdfZGlydHlfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGlmICghbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSlcbiYjNDM7XHRcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBmb2xpb19tYXJrX2RpcnR5IC0gTWFyayBhIGZvbGlvIGFzIGJlaW5nIG1vZGlmaWVkLlxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuQEAgLTI3ODIsMTMgJiM0MzsyNzk3LDM5IEBAIGJvb2wgZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG4gXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4tXHRcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbiYjNDM7XHRcdHJldHVybiBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgZm9saW9fc2l6ZShmb2xpbykpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIG5vb3BfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGZvbGlvX21hcmtfZGlydHkpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZm9saW9fbWFya19kaXJ0eV9yYW5nZSAtIE1hcmsgcGFydCBvZiBhIGZvbGlvIGFzIGJlaW5nIG1vZGlmaWVkLlxuJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpby5cbiYjNDM7ICogQG9mZjogT2Zmc2V0IG9mIHRoZSBtb2RpZmllZCByYW5nZSB3aXRoaW4gdGhlIGZvbGlvLlxuJiM0MzsgKiBAbGVuOiBMZW5ndGggb2YgdGhlIG1vZGlmaWVkIHJhbmdlLlxuJiM0MzsgKlxuJiM0MzsgKiBMaWtlIGZvbGlvX21hcmtfZGlydHkoKSwgYnV0IHRlbGxzIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXJcbiYjNDM7ICogYmxvY2sgdGhhdCBvbmx5IFtAb2ZmLCBAb2ZmICYjNDM7IEBsZW4pIGNoYW5nZWQsIHNvIHdyaXRlYmFjayBjYW4gc2tpcCB0aGUgcmVzdFxuJiM0MzsgKiBvZiB0aGUgZm9saW8uICBGaWxlc3lzdGVtcyB3aXRob3V0IHRoYXQgdHJhY2tpbmcgZGlydHkgdGhlIHdob2xlIGZvbGlvLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRydWUgaWYgdGhlIGZvbGlvIHdhcyBuZXdseSBkaXJ0aWVkLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBkaXJ0eS5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseShtYXBwaW5nKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG4mIzQzO1x0XHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuJiM0MztcdFx0cmV0dXJuIG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIGZvbGlvX21hcmtfZGlydHkoKSBpcyByYWN5IGlmIHRoZSBjYWxsZXIgaGFzIG5vIHJlZmVyZW5jZSBhZ2FpbnN0XG4gICogZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LCBhbmQgaWYgdGhlIGZvbGlvIGlzIHVubG9ja2VkLiAgVGhpcyBpcyBiZWNhdXNlIGFub3RoZXJcbkBAIC0yODQ0LDYgJiM0MzsyODg1LDQxIEBAIHZvaWQgX19mb2xpb19jYW5jZWxfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2NhbmNlbF9kaXJ0eSk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFdyaXRlLXByb3RlY3QgZXZlcnkgbWFwcGluZyBvZiBAZm9saW8gYW5kIGhhbmQgdGhlIGZpbGVzeXN0ZW0gdGhlIHBhcnRzIHRoYXRcbiYjNDM7ICogd2VyZSBkaXJ0eSBpbiBhIHBhZ2UgdGFibGUuXG4mIzQzOyAqXG4mIzQzOyAqIFdpdGhvdXQgLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgdGhlcmUgaXMgbm93aGVyZSB0byBwdXQgcGVyLWJsb2NrIHN0YXRlLCBzb1xuJiM0MzsgKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90XG4mIzQzOyAqIGFscmVhZHkgZGlydHksIGJlY2F1c2UgdGhlbiB0aGUgZGlydHkgdHJhbnNpdGlvbiBuZWVkcyB0aGUgZnVsbCBhY2NvdW50aW5nXG4mIzQzOyAqIGluIGZvbGlvX21hcmtfZGlydHkoKSwgYW5kIGZvciBhIGZvbGlvIHRvbyBsYXJnZSBmb3IgdGhlIGJpdG1hcCwgd2hpY2ggdGhlXG4mIzQzOyAqIHBhZ2UgY2FjaGUgZG9lcyBub3QgbWFrZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGZvbGlvX21rY2xlYW5fZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0REVDTEFSRV9CSVRNQVAobWFwLCAxVUwgXHUwMDNjXHUwMDNjIE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuJiM0MztcdHVuc2lnbmVkIGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxuJiM0MztcdCAgICBXQVJOX09OX09OQ0UobnIgXHUwMDNlICgxVUwgXHUwMDNjXHUwMDNjIE1BWF9QQUdFQ0FDSEVfT1JERVIpKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKVxuJiM0MztcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJpdG1hcF96ZXJvKG1hcCwgbnIpO1xuJiM0MztcdGlmICghZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChmb2xpbywgbWFwKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdHJhbmdlKHN0YXJ0LCBlbmQsIG1hcCwgbnIpIHtcbiYjNDM7XHRcdG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sXG4mIzQzO1x0XHRcdFx0ICAgIChzaXplX3Qpc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0ICAgIChzaXplX3QpKGVuZCAtIHN0YXJ0KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ2xlYXIgYSBmb2xpbyYjMzk7cyBkaXJ0eSBmbGFnLCB3aGlsZSBjYXJpbmcgZm9yIGRpcnR5IG1lbW9yeSBhY2NvdW50aW5nLlxuICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9saW8gd2FzIHByZXZpb3VzbHkgZGlydHkuXG5AQCAtMjg3NSw5ICYjNDM7Mjk1MSw5IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqXG4gXHRcdCAqIFdlIHVzZSB0aGlzIHNlcXVlbmNlIHRvIG1ha2Ugc3VyZSB0aGF0XG4gXHRcdCAqICAoYSkgd2UgYWNjb3VudCBmb3IgZGlydHkgc3RhdHMgcHJvcGVybHlcbi1cdFx0ICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB0b1xuLVx0XHQgKiAgICAgIG1hcmsgdGhlIHdob2xlIGZvbGlvIGRpcnR5IGlmIGl0IHdhc1xuLVx0XHQgKiAgICAgIGRpcnR5IGluIGEgcGFnZXRhYmxlLiBPbmx5IHRvIHRoZW5cbiYjNDM7XHRcdCAqICAoYikgd2UgdGVsbCB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gd2hpY2hcbiYjNDM7XHRcdCAqICAgICAgcGFydHMgb2YgdGhlIGZvbGlvIHdlcmUgZGlydHkgaW4gYVxuJiM0MztcdFx0ICogICAgICBwYWdldGFibGUuIE9ubHkgdG8gdGhlblxuIFx0XHQgKiAgKGMpIGNsZWFuIHRoZSBmb2xpbyBhZ2FpbiBhbmQgcmV0dXJuIDEgdG9cbiBcdFx0ICogICAgICBjYXVzZSB0aGUgd3JpdGViYWNrLlxuIFx0XHQgKlxuQEAgLTI4OTUsOCAmIzQzOzI5NzEsNyBAQCBib29sIGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHQgKiBhcyBhIHNlcmlhbGl6YXRpb24gcG9pbnQgZm9yIGFsbCB0aGUgZGlmZmVyZW50XG4gXHRcdCAqIHRocmVhZHMgZG9pbmcgdGhlaXIgdGhpbmdzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKVxuLVx0XHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fbWtjbGVhbl9mb3JfaW8oZm9saW8sIG1hcHBpbmcpO1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBjYXJlZnVsbHkgc3luY2hyb25pc2UgZmF1bHQgaGFuZGxlcnMgYWdhaW5zdFxuIFx0XHQgKiBpbnN0YWxsaW5nIGEgZGlydHkgcHRlIGFuZCBtYXJraW5nIHRoZSBmb2xpbyBkaXJ0eVxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWY3MmQyNzliYTY4Zi4uYWFmNDVhYzc5ZmE4NCAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jXG5AQCAtMTEwMCwxMiAmIzQzOzExMDAsMTggQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbiBcdHJldHVybiByd2MuY29udGVuZGVkID8gLTEgOiBwcmEucmVmZXJlbmNlZDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4mIzQzO3N0cnVjdCBta2NsZWFuX3N0YXRlIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXA7XG4mIzQzO1x0aW50IGNsZWFuZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApXG4ge1xuLVx0aW50IGNsZWFuZWQgPSAwO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVx1MDAzZXZtYTtcbi1cdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBwdm13LVx1MDAzZWFkZHJlc3M7XG4mIzQzO1x0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiYjNDM7XHRpbnQgY2xlYW5lZCA9IDA7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uIE5vdGUgdGhhdFxuQEAgLTExMzQsNiAmIzQzOzExNDAsMTUgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4gXHRcdFx0aWYgKCFwdGVfZGlydHkoZW50cnkpIFx1MDAyNlx1MDAyNiAhcHRlX3dyaXRlKGVudHJ5KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0XHRpZiAoZGlydHlfbWFwIFx1MDAyNlx1MDAyNiBwdGVfZGlydHkoZW50cnkpKSB7XG4mIzQzO1x0XHRcdFx0cGdvZmZfdCBpZHggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpIC1cbiYjNDM7XHRcdFx0XHRcdCAgICAgIHB2bXctXHUwMDNlcGdvZmY7XG4mIzQzO1xuJiM0MztcdFx0XHRcdC8qIFRoZSB3YWxrIG9ubHkgdmlzaXRzIHBhZ2VzIG9mIHRoaXMgZm9saW8gKi9cbiYjNDM7XHRcdFx0XHRWTV9XQVJOX09OX09OQ0UoaWR4IFx1MDAzZT0gcHZtdy1cdTAwM2Vucl9wYWdlcyk7XG4mIzQzO1x0XHRcdFx0X19zZXRfYml0KGlkeCwgZGlydHlfbWFwKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiBcdFx0XHRmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcywgcHRlX3BmbihlbnRyeSkpO1xuIFx0XHRcdGVudHJ5ID0gcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHB0ZSk7XG4gXHRcdFx0ZW50cnkgPSBwdGVfd3Jwcm90ZWN0KGVudHJ5KTtcbkBAIC0xMTU1LDYgJiM0MzsxMTcwLDkgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4gXHRcdFx0aWYgKCFwbWRfZGlydHkoZW50cnkpIFx1MDAyNlx1MDAyNiAhcG1kX3dyaXRlKGVudHJ5KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0XHRpZiAoZGlydHlfbWFwIFx1MDAyNlx1MDAyNiBwbWRfZGlydHkoZW50cnkpKVxuJiM0MztcdFx0XHRcdGJpdG1hcF9zZXQoZGlydHlfbWFwLCAwLCBwdm13LVx1MDAzZW5yX3BhZ2VzKTtcbiYjNDM7XG4gXHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLFxuIFx0XHRcdFx0XHQgIGFkZHJlc3MgJiM0MzsgSFBBR0VfUE1EX1NJWkUpO1xuIFx0XHRcdGVudHJ5ID0gcG1kcF9pbnZhbGlkYXRlKHZtYSwgYWRkcmVzcywgcG1kKTtcbkBAIC0xMTgxLDkgJiM0MzsxMTk5LDkgQEAgc3RhdGljIGJvb2wgcGFnZV9ta2NsZWFuX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxuIHtcbiBcdERFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCBQVk1XX1NZTkMpO1xuLVx0aW50ICpjbGVhbmVkID0gYXJnO1xuJiM0MztcdHN0cnVjdCBta2NsZWFuX3N0YXRlICpzdGF0ZSA9IGFyZztcbiBcbi1cdCpjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13KTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13LCBzdGF0ZS1cdTAwM2VkaXJ0eV9tYXApO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTExOTYsMTIgJiM0MzsxMjE0LDIzIEBAIHN0YXRpYyBib29sIGludmFsaWRfbWtjbGVhbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1pbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MzsvKipcbiYjNDM7ICogZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCAtIFdyaXRlLXByb3RlY3QgYSBmb2xpbyBhbmQgcmVwb3J0IHdoYXQgd2FzIGRpcnR5LlxuJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0byBjbGVhbi5cbiYjNDM7ICogQGRpcnR5X21hcDogQml0bWFwIG9mIGF0IGxlYXN0IGZvbGlvX25yX3BhZ2VzKEBmb2xpbykgYml0cywgb3IgTlVMTC5cbiYjNDM7ICpcbiYjNDM7ICogV3JpdGUtcHJvdGVjdHMgYW5kIGNsZWFucyBldmVyeSBtYXBwaW5nIG9mIEBmb2xpby4gIFdpdGggQGRpcnR5X21hcCwgc2V0cyBhXG4mIzQzOyAqIGJpdCBmb3IgZWFjaCBwYWdlIHdob3NlIGVudHJ5IHdhcyBkaXJ0eTsgYSBQTUQtbWFwcGVkIGZvbGlvIGhhcyBvbmUgZGlydHlcbiYjNDM7ICogYml0IGZvciBhbGwgb2YgaXQsIHNvIGV2ZXJ5IHBhZ2UgaXMgcmVwb3J0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIG51bWJlciBvZiBwYWdlIHRhYmxlIGVudHJpZXMgY2xlYW5lZC5cbiYjNDM7ICovXG4mIzQzO2ludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcClcbiB7XG4tXHRpbnQgY2xlYW5lZCA9IDA7XG4mIzQzO1x0c3RydWN0IG1rY2xlYW5fc3RhdGUgc3RhdGUgPSB7IC5kaXJ0eV9tYXAgPSBkaXJ0eV9tYXAgfTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuIFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbi1cdFx0LmFyZyA9ICh2b2lkICopXHUwMDI2Y2xlYW5lZCxcbiYjNDM7XHRcdC5hcmcgPSAodm9pZCAqKVx1MDAyNnN0YXRlLFxuIFx0XHQucm1hcF9vbmUgPSBwYWdlX21rY2xlYW5fb25lLFxuIFx0XHQuaW52YWxpZF92bWEgPSBpbnZhbGlkX21rY2xlYW5fdm1hLFxuIFx0fTtcbkBAIC0xMjE3LDcgJiM0MzsxMjQ2LDEyIEBAIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4gXG4tXHRyZXR1cm4gY2xlYW5lZDtcbiYjNDM7XHRyZXR1cm4gc3RhdGUuY2xlYW5lZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBOVUxMKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fbWtjbGVhbik7XG4gXG5AQCAtMTI0MSw3ICYjNDM7MTI3NSw3IEBAIHN0YXRpYyBib29sIG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHQuZmxhZ3NcdFx0PSBQVk1XX1NZTkMsXG4gXHR9O1xuIFxuLVx0c3RhdGUtXHUwMDNlY2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4mIzQzO1x0c3RhdGUtXHUwMDNlY2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdywgTlVMTCk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTMyNCw3ICYjNDM7MTM1OCw3IEBAIGludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcbiBcdHB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcbiBcdFZNX0JVR19PTl9WTUEocHZtdy5hZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XG4gXG4tXHRyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4mIzQzO1x0cmV0dXJuIHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2ZvbGlvX21vZF9zdGF0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuciwgaW50IG5yX3BtZG1hcHBlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSYjMzQ7LAogICAgJiMzNDtpb21hcF9wYWdlX21rd3JpdGUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWFya19kaXJ0eV9yYW5nZSYjMzQ7LAogICAgJiMzNDtmb2xpb19ta2NsZWFuX2RpcnR5bWFwJiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdWItZm9saW8gcmFuZ2UgZGlydHlpbmcgdmlhIC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSwgZm9saW9fbWFya19kaXJ0eV9yYW5nZSgpLCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKCksIGFuZCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSgpIGZvciBYRlMvaW9tYXAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gZGlydHkgZm9saW8gdHJhY2tpbmcsIHdyaXRlLXByb3RlY3QvY2xlYW4gdHJhbnNpdGlvbnMgaW4gd3JpdGViYWNrIChmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8pLCBybWFwIFBURS9QTUQgZGlydHkgd2FsaywgYW5kIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncy4gVGhlc2UgcmVhY2hhYmxlIE1NIGFuZCBmaWxlc3lzdGVtIHBhdGhzIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1MTliNDYxYzliM2ZkZWNhYTg4MGUwYzkzYjRkYTk5Nzc1MWMxYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA0OjAyOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKaW5kZXggMGE1ZWJmZGE5MGYxMi4uOGQ4YThhY2FiMDFhYyAxMDA2NDQKLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCkBAIC04NDcsMTUgJiM0Mzs4NDcsMTkgQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTsKIAotYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mztib29sIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc2l6ZV90IG9mZiwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKLQlzaXplX3QgbGVuID0gZm9saW9fc2l6ZShmb2xpbyk7Ci0KLQlpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTsKLQlpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIDAsIGxlbik7CiYjNDM7CWlmc19hbGxvYyhtYXBwaW5nLSZndDtob3N0LCBmb2xpbywgMCk7CiYjNDM7CWlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgb2ZmLCBsZW4pOwogCXJldHVybiBmaWxlbWFwX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7CiYjNDM7CiYjNDM7Ym9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgMCwgZm9saW9fc2l6ZShmb2xpbykpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2RpcnR5X2ZvbGlvKTsKIAogc3RhdGljIHZvaWQKQEAgLTE4MDQsNyAmIzQzOzE4MDgsNyBAQCBpb21hcF90cnVuY2F0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGJvb2wgKmRpZF96ZXJvLAogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfdHJ1bmNhdGVfcGFnZSk7CiAKIHN0YXRpYyBpbnQgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGRpcnR5X29mZiwgc2l6ZV90IGRpcnR5X2xlbikKIHsKIAlsb2ZmX3QgbGVuZ3RoID0gaW9tYXBfbGVuZ3RoKGl0ZXIpOwogCWludCByZXQ7CkBAIC0xODE3LDcgJiM0MzsxODIxLDcgQEAgc3RhdGljIGludCBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsCiAJCWJsb2NrX2NvbW1pdF93cml0ZShmb2xpbywgMCwgbGVuZ3RoKTsKIAl9IGVsc2UgewogCQlXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKTsKLQkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiYjNDM7CQlmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7CiAJfQogCiAJcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpOwpAQCAtMTgzMiw2ICYjNDM7MTgzNiw3IEBAIHZtX2ZhdWx0X3QgaW9tYXBfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsCiAJCS5wcml2YXRlCT0gcHJpdmF0ZSwKIAl9OwogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi0mZ3Q7cGFnZSk7CiYjNDM7CXNpemVfdCBkaXJ0eV9vZmYsIGRpcnR5X2xlbjsKIAlzc2l6ZV90IHJldDsKIAogCWZvbGlvX2xvY2soZm9saW8pOwpAQCAtMTg0MCw4ICYjNDM7MTg0NSwyMiBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLAogCQlnb3RvIG91dF91bmxvY2s7CiAJaXRlci5wb3MgPSBmb2xpb19wb3MoZm9saW8pOwogCWl0ZXIubGVuID0gcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCbG9ja3MgYXJlIHN0aWxsIGFsbG9jYXRlZCBmb3IgdGhlIHdob2xlIGZvbGlvLCBidXQgb25seSB0aGUgcGFnZQomIzQzOwkgKiB0aGUgZmF1bHQgd2FzIGZvciBoYXMgYmVlbiB3cml0dGVuLCBzbyB0aGF0IGlzIGFsbCB0aGF0IGhhcyB0byBiZQomIzQzOwkgKiB3cml0dGVuIGJhY2suICBBIHJhY2luZyB0cnVuY2F0ZSBjYW4gbGVhdmUgdGhhdCBwYWdlIGJleW9uZCBpX3NpemUsCiYjNDM7CSAqIGFuZCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlydHkuCiYjNDM7CSAqLwomIzQzOwlkaXJ0eV9vZmYgPSBmb2xpb19wYWdlX2lkeChmb2xpbywgdm1mLSZndDtwYWdlKSAmbHQ7Jmx0OyBQQUdFX1NISUZUOwomIzQzOwlpZiAoZGlydHlfb2ZmICZsdDsgcmV0KQomIzQzOwkJZGlydHlfbGVuID0gbWluX3Qoc2l6ZV90LCBQQUdFX1NJWkUsIHJldCAtIGRpcnR5X29mZik7CiYjNDM7CWVsc2UKJiM0MzsJCWRpcnR5X2xlbiA9IDA7CiYjNDM7CiAJd2hpbGUgKChyZXQgPSBpb21hcF9pdGVyKCZhbXA7aXRlciwgb3BzKSkgJmd0OyAwKQotCQlpdGVyLnN0YXR1cyA9IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcigmYW1wO2l0ZXIsIGZvbGlvKTsKJiM0MzsJCWl0ZXIuc3RhdHVzID0gaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKCZhbXA7aXRlciwgZm9saW8sCiYjNDM7CQkJCQkJICAgICAgIGRpcnR5X29mZiwgZGlydHlfbGVuKTsKIAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jCmluZGV4IDc0YTYwODlhYmFkZjkuLjYwMGU3ZGUyZTU5OWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYW9wcy5jCkBAIC04NjMsNyAmIzQzOzg2Myw3IEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgeGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyA9IHsKIAkucmVhZF9mb2xpbwkJPSB4ZnNfdm1fcmVhZF9mb2xpbywKIAkucmVhZGFoZWFkCQk9IHhmc192bV9yZWFkYWhlYWQsCiAJLndyaXRlcGFnZXMJCT0geGZzX3ZtX3dyaXRlcGFnZXMsCi0JLmRpcnR5X2ZvbGlvCQk9IGlvbWFwX2RpcnR5X2ZvbGlvLAomIzQzOwkuZGlydHlfZm9saW9fcmFuZ2UJPSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSwKIAkucmVsZWFzZV9mb2xpbwkJPSBpb21hcF9yZWxlYXNlX2ZvbGlvLAogCS5pbnZhbGlkYXRlX2ZvbGlvCT0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbywKIAkuYm1hcAkJCT0geGZzX3ZtX2JtYXAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggMDcyZDhjZDA5YTBiMi4uMWQ5OGI2YzBiODgwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNDA2LDYgJiM0Mzs0MDYsOSBAQCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHsKIAogCS8qIE1hcmsgYSBmb2xpbyBkaXJ0eS4gIFJldHVybiB0cnVlIGlmIHRoaXMgZGlydGllZCBpdCAqLwogCWJvb2wgKCpkaXJ0eV9mb2xpbykoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGZvbGlvICopOwomIzQzOwkvKiBNYXJrIFtvZmYsIG9mZiAmIzQzOyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi8KJiM0MzsJYm9vbCAoKmRpcnR5X2ZvbGlvX3JhbmdlKShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkJICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTsKIAogCXZvaWQgKCpyZWFkYWhlYWQpKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IGJjN2FlNjMyN2RiZjguLjNjZjJhYzc1MTQwOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTQ0Myw2ICYjNDM7NDQzLDggQEAgc3RydWN0IGZvbGlvICppb21hcF9nZXRfZm9saW8oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4pOwogYm9vbCBpb21hcF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9mbGFncyk7CiB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbik7CiBib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mztib29sIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7CiB2b2lkIGlvbWFwX2ZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQgaW9tYXBfZmlsZV91bnNoYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sCiAJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA4N2ZlYWE1YTJiNzgwLi43NjI4MjYyYzE3ZTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zMzM3LDYgJiM0MzszMzM3LDcgQEAgc3RydWN0IGt2ZWM7CiBzdHJ1Y3QgcGFnZSAqZ2V0X2R1bXBfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCAqbG9ja2VkKTsKIAogYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTsKIGJvb2wgZm9saW9fbWFya19kaXJ0eV9sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCBzZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgc2V0X3BhZ2VfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oCmluZGV4IDhkYzA4NzFlNWYwMDEuLjZmYzBhNjAyMDI1MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC05MjcsNiAmIzQzOzkyNyw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNsZWFuZWQgUFRFcy4KICAqLwogaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICopOwomIzQzO2ludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcCk7CiAKIGludCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZiwKIAkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwpAQCAtOTkwLDYgJiM0Mzs5OTEsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJCSB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAjZW5kaWYJLyogQ09ORklHX01NVSAqLwogCiAjZW5kaWYJLyogX0xJTlVYX1JNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA4ZGEwZjk0NTE0MWI0Li4yN2EwNTllMGMwMTZmIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMzc3OCwxMCAmIzQzOzM3NzgsMTkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtJmd0O3ZtYTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyh2bWYtJmd0O3BhZ2UpOwomIzQzOwlzaXplX3Qgb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi0mZ3Q7cGFnZSkgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAlib29sIGRpcnRpZWQ7CiAJYm9vbCBwYWdlX21rd3JpdGUgPSB2bWEtJmd0O3ZtX29wcyAmYW1wOyZhbXA7IHZtYS0mZ3Q7dm1fb3BzLSZndDtwYWdlX21rd3JpdGU7CiAKLQlkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgUE1EIGVudHJ5IGhhcyBvbmUgZGlydHkgYml0IGZvciB0aGUgd2hvbGUgZm9saW8sIHNvIHRoZXJlIGlzIG5vCiYjNDM7CSAqIGZpbmVyIGluZm9ybWF0aW9uIHRvIHBhc3Mgb24uIEEgUFRFLW1hcHBlZCBmb2xpbyBvbmx5IGhhcyB0aGUgcGFnZQomIzQzOwkgKiB0aGUgZmF1bHQgd2FzIGZvciBkaXJ0aWVkIHNvIGZhci4KJiM0MzsJICovCiYjNDM7CWlmIChwbWRfdHJhbnNfaHVnZShwbWRwX2dldF9sb2NrbGVzcyh2bWYtJmd0O3BtZCkpKQomIzQzOwkJZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwllbHNlCiYjNDM7CQlkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eV9yYW5nZShmb2xpbywgb2ZmLCBQQUdFX1NJWkUpOwogCVZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7CiAJLyoKIAkgKiBUYWtlIGEgbG9jYWwgY29weSBvZiB0aGUgYWRkcmVzc19zcGFjZSAtIGZvbGlvLm1hcHBpbmcgbWF5IGJlIHplcm9lZApAQCAtNTYyNSw2ICYjNDM7NTYzNCwzMSBAQCB2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYQogfQogI2VuZGlmCiAKJiM0MzsvKgomIzQzOyAqIE1heSB0aGUgd2hvbGUgYmF0Y2ggYmUgbWFya2VkIGRpcnR5PwomIzQzOyAqCiYjNDM7ICogT25seSBhIHNoYXJlZCBtYXBwaW5nIG9mIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXIgYmxvY2sgc2F5cwomIzQzOyAqIG5vLiBUaGVyZSB0aGUgcGFnZSB0YWJsZSBkaXJ0eSBiaXRzIGFyZSB0aGUgb25seSByZWNvcmQgb2Ygd2hpY2ggcGFydHMgb2YgYQomIzQzOyAqIGxhcmdlIGZvbGlvIHdlcmUgd3JpdHRlbiB0aHJvdWdoIHRoZSBtYXBwaW5nLCBzbyBwYWdlcyBub2JvZHkgaGFzIHN0b3JlZCB0bwomIzQzOyAqIGhhdmUgdG8gc3RheSBjbGVhbiBhbmQgbGV0IHRoZSBoYXJkd2FyZSBzZXQgdGhlIGJpdCBvbiB0aGUgZmlyc3Qgc3RvcmUuCiYjNDM7ICoKJiM0MzsgKiBFdmVyeXdoZXJlIGVsc2Ugbm90aGluZyBldmVyIHJlYWRzIHRob3NlIGJpdHMsIGFuZCBvbiBoYXJkd2FyZSB3aXRob3V0IGEKJiM0MzsgKiBkaXJ0eSBiaXQgbGVhdmluZyB0aGVtIGNsZWFuIGNvc3RzIGEgZmF1bHQgcGVyIHBhZ2UgZm9yIG5vdGhpbmcuIFRoYXQgY292ZXJzCiYjNDM7ICogc2htZW0sIHdoaWNoIGhhcyBubyBkaXJ0eSBzdGF0ZSBiZWxvdyB0aGUgZm9saW8uCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsCiYjNDM7CQkJCSAgYm9vbCBwcmVmYXVsdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLSZndDt2bWE7CiYjNDM7CiYjNDM7CWlmICghKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURSkgfHwgcHJlZmF1bHQgfHwgbnIgPT0gMSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1NIQVJFRCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuICF2bWEtJmd0O3ZtX2ZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvX3JhbmdlOwomIzQzO30KJiM0MzsKIC8qKgogICogc2V0X3B0ZV9yYW5nZSAtIFNldCBhIHJhbmdlIG9mIFBURXMgdG8gcG9pbnQgdG8gcGFnZXMgaW4gYSBmb2xpby4KICAqIEB2bWY6IEZhdWx0IGRlc2NyaXB0aW9uLgpAQCAtNTYzOSw2ICYjNDM7NTY3Myw3IEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0mZ3Q7dm1hOwogCWJvb2wgd3JpdGUgPSB2bWYtJmd0O2ZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfV1JJVEU7CiAJYm9vbCBwcmVmYXVsdCA9ICFpbl9yYW5nZSh2bWYtJmd0O2FkZHJlc3MsIGFkZHIsIG5yICogUEFHRV9TSVpFKTsKJiM0MzsJYm9vbCBkaXJ0eV9iYXRjaCA9IGNhbl9kaXJ0eV93aG9sZV9iYXRjaCh2bWYsIG5yLCBwcmVmYXVsdCk7CiAJcHRlX3QgZW50cnk7CiAKIAlmbHVzaF9pY2FjaGVfcGFnZXModm1hLCBwYWdlLCBucik7CkBAIC01NjQ5LDEwICYjNDM7NTY4NCwxMyBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZWxzZQogCQllbnRyeSA9IHB0ZV9zd19ta3lvdW5nKGVudHJ5KTsKIAotCWlmICh3cml0ZSkKLQkJZW50cnkgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTsKLQllbHNlIGlmIChwdGVfd3JpdGUoZW50cnkpICZhbXA7JmFtcDsgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpCiYjNDM7CWlmICh3cml0ZSkgewomIzQzOwkJaWYgKGRpcnR5X2JhdGNoKQomIzQzOwkJCWVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpOwomIzQzOwkJZW50cnkgPSBtYXliZV9ta3dyaXRlKGVudHJ5LCB2bWEpOwomIzQzOwl9IGVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkgewogCQllbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTsKJiM0MzsJfQogCWlmICh1bmxpa2VseSh2bWZfb3JpZ19wdGVfdWZmZF93cCh2bWYpKSkKIAkJZW50cnkgPSBwdGVfbWt1ZmZkKGVudHJ5KTsKIAkvKiBjb3B5LW9uLXdyaXRlIHBhZ2UgKi8KQEAgLTU2NjUsNiAmIzQzOzU3MDMsMTggQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCX0KIAlzZXRfcHRlcyh2bWEtJmd0O3ZtX21tLCBhZGRyLCB2bWYtJmd0O3B0ZSwgZW50cnksIG5yKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUgcGFnZSB0aGUgZmF1bHQgd2FzIGZvciBpcyBhYm91dCB0byBiZSBzdG9yZWQgdG8sIHNvIGRpcnR5IGl0CiYjNDM7CSAqIGhlcmUgcmF0aGVyIHRoYW4gbGVhdmUgdGhlIHN0b3JlIHRvIGEgc2Vjb25kIHBhZ2UgdGFibGUgd2Fsaywgb3IgdG8KJiM0MzsJICogYSBzZWNvbmQgZmF1bHQgd2hlcmUgdGhlIGRpcnR5IGJpdCBpcyBtYWludGFpbmVkIGluIHNvZnR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFkaXJ0eV9iYXRjaCkgewomIzQzOwkJcHRlX3QgKnB0ZXAgPSB2bWYtJmd0O3B0ZSAmIzQzOyAoKHZtZi0mZ3Q7YWRkcmVzcyAtIGFkZHIpICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwomIzQzOwkJcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgdm1mLSZndDthZGRyZXNzLCBwdGVwLAomIzQzOwkJCQkgICAgICBwdGVfbWtkaXJ0eShwdGVwX2dldChwdGVwKSksIDEpOwomIzQzOwl9CiYjNDM7CiAJLyogbm8gbmVlZCB0byBpbnZhbGlkYXRlOiBhIG5vdC1wcmVzZW50IHBhZ2Ugd29uJiMzOTt0IGJlIGNhY2hlZCAqLwogCXVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uodm1mLCB2bWEsIGFkZHIsIHZtZi0mZ3Q7cHRlLCBucik7CiB9CmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCA2YzljN2JhODliOGE5Li4zOWI1NGMyNWE5ZmFiIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTI3NTEsNiAmIzQzOzI3NTEsMjEgQEAgYm9vbCBmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCiB9CiBFWFBPUlRfU1lNQk9MKGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSk7CiAKJiM0MzsvKgomIzQzOyAqIEhhbmQgYSBkaXJ0aWVkIHJhbmdlIG9mIEBmb2xpbyB0byB0aGUgZmlsZXN5c3RlbS4gIC0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UoKSBjYW4KJiM0MzsgKiBleHByZXNzIGV2ZXJ5dGhpbmcgLSZndDtkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdAomIzQzOyAqIGRvZXMgbm90IG5lZWQgYm90aCwgYW5kIGEgd2hvbGUtZm9saW8gZGlydHkgY29tZXMgdGhyb3VnaCBoZXJlIGFzIGEgcmFuZ2UKJiM0MzsgKiBjb3ZlcmluZyB0aGUgZm9saW8uCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgbWFwcGluZ19kaXJ0eV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkJc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWlmICghbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvX3JhbmdlKQomIzQzOwkJcmV0dXJuIG1hcHBpbmctJmd0O2Ffb3BzLSZndDtkaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiYjNDM7CiYjNDM7CXJldHVybiBtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGZvbGlvX21hcmtfZGlydHkgLSBNYXJrIGEgZm9saW8gYXMgYmVpbmcgbW9kaWZpZWQuCiAgKiBAZm9saW86IFRoZSBmb2xpby4KQEAgLTI3ODIsMTMgJiM0MzsyNzk3LDM5IEBAIGJvb2wgZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpCiAJCQlmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTsKLQkJcmV0dXJuIG1hcHBpbmctJmd0O2Ffb3BzLSZndDtkaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiYjNDM7CQlyZXR1cm4gbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywgMCwKJiM0MzsJCQkJCSAgIGZvbGlvX3NpemUoZm9saW8pKTsKIAl9CiAKIAlyZXR1cm4gbm9vcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiB9CiBFWFBPUlRfU1lNQk9MKGZvbGlvX21hcmtfZGlydHkpOwogCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWFya19kaXJ0eV9yYW5nZSAtIE1hcmsgcGFydCBvZiBhIGZvbGlvIGFzIGJlaW5nIG1vZGlmaWVkLgomIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvLgomIzQzOyAqIEBvZmY6IE9mZnNldCBvZiB0aGUgbW9kaWZpZWQgcmFuZ2Ugd2l0aGluIHRoZSBmb2xpby4KJiM0MzsgKiBAbGVuOiBMZW5ndGggb2YgdGhlIG1vZGlmaWVkIHJhbmdlLgomIzQzOyAqCiYjNDM7ICogTGlrZSBmb2xpb19tYXJrX2RpcnR5KCksIGJ1dCB0ZWxscyBhIGZpbGVzeXN0ZW0gdGhhdCB0cmFja3MgZGlydHkgc3RhdGUgcGVyCiYjNDM7ICogYmxvY2sgdGhhdCBvbmx5IFtAb2ZmLCBAb2ZmICYjNDM7IEBsZW4pIGNoYW5nZWQsIHNvIHdyaXRlYmFjayBjYW4gc2tpcCB0aGUgcmVzdAomIzQzOyAqIG9mIHRoZSBmb2xpby4gIEZpbGVzeXN0ZW1zIHdpdGhvdXQgdGhhdCB0cmFja2luZyBkaXJ0eSB0aGUgd2hvbGUgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRydWUgaWYgdGhlIGZvbGlvIHdhcyBuZXdseSBkaXJ0aWVkLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBkaXJ0eS4KJiM0MzsgKi8KJiM0Mztib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChsaWtlbHkobWFwcGluZykpIHsKJiM0MzsJCWlmIChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKQomIzQzOwkJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwomIzQzOwkJcmV0dXJuIG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbm9vcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiYjNDM7fQomIzQzOwogLyoKICAqIGZvbGlvX21hcmtfZGlydHkoKSBpcyByYWN5IGlmIHRoZSBjYWxsZXIgaGFzIG5vIHJlZmVyZW5jZSBhZ2FpbnN0CiAgKiBmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdCwgYW5kIGlmIHRoZSBmb2xpbyBpcyB1bmxvY2tlZC4gIFRoaXMgaXMgYmVjYXVzZSBhbm90aGVyCkBAIC0yODQ0LDYgJiM0MzsyODg1LDQxIEBAIHZvaWQgX19mb2xpb19jYW5jZWxfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIEVYUE9SVF9TWU1CT0woX19mb2xpb19jYW5jZWxfZGlydHkpOwogCiYjNDM7LyoKJiM0MzsgKiBXcml0ZS1wcm90ZWN0IGV2ZXJ5IG1hcHBpbmcgb2YgQGZvbGlvIGFuZCBoYW5kIHRoZSBmaWxlc3lzdGVtIHRoZSBwYXJ0cyB0aGF0CiYjNDM7ICogd2VyZSBkaXJ0eSBpbiBhIHBhZ2UgdGFibGUuCiYjNDM7ICoKJiM0MzsgKiBXaXRob3V0IC0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UoKSB0aGVyZSBpcyBub3doZXJlIHRvIHB1dCBwZXItYmxvY2sgc3RhdGUsIHNvCiYjNDM7ICogYW55IFBURSBkaXJ0eSBiaXQgZGlydGllcyB0aGUgd2hvbGUgZm9saW8uICBTYW1lIHdoZW4gdGhlIGZvbGlvIGlzIG5vdAomIzQzOyAqIGFscmVhZHkgZGlydHksIGJlY2F1c2UgdGhlbiB0aGUgZGlydHkgdHJhbnNpdGlvbiBuZWVkcyB0aGUgZnVsbCBhY2NvdW50aW5nCiYjNDM7ICogaW4gZm9saW9fbWFya19kaXJ0eSgpLCBhbmQgZm9yIGEgZm9saW8gdG9vIGxhcmdlIGZvciB0aGUgYml0bWFwLCB3aGljaCB0aGUKJiM0MzsgKiBwYWdlIGNhY2hlIGRvZXMgbm90IG1ha2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZm9saW9fbWtjbGVhbl9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQomIzQzO3sKJiM0MzsJREVDTEFSRV9CSVRNQVAobWFwLCAxVUwgJmx0OyZsdDsgTUFYX1BBR0VDQUNIRV9PUkRFUik7CiYjNDM7CXVuc2lnbmVkIGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7CiYjNDM7CiYjNDM7CWlmICghbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fAomIzQzOwkgICAgV0FSTl9PTl9PTkNFKG5yICZndDsgKDFVTCAmbHQ7Jmx0OyBNQVhfUEFHRUNBQ0hFX09SREVSKSkpIHsKJiM0MzsJCWlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSkKJiM0MzsJCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwliaXRtYXBfemVybyhtYXAsIG5yKTsKJiM0MzsJaWYgKCFmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBtYXApKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucikgewomIzQzOwkJbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywKJiM0MzsJCQkJICAgIChzaXplX3Qpc3RhcnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJICAgIChzaXplX3QpKGVuZCAtIHN0YXJ0KSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBDbGVhciBhIGZvbGlvJiMzOTtzIGRpcnR5IGZsYWcsIHdoaWxlIGNhcmluZyBmb3IgZGlydHkgbWVtb3J5IGFjY291bnRpbmcuCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbGlvIHdhcyBwcmV2aW91c2x5IGRpcnR5LgpAQCAtMjg3NSw5ICYjNDM7Mjk1MSw5IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCSAqCiAJCSAqIFdlIHVzZSB0aGlzIHNlcXVlbmNlIHRvIG1ha2Ugc3VyZSB0aGF0CiAJCSAqICAoYSkgd2UgYWNjb3VudCBmb3IgZGlydHkgc3RhdHMgcHJvcGVybHkKLQkJICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB0bwotCQkgKiAgICAgIG1hcmsgdGhlIHdob2xlIGZvbGlvIGRpcnR5IGlmIGl0IHdhcwotCQkgKiAgICAgIGRpcnR5IGluIGEgcGFnZXRhYmxlLiBPbmx5IHRvIHRoZW4KJiM0MzsJCSAqICAoYikgd2UgdGVsbCB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gd2hpY2gKJiM0MzsJCSAqICAgICAgcGFydHMgb2YgdGhlIGZvbGlvIHdlcmUgZGlydHkgaW4gYQomIzQzOwkJICogICAgICBwYWdldGFibGUuIE9ubHkgdG8gdGhlbgogCQkgKiAgKGMpIGNsZWFuIHRoZSBmb2xpbyBhZ2FpbiBhbmQgcmV0dXJuIDEgdG8KIAkJICogICAgICBjYXVzZSB0aGUgd3JpdGViYWNrLgogCQkgKgpAQCAtMjg5NSw4ICYjNDM7Mjk3MSw3IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCSAqIGFzIGEgc2VyaWFsaXphdGlvbiBwb2ludCBmb3IgYWxsIHRoZSBkaWZmZXJlbnQKIAkJICogdGhyZWFkcyBkb2luZyB0aGVpciB0aGluZ3MuCiAJCSAqLwotCQlpZiAoZm9saW9fbWtjbGVhbihmb2xpbykpCi0JCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJCWZvbGlvX21rY2xlYW5fZm9yX2lvKGZvbGlvLCBtYXBwaW5nKTsKIAkJLyoKIAkJICogV2UgY2FyZWZ1bGx5IHN5bmNocm9uaXNlIGZhdWx0IGhhbmRsZXJzIGFnYWluc3QKIAkJICogaW5zdGFsbGluZyBhIGRpcnR5IHB0ZSBhbmQgbWFya2luZyB0aGUgZm9saW8gZGlydHkKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAxZjcyZDI3OWJhNjhmLi5hYWY0NWFjNzlmYTg0IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0xMTAwLDEyICYjNDM7MTEwMCwxOCBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLAogCXJldHVybiByd2MuY29udGVuZGVkID8gLTEgOiBwcmEucmVmZXJlbmNlZDsKIH0KIAotc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiYjNDM7c3RydWN0IG1rY2xlYW5fc3RhdGUgewomIzQzOwl1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXA7CiYjNDM7CWludCBjbGVhbmVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsCiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcCkKIHsKLQlpbnQgY2xlYW5lZCA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LSZndDt2bWE7Ci0Jc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBwdm13LSZndDthZGRyZXNzOwomIzQzOwlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwomIzQzOwlpbnQgY2xlYW5lZCA9IDA7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gYXNzdW1lIHRoZSB3b3JzZSBjYXNlIGllIHBtZCBmb3IgaW52YWxpZGF0aW9uLiBOb3RlIHRoYXQKQEAgLTExMzQsNiAmIzQzOzExNDAsMTUgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJCQlpZiAoIXB0ZV9kaXJ0eShlbnRyeSkgJmFtcDsmYW1wOyAhcHRlX3dyaXRlKGVudHJ5KSkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmIChkaXJ0eV9tYXAgJmFtcDsmYW1wOyBwdGVfZGlydHkoZW50cnkpKSB7CiYjNDM7CQkJCXBnb2ZmX3QgaWR4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSAtCiYjNDM7CQkJCQkgICAgICBwdm13LSZndDtwZ29mZjsKJiM0MzsKJiM0MzsJCQkJLyogVGhlIHdhbGsgb25seSB2aXNpdHMgcGFnZXMgb2YgdGhpcyBmb2xpbyAqLwomIzQzOwkJCQlWTV9XQVJOX09OX09OQ0UoaWR4ICZndDs9IHB2bXctJmd0O25yX3BhZ2VzKTsKJiM0MzsJCQkJX19zZXRfYml0KGlkeCwgZGlydHlfbWFwKTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcywgcHRlX3BmbihlbnRyeSkpOwogCQkJZW50cnkgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHRlKTsKIAkJCWVudHJ5ID0gcHRlX3dycHJvdGVjdChlbnRyeSk7CkBAIC0xMTU1LDYgJiM0MzsxMTcwLDkgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJCQlpZiAoIXBtZF9kaXJ0eShlbnRyeSkgJmFtcDsmYW1wOyAhcG1kX3dyaXRlKGVudHJ5KSkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmIChkaXJ0eV9tYXAgJmFtcDsmYW1wOyBwbWRfZGlydHkoZW50cnkpKQomIzQzOwkJCQliaXRtYXBfc2V0KGRpcnR5X21hcCwgMCwgcHZtdy0mZ3Q7bnJfcGFnZXMpOwomIzQzOwogCQkJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLAogCQkJCQkgIGFkZHJlc3MgJiM0MzsgSFBBR0VfUE1EX1NJWkUpOwogCQkJZW50cnkgPSBwbWRwX2ludmFsaWRhdGUodm1hLCBhZGRyZXNzLCBwbWQpOwpAQCAtMTE4MSw5ICYjNDM7MTE5OSw5IEBAIHN0YXRpYyBib29sIHBhZ2VfbWtjbGVhbl9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKQogewogCURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCBQVk1XX1NZTkMpOwotCWludCAqY2xlYW5lZCA9IGFyZzsKJiM0MzsJc3RydWN0IG1rY2xlYW5fc3RhdGUgKnN0YXRlID0gYXJnOwogCi0JKmNsZWFuZWQgJiM0Mzs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKCZhbXA7cHZtdyk7CiYjNDM7CXN0YXRlLSZndDtjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcsIHN0YXRlLSZndDtkaXJ0eV9tYXApOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMTk2LDEyICYjNDM7MTIxNCwyMyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX21rY2xlYW5fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpCiAJcmV0dXJuIHRydWU7CiB9CiAKLWludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCAtIFdyaXRlLXByb3RlY3QgYSBmb2xpbyBhbmQgcmVwb3J0IHdoYXQgd2FzIGRpcnR5LgomIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIGNsZWFuLgomIzQzOyAqIEBkaXJ0eV9tYXA6IEJpdG1hcCBvZiBhdCBsZWFzdCBmb2xpb19ucl9wYWdlcyhAZm9saW8pIGJpdHMsIG9yIE5VTEwuCiYjNDM7ICoKJiM0MzsgKiBXcml0ZS1wcm90ZWN0cyBhbmQgY2xlYW5zIGV2ZXJ5IG1hcHBpbmcgb2YgQGZvbGlvLiAgV2l0aCBAZGlydHlfbWFwLCBzZXRzIGEKJiM0MzsgKiBiaXQgZm9yIGVhY2ggcGFnZSB3aG9zZSBlbnRyeSB3YXMgZGlydHk7IGEgUE1ELW1hcHBlZCBmb2xpbyBoYXMgb25lIGRpcnR5CiYjNDM7ICogYml0IGZvciBhbGwgb2YgaXQsIHNvIGV2ZXJ5IHBhZ2UgaXMgcmVwb3J0ZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIGNsZWFuZWQuCiYjNDM7ICovCiYjNDM7aW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKQogewotCWludCBjbGVhbmVkID0gMDsKJiM0MzsJc3RydWN0IG1rY2xlYW5fc3RhdGUgc3RhdGUgPSB7IC5kaXJ0eV9tYXAgPSBkaXJ0eV9tYXAgfTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0gewotCQkuYXJnID0gKHZvaWQgKikmYW1wO2NsZWFuZWQsCiYjNDM7CQkuYXJnID0gKHZvaWQgKikmYW1wO3N0YXRlLAogCQkucm1hcF9vbmUgPSBwYWdlX21rY2xlYW5fb25lLAogCQkuaW52YWxpZF92bWEgPSBpbnZhbGlkX21rY2xlYW5fdm1hLAogCX07CkBAIC0xMjE3LDcgJiM0MzsxMjQ2LDEyIEBAIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAlybWFwX3dhbGsoZm9saW8sICZhbXA7cndjKTsKIAotCXJldHVybiBjbGVhbmVkOwomIzQzOwlyZXR1cm4gc3RhdGUuY2xlYW5lZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX21rY2xlYW4pOwogCkBAIC0xMjQxLDcgJiM0MzsxMjc1LDcgQEAgc3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCS5mbGFncwkJPSBQVk1XX1NZTkMsCiAJfTsKIAotCXN0YXRlLSZndDtjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcpOwomIzQzOwlzdGF0ZS0mZ3Q7Y2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoJmFtcDtwdm13LCBOVUxMKTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMTMyNCw3ICYjNDM7MTM1OCw3IEBAIGludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZiwKIAlwdm13LmFkZHJlc3MgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmLCBucl9wYWdlcyk7CiAJVk1fQlVHX09OX1ZNQShwdm13LmFkZHJlc3MgPT0gLUVGQVVMVCwgdm1hKTsKIAotCXJldHVybiBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcpOwomIzQzOwlyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoJmFtcDtwdm13LCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19mb2xpb19tb2Rfc3RhdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbnIsIGludCBucl9wbWRtYXBwZWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3Vic3RhbnRpYWwgS2VybmVsIE1lbW9yeSBhbmQgRmlsZXN5c3RlbSBNb2RpZmljYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUgKipzZXJpb3VzKiogY29yZSBpbmZyYXN0cnVjdHVyZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyBkZWVwIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCwgdmlydHVhbCBmaWxlc3lzdGVtIGNvZGUgKFZGUyksIGBpb21hcGAsIGFuZCBldmVuIFhGUy4gVGhlIHNwZWNpZmljIGZpbGVzIHRlbGwgdGhlIHN0b3J5OiBjaGFuZ2VzIHRvIGBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZWAsIGBpb21hcF9kaXJ0eV9mb2xpb2AsIGBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXJgLCBhbmQgYGlvbWFwX3BhZ2VfbWt3cml0ZWAgaW5kaWNhdGUgZnVuZGFtZW50YWwgYWRqdXN0bWVudHMgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBidWZmZXJlZCBJL08gdGhyb3VnaCBgaW9tYXBgLiBUaGUgaW5jbHVzaW9uIG9mIGAuZGlydHlfZm9saW9fcmFuZ2UgPSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZWAgd2l0aGluIGB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zYCBpcyBzaWduaWZpY2FudCwgZGlyZWN0bHkgaW50ZWdyYXRpbmcgdGhlc2UgYGlvbWFwYCBjaGFuZ2VzIGludG8gWEZTJiMzOTtzIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucy4KClRoZSBpbmNsdWRlIGZpbGVzIC0tIGBmcy5oYCwgYGlvbWFwLmhgLCBgbW0uaGAsIGFuZCBgcm1hcC5oYCAtLSBzaG93IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgbm90IGlzb2xhdGVkOyB0aGV5JiMzOTtyZSBleHBhbmRpbmcgdGhlIGBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNgIHN0cnVjdHVyZSwgYW5kIGFkZGluZyBuZXcgZnVuY3Rpb25zIGxpa2UgYGZvbGlvX21hcmtfZGlydHlfcmFuZ2VgLCBhbmQgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgLiBUaGUgTU0gY29kZSBpcyBhbHNvIGhlYXZpbHkgaW52b2x2ZWQsIHdpdGggYGZhdWx0X2RpcnR5X3NoYXJlZF9wYWdlYCwgYGNhbl9kaXJ0eV93aG9sZV9iYXRjaGAsIGFuZCBgc2V0X3B0ZV9yYW5nZWAgYmVpbmcgbW9kaWZpZWQsIGFsb25nc2lkZSBjaGFuZ2VzIHRvIHBhZ2Ugd3JpdGViYWNrIHZpYSBmdW5jdGlvbnMgbGlrZSBgbWFwcGluZ19kaXJ0eV9yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5YCwgYW5kIGBmb2xpb19ta2NsZWFuX2Zvcl9pb2AsIGFzIHdlbGwgYXMgcm1hcCAocmV2ZXJzZSBtYXApIG1vZGlmaWNhdGlvbnMuICBUaGUgY2hhbmdlcyB0byBybWFwIGxvb2sgdG8gc3VwcG9ydCBmb2xpbyBvcGVyYXRpb25zLCBzbyB0aGlzIGNvdWxkIGJlIGEgbWFqb3IgbWVtb3J5IHJlY2xhbWF0aW9uIG9yIHZpcnR1YWwgbWVtb3J5IGNoYW5nZS4KClRoaXMgaXMgYSAqKm1ham9yKiogYXJlYSBvZiB0aGUga2VybmVsLCBhZmZlY3RpbmcgcGFnZSBjYWNoZSB3cml0ZWJhY2ssIGZhdWx0aW5nIHNoYXJlZCBwYWdlcywgbWt3cml0ZSBvcGVyYXRpb25zLCByZXZlcnNlIG1hcHBpbmcsIGJ1ZmZlcmVkIElPLCBhbmQgWEZTISBBbmQgdGhvc2UgYXJlIGp1c3QgdGhlIG9idmlvdXMgZnVuY3Rpb25zIHRoYXQgd2VyZSBjaGFuZ2VkLiBUaGUgaW1wYWN0IG9mIHN1Y2ggY2hhbmdlcyBjb3VsZCBiZSBmYXItcmVhY2hpbmcuIEdpdmVuIHRoZSByZWFjaCBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgY29kZSBpcyBlYXNpbHkgcmVhY2hhYmxlIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cHMg4oCTIHRoaW5rIFFFTVUgb3IgZXZlbiBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgb3B0aW9ucywgdG8gdW5kZXJzdGFuZCB3aGF0IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHdvdWxkIGV4cG9zZSB0aGlzIGNvZGUuIEkgbmVlZCB0byBrbm93IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgdG8gc2VlIHRoZSBleHBvc2VkIGF0dGFjayBzdXJmYWNlLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBtYW51YWxseSBnbyB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGZzL3hmcy9LY29uZmlnYCBhbmQgYGZzL2lvbWFwL0tjb25maWdgLCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZpbmQgdGhlIGVuYWJsZWQgc3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfSU9NQVB8Y29uZmlnIFhGU19GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcbi0tXG5mcy9LY29uZmlnLTE3LVxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcbmZzL0tjb25maWctMTktXHRib29sXG4tLVxuZnMveGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3hmcy9LY29uZmlnOjI6Y29uZmlnIFhGU19GU1xuZnMveGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1hGUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlhGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogQSBRdWljayBBdWRpdCoqCgpPa2F5LCBzbyBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIFhGUyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYGZzL3hmcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIGl0LiBJIHdhbnQgdG8gemVybyBpbiBvbiB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGtlcm5lbCBzdWJzeXN0ZW1zIFhGUyBpcyBwdWxsaW5nIGluIHRocm91Z2ggJiMzNDtzZWxlY3QmIzM0OyBvciAmIzM0O2RlcGVuZHMgb24mIzM0OyBkaXJlY3RpdmVzLiBNeSBnb2FsIGlzIGEgaGlnaC1sZXZlbCBvdmVydmlldyDigJMgbG9va2luZyBmb3IgYW55IHN1YnRsZSByZWxhdGlvbnNoaXBzIG9yIGltcGxpZWQgY29uc3RyYWludHMgdGhhdCBtaWdodCBpbXBhY3QgbXkgY3VycmVudCBmb2N1cywgd2hhdGV2ZXIgaXQgbWF5IGJlLiBJJiMzOTttIG5vdCBhZnRlciBsaW5lLWJ5LWxpbmUgdW5kZXJzdGFuZGluZywganVzdCB0aGUga2V5IGRlcGVuZGVuY2llcyB0aGF0IGRpY3RhdGUgdGhlIFhGUyBidWlsZCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMveGZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgWEZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtYRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA1Olx0XHRzZWxlY3QgRVhQT1JURlNcbiAgIDY6XHRcdHNlbGVjdCBDUkMzMlxuICAgNzpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFhGUyBpcyBhIGhpZ2ggcGVyZm9ybWFuY2Ugam91cm5hbGluZyBmaWxlc3lzdGVtIHdoaWNoIG9yaWdpbmF0ZWRcbiAgMTA6XHRcdCAgb24gdGhlIFNHSSBJUklYIHBsYXRmb3JtLiAgSXQgaXMgY29tcGxldGVseSBtdWx0aS10aHJlYWRlZCwgY2FuXG4gIDExOlx0XHQgIHN1cHBvcnQgbGFyZ2UgZmlsZXMgYW5kIGxhcmdlIGZpbGVzeXN0ZW1zLCBleHRlbmRlZCBhdHRyaWJ1dGVzLFxuICAxMjpcdFx0ICB2YXJpYWJsZSBibG9jayBzaXplcywgaXMgZXh0ZW50IGJhc2VkLCBhbmQgbWFrZXMgZXh0ZW5zaXZlIHVzZSBvZlxuICAxMzpcdFx0ICBCdHJlZXMgKGRpcmVjdG9yaWVzLCBleHRlbnRzLCBmcmVlIHNwYWNlKSB0byBhaWQgYm90aCBwZXJmb3JtYW5jZVxuICAxNDpcdFx0ICBhbmQgc2NhbGFiaWxpdHkuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGF0IFx1MDAzY2h0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMvXHUwMDNlXG4gIDE3Olx0XHQgIGZvciBjb21wbGV0ZSBkZXRhaWxzLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBvbi1kaXNrIGNvbXBhdGlibGVcbiAgMTg6XHRcdCAgd2l0aCB0aGUgSVJJWCB2ZXJzaW9uIG9mIFhGUy5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAyMTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeGZzLiAgQmUgYXdhcmUsIGhvd2V2ZXIsIHRoYXQgaWYgdGhlIGZpbGVcbiAgMjI6XHRcdCAgc3lzdGVtIG9mIHlvdXIgcm9vdCBwYXJ0aXRpb24gaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHlvdSYjMzk7bGwgbmVlZFxuICAyMzpcdFx0ICB0byB1c2UgYW4gaW5pdGlhbCByYW1kaXNrIChpbml0cmQpIHRvIGJvb3QuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFhGU19TVVBQT1JUX1Y0XG4gIDI2Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZGVwcmVjYXRlZCBWNCAoY3JjPTApIGZvcm1hdFwmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBYRlNfRlNcbiAgMjg6XHRcdGRlZmF1bHQgblxuICAyOTpcdFx0aGVscFxuICAzMDpcdFx0ICBUaGUgVjQgZmlsZXN5c3RlbSBmb3JtYXQgbGFja3MgY2VydGFpbiBmZWF0dXJlcyB0aGF0IGFyZSBzdXBwb3J0ZWRcbiAgMzE6XHRcdCAgYnkgdGhlIFY1IGZvcm1hdCwgc3VjaCBhcyBtZXRhZGF0YSBjaGVja3N1bW1pbmcsIHN0cmVuZ3RoZW5lZFxuICAzMjpcdFx0ICBtZXRhZGF0YSB2ZXJpZmljYXRpb24sIGFuZCB0aGUgYWJpbGl0eSB0byBzdG9yZSB0aW1lc3RhbXBzIHBhc3QgdGhlXG4gIDMzOlx0XHQgIHllYXIgMjAzOC4gIEJlY2F1c2Ugb2YgdGhpcywgdGhlIFY0IGZvcm1hdCBpcyBkZXByZWNhdGVkLiAgQWxsIHVzZXJzXG4gIDM0Olx0XHQgIHNob3VsZCB1cGdyYWRlIGJ5IGJhY2tpbmcgdXAgdGhlaXIgZmlsZXMsIHJlZm9ybWF0dGluZywgYW5kIHJlc3RvcmluZ1xuICAzNTpcdFx0ICBmcm9tIHRoZSBiYWNrdXAuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIEFkbWluaXN0cmF0b3JzIGFuZCB1c2VycyBjYW4gZGV0ZWN0IGEgVjQgZmlsZXN5c3RlbSBieSBydW5uaW5nXG4gIDM4Olx0XHQgIHhmc19pbmZvIGFnYWluc3QgYSBmaWxlc3lzdGVtIG1vdW50cG9pbnQgYW5kIGNoZWNraW5nIGZvciBhIHN0cmluZ1xuICAzOTpcdFx0ICBiZWdpbm5pbmcgd2l0aCBcJiMzNDtjcmM9XCYjMzQ7LiAgSWYgdGhlIHN0cmluZyBcJiMzNDtjcmM9MFwmIzM0OyBpcyBmb3VuZCwgdGhlXG4gIDQwOlx0XHQgIGZpbGVzeXN0ZW0gaXMgYSBWNCBmaWxlc3lzdGVtLiAgSWYgbm8gc3VjaCBzdHJpbmcgaXMgZm91bmQsIHBsZWFzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBYRlMgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIFhGU19GUyBpcyB1c2luZyBCTE9DSyBhbmQgRlNfSU9NQVAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY2hvaWNlLiBJJiMzOTttIGFsc28gcmVtaW5kZWQgdGhhdCBtbS9tZW1vcnkuYywgbW0vcGFnZS13cml0ZWJhY2suYywgYW5kIG1tL3JtYXAuYyBhcmUgYWxsIGZvdW5kYXRpb25hbCB0byB0aGUgY29yZSBNZW1vcnkgTWFuYWdlbWVudCAoTU0pIGxheWVyLiBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBldmVyeXRoaW5nIGlzIHdvcmtpbmcgdG9nZXRoZXIgaW4gdGhhdCBhcmVhLgoKU2luY2UgWEZTIGlzIHV0aWxpemluZyBGU19JT01BUCwgSSB3b25kZXIgaWYgb3RoZXIgZmlsZXN5c3RlbXMgYXJlIGRvaW5nIHRoZSBzYW1lLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGZpbGVzeXN0ZW1zIGxldmVyYWdlIGlvbWFwIG9yIHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLiBBIHF1aWNrIGBncmVwYCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGBkaXJ0eV9mb2xpb19yYW5nZWAgc2hvdWxkIGhlbHAgbWUgaWRlbnRpZnkgYW55IG90aGVyIHBvdGVudGlhbCB1c2VycyBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIGJyb2FkZXIgY29udGV4dCB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlydHlfZm9saW9fcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz04NDg9RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg0OS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODUwOmJvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg1MS1cdFx0c2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg1Ni19XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjg1NzpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg1OC1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODU5PWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg2MC17XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjg2MTpcdHJldHVybiBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgMCwgZm9saW9fc2l6ZShmb2xpbykpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NjItfVxuLS1cbmZzL3hmcy94ZnNfYW9wcy5jPTg2Mj1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMveGZzL3hmc19hb3BzLmMtODY1LVx0LndyaXRlcGFnZXNcdFx0PSB4ZnNfdm1fd3JpdGVwYWdlcyxcbmZzL3hmcy94ZnNfYW9wcy5jOjg2NjpcdC5kaXJ0eV9mb2xpb19yYW5nZVx0PSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSxcbmZzL3hmcy94ZnNfYW9wcy5jLTg2Ny1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9NDAxPXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMge1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaC00MDktXHQvKiBNYXJrIFtvZmYsIG9mZiAmIzQzOyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi9cbmluY2x1ZGUvbGludXgvZnMuaDo0MTA6XHRib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuaW5jbHVkZS9saW51eC9mcy5oLTQxMS1cdFx0XHRcdCAgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4tLVxuaW5jbHVkZS9saW51eC9pb21hcC5oPTQ0NT1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaW9tYXAuaDo0NDY6Ym9vbCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvaW9tYXAuaC00NDctXHRcdHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xuLS1cbm1tL21lbW9yeS5jPTU2NDk9c3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsXG4tLVxubW0vbWVtb3J5LmMtNTY1OC1cbm1tL21lbW9yeS5jOjU2NTk6XHRyZXR1cm4gIXZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZTtcbm1tL21lbW9yeS5jLTU2NjAtfVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjc1Mj1FWFBPUlRfU1lNQk9MKGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSk7XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yNzU0LS8qXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3NTU6ICogSGFuZCBhIGRpcnRpZWQgcmFuZ2Ugb2YgQGZvbGlvIHRvIHRoZSBmaWxlc3lzdGVtLiAgLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgY2FuXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NTYtICogZXhwcmVzcyBldmVyeXRoaW5nIC1cdTAwM2VkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdFxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjc2MD1zdGF0aWMgYm9vbCBtYXBwaW5nX2RpcnR5X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc2Mi17XG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3NjM6XHRpZiAoIW1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UpXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NjQtXHRcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc2NS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6Mjc2NjpcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCBvZmYsIGxlbik7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NjctfVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjg4Nj1FWFBPUlRfU1lNQk9MKF9fZm9saW9fY2FuY2VsX2RpcnR5KTtcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI4OTEtICpcbm1tL3BhZ2Utd3JpdGViYWNrLmM6Mjg5MjogKiBXaXRob3V0IC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIHRoZXJlIGlzIG5vd2hlcmUgdG8gcHV0IHBlci1ibG9jayBzdGF0ZSwgc29cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjg5My0gKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0yODk4PXN0YXRpYyB2b2lkIGZvbGlvX21rY2xlYW5fZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yOTA0LVxubW0vcGFnZS13cml0ZWJhY2suYzoyOTA1Olx0aWYgKCFtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxubW0vcGFnZS13cml0ZWJhY2suYy0yOTA2LVx0ICAgIFdBUk5fT05fT05DRShuciBcdTAwM2UgKDFVTCBcdTAwM2NcdTAwM2MgTUFYX1BBR0VDQUNIRV9PUkRFUikpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MjYKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogNzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEaXJ0eSBGb2xpbyBSYW5nZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygc3ViLWZvbGlvIHJhbmdlIGRpcnR5IHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgZm9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTIHRoYXQgdXRpbGl6ZSBpb21hcC4gTXkgaW5pdGlhbCBzY2FuIGhhcyBpZGVudGlmaWVkIGEgc2V0IG9mIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGFjcm9zcyBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGBtbS9wYWdlLXdyaXRlYmFjay5jYCwgYG1tL3JtYXAuY2AsIGFuZCBgbW0vbWVtb3J5LmNgLiBJJiMzOTt2ZSBjYXRlZ29yaXplZCB0aGVtIGJhc2VkIG9uIHRoZWlyIGltcGFjdC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBub24tdWJpcXVpdG91cyBmb2N1cyBzeW1ib2xzIEkgd2FudCB0byB0YXJnZXQuIEkmIzM5O20gYXZvaWRpbmcgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGVudHJ5IHBvaW50cywgYW5kIGNvcmUgbG9jayBwcmltaXRpdmVzLCBzaW5jZSB0aG9zZSB3b24mIzM5O3QgZ2l2ZSBtZSB0aGUgc3BlY2lmaWMgY29kZSBJJiMzOTttIGFmdGVyLiBJJiMzOTt2ZSBzcGVjaWZpY2FsbHkgc2VsZWN0ZWQgYGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlYCwgYGlvbWFwX3BhZ2VfbWt3cml0ZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgLCBhbmQgYGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pb2AgYXMgdGhlIGNvcmUgZnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBvbi4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY292ZXJhZ2Ugb2YgdGhlIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O3ZlIGNoZWNrZWQgdGhlIGRlcGVuZGVuY2llcyB0byBzZWUgaWYgSSBuZWVkIHRvIGVuYWJsZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgWEZTIHRvIHRyaWdnZXIgdGhlIGhvb2tzIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gSSBrbm93IHRoYXQgYFhGU19GU2Agd2lsbCBjb21waWxlIFhGUyBhbmQsIGltcG9ydGFudGx5LCBhbHNvIGVuYWJsZSBgRlNfSU9NQVBgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gaGl0dGluZyB0aGUgWEZTIGNvZGUgcGF0aC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIHRoZSByZXF1aXJlbWVudHM6IHRoZSBmdXp6aW5nIGlzIHdvcnRoIGl0LCB0aGUgY29uZmlndXJhdGlvbiBlbmFibGVzIFhGUywgYW5kIEkmIzM5O3ZlIGdvdCB0aGUgY29ycmVjdCBgRm9jdXNTeW1ib2xzYCBzZXQgdG8gdGFyZ2V0IHRoZSBmdW5jdGlvbnMgdGhhdCByZWZsZWN0IHRoZSBjb3JlIGNoYW5nZS4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgd2UgdHJhY2sgZGlydHkgc3ViLWZvbGlvIHJhbmdlcy4gVGhpcyBpcyBjcml0aWNhbCBmb3Igc3VwcG9ydGluZyBwZXItYmxvY2sgZGlydHkgdHJhY2tpbmcgb24gbGFyZ2UgZm9saW9zLCBlc3BlY2lhbGx5IGluIGZpbGVzeXN0ZW1zIGxpa2UgWEZTIHdoaWNoIHVzZSBpb21hcC4gVGhpcyBpbXBhY3RzIGV2ZXJ5dGhpbmcgZnJvbSBwYWdlIGZhdWx0IGhhbmRsaW5nLCB0byBzaGFyZWQgcGFnZSBkaXJ0eWluZywgdG8gd3JpdGViYWNrIHRyYW5zaXRpb25zLCBhbmQgZXZlbiBybWFwIGNsZWFuaW5nLiBUaGF0IGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIC0gY2hhbmdlcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBpb21hcCwgYW5kIHRoZSBYRlMgY29kZSBwYXRoLiBUaGlzIGFuYWx5c2lzIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSYjMzQ7LAogICAgJiMzNDtpb21hcF9wYWdlX21rd3JpdGUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWFya19kaXJ0eV9yYW5nZSYjMzQ7LAogICAgJiMzNDtmb2xpb19ta2NsZWFuX2RpcnR5bWFwJiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdWItZm9saW8gcmFuZ2UgZGlydHlpbmcgdmlhIC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSwgZm9saW9fbWFya19kaXJ0eV9yYW5nZSgpLCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKCksIGFuZCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSgpIGZvciBYRlMvaW9tYXAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gZGlydHkgZm9saW8gdHJhY2tpbmcsIHdyaXRlLXByb3RlY3QvY2xlYW4gdHJhbnNpdGlvbnMgaW4gd3JpdGViYWNrIChmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8pLCBybWFwIFBURS9QTUQgZGlydHkgd2FsaywgYW5kIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncy4gVGhlc2UgcmVhY2hhYmxlIE1NIGFuZCBmaWxlc3lzdGVtIHBhdGhzIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlydHlfZm9saW9fcmFuZ2UmIzM0OywKICAgICYjMzQ7aW9tYXBfcGFnZV9ta3dyaXRlJiMzNDssCiAgICAmIzM0O2ZvbGlvX21hcmtfZGlydHlfcmFuZ2UmIzM0OywKICAgICYjMzQ7Zm9saW9fbWtjbGVhbl9kaXJ0eW1hcCYjMzQ7LAogICAgJiMzNDtmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3ViLWZvbGlvIHJhbmdlIGRpcnR5aW5nIHZpYSAtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UsIGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoKSwgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCgpLCBhbmQgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UoKSBmb3IgWEZTL2lvbWFwLiBJdCBtb2RpZmllcyBjb3JlIE1NIGRpcnR5IGZvbGlvIHRyYWNraW5nLCB3cml0ZS1wcm90ZWN0L2NsZWFuIHRyYW5zaXRpb25zIGluIHdyaXRlYmFjayAoZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKSwgcm1hcCBQVEUvUE1EIGRpcnR5IHdhbGssIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBzaGFyZWQgbWFwcGluZ3MuIFRoZXNlIHJlYWNoYWJsZSBNTSBhbmQgZmlsZXN5c3RlbSBwYXRocyB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhbmdlLWJhc2VkIGRpcnR5IHRyYWNraW5nIGZvciBsYXJnZSBmb2xpb3MgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaW9tYXAgKHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLCBgZm9saW9fbWFya19kaXJ0eV9yYW5nZWAsIGFuZCBgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcGApLlxuXG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBBbGwgbmV3IGxvY2FsIHZhcmlhYmxlcyAoYGRpcnR5X29mZmAsIGBkaXJ0eV9sZW5gLCBgc3RhdGVgLCBhbmQgc3RhY2sgYml0bWFwIGBtYXBgIGluIGBmb2xpb19ta2NsZWFuX2Zvcl9pb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChgYml0bWFwX3plcm9gLCBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBldGMuKS4gVGhlcmUgYXJlIG5vIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHZlY3RvcnMuXG4yLiBLQVNBTiAvIHN0YW5kYXJkIGRldGVjdG9ycyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gcmFuZ2UgY2FsY3VsYXRpb25zLCBiaXRtYXNrIG9wZXJhdGlvbnMsIG9yIHBhZ2UgdGFibGUgd2Fsa3Mgd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYXNzZXJ0aW9ucy9sb2NraW5nIGlzc3Vlcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDUxOWI0NjFjOWIzZmRlY2FhODgwZTBjOTNiNGRhOTk3NzUxYzFiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDQ6MDI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwppbmRleCAwYTVlYmZkYTkwZjEyLi44ZDhhOGFjYWIwMWFjIDEwMDY0NAotLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKQEAgLTg0NywxNSAmIzQzOzg0NywxOSBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pOwogCi1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCXNpemVfdCBsZW4gPSBmb2xpb19zaXplKGZvbGlvKTsKLQotCWlmc19hbGxvYyhpbm9kZSwgZm9saW8sIDApOwotCWlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgMCwgbGVuKTsKJiM0MzsJaWZzX2FsbG9jKG1hcHBpbmctJmd0O2hvc3QsIGZvbGlvLCAwKTsKJiM0MzsJaW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBvZmYsIGxlbik7CiAJcmV0dXJuIGZpbGVtYXBfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKTsKJiM0MzsKJiM0Mztib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLCBmb2xpb19zaXplKGZvbGlvKSk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlydHlfZm9saW8pOwogCiBzdGF0aWMgdm9pZApAQCAtMTgwNCw3ICYjNDM7MTgwOCw3IEBAIGlvbWFwX3RydW5jYXRlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgYm9vbCAqZGlkX3plcm8sCiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF90cnVuY2F0ZV9wYWdlKTsKIAogc3RhdGljIGludCBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3QgZGlydHlfb2ZmLCBzaXplX3QgZGlydHlfbGVuKQogewogCWxvZmZfdCBsZW5ndGggPSBpb21hcF9sZW5ndGgoaXRlcik7CiAJaW50IHJldDsKQEAgLTE4MTcsNyAmIzQzOzE4MjEsNyBAQCBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwKIAkJYmxvY2tfY29tbWl0X3dyaXRlKGZvbGlvLCAwLCBsZW5ndGgpOwogCX0gZWxzZSB7CiAJCVdBUk5fT05fT05DRSghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpOwotCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJCWZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIGRpcnR5X29mZiwgZGlydHlfbGVuKTsKIAl9CiAKIAlyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7CkBAIC0xODMyLDYgJiM0MzsxODM2LDcgQEAgdm1fZmF1bHRfdCBpb21hcF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywKIAkJLnByaXZhdGUJPSBwcml2YXRlLAogCX07CiAJc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8odm1mLSZndDtwYWdlKTsKJiM0MzsJc2l6ZV90IGRpcnR5X29mZiwgZGlydHlfbGVuOwogCXNzaXplX3QgcmV0OwogCiAJZm9saW9fbG9jayhmb2xpbyk7CkBAIC0xODQwLDggJiM0MzsxODQ1LDIyIEBAIHZtX2ZhdWx0X3QgaW9tYXBfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsCiAJCWdvdG8gb3V0X3VubG9jazsKIAlpdGVyLnBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7CiAJaXRlci5sZW4gPSByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJsb2NrcyBhcmUgc3RpbGwgYWxsb2NhdGVkIGZvciB0aGUgd2hvbGUgZm9saW8sIGJ1dCBvbmx5IHRoZSBwYWdlCiYjNDM7CSAqIHRoZSBmYXVsdCB3YXMgZm9yIGhhcyBiZWVuIHdyaXR0ZW4sIHNvIHRoYXQgaXMgYWxsIHRoYXQgaGFzIHRvIGJlCiYjNDM7CSAqIHdyaXR0ZW4gYmFjay4gIEEgcmFjaW5nIHRydW5jYXRlIGNhbiBsZWF2ZSB0aGF0IHBhZ2UgYmV5b25kIGlfc2l6ZSwKJiM0MzsJICogYW5kIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkaXJ0eS4KJiM0MzsJICovCiYjNDM7CWRpcnR5X29mZiA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCB2bWYtJmd0O3BhZ2UpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7CiYjNDM7CWlmIChkaXJ0eV9vZmYgJmx0OyByZXQpCiYjNDM7CQlkaXJ0eV9sZW4gPSBtaW5fdChzaXplX3QsIFBBR0VfU0laRSwgcmV0IC0gZGlydHlfb2ZmKTsKJiM0MzsJZWxzZQomIzQzOwkJZGlydHlfbGVuID0gMDsKJiM0MzsKIAl3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoJmFtcDtpdGVyLCBvcHMpKSAmZ3Q7IDApCi0JCWl0ZXIuc3RhdHVzID0gaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKCZhbXA7aXRlciwgZm9saW8pOwomIzQzOwkJaXRlci5zdGF0dXMgPSBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoJmFtcDtpdGVyLCBmb2xpbywKJiM0MzsJCQkJCQkgICAgICAgZGlydHlfb2ZmLCBkaXJ0eV9sZW4pOwogCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmMKaW5kZXggNzRhNjA4OWFiYWRmOS4uNjAwZTdkZTJlNTk5YyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19hb3BzLmMKQEAgLTg2Myw3ICYjNDM7ODYzLDcgQEAgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0gewogCS5yZWFkX2ZvbGlvCQk9IHhmc192bV9yZWFkX2ZvbGlvLAogCS5yZWFkYWhlYWQJCT0geGZzX3ZtX3JlYWRhaGVhZCwKIAkud3JpdGVwYWdlcwkJPSB4ZnNfdm1fd3JpdGVwYWdlcywKLQkuZGlydHlfZm9saW8JCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5kaXJ0eV9mb2xpb19yYW5nZQk9IGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlLAogCS5yZWxlYXNlX2ZvbGlvCQk9IGlvbWFwX3JlbGVhc2VfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8JPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAogCS5ibWFwCQkJPSB4ZnNfdm1fYm1hcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAwNzJkOGNkMDlhMGIyLi4xZDk4YjZjMGI4ODA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC00MDYsNiAmIzQzOzQwNiw5IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgewogCiAJLyogTWFyayBhIGZvbGlvIGRpcnR5LiAgUmV0dXJuIHRydWUgaWYgdGhpcyBkaXJ0aWVkIGl0ICovCiAJYm9vbCAoKmRpcnR5X2ZvbGlvKShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3QgZm9saW8gKik7CiYjNDM7CS8qIE1hcmsgW29mZiwgb2ZmICYjNDM7IGxlbikgb2YgYSBmb2xpbyBkaXJ0eSAqLwomIzQzOwlib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQkgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pOwogCiAJdm9pZCAoKnJlYWRhaGVhZCkoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKaW5kZXggYmM3YWU2MzI3ZGJmOC4uM2NmMmFjNzUxNDA5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaApAQCAtNDQzLDYgJiM0Mzs0NDMsOCBAQCBzdHJ1Y3QgZm9saW8gKmlvbWFwX2dldF9mb2xpbyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90IHBvcywgc2l6ZV90IGxlbik7CiBib29sIGlvbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTsKIGJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTsKIHZvaWQgaW9tYXBfZm9saW9fbWFya191cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGludCBpb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwKIAkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDg3ZmVhYTVhMmI3ODAuLjc2MjgyNjJjMTdlMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTMzMzcsNiAmIzQzOzMzMzcsNyBAQCBzdHJ1Y3Qga3ZlYzsKIHN0cnVjdCBwYWdlICpnZXRfZHVtcF9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50ICpsb2NrZWQpOwogCiBib29sIGZvbGlvX21hcmtfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7Ym9vbCBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pOwogYm9vbCBmb2xpb19tYXJrX2RpcnR5X2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7CiBib29sIHNldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfcGFnZV9kaXJ0eV9sb2NrKHN0cnVjdCBwYWdlICpwYWdlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggOGRjMDg3MWU1ZjAwMS4uNmZjMGE2MDIwMjUyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTkyNyw2ICYjNDM7OTI3LDcgQEAgdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2xlYW5lZCBQVEVzLgogICovCiBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKik7CiYjNDM7aW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKTsKIAogaW50IG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmLAogCQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CkBAIC05OTAsNiAmIzQzOzk5MSwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KICNlbmRpZgkvKiBDT05GSUdfTU1VICovCiAKICNlbmRpZgkvKiBfTElOVVhfUk1BUF9IICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhkYTBmOTQ1MTQxYjQuLjI3YTA1OWUwYzAxNmYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0zNzc4LDEwICYjNDM7Mzc3OCwxOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0mZ3Q7dm1hOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi0mZ3Q7cGFnZSk7CiYjNDM7CXNpemVfdCBvZmYgPSBmb2xpb19wYWdlX2lkeChmb2xpbywgdm1mLSZndDtwYWdlKSAmbHQ7Jmx0OyBQQUdFX1NISUZUOwogCWJvb2wgZGlydGllZDsKIAlib29sIHBhZ2VfbWt3cml0ZSA9IHZtYS0mZ3Q7dm1fb3BzICZhbXA7JmFtcDsgdm1hLSZndDt2bV9vcHMtJmd0O3BhZ2VfbWt3cml0ZTsKIAotCWRpcnRpZWQgPSBmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJLyoKJiM0MzsJICogQSBQTUQgZW50cnkgaGFzIG9uZSBkaXJ0eSBiaXQgZm9yIHRoZSB3aG9sZSBmb2xpbywgc28gdGhlcmUgaXMgbm8KJiM0MzsJICogZmluZXIgaW5mb3JtYXRpb24gdG8gcGFzcyBvbi4gQSBQVEUtbWFwcGVkIGZvbGlvIG9ubHkgaGFzIHRoZSBwYWdlCiYjNDM7CSAqIHRoZSBmYXVsdCB3YXMgZm9yIGRpcnRpZWQgc28gZmFyLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBtZF90cmFuc19odWdlKHBtZHBfZ2V0X2xvY2tsZXNzKHZtZi0mZ3Q7cG1kKSkpCiYjNDM7CQlkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiYjNDM7CWVsc2UKJiM0MzsJCWRpcnRpZWQgPSBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBvZmYsIFBBR0VfU0laRSk7CiAJVk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTsKIAkvKgogCSAqIFRha2UgYSBsb2NhbCBjb3B5IG9mIHRoZSBhZGRyZXNzX3NwYWNlIC0gZm9saW8ubWFwcGluZyBtYXkgYmUgemVyb2VkCkBAIC01NjI1LDYgJiM0Mzs1NjM0LDMxIEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhCiB9CiAjZW5kaWYKIAomIzQzOy8qCiYjNDM7ICogTWF5IHRoZSB3aG9sZSBiYXRjaCBiZSBtYXJrZWQgZGlydHk/CiYjNDM7ICoKJiM0MzsgKiBPbmx5IGEgc2hhcmVkIG1hcHBpbmcgb2YgYSBmaWxlc3lzdGVtIHRoYXQgdHJhY2tzIGRpcnR5IHN0YXRlIHBlciBibG9jayBzYXlzCiYjNDM7ICogbm8uIFRoZXJlIHRoZSBwYWdlIHRhYmxlIGRpcnR5IGJpdHMgYXJlIHRoZSBvbmx5IHJlY29yZCBvZiB3aGljaCBwYXJ0cyBvZiBhCiYjNDM7ICogbGFyZ2UgZm9saW8gd2VyZSB3cml0dGVuIHRocm91Z2ggdGhlIG1hcHBpbmcsIHNvIHBhZ2VzIG5vYm9keSBoYXMgc3RvcmVkIHRvCiYjNDM7ICogaGF2ZSB0byBzdGF5IGNsZWFuIGFuZCBsZXQgdGhlIGhhcmR3YXJlIHNldCB0aGUgYml0IG9uIHRoZSBmaXJzdCBzdG9yZS4KJiM0MzsgKgomIzQzOyAqIEV2ZXJ5d2hlcmUgZWxzZSBub3RoaW5nIGV2ZXIgcmVhZHMgdGhvc2UgYml0cywgYW5kIG9uIGhhcmR3YXJlIHdpdGhvdXQgYQomIzQzOyAqIGRpcnR5IGJpdCBsZWF2aW5nIHRoZW0gY2xlYW4gY29zdHMgYSBmYXVsdCBwZXIgcGFnZSBmb3Igbm90aGluZy4gVGhhdCBjb3ZlcnMKJiM0MzsgKiBzaG1lbSwgd2hpY2ggaGFzIG5vIGRpcnR5IHN0YXRlIGJlbG93IHRoZSBmb2xpby4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBjYW5fZGlydHlfd2hvbGVfYmF0Y2goc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBuciwKJiM0MzsJCQkJICBib29sIHByZWZhdWx0KQomIzQzO3sKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtJmd0O3ZtYTsKJiM0MzsKJiM0MzsJaWYgKCEodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1dSSVRFKSB8fCBwcmVmYXVsdCB8fCBuciA9PSAxKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gIXZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDthX29wcy0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXRfcHRlX3JhbmdlIC0gU2V0IGEgcmFuZ2Ugb2YgUFRFcyB0byBwb2ludCB0byBwYWdlcyBpbiBhIGZvbGlvLgogICogQHZtZjogRmF1bHQgZGVzY3JpcHRpb24uCkBAIC01NjM5LDYgJiM0Mzs1NjczLDcgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLSZndDt2bWE7CiAJYm9vbCB3cml0ZSA9IHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURTsKIAlib29sIHByZWZhdWx0ID0gIWluX3JhbmdlKHZtZi0mZ3Q7YWRkcmVzcywgYWRkciwgbnIgKiBQQUdFX1NJWkUpOwomIzQzOwlib29sIGRpcnR5X2JhdGNoID0gY2FuX2RpcnR5X3dob2xlX2JhdGNoKHZtZiwgbnIsIHByZWZhdWx0KTsKIAlwdGVfdCBlbnRyeTsKIAogCWZsdXNoX2ljYWNoZV9wYWdlcyh2bWEsIHBhZ2UsIG5yKTsKQEAgLTU2NDksMTAgJiM0Mzs1Njg0LDEzIEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywKIAllbHNlCiAJCWVudHJ5ID0gcHRlX3N3X21reW91bmcoZW50cnkpOwogCi0JaWYgKHdyaXRlKQotCQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwotCWVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkKJiM0MzsJaWYgKHdyaXRlKSB7CiYjNDM7CQlpZiAoZGlydHlfYmF0Y2gpCiYjNDM7CQkJZW50cnkgPSBwdGVfbWtkaXJ0eShlbnRyeSk7CiYjNDM7CQllbnRyeSA9IG1heWJlX21rd3JpdGUoZW50cnksIHZtYSk7CiYjNDM7CX0gZWxzZSBpZiAocHRlX3dyaXRlKGVudHJ5KSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7CiAJCWVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpOwomIzQzOwl9CiAJaWYgKHVubGlrZWx5KHZtZl9vcmlnX3B0ZV91ZmZkX3dwKHZtZikpKQogCQllbnRyeSA9IHB0ZV9ta3VmZmQoZW50cnkpOwogCS8qIGNvcHktb24td3JpdGUgcGFnZSAqLwpAQCAtNTY2NSw2ICYjNDM7NTcwMywxOCBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJfQogCXNldF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIGFkZHIsIHZtZi0mZ3Q7cHRlLCBlbnRyeSwgbnIpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwYWdlIHRoZSBmYXVsdCB3YXMgZm9yIGlzIGFib3V0IHRvIGJlIHN0b3JlZCB0bywgc28gZGlydHkgaXQKJiM0MzsJICogaGVyZSByYXRoZXIgdGhhbiBsZWF2ZSB0aGUgc3RvcmUgdG8gYSBzZWNvbmQgcGFnZSB0YWJsZSB3YWxrLCBvciB0bwomIzQzOwkgKiBhIHNlY29uZCBmYXVsdCB3aGVyZSB0aGUgZGlydHkgYml0IGlzIG1haW50YWluZWQgaW4gc29mdHdhcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRpcnR5X2JhdGNoKSB7CiYjNDM7CQlwdGVfdCAqcHRlcCA9IHZtZi0mZ3Q7cHRlICYjNDM7ICgodm1mLSZndDthZGRyZXNzIC0gYWRkcikgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CQlwdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCB2bWYtJmd0O2FkZHJlc3MsIHB0ZXAsCiYjNDM7CQkJCSAgICAgIHB0ZV9ta2RpcnR5KHB0ZXBfZ2V0KHB0ZXApKSwgMSk7CiYjNDM7CX0KJiM0MzsKIAkvKiBubyBuZWVkIHRvIGludmFsaWRhdGU6IGEgbm90LXByZXNlbnQgcGFnZSB3b24mIzM5O3QgYmUgY2FjaGVkICovCiAJdXBkYXRlX21tdV9jYWNoZV9yYW5nZSh2bWYsIHZtYSwgYWRkciwgdm1mLSZndDtwdGUsIG5yKTsKIH0KZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDZjOWM3YmE4OWI4YTkuLjM5YjU0YzI1YTlmYWIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtMjc1MSw2ICYjNDM7Mjc1MSwyMSBAQCBib29sIGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIH0KIEVYUE9SVF9TWU1CT0woZm9saW9fcmVkaXJ0eV9mb3Jfd3JpdGVwYWdlKTsKIAomIzQzOy8qCiYjNDM7ICogSGFuZCBhIGRpcnRpZWQgcmFuZ2Ugb2YgQGZvbGlvIHRvIHRoZSBmaWxlc3lzdGVtLiAgLSZndDtkaXJ0eV9mb2xpb19yYW5nZSgpIGNhbgomIzQzOyAqIGV4cHJlc3MgZXZlcnl0aGluZyAtJmd0O2RpcnR5X2ZvbGlvKCkgY2FuLCBzbyBhIGZpbGVzeXN0ZW0gdGhhdCBpbXBsZW1lbnRzIGl0CiYjNDM7ICogZG9lcyBub3QgbmVlZCBib3RoLCBhbmQgYSB3aG9sZS1mb2xpbyBkaXJ0eSBjb21lcyB0aHJvdWdoIGhlcmUgYXMgYSByYW5nZQomIzQzOyAqIGNvdmVyaW5nIHRoZSBmb2xpby4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBtYXBwaW5nX2RpcnR5X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJaWYgKCFtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UpCiYjNDM7CQlyZXR1cm4gbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcHBpbmctJmd0O2Ffb3BzLSZndDtkaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgb2ZmLCBsZW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9fbWFya19kaXJ0eSAtIE1hcmsgYSBmb2xpbyBhcyBiZWluZyBtb2RpZmllZC4KICAqIEBmb2xpbzogVGhlIGZvbGlvLgpAQCAtMjc4MiwxMyAmIzQzOzI3OTcsMzkgQEAgYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCSAqLwogCQlpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSkKIAkJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwotCQlyZXR1cm4gbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKJiM0MzsJCXJldHVybiBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLAomIzQzOwkJCQkJICAgZm9saW9fc2l6ZShmb2xpbykpOwogCX0KIAogCXJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKIH0KIEVYUE9SVF9TWU1CT0woZm9saW9fbWFya19kaXJ0eSk7CiAKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19tYXJrX2RpcnR5X3JhbmdlIC0gTWFyayBwYXJ0IG9mIGEgZm9saW8gYXMgYmVpbmcgbW9kaWZpZWQuCiYjNDM7ICogQGZvbGlvOiBUaGUgZm9saW8uCiYjNDM7ICogQG9mZjogT2Zmc2V0IG9mIHRoZSBtb2RpZmllZCByYW5nZSB3aXRoaW4gdGhlIGZvbGlvLgomIzQzOyAqIEBsZW46IExlbmd0aCBvZiB0aGUgbW9kaWZpZWQgcmFuZ2UuCiYjNDM7ICoKJiM0MzsgKiBMaWtlIGZvbGlvX21hcmtfZGlydHkoKSwgYnV0IHRlbGxzIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXIKJiM0MzsgKiBibG9jayB0aGF0IG9ubHkgW0BvZmYsIEBvZmYgJiM0MzsgQGxlbikgY2hhbmdlZCwgc28gd3JpdGViYWNrIGNhbiBza2lwIHRoZSByZXN0CiYjNDM7ICogb2YgdGhlIGZvbGlvLiAgRmlsZXN5c3RlbXMgd2l0aG91dCB0aGF0IHRyYWNraW5nIGRpcnR5IHRoZSB3aG9sZSBmb2xpby4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogVHJ1ZSBpZiB0aGUgZm9saW8gd2FzIG5ld2x5IGRpcnRpZWQsIGZhbHNlIGlmIGl0IHdhcyBhbHJlYWR5IGRpcnR5LgomIzQzOyAqLwomIzQzO2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseShtYXBwaW5nKSkgewomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpCiYjNDM7CQkJZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7CiYjNDM7CQlyZXR1cm4gbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywgb2ZmLCBsZW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogZm9saW9fbWFya19kaXJ0eSgpIGlzIHJhY3kgaWYgdGhlIGNhbGxlciBoYXMgbm8gcmVmZXJlbmNlIGFnYWluc3QKICAqIGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0LCBhbmQgaWYgdGhlIGZvbGlvIGlzIHVubG9ja2VkLiAgVGhpcyBpcyBiZWNhdXNlIGFub3RoZXIKQEAgLTI4NDQsNiAmIzQzOzI4ODUsNDEgQEAgdm9pZCBfX2ZvbGlvX2NhbmNlbF9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2NhbmNlbF9kaXJ0eSk7CiAKJiM0MzsvKgomIzQzOyAqIFdyaXRlLXByb3RlY3QgZXZlcnkgbWFwcGluZyBvZiBAZm9saW8gYW5kIGhhbmQgdGhlIGZpbGVzeXN0ZW0gdGhlIHBhcnRzIHRoYXQKJiM0MzsgKiB3ZXJlIGRpcnR5IGluIGEgcGFnZSB0YWJsZS4KJiM0MzsgKgomIzQzOyAqIFdpdGhvdXQgLSZndDtkaXJ0eV9mb2xpb19yYW5nZSgpIHRoZXJlIGlzIG5vd2hlcmUgdG8gcHV0IHBlci1ibG9jayBzdGF0ZSwgc28KJiM0MzsgKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90CiYjNDM7ICogYWxyZWFkeSBkaXJ0eSwgYmVjYXVzZSB0aGVuIHRoZSBkaXJ0eSB0cmFuc2l0aW9uIG5lZWRzIHRoZSBmdWxsIGFjY291bnRpbmcKJiM0MzsgKiBpbiBmb2xpb19tYXJrX2RpcnR5KCksIGFuZCBmb3IgYSBmb2xpbyB0b28gbGFyZ2UgZm9yIHRoZSBiaXRtYXAsIHdoaWNoIHRoZQomIzQzOyAqIHBhZ2UgY2FjaGUgZG9lcyBub3QgbWFrZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBmb2xpb19ta2NsZWFuX2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlERUNMQVJFX0JJVE1BUChtYXAsIDFVTCAmbHQ7Jmx0OyBNQVhfUEFHRUNBQ0hFX09SREVSKTsKJiM0MzsJdW5zaWduZWQgaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDsKJiM0MzsKJiM0MzsJaWYgKCFtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UgfHwgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8CiYjNDM7CSAgICBXQVJOX09OX09OQ0UobnIgJmd0OyAoMVVMICZsdDsmbHQ7IE1BWF9QQUdFQ0FDSEVfT1JERVIpKSkgewomIzQzOwkJaWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKQomIzQzOwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJpdG1hcF96ZXJvKG1hcCwgbnIpOwomIzQzOwlpZiAoIWZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIG1hcCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3NldF9iaXRyYW5nZShzdGFydCwgZW5kLCBtYXAsIG5yKSB7CiYjNDM7CQltYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLAomIzQzOwkJCQkgICAgKHNpemVfdClzdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZULAomIzQzOwkJCQkgICAgKHNpemVfdCkoZW5kIC0gc3RhcnQpICZsdDsmbHQ7IFBBR0VfU0hJRlQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIENsZWFyIGEgZm9saW8mIzM5O3MgZGlydHkgZmxhZywgd2hpbGUgY2FyaW5nIGZvciBkaXJ0eSBtZW1vcnkgYWNjb3VudGluZy4KICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9saW8gd2FzIHByZXZpb3VzbHkgZGlydHkuCkBAIC0yODc1LDkgJiM0MzsyOTUxLDkgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICoKIAkJICogV2UgdXNlIHRoaXMgc2VxdWVuY2UgdG8gbWFrZSBzdXJlIHRoYXQKIAkJICogIChhKSB3ZSBhY2NvdW50IGZvciBkaXJ0eSBzdGF0cyBwcm9wZXJseQotCQkgKiAgKGIpIHdlIHRlbGwgdGhlIGxvdy1sZXZlbCBmaWxlc3lzdGVtIHRvCi0JCSAqICAgICAgbWFyayB0aGUgd2hvbGUgZm9saW8gZGlydHkgaWYgaXQgd2FzCi0JCSAqICAgICAgZGlydHkgaW4gYSBwYWdldGFibGUuIE9ubHkgdG8gdGhlbgomIzQzOwkJICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB3aGljaAomIzQzOwkJICogICAgICBwYXJ0cyBvZiB0aGUgZm9saW8gd2VyZSBkaXJ0eSBpbiBhCiYjNDM7CQkgKiAgICAgIHBhZ2V0YWJsZS4gT25seSB0byB0aGVuCiAJCSAqICAoYykgY2xlYW4gdGhlIGZvbGlvIGFnYWluIGFuZCByZXR1cm4gMSB0bwogCQkgKiAgICAgIGNhdXNlIHRoZSB3cml0ZWJhY2suCiAJCSAqCkBAIC0yODk1LDggJiM0MzsyOTcxLDcgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICogYXMgYSBzZXJpYWxpemF0aW9uIHBvaW50IGZvciBhbGwgdGhlIGRpZmZlcmVudAogCQkgKiB0aHJlYWRzIGRvaW5nIHRoZWlyIHRoaW5ncy4KIAkJICovCi0JCWlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSkKLQkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwkJZm9saW9fbWtjbGVhbl9mb3JfaW8oZm9saW8sIG1hcHBpbmcpOwogCQkvKgogCQkgKiBXZSBjYXJlZnVsbHkgc3luY2hyb25pc2UgZmF1bHQgaGFuZGxlcnMgYWdhaW5zdAogCQkgKiBpbnN0YWxsaW5nIGEgZGlydHkgcHRlIGFuZCBtYXJraW5nIHRoZSBmb2xpbyBkaXJ0eQpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDFmNzJkMjc5YmE2OGYuLmFhZjQ1YWM3OWZhODQgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTExMDAsMTIgJiM0MzsxMTAwLDE4IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsCiAJcmV0dXJuIHJ3Yy5jb250ZW5kZWQgPyAtMSA6IHByYS5yZWZlcmVuY2VkOwogfQogCi1zdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKJiM0MztzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcDsKJiM0MzsJaW50IGNsZWFuZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywKJiM0MzsJCQkJdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKQogewotCWludCBjbGVhbmVkID0gMDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctJmd0O3ZtYTsKLQlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHB2bXctJmd0O2FkZHJlc3M7CiYjNDM7CXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7CiYjNDM7CWludCBjbGVhbmVkID0gMDsKIAogCS8qCiAJICogV2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uIE5vdGUgdGhhdApAQCAtMTEzNCw2ICYjNDM7MTE0MCwxNSBAQCBzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAkJCWlmICghcHRlX2RpcnR5KGVudHJ5KSAmYW1wOyZhbXA7ICFwdGVfd3JpdGUoZW50cnkpKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKGRpcnR5X21hcCAmYW1wOyZhbXA7IHB0ZV9kaXJ0eShlbnRyeSkpIHsKJiM0MzsJCQkJcGdvZmZfdCBpZHggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpIC0KJiM0MzsJCQkJCSAgICAgIHB2bXctJmd0O3Bnb2ZmOwomIzQzOwomIzQzOwkJCQkvKiBUaGUgd2FsayBvbmx5IHZpc2l0cyBwYWdlcyBvZiB0aGlzIGZvbGlvICovCiYjNDM7CQkJCVZNX1dBUk5fT05fT05DRShpZHggJmd0Oz0gcHZtdy0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJCQlfX3NldF9iaXQoaWR4LCBkaXJ0eV9tYXApOwomIzQzOwkJCX0KJiM0MzsKIAkJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyZXNzLCBwdGVfcGZuKGVudHJ5KSk7CiAJCQllbnRyeSA9IHB0ZXBfY2xlYXJfZmx1c2godm1hLCBhZGRyZXNzLCBwdGUpOwogCQkJZW50cnkgPSBwdGVfd3Jwcm90ZWN0KGVudHJ5KTsKQEAgLTExNTUsNiAmIzQzOzExNzAsOSBAQCBzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAkJCWlmICghcG1kX2RpcnR5KGVudHJ5KSAmYW1wOyZhbXA7ICFwbWRfd3JpdGUoZW50cnkpKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKGRpcnR5X21hcCAmYW1wOyZhbXA7IHBtZF9kaXJ0eShlbnRyeSkpCiYjNDM7CQkJCWJpdG1hcF9zZXQoZGlydHlfbWFwLCAwLCBwdm13LSZndDtucl9wYWdlcyk7CiYjNDM7CiAJCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsCiAJCQkJCSAgYWRkcmVzcyAmIzQzOyBIUEFHRV9QTURfU0laRSk7CiAJCQllbnRyeSA9IHBtZHBfaW52YWxpZGF0ZSh2bWEsIGFkZHJlc3MsIHBtZCk7CkBAIC0xMTgxLDkgJiM0MzsxMTk5LDkgQEAgc3RhdGljIGJvb2wgcGFnZV9ta2NsZWFuX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpCiB7CiAJREVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIFBWTVdfU1lOQyk7Ci0JaW50ICpjbGVhbmVkID0gYXJnOwomIzQzOwlzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSAqc3RhdGUgPSBhcmc7CiAKLQkqY2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoJmFtcDtwdm13KTsKJiM0MzsJc3RhdGUtJmd0O2NsZWFuZWQgJiM0Mzs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKCZhbXA7cHZtdywgc3RhdGUtJmd0O2RpcnR5X21hcCk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTExOTYsMTIgJiM0MzsxMjE0LDIzIEBAIHN0YXRpYyBib29sIGludmFsaWRfbWtjbGVhbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19ta2NsZWFuX2RpcnR5bWFwIC0gV3JpdGUtcHJvdGVjdCBhIGZvbGlvIGFuZCByZXBvcnQgd2hhdCB3YXMgZGlydHkuCiYjNDM7ICogQGZvbGlvOiBUaGUgZm9saW8gdG8gY2xlYW4uCiYjNDM7ICogQGRpcnR5X21hcDogQml0bWFwIG9mIGF0IGxlYXN0IGZvbGlvX25yX3BhZ2VzKEBmb2xpbykgYml0cywgb3IgTlVMTC4KJiM0MzsgKgomIzQzOyAqIFdyaXRlLXByb3RlY3RzIGFuZCBjbGVhbnMgZXZlcnkgbWFwcGluZyBvZiBAZm9saW8uICBXaXRoIEBkaXJ0eV9tYXAsIHNldHMgYQomIzQzOyAqIGJpdCBmb3IgZWFjaCBwYWdlIHdob3NlIGVudHJ5IHdhcyBkaXJ0eTsgYSBQTUQtbWFwcGVkIGZvbGlvIGhhcyBvbmUgZGlydHkKJiM0MzsgKiBiaXQgZm9yIGFsbCBvZiBpdCwgc28gZXZlcnkgcGFnZSBpcyByZXBvcnRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIG51bWJlciBvZiBwYWdlIHRhYmxlIGVudHJpZXMgY2xlYW5lZC4KJiM0MzsgKi8KJiM0MztpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApCiB7Ci0JaW50IGNsZWFuZWQgPSAwOwomIzQzOwlzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSBzdGF0ZSA9IHsgLmRpcnR5X21hcCA9IGRpcnR5X21hcCB9OwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCXN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7Ci0JCS5hcmcgPSAodm9pZCAqKSZhbXA7Y2xlYW5lZCwKJiM0MzsJCS5hcmcgPSAodm9pZCAqKSZhbXA7c3RhdGUsCiAJCS5ybWFwX29uZSA9IHBhZ2VfbWtjbGVhbl9vbmUsCiAJCS5pbnZhbGlkX3ZtYSA9IGludmFsaWRfbWtjbGVhbl92bWEsCiAJfTsKQEAgLTEyMTcsNyAmIzQzOzEyNDYsMTIgQEAgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbykKIAogCXJtYXBfd2Fsayhmb2xpbywgJmFtcDtyd2MpOwogCi0JcmV0dXJuIGNsZWFuZWQ7CiYjNDM7CXJldHVybiBzdGF0ZS5jbGVhbmVkOwomIzQzO30KJiM0MzsKJiM0MztpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fbWtjbGVhbik7CiAKQEAgLTEyNDEsNyAmIzQzOzEyNzUsNyBAQCBzdGF0aWMgYm9vbCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJLmZsYWdzCQk9IFBWTVdfU1lOQywKIAl9OwogCi0Jc3RhdGUtJmd0O2NsZWFuZWQgJiM0Mzs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKCZhbXA7cHZtdyk7CiYjNDM7CXN0YXRlLSZndDtjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcsIE5VTEwpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMzI0LDcgJiM0MzsxMzU4LDcgQEAgaW50IHBmbl9ta2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBwZ29mZl90IHBnb2ZmLAogCXB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTsKIAlWTV9CVUdfT05fVk1BKHB2bXcuYWRkcmVzcyA9PSAtRUZBVUxULCB2bWEpOwogCi0JcmV0dXJuIHBhZ2Vfdm1hX21rY2xlYW5fb25lKCZhbXA7cHZtdyk7CiYjNDM7CXJldHVybiBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2ZvbGlvX21vZF9zdGF0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuciwgaW50IG5yX3BtZG1hcHBlZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3ViLUZvbGlvIERpcnR5IFRyYWNraW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGFpbXMgdG8gaW50cm9kdWNlIGdyYW51bGFyIHRyYWNraW5nIG9mIGRpcnR5IGRhdGEgd2l0aGluIGxhcmdlIGZvbGlvcywgZ29pbmcgYmV5b25kIHRoZSB0cmFkaXRpb25hbCBmb2xpby1sZXZlbCBkaXJ0eSBmbGFnLiBUaGlzIGxvb2tzIGxpa2UgYSBuZWNlc3Nhcnkgb3B0aW1pemF0aW9uIGZvciBtb2Rlcm4gc3RvcmFnZSBzeXN0ZW1zIGFuZCBzaG91bGQgbGVhZCB0byBtb3JlIGVmZmljaWVudCB3cml0ZWJhY2sgYW5kIGNhY2hpbmcgYmVoYXZpb3IuCgpIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIEkgcmVhZCB0aHJvdWdoIHRoZSBjaGFuZ2VzLiAgSXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgYXBwcm9hY2gsIGltcGxlbWVudGluZyBgZGlydHlfZm9saW9fcmFuZ2VgIHdpdGhpbiB0aGUgYGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc2AuIFRoZSBtYWluIGlkZWEgc2VlbXMgdG8gYmUgdG8gaW50cm9kdWNlIGEgbWVjaGFuaXNtLCBgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VgLCBhbmQgdXNlIGl0IHRvIHRyYWNrIGRpcnR5IHJlZ2lvbnMgd2l0aGluIGEgZm9saW8sIHdoaWNoIGlzIHBhcnRpY3VsYXJseSByZWxldmFudCBmb3IgaGFuZGxpbmcgbGFyZ2VyIGZvbGlvcy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZToKCiogICBgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VgIGlzIGludHJvZHVjZWQgYW5kIGNhbGxlZCBieSBgaW9tYXBfZGlydHlfZm9saW9gLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgZGVsZWdhdGlvbiBvZiB0aGUgZGlydHkgcmFuZ2UgbWFuYWdlbWVudCB0byB0aGUgbmV3IGZ1bmN0aW9uLiBNb2RpZmljYXRpb25zIGluIGBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXJgIGFuZCBgaW9tYXBfcGFnZV9ta3dyaXRlYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGNvbnN1bWVycy4KKiAgIFRoZSBgeGZzYCBmaWxlc3lzdGVtIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW5kaWNhdGVzIGEgcmVhbC13b3JsZCBhcHBsaWNhdGlvbi4KKiAgIEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBhZGRlZCB0byB0aGUgYGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc2Agc3RydWN0LCBhbmQgcmVsZXZhbnQgZGVjbGFyYXRpb25zIGFyZSBpbmNsdWRlZC4KKiAgIFRoZSBgbW1gIGNvZGUgbm93IHVzZXMgdGhlIGBkaXJ0eV9mb2xpb19yYW5nZWAgZnVuY3Rpb24gaW4gc2V2ZXJhbCBwbGFjZXMsIGluY2x1ZGluZyBgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2VgLCBgY2FuX2RpcnR5X3dob2xlX2JhdGNoYCwgYHNldF9wdGVfcmFuZ2VgLCBgbWFwcGluZ19kaXJ0eV9yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5YCwgYW5kIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgc3ViLWZvbGlvIGRpcnR5IHRyYWNraW5nIGlzIGltcGxlbWVudGVkLgoqICAgYGZvbGlvX21rY2xlYW5fZm9yX2lvYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IGFwcGVhcnMgdG8gdXRpbGl6ZSBhIGJpdG1hcCAoYG1hcGApIHRvIHJlcHJlc2VudCB0aGUgZGlydHkgc3RhdGUgb2YgaW5kaXZpZHVhbCBwYWdlcyB3aXRoaW4gYSBmb2xpbywgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGtleSB0byB0aGUgc3ViLWZvbGlvIHRyYWNraW5nLiBJIHdvbmRlciBhYm91dCBpdHMgdXNhZ2UgYW5kIHBvdGVudGlhbCBmb3IgaXNzdWVzLgoqICAgYG1tL3JtYXAuY2AgaW50cm9kdWNlcyBgc3RydWN0IG1rY2xlYW5fc3RhdGVgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gVGhpcyBzdHJ1Y3R1cmUgc2VlbXMgZGVzaWduZWQgdG8gZmFjaWxpdGF0ZSBjbGVhbmluZyBhbmQgcG90ZW50aWFsbHkgdW5tYXBwaW5nIHBhZ2VzIG9yIHN1Yi1wYWdlIHJlZ2lvbnMuCgpOb3csIGxldCBtZSB6b29tIGluIG9uIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gVGhlIHVzZSBvZiBhIGJpdG1hcCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gIHJhaXNlcyBhIHF1ZXN0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIG9mIHRoZSBgbWFwYCBiaXRtYXAuCgpgYGBjCiAgICBERUNMQVJFX0JJVE1BUChtYXAsIDFVTCAmbHQ7Jmx0OyBNQVhfUEFHRUNBQ0hFX09SREVSKTsKICAgIHVuc2lnbmVkIGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKICAgIHVuc2lnbmVkIGludCBzdGFydCwgZW5kOwoKICAgIGlmICghbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fAogICAgICAgIFdBUk5fT05fT05DRShuciAmZ3Q7ICgxVUwgJmx0OyZsdDsgTUFYX1BBR0VDQUNIRV9PUkRFUikpKSB7CiAgICAgICAgaWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKQogICAgICAgICAgICBmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYml0bWFwX3plcm8obWFwLCBucik7CiAgICBpZiAoIWZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIG1hcCkpCiAgICAgICAgcmV0dXJuOwoKICAgIGZvcl9lYWNoX3NldF9iaXRyYW5nZShzdGFydCwgZW5kLCBtYXAsIG5yKSB7CiAgICAgICAgbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpc3RhcnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpKGVuZCAtIHN0YXJ0KSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKICAgIH0KYGBgCgpUaGUgY29kZSB6ZXJvZXMgYG5yYCBiaXRzIG9mIHRoZSBgbWFwYC4gVGhlIGxvb3AgYGZvcl9lYWNoX3NldF9iaXRyYW5nZShzdGFydCwgZW5kLCBtYXAsIG5yKWAgaXRlcmF0ZXMgb3ZlciB0aGUgc2V0IGJpdHMgd2l0aGluIHRoZSBgbWFwYC4gSXQgc2VlbXMgdG8gbWUgdGhhdCBgYml0bWFwX3plcm9gIGNsZWFycyBgbWFwYCBmb3IgYG5yYCBwYWdlcywgYW5kIHRoZSBsb29wIHVzZXMgdGhlIGNsZWFyZWQgYG1hcGAuIFRoZSB1c2Ugb2YgYG5yYCBzaG91bGQgYm91bmQgdGhlIGJpdG1hcCwgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBjb2RlIHJlbGllcyBvbiB0aGUgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIGJpdG1hcCByb3V0aW5lcy4KTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgYml0bWFwIGFjY2VzcyB3aXRoaW4gYGZvcl9lYWNoX3NldF9iaXRyYW5nZWAgcmVzcGVjdHMgdGhlIGJvdW5kcyBzZXQgYnkgYG5yYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGJpdG1hcF96ZXJvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBgYml0bWFwX3plcm9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBiaXRtYXBfemVyb2AuIEdpdmVuIGl0cyBmdW5jdGlvbiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgZ29pbmcgdG8gYmUgcmVsYXRlZCB0byBiaXQgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGJpdG1hcCBtYW5pcHVsYXRpb24gbWFjcm9zIGFuZCBmdW5jdGlvbnMuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcsIGFuZCBob3BlZnVsbHksIEkmIzM5O2xsIGZpbmQgaXRzIGRlZmluaXRpb24gb3IgYXQgbGVhc3QgcmVsYXRlZCB1dGlsaXR5IGZ1bmN0aW9ucyB0aGVyZS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvLCBidXQgSSB3b24mIzM5O3QgcnVsZSBvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGl0IGJlaW5nIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gUmVnYXJkbGVzcywgYGJpdG1hcC5oYCBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGRldGFpbHMgb24gaG93IGl0IGFjdHVhbGx5IGRvZXMgaXRzIGpvYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX3plcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JpdG1hcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUaW1lIHRvIEludmVzdGlnYXRlIGBiaXRtYXBfemVyb2AqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBob3cgYGJpdG1hcF96ZXJvYCBpcyBkZWZpbmVkIG9yIHVzZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBzdGFuZGFyZCBoZWFkZXIgZmlsZSBmb3IgYml0bWFwIGRlZmluaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBgaW5jbHVkZS9saW51eC9iaXRtYXAuaGAgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBjb3JlIGRhdGEgc3RydWN0dXJlIGFuZCB1dGlsaXR5LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgc2hvdWxkIHlpZWxkIGEgcXVpY2sgcmVzdWx0IHdpdGggdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIG9yIHVzYWdlcy4gSG9wZWZ1bGx5IGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Yml0bWFwX3plcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JpdG1hcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYml0bWFwLmg9MTc9c3RydWN0IGRldmljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTQyLSAqXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjQzOiAqICBiaXRtYXBfemVybyhkc3QsIG5iaXRzKSAgICAgICAgICAgICAgICAgICAgICpkc3QgPSAwVUxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNDQtICogIGJpdG1hcF9maWxsKGRzdCwgbmJpdHMpICAgICAgICAgICAgICAgICAgICAgKmRzdCA9IH4wVUxcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTkzLSAqXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjk0OiAqIE5vdGUsIGJpdG1hcF96ZXJvKCkgYW5kIGJpdG1hcF9maWxsKCkgb3BlcmF0ZSBvdmVyIHRoZSByZWdpb24gb2ZcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtOTUtICogdW5zaWduZWQgbG9uZ3MsIHRoYXQgaXMsIGJpdHMgYmVoaW5kIGJpdG1hcCB0aWxsIHRoZSB1bnNpZ25lZCBsb25nXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0yMzM9dm9pZCBiaXRtYXBfZm9sZCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9yaWcsXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNDAtXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI0MTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYml0bWFwX3plcm8odW5zaWduZWQgbG9uZyAqZHN0LCB1bnNpZ25lZCBpbnQgbmJpdHMpXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI0Mi17XG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD02MzQ9dm9pZCBiaXRtYXBfc2NhdHRlcih1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTYzOS1cbmluY2x1ZGUvbGludXgvYml0bWFwLmg6NjQwOlx0Yml0bWFwX3plcm8oZHN0LCBuYml0cyk7XG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTY0MS1cbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oPTY5MT12b2lkIGJpdG1hcF9nYXRoZXIodW5zaWduZWQgbG9uZyAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC02OTYtXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjY5NzpcdGJpdG1hcF96ZXJvKGRzdCwgbmJpdHMpO1xuaW5jbHVkZS9saW51eC9iaXRtYXAuaC02OTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCaXRtYXAgSGVhZGVyKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBiaXRtYXBzIGFyZSBiZWluZyBoYW5kbGVkLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgYGluY2x1ZGUvbGludXgvYml0bWFwLmhgIGhlYWRlciBmaWxlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBiaXQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWFjcm9zIGluIHRoaXMgaGVhZGVyIGlzIGVzc2VudGlhbCBmb3IsIHdlbGwsIHByZXR0eSBtdWNoIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI0MCwgYXMgYSBzdGFydGluZyBwb2ludC4gVGhhdCBzZWVtcyB0byBiZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8ganVtcCBpbiBhbmQgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvbnRleHQgb2YgYml0IG9wZXJhdGlvbnMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJyYW5jaCBvdXQgdG8gc2VlIGhvdyB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCBpcyBpbXBhY3RpbmcgdGhlIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9iaXRtYXAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XG4gMjQxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJpdG1hcF96ZXJvKHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgaW50IG5iaXRzKVxuIDI0MjpcdHtcbiAyNDM6XHRcdHVuc2lnbmVkIGludCBsZW4gPSBiaXRtYXBfc2l6ZShuYml0cyk7XG4gMjQ0Olx0XG4gMjQ1Olx0XHRpZiAoc21hbGxfY29uc3RfbmJpdHMobmJpdHMpKVxuIDI0NjpcdFx0XHQqZHN0ID0gMDtcbiAyNDc6XHRcdGVsc2VcbiAyNDg6XHRcdFx0bWVtc2V0KGRzdCwgMCwgbGVuKTtcbiAyNDk6XHR9XG4gMjUwOlx0XG4gMjUxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJpdG1hcF9maWxsKHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgaW50IG5iaXRzKVxuIDI1MjpcdHtcbiAyNTM6XHRcdHVuc2lnbmVkIGludCBsZW4gPSBiaXRtYXBfc2l6ZShuYml0cyk7XG4gMjU0Olx0XG4gMjU1Olx0XHRpZiAoc21hbGxfY29uc3RfbmJpdHMobmJpdHMpKVxuIDI1NjpcdFx0XHQqZHN0ID0gfjBVTDtcbiAyNTc6XHRcdGVsc2VcbiAyNTg6XHRcdFx0bWVtc2V0KGRzdCwgMHhmZiwgbGVuKTtcbiAyNTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjcwCgkJCQkJCQlvdXRwdXQ6IDI0NgoJCQkJCQkJdGhvdWdodHM6IDExMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN0YXJ0cyB3aXRoIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIGBiaXRtYXBfc2l6ZWAgY2FsY3VsYXRlcyB0aGUgcmVxdWlyZWQgbWVtb3J5IGZvciB0aGUgYml0bWFwLCBlbnN1cmluZyB3ZSYjMzk7cmUgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UuIFRoZSBgZm9yX2VhY2hfc2V0X2JpdHJhbmdlYCBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGNvbnN0cmFpbmVkIHRvIHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBiaXRtYXAsIGdpdmVuIHRoYXQgaXQmIzM5O3MgdXNpbmcgdGhlIGNvcnJlY3QgY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIHRoZSBgbWFwYCB2YXJpYWJsZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KCk5leHQsIEkgZXhhbWluZWQgdGhlIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYCBmdW5jdGlvbiBhbmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgc3RhdGVgIHN0cnVjdC4gYHN0YXRlLmNsZWFuZWRgIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgdHJhY2tpbmcgY2xlYW5lZCBwYWdlcy4KClRoZW4sIHRoZSBmb2N1cyBzaGlmdHMgdG8gYGlvbWFwX3BhZ2VfbWt3cml0ZWAuIEhlcmUsIGBkaXJ0eV9vZmZgIGFuZCBgZGlydHlfbGVuYCBhcmUgY2FsY3VsYXRlZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkgYXJlIGV2ZXIgdXNlZC4gVGhpcyBsb29rcyBzb2xpZC4gVGhlIGNvZGUgaXMgY2FyZWZ1bCB0byBoYW5kbGUgdGhlIHJhbmdlIHdpdGhpbiB0aGUgcGFnZSBjb3JyZWN0bHksIGFjY291bnRpbmcgZm9yIHBvdGVudGlhbCByYWNpbmcgdHJ1bmNhdGVzLiBUaGUgbG9naWMgc2VlbXMgcm9idXN0LgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4gVGhpcyBwYXRjaCBvcHRpbWl6ZXMgd3JpdGViYWNrIGFuZCBkaXJ0eSBwYWdlIHRyYWNraW5nIGZvciBsYXJnZSBmb2xpb3Mgd2l0aGluIFhGUy9pb21hcC4gSW5zdGVhZCBvZiBtYXJraW5nIHRoZSBlbnRpcmUgZm9saW8gZGlydHksIGl0IHRyYWNrcyBwZXItcGFnZSBkaXJ0eSBzdGF0ZSBhbmQgcGFzc2VzIGEgc3BlY2lmaWMgcmFuZ2UgdG8gdGhlIGZpbGVzeXN0ZW0mIzM5O3MgY2FsbGJhY2tzLCB3aGljaCB1cGRhdGVzIHRoZSBpb21hcCBzdWItcGFnZS9zdWItZm9saW8gZGlydHkgc3RhdGUuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCBwb3RlbnRpYWwgS01TQU4gY29uY2VybnM6CgoxLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uczoqKiBBcmUga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLiBUaGlzIGlzIGludGVybmFsIE1NIGFuZCBmaWxlc3lzdGVtIGRpcnR5IHRyYWNraW5nLCBzbyB0aGVyZSBhcmUgbm8gY29weS10by11c2VyIG9wZXJhdGlvbnMgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBBcmUgdGhlcmUgY29uZGl0aW9ucyBvciBicmFuY2hlcyB0aGF0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uIEFsbCB2YXJpYWJsZXMsIGxpa2UgYGRpcnR5X29mZmAsIGBkaXJ0eV9sZW5gLCBgc3RhdGVgLCBhbmQgYG1hcGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBJcyB0aGVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vLiBgaWZzX2FsbG9jYCBpcyBjYWxsZWQgYmVmb3JlLCBhbmQgdGhlIGRhdGEgaXMgYWxsb2NhdGVkIGNvcnJlY3RseS4KNC4gICoqQnVmZmVyIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkPyBOby4gVGhlIGZvbGlvIGRhdGEgYW5kIGJ1ZmZlcnMgYXJlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLgoKR2l2ZW4gdGhlIEtNU0FOIGd1aWRlbGluZXMsIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQuIFN0YW5kYXJkIEtBU0FOIGNoZWNrcywgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgd291bGQgbGlrZWx5IGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIGFyZSBtb3JlIGxpa2VseSBsb2dpYyBidWdzIHJlbGF0ZWQgdG8gcmFuZ2UgY2FsY3VsYXRpb25zLCBsb2NraW5nIGlzc3Vlcywgb3IgcmFjZSBjb25kaXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50L3dyaXRlYmFjaywgd2hpY2ggY2FuIGJlIGNhdWdodCB2aWEgdGVzdGluZyBvciBkZWJ1Z2dpbmcuCgpUaGVyZWZvcmUsICoqTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGZhbHNlLioqIEkmIzM5O20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgcmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmFuZ2UtYmFzZWQgZGlydHkgdHJhY2tpbmcgZm9yIGxhcmdlIGZvbGlvcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpb21hcCAoc3BlY2lmaWNhbGx5IGBkaXJ0eV9mb2xpb19yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYW5kIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYCkuXG5cbjEuIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMuIEFsbCBuZXcgbG9jYWwgdmFyaWFibGVzIChgZGlydHlfb2ZmYCwgYGRpcnR5X2xlbmAsIGBzdGF0ZWAsIGFuZCBzdGFjayBiaXRtYXAgYG1hcGAgaW4gYGZvbGlvX21rY2xlYW5fZm9yX2lvYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGBiaXRtYXBfemVyb2AsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGV0Yy4pLiBUaGVyZSBhcmUgbm8gaW5mby1sZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdmVjdG9ycy5cbjIuIEtBU0FOIC8gc3RhbmRhcmQgZGV0ZWN0b3JzIGFwcGxpY2FiaWxpdHk6IFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSByYW5nZSBjYWxjdWxhdGlvbnMsIGJpdG1hc2sgb3BlcmF0aW9ucywgb3IgcGFnZSB0YWJsZSB3YWxrcyB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhc3NlcnRpb25zL2xvY2tpbmcgaXNzdWVzLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhbmdlLWJhc2VkIGRpcnR5IHRyYWNraW5nIGZvciBsYXJnZSBmb2xpb3MgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaW9tYXAgKHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLCBgZm9saW9fbWFya19kaXJ0eV9yYW5nZWAsIGFuZCBgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcGApLlxuXG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBBbGwgbmV3IGxvY2FsIHZhcmlhYmxlcyAoYGRpcnR5X29mZmAsIGBkaXJ0eV9sZW5gLCBgc3RhdGVgLCBhbmQgc3RhY2sgYml0bWFwIGBtYXBgIGluIGBmb2xpb19ta2NsZWFuX2Zvcl9pb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChgYml0bWFwX3plcm9gLCBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBldGMuKS4gVGhlcmUgYXJlIG5vIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHZlY3RvcnMuXG4yLiBLQVNBTiAvIHN0YW5kYXJkIGRldGVjdG9ycyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gcmFuZ2UgY2FsY3VsYXRpb25zLCBiaXRtYXNrIG9wZXJhdGlvbnMsIG9yIHBhZ2UgdGFibGUgd2Fsa3Mgd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYXNzZXJ0aW9ucy9sb2NraW5nIGlzc3Vlcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMjo0MS4wMDQxMjY5MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDAxMzcxMjM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaXJ0eV9mb2xpb19yYW5nZVwiLFxuICAgIFwiaW9tYXBfcGFnZV9ta3dyaXRlXCIsXG4gICAgXCJmb2xpb19tYXJrX2RpcnR5X3JhbmdlXCIsXG4gICAgXCJmb2xpb19ta2NsZWFuX2RpcnR5bWFwXCIsXG4gICAgXCJmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmFuZ2UtYmFzZWQgZGlydHkgdHJhY2tpbmcgZm9yIGxhcmdlIGZvbGlvcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpb21hcCAoc3BlY2lmaWNhbGx5IGBkaXJ0eV9mb2xpb19yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYW5kIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYCkuXFxuXFxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcy4gQWxsIG5ldyBsb2NhbCB2YXJpYWJsZXMgKGBkaXJ0eV9vZmZgLCBgZGlydHlfbGVuYCwgYHN0YXRlYCwgYW5kIHN0YWNrIGJpdG1hcCBgbWFwYCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoYGJpdG1hcF96ZXJvYCwgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZXRjLikuIFRoZXJlIGFyZSBubyBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2ZWN0b3JzLlxcbjIuIEtBU0FOIC8gc3RhbmRhcmQgZGV0ZWN0b3JzIGFwcGxpY2FiaWxpdHk6IFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSByYW5nZSBjYWxjdWxhdGlvbnMsIGJpdG1hc2sgb3BlcmF0aW9ucywgb3IgcGFnZSB0YWJsZSB3YWxrcyB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhc3NlcnRpb25zL2xvY2tpbmcgaXNzdWVzLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdWItZm9saW8gcmFuZ2UgZGlydHlpbmcgdmlhIC1cXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UsIGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoKSwgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCgpLCBhbmQgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UoKSBmb3IgWEZTL2lvbWFwLiBJdCBtb2RpZmllcyBjb3JlIE1NIGRpcnR5IGZvbGlvIHRyYWNraW5nLCB3cml0ZS1wcm90ZWN0L2NsZWFuIHRyYW5zaXRpb25zIGluIHdyaXRlYmFjayAoZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKSwgcm1hcCBQVEUvUE1EIGRpcnR5IHdhbGssIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBzaGFyZWQgbWFwcGluZ3MuIFRoZXNlIHJlYWNoYWJsZSBNTSBhbmQgZmlsZXN5c3RlbSBwYXRocyB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjQxLjAwNDEzMTg5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjU5NTA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA1MTliNDYxYzliM2ZkZWNhYTg4MGUwYzkzYjRkYTk5Nzc1MWMxYjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwNDowMjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xcbmluZGV4IDBhNWViZmRhOTBmMTIuLjhkOGE4YWNhYjAxYWMgMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xcbisrKyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcXG5AQCAtODQ3LDE1ICs4NDcsMTkgQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XFxuIFxcbi1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitib29sIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbiB7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRzaXplX3QgbGVuID0gZm9saW9fc2l6ZShmb2xpbyk7XFxuLVxcbi1cXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcXG4tXFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xcbitcXHRpZnNfYWxsb2MobWFwcGluZy1cXHUwMDNlaG9zdCwgZm9saW8sIDApO1xcbitcXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZiwgbGVuKTtcXG4gXFx0cmV0dXJuIGZpbGVtYXBfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKTtcXG4rXFxuK2Jvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLCBmb2xpb19zaXplKGZvbGlvKSk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlydHlfZm9saW8pO1xcbiBcXG4gc3RhdGljIHZvaWRcXG5AQCAtMTgwNCw3ICsxODA4LDcgQEAgaW9tYXBfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfdHJ1bmNhdGVfcGFnZSk7XFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGRpcnR5X29mZiwgc2l6ZV90IGRpcnR5X2xlbilcXG4ge1xcbiBcXHRsb2ZmX3QgbGVuZ3RoID0gaW9tYXBfbGVuZ3RoKGl0ZXIpO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC0xODE3LDcgKzE4MjEsNyBAQCBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4gXFx0XFx0YmxvY2tfY29tbWl0X3dyaXRlKGZvbGlvLCAwLCBsZW5ndGgpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKTtcXG4tXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIGRpcnR5X29mZiwgZGlydHlfbGVuKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xcbkBAIC0xODMyLDYgKzE4MzYsNyBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxcbiBcXHRcXHQucHJpdmF0ZVxcdD0gcHJpdmF0ZSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVxcdTAwM2VwYWdlKTtcXG4rXFx0c2l6ZV90IGRpcnR5X29mZiwgZGlydHlfbGVuO1xcbiBcXHRzc2l6ZV90IHJldDtcXG4gXFxuIFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbkBAIC0xODQwLDggKzE4NDUsMjIgQEAgdm1fZmF1bHRfdCBpb21hcF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHRpdGVyLnBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XFxuIFxcdGl0ZXIubGVuID0gcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQmxvY2tzIGFyZSBzdGlsbCBhbGxvY2F0ZWQgZm9yIHRoZSB3aG9sZSBmb2xpbywgYnV0IG9ubHkgdGhlIHBhZ2VcXG4rXFx0ICogdGhlIGZhdWx0IHdhcyBmb3IgaGFzIGJlZW4gd3JpdHRlbiwgc28gdGhhdCBpcyBhbGwgdGhhdCBoYXMgdG8gYmVcXG4rXFx0ICogd3JpdHRlbiBiYWNrLiAgQSByYWNpbmcgdHJ1bmNhdGUgY2FuIGxlYXZlIHRoYXQgcGFnZSBiZXlvbmQgaV9zaXplLFxcbitcXHQgKiBhbmQgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRpcnR5LlxcbitcXHQgKi9cXG4rXFx0ZGlydHlfb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cXHUwMDNlcGFnZSkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4rXFx0aWYgKGRpcnR5X29mZiBcXHUwMDNjIHJldClcXG4rXFx0XFx0ZGlydHlfbGVuID0gbWluX3Qoc2l6ZV90LCBQQUdFX1NJWkUsIHJldCAtIGRpcnR5X29mZik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGlydHlfbGVuID0gMDtcXG4rXFxuIFxcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcXHUwMDI2aXRlciwgb3BzKSkgXFx1MDAzZSAwKVxcbi1cXHRcXHRpdGVyLnN0YXR1cyA9IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihcXHUwMDI2aXRlciwgZm9saW8pO1xcbitcXHRcXHRpdGVyLnN0YXR1cyA9IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihcXHUwMDI2aXRlciwgZm9saW8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXFxuaW5kZXggNzRhNjA4OWFiYWRmOS4uNjAwZTdkZTJlNTk5YyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xcbisrKyBiL2ZzL3hmcy94ZnNfYW9wcy5jXFxuQEAgLTg2Myw3ICs4NjMsNyBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5yZWFkX2ZvbGlvXFx0XFx0PSB4ZnNfdm1fcmVhZF9mb2xpbyxcXG4gXFx0LnJlYWRhaGVhZFxcdFxcdD0geGZzX3ZtX3JlYWRhaGVhZCxcXG4gXFx0LndyaXRlcGFnZXNcXHRcXHQ9IHhmc192bV93cml0ZXBhZ2VzLFxcbi1cXHQuZGlydHlfZm9saW9cXHRcXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxcbitcXHQuZGlydHlfZm9saW9fcmFuZ2VcXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlLFxcbiBcXHQucmVsZWFzZV9mb2xpb1xcdFxcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG4gXFx0LmludmFsaWRhdGVfZm9saW9cXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXFxuIFxcdC5ibWFwXFx0XFx0XFx0PSB4ZnNfdm1fYm1hcCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuaW5kZXggMDcyZDhjZDA5YTBiMi4uMWQ5OGI2YzBiODgwNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtNDA2LDYgKzQwNiw5IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMge1xcbiBcXG4gXFx0LyogTWFyayBhIGZvbGlvIGRpcnR5LiAgUmV0dXJuIHRydWUgaWYgdGhpcyBkaXJ0aWVkIGl0ICovXFxuIFxcdGJvb2wgKCpkaXJ0eV9mb2xpbykoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGZvbGlvICopO1xcbitcXHQvKiBNYXJrIFtvZmYsIG9mZiArIGxlbikgb2YgYSBmb2xpbyBkaXJ0eSAqL1xcbitcXHRib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xcbiBcXG4gXFx0dm9pZCAoKnJlYWRhaGVhZCkoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICopO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuaW5kZXggYmM3YWU2MzI3ZGJmOC4uM2NmMmFjNzUxNDA5YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG5AQCAtNDQzLDYgKzQ0Myw4IEBAIHN0cnVjdCBmb2xpbyAqaW9tYXBfZ2V0X2ZvbGlvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuKTtcXG4gYm9vbCBpb21hcF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9mbGFncyk7XFxuIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTtcXG4gYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xcbiB2b2lkIGlvbWFwX2ZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGludCBpb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA4N2ZlYWE1YTJiNzgwLi43NjI4MjYyYzE3ZTE0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC0zMzM3LDYgKzMzMzcsNyBAQCBzdHJ1Y3Qga3ZlYztcXG4gc3RydWN0IHBhZ2UgKmdldF9kdW1wX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKmxvY2tlZCk7XFxuIFxcbiBib29sIGZvbGlvX21hcmtfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcXG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5X2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGJvb2wgc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X3BhZ2VfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcXG5pbmRleCA4ZGMwODcxZTVmMDAxLi42ZmMwYTYwMjAyNTI3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcXG5AQCAtOTI3LDYgKzkyNyw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2xlYW5lZCBQVEVzLlxcbiAgKi9cXG4gaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICopO1xcbitpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApO1xcbiBcXG4gaW50IG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuQEAgLTk5MCw2ICs5OTEsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gI2VuZGlmXFx0LyogQ09ORklHX01NVSAqL1xcbiBcXG4gI2VuZGlmXFx0LyogX0xJTlVYX1JNQVBfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggOGRhMGY5NDUxNDFiNC4uMjdhMDU5ZTBjMDE2ZiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTM3NzgsMTAgKzM3NzgsMTkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXFx1MDAzZXBhZ2UpO1xcbitcXHRzaXplX3Qgb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cXHUwMDNlcGFnZSkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4gXFx0Ym9vbCBkaXJ0aWVkO1xcbiBcXHRib29sIHBhZ2VfbWt3cml0ZSA9IHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VwYWdlX21rd3JpdGU7XFxuIFxcbi1cXHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgUE1EIGVudHJ5IGhhcyBvbmUgZGlydHkgYml0IGZvciB0aGUgd2hvbGUgZm9saW8sIHNvIHRoZXJlIGlzIG5vXFxuK1xcdCAqIGZpbmVyIGluZm9ybWF0aW9uIHRvIHBhc3Mgb24uIEEgUFRFLW1hcHBlZCBmb2xpbyBvbmx5IGhhcyB0aGUgcGFnZVxcbitcXHQgKiB0aGUgZmF1bHQgd2FzIGZvciBkaXJ0aWVkIHNvIGZhci5cXG4rXFx0ICovXFxuK1xcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRwX2dldF9sb2NrbGVzcyh2bWYtXFx1MDAzZXBtZCkpKVxcbitcXHRcXHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIG9mZiwgUEFHRV9TSVpFKTtcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTtcXG4gXFx0LypcXG4gXFx0ICogVGFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3Nfc3BhY2UgLSBmb2xpby5tYXBwaW5nIG1heSBiZSB6ZXJvZWRcXG5AQCAtNTYyNSw2ICs1NjM0LDMxIEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisvKlxcbisgKiBNYXkgdGhlIHdob2xlIGJhdGNoIGJlIG1hcmtlZCBkaXJ0eT9cXG4rICpcXG4rICogT25seSBhIHNoYXJlZCBtYXBwaW5nIG9mIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXIgYmxvY2sgc2F5c1xcbisgKiBuby4gVGhlcmUgdGhlIHBhZ2UgdGFibGUgZGlydHkgYml0cyBhcmUgdGhlIG9ubHkgcmVjb3JkIG9mIHdoaWNoIHBhcnRzIG9mIGFcXG4rICogbGFyZ2UgZm9saW8gd2VyZSB3cml0dGVuIHRocm91Z2ggdGhlIG1hcHBpbmcsIHNvIHBhZ2VzIG5vYm9keSBoYXMgc3RvcmVkIHRvXFxuKyAqIGhhdmUgdG8gc3RheSBjbGVhbiBhbmQgbGV0IHRoZSBoYXJkd2FyZSBzZXQgdGhlIGJpdCBvbiB0aGUgZmlyc3Qgc3RvcmUuXFxuKyAqXFxuKyAqIEV2ZXJ5d2hlcmUgZWxzZSBub3RoaW5nIGV2ZXIgcmVhZHMgdGhvc2UgYml0cywgYW5kIG9uIGhhcmR3YXJlIHdpdGhvdXQgYVxcbisgKiBkaXJ0eSBiaXQgbGVhdmluZyB0aGVtIGNsZWFuIGNvc3RzIGEgZmF1bHQgcGVyIHBhZ2UgZm9yIG5vdGhpbmcuIFRoYXQgY292ZXJzXFxuKyAqIHNobWVtLCB3aGljaCBoYXMgbm8gZGlydHkgc3RhdGUgYmVsb3cgdGhlIGZvbGlvLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsXFxuK1xcdFxcdFxcdFxcdCAgYm9vbCBwcmVmYXVsdClcXG4re1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbitcXG4rXFx0aWYgKCEodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpIHx8IHByZWZhdWx0IHx8IG5yID09IDEpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gIXZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW9fcmFuZ2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZXRfcHRlX3JhbmdlIC0gU2V0IGEgcmFuZ2Ugb2YgUFRFcyB0byBwb2ludCB0byBwYWdlcyBpbiBhIGZvbGlvLlxcbiAgKiBAdm1mOiBGYXVsdCBkZXNjcmlwdGlvbi5cXG5AQCAtNTYzOSw2ICs1NjczLDcgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbiBcXHRib29sIHdyaXRlID0gdm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEU7XFxuIFxcdGJvb2wgcHJlZmF1bHQgPSAhaW5fcmFuZ2Uodm1mLVxcdTAwM2VhZGRyZXNzLCBhZGRyLCBuciAqIFBBR0VfU0laRSk7XFxuK1xcdGJvb2wgZGlydHlfYmF0Y2ggPSBjYW5fZGlydHlfd2hvbGVfYmF0Y2godm1mLCBuciwgcHJlZmF1bHQpO1xcbiBcXHRwdGVfdCBlbnRyeTtcXG4gXFxuIFxcdGZsdXNoX2ljYWNoZV9wYWdlcyh2bWEsIHBhZ2UsIG5yKTtcXG5AQCAtNTY0OSwxMCArNTY4NCwxMyBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGVsc2VcXG4gXFx0XFx0ZW50cnkgPSBwdGVfc3dfbWt5b3VuZyhlbnRyeSk7XFxuIFxcbi1cXHRpZiAod3JpdGUpXFxuLVxcdFxcdGVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7XFxuLVxcdGVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuK1xcdGlmICh3cml0ZSkge1xcbitcXHRcXHRpZiAoZGlydHlfYmF0Y2gpXFxuK1xcdFxcdFxcdGVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpO1xcbitcXHRcXHRlbnRyeSA9IG1heWJlX21rd3JpdGUoZW50cnksIHZtYSk7XFxuK1xcdH0gZWxzZSBpZiAocHRlX3dyaXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xcbiBcXHRcXHRlbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTtcXG4rXFx0fVxcbiBcXHRpZiAodW5saWtlbHkodm1mX29yaWdfcHRlX3VmZmRfd3Aodm1mKSkpXFxuIFxcdFxcdGVudHJ5ID0gcHRlX21rdWZmZChlbnRyeSk7XFxuIFxcdC8qIGNvcHktb24td3JpdGUgcGFnZSAqL1xcbkBAIC01NjY1LDYgKzU3MDMsMTggQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHR9XFxuIFxcdHNldF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHZtZi1cXHUwMDNlcHRlLCBlbnRyeSwgbnIpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIHBhZ2UgdGhlIGZhdWx0IHdhcyBmb3IgaXMgYWJvdXQgdG8gYmUgc3RvcmVkIHRvLCBzbyBkaXJ0eSBpdFxcbitcXHQgKiBoZXJlIHJhdGhlciB0aGFuIGxlYXZlIHRoZSBzdG9yZSB0byBhIHNlY29uZCBwYWdlIHRhYmxlIHdhbGssIG9yIHRvXFxuK1xcdCAqIGEgc2Vjb25kIGZhdWx0IHdoZXJlIHRoZSBkaXJ0eSBiaXQgaXMgbWFpbnRhaW5lZCBpbiBzb2Z0d2FyZS5cXG4rXFx0ICovXFxuK1xcdGlmICghZGlydHlfYmF0Y2gpIHtcXG4rXFx0XFx0cHRlX3QgKnB0ZXAgPSB2bWYtXFx1MDAzZXB0ZSArICgodm1mLVxcdTAwM2VhZGRyZXNzIC0gYWRkcikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcbitcXHRcXHRwdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHB0ZXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHB0ZV9ta2RpcnR5KHB0ZXBfZ2V0KHB0ZXApKSwgMSk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNhY2hlZCAqL1xcbiBcXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHZtZiwgdm1hLCBhZGRyLCB2bWYtXFx1MDAzZXB0ZSwgbnIpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jXFxuaW5kZXggNmM5YzdiYTg5YjhhOS4uMzliNTRjMjVhOWZhYiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jXFxuKysrIGIvbW0vcGFnZS13cml0ZWJhY2suY1xcbkBAIC0yNzUxLDYgKzI3NTEsMjEgQEAgYm9vbCBmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2UpO1xcbiBcXG4rLypcXG4rICogSGFuZCBhIGRpcnRpZWQgcmFuZ2Ugb2YgQGZvbGlvIHRvIHRoZSBmaWxlc3lzdGVtLiAgLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIGNhblxcbisgKiBleHByZXNzIGV2ZXJ5dGhpbmcgLVxcdTAwM2VkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdFxcbisgKiBkb2VzIG5vdCBuZWVkIGJvdGgsIGFuZCBhIHdob2xlLWZvbGlvIGRpcnR5IGNvbWVzIHRocm91Z2ggaGVyZSBhcyBhIHJhbmdlXFxuKyAqIGNvdmVyaW5nIHRoZSBmb2xpby5cXG4rICovXFxuK3N0YXRpYyBib29sIG1hcHBpbmdfZGlydHlfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0aWYgKCFtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UpXFxuK1xcdFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xcbitcXG4rXFx0cmV0dXJuIG1hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgb2ZmLCBsZW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogZm9saW9fbWFya19kaXJ0eSAtIE1hcmsgYSBmb2xpbyBhcyBiZWluZyBtb2RpZmllZC5cXG4gICogQGZvbGlvOiBUaGUgZm9saW8uXFxuQEAgLTI3ODIsMTMgKzI3OTcsMzkgQEAgYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcXG4gXFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XFxuLVxcdFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xcbitcXHRcXHRyZXR1cm4gbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gbm9vcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChmb2xpb19tYXJrX2RpcnR5KTtcXG4gXFxuKy8qKlxcbisgKiBmb2xpb19tYXJrX2RpcnR5X3JhbmdlIC0gTWFyayBwYXJ0IG9mIGEgZm9saW8gYXMgYmVpbmcgbW9kaWZpZWQuXFxuKyAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbisgKiBAb2ZmOiBPZmZzZXQgb2YgdGhlIG1vZGlmaWVkIHJhbmdlIHdpdGhpbiB0aGUgZm9saW8uXFxuKyAqIEBsZW46IExlbmd0aCBvZiB0aGUgbW9kaWZpZWQgcmFuZ2UuXFxuKyAqXFxuKyAqIExpa2UgZm9saW9fbWFya19kaXJ0eSgpLCBidXQgdGVsbHMgYSBmaWxlc3lzdGVtIHRoYXQgdHJhY2tzIGRpcnR5IHN0YXRlIHBlclxcbisgKiBibG9jayB0aGF0IG9ubHkgW0BvZmYsIEBvZmYgKyBAbGVuKSBjaGFuZ2VkLCBzbyB3cml0ZWJhY2sgY2FuIHNraXAgdGhlIHJlc3RcXG4rICogb2YgdGhlIGZvbGlvLiAgRmlsZXN5c3RlbXMgd2l0aG91dCB0aGF0IHRyYWNraW5nIGRpcnR5IHRoZSB3aG9sZSBmb2xpby5cXG4rICpcXG4rICogUmV0dXJuOiBUcnVlIGlmIHRoZSBmb2xpbyB3YXMgbmV3bHkgZGlydGllZCwgZmFsc2UgaWYgaXQgd2FzIGFscmVhZHkgZGlydHkuXFxuKyAqL1xcbitib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbitcXG4rXFx0aWYgKGxpa2VseShtYXBwaW5nKSkge1xcbitcXHRcXHRpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcXG4rXFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XFxuK1xcdFxcdHJldHVybiBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLCBvZmYsIGxlbik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4rfVxcbitcXG4gLypcXG4gICogZm9saW9fbWFya19kaXJ0eSgpIGlzIHJhY3kgaWYgdGhlIGNhbGxlciBoYXMgbm8gcmVmZXJlbmNlIGFnYWluc3RcXG4gICogZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QsIGFuZCBpZiB0aGUgZm9saW8gaXMgdW5sb2NrZWQuICBUaGlzIGlzIGJlY2F1c2UgYW5vdGhlclxcbkBAIC0yODQ0LDYgKzI4ODUsNDEgQEAgdm9pZCBfX2ZvbGlvX2NhbmNlbF9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woX19mb2xpb19jYW5jZWxfZGlydHkpO1xcbiBcXG4rLypcXG4rICogV3JpdGUtcHJvdGVjdCBldmVyeSBtYXBwaW5nIG9mIEBmb2xpbyBhbmQgaGFuZCB0aGUgZmlsZXN5c3RlbSB0aGUgcGFydHMgdGhhdFxcbisgKiB3ZXJlIGRpcnR5IGluIGEgcGFnZSB0YWJsZS5cXG4rICpcXG4rICogV2l0aG91dCAtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgdGhlcmUgaXMgbm93aGVyZSB0byBwdXQgcGVyLWJsb2NrIHN0YXRlLCBzb1xcbisgKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90XFxuKyAqIGFscmVhZHkgZGlydHksIGJlY2F1c2UgdGhlbiB0aGUgZGlydHkgdHJhbnNpdGlvbiBuZWVkcyB0aGUgZnVsbCBhY2NvdW50aW5nXFxuKyAqIGluIGZvbGlvX21hcmtfZGlydHkoKSwgYW5kIGZvciBhIGZvbGlvIHRvbyBsYXJnZSBmb3IgdGhlIGJpdG1hcCwgd2hpY2ggdGhlXFxuKyAqIHBhZ2UgY2FjaGUgZG9lcyBub3QgbWFrZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGZvbGlvX21rY2xlYW5fZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRERUNMQVJFX0JJVE1BUChtYXAsIDFVTCBcXHUwMDNjXFx1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcXG4rXFx0dW5zaWduZWQgaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDtcXG4rXFxuK1xcdGlmICghbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxcbitcXHQgICAgV0FSTl9PTl9PTkNFKG5yIFxcdTAwM2UgKDFVTCBcXHUwMDNjXFx1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKSkpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKVxcbitcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRiaXRtYXBfemVybyhtYXAsIG5yKTtcXG4rXFx0aWYgKCFmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBtYXApKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucikge1xcbitcXHRcXHRtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgKHNpemVfdClzdGFydCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHQgICAgKHNpemVfdCkoZW5kIC0gc3RhcnQpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIENsZWFyIGEgZm9saW8ncyBkaXJ0eSBmbGFnLCB3aGlsZSBjYXJpbmcgZm9yIGRpcnR5IG1lbW9yeSBhY2NvdW50aW5nLlxcbiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbGlvIHdhcyBwcmV2aW91c2x5IGRpcnR5LlxcbkBAIC0yODc1LDkgKzI5NTEsOSBAQCBib29sIGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRcXHQgKlxcbiBcXHRcXHQgKiBXZSB1c2UgdGhpcyBzZXF1ZW5jZSB0byBtYWtlIHN1cmUgdGhhdFxcbiBcXHRcXHQgKiAgKGEpIHdlIGFjY291bnQgZm9yIGRpcnR5IHN0YXRzIHByb3Blcmx5XFxuLVxcdFxcdCAqICAoYikgd2UgdGVsbCB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gdG9cXG4tXFx0XFx0ICogICAgICBtYXJrIHRoZSB3aG9sZSBmb2xpbyBkaXJ0eSBpZiBpdCB3YXNcXG4tXFx0XFx0ICogICAgICBkaXJ0eSBpbiBhIHBhZ2V0YWJsZS4gT25seSB0byB0aGVuXFxuK1xcdFxcdCAqICAoYikgd2UgdGVsbCB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gd2hpY2hcXG4rXFx0XFx0ICogICAgICBwYXJ0cyBvZiB0aGUgZm9saW8gd2VyZSBkaXJ0eSBpbiBhXFxuK1xcdFxcdCAqICAgICAgcGFnZXRhYmxlLiBPbmx5IHRvIHRoZW5cXG4gXFx0XFx0ICogIChjKSBjbGVhbiB0aGUgZm9saW8gYWdhaW4gYW5kIHJldHVybiAxIHRvXFxuIFxcdFxcdCAqICAgICAgY2F1c2UgdGhlIHdyaXRlYmFjay5cXG4gXFx0XFx0ICpcXG5AQCAtMjg5NSw4ICsyOTcxLDcgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0ICogYXMgYSBzZXJpYWxpemF0aW9uIHBvaW50IGZvciBhbGwgdGhlIGRpZmZlcmVudFxcbiBcXHRcXHQgKiB0aHJlYWRzIGRvaW5nIHRoZWlyIHRoaW5ncy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSlcXG4tXFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX21rY2xlYW5fZm9yX2lvKGZvbGlvLCBtYXBwaW5nKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgY2FyZWZ1bGx5IHN5bmNocm9uaXNlIGZhdWx0IGhhbmRsZXJzIGFnYWluc3RcXG4gXFx0XFx0ICogaW5zdGFsbGluZyBhIGRpcnR5IHB0ZSBhbmQgbWFya2luZyB0aGUgZm9saW8gZGlydHlcXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggMWY3MmQyNzliYTY4Zi4uYWFmNDVhYzc5ZmE4NCAxMDA2NDRcXG4tLS0gYS9tbS9ybWFwLmNcXG4rKysgYi9tbS9ybWFwLmNcXG5AQCAtMTEwMCwxMiArMTEwMCwxOCBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbiBcXHRyZXR1cm4gcndjLmNvbnRlbmRlZCA/IC0xIDogcHJhLnJlZmVyZW5jZWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbitzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcDtcXG4rXFx0aW50IGNsZWFuZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxcbiB7XFxuLVxcdGludCBjbGVhbmVkID0gMDtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVxcdTAwM2V2bWE7XFxuLVxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHB2bXctXFx1MDAzZWFkZHJlc3M7XFxuK1xcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuK1xcdGludCBjbGVhbmVkID0gMDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdlIGhhdmUgdG8gYXNzdW1lIHRoZSB3b3JzZSBjYXNlIGllIHBtZCBmb3IgaW52YWxpZGF0aW9uLiBOb3RlIHRoYXRcXG5AQCAtMTEzNCw2ICsxMTQwLDE1IEBAIHN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbiBcXHRcXHRcXHRpZiAoIXB0ZV9kaXJ0eShlbnRyeSkgXFx1MDAyNlxcdTAwMjYgIXB0ZV93cml0ZShlbnRyeSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0XFx0aWYgKGRpcnR5X21hcCBcXHUwMDI2XFx1MDAyNiBwdGVfZGlydHkoZW50cnkpKSB7XFxuK1xcdFxcdFxcdFxcdHBnb2ZmX3QgaWR4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHB2bXctXFx1MDAzZXBnb2ZmO1xcbitcXG4rXFx0XFx0XFx0XFx0LyogVGhlIHdhbGsgb25seSB2aXNpdHMgcGFnZXMgb2YgdGhpcyBmb2xpbyAqL1xcbitcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoaWR4IFxcdTAwM2U9IHB2bXctXFx1MDAzZW5yX3BhZ2VzKTtcXG4rXFx0XFx0XFx0XFx0X19zZXRfYml0KGlkeCwgZGlydHlfbWFwKTtcXG4rXFx0XFx0XFx0fVxcbitcXG4gXFx0XFx0XFx0Zmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHB0ZV9wZm4oZW50cnkpKTtcXG4gXFx0XFx0XFx0ZW50cnkgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHRlKTtcXG4gXFx0XFx0XFx0ZW50cnkgPSBwdGVfd3Jwcm90ZWN0KGVudHJ5KTtcXG5AQCAtMTE1NSw2ICsxMTcwLDkgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuIFxcdFxcdFxcdGlmICghcG1kX2RpcnR5KGVudHJ5KSBcXHUwMDI2XFx1MDAyNiAhcG1kX3dyaXRlKGVudHJ5KSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRcXHRpZiAoZGlydHlfbWFwIFxcdTAwMjZcXHUwMDI2IHBtZF9kaXJ0eShlbnRyeSkpXFxuK1xcdFxcdFxcdFxcdGJpdG1hcF9zZXQoZGlydHlfbWFwLCAwLCBwdm13LVxcdTAwM2Vucl9wYWdlcyk7XFxuK1xcbiBcXHRcXHRcXHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgYWRkcmVzcyArIEhQQUdFX1BNRF9TSVpFKTtcXG4gXFx0XFx0XFx0ZW50cnkgPSBwbWRwX2ludmFsaWRhdGUodm1hLCBhZGRyZXNzLCBwbWQpO1xcbkBAIC0xMTgxLDkgKzExOTksOSBAQCBzdGF0aWMgYm9vbCBwYWdlX21rY2xlYW5fb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbiB7XFxuIFxcdERFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCBQVk1XX1NZTkMpO1xcbi1cXHRpbnQgKmNsZWFuZWQgPSBhcmc7XFxuK1xcdHN0cnVjdCBta2NsZWFuX3N0YXRlICpzdGF0ZSA9IGFyZztcXG4gXFxuLVxcdCpjbGVhbmVkICs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKFxcdTAwMjZwdm13KTtcXG4rXFx0c3RhdGUtXFx1MDAzZWNsZWFuZWQgKz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXFx1MDAyNnB2bXcsIHN0YXRlLVxcdTAwM2VkaXJ0eV9tYXApO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5AQCAtMTE5NiwxMiArMTIxNCwyMyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX21rY2xlYW5fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1pbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbisvKipcXG4rICogZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCAtIFdyaXRlLXByb3RlY3QgYSBmb2xpbyBhbmQgcmVwb3J0IHdoYXQgd2FzIGRpcnR5LlxcbisgKiBAZm9saW86IFRoZSBmb2xpbyB0byBjbGVhbi5cXG4rICogQGRpcnR5X21hcDogQml0bWFwIG9mIGF0IGxlYXN0IGZvbGlvX25yX3BhZ2VzKEBmb2xpbykgYml0cywgb3IgTlVMTC5cXG4rICpcXG4rICogV3JpdGUtcHJvdGVjdHMgYW5kIGNsZWFucyBldmVyeSBtYXBwaW5nIG9mIEBmb2xpby4gIFdpdGggQGRpcnR5X21hcCwgc2V0cyBhXFxuKyAqIGJpdCBmb3IgZWFjaCBwYWdlIHdob3NlIGVudHJ5IHdhcyBkaXJ0eTsgYSBQTUQtbWFwcGVkIGZvbGlvIGhhcyBvbmUgZGlydHlcXG4rICogYml0IGZvciBhbGwgb2YgaXQsIHNvIGV2ZXJ5IHBhZ2UgaXMgcmVwb3J0ZWQuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIG51bWJlciBvZiBwYWdlIHRhYmxlIGVudHJpZXMgY2xlYW5lZC5cXG4rICovXFxuK2ludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcClcXG4ge1xcbi1cXHRpbnQgY2xlYW5lZCA9IDA7XFxuK1xcdHN0cnVjdCBta2NsZWFuX3N0YXRlIHN0YXRlID0geyAuZGlydHlfbWFwID0gZGlydHlfbWFwIH07XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbiBcXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xcbi1cXHRcXHQuYXJnID0gKHZvaWQgKilcXHUwMDI2Y2xlYW5lZCxcXG4rXFx0XFx0LmFyZyA9ICh2b2lkICopXFx1MDAyNnN0YXRlLFxcbiBcXHRcXHQucm1hcF9vbmUgPSBwYWdlX21rY2xlYW5fb25lLFxcbiBcXHRcXHQuaW52YWxpZF92bWEgPSBpbnZhbGlkX21rY2xlYW5fdm1hLFxcbiBcXHR9O1xcbkBAIC0xMjE3LDcgKzEyNDYsMTIgQEAgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIFxcdHJtYXBfd2Fsayhmb2xpbywgXFx1MDAyNnJ3Yyk7XFxuIFxcbi1cXHRyZXR1cm4gY2xlYW5lZDtcXG4rXFx0cmV0dXJuIHN0YXRlLmNsZWFuZWQ7XFxuK31cXG4rXFxuK2ludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIE5VTEwpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX21rY2xlYW4pO1xcbiBcXG5AQCAtMTI0MSw3ICsxMjc1LDcgQEAgc3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdC5mbGFnc1xcdFxcdD0gUFZNV19TWU5DLFxcbiBcXHR9O1xcbiBcXG4tXFx0c3RhdGUtXFx1MDAzZWNsZWFuZWQgKz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXFx1MDAyNnB2bXcpO1xcbitcXHRzdGF0ZS1cXHUwMDNlY2xlYW5lZCArPSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcXHUwMDI2cHZtdywgTlVMTCk7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbkBAIC0xMzI0LDcgKzEzNTgsNyBAQCBpbnQgcGZuX21rY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHBnb2ZmX3QgcGdvZmYsXFxuIFxcdHB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcXG4gXFx0Vk1fQlVHX09OX1ZNQShwdm13LmFkZHJlc3MgPT0gLUVGQVVMVCwgdm1hKTtcXG4gXFxuLVxcdHJldHVybiBwYWdlX3ZtYV9ta2NsZWFuX29uZShcXHUwMDI2cHZtdyk7XFxuK1xcdHJldHVybiBwYWdlX3ZtYV9ta2NsZWFuX29uZShcXHUwMDI2cHZtdywgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fZm9saW9fbW9kX3N0YXQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5yLCBpbnQgbnJfcG1kbWFwcGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMjo0Mi40NjczODI0MzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3ODg2MDc1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlXCIsXG4gICAgXCJpb21hcF9wYWdlX21rd3JpdGVcIixcbiAgICBcImZvbGlvX21hcmtfZGlydHlfcmFuZ2VcIixcbiAgICBcImZvbGlvX21rY2xlYW5fZGlydHltYXBcIixcbiAgICBcImZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1Yi1mb2xpbyByYW5nZSBkaXJ0eWluZyB2aWEgLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSwgZm9saW9fbWFya19kaXJ0eV9yYW5nZSgpLCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKCksIGFuZCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSgpIGZvciBYRlMvaW9tYXAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gZGlydHkgZm9saW8gdHJhY2tpbmcsIHdyaXRlLXByb3RlY3QvY2xlYW4gdHJhbnNpdGlvbnMgaW4gd3JpdGViYWNrIChmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8pLCBybWFwIFBURS9QTUQgZGlydHkgd2FsaywgYW5kIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncy4gVGhlc2UgcmVhY2hhYmxlIE1NIGFuZCBmaWxlc3lzdGVtIHBhdGhzIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNTE5YjQ2MWM5YjNmZGVjYWE4ODBlMGM5M2I0ZGE5OTc3NTFjMWIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNDowMjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5pbmRleCAwYTVlYmZkYTkwZjEyLi44ZDhhOGFjYWIwMWFjIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTg0NywxNSArODQ3LDE5IEBAIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbiBcbi1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHNpemVfdCBsZW4gPSBmb2xpb19zaXplKGZvbGlvKTtcbi1cbi1cdGlmc19hbGxvYyhpbm9kZSwgZm9saW8sIDApO1xuLVx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xuK1x0aWZzX2FsbG9jKG1hcHBpbmctXHUwMDNlaG9zdCwgZm9saW8sIDApO1xuK1x0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBvZmYsIGxlbik7XG4gXHRyZXR1cm4gZmlsZW1hcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKTtcbitcbitib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgMCwgZm9saW9fc2l6ZShmb2xpbykpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpbyk7XG4gXG4gc3RhdGljIHZvaWRcbkBAIC0xODA0LDcgKzE4MDgsNyBAQCBpb21hcF90cnVuY2F0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGJvb2wgKmRpZF96ZXJvLFxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3RydW5jYXRlX3BhZ2UpO1xuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3QgZGlydHlfb2ZmLCBzaXplX3QgZGlydHlfbGVuKVxuIHtcbiBcdGxvZmZfdCBsZW5ndGggPSBpb21hcF9sZW5ndGgoaXRlcik7XG4gXHRpbnQgcmV0O1xuQEAgLTE4MTcsNyArMTgyMSw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0XHRibG9ja19jb21taXRfd3JpdGUoZm9saW8sIDAsIGxlbmd0aCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKTtcbi1cdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIGRpcnR5X29mZiwgZGlydHlfbGVuKTtcbiBcdH1cbiBcbiBcdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTtcbkBAIC0xODMyLDYgKzE4MzYsNyBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuIFx0XHQucHJpdmF0ZVx0PSBwcml2YXRlLFxuIFx0fTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbitcdHNpemVfdCBkaXJ0eV9vZmYsIGRpcnR5X2xlbjtcbiBcdHNzaXplX3QgcmV0O1xuIFxuIFx0Zm9saW9fbG9jayhmb2xpbyk7XG5AQCAtMTg0MCw4ICsxODQ1LDIyIEBAIHZtX2ZhdWx0X3QgaW9tYXBfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdGl0ZXIucG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiBcdGl0ZXIubGVuID0gcmV0O1xuK1xuK1x0LypcbitcdCAqIEJsb2NrcyBhcmUgc3RpbGwgYWxsb2NhdGVkIGZvciB0aGUgd2hvbGUgZm9saW8sIGJ1dCBvbmx5IHRoZSBwYWdlXG4rXHQgKiB0aGUgZmF1bHQgd2FzIGZvciBoYXMgYmVlbiB3cml0dGVuLCBzbyB0aGF0IGlzIGFsbCB0aGF0IGhhcyB0byBiZVxuK1x0ICogd3JpdHRlbiBiYWNrLiAgQSByYWNpbmcgdHJ1bmNhdGUgY2FuIGxlYXZlIHRoYXQgcGFnZSBiZXlvbmQgaV9zaXplLFxuK1x0ICogYW5kIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkaXJ0eS5cbitcdCAqL1xuK1x0ZGlydHlfb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cdTAwM2VwYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbitcdGlmIChkaXJ0eV9vZmYgXHUwMDNjIHJldClcbitcdFx0ZGlydHlfbGVuID0gbWluX3Qoc2l6ZV90LCBQQUdFX1NJWkUsIHJldCAtIGRpcnR5X29mZik7XG4rXHRlbHNlXG4rXHRcdGRpcnR5X2xlbiA9IDA7XG4rXG4gXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXHUwMDI2aXRlciwgb3BzKSkgXHUwMDNlIDApXG4tXHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKFx1MDAyNml0ZXIsIGZvbGlvKTtcbitcdFx0aXRlci5zdGF0dXMgPSBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoXHUwMDI2aXRlciwgZm9saW8sXG4rXHRcdFx0XHRcdFx0ICAgICAgIGRpcnR5X29mZiwgZGlydHlfbGVuKTtcbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5pbmRleCA3NGE2MDg5YWJhZGY5Li42MDBlN2RlMmU1OTljIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19hb3BzLmNcbisrKyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5AQCAtODYzLDcgKzg2Myw3IEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgeGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2ZvbGlvXHRcdD0geGZzX3ZtX3JlYWRfZm9saW8sXG4gXHQucmVhZGFoZWFkXHRcdD0geGZzX3ZtX3JlYWRhaGVhZCxcbiBcdC53cml0ZXBhZ2VzXHRcdD0geGZzX3ZtX3dyaXRlcGFnZXMsXG4tXHQuZGlydHlfZm9saW9cdFx0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbitcdC5kaXJ0eV9mb2xpb19yYW5nZVx0PSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSxcbiBcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQuYm1hcFx0XHRcdD0geGZzX3ZtX2JtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCAwNzJkOGNkMDlhMGIyLi4xZDk4YjZjMGI4ODA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC00MDYsNiArNDA2LDkgQEAgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB7XG4gXG4gXHQvKiBNYXJrIGEgZm9saW8gZGlydHkuICBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGRpcnRpZWQgaXQgKi9cbiBcdGJvb2wgKCpkaXJ0eV9mb2xpbykoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGZvbGlvICopO1xuK1x0LyogTWFyayBbb2ZmLCBvZmYgKyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi9cbitcdGJvb2wgKCpkaXJ0eV9mb2xpb19yYW5nZSkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xuIFxuIFx0dm9pZCAoKnJlYWRhaGVhZCkoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICopO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggYmM3YWU2MzI3ZGJmOC4uM2NmMmFjNzUxNDA5YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtNDQzLDYgKzQ0Myw4IEBAIHN0cnVjdCBmb2xpbyAqaW9tYXBfZ2V0X2ZvbGlvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuKTtcbiBib29sIGlvbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcbiB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbik7XG4gYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rYm9vbCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0c2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4gdm9pZCBpb21hcF9mb2xpb19tYXJrX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBpb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggODdmZWFhNWEyYjc4MC4uNzYyODI2MmMxN2UxNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzMzNyw2ICszMzM3LDcgQEAgc3RydWN0IGt2ZWM7XG4gc3RydWN0IHBhZ2UgKmdldF9kdW1wX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKmxvY2tlZCk7XG4gXG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcbiBib29sIGZvbGlvX21hcmtfZGlydHlfbG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHNldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X3BhZ2VfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuaW5kZXggOGRjMDg3MWU1ZjAwMS4uNmZjMGE2MDIwMjUyNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuQEAgLTkyNyw2ICs5MjcsNyBAQCB1bnNpZ25lZCBsb25nIHBhZ2VfYWRkcmVzc19pbl92bWEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2xlYW5lZCBQVEVzLlxuICAqL1xuIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqKTtcbitpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApO1xuIFxuIGludCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZixcbiBcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuQEAgLTk5MCw2ICs5OTEsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuICNlbmRpZlx0LyogQ09ORklHX01NVSAqL1xuIFxuICNlbmRpZlx0LyogX0xJTlVYX1JNQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhkYTBmOTQ1MTQxYjQuLjI3YTA1OWUwYzAxNmYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC0zNzc4LDEwICszNzc4LDE5IEBAIHN0YXRpYyB2bV9mYXVsdF90IGZhdWx0X2RpcnR5X3NoYXJlZF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSk7XG4rXHRzaXplX3Qgb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cdTAwM2VwYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcdGJvb2wgZGlydGllZDtcbiBcdGJvb2wgcGFnZV9ta3dyaXRlID0gdm1hLVx1MDAzZXZtX29wcyBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VwYWdlX21rd3JpdGU7XG4gXG4tXHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHQvKlxuK1x0ICogQSBQTUQgZW50cnkgaGFzIG9uZSBkaXJ0eSBiaXQgZm9yIHRoZSB3aG9sZSBmb2xpbywgc28gdGhlcmUgaXMgbm9cbitcdCAqIGZpbmVyIGluZm9ybWF0aW9uIHRvIHBhc3Mgb24uIEEgUFRFLW1hcHBlZCBmb2xpbyBvbmx5IGhhcyB0aGUgcGFnZVxuK1x0ICogdGhlIGZhdWx0IHdhcyBmb3IgZGlydGllZCBzbyBmYXIuXG4rXHQgKi9cbitcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRwX2dldF9sb2NrbGVzcyh2bWYtXHUwMDNlcG1kKSkpXG4rXHRcdGRpcnRpZWQgPSBmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbitcdGVsc2VcbitcdFx0ZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIG9mZiwgUEFHRV9TSVpFKTtcbiBcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogVGFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3Nfc3BhY2UgLSBmb2xpby5tYXBwaW5nIG1heSBiZSB6ZXJvZWRcbkBAIC01NjI1LDYgKzU2MzQsMzEgQEAgdm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFcbiB9XG4gI2VuZGlmXG4gXG4rLypcbisgKiBNYXkgdGhlIHdob2xlIGJhdGNoIGJlIG1hcmtlZCBkaXJ0eT9cbisgKlxuKyAqIE9ubHkgYSBzaGFyZWQgbWFwcGluZyBvZiBhIGZpbGVzeXN0ZW0gdGhhdCB0cmFja3MgZGlydHkgc3RhdGUgcGVyIGJsb2NrIHNheXNcbisgKiBuby4gVGhlcmUgdGhlIHBhZ2UgdGFibGUgZGlydHkgYml0cyBhcmUgdGhlIG9ubHkgcmVjb3JkIG9mIHdoaWNoIHBhcnRzIG9mIGFcbisgKiBsYXJnZSBmb2xpbyB3ZXJlIHdyaXR0ZW4gdGhyb3VnaCB0aGUgbWFwcGluZywgc28gcGFnZXMgbm9ib2R5IGhhcyBzdG9yZWQgdG9cbisgKiBoYXZlIHRvIHN0YXkgY2xlYW4gYW5kIGxldCB0aGUgaGFyZHdhcmUgc2V0IHRoZSBiaXQgb24gdGhlIGZpcnN0IHN0b3JlLlxuKyAqXG4rICogRXZlcnl3aGVyZSBlbHNlIG5vdGhpbmcgZXZlciByZWFkcyB0aG9zZSBiaXRzLCBhbmQgb24gaGFyZHdhcmUgd2l0aG91dCBhXG4rICogZGlydHkgYml0IGxlYXZpbmcgdGhlbSBjbGVhbiBjb3N0cyBhIGZhdWx0IHBlciBwYWdlIGZvciBub3RoaW5nLiBUaGF0IGNvdmVyc1xuKyAqIHNobWVtLCB3aGljaCBoYXMgbm8gZGlydHkgc3RhdGUgYmVsb3cgdGhlIGZvbGlvLlxuKyAqL1xuK3N0YXRpYyBib29sIGNhbl9kaXJ0eV93aG9sZV9iYXRjaChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG5yLFxuK1x0XHRcdFx0ICBib29sIHByZWZhdWx0KVxuK3tcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbitcbitcdGlmICghKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgfHwgcHJlZmF1bHQgfHwgbnIgPT0gMSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuICF2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2U7XG4rfVxuK1xuIC8qKlxuICAqIHNldF9wdGVfcmFuZ2UgLSBTZXQgYSByYW5nZSBvZiBQVEVzIHRvIHBvaW50IHRvIHBhZ2VzIGluIGEgZm9saW8uXG4gICogQHZtZjogRmF1bHQgZGVzY3JpcHRpb24uXG5AQCAtNTYzOSw2ICs1NjczLDcgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuIFx0Ym9vbCB3cml0ZSA9IHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURTtcbiBcdGJvb2wgcHJlZmF1bHQgPSAhaW5fcmFuZ2Uodm1mLVx1MDAzZWFkZHJlc3MsIGFkZHIsIG5yICogUEFHRV9TSVpFKTtcbitcdGJvb2wgZGlydHlfYmF0Y2ggPSBjYW5fZGlydHlfd2hvbGVfYmF0Y2godm1mLCBuciwgcHJlZmF1bHQpO1xuIFx0cHRlX3QgZW50cnk7XG4gXG4gXHRmbHVzaF9pY2FjaGVfcGFnZXModm1hLCBwYWdlLCBucik7XG5AQCAtNTY0OSwxMCArNTY4NCwxMyBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRlbHNlXG4gXHRcdGVudHJ5ID0gcHRlX3N3X21reW91bmcoZW50cnkpO1xuIFxuLVx0aWYgKHdyaXRlKVxuLVx0XHRlbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpO1xuLVx0ZWxzZSBpZiAocHRlX3dyaXRlKGVudHJ5KSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4rXHRpZiAod3JpdGUpIHtcbitcdFx0aWYgKGRpcnR5X2JhdGNoKVxuK1x0XHRcdGVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpO1xuK1x0XHRlbnRyeSA9IG1heWJlX21rd3JpdGUoZW50cnksIHZtYSk7XG4rXHR9IGVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XG4gXHRcdGVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpO1xuK1x0fVxuIFx0aWYgKHVubGlrZWx5KHZtZl9vcmlnX3B0ZV91ZmZkX3dwKHZtZikpKVxuIFx0XHRlbnRyeSA9IHB0ZV9ta3VmZmQoZW50cnkpO1xuIFx0LyogY29weS1vbi13cml0ZSBwYWdlICovXG5AQCAtNTY2NSw2ICs1NzAzLDE4IEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdH1cbiBcdHNldF9wdGVzKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgdm1mLVx1MDAzZXB0ZSwgZW50cnksIG5yKTtcbiBcbitcdC8qXG4rXHQgKiBUaGUgcGFnZSB0aGUgZmF1bHQgd2FzIGZvciBpcyBhYm91dCB0byBiZSBzdG9yZWQgdG8sIHNvIGRpcnR5IGl0XG4rXHQgKiBoZXJlIHJhdGhlciB0aGFuIGxlYXZlIHRoZSBzdG9yZSB0byBhIHNlY29uZCBwYWdlIHRhYmxlIHdhbGssIG9yIHRvXG4rXHQgKiBhIHNlY29uZCBmYXVsdCB3aGVyZSB0aGUgZGlydHkgYml0IGlzIG1haW50YWluZWQgaW4gc29mdHdhcmUuXG4rXHQgKi9cbitcdGlmICghZGlydHlfYmF0Y2gpIHtcbitcdFx0cHRlX3QgKnB0ZXAgPSB2bWYtXHUwMDNlcHRlICsgKCh2bWYtXHUwMDNlYWRkcmVzcyAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcbitcdFx0cHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIHB0ZXAsXG4rXHRcdFx0XHQgICAgICBwdGVfbWtkaXJ0eShwdGVwX2dldChwdGVwKSksIDEpO1xuK1x0fVxuK1xuIFx0Lyogbm8gbmVlZCB0byBpbnZhbGlkYXRlOiBhIG5vdC1wcmVzZW50IHBhZ2Ugd29uJ3QgYmUgY2FjaGVkICovXG4gXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHZtZiwgdm1hLCBhZGRyLCB2bWYtXHUwMDNlcHRlLCBucik7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jXG5pbmRleCA2YzljN2JhODliOGE5Li4zOWI1NGMyNWE5ZmFiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suY1xuKysrIGIvbW0vcGFnZS13cml0ZWJhY2suY1xuQEAgLTI3NTEsNiArMjc1MSwyMSBAQCBib29sIGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbiB9XG4gRVhQT1JUX1NZTUJPTChmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2UpO1xuIFxuKy8qXG4rICogSGFuZCBhIGRpcnRpZWQgcmFuZ2Ugb2YgQGZvbGlvIHRvIHRoZSBmaWxlc3lzdGVtLiAgLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgY2FuXG4rICogZXhwcmVzcyBldmVyeXRoaW5nIC1cdTAwM2VkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdFxuKyAqIGRvZXMgbm90IG5lZWQgYm90aCwgYW5kIGEgd2hvbGUtZm9saW8gZGlydHkgY29tZXMgdGhyb3VnaCBoZXJlIGFzIGEgcmFuZ2VcbisgKiBjb3ZlcmluZyB0aGUgZm9saW8uXG4rICovXG4rc3RhdGljIGJvb2wgbWFwcGluZ19kaXJ0eV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbitcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4re1xuK1x0aWYgKCFtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKVxuK1x0XHRyZXR1cm4gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4rXG4rXHRyZXR1cm4gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgb2ZmLCBsZW4pO1xuK31cbitcbiAvKipcbiAgKiBmb2xpb19tYXJrX2RpcnR5IC0gTWFyayBhIGZvbGlvIGFzIGJlaW5nIG1vZGlmaWVkLlxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuQEAgLTI3ODIsMTMgKzI3OTcsMzkgQEAgYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcbiBcdFx0XHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcbi1cdFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuK1x0XHRyZXR1cm4gbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywgMCxcbitcdFx0XHRcdFx0ICAgZm9saW9fc2l6ZShmb2xpbykpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIG5vb3BfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGZvbGlvX21hcmtfZGlydHkpO1xuIFxuKy8qKlxuKyAqIGZvbGlvX21hcmtfZGlydHlfcmFuZ2UgLSBNYXJrIHBhcnQgb2YgYSBmb2xpbyBhcyBiZWluZyBtb2RpZmllZC5cbisgKiBAZm9saW86IFRoZSBmb2xpby5cbisgKiBAb2ZmOiBPZmZzZXQgb2YgdGhlIG1vZGlmaWVkIHJhbmdlIHdpdGhpbiB0aGUgZm9saW8uXG4rICogQGxlbjogTGVuZ3RoIG9mIHRoZSBtb2RpZmllZCByYW5nZS5cbisgKlxuKyAqIExpa2UgZm9saW9fbWFya19kaXJ0eSgpLCBidXQgdGVsbHMgYSBmaWxlc3lzdGVtIHRoYXQgdHJhY2tzIGRpcnR5IHN0YXRlIHBlclxuKyAqIGJsb2NrIHRoYXQgb25seSBbQG9mZiwgQG9mZiArIEBsZW4pIGNoYW5nZWQsIHNvIHdyaXRlYmFjayBjYW4gc2tpcCB0aGUgcmVzdFxuKyAqIG9mIHRoZSBmb2xpby4gIEZpbGVzeXN0ZW1zIHdpdGhvdXQgdGhhdCB0cmFja2luZyBkaXJ0eSB0aGUgd2hvbGUgZm9saW8uXG4rICpcbisgKiBSZXR1cm46IFRydWUgaWYgdGhlIGZvbGlvIHdhcyBuZXdseSBkaXJ0aWVkLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBkaXJ0eS5cbisgKi9cbitib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbit7XG4rXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuK1xuK1x0aWYgKGxpa2VseShtYXBwaW5nKSkge1xuK1x0XHRpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcbitcdFx0XHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcbitcdFx0cmV0dXJuIG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcbitcdH1cbitcbitcdHJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbit9XG4rXG4gLypcbiAgKiBmb2xpb19tYXJrX2RpcnR5KCkgaXMgcmFjeSBpZiB0aGUgY2FsbGVyIGhhcyBubyByZWZlcmVuY2UgYWdhaW5zdFxuICAqIGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCwgYW5kIGlmIHRoZSBmb2xpbyBpcyB1bmxvY2tlZC4gIFRoaXMgaXMgYmVjYXVzZSBhbm90aGVyXG5AQCAtMjg0NCw2ICsyODg1LDQxIEBAIHZvaWQgX19mb2xpb19jYW5jZWxfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2NhbmNlbF9kaXJ0eSk7XG4gXG4rLypcbisgKiBXcml0ZS1wcm90ZWN0IGV2ZXJ5IG1hcHBpbmcgb2YgQGZvbGlvIGFuZCBoYW5kIHRoZSBmaWxlc3lzdGVtIHRoZSBwYXJ0cyB0aGF0XG4rICogd2VyZSBkaXJ0eSBpbiBhIHBhZ2UgdGFibGUuXG4rICpcbisgKiBXaXRob3V0IC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIHRoZXJlIGlzIG5vd2hlcmUgdG8gcHV0IHBlci1ibG9jayBzdGF0ZSwgc29cbisgKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90XG4rICogYWxyZWFkeSBkaXJ0eSwgYmVjYXVzZSB0aGVuIHRoZSBkaXJ0eSB0cmFuc2l0aW9uIG5lZWRzIHRoZSBmdWxsIGFjY291bnRpbmdcbisgKiBpbiBmb2xpb19tYXJrX2RpcnR5KCksIGFuZCBmb3IgYSBmb2xpbyB0b28gbGFyZ2UgZm9yIHRoZSBiaXRtYXAsIHdoaWNoIHRoZVxuKyAqIHBhZ2UgY2FjaGUgZG9lcyBub3QgbWFrZS5cbisgKi9cbitzdGF0aWMgdm9pZCBmb2xpb19ta2NsZWFuX2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdERFQ0xBUkVfQklUTUFQKG1hcCwgMVVMIFx1MDAzY1x1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcbitcdHVuc2lnbmVkIGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHVuc2lnbmVkIGludCBzdGFydCwgZW5kO1xuK1xuK1x0aWYgKCFtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxuK1x0ICAgIFdBUk5fT05fT05DRShuciBcdTAwM2UgKDFVTCBcdTAwM2NcdTAwM2MgTUFYX1BBR0VDQUNIRV9PUkRFUikpKSB7XG4rXHRcdGlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSlcbitcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Yml0bWFwX3plcm8obWFwLCBucik7XG4rXHRpZiAoIWZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIG1hcCkpXG4rXHRcdHJldHVybjtcbitcbitcdGZvcl9lYWNoX3NldF9iaXRyYW5nZShzdGFydCwgZW5kLCBtYXAsIG5yKSB7XG4rXHRcdG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sXG4rXHRcdFx0XHQgICAgKHNpemVfdClzdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbitcdFx0XHRcdCAgICAoc2l6ZV90KShlbmQgLSBzdGFydCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuK1x0fVxuK31cbitcbiAvKlxuICAqIENsZWFyIGEgZm9saW8ncyBkaXJ0eSBmbGFnLCB3aGlsZSBjYXJpbmcgZm9yIGRpcnR5IG1lbW9yeSBhY2NvdW50aW5nLlxuICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9saW8gd2FzIHByZXZpb3VzbHkgZGlydHkuXG5AQCAtMjg3NSw5ICsyOTUxLDkgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICpcbiBcdFx0ICogV2UgdXNlIHRoaXMgc2VxdWVuY2UgdG8gbWFrZSBzdXJlIHRoYXRcbiBcdFx0ICogIChhKSB3ZSBhY2NvdW50IGZvciBkaXJ0eSBzdGF0cyBwcm9wZXJseVxuLVx0XHQgKiAgKGIpIHdlIHRlbGwgdGhlIGxvdy1sZXZlbCBmaWxlc3lzdGVtIHRvXG4tXHRcdCAqICAgICAgbWFyayB0aGUgd2hvbGUgZm9saW8gZGlydHkgaWYgaXQgd2FzXG4tXHRcdCAqICAgICAgZGlydHkgaW4gYSBwYWdldGFibGUuIE9ubHkgdG8gdGhlblxuK1x0XHQgKiAgKGIpIHdlIHRlbGwgdGhlIGxvdy1sZXZlbCBmaWxlc3lzdGVtIHdoaWNoXG4rXHRcdCAqICAgICAgcGFydHMgb2YgdGhlIGZvbGlvIHdlcmUgZGlydHkgaW4gYVxuK1x0XHQgKiAgICAgIHBhZ2V0YWJsZS4gT25seSB0byB0aGVuXG4gXHRcdCAqICAoYykgY2xlYW4gdGhlIGZvbGlvIGFnYWluIGFuZCByZXR1cm4gMSB0b1xuIFx0XHQgKiAgICAgIGNhdXNlIHRoZSB3cml0ZWJhY2suXG4gXHRcdCAqXG5AQCAtMjg5NSw4ICsyOTcxLDcgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICogYXMgYSBzZXJpYWxpemF0aW9uIHBvaW50IGZvciBhbGwgdGhlIGRpZmZlcmVudFxuIFx0XHQgKiB0aHJlYWRzIGRvaW5nIHRoZWlyIHRoaW5ncy5cbiBcdFx0ICovXG4tXHRcdGlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSlcbi1cdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbitcdFx0Zm9saW9fbWtjbGVhbl9mb3JfaW8oZm9saW8sIG1hcHBpbmcpO1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBjYXJlZnVsbHkgc3luY2hyb25pc2UgZmF1bHQgaGFuZGxlcnMgYWdhaW5zdFxuIFx0XHQgKiBpbnN0YWxsaW5nIGEgZGlydHkgcHRlIGFuZCBtYXJraW5nIHRoZSBmb2xpbyBkaXJ0eVxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWY3MmQyNzliYTY4Zi4uYWFmNDVhYzc5ZmE4NCAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMTEwMCwxMiArMTEwMCwxOCBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuIFx0cmV0dXJuIHJ3Yy5jb250ZW5kZWQgPyAtMSA6IHByYS5yZWZlcmVuY2VkO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbitzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSB7XG4rXHR1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXA7XG4rXHRpbnQgY2xlYW5lZDtcbit9O1xuK1xuK3N0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxuIHtcbi1cdGludCBjbGVhbmVkID0gMDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy1cdTAwM2V2bWE7XG4tXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzID0gcHZtdy1cdTAwM2VhZGRyZXNzO1xuK1x0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbitcdGludCBjbGVhbmVkID0gMDtcbiBcbiBcdC8qXG4gXHQgKiBXZSBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc2UgY2FzZSBpZSBwbWQgZm9yIGludmFsaWRhdGlvbi4gTm90ZSB0aGF0XG5AQCAtMTEzNCw2ICsxMTQwLDE1IEBAIHN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRcdGlmICghcHRlX2RpcnR5KGVudHJ5KSBcdTAwMjZcdTAwMjYgIXB0ZV93cml0ZShlbnRyeSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAoZGlydHlfbWFwIFx1MDAyNlx1MDAyNiBwdGVfZGlydHkoZW50cnkpKSB7XG4rXHRcdFx0XHRwZ29mZl90IGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykgLVxuK1x0XHRcdFx0XHQgICAgICBwdm13LVx1MDAzZXBnb2ZmO1xuK1xuK1x0XHRcdFx0LyogVGhlIHdhbGsgb25seSB2aXNpdHMgcGFnZXMgb2YgdGhpcyBmb2xpbyAqL1xuK1x0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKGlkeCBcdTAwM2U9IHB2bXctXHUwMDNlbnJfcGFnZXMpO1xuK1x0XHRcdFx0X19zZXRfYml0KGlkeCwgZGlydHlfbWFwKTtcbitcdFx0XHR9XG4rXG4gXHRcdFx0Zmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHB0ZV9wZm4oZW50cnkpKTtcbiBcdFx0XHRlbnRyeSA9IHB0ZXBfY2xlYXJfZmx1c2godm1hLCBhZGRyZXNzLCBwdGUpO1xuIFx0XHRcdGVudHJ5ID0gcHRlX3dycHJvdGVjdChlbnRyeSk7XG5AQCAtMTE1NSw2ICsxMTcwLDkgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4gXHRcdFx0aWYgKCFwbWRfZGlydHkoZW50cnkpIFx1MDAyNlx1MDAyNiAhcG1kX3dyaXRlKGVudHJ5KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdGlmIChkaXJ0eV9tYXAgXHUwMDI2XHUwMDI2IHBtZF9kaXJ0eShlbnRyeSkpXG4rXHRcdFx0XHRiaXRtYXBfc2V0KGRpcnR5X21hcCwgMCwgcHZtdy1cdTAwM2Vucl9wYWdlcyk7XG4rXG4gXHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLFxuIFx0XHRcdFx0XHQgIGFkZHJlc3MgKyBIUEFHRV9QTURfU0laRSk7XG4gXHRcdFx0ZW50cnkgPSBwbWRwX2ludmFsaWRhdGUodm1hLCBhZGRyZXNzLCBwbWQpO1xuQEAgLTExODEsOSArMTE5OSw5IEBAIHN0YXRpYyBib29sIHBhZ2VfbWtjbGVhbl9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbiB7XG4gXHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkcmVzcywgUFZNV19TWU5DKTtcbi1cdGludCAqY2xlYW5lZCA9IGFyZztcbitcdHN0cnVjdCBta2NsZWFuX3N0YXRlICpzdGF0ZSA9IGFyZztcbiBcbi1cdCpjbGVhbmVkICs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcpO1xuK1x0c3RhdGUtXHUwMDNlY2xlYW5lZCArPSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13LCBzdGF0ZS1cdTAwM2VkaXJ0eV9tYXApO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTExOTYsMTIgKzEyMTQsMjMgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9ta2NsZWFuX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLWludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCAtIFdyaXRlLXByb3RlY3QgYSBmb2xpbyBhbmQgcmVwb3J0IHdoYXQgd2FzIGRpcnR5LlxuKyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIGNsZWFuLlxuKyAqIEBkaXJ0eV9tYXA6IEJpdG1hcCBvZiBhdCBsZWFzdCBmb2xpb19ucl9wYWdlcyhAZm9saW8pIGJpdHMsIG9yIE5VTEwuXG4rICpcbisgKiBXcml0ZS1wcm90ZWN0cyBhbmQgY2xlYW5zIGV2ZXJ5IG1hcHBpbmcgb2YgQGZvbGlvLiAgV2l0aCBAZGlydHlfbWFwLCBzZXRzIGFcbisgKiBiaXQgZm9yIGVhY2ggcGFnZSB3aG9zZSBlbnRyeSB3YXMgZGlydHk7IGEgUE1ELW1hcHBlZCBmb2xpbyBoYXMgb25lIGRpcnR5XG4rICogYml0IGZvciBhbGwgb2YgaXQsIHNvIGV2ZXJ5IHBhZ2UgaXMgcmVwb3J0ZWQuXG4rICpcbisgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIGNsZWFuZWQuXG4rICovXG4raW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxuIHtcbi1cdGludCBjbGVhbmVkID0gMDtcbitcdHN0cnVjdCBta2NsZWFuX3N0YXRlIHN0YXRlID0geyAuZGlydHlfbWFwID0gZGlydHlfbWFwIH07XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG4tXHRcdC5hcmcgPSAodm9pZCAqKVx1MDAyNmNsZWFuZWQsXG4rXHRcdC5hcmcgPSAodm9pZCAqKVx1MDAyNnN0YXRlLFxuIFx0XHQucm1hcF9vbmUgPSBwYWdlX21rY2xlYW5fb25lLFxuIFx0XHQuaW52YWxpZF92bWEgPSBpbnZhbGlkX21rY2xlYW5fdm1hLFxuIFx0fTtcbkBAIC0xMjE3LDcgKzEyNDYsMTIgQEAgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdHJtYXBfd2Fsayhmb2xpbywgXHUwMDI2cndjKTtcbiBcbi1cdHJldHVybiBjbGVhbmVkO1xuK1x0cmV0dXJuIHN0YXRlLmNsZWFuZWQ7XG4rfVxuK1xuK2ludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIE5VTEwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19ta2NsZWFuKTtcbiBcbkBAIC0xMjQxLDcgKzEyNzUsNyBAQCBzdGF0aWMgYm9vbCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0LmZsYWdzXHRcdD0gUFZNV19TWU5DLFxuIFx0fTtcbiBcbi1cdHN0YXRlLVx1MDAzZWNsZWFuZWQgKz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4rXHRzdGF0ZS1cdTAwM2VjbGVhbmVkICs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcsIE5VTEwpO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTEzMjQsNyArMTM1OCw3IEBAIGludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcbiBcdHB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcbiBcdFZNX0JVR19PTl9WTUEocHZtdy5hZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XG4gXG4tXHRyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4rXHRyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdywgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fZm9saW9fbW9kX3N0YXQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5yLCBpbnQgbnJfcG1kbWFwcGVkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDI6NDIuNDY3MzgzODUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ2NTgwNDcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJzdGFudGlhbCBLZXJuZWwgTWVtb3J5IGFuZCBGaWxlc3lzdGVtIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgcnVubmluZyB0aHJvdWdoIG15IGhlYWQuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSAqKnNlcmlvdXMqKiBjb3JlIGluZnJhc3RydWN0dXJlLiBXZSdyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgZGVlcCB3aXRoaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHZpcnR1YWwgZmlsZXN5c3RlbSBjb2RlIChWRlMpLCBgaW9tYXBgLCBhbmQgZXZlbiBYRlMuIFRoZSBzcGVjaWZpYyBmaWxlcyB0ZWxsIHRoZSBzdG9yeTogY2hhbmdlcyB0byBgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VgLCBgaW9tYXBfZGlydHlfZm9saW9gLCBgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyYCwgYW5kIGBpb21hcF9wYWdlX21rd3JpdGVgIGluZGljYXRlIGZ1bmRhbWVudGFsIGFkanVzdG1lbnRzIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYnVmZmVyZWQgSS9PIHRocm91Z2ggYGlvbWFwYC4gVGhlIGluY2x1c2lvbiBvZiBgLmRpcnR5X2ZvbGlvX3JhbmdlID0gaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VgIHdpdGhpbiBgeGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc2AgaXMgc2lnbmlmaWNhbnQsIGRpcmVjdGx5IGludGVncmF0aW5nIHRoZXNlIGBpb21hcGAgY2hhbmdlcyBpbnRvIFhGUydzIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucy5cblxuVGhlIGluY2x1ZGUgZmlsZXMgLS0gYGZzLmhgLCBgaW9tYXAuaGAsIGBtbS5oYCwgYW5kIGBybWFwLmhgIC0tIHNob3cgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgaXNvbGF0ZWQ7IHRoZXkncmUgZXhwYW5kaW5nIHRoZSBgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUsIGFuZCBhZGRpbmcgbmV3IGZ1bmN0aW9ucyBsaWtlIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYW5kIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYC4gVGhlIE1NIGNvZGUgaXMgYWxzbyBoZWF2aWx5IGludm9sdmVkLCB3aXRoIGBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZWAsIGBjYW5fZGlydHlfd2hvbGVfYmF0Y2hgLCBhbmQgYHNldF9wdGVfcmFuZ2VgIGJlaW5nIG1vZGlmaWVkLCBhbG9uZ3NpZGUgY2hhbmdlcyB0byBwYWdlIHdyaXRlYmFjayB2aWEgZnVuY3Rpb25zIGxpa2UgYG1hcHBpbmdfZGlydHlfcmFuZ2VgLCBgZm9saW9fbWFya19kaXJ0eWAsIGFuZCBgZm9saW9fbWtjbGVhbl9mb3JfaW9gLCBhcyB3ZWxsIGFzIHJtYXAgKHJldmVyc2UgbWFwKSBtb2RpZmljYXRpb25zLiAgVGhlIGNoYW5nZXMgdG8gcm1hcCBsb29rIHRvIHN1cHBvcnQgZm9saW8gb3BlcmF0aW9ucywgc28gdGhpcyBjb3VsZCBiZSBhIG1ham9yIG1lbW9yeSByZWNsYW1hdGlvbiBvciB2aXJ0dWFsIG1lbW9yeSBjaGFuZ2UuXG5cblRoaXMgaXMgYSAqKm1ham9yKiogYXJlYSBvZiB0aGUga2VybmVsLCBhZmZlY3RpbmcgcGFnZSBjYWNoZSB3cml0ZWJhY2ssIGZhdWx0aW5nIHNoYXJlZCBwYWdlcywgbWt3cml0ZSBvcGVyYXRpb25zLCByZXZlcnNlIG1hcHBpbmcsIGJ1ZmZlcmVkIElPLCBhbmQgWEZTISBBbmQgdGhvc2UgYXJlIGp1c3QgdGhlIG9idmlvdXMgZnVuY3Rpb25zIHRoYXQgd2VyZSBjaGFuZ2VkLiBUaGUgaW1wYWN0IG9mIHN1Y2ggY2hhbmdlcyBjb3VsZCBiZSBmYXItcmVhY2hpbmcuIEdpdmVuIHRoZSByZWFjaCBvZiB0aGVzZSBjaGFuZ2VzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBjb2RlIGlzIGVhc2lseSByZWFjaGFibGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcyDigJMgdGhpbmsgUUVNVSBvciBldmVuIHNvbWV0aGluZyBsaWtlIHN5emthbGxlci5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMsIHRvIHVuZGVyc3RhbmQgd2hhdCBidWlsZCBjb25maWd1cmF0aW9ucyB3b3VsZCBleHBvc2UgdGhpcyBjb2RlLiBJIG5lZWQgdG8ga25vdyB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIHRvIHNlZSB0aGUgZXhwb3NlZCBhdHRhY2sgc3VyZmFjZS4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBtYW51YWxseSBnbyB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGZzL3hmcy9LY29uZmlnYCBhbmQgYGZzL2lvbWFwL0tjb25maWdgLCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZpbmQgdGhlIGVuYWJsZWQgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTczOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjQ2LjkzMzE5MTkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzA2NTQyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQfGNvbmZpZyBYRlNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuLS1cXG5mcy94ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3hmcy9LY29uZmlnOjI6Y29uZmlnIFhGU19GU1xcbmZzL3hmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlhGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjQ5LjA2Mzg1MDc5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzQwNDA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlhGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogQSBRdWljayBBdWRpdCoqXG5cbk9rYXksIHNvIEkgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUgWEZTIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZnMveGZzL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCBpdC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCBvdGhlciBmZWF0dXJlcyBvciBrZXJuZWwgc3Vic3lzdGVtcyBYRlMgaXMgcHVsbGluZyBpbiB0aHJvdWdoIFwic2VsZWN0XCIgb3IgXCJkZXBlbmRzIG9uXCIgZGlyZWN0aXZlcy4gTXkgZ29hbCBpcyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgcmVsYXRpb25zaGlwcyBvciBpbXBsaWVkIGNvbnN0cmFpbnRzIHRoYXQgbWlnaHQgaW1wYWN0IG15IGN1cnJlbnQgZm9jdXMsIHdoYXRldmVyIGl0IG1heSBiZS4gSSdtIG5vdCBhZnRlciBsaW5lLWJ5LWxpbmUgdW5kZXJzdGFuZGluZywganVzdCB0aGUga2V5IGRlcGVuZGVuY2llcyB0aGF0IGRpY3RhdGUgdGhlIFhGUyBidWlsZCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk2NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjUwLjg5Nzg5NDMwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3hmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgWEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiWEZTIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA1OlxcdFxcdHNlbGVjdCBFWFBPUlRGU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgNzpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgWEZTIGlzIGEgaGlnaCBwZXJmb3JtYW5jZSBqb3VybmFsaW5nIGZpbGVzeXN0ZW0gd2hpY2ggb3JpZ2luYXRlZFxcbiAgMTA6XFx0XFx0ICBvbiB0aGUgU0dJIElSSVggcGxhdGZvcm0uICBJdCBpcyBjb21wbGV0ZWx5IG11bHRpLXRocmVhZGVkLCBjYW5cXG4gIDExOlxcdFxcdCAgc3VwcG9ydCBsYXJnZSBmaWxlcyBhbmQgbGFyZ2UgZmlsZXN5c3RlbXMsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsXFxuICAxMjpcXHRcXHQgIHZhcmlhYmxlIGJsb2NrIHNpemVzLCBpcyBleHRlbnQgYmFzZWQsIGFuZCBtYWtlcyBleHRlbnNpdmUgdXNlIG9mXFxuICAxMzpcXHRcXHQgIEJ0cmVlcyAoZGlyZWN0b3JpZXMsIGV4dGVudHMsIGZyZWUgc3BhY2UpIHRvIGFpZCBib3RoIHBlcmZvcm1hbmNlXFxuICAxNDpcXHRcXHQgIGFuZCBzY2FsYWJpbGl0eS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBhdCBcXHUwMDNjaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL3hmcy9cXHUwMDNlXFxuICAxNzpcXHRcXHQgIGZvciBjb21wbGV0ZSBkZXRhaWxzLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBvbi1kaXNrIGNvbXBhdGlibGVcXG4gIDE4OlxcdFxcdCAgd2l0aCB0aGUgSVJJWCB2ZXJzaW9uIG9mIFhGUy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAyMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB4ZnMuICBCZSBhd2FyZSwgaG93ZXZlciwgdGhhdCBpZiB0aGUgZmlsZVxcbiAgMjI6XFx0XFx0ICBzeXN0ZW0gb2YgeW91ciByb290IHBhcnRpdGlvbiBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgeW91J2xsIG5lZWRcXG4gIDIzOlxcdFxcdCAgdG8gdXNlIGFuIGluaXRpYWwgcmFtZGlzayAoaW5pdHJkKSB0byBib290LlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgWEZTX1NVUFBPUlRfVjRcXG4gIDI2OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZGVwcmVjYXRlZCBWNCAoY3JjPTApIGZvcm1hdFxcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gWEZTX0ZTXFxuICAyODpcXHRcXHRkZWZhdWx0IG5cXG4gIDI5OlxcdFxcdGhlbHBcXG4gIDMwOlxcdFxcdCAgVGhlIFY0IGZpbGVzeXN0ZW0gZm9ybWF0IGxhY2tzIGNlcnRhaW4gZmVhdHVyZXMgdGhhdCBhcmUgc3VwcG9ydGVkXFxuICAzMTpcXHRcXHQgIGJ5IHRoZSBWNSBmb3JtYXQsIHN1Y2ggYXMgbWV0YWRhdGEgY2hlY2tzdW1taW5nLCBzdHJlbmd0aGVuZWRcXG4gIDMyOlxcdFxcdCAgbWV0YWRhdGEgdmVyaWZpY2F0aW9uLCBhbmQgdGhlIGFiaWxpdHkgdG8gc3RvcmUgdGltZXN0YW1wcyBwYXN0IHRoZVxcbiAgMzM6XFx0XFx0ICB5ZWFyIDIwMzguICBCZWNhdXNlIG9mIHRoaXMsIHRoZSBWNCBmb3JtYXQgaXMgZGVwcmVjYXRlZC4gIEFsbCB1c2Vyc1xcbiAgMzQ6XFx0XFx0ICBzaG91bGQgdXBncmFkZSBieSBiYWNraW5nIHVwIHRoZWlyIGZpbGVzLCByZWZvcm1hdHRpbmcsIGFuZCByZXN0b3JpbmdcXG4gIDM1OlxcdFxcdCAgZnJvbSB0aGUgYmFja3VwLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIEFkbWluaXN0cmF0b3JzIGFuZCB1c2VycyBjYW4gZGV0ZWN0IGEgVjQgZmlsZXN5c3RlbSBieSBydW5uaW5nXFxuICAzODpcXHRcXHQgIHhmc19pbmZvIGFnYWluc3QgYSBmaWxlc3lzdGVtIG1vdW50cG9pbnQgYW5kIGNoZWNraW5nIGZvciBhIHN0cmluZ1xcbiAgMzk6XFx0XFx0ICBiZWdpbm5pbmcgd2l0aCBcXFwiY3JjPVxcXCIuICBJZiB0aGUgc3RyaW5nIFxcXCJjcmM9MFxcXCIgaXMgZm91bmQsIHRoZVxcbiAgNDA6XFx0XFx0ICBmaWxlc3lzdGVtIGlzIGEgVjQgZmlsZXN5c3RlbS4gIElmIG5vIHN1Y2ggc3RyaW5nIGlzIGZvdW5kLCBwbGVhc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDI6NTAuODk3OTc3MjA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MzUwMTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFhGUyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBYRlNfRlMgaXMgdXNpbmcgQkxPQ0sgYW5kIEZTX0lPTUFQLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNob2ljZS4gSSdtIGFsc28gcmVtaW5kZWQgdGhhdCBtbS9tZW1vcnkuYywgbW0vcGFnZS13cml0ZWJhY2suYywgYW5kIG1tL3JtYXAuYyBhcmUgYWxsIGZvdW5kYXRpb25hbCB0byB0aGUgY29yZSBNZW1vcnkgTWFuYWdlbWVudCAoTU0pIGxheWVyLiBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBldmVyeXRoaW5nIGlzIHdvcmtpbmcgdG9nZXRoZXIgaW4gdGhhdCBhcmVhLlxuXG5TaW5jZSBYRlMgaXMgdXRpbGl6aW5nIEZTX0lPTUFQLCBJIHdvbmRlciBpZiBvdGhlciBmaWxlc3lzdGVtcyBhcmUgZG9pbmcgdGhlIHNhbWUuIEl0J3MgdGltZSB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGZpbGVzeXN0ZW1zIGxldmVyYWdlIGlvbWFwIG9yIHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLiBBIHF1aWNrIGBncmVwYCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGBkaXJ0eV9mb2xpb19yYW5nZWAgc2hvdWxkIGhlbHAgbWUgaWRlbnRpZnkgYW55IG90aGVyIHBvdGVudGlhbCB1c2VycyBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgYnJvYWRlciBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjUzLjI4MTQ4MTQyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM3NDE4MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpcnR5X2ZvbGlvX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODQ4PUVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODQ5LVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODUwOmJvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NTEtXFx0XFx0c2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODU2LX1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjg1NzpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NTgtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz04NTk9Ym9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg2MC17XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4NjE6XFx0cmV0dXJuIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLCBmb2xpb19zaXplKGZvbGlvKSk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NjItfVxcbi0tXFxuZnMveGZzL3hmc19hb3BzLmM9ODYyPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgeGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jLTg2NS1cXHQud3JpdGVwYWdlc1xcdFxcdD0geGZzX3ZtX3dyaXRlcGFnZXMsXFxuZnMveGZzL3hmc19hb3BzLmM6ODY2OlxcdC5kaXJ0eV9mb2xpb19yYW5nZVxcdD0gaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UsXFxuZnMveGZzL3hmc19hb3BzLmMtODY3LVxcdC5yZWxlYXNlX2ZvbGlvXFx0XFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTQwMT1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC00MDktXFx0LyogTWFyayBbb2ZmLCBvZmYgKyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6NDEwOlxcdGJvb2wgKCpkaXJ0eV9mb2xpb19yYW5nZSkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuaW5jbHVkZS9saW51eC9mcy5oLTQxMS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pb21hcC5oPTQ0NT1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6NDQ2OmJvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTQ0Ny1cXHRcXHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcXG4tLVxcbm1tL21lbW9yeS5jPTU2NDk9c3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5tbS9tZW1vcnkuYy01NjU4LVxcbm1tL21lbW9yeS5jOjU2NTk6XFx0cmV0dXJuICF2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlO1xcbm1tL21lbW9yeS5jLTU2NjAtfVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yNzUyPUVYUE9SVF9TWU1CT0woZm9saW9fcmVkaXJ0eV9mb3Jfd3JpdGVwYWdlKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc1NC0vKlxcbm1tL3BhZ2Utd3JpdGViYWNrLmM6Mjc1NTogKiBIYW5kIGEgZGlydGllZCByYW5nZSBvZiBAZm9saW8gdG8gdGhlIGZpbGVzeXN0ZW0uICAtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgY2FuXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNzU2LSAqIGV4cHJlc3MgZXZlcnl0aGluZyAtXFx1MDAzZWRpcnR5X2ZvbGlvKCkgY2FuLCBzbyBhIGZpbGVzeXN0ZW0gdGhhdCBpbXBsZW1lbnRzIGl0XFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI3NjA9c3RhdGljIGJvb2wgbWFwcGluZ19kaXJ0eV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc2Mi17XFxubW0vcGFnZS13cml0ZWJhY2suYzoyNzYzOlxcdGlmICghbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc2NC1cXHRcXHRyZXR1cm4gbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NjUtXFxubW0vcGFnZS13cml0ZWJhY2suYzoyNzY2OlxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NjctfVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yODg2PUVYUE9SVF9TWU1CT0woX19mb2xpb19jYW5jZWxfZGlydHkpO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0yODkxLSAqXFxubW0vcGFnZS13cml0ZWJhY2suYzoyODkyOiAqIFdpdGhvdXQgLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIHRoZXJlIGlzIG5vd2hlcmUgdG8gcHV0IHBlci1ibG9jayBzdGF0ZSwgc29cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI4OTMtICogYW55IFBURSBkaXJ0eSBiaXQgZGlydGllcyB0aGUgd2hvbGUgZm9saW8uICBTYW1lIHdoZW4gdGhlIGZvbGlvIGlzIG5vdFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yODk4PXN0YXRpYyB2b2lkIGZvbGlvX21rY2xlYW5fZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5MDQtXFxubW0vcGFnZS13cml0ZWJhY2suYzoyOTA1OlxcdGlmICghbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjkwNi1cXHQgICAgV0FSTl9PTl9PTkNFKG5yIFxcdTAwM2UgKDFVTCBcXHUwMDNjXFx1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDI6NTQuOTE4OTA3MzQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1NDc5MTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRGlydHkgRm9saW8gUmFuZ2UgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBmb2N1c2luZyBvbiB0aGUgaW50cm9kdWN0aW9uIG9mIHN1Yi1mb2xpbyByYW5nZSBkaXJ0eSB0cmFja2luZywgc3BlY2lmaWNhbGx5IGZvciBmaWxlc3lzdGVtcyBsaWtlIFhGUyB0aGF0IHV0aWxpemUgaW9tYXAuIE15IGluaXRpYWwgc2NhbiBoYXMgaWRlbnRpZmllZCBhIHNldCBvZiBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucyBhY3Jvc3MgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgLCBgbW0vcGFnZS13cml0ZWJhY2suY2AsIGBtbS9ybWFwLmNgLCBhbmQgYG1tL21lbW9yeS5jYC4gSSd2ZSBjYXRlZ29yaXplZCB0aGVtIGJhc2VkIG9uIHRoZWlyIGltcGFjdC5cblxuSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgbm9uLXViaXF1aXRvdXMgZm9jdXMgc3ltYm9scyBJIHdhbnQgdG8gdGFyZ2V0LiBJJ20gYXZvaWRpbmcgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGVudHJ5IHBvaW50cywgYW5kIGNvcmUgbG9jayBwcmltaXRpdmVzLCBzaW5jZSB0aG9zZSB3b24ndCBnaXZlIG1lIHRoZSBzcGVjaWZpYyBjb2RlIEknbSBhZnRlci4gSSd2ZSBzcGVjaWZpY2FsbHkgc2VsZWN0ZWQgYGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlYCwgYGlvbWFwX3BhZ2VfbWt3cml0ZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgLCBhbmQgYGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pb2AgYXMgdGhlIGNvcmUgZnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBvbi4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY292ZXJhZ2Ugb2YgdGhlIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25hbGl0eS5cblxuSSd2ZSBjaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMgdG8gc2VlIGlmIEkgbmVlZCB0byBlbmFibGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIFhGUyB0byB0cmlnZ2VyIHRoZSBob29rcyBJJ20gaW50ZXJlc3RlZCBpbi4gSSBrbm93IHRoYXQgYFhGU19GU2Agd2lsbCBjb21waWxlIFhGUyBhbmQsIGltcG9ydGFudGx5LCBhbHNvIGVuYWJsZSBgRlNfSU9NQVBgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBoaXR0aW5nIHRoZSBYRlMgY29kZSBwYXRoLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgYWxsIHRoZSByZXF1aXJlbWVudHM6IHRoZSBmdXp6aW5nIGlzIHdvcnRoIGl0LCB0aGUgY29uZmlndXJhdGlvbiBlbmFibGVzIFhGUywgYW5kIEkndmUgZ290IHRoZSBjb3JyZWN0IGBGb2N1c1N5bWJvbHNgIHNldCB0byB0YXJnZXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHJlZmxlY3QgdGhlIGNvcmUgY2hhbmdlLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IHdlIHRyYWNrIGRpcnR5IHN1Yi1mb2xpbyByYW5nZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHN1cHBvcnRpbmcgcGVyLWJsb2NrIGRpcnR5IHRyYWNraW5nIG9uIGxhcmdlIGZvbGlvcywgZXNwZWNpYWxseSBpbiBmaWxlc3lzdGVtcyBsaWtlIFhGUyB3aGljaCB1c2UgaW9tYXAuIFRoaXMgaW1wYWN0cyBldmVyeXRoaW5nIGZyb20gcGFnZSBmYXVsdCBoYW5kbGluZywgdG8gc2hhcmVkIHBhZ2UgZGlydHlpbmcsIHRvIHdyaXRlYmFjayB0cmFuc2l0aW9ucywgYW5kIGV2ZW4gcm1hcCBjbGVhbmluZy4gVGhhdCBpcyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yIC0gY2hhbmdlcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBpb21hcCwgYW5kIHRoZSBYRlMgY29kZSBwYXRoLiBUaGlzIGFuYWx5c2lzIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDI2LCJPdXRwdXRUb2tlbnMiOjIwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMzowMC4yNzM3MDEwNTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTc1MjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VcIixcbiAgICBcImlvbWFwX3BhZ2VfbWt3cml0ZVwiLFxuICAgIFwiZm9saW9fbWFya19kaXJ0eV9yYW5nZVwiLFxuICAgIFwiZm9saW9fbWtjbGVhbl9kaXJ0eW1hcFwiLFxuICAgIFwiZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3ViLWZvbGlvIHJhbmdlIGRpcnR5aW5nIHZpYSAtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlLCBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKCksIGZvbGlvX21rY2xlYW5fZGlydHltYXAoKSwgYW5kIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKCkgZm9yIFhGUy9pb21hcC4gSXQgbW9kaWZpZXMgY29yZSBNTSBkaXJ0eSBmb2xpbyB0cmFja2luZywgd3JpdGUtcHJvdGVjdC9jbGVhbiB0cmFuc2l0aW9ucyBpbiB3cml0ZWJhY2sgKGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyksIHJtYXAgUFRFL1BNRCBkaXJ0eSB3YWxrLCBhbmQgcGFnZSBmYXVsdCBoYW5kbGluZyBmb3Igc2hhcmVkIG1hcHBpbmdzLiBUaGVzZSByZWFjaGFibGUgTU0gYW5kIGZpbGVzeXN0ZW0gcGF0aHMgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlXCIsXG4gICAgXCJpb21hcF9wYWdlX21rd3JpdGVcIixcbiAgICBcImZvbGlvX21hcmtfZGlydHlfcmFuZ2VcIixcbiAgICBcImZvbGlvX21rY2xlYW5fZGlydHltYXBcIixcbiAgICBcImZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1Yi1mb2xpbyByYW5nZSBkaXJ0eWluZyB2aWEgLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSwgZm9saW9fbWFya19kaXJ0eV9yYW5nZSgpLCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKCksIGFuZCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSgpIGZvciBYRlMvaW9tYXAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gZGlydHkgZm9saW8gdHJhY2tpbmcsIHdyaXRlLXByb3RlY3QvY2xlYW4gdHJhbnNpdGlvbnMgaW4gd3JpdGViYWNrIChmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8pLCBybWFwIFBURS9QTUQgZGlydHkgd2FsaywgYW5kIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncy4gVGhlc2UgcmVhY2hhYmxlIE1NIGFuZCBmaWxlc3lzdGVtIHBhdGhzIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MDAuMzUzNDYxNzQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY2NDM2NzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjAwLjM1MzkzODYyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNjYzODg3NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhbmdlLWJhc2VkIGRpcnR5IHRyYWNraW5nIGZvciBsYXJnZSBmb2xpb3MgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaW9tYXAgKHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLCBgZm9saW9fbWFya19kaXJ0eV9yYW5nZWAsIGFuZCBgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcGApLlxcblxcbjEuIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMuIEFsbCBuZXcgbG9jYWwgdmFyaWFibGVzIChgZGlydHlfb2ZmYCwgYGRpcnR5X2xlbmAsIGBzdGF0ZWAsIGFuZCBzdGFjayBiaXRtYXAgYG1hcGAgaW4gYGZvbGlvX21rY2xlYW5fZm9yX2lvYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGBiaXRtYXBfemVyb2AsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGV0Yy4pLiBUaGVyZSBhcmUgbm8gaW5mby1sZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdmVjdG9ycy5cXG4yLiBLQVNBTiAvIHN0YW5kYXJkIGRldGVjdG9ycyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gcmFuZ2UgY2FsY3VsYXRpb25zLCBiaXRtYXNrIG9wZXJhdGlvbnMsIG9yIHBhZ2UgdGFibGUgd2Fsa3Mgd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYXNzZXJ0aW9ucy9sb2NraW5nIGlzc3Vlcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDUxOWI0NjFjOWIzZmRlY2FhODgwZTBjOTNiNGRhOTk3NzUxYzFiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDQ6MDI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggMGE1ZWJmZGE5MGYxMi4uOGQ4YThhY2FiMDFhYyAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbisrKyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC04NDcsMTUgKzg0NywxOSBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG4gXG4tYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbitib29sIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRzaXplX3QgbGVuID0gZm9saW9fc2l6ZShmb2xpbyk7XG4tXG4tXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcbi1cdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgMCwgbGVuKTtcbitcdGlmc19hbGxvYyhtYXBwaW5nLVx1MDAzZWhvc3QsIGZvbGlvLCAwKTtcbitcdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgb2ZmLCBsZW4pO1xuIFx0cmV0dXJuIGZpbGVtYXBfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7XG4rXG4rYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIDAsIGZvbGlvX3NpemUoZm9saW8pKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlydHlfZm9saW8pO1xuIFxuIHN0YXRpYyB2b2lkXG5AQCAtMTgwNCw3ICsxODA4LDcgQEAgaW9tYXBfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF90cnVuY2F0ZV9wYWdlKTtcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGRpcnR5X29mZiwgc2l6ZV90IGRpcnR5X2xlbilcbiB7XG4gXHRsb2ZmX3QgbGVuZ3RoID0gaW9tYXBfbGVuZ3RoKGl0ZXIpO1xuIFx0aW50IHJldDtcbkBAIC0xODE3LDcgKzE4MjEsNyBAQCBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdFx0YmxvY2tfY29tbWl0X3dyaXRlKGZvbGlvLCAwLCBsZW5ndGgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0V0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSk7XG4tXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuK1x0XHRmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XG4gXHR9XG4gXG4gXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XG5AQCAtMTgzMiw2ICsxODM2LDcgQEAgdm1fZmF1bHRfdCBpb21hcF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcbiBcdFx0LnByaXZhdGVcdD0gcHJpdmF0ZSxcbiBcdH07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSk7XG4rXHRzaXplX3QgZGlydHlfb2ZmLCBkaXJ0eV9sZW47XG4gXHRzc2l6ZV90IHJldDtcbiBcbiBcdGZvbGlvX2xvY2soZm9saW8pO1xuQEAgLTE4NDAsOCArMTg0NSwyMiBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRpdGVyLnBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XG4gXHRpdGVyLmxlbiA9IHJldDtcbitcbitcdC8qXG4rXHQgKiBCbG9ja3MgYXJlIHN0aWxsIGFsbG9jYXRlZCBmb3IgdGhlIHdob2xlIGZvbGlvLCBidXQgb25seSB0aGUgcGFnZVxuK1x0ICogdGhlIGZhdWx0IHdhcyBmb3IgaGFzIGJlZW4gd3JpdHRlbiwgc28gdGhhdCBpcyBhbGwgdGhhdCBoYXMgdG8gYmVcbitcdCAqIHdyaXR0ZW4gYmFjay4gIEEgcmFjaW5nIHRydW5jYXRlIGNhbiBsZWF2ZSB0aGF0IHBhZ2UgYmV5b25kIGlfc2l6ZSxcbitcdCAqIGFuZCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlydHkuXG4rXHQgKi9cbitcdGRpcnR5X29mZiA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCB2bWYtXHUwMDNlcGFnZSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4rXHRpZiAoZGlydHlfb2ZmIFx1MDAzYyByZXQpXG4rXHRcdGRpcnR5X2xlbiA9IG1pbl90KHNpemVfdCwgUEFHRV9TSVpFLCByZXQgLSBkaXJ0eV9vZmYpO1xuK1x0ZWxzZVxuK1x0XHRkaXJ0eV9sZW4gPSAwO1xuK1xuIFx0d2hpbGUgKChyZXQgPSBpb21hcF9pdGVyKFx1MDAyNml0ZXIsIG9wcykpIFx1MDAzZSAwKVxuLVx0XHRpdGVyLnN0YXR1cyA9IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihcdTAwMjZpdGVyLCBmb2xpbyk7XG4rXHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKFx1MDAyNml0ZXIsIGZvbGlvLFxuK1x0XHRcdFx0XHRcdCAgICAgICBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xuaW5kZXggNzRhNjA4OWFiYWRmOS4uNjAwZTdkZTJlNTk5YyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xuQEAgLTg2Myw3ICs4NjMsNyBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZF9mb2xpb1x0XHQ9IHhmc192bV9yZWFkX2ZvbGlvLFxuIFx0LnJlYWRhaGVhZFx0XHQ9IHhmc192bV9yZWFkYWhlYWQsXG4gXHQud3JpdGVwYWdlc1x0XHQ9IHhmc192bV93cml0ZXBhZ2VzLFxuLVx0LmRpcnR5X2ZvbGlvXHRcdD0gaW9tYXBfZGlydHlfZm9saW8sXG4rXHQuZGlydHlfZm9saW9fcmFuZ2VcdD0gaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UsXG4gXHQucmVsZWFzZV9mb2xpb1x0XHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXG4gXHQuaW52YWxpZGF0ZV9mb2xpb1x0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuIFx0LmJtYXBcdFx0XHQ9IHhmc192bV9ibWFwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggMDcyZDhjZDA5YTBiMi4uMWQ5OGI2YzBiODgwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtNDA2LDYgKzQwNiw5IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMge1xuIFxuIFx0LyogTWFyayBhIGZvbGlvIGRpcnR5LiAgUmV0dXJuIHRydWUgaWYgdGhpcyBkaXJ0aWVkIGl0ICovXG4gXHRib29sICgqZGlydHlfZm9saW8pKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCBmb2xpbyAqKTtcbitcdC8qIE1hcmsgW29mZiwgb2ZmICsgbGVuKSBvZiBhIGZvbGlvIGRpcnR5ICovXG4rXHRib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcbiBcbiBcdHZvaWQgKCpyZWFkYWhlYWQpKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbmluZGV4IGJjN2FlNjMyN2RiZjguLjNjZjJhYzc1MTQwOWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuQEAgLTQ0Myw2ICs0NDMsOCBAQCBzdHJ1Y3QgZm9saW8gKmlvbWFwX2dldF9mb2xpbyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90IHBvcywgc2l6ZV90IGxlbik7XG4gYm9vbCBpb21hcF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9mbGFncyk7XG4gdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pO1xuIGJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xuIHZvaWQgaW9tYXBfZm9saW9fbWFya191cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgaW9tYXBfZmlsZV91bnNoYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDg3ZmVhYTVhMmI3ODAuLjc2MjgyNjJjMTdlMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTMzMzcsNiArMzMzNyw3IEBAIHN0cnVjdCBrdmVjO1xuIHN0cnVjdCBwYWdlICpnZXRfZHVtcF9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50ICpsb2NrZWQpO1xuIFxuIGJvb2wgZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5X2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCBzZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9wYWdlX2RpcnR5X2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbmluZGV4IDhkYzA4NzFlNWYwMDEuLjZmYzBhNjAyMDI1MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbkBAIC05MjcsNiArOTI3LDcgQEAgdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNsZWFuZWQgUFRFcy5cbiAgKi9cbiBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKik7XG4raW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKTtcbiBcbiBpbnQgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYsXG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbkBAIC05OTAsNiArOTkxLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxuK3tcbitcdHJldHVybiAwO1xuK31cbiAjZW5kaWZcdC8qIENPTkZJR19NTVUgKi9cbiBcbiAjZW5kaWZcdC8qIF9MSU5VWF9STUFQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4ZGEwZjk0NTE0MWI0Li4yN2EwNTllMGMwMTZmIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMzc3OCwxMCArMzc3OCwxOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuK1x0c2l6ZV90IG9mZiA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCB2bWYtXHUwMDNlcGFnZSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHRib29sIGRpcnRpZWQ7XG4gXHRib29sIHBhZ2VfbWt3cml0ZSA9IHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlcGFnZV9ta3dyaXRlO1xuIFxuLVx0ZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuK1x0LypcbitcdCAqIEEgUE1EIGVudHJ5IGhhcyBvbmUgZGlydHkgYml0IGZvciB0aGUgd2hvbGUgZm9saW8sIHNvIHRoZXJlIGlzIG5vXG4rXHQgKiBmaW5lciBpbmZvcm1hdGlvbiB0byBwYXNzIG9uLiBBIFBURS1tYXBwZWQgZm9saW8gb25seSBoYXMgdGhlIHBhZ2VcbitcdCAqIHRoZSBmYXVsdCB3YXMgZm9yIGRpcnRpZWQgc28gZmFyLlxuK1x0ICovXG4rXHRpZiAocG1kX3RyYW5zX2h1Z2UocG1kcF9nZXRfbG9ja2xlc3Modm1mLVx1MDAzZXBtZCkpKVxuK1x0XHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGRpcnRpZWQgPSBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBvZmYsIFBBR0VfU0laRSk7XG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xuIFx0LypcbiBcdCAqIFRha2UgYSBsb2NhbCBjb3B5IG9mIHRoZSBhZGRyZXNzX3NwYWNlIC0gZm9saW8ubWFwcGluZyBtYXkgYmUgemVyb2VkXG5AQCAtNTYyNSw2ICs1NjM0LDMxIEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXG4gfVxuICNlbmRpZlxuIFxuKy8qXG4rICogTWF5IHRoZSB3aG9sZSBiYXRjaCBiZSBtYXJrZWQgZGlydHk/XG4rICpcbisgKiBPbmx5IGEgc2hhcmVkIG1hcHBpbmcgb2YgYSBmaWxlc3lzdGVtIHRoYXQgdHJhY2tzIGRpcnR5IHN0YXRlIHBlciBibG9jayBzYXlzXG4rICogbm8uIFRoZXJlIHRoZSBwYWdlIHRhYmxlIGRpcnR5IGJpdHMgYXJlIHRoZSBvbmx5IHJlY29yZCBvZiB3aGljaCBwYXJ0cyBvZiBhXG4rICogbGFyZ2UgZm9saW8gd2VyZSB3cml0dGVuIHRocm91Z2ggdGhlIG1hcHBpbmcsIHNvIHBhZ2VzIG5vYm9keSBoYXMgc3RvcmVkIHRvXG4rICogaGF2ZSB0byBzdGF5IGNsZWFuIGFuZCBsZXQgdGhlIGhhcmR3YXJlIHNldCB0aGUgYml0IG9uIHRoZSBmaXJzdCBzdG9yZS5cbisgKlxuKyAqIEV2ZXJ5d2hlcmUgZWxzZSBub3RoaW5nIGV2ZXIgcmVhZHMgdGhvc2UgYml0cywgYW5kIG9uIGhhcmR3YXJlIHdpdGhvdXQgYVxuKyAqIGRpcnR5IGJpdCBsZWF2aW5nIHRoZW0gY2xlYW4gY29zdHMgYSBmYXVsdCBwZXIgcGFnZSBmb3Igbm90aGluZy4gVGhhdCBjb3ZlcnNcbisgKiBzaG1lbSwgd2hpY2ggaGFzIG5vIGRpcnR5IHN0YXRlIGJlbG93IHRoZSBmb2xpby5cbisgKi9cbitzdGF0aWMgYm9vbCBjYW5fZGlydHlfd2hvbGVfYmF0Y2goc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBucixcbitcdFx0XHRcdCAgYm9vbCBwcmVmYXVsdClcbit7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4rXG4rXHRpZiAoISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpIHx8IHByZWZhdWx0IHx8IG5yID09IDEpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiAhdm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlO1xuK31cbitcbiAvKipcbiAgKiBzZXRfcHRlX3JhbmdlIC0gU2V0IGEgcmFuZ2Ugb2YgUFRFcyB0byBwb2ludCB0byBwYWdlcyBpbiBhIGZvbGlvLlxuICAqIEB2bWY6IEZhdWx0IGRlc2NyaXB0aW9uLlxuQEAgLTU2MzksNiArNTY3Myw3IEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbiBcdGJvb2wgd3JpdGUgPSB2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEU7XG4gXHRib29sIHByZWZhdWx0ID0gIWluX3JhbmdlKHZtZi1cdTAwM2VhZGRyZXNzLCBhZGRyLCBuciAqIFBBR0VfU0laRSk7XG4rXHRib29sIGRpcnR5X2JhdGNoID0gY2FuX2RpcnR5X3dob2xlX2JhdGNoKHZtZiwgbnIsIHByZWZhdWx0KTtcbiBcdHB0ZV90IGVudHJ5O1xuIFxuIFx0Zmx1c2hfaWNhY2hlX3BhZ2VzKHZtYSwgcGFnZSwgbnIpO1xuQEAgLTU2NDksMTAgKzU2ODQsMTMgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0ZWxzZVxuIFx0XHRlbnRyeSA9IHB0ZV9zd19ta3lvdW5nKGVudHJ5KTtcbiBcbi1cdGlmICh3cml0ZSlcbi1cdFx0ZW50cnkgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTtcbi1cdGVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuK1x0aWYgKHdyaXRlKSB7XG4rXHRcdGlmIChkaXJ0eV9iYXRjaClcbitcdFx0XHRlbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTtcbitcdFx0ZW50cnkgPSBtYXliZV9ta3dyaXRlKGVudHJ5LCB2bWEpO1xuK1x0fSBlbHNlIGlmIChwdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xuIFx0XHRlbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTtcbitcdH1cbiBcdGlmICh1bmxpa2VseSh2bWZfb3JpZ19wdGVfdWZmZF93cCh2bWYpKSlcbiBcdFx0ZW50cnkgPSBwdGVfbWt1ZmZkKGVudHJ5KTtcbiBcdC8qIGNvcHktb24td3JpdGUgcGFnZSAqL1xuQEAgLTU2NjUsNiArNTcwMywxOCBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHR9XG4gXHRzZXRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHZtZi1cdTAwM2VwdGUsIGVudHJ5LCBucik7XG4gXG4rXHQvKlxuK1x0ICogVGhlIHBhZ2UgdGhlIGZhdWx0IHdhcyBmb3IgaXMgYWJvdXQgdG8gYmUgc3RvcmVkIHRvLCBzbyBkaXJ0eSBpdFxuK1x0ICogaGVyZSByYXRoZXIgdGhhbiBsZWF2ZSB0aGUgc3RvcmUgdG8gYSBzZWNvbmQgcGFnZSB0YWJsZSB3YWxrLCBvciB0b1xuK1x0ICogYSBzZWNvbmQgZmF1bHQgd2hlcmUgdGhlIGRpcnR5IGJpdCBpcyBtYWludGFpbmVkIGluIHNvZnR3YXJlLlxuK1x0ICovXG4rXHRpZiAoIWRpcnR5X2JhdGNoKSB7XG4rXHRcdHB0ZV90ICpwdGVwID0gdm1mLVx1MDAzZXB0ZSArICgodm1mLVx1MDAzZWFkZHJlc3MgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXG4rXHRcdHB0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBwdGVwLFxuK1x0XHRcdFx0ICAgICAgcHRlX21rZGlydHkocHRlcF9nZXQocHRlcCkpLCAxKTtcbitcdH1cbitcbiBcdC8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNhY2hlZCAqL1xuIFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZSh2bWYsIHZtYSwgYWRkciwgdm1mLVx1MDAzZXB0ZSwgbnIpO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suY1xuaW5kZXggNmM5YzdiYTg5YjhhOS4uMzliNTRjMjVhOWZhYiAxMDA2NDRcbi0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmNcbisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmNcbkBAIC0yNzUxLDYgKzI3NTEsMjEgQEAgYm9vbCBmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4gfVxuIEVYUE9SVF9TWU1CT0woZm9saW9fcmVkaXJ0eV9mb3Jfd3JpdGVwYWdlKTtcbiBcbisvKlxuKyAqIEhhbmQgYSBkaXJ0aWVkIHJhbmdlIG9mIEBmb2xpbyB0byB0aGUgZmlsZXN5c3RlbS4gIC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIGNhblxuKyAqIGV4cHJlc3MgZXZlcnl0aGluZyAtXHUwMDNlZGlydHlfZm9saW8oKSBjYW4sIHNvIGEgZmlsZXN5c3RlbSB0aGF0IGltcGxlbWVudHMgaXRcbisgKiBkb2VzIG5vdCBuZWVkIGJvdGgsIGFuZCBhIHdob2xlLWZvbGlvIGRpcnR5IGNvbWVzIHRocm91Z2ggaGVyZSBhcyBhIHJhbmdlXG4rICogY292ZXJpbmcgdGhlIGZvbGlvLlxuKyAqL1xuK3N0YXRpYyBib29sIG1hcHBpbmdfZGlydHlfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuK3tcbitcdGlmICghbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSlcbitcdFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuK1xuK1x0cmV0dXJuIG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcbit9XG4rXG4gLyoqXG4gICogZm9saW9fbWFya19kaXJ0eSAtIE1hcmsgYSBmb2xpbyBhcyBiZWluZyBtb2RpZmllZC5cbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbkBAIC0yNzgyLDEzICsyNzk3LDM5IEBAIGJvb2wgZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG4gXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4tXHRcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbitcdFx0cmV0dXJuIG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sIDAsXG4rXHRcdFx0XHRcdCAgIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdH1cbiBcbiBcdHJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChmb2xpb19tYXJrX2RpcnR5KTtcbiBcbisvKipcbisgKiBmb2xpb19tYXJrX2RpcnR5X3JhbmdlIC0gTWFyayBwYXJ0IG9mIGEgZm9saW8gYXMgYmVpbmcgbW9kaWZpZWQuXG4rICogQGZvbGlvOiBUaGUgZm9saW8uXG4rICogQG9mZjogT2Zmc2V0IG9mIHRoZSBtb2RpZmllZCByYW5nZSB3aXRoaW4gdGhlIGZvbGlvLlxuKyAqIEBsZW46IExlbmd0aCBvZiB0aGUgbW9kaWZpZWQgcmFuZ2UuXG4rICpcbisgKiBMaWtlIGZvbGlvX21hcmtfZGlydHkoKSwgYnV0IHRlbGxzIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXJcbisgKiBibG9jayB0aGF0IG9ubHkgW0BvZmYsIEBvZmYgKyBAbGVuKSBjaGFuZ2VkLCBzbyB3cml0ZWJhY2sgY2FuIHNraXAgdGhlIHJlc3RcbisgKiBvZiB0aGUgZm9saW8uICBGaWxlc3lzdGVtcyB3aXRob3V0IHRoYXQgdHJhY2tpbmcgZGlydHkgdGhlIHdob2xlIGZvbGlvLlxuKyAqXG4rICogUmV0dXJuOiBUcnVlIGlmIHRoZSBmb2xpbyB3YXMgbmV3bHkgZGlydGllZCwgZmFsc2UgaWYgaXQgd2FzIGFscmVhZHkgZGlydHkuXG4rICovXG4rYm9vbCBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4re1xuK1x0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbitcbitcdGlmIChsaWtlbHkobWFwcGluZykpIHtcbitcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG4rXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4rXHRcdHJldHVybiBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLCBvZmYsIGxlbik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbm9vcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4rfVxuK1xuIC8qXG4gICogZm9saW9fbWFya19kaXJ0eSgpIGlzIHJhY3kgaWYgdGhlIGNhbGxlciBoYXMgbm8gcmVmZXJlbmNlIGFnYWluc3RcbiAgKiBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QsIGFuZCBpZiB0aGUgZm9saW8gaXMgdW5sb2NrZWQuICBUaGlzIGlzIGJlY2F1c2UgYW5vdGhlclxuQEAgLTI4NDQsNiArMjg4NSw0MSBAQCB2b2lkIF9fZm9saW9fY2FuY2VsX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIEVYUE9SVF9TWU1CT0woX19mb2xpb19jYW5jZWxfZGlydHkpO1xuIFxuKy8qXG4rICogV3JpdGUtcHJvdGVjdCBldmVyeSBtYXBwaW5nIG9mIEBmb2xpbyBhbmQgaGFuZCB0aGUgZmlsZXN5c3RlbSB0aGUgcGFydHMgdGhhdFxuKyAqIHdlcmUgZGlydHkgaW4gYSBwYWdlIHRhYmxlLlxuKyAqXG4rICogV2l0aG91dCAtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UoKSB0aGVyZSBpcyBub3doZXJlIHRvIHB1dCBwZXItYmxvY2sgc3RhdGUsIHNvXG4rICogYW55IFBURSBkaXJ0eSBiaXQgZGlydGllcyB0aGUgd2hvbGUgZm9saW8uICBTYW1lIHdoZW4gdGhlIGZvbGlvIGlzIG5vdFxuKyAqIGFscmVhZHkgZGlydHksIGJlY2F1c2UgdGhlbiB0aGUgZGlydHkgdHJhbnNpdGlvbiBuZWVkcyB0aGUgZnVsbCBhY2NvdW50aW5nXG4rICogaW4gZm9saW9fbWFya19kaXJ0eSgpLCBhbmQgZm9yIGEgZm9saW8gdG9vIGxhcmdlIGZvciB0aGUgYml0bWFwLCB3aGljaCB0aGVcbisgKiBwYWdlIGNhY2hlIGRvZXMgbm90IG1ha2UuXG4rICovXG4rc3RhdGljIHZvaWQgZm9saW9fbWtjbGVhbl9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbit7XG4rXHRERUNMQVJFX0JJVE1BUChtYXAsIDFVTCBcdTAwM2NcdTAwM2MgTUFYX1BBR0VDQUNIRV9PUkRFUik7XG4rXHR1bnNpZ25lZCBpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHR1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDtcbitcbitcdGlmICghbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSB8fCAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHxcbitcdCAgICBXQVJOX09OX09OQ0UobnIgXHUwMDNlICgxVUwgXHUwMDNjXHUwMDNjIE1BWF9QQUdFQ0FDSEVfT1JERVIpKSkge1xuK1x0XHRpZiAoZm9saW9fbWtjbGVhbihmb2xpbykpXG4rXHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGJpdG1hcF96ZXJvKG1hcCwgbnIpO1xuK1x0aWYgKCFmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBtYXApKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucikge1xuK1x0XHRtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLFxuK1x0XHRcdFx0ICAgIChzaXplX3Qpc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHQgICAgKHNpemVfdCkoZW5kIC0gc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBDbGVhciBhIGZvbGlvJ3MgZGlydHkgZmxhZywgd2hpbGUgY2FyaW5nIGZvciBkaXJ0eSBtZW1vcnkgYWNjb3VudGluZy5cbiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbGlvIHdhcyBwcmV2aW91c2x5IGRpcnR5LlxuQEAgLTI4NzUsOSArMjk1MSw5IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqXG4gXHRcdCAqIFdlIHVzZSB0aGlzIHNlcXVlbmNlIHRvIG1ha2Ugc3VyZSB0aGF0XG4gXHRcdCAqICAoYSkgd2UgYWNjb3VudCBmb3IgZGlydHkgc3RhdHMgcHJvcGVybHlcbi1cdFx0ICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB0b1xuLVx0XHQgKiAgICAgIG1hcmsgdGhlIHdob2xlIGZvbGlvIGRpcnR5IGlmIGl0IHdhc1xuLVx0XHQgKiAgICAgIGRpcnR5IGluIGEgcGFnZXRhYmxlLiBPbmx5IHRvIHRoZW5cbitcdFx0ICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB3aGljaFxuK1x0XHQgKiAgICAgIHBhcnRzIG9mIHRoZSBmb2xpbyB3ZXJlIGRpcnR5IGluIGFcbitcdFx0ICogICAgICBwYWdldGFibGUuIE9ubHkgdG8gdGhlblxuIFx0XHQgKiAgKGMpIGNsZWFuIHRoZSBmb2xpbyBhZ2FpbiBhbmQgcmV0dXJuIDEgdG9cbiBcdFx0ICogICAgICBjYXVzZSB0aGUgd3JpdGViYWNrLlxuIFx0XHQgKlxuQEAgLTI4OTUsOCArMjk3MSw3IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqIGFzIGEgc2VyaWFsaXphdGlvbiBwb2ludCBmb3IgYWxsIHRoZSBkaWZmZXJlbnRcbiBcdFx0ICogdGhyZWFkcyBkb2luZyB0aGVpciB0aGluZ3MuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fbWtjbGVhbihmb2xpbykpXG4tXHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdGZvbGlvX21rY2xlYW5fZm9yX2lvKGZvbGlvLCBtYXBwaW5nKTtcbiBcdFx0LypcbiBcdFx0ICogV2UgY2FyZWZ1bGx5IHN5bmNocm9uaXNlIGZhdWx0IGhhbmRsZXJzIGFnYWluc3RcbiBcdFx0ICogaW5zdGFsbGluZyBhIGRpcnR5IHB0ZSBhbmQgbWFya2luZyB0aGUgZm9saW8gZGlydHlcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFmNzJkMjc5YmE2OGYuLmFhZjQ1YWM3OWZhODQgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTExMDAsMTIgKzExMDAsMTggQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbiBcdHJldHVybiByd2MuY29udGVuZGVkID8gLTEgOiBwcmEucmVmZXJlbmNlZDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4rc3RydWN0IG1rY2xlYW5fc3RhdGUge1xuK1x0dW5zaWduZWQgbG9uZyAqZGlydHlfbWFwO1xuK1x0aW50IGNsZWFuZWQ7XG4rfTtcbitcbitzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcClcbiB7XG4tXHRpbnQgY2xlYW5lZCA9IDA7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXHUwMDNldm1hO1xuLVx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHB2bXctXHUwMDNlYWRkcmVzcztcbitcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4rXHRpbnQgY2xlYW5lZCA9IDA7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uIE5vdGUgdGhhdFxuQEAgLTExMzQsNiArMTE0MCwxNSBAQCBzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiBcdFx0XHRpZiAoIXB0ZV9kaXJ0eShlbnRyeSkgXHUwMDI2XHUwMDI2ICFwdGVfd3JpdGUoZW50cnkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4rXHRcdFx0aWYgKGRpcnR5X21hcCBcdTAwMjZcdTAwMjYgcHRlX2RpcnR5KGVudHJ5KSkge1xuK1x0XHRcdFx0cGdvZmZfdCBpZHggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpIC1cbitcdFx0XHRcdFx0ICAgICAgcHZtdy1cdTAwM2VwZ29mZjtcbitcbitcdFx0XHRcdC8qIFRoZSB3YWxrIG9ubHkgdmlzaXRzIHBhZ2VzIG9mIHRoaXMgZm9saW8gKi9cbitcdFx0XHRcdFZNX1dBUk5fT05fT05DRShpZHggXHUwMDNlPSBwdm13LVx1MDAzZW5yX3BhZ2VzKTtcbitcdFx0XHRcdF9fc2V0X2JpdChpZHgsIGRpcnR5X21hcCk7XG4rXHRcdFx0fVxuK1xuIFx0XHRcdGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyZXNzLCBwdGVfcGZuKGVudHJ5KSk7XG4gXHRcdFx0ZW50cnkgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHRlKTtcbiBcdFx0XHRlbnRyeSA9IHB0ZV93cnByb3RlY3QoZW50cnkpO1xuQEAgLTExNTUsNiArMTE3MCw5IEBAIHN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRcdGlmICghcG1kX2RpcnR5KGVudHJ5KSBcdTAwMjZcdTAwMjYgIXBtZF93cml0ZShlbnRyeSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAoZGlydHlfbWFwIFx1MDAyNlx1MDAyNiBwbWRfZGlydHkoZW50cnkpKVxuK1x0XHRcdFx0Yml0bWFwX3NldChkaXJ0eV9tYXAsIDAsIHB2bXctXHUwMDNlbnJfcGFnZXMpO1xuK1xuIFx0XHRcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICBhZGRyZXNzICsgSFBBR0VfUE1EX1NJWkUpO1xuIFx0XHRcdGVudHJ5ID0gcG1kcF9pbnZhbGlkYXRlKHZtYSwgYWRkcmVzcywgcG1kKTtcbkBAIC0xMTgxLDkgKzExOTksOSBAQCBzdGF0aWMgYm9vbCBwYWdlX21rY2xlYW5fb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4ge1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIFBWTVdfU1lOQyk7XG4tXHRpbnQgKmNsZWFuZWQgPSBhcmc7XG4rXHRzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSAqc3RhdGUgPSBhcmc7XG4gXG4tXHQqY2xlYW5lZCArPSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13KTtcbitcdHN0YXRlLVx1MDAzZWNsZWFuZWQgKz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdywgc3RhdGUtXHUwMDNlZGlydHlfbWFwKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC0xMTk2LDEyICsxMjE0LDIzIEBAIHN0YXRpYyBib29sIGludmFsaWRfbWtjbGVhbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1pbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuKy8qKlxuKyAqIGZvbGlvX21rY2xlYW5fZGlydHltYXAgLSBXcml0ZS1wcm90ZWN0IGEgZm9saW8gYW5kIHJlcG9ydCB3aGF0IHdhcyBkaXJ0eS5cbisgKiBAZm9saW86IFRoZSBmb2xpbyB0byBjbGVhbi5cbisgKiBAZGlydHlfbWFwOiBCaXRtYXAgb2YgYXQgbGVhc3QgZm9saW9fbnJfcGFnZXMoQGZvbGlvKSBiaXRzLCBvciBOVUxMLlxuKyAqXG4rICogV3JpdGUtcHJvdGVjdHMgYW5kIGNsZWFucyBldmVyeSBtYXBwaW5nIG9mIEBmb2xpby4gIFdpdGggQGRpcnR5X21hcCwgc2V0cyBhXG4rICogYml0IGZvciBlYWNoIHBhZ2Ugd2hvc2UgZW50cnkgd2FzIGRpcnR5OyBhIFBNRC1tYXBwZWQgZm9saW8gaGFzIG9uZSBkaXJ0eVxuKyAqIGJpdCBmb3IgYWxsIG9mIGl0LCBzbyBldmVyeSBwYWdlIGlzIHJlcG9ydGVkLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIHBhZ2UgdGFibGUgZW50cmllcyBjbGVhbmVkLlxuKyAqL1xuK2ludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcClcbiB7XG4tXHRpbnQgY2xlYW5lZCA9IDA7XG4rXHRzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSBzdGF0ZSA9IHsgLmRpcnR5X21hcCA9IGRpcnR5X21hcCB9O1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xuLVx0XHQuYXJnID0gKHZvaWQgKilcdTAwMjZjbGVhbmVkLFxuK1x0XHQuYXJnID0gKHZvaWQgKilcdTAwMjZzdGF0ZSxcbiBcdFx0LnJtYXBfb25lID0gcGFnZV9ta2NsZWFuX29uZSxcbiBcdFx0LmludmFsaWRfdm1hID0gaW52YWxpZF9ta2NsZWFuX3ZtYSxcbiBcdH07XG5AQCAtMTIxNyw3ICsxMjQ2LDEyIEBAIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4gXG4tXHRyZXR1cm4gY2xlYW5lZDtcbitcdHJldHVybiBzdGF0ZS5jbGVhbmVkO1xuK31cbitcbitpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBOVUxMKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fbWtjbGVhbik7XG4gXG5AQCAtMTI0MSw3ICsxMjc1LDcgQEAgc3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdC5mbGFnc1x0XHQ9IFBWTVdfU1lOQyxcbiBcdH07XG4gXG4tXHRzdGF0ZS1cdTAwM2VjbGVhbmVkICs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcpO1xuK1x0c3RhdGUtXHUwMDNlY2xlYW5lZCArPSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13LCBOVUxMKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC0xMzI0LDcgKzEzNTgsNyBAQCBpbnQgcGZuX21rY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHBnb2ZmX3QgcGdvZmYsXG4gXHRwdm13LmFkZHJlc3MgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmLCBucl9wYWdlcyk7XG4gXHRWTV9CVUdfT05fVk1BKHB2bXcuYWRkcmVzcyA9PSAtRUZBVUxULCB2bWEpO1xuIFxuLVx0cmV0dXJuIHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcpO1xuK1x0cmV0dXJuIHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2ZvbGlvX21vZF9zdGF0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuciwgaW50IG5yX3BtZG1hcHBlZClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjAwLjM1MzkzOTQzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDk2MDQyNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3ViLUZvbGlvIERpcnR5IFRyYWNraW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBhaW1zIHRvIGludHJvZHVjZSBncmFudWxhciB0cmFja2luZyBvZiBkaXJ0eSBkYXRhIHdpdGhpbiBsYXJnZSBmb2xpb3MsIGdvaW5nIGJleW9uZCB0aGUgdHJhZGl0aW9uYWwgZm9saW8tbGV2ZWwgZGlydHkgZmxhZy4gVGhpcyBsb29rcyBsaWtlIGEgbmVjZXNzYXJ5IG9wdGltaXphdGlvbiBmb3IgbW9kZXJuIHN0b3JhZ2Ugc3lzdGVtcyBhbmQgc2hvdWxkIGxlYWQgdG8gbW9yZSBlZmZpY2llbnQgd3JpdGViYWNrIGFuZCBjYWNoaW5nIGJlaGF2aW9yLlxuXG5IZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgSSByZWFkIHRocm91Z2ggdGhlIGNoYW5nZXMuICBJdCdzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoLCBpbXBsZW1lbnRpbmcgYGRpcnR5X2ZvbGlvX3JhbmdlYCB3aXRoaW4gdGhlIGBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNgLiBUaGUgbWFpbiBpZGVhIHNlZW1zIHRvIGJlIHRvIGludHJvZHVjZSBhIG1lY2hhbmlzbSwgYGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlYCwgYW5kIHVzZSBpdCB0byB0cmFjayBkaXJ0eSByZWdpb25zIHdpdGhpbiBhIGZvbGlvLCB3aGljaCBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgZm9yIGhhbmRsaW5nIGxhcmdlciBmb2xpb3MuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZTpcblxuKiAgIGBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZWAgaXMgaW50cm9kdWNlZCBhbmQgY2FsbGVkIGJ5IGBpb21hcF9kaXJ0eV9mb2xpb2AuIFRoaXMgc3VnZ2VzdHMgYSBjbGVhciBkZWxlZ2F0aW9uIG9mIHRoZSBkaXJ0eSByYW5nZSBtYW5hZ2VtZW50IHRvIHRoZSBuZXcgZnVuY3Rpb24uIE1vZGlmaWNhdGlvbnMgaW4gYGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcmAgYW5kIGBpb21hcF9wYWdlX21rd3JpdGVgIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgY29uc3VtZXJzLlxuKiAgIFRoZSBgeGZzYCBmaWxlc3lzdGVtIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW5kaWNhdGVzIGEgcmVhbC13b3JsZCBhcHBsaWNhdGlvbi5cbiogICBGdW5jdGlvbiBwb2ludGVycyBhcmUgYWRkZWQgdG8gdGhlIGBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNgIHN0cnVjdCwgYW5kIHJlbGV2YW50IGRlY2xhcmF0aW9ucyBhcmUgaW5jbHVkZWQuXG4qICAgVGhlIGBtbWAgY29kZSBub3cgdXNlcyB0aGUgYGRpcnR5X2ZvbGlvX3JhbmdlYCBmdW5jdGlvbiBpbiBzZXZlcmFsIHBsYWNlcywgaW5jbHVkaW5nIGBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZWAsIGBjYW5fZGlydHlfd2hvbGVfYmF0Y2hgLCBgc2V0X3B0ZV9yYW5nZWAsIGBtYXBwaW5nX2RpcnR5X3JhbmdlYCwgYGZvbGlvX21hcmtfZGlydHlgLCBhbmQgYGZvbGlvX21hcmtfZGlydHlfcmFuZ2VgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBzdWItZm9saW8gZGlydHkgdHJhY2tpbmcgaXMgaW1wbGVtZW50ZWQuXG4qICAgYGZvbGlvX21rY2xlYW5fZm9yX2lvYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IGFwcGVhcnMgdG8gdXRpbGl6ZSBhIGJpdG1hcCAoYG1hcGApIHRvIHJlcHJlc2VudCB0aGUgZGlydHkgc3RhdGUgb2YgaW5kaXZpZHVhbCBwYWdlcyB3aXRoaW4gYSBmb2xpbywgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGtleSB0byB0aGUgc3ViLWZvbGlvIHRyYWNraW5nLiBJIHdvbmRlciBhYm91dCBpdHMgdXNhZ2UgYW5kIHBvdGVudGlhbCBmb3IgaXNzdWVzLlxuKiAgIGBtbS9ybWFwLmNgIGludHJvZHVjZXMgYHN0cnVjdCBta2NsZWFuX3N0YXRlYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIFRoaXMgc3RydWN0dXJlIHNlZW1zIGRlc2lnbmVkIHRvIGZhY2lsaXRhdGUgY2xlYW5pbmcgYW5kIHBvdGVudGlhbGx5IHVubWFwcGluZyBwYWdlcyBvciBzdWItcGFnZSByZWdpb25zLlxuXG5Ob3csIGxldCBtZSB6b29tIGluIG9uIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gVGhlIHVzZSBvZiBhIGJpdG1hcCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gIHJhaXNlcyBhIHF1ZXN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2Ugb2YgdGhlIGBtYXBgIGJpdG1hcC5cblxuYGBgY1xuICAgIERFQ0xBUkVfQklUTUFQKG1hcCwgMVVMIFx1MDAzY1x1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcbiAgICB1bnNpZ25lZCBpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gICAgdW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7XG5cbiAgICBpZiAoIW1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UgfHwgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8XG4gICAgICAgIFdBUk5fT05fT05DRShuciBcdTAwM2UgKDFVTCBcdTAwM2NcdTAwM2MgTUFYX1BBR0VDQUNIRV9PUkRFUikpKSB7XG4gICAgICAgIGlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSlcbiAgICAgICAgICAgIGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYml0bWFwX3plcm8obWFwLCBucik7XG4gICAgaWYgKCFmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBtYXApKVxuICAgICAgICByZXR1cm47XG5cbiAgICBmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucikge1xuICAgICAgICBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkoZW5kIC0gc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbiAgICB9XG5gYGBcblxuVGhlIGNvZGUgemVyb2VzIGBucmAgYml0cyBvZiB0aGUgYG1hcGAuIFRoZSBsb29wIGBmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucilgIGl0ZXJhdGVzIG92ZXIgdGhlIHNldCBiaXRzIHdpdGhpbiB0aGUgYG1hcGAuIEl0IHNlZW1zIHRvIG1lIHRoYXQgYGJpdG1hcF96ZXJvYCBjbGVhcnMgYG1hcGAgZm9yIGBucmAgcGFnZXMsIGFuZCB0aGUgbG9vcCB1c2VzIHRoZSBjbGVhcmVkIGBtYXBgLiBUaGUgdXNlIG9mIGBucmAgc2hvdWxkIGJvdW5kIHRoZSBiaXRtYXAsIGFuZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgY29kZSByZWxpZXMgb24gdGhlIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBiaXRtYXAgcm91dGluZXMuXG5MZXQncyBtYWtlIHN1cmUgdGhlIGJpdG1hcCBhY2Nlc3Mgd2l0aGluIGBmb3JfZWFjaF9zZXRfYml0cmFuZ2VgIHJlc3BlY3RzIHRoZSBib3VuZHMgc2V0IGJ5IGBucmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MDYuODQ5OTg0NDc4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg5NjI4MDg2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGJpdG1hcF96ZXJvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMzowOC4zMzk2MjY0MzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc3NDYzNDkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gYGJpdG1hcF96ZXJvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBiaXRtYXBfemVyb2AuIEdpdmVuIGl0cyBmdW5jdGlvbiwgaXQncyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBnb2luZyB0byBiZSByZWxhdGVkIHRvIGJpdCBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGluY2x1ZGUvbGludXgvYml0bWFwLmhgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGJpdG1hcCBtYW5pcHVsYXRpb24gbWFjcm9zIGFuZCBmdW5jdGlvbnMuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZywgYW5kIGhvcGVmdWxseSwgSSdsbCBmaW5kIGl0cyBkZWZpbml0aW9uIG9yIGF0IGxlYXN0IHJlbGF0ZWQgdXRpbGl0eSBmdW5jdGlvbnMgdGhlcmUuIEknbSBhc3N1bWluZyBpdCdzIGltcGxlbWVudGVkIGFzIGEgbWFjcm8sIGJ1dCBJIHdvbid0IHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBpdCBiZWluZyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIFJlZ2FyZGxlc3MsIGBiaXRtYXAuaGAgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIGRldGFpbHMgb24gaG93IGl0IGFjdHVhbGx5IGRvZXMgaXRzIGpvYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMzoxMC4xMTQyNjM2MDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Mjc4MzM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX3plcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9iaXRtYXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MTAuMTY5NTQ5NjI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDM3ODMxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRpbWUgdG8gSW52ZXN0aWdhdGUgYGJpdG1hcF96ZXJvYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBob3cgYGJpdG1hcF96ZXJvYCBpcyBkZWZpbmVkIG9yIHVzZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBzdGFuZGFyZCBoZWFkZXIgZmlsZSBmb3IgYml0bWFwIGRlZmluaXRpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgZ2l2ZW4gdGhhdCBpdCdzIGEgY29yZSBkYXRhIHN0cnVjdHVyZSBhbmQgdXRpbGl0eS4gSSdtIGFzc3VtaW5nIHRoYXQgc2hvdWxkIHlpZWxkIGEgcXVpY2sgcmVzdWx0IHdpdGggdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIG9yIHVzYWdlcy4gSG9wZWZ1bGx5IGl0J3Mgc3RyYWlnaHRmb3J3YXJkLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MTIuMjczMzM0OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTU2OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpdG1hcF96ZXJvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYml0bWFwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9iaXRtYXAuaD0xNz1zdHJ1Y3QgZGV2aWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC00Mi0gKlxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6NDM6ICogIGJpdG1hcF96ZXJvKGRzdCwgbmJpdHMpICAgICAgICAgICAgICAgICAgICAgKmRzdCA9IDBVTFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNDQtICogIGJpdG1hcF9maWxsKGRzdCwgbmJpdHMpICAgICAgICAgICAgICAgICAgICAgKmRzdCA9IH4wVUxcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtOTMtICpcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjk0OiAqIE5vdGUsIGJpdG1hcF96ZXJvKCkgYW5kIGJpdG1hcF9maWxsKCkgb3BlcmF0ZSBvdmVyIHRoZSByZWdpb24gb2ZcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTk1LSAqIHVuc2lnbmVkIGxvbmdzLCB0aGF0IGlzLCBiaXRzIGJlaGluZCBiaXRtYXAgdGlsbCB0aGUgdW5zaWduZWQgbG9uZ1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0yMzM9dm9pZCBiaXRtYXBfZm9sZCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9yaWcsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI0MC1cXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI0MTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYml0bWFwX3plcm8odW5zaWduZWQgbG9uZyAqZHN0LCB1bnNpZ25lZCBpbnQgbmJpdHMpXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNDIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD02MzQ9dm9pZCBiaXRtYXBfc2NhdHRlcih1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNjM5LVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6NjQwOlxcdGJpdG1hcF96ZXJvKGRzdCwgbmJpdHMpO1xcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNjQxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD02OTE9dm9pZCBiaXRtYXBfZ2F0aGVyKHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC02OTYtXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDo2OTc6XFx0Yml0bWFwX3plcm8oZHN0LCBuYml0cyk7XFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC02OTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjEyLjMxOTI5ODczOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc0MTgyMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQml0bWFwIEhlYWRlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBiaXRtYXBzIGFyZSBiZWluZyBoYW5kbGVkLiBMZXQncyB6ZXJvIGluIG9uIHRoZSBgaW5jbHVkZS9saW51eC9iaXRtYXAuaGAgaGVhZGVyIGZpbGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBrZXJuZWwncyBiaXQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWFjcm9zIGluIHRoaXMgaGVhZGVyIGlzIGVzc2VudGlhbCBmb3IsIHdlbGwsIHByZXR0eSBtdWNoIGFueXRoaW5nLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIHZpY2luaXR5IG9mIGxpbmUgMjQwLCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlZW1zIHRvIGJlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBqdW1wIGluIGFuZCBnZXQgYSBzZW5zZSBvZiB0aGUgY29udGV4dCBvZiBiaXQgb3BlcmF0aW9ucy4gRnJvbSB0aGVyZSwgSSdsbCBicmFuY2ggb3V0IHRvIHNlZSBob3cgdGhlIGNvZGUgYXJvdW5kIHRoYXQgcG9pbnQgaXMgaW1wYWN0aW5nIHRoZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjE0LjA5MzQ4NDA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYml0bWFwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcbiAyNDE6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJpdG1hcF96ZXJvKHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgaW50IG5iaXRzKVxcbiAyNDI6XFx0e1xcbiAyNDM6XFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IGJpdG1hcF9zaXplKG5iaXRzKTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0aWYgKHNtYWxsX2NvbnN0X25iaXRzKG5iaXRzKSlcXG4gMjQ2OlxcdFxcdFxcdCpkc3QgPSAwO1xcbiAyNDc6XFx0XFx0ZWxzZVxcbiAyNDg6XFx0XFx0XFx0bWVtc2V0KGRzdCwgMCwgbGVuKTtcXG4gMjQ5OlxcdH1cXG4gMjUwOlxcdFxcbiAyNTE6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJpdG1hcF9maWxsKHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgaW50IG5iaXRzKVxcbiAyNTI6XFx0e1xcbiAyNTM6XFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IGJpdG1hcF9zaXplKG5iaXRzKTtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0aWYgKHNtYWxsX2NvbnN0X25iaXRzKG5iaXRzKSlcXG4gMjU2OlxcdFxcdFxcdCpkc3QgPSB+MFVMO1xcbiAyNTc6XFx0XFx0ZWxzZVxcbiAyNTg6XFx0XFx0XFx0bWVtc2V0KGRzdCwgMHhmZiwgbGVuKTtcXG4gMjU5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MTQuMDkzNTc4NjMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5MjQyMjI1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBzdGFydHMgd2l0aCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBgYml0bWFwX3NpemVgIGNhbGN1bGF0ZXMgdGhlIHJlcXVpcmVkIG1lbW9yeSBmb3IgdGhlIGJpdG1hcCwgZW5zdXJpbmcgd2UncmUgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UuIFRoZSBgZm9yX2VhY2hfc2V0X2JpdHJhbmdlYCBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGNvbnN0cmFpbmVkIHRvIHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBiaXRtYXAsIGdpdmVuIHRoYXQgaXQncyB1c2luZyB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlIGBtYXBgIHZhcmlhYmxlIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5OZXh0LCBJIGV4YW1pbmVkIHRoZSBgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcGAgZnVuY3Rpb24gYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYHN0YXRlYCBzdHJ1Y3QuIGBzdGF0ZS5jbGVhbmVkYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBlc3NlbnRpYWwgZm9yIHRyYWNraW5nIGNsZWFuZWQgcGFnZXMuXG5cblRoZW4sIHRoZSBmb2N1cyBzaGlmdHMgdG8gYGlvbWFwX3BhZ2VfbWt3cml0ZWAuIEhlcmUsIGBkaXJ0eV9vZmZgIGFuZCBgZGlydHlfbGVuYCBhcmUgY2FsY3VsYXRlZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkgYXJlIGV2ZXIgdXNlZC4gVGhpcyBsb29rcyBzb2xpZC4gVGhlIGNvZGUgaXMgY2FyZWZ1bCB0byBoYW5kbGUgdGhlIHJhbmdlIHdpdGhpbiB0aGUgcGFnZSBjb3JyZWN0bHksIGFjY291bnRpbmcgZm9yIHBvdGVudGlhbCByYWNpbmcgdHJ1bmNhdGVzLiBUaGUgbG9naWMgc2VlbXMgcm9idXN0LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guIFRoaXMgcGF0Y2ggb3B0aW1pemVzIHdyaXRlYmFjayBhbmQgZGlydHkgcGFnZSB0cmFja2luZyBmb3IgbGFyZ2UgZm9saW9zIHdpdGhpbiBYRlMvaW9tYXAuIEluc3RlYWQgb2YgbWFya2luZyB0aGUgZW50aXJlIGZvbGlvIGRpcnR5LCBpdCB0cmFja3MgcGVyLXBhZ2UgZGlydHkgc3RhdGUgYW5kIHBhc3NlcyBhIHNwZWNpZmljIHJhbmdlIHRvIHRoZSBmaWxlc3lzdGVtJ3MgY2FsbGJhY2tzLCB3aGljaCB1cGRhdGVzIHRoZSBpb21hcCBzdWItcGFnZS9zdWItZm9saW8gZGlydHkgc3RhdGUuXG5cbkkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zOlxuXG4xLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uczoqKiBBcmUga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLiBUaGlzIGlzIGludGVybmFsIE1NIGFuZCBmaWxlc3lzdGVtIGRpcnR5IHRyYWNraW5nLCBzbyB0aGVyZSBhcmUgbm8gY29weS10by11c2VyIG9wZXJhdGlvbnMgb3IgYW55dGhpbmcgbGlrZSB0aGF0LlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogQXJlIHRoZXJlIGNvbmRpdGlvbnMgb3IgYnJhbmNoZXMgdGhhdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLiBBbGwgdmFyaWFibGVzLCBsaWtlIGBkaXJ0eV9vZmZgLCBgZGlydHlfbGVuYCwgYHN0YXRlYCwgYW5kIGBtYXBgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC5cbjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzOioqIElzIHRoZXJlIGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm8uIGBpZnNfYWxsb2NgIGlzIGNhbGxlZCBiZWZvcmUsIGFuZCB0aGUgZGF0YSBpcyBhbGxvY2F0ZWQgY29ycmVjdGx5LlxuNC4gICoqQnVmZmVyIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkPyBOby4gVGhlIGZvbGlvIGRhdGEgYW5kIGJ1ZmZlcnMgYXJlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLlxuXG5HaXZlbiB0aGUgS01TQU4gZ3VpZGVsaW5lcywgdGhlIGFuc3dlciBpcyBuby4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLiBTdGFuZGFyZCBLQVNBTiBjaGVja3MsIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHdvdWxkIGxpa2VseSBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCBhcmUgbW9yZSBsaWtlbHkgbG9naWMgYnVncyByZWxhdGVkIHRvIHJhbmdlIGNhbGN1bGF0aW9ucywgbG9ja2luZyBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudC93cml0ZWJhY2ssIHdoaWNoIGNhbiBiZSBjYXVnaHQgdmlhIHRlc3Rpbmcgb3IgZGVidWdnaW5nLlxuXG5UaGVyZWZvcmUsICoqTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGZhbHNlLioqIEknbSByZWFkeSB0byBwcmVwYXJlIHRoZSByZWFzb25pbmcgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNzAsIk91dHB1dFRva2VucyI6MjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjIxLjAxNzgwMzg2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYW5nZS1iYXNlZCBkaXJ0eSB0cmFja2luZyBmb3IgbGFyZ2UgZm9saW9zIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlvbWFwIChzcGVjaWZpY2FsbHkgYGRpcnR5X2ZvbGlvX3JhbmdlYCwgYGZvbGlvX21hcmtfZGlydHlfcmFuZ2VgLCBhbmQgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgKS5cXG5cXG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBBbGwgbmV3IGxvY2FsIHZhcmlhYmxlcyAoYGRpcnR5X29mZmAsIGBkaXJ0eV9sZW5gLCBgc3RhdGVgLCBhbmQgc3RhY2sgYml0bWFwIGBtYXBgIGluIGBmb2xpb19ta2NsZWFuX2Zvcl9pb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChgYml0bWFwX3plcm9gLCBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBldGMuKS4gVGhlcmUgYXJlIG5vIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHZlY3RvcnMuXFxuMi4gS0FTQU4gLyBzdGFuZGFyZCBkZXRlY3RvcnMgYXBwbGljYWJpbGl0eTogUG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIHJhbmdlIGNhbGN1bGF0aW9ucywgYml0bWFzayBvcGVyYXRpb25zLCBvciBwYWdlIHRhYmxlIHdhbGtzIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFzc2VydGlvbnMvbG9ja2luZyBpc3N1ZXMsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBleGlzdGluZyBrZXJuZWwgZGVidWcgY2hlY2tzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmFuZ2UtYmFzZWQgZGlydHkgdHJhY2tpbmcgZm9yIGxhcmdlIGZvbGlvcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpb21hcCAoc3BlY2lmaWNhbGx5IGBkaXJ0eV9mb2xpb19yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYW5kIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYCkuXFxuXFxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcy4gQWxsIG5ldyBsb2NhbCB2YXJpYWJsZXMgKGBkaXJ0eV9vZmZgLCBgZGlydHlfbGVuYCwgYHN0YXRlYCwgYW5kIHN0YWNrIGJpdG1hcCBgbWFwYCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoYGJpdG1hcF96ZXJvYCwgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZXRjLikuIFRoZXJlIGFyZSBubyBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2ZWN0b3JzLlxcbjIuIEtBU0FOIC8gc3RhbmRhcmQgZGV0ZWN0b3JzIGFwcGxpY2FiaWxpdHk6IFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSByYW5nZSBjYWxjdWxhdGlvbnMsIGJpdG1hc2sgb3BlcmF0aW9ucywgb3IgcGFnZSB0YWJsZSB3YWxrcyB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhc3NlcnRpb25zL2xvY2tpbmcgaXNzdWVzLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvq6sv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 04:01:17 +0000 UTC FinishedAt: 2026-09-05 04:03:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS" ], "series_id": "c5e9020d-26e2-47b8-83b0-8faca8ea362d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "iomap_dirty_folio_range", "iomap_page_mkwrite", "folio_mark_dirty_range", "folio_mkclean_dirtymap", "folio_clear_dirty_for_io" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlJiMzNDssCiAgICAmIzM0O2lvbWFwX3BhZ2VfbWt3cml0ZSYjMzQ7LAogICAgJiMzNDtmb2xpb19tYXJrX2RpcnR5X3JhbmdlJiMzNDssCiAgICAmIzM0O2ZvbGlvX21rY2xlYW5fZGlydHltYXAmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfZGlydHlfZm9yX2lvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByYW5nZS1iYXNlZCBkaXJ0eSB0cmFja2luZyBmb3IgbGFyZ2UgZm9saW9zIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlvbWFwIChzcGVjaWZpY2FsbHkgYGRpcnR5X2ZvbGlvX3JhbmdlYCwgYGZvbGlvX21hcmtfZGlydHlfcmFuZ2VgLCBhbmQgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgKS5cblxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcy4gQWxsIG5ldyBsb2NhbCB2YXJpYWJsZXMgKGBkaXJ0eV9vZmZgLCBgZGlydHlfbGVuYCwgYHN0YXRlYCwgYW5kIHN0YWNrIGJpdG1hcCBgbWFwYCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoYGJpdG1hcF96ZXJvYCwgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZXRjLikuIFRoZXJlIGFyZSBubyBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2ZWN0b3JzLlxuMi4gS0FTQU4gLyBzdGFuZGFyZCBkZXRlY3RvcnMgYXBwbGljYWJpbGl0eTogUG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIHJhbmdlIGNhbGN1bGF0aW9ucywgYml0bWFzayBvcGVyYXRpb25zLCBvciBwYWdlIHRhYmxlIHdhbGtzIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFzc2VydGlvbnMvbG9ja2luZyBpc3N1ZXMsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBleGlzdGluZyBrZXJuZWwgZGVidWcgY2hlY2tzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3ViLWZvbGlvIHJhbmdlIGRpcnR5aW5nIHZpYSAtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UsIGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoKSwgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCgpLCBhbmQgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UoKSBmb3IgWEZTL2lvbWFwLiBJdCBtb2RpZmllcyBjb3JlIE1NIGRpcnR5IGZvbGlvIHRyYWNraW5nLCB3cml0ZS1wcm90ZWN0L2NsZWFuIHRyYW5zaXRpb25zIGluIHdyaXRlYmFjayAoZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKSwgcm1hcCBQVEUvUE1EIGRpcnR5IHdhbGssIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBzaGFyZWQgbWFwcGluZ3MuIFRoZXNlIHJlYWNoYWJsZSBNTSBhbmQgZmlsZXN5c3RlbSBwYXRocyB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNTE5YjQ2MWM5YjNmZGVjYWE4ODBlMGM5M2I0ZGE5OTc3NTFjMWIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNDowMjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggMGE1ZWJmZGE5MGYxMi4uOGQ4YThhY2FiMDFhYyAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC04NDcsMTUgJiM0Mzs4NDcsMTkgQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xuIFxuLWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRzaXplX3QgbGVuID0gZm9saW9fc2l6ZShmb2xpbyk7XG4tXG4tXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcbi1cdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgMCwgbGVuKTtcbiYjNDM7XHRpZnNfYWxsb2MobWFwcGluZy1cdTAwM2Vob3N0LCBmb2xpbywgMCk7XG4mIzQzO1x0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBvZmYsIGxlbik7XG4gXHRyZXR1cm4gZmlsZW1hcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7XG4mIzQzO1xuJiM0Mztib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLCBmb2xpb19zaXplKGZvbGlvKSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpbyk7XG4gXG4gc3RhdGljIHZvaWRcbkBAIC0xODA0LDcgJiM0MzsxODA4LDcgQEAgaW9tYXBfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF90cnVuY2F0ZV9wYWdlKTtcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBkaXJ0eV9vZmYsIHNpemVfdCBkaXJ0eV9sZW4pXG4ge1xuIFx0bG9mZl90IGxlbmd0aCA9IGlvbWFwX2xlbmd0aChpdGVyKTtcbiBcdGludCByZXQ7XG5AQCAtMTgxNyw3ICYjNDM7MTgyMSw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0XHRibG9ja19jb21taXRfd3JpdGUoZm9saW8sIDAsIGxlbmd0aCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKTtcbi1cdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XG4gXHR9XG4gXG4gXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XG5AQCAtMTgzMiw2ICYjNDM7MTgzNiw3IEBAIHZtX2ZhdWx0X3QgaW9tYXBfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4gXHRcdC5wcml2YXRlXHQ9IHByaXZhdGUsXG4gXHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdHNpemVfdCBkaXJ0eV9vZmYsIGRpcnR5X2xlbjtcbiBcdHNzaXplX3QgcmV0O1xuIFxuIFx0Zm9saW9fbG9jayhmb2xpbyk7XG5AQCAtMTg0MCw4ICYjNDM7MTg0NSwyMiBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRpdGVyLnBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XG4gXHRpdGVyLmxlbiA9IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCbG9ja3MgYXJlIHN0aWxsIGFsbG9jYXRlZCBmb3IgdGhlIHdob2xlIGZvbGlvLCBidXQgb25seSB0aGUgcGFnZVxuJiM0MztcdCAqIHRoZSBmYXVsdCB3YXMgZm9yIGhhcyBiZWVuIHdyaXR0ZW4sIHNvIHRoYXQgaXMgYWxsIHRoYXQgaGFzIHRvIGJlXG4mIzQzO1x0ICogd3JpdHRlbiBiYWNrLiAgQSByYWNpbmcgdHJ1bmNhdGUgY2FuIGxlYXZlIHRoYXQgcGFnZSBiZXlvbmQgaV9zaXplLFxuJiM0MztcdCAqIGFuZCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlydHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGlydHlfb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cdTAwM2VwYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiYjNDM7XHRpZiAoZGlydHlfb2ZmIFx1MDAzYyByZXQpXG4mIzQzO1x0XHRkaXJ0eV9sZW4gPSBtaW5fdChzaXplX3QsIFBBR0VfU0laRSwgcmV0IC0gZGlydHlfb2ZmKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkaXJ0eV9sZW4gPSAwO1xuJiM0MztcbiBcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpdGVyLCBvcHMpKSBcdTAwM2UgMClcbi1cdFx0aXRlci5zdGF0dXMgPSBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoXHUwMDI2aXRlciwgZm9saW8pO1xuJiM0MztcdFx0aXRlci5zdGF0dXMgPSBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoXHUwMDI2aXRlciwgZm9saW8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xuaW5kZXggNzRhNjA4OWFiYWRmOS4uNjAwZTdkZTJlNTk5YyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2FvcHMuY1xuQEAgLTg2Myw3ICYjNDM7ODYzLDcgQEAgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRfZm9saW9cdFx0PSB4ZnNfdm1fcmVhZF9mb2xpbyxcbiBcdC5yZWFkYWhlYWRcdFx0PSB4ZnNfdm1fcmVhZGFoZWFkLFxuIFx0LndyaXRlcGFnZXNcdFx0PSB4ZnNfdm1fd3JpdGVwYWdlcyxcbi1cdC5kaXJ0eV9mb2xpb1x0XHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuJiM0MztcdC5kaXJ0eV9mb2xpb19yYW5nZVx0PSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSxcbiBcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQuYm1hcFx0XHRcdD0geGZzX3ZtX2JtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCAwNzJkOGNkMDlhMGIyLi4xZDk4YjZjMGI4ODA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC00MDYsNiAmIzQzOzQwNiw5IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMge1xuIFxuIFx0LyogTWFyayBhIGZvbGlvIGRpcnR5LiAgUmV0dXJuIHRydWUgaWYgdGhpcyBkaXJ0aWVkIGl0ICovXG4gXHRib29sICgqZGlydHlfZm9saW8pKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCBmb2xpbyAqKTtcbiYjNDM7XHQvKiBNYXJrIFtvZmYsIG9mZiAmIzQzOyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi9cbiYjNDM7XHRib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4gXG4gXHR2b2lkICgqcmVhZGFoZWFkKShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5pbmRleCBiYzdhZTYzMjdkYmY4Li4zY2YyYWM3NTE0MDljIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC00NDMsNiAmIzQzOzQ0Myw4IEBAIHN0cnVjdCBmb2xpbyAqaW9tYXBfZ2V0X2ZvbGlvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuKTtcbiBib29sIGlvbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcbiB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbik7XG4gYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcbiB2b2lkIGlvbWFwX2ZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gaW50IGlvbWFwX2ZpbGVfdW5zaGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLFxuIFx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA4N2ZlYWE1YTJiNzgwLi43NjI4MjYyYzE3ZTE0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zMzM3LDYgJiM0MzszMzM3LDcgQEAgc3RydWN0IGt2ZWM7XG4gc3RydWN0IHBhZ2UgKmdldF9kdW1wX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKmxvY2tlZCk7XG4gXG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0Mztib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5X2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCBzZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9wYWdlX2RpcnR5X2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbmluZGV4IDhkYzA4NzFlNWYwMDEuLjZmYzBhNjAyMDI1MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbkBAIC05MjcsNiAmIzQzOzkyNyw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjbGVhbmVkIFBURXMuXG4gICovXG4gaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICopO1xuJiM0MztpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApO1xuIFxuIGludCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZixcbiBcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuQEAgLTk5MCw2ICYjNDM7OTkxLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiAjZW5kaWZcdC8qIENPTkZJR19NTVUgKi9cbiBcbiAjZW5kaWZcdC8qIF9MSU5VWF9STUFQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4ZGEwZjk0NTE0MWI0Li4yN2EwNTllMGMwMTZmIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMzc3OCwxMCAmIzQzOzM3NzgsMTkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbiYjNDM7XHRzaXplX3Qgb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cdTAwM2VwYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcdGJvb2wgZGlydGllZDtcbiBcdGJvb2wgcGFnZV9ta3dyaXRlID0gdm1hLVx1MDAzZXZtX29wcyBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VwYWdlX21rd3JpdGU7XG4gXG4tXHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIFBNRCBlbnRyeSBoYXMgb25lIGRpcnR5IGJpdCBmb3IgdGhlIHdob2xlIGZvbGlvLCBzbyB0aGVyZSBpcyBub1xuJiM0MztcdCAqIGZpbmVyIGluZm9ybWF0aW9uIHRvIHBhc3Mgb24uIEEgUFRFLW1hcHBlZCBmb2xpbyBvbmx5IGhhcyB0aGUgcGFnZVxuJiM0MztcdCAqIHRoZSBmYXVsdCB3YXMgZm9yIGRpcnRpZWQgc28gZmFyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRwX2dldF9sb2NrbGVzcyh2bWYtXHUwMDNlcG1kKSkpXG4mIzQzO1x0XHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIG9mZiwgUEFHRV9TSVpFKTtcbiBcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogVGFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3Nfc3BhY2UgLSBmb2xpby5tYXBwaW5nIG1heSBiZSB6ZXJvZWRcbkBAIC01NjI1LDYgJiM0Mzs1NjM0LDMxIEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXG4gfVxuICNlbmRpZlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNYXkgdGhlIHdob2xlIGJhdGNoIGJlIG1hcmtlZCBkaXJ0eT9cbiYjNDM7ICpcbiYjNDM7ICogT25seSBhIHNoYXJlZCBtYXBwaW5nIG9mIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXIgYmxvY2sgc2F5c1xuJiM0MzsgKiBuby4gVGhlcmUgdGhlIHBhZ2UgdGFibGUgZGlydHkgYml0cyBhcmUgdGhlIG9ubHkgcmVjb3JkIG9mIHdoaWNoIHBhcnRzIG9mIGFcbiYjNDM7ICogbGFyZ2UgZm9saW8gd2VyZSB3cml0dGVuIHRocm91Z2ggdGhlIG1hcHBpbmcsIHNvIHBhZ2VzIG5vYm9keSBoYXMgc3RvcmVkIHRvXG4mIzQzOyAqIGhhdmUgdG8gc3RheSBjbGVhbiBhbmQgbGV0IHRoZSBoYXJkd2FyZSBzZXQgdGhlIGJpdCBvbiB0aGUgZmlyc3Qgc3RvcmUuXG4mIzQzOyAqXG4mIzQzOyAqIEV2ZXJ5d2hlcmUgZWxzZSBub3RoaW5nIGV2ZXIgcmVhZHMgdGhvc2UgYml0cywgYW5kIG9uIGhhcmR3YXJlIHdpdGhvdXQgYVxuJiM0MzsgKiBkaXJ0eSBiaXQgbGVhdmluZyB0aGVtIGNsZWFuIGNvc3RzIGEgZmF1bHQgcGVyIHBhZ2UgZm9yIG5vdGhpbmcuIFRoYXQgY292ZXJzXG4mIzQzOyAqIHNobWVtLCB3aGljaCBoYXMgbm8gZGlydHkgc3RhdGUgYmVsb3cgdGhlIGZvbGlvLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsXG4mIzQzO1x0XHRcdFx0ICBib29sIHByZWZhdWx0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuJiM0MztcbiYjNDM7XHRpZiAoISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpIHx8IHByZWZhdWx0IHx8IG5yID09IDEpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICF2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2U7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2V0X3B0ZV9yYW5nZSAtIFNldCBhIHJhbmdlIG9mIFBURXMgdG8gcG9pbnQgdG8gcGFnZXMgaW4gYSBmb2xpby5cbiAgKiBAdm1mOiBGYXVsdCBkZXNjcmlwdGlvbi5cbkBAIC01NjM5LDYgJiM0Mzs1NjczLDcgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuIFx0Ym9vbCB3cml0ZSA9IHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURTtcbiBcdGJvb2wgcHJlZmF1bHQgPSAhaW5fcmFuZ2Uodm1mLVx1MDAzZWFkZHJlc3MsIGFkZHIsIG5yICogUEFHRV9TSVpFKTtcbiYjNDM7XHRib29sIGRpcnR5X2JhdGNoID0gY2FuX2RpcnR5X3dob2xlX2JhdGNoKHZtZiwgbnIsIHByZWZhdWx0KTtcbiBcdHB0ZV90IGVudHJ5O1xuIFxuIFx0Zmx1c2hfaWNhY2hlX3BhZ2VzKHZtYSwgcGFnZSwgbnIpO1xuQEAgLTU2NDksMTAgJiM0Mzs1Njg0LDEzIEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGVsc2VcbiBcdFx0ZW50cnkgPSBwdGVfc3dfbWt5b3VuZyhlbnRyeSk7XG4gXG4tXHRpZiAod3JpdGUpXG4tXHRcdGVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7XG4tXHRlbHNlIGlmIChwdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbiYjNDM7XHRpZiAod3JpdGUpIHtcbiYjNDM7XHRcdGlmIChkaXJ0eV9iYXRjaClcbiYjNDM7XHRcdFx0ZW50cnkgPSBwdGVfbWtkaXJ0eShlbnRyeSk7XG4mIzQzO1x0XHRlbnRyeSA9IG1heWJlX21rd3JpdGUoZW50cnksIHZtYSk7XG4mIzQzO1x0fSBlbHNlIGlmIChwdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xuIFx0XHRlbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTtcbiYjNDM7XHR9XG4gXHRpZiAodW5saWtlbHkodm1mX29yaWdfcHRlX3VmZmRfd3Aodm1mKSkpXG4gXHRcdGVudHJ5ID0gcHRlX21rdWZmZChlbnRyeSk7XG4gXHQvKiBjb3B5LW9uLXdyaXRlIHBhZ2UgKi9cbkBAIC01NjY1LDYgJiM0Mzs1NzAzLDE4IEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdH1cbiBcdHNldF9wdGVzKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgdm1mLVx1MDAzZXB0ZSwgZW50cnksIG5yKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBwYWdlIHRoZSBmYXVsdCB3YXMgZm9yIGlzIGFib3V0IHRvIGJlIHN0b3JlZCB0bywgc28gZGlydHkgaXRcbiYjNDM7XHQgKiBoZXJlIHJhdGhlciB0aGFuIGxlYXZlIHRoZSBzdG9yZSB0byBhIHNlY29uZCBwYWdlIHRhYmxlIHdhbGssIG9yIHRvXG4mIzQzO1x0ICogYSBzZWNvbmQgZmF1bHQgd2hlcmUgdGhlIGRpcnR5IGJpdCBpcyBtYWludGFpbmVkIGluIHNvZnR3YXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGlydHlfYmF0Y2gpIHtcbiYjNDM7XHRcdHB0ZV90ICpwdGVwID0gdm1mLVx1MDAzZXB0ZSAmIzQzOyAoKHZtZi1cdTAwM2VhZGRyZXNzIC0gYWRkcikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdHB0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBwdGVwLFxuJiM0MztcdFx0XHRcdCAgICAgIHB0ZV9ta2RpcnR5KHB0ZXBfZ2V0KHB0ZXApKSwgMSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbiYjMzk7dCBiZSBjYWNoZWQgKi9cbiBcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uodm1mLCB2bWEsIGFkZHIsIHZtZi1cdTAwM2VwdGUsIG5yKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmNcbmluZGV4IDZjOWM3YmE4OWI4YTkuLjM5YjU0YzI1YTlmYWIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlLXdyaXRlYmFjay5jXG5AQCAtMjc1MSw2ICYjNDM7Mjc1MSwyMSBAQCBib29sIGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbiB9XG4gRVhQT1JUX1NZTUJPTChmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2UpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBIYW5kIGEgZGlydGllZCByYW5nZSBvZiBAZm9saW8gdG8gdGhlIGZpbGVzeXN0ZW0uICAtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UoKSBjYW5cbiYjNDM7ICogZXhwcmVzcyBldmVyeXRoaW5nIC1cdTAwM2VkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdFxuJiM0MzsgKiBkb2VzIG5vdCBuZWVkIGJvdGgsIGFuZCBhIHdob2xlLWZvbGlvIGRpcnR5IGNvbWVzIHRocm91Z2ggaGVyZSBhcyBhIHJhbmdlXG4mIzQzOyAqIGNvdmVyaW5nIHRoZSBmb2xpby5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1hcHBpbmdfZGlydHlfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGlmICghbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSlcbiYjNDM7XHRcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBmb2xpb19tYXJrX2RpcnR5IC0gTWFyayBhIGZvbGlvIGFzIGJlaW5nIG1vZGlmaWVkLlxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuQEAgLTI3ODIsMTMgJiM0MzsyNzk3LDM5IEBAIGJvb2wgZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG4gXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4tXHRcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbiYjNDM7XHRcdHJldHVybiBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgZm9saW9fc2l6ZShmb2xpbykpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIG5vb3BfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGZvbGlvX21hcmtfZGlydHkpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZm9saW9fbWFya19kaXJ0eV9yYW5nZSAtIE1hcmsgcGFydCBvZiBhIGZvbGlvIGFzIGJlaW5nIG1vZGlmaWVkLlxuJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpby5cbiYjNDM7ICogQG9mZjogT2Zmc2V0IG9mIHRoZSBtb2RpZmllZCByYW5nZSB3aXRoaW4gdGhlIGZvbGlvLlxuJiM0MzsgKiBAbGVuOiBMZW5ndGggb2YgdGhlIG1vZGlmaWVkIHJhbmdlLlxuJiM0MzsgKlxuJiM0MzsgKiBMaWtlIGZvbGlvX21hcmtfZGlydHkoKSwgYnV0IHRlbGxzIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXJcbiYjNDM7ICogYmxvY2sgdGhhdCBvbmx5IFtAb2ZmLCBAb2ZmICYjNDM7IEBsZW4pIGNoYW5nZWQsIHNvIHdyaXRlYmFjayBjYW4gc2tpcCB0aGUgcmVzdFxuJiM0MzsgKiBvZiB0aGUgZm9saW8uICBGaWxlc3lzdGVtcyB3aXRob3V0IHRoYXQgdHJhY2tpbmcgZGlydHkgdGhlIHdob2xlIGZvbGlvLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRydWUgaWYgdGhlIGZvbGlvIHdhcyBuZXdseSBkaXJ0aWVkLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBkaXJ0eS5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseShtYXBwaW5nKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG4mIzQzO1x0XHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuJiM0MztcdFx0cmV0dXJuIG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIGZvbGlvX21hcmtfZGlydHkoKSBpcyByYWN5IGlmIHRoZSBjYWxsZXIgaGFzIG5vIHJlZmVyZW5jZSBhZ2FpbnN0XG4gICogZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LCBhbmQgaWYgdGhlIGZvbGlvIGlzIHVubG9ja2VkLiAgVGhpcyBpcyBiZWNhdXNlIGFub3RoZXJcbkBAIC0yODQ0LDYgJiM0MzsyODg1LDQxIEBAIHZvaWQgX19mb2xpb19jYW5jZWxfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2NhbmNlbF9kaXJ0eSk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFdyaXRlLXByb3RlY3QgZXZlcnkgbWFwcGluZyBvZiBAZm9saW8gYW5kIGhhbmQgdGhlIGZpbGVzeXN0ZW0gdGhlIHBhcnRzIHRoYXRcbiYjNDM7ICogd2VyZSBkaXJ0eSBpbiBhIHBhZ2UgdGFibGUuXG4mIzQzOyAqXG4mIzQzOyAqIFdpdGhvdXQgLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgdGhlcmUgaXMgbm93aGVyZSB0byBwdXQgcGVyLWJsb2NrIHN0YXRlLCBzb1xuJiM0MzsgKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90XG4mIzQzOyAqIGFscmVhZHkgZGlydHksIGJlY2F1c2UgdGhlbiB0aGUgZGlydHkgdHJhbnNpdGlvbiBuZWVkcyB0aGUgZnVsbCBhY2NvdW50aW5nXG4mIzQzOyAqIGluIGZvbGlvX21hcmtfZGlydHkoKSwgYW5kIGZvciBhIGZvbGlvIHRvbyBsYXJnZSBmb3IgdGhlIGJpdG1hcCwgd2hpY2ggdGhlXG4mIzQzOyAqIHBhZ2UgY2FjaGUgZG9lcyBub3QgbWFrZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGZvbGlvX21rY2xlYW5fZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0REVDTEFSRV9CSVRNQVAobWFwLCAxVUwgXHUwMDNjXHUwMDNjIE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuJiM0MztcdHVuc2lnbmVkIGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxuJiM0MztcdCAgICBXQVJOX09OX09OQ0UobnIgXHUwMDNlICgxVUwgXHUwMDNjXHUwMDNjIE1BWF9QQUdFQ0FDSEVfT1JERVIpKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKVxuJiM0MztcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJpdG1hcF96ZXJvKG1hcCwgbnIpO1xuJiM0MztcdGlmICghZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChmb2xpbywgbWFwKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdHJhbmdlKHN0YXJ0LCBlbmQsIG1hcCwgbnIpIHtcbiYjNDM7XHRcdG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sXG4mIzQzO1x0XHRcdFx0ICAgIChzaXplX3Qpc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0ICAgIChzaXplX3QpKGVuZCAtIHN0YXJ0KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ2xlYXIgYSBmb2xpbyYjMzk7cyBkaXJ0eSBmbGFnLCB3aGlsZSBjYXJpbmcgZm9yIGRpcnR5IG1lbW9yeSBhY2NvdW50aW5nLlxuICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9saW8gd2FzIHByZXZpb3VzbHkgZGlydHkuXG5AQCAtMjg3NSw5ICYjNDM7Mjk1MSw5IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqXG4gXHRcdCAqIFdlIHVzZSB0aGlzIHNlcXVlbmNlIHRvIG1ha2Ugc3VyZSB0aGF0XG4gXHRcdCAqICAoYSkgd2UgYWNjb3VudCBmb3IgZGlydHkgc3RhdHMgcHJvcGVybHlcbi1cdFx0ICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB0b1xuLVx0XHQgKiAgICAgIG1hcmsgdGhlIHdob2xlIGZvbGlvIGRpcnR5IGlmIGl0IHdhc1xuLVx0XHQgKiAgICAgIGRpcnR5IGluIGEgcGFnZXRhYmxlLiBPbmx5IHRvIHRoZW5cbiYjNDM7XHRcdCAqICAoYikgd2UgdGVsbCB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gd2hpY2hcbiYjNDM7XHRcdCAqICAgICAgcGFydHMgb2YgdGhlIGZvbGlvIHdlcmUgZGlydHkgaW4gYVxuJiM0MztcdFx0ICogICAgICBwYWdldGFibGUuIE9ubHkgdG8gdGhlblxuIFx0XHQgKiAgKGMpIGNsZWFuIHRoZSBmb2xpbyBhZ2FpbiBhbmQgcmV0dXJuIDEgdG9cbiBcdFx0ICogICAgICBjYXVzZSB0aGUgd3JpdGViYWNrLlxuIFx0XHQgKlxuQEAgLTI4OTUsOCAmIzQzOzI5NzEsNyBAQCBib29sIGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHQgKiBhcyBhIHNlcmlhbGl6YXRpb24gcG9pbnQgZm9yIGFsbCB0aGUgZGlmZmVyZW50XG4gXHRcdCAqIHRocmVhZHMgZG9pbmcgdGhlaXIgdGhpbmdzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKVxuLVx0XHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fbWtjbGVhbl9mb3JfaW8oZm9saW8sIG1hcHBpbmcpO1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBjYXJlZnVsbHkgc3luY2hyb25pc2UgZmF1bHQgaGFuZGxlcnMgYWdhaW5zdFxuIFx0XHQgKiBpbnN0YWxsaW5nIGEgZGlydHkgcHRlIGFuZCBtYXJraW5nIHRoZSBmb2xpbyBkaXJ0eVxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWY3MmQyNzliYTY4Zi4uYWFmNDVhYzc5ZmE4NCAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jXG5AQCAtMTEwMCwxMiAmIzQzOzExMDAsMTggQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbiBcdHJldHVybiByd2MuY29udGVuZGVkID8gLTEgOiBwcmEucmVmZXJlbmNlZDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4mIzQzO3N0cnVjdCBta2NsZWFuX3N0YXRlIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXA7XG4mIzQzO1x0aW50IGNsZWFuZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApXG4ge1xuLVx0aW50IGNsZWFuZWQgPSAwO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVx1MDAzZXZtYTtcbi1cdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBwdm13LVx1MDAzZWFkZHJlc3M7XG4mIzQzO1x0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiYjNDM7XHRpbnQgY2xlYW5lZCA9IDA7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uIE5vdGUgdGhhdFxuQEAgLTExMzQsNiAmIzQzOzExNDAsMTUgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4gXHRcdFx0aWYgKCFwdGVfZGlydHkoZW50cnkpIFx1MDAyNlx1MDAyNiAhcHRlX3dyaXRlKGVudHJ5KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0XHRpZiAoZGlydHlfbWFwIFx1MDAyNlx1MDAyNiBwdGVfZGlydHkoZW50cnkpKSB7XG4mIzQzO1x0XHRcdFx0cGdvZmZfdCBpZHggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpIC1cbiYjNDM7XHRcdFx0XHRcdCAgICAgIHB2bXctXHUwMDNlcGdvZmY7XG4mIzQzO1xuJiM0MztcdFx0XHRcdC8qIFRoZSB3YWxrIG9ubHkgdmlzaXRzIHBhZ2VzIG9mIHRoaXMgZm9saW8gKi9cbiYjNDM7XHRcdFx0XHRWTV9XQVJOX09OX09OQ0UoaWR4IFx1MDAzZT0gcHZtdy1cdTAwM2Vucl9wYWdlcyk7XG4mIzQzO1x0XHRcdFx0X19zZXRfYml0KGlkeCwgZGlydHlfbWFwKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiBcdFx0XHRmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcywgcHRlX3BmbihlbnRyeSkpO1xuIFx0XHRcdGVudHJ5ID0gcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHB0ZSk7XG4gXHRcdFx0ZW50cnkgPSBwdGVfd3Jwcm90ZWN0KGVudHJ5KTtcbkBAIC0xMTU1LDYgJiM0MzsxMTcwLDkgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4gXHRcdFx0aWYgKCFwbWRfZGlydHkoZW50cnkpIFx1MDAyNlx1MDAyNiAhcG1kX3dyaXRlKGVudHJ5KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0XHRpZiAoZGlydHlfbWFwIFx1MDAyNlx1MDAyNiBwbWRfZGlydHkoZW50cnkpKVxuJiM0MztcdFx0XHRcdGJpdG1hcF9zZXQoZGlydHlfbWFwLCAwLCBwdm13LVx1MDAzZW5yX3BhZ2VzKTtcbiYjNDM7XG4gXHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLFxuIFx0XHRcdFx0XHQgIGFkZHJlc3MgJiM0MzsgSFBBR0VfUE1EX1NJWkUpO1xuIFx0XHRcdGVudHJ5ID0gcG1kcF9pbnZhbGlkYXRlKHZtYSwgYWRkcmVzcywgcG1kKTtcbkBAIC0xMTgxLDkgJiM0MzsxMTk5LDkgQEAgc3RhdGljIGJvb2wgcGFnZV9ta2NsZWFuX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxuIHtcbiBcdERFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCBQVk1XX1NZTkMpO1xuLVx0aW50ICpjbGVhbmVkID0gYXJnO1xuJiM0MztcdHN0cnVjdCBta2NsZWFuX3N0YXRlICpzdGF0ZSA9IGFyZztcbiBcbi1cdCpjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13KTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13LCBzdGF0ZS1cdTAwM2VkaXJ0eV9tYXApO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTExOTYsMTIgJiM0MzsxMjE0LDIzIEBAIHN0YXRpYyBib29sIGludmFsaWRfbWtjbGVhbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1pbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MzsvKipcbiYjNDM7ICogZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCAtIFdyaXRlLXByb3RlY3QgYSBmb2xpbyBhbmQgcmVwb3J0IHdoYXQgd2FzIGRpcnR5LlxuJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0byBjbGVhbi5cbiYjNDM7ICogQGRpcnR5X21hcDogQml0bWFwIG9mIGF0IGxlYXN0IGZvbGlvX25yX3BhZ2VzKEBmb2xpbykgYml0cywgb3IgTlVMTC5cbiYjNDM7ICpcbiYjNDM7ICogV3JpdGUtcHJvdGVjdHMgYW5kIGNsZWFucyBldmVyeSBtYXBwaW5nIG9mIEBmb2xpby4gIFdpdGggQGRpcnR5X21hcCwgc2V0cyBhXG4mIzQzOyAqIGJpdCBmb3IgZWFjaCBwYWdlIHdob3NlIGVudHJ5IHdhcyBkaXJ0eTsgYSBQTUQtbWFwcGVkIGZvbGlvIGhhcyBvbmUgZGlydHlcbiYjNDM7ICogYml0IGZvciBhbGwgb2YgaXQsIHNvIGV2ZXJ5IHBhZ2UgaXMgcmVwb3J0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIG51bWJlciBvZiBwYWdlIHRhYmxlIGVudHJpZXMgY2xlYW5lZC5cbiYjNDM7ICovXG4mIzQzO2ludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcClcbiB7XG4tXHRpbnQgY2xlYW5lZCA9IDA7XG4mIzQzO1x0c3RydWN0IG1rY2xlYW5fc3RhdGUgc3RhdGUgPSB7IC5kaXJ0eV9tYXAgPSBkaXJ0eV9tYXAgfTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuIFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbi1cdFx0LmFyZyA9ICh2b2lkICopXHUwMDI2Y2xlYW5lZCxcbiYjNDM7XHRcdC5hcmcgPSAodm9pZCAqKVx1MDAyNnN0YXRlLFxuIFx0XHQucm1hcF9vbmUgPSBwYWdlX21rY2xlYW5fb25lLFxuIFx0XHQuaW52YWxpZF92bWEgPSBpbnZhbGlkX21rY2xlYW5fdm1hLFxuIFx0fTtcbkBAIC0xMjE3LDcgJiM0MzsxMjQ2LDEyIEBAIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4gXG4tXHRyZXR1cm4gY2xlYW5lZDtcbiYjNDM7XHRyZXR1cm4gc3RhdGUuY2xlYW5lZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBOVUxMKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fbWtjbGVhbik7XG4gXG5AQCAtMTI0MSw3ICYjNDM7MTI3NSw3IEBAIHN0YXRpYyBib29sIG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHQuZmxhZ3NcdFx0PSBQVk1XX1NZTkMsXG4gXHR9O1xuIFxuLVx0c3RhdGUtXHUwMDNlY2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4mIzQzO1x0c3RhdGUtXHUwMDNlY2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdywgTlVMTCk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTMyNCw3ICYjNDM7MTM1OCw3IEBAIGludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcbiBcdHB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcbiBcdFZNX0JVR19PTl9WTUEocHZtdy5hZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XG4gXG4tXHRyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4mIzQzO1x0cmV0dXJuIHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2ZvbGlvX21vZF9zdGF0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuciwgaW50IG5yX3BtZG1hcHBlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSYjMzQ7LAogICAgJiMzNDtpb21hcF9wYWdlX21rd3JpdGUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWFya19kaXJ0eV9yYW5nZSYjMzQ7LAogICAgJiMzNDtmb2xpb19ta2NsZWFuX2RpcnR5bWFwJiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdWItZm9saW8gcmFuZ2UgZGlydHlpbmcgdmlhIC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSwgZm9saW9fbWFya19kaXJ0eV9yYW5nZSgpLCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKCksIGFuZCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSgpIGZvciBYRlMvaW9tYXAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gZGlydHkgZm9saW8gdHJhY2tpbmcsIHdyaXRlLXByb3RlY3QvY2xlYW4gdHJhbnNpdGlvbnMgaW4gd3JpdGViYWNrIChmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8pLCBybWFwIFBURS9QTUQgZGlydHkgd2FsaywgYW5kIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncy4gVGhlc2UgcmVhY2hhYmxlIE1NIGFuZCBmaWxlc3lzdGVtIHBhdGhzIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1MTliNDYxYzliM2ZkZWNhYTg4MGUwYzkzYjRkYTk5Nzc1MWMxYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA0OjAyOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKaW5kZXggMGE1ZWJmZGE5MGYxMi4uOGQ4YThhY2FiMDFhYyAxMDA2NDQKLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCkBAIC04NDcsMTUgJiM0Mzs4NDcsMTkgQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTsKIAotYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mztib29sIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc2l6ZV90IG9mZiwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKLQlzaXplX3QgbGVuID0gZm9saW9fc2l6ZShmb2xpbyk7Ci0KLQlpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTsKLQlpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIDAsIGxlbik7CiYjNDM7CWlmc19hbGxvYyhtYXBwaW5nLSZndDtob3N0LCBmb2xpbywgMCk7CiYjNDM7CWlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgb2ZmLCBsZW4pOwogCXJldHVybiBmaWxlbWFwX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7CiYjNDM7CiYjNDM7Ym9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgMCwgZm9saW9fc2l6ZShmb2xpbykpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2RpcnR5X2ZvbGlvKTsKIAogc3RhdGljIHZvaWQKQEAgLTE4MDQsNyAmIzQzOzE4MDgsNyBAQCBpb21hcF90cnVuY2F0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGJvb2wgKmRpZF96ZXJvLAogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfdHJ1bmNhdGVfcGFnZSk7CiAKIHN0YXRpYyBpbnQgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGRpcnR5X29mZiwgc2l6ZV90IGRpcnR5X2xlbikKIHsKIAlsb2ZmX3QgbGVuZ3RoID0gaW9tYXBfbGVuZ3RoKGl0ZXIpOwogCWludCByZXQ7CkBAIC0xODE3LDcgJiM0MzsxODIxLDcgQEAgc3RhdGljIGludCBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsCiAJCWJsb2NrX2NvbW1pdF93cml0ZShmb2xpbywgMCwgbGVuZ3RoKTsKIAl9IGVsc2UgewogCQlXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKTsKLQkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiYjNDM7CQlmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7CiAJfQogCiAJcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpOwpAQCAtMTgzMiw2ICYjNDM7MTgzNiw3IEBAIHZtX2ZhdWx0X3QgaW9tYXBfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsCiAJCS5wcml2YXRlCT0gcHJpdmF0ZSwKIAl9OwogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi0mZ3Q7cGFnZSk7CiYjNDM7CXNpemVfdCBkaXJ0eV9vZmYsIGRpcnR5X2xlbjsKIAlzc2l6ZV90IHJldDsKIAogCWZvbGlvX2xvY2soZm9saW8pOwpAQCAtMTg0MCw4ICYjNDM7MTg0NSwyMiBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLAogCQlnb3RvIG91dF91bmxvY2s7CiAJaXRlci5wb3MgPSBmb2xpb19wb3MoZm9saW8pOwogCWl0ZXIubGVuID0gcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCbG9ja3MgYXJlIHN0aWxsIGFsbG9jYXRlZCBmb3IgdGhlIHdob2xlIGZvbGlvLCBidXQgb25seSB0aGUgcGFnZQomIzQzOwkgKiB0aGUgZmF1bHQgd2FzIGZvciBoYXMgYmVlbiB3cml0dGVuLCBzbyB0aGF0IGlzIGFsbCB0aGF0IGhhcyB0byBiZQomIzQzOwkgKiB3cml0dGVuIGJhY2suICBBIHJhY2luZyB0cnVuY2F0ZSBjYW4gbGVhdmUgdGhhdCBwYWdlIGJleW9uZCBpX3NpemUsCiYjNDM7CSAqIGFuZCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlydHkuCiYjNDM7CSAqLwomIzQzOwlkaXJ0eV9vZmYgPSBmb2xpb19wYWdlX2lkeChmb2xpbywgdm1mLSZndDtwYWdlKSAmbHQ7Jmx0OyBQQUdFX1NISUZUOwomIzQzOwlpZiAoZGlydHlfb2ZmICZsdDsgcmV0KQomIzQzOwkJZGlydHlfbGVuID0gbWluX3Qoc2l6ZV90LCBQQUdFX1NJWkUsIHJldCAtIGRpcnR5X29mZik7CiYjNDM7CWVsc2UKJiM0MzsJCWRpcnR5X2xlbiA9IDA7CiYjNDM7CiAJd2hpbGUgKChyZXQgPSBpb21hcF9pdGVyKCZhbXA7aXRlciwgb3BzKSkgJmd0OyAwKQotCQlpdGVyLnN0YXR1cyA9IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcigmYW1wO2l0ZXIsIGZvbGlvKTsKJiM0MzsJCWl0ZXIuc3RhdHVzID0gaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKCZhbXA7aXRlciwgZm9saW8sCiYjNDM7CQkJCQkJICAgICAgIGRpcnR5X29mZiwgZGlydHlfbGVuKTsKIAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jCmluZGV4IDc0YTYwODlhYmFkZjkuLjYwMGU3ZGUyZTU5OWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYW9wcy5jCkBAIC04NjMsNyAmIzQzOzg2Myw3IEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgeGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyA9IHsKIAkucmVhZF9mb2xpbwkJPSB4ZnNfdm1fcmVhZF9mb2xpbywKIAkucmVhZGFoZWFkCQk9IHhmc192bV9yZWFkYWhlYWQsCiAJLndyaXRlcGFnZXMJCT0geGZzX3ZtX3dyaXRlcGFnZXMsCi0JLmRpcnR5X2ZvbGlvCQk9IGlvbWFwX2RpcnR5X2ZvbGlvLAomIzQzOwkuZGlydHlfZm9saW9fcmFuZ2UJPSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSwKIAkucmVsZWFzZV9mb2xpbwkJPSBpb21hcF9yZWxlYXNlX2ZvbGlvLAogCS5pbnZhbGlkYXRlX2ZvbGlvCT0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbywKIAkuYm1hcAkJCT0geGZzX3ZtX2JtYXAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggMDcyZDhjZDA5YTBiMi4uMWQ5OGI2YzBiODgwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNDA2LDYgJiM0Mzs0MDYsOSBAQCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHsKIAogCS8qIE1hcmsgYSBmb2xpbyBkaXJ0eS4gIFJldHVybiB0cnVlIGlmIHRoaXMgZGlydGllZCBpdCAqLwogCWJvb2wgKCpkaXJ0eV9mb2xpbykoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGZvbGlvICopOwomIzQzOwkvKiBNYXJrIFtvZmYsIG9mZiAmIzQzOyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi8KJiM0MzsJYm9vbCAoKmRpcnR5X2ZvbGlvX3JhbmdlKShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkJICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTsKIAogCXZvaWQgKCpyZWFkYWhlYWQpKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IGJjN2FlNjMyN2RiZjguLjNjZjJhYzc1MTQwOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTQ0Myw2ICYjNDM7NDQzLDggQEAgc3RydWN0IGZvbGlvICppb21hcF9nZXRfZm9saW8oc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4pOwogYm9vbCBpb21hcF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9mbGFncyk7CiB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbik7CiBib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mztib29sIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7CiB2b2lkIGlvbWFwX2ZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQgaW9tYXBfZmlsZV91bnNoYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sCiAJCWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA4N2ZlYWE1YTJiNzgwLi43NjI4MjYyYzE3ZTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zMzM3LDYgJiM0MzszMzM3LDcgQEAgc3RydWN0IGt2ZWM7CiBzdHJ1Y3QgcGFnZSAqZ2V0X2R1bXBfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCAqbG9ja2VkKTsKIAogYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTsKIGJvb2wgZm9saW9fbWFya19kaXJ0eV9sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCBzZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgc2V0X3BhZ2VfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oCmluZGV4IDhkYzA4NzFlNWYwMDEuLjZmYzBhNjAyMDI1MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC05MjcsNiAmIzQzOzkyNyw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNsZWFuZWQgUFRFcy4KICAqLwogaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICopOwomIzQzO2ludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcCk7CiAKIGludCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZiwKIAkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwpAQCAtOTkwLDYgJiM0Mzs5OTEsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJCSB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAjZW5kaWYJLyogQ09ORklHX01NVSAqLwogCiAjZW5kaWYJLyogX0xJTlVYX1JNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA4ZGEwZjk0NTE0MWI0Li4yN2EwNTllMGMwMTZmIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMzc3OCwxMCAmIzQzOzM3NzgsMTkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtJmd0O3ZtYTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyh2bWYtJmd0O3BhZ2UpOwomIzQzOwlzaXplX3Qgb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi0mZ3Q7cGFnZSkgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAlib29sIGRpcnRpZWQ7CiAJYm9vbCBwYWdlX21rd3JpdGUgPSB2bWEtJmd0O3ZtX29wcyAmYW1wOyZhbXA7IHZtYS0mZ3Q7dm1fb3BzLSZndDtwYWdlX21rd3JpdGU7CiAKLQlkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgUE1EIGVudHJ5IGhhcyBvbmUgZGlydHkgYml0IGZvciB0aGUgd2hvbGUgZm9saW8sIHNvIHRoZXJlIGlzIG5vCiYjNDM7CSAqIGZpbmVyIGluZm9ybWF0aW9uIHRvIHBhc3Mgb24uIEEgUFRFLW1hcHBlZCBmb2xpbyBvbmx5IGhhcyB0aGUgcGFnZQomIzQzOwkgKiB0aGUgZmF1bHQgd2FzIGZvciBkaXJ0aWVkIHNvIGZhci4KJiM0MzsJICovCiYjNDM7CWlmIChwbWRfdHJhbnNfaHVnZShwbWRwX2dldF9sb2NrbGVzcyh2bWYtJmd0O3BtZCkpKQomIzQzOwkJZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwllbHNlCiYjNDM7CQlkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eV9yYW5nZShmb2xpbywgb2ZmLCBQQUdFX1NJWkUpOwogCVZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7CiAJLyoKIAkgKiBUYWtlIGEgbG9jYWwgY29weSBvZiB0aGUgYWRkcmVzc19zcGFjZSAtIGZvbGlvLm1hcHBpbmcgbWF5IGJlIHplcm9lZApAQCAtNTYyNSw2ICYjNDM7NTYzNCwzMSBAQCB2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYQogfQogI2VuZGlmCiAKJiM0MzsvKgomIzQzOyAqIE1heSB0aGUgd2hvbGUgYmF0Y2ggYmUgbWFya2VkIGRpcnR5PwomIzQzOyAqCiYjNDM7ICogT25seSBhIHNoYXJlZCBtYXBwaW5nIG9mIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXIgYmxvY2sgc2F5cwomIzQzOyAqIG5vLiBUaGVyZSB0aGUgcGFnZSB0YWJsZSBkaXJ0eSBiaXRzIGFyZSB0aGUgb25seSByZWNvcmQgb2Ygd2hpY2ggcGFydHMgb2YgYQomIzQzOyAqIGxhcmdlIGZvbGlvIHdlcmUgd3JpdHRlbiB0aHJvdWdoIHRoZSBtYXBwaW5nLCBzbyBwYWdlcyBub2JvZHkgaGFzIHN0b3JlZCB0bwomIzQzOyAqIGhhdmUgdG8gc3RheSBjbGVhbiBhbmQgbGV0IHRoZSBoYXJkd2FyZSBzZXQgdGhlIGJpdCBvbiB0aGUgZmlyc3Qgc3RvcmUuCiYjNDM7ICoKJiM0MzsgKiBFdmVyeXdoZXJlIGVsc2Ugbm90aGluZyBldmVyIHJlYWRzIHRob3NlIGJpdHMsIGFuZCBvbiBoYXJkd2FyZSB3aXRob3V0IGEKJiM0MzsgKiBkaXJ0eSBiaXQgbGVhdmluZyB0aGVtIGNsZWFuIGNvc3RzIGEgZmF1bHQgcGVyIHBhZ2UgZm9yIG5vdGhpbmcuIFRoYXQgY292ZXJzCiYjNDM7ICogc2htZW0sIHdoaWNoIGhhcyBubyBkaXJ0eSBzdGF0ZSBiZWxvdyB0aGUgZm9saW8uCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsCiYjNDM7CQkJCSAgYm9vbCBwcmVmYXVsdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLSZndDt2bWE7CiYjNDM7CiYjNDM7CWlmICghKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURSkgfHwgcHJlZmF1bHQgfHwgbnIgPT0gMSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1NIQVJFRCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuICF2bWEtJmd0O3ZtX2ZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvX3JhbmdlOwomIzQzO30KJiM0MzsKIC8qKgogICogc2V0X3B0ZV9yYW5nZSAtIFNldCBhIHJhbmdlIG9mIFBURXMgdG8gcG9pbnQgdG8gcGFnZXMgaW4gYSBmb2xpby4KICAqIEB2bWY6IEZhdWx0IGRlc2NyaXB0aW9uLgpAQCAtNTYzOSw2ICYjNDM7NTY3Myw3IEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0mZ3Q7dm1hOwogCWJvb2wgd3JpdGUgPSB2bWYtJmd0O2ZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfV1JJVEU7CiAJYm9vbCBwcmVmYXVsdCA9ICFpbl9yYW5nZSh2bWYtJmd0O2FkZHJlc3MsIGFkZHIsIG5yICogUEFHRV9TSVpFKTsKJiM0MzsJYm9vbCBkaXJ0eV9iYXRjaCA9IGNhbl9kaXJ0eV93aG9sZV9iYXRjaCh2bWYsIG5yLCBwcmVmYXVsdCk7CiAJcHRlX3QgZW50cnk7CiAKIAlmbHVzaF9pY2FjaGVfcGFnZXModm1hLCBwYWdlLCBucik7CkBAIC01NjQ5LDEwICYjNDM7NTY4NCwxMyBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZWxzZQogCQllbnRyeSA9IHB0ZV9zd19ta3lvdW5nKGVudHJ5KTsKIAotCWlmICh3cml0ZSkKLQkJZW50cnkgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTsKLQllbHNlIGlmIChwdGVfd3JpdGUoZW50cnkpICZhbXA7JmFtcDsgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpCiYjNDM7CWlmICh3cml0ZSkgewomIzQzOwkJaWYgKGRpcnR5X2JhdGNoKQomIzQzOwkJCWVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpOwomIzQzOwkJZW50cnkgPSBtYXliZV9ta3dyaXRlKGVudHJ5LCB2bWEpOwomIzQzOwl9IGVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkgewogCQllbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTsKJiM0MzsJfQogCWlmICh1bmxpa2VseSh2bWZfb3JpZ19wdGVfdWZmZF93cCh2bWYpKSkKIAkJZW50cnkgPSBwdGVfbWt1ZmZkKGVudHJ5KTsKIAkvKiBjb3B5LW9uLXdyaXRlIHBhZ2UgKi8KQEAgLTU2NjUsNiAmIzQzOzU3MDMsMTggQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCX0KIAlzZXRfcHRlcyh2bWEtJmd0O3ZtX21tLCBhZGRyLCB2bWYtJmd0O3B0ZSwgZW50cnksIG5yKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUgcGFnZSB0aGUgZmF1bHQgd2FzIGZvciBpcyBhYm91dCB0byBiZSBzdG9yZWQgdG8sIHNvIGRpcnR5IGl0CiYjNDM7CSAqIGhlcmUgcmF0aGVyIHRoYW4gbGVhdmUgdGhlIHN0b3JlIHRvIGEgc2Vjb25kIHBhZ2UgdGFibGUgd2Fsaywgb3IgdG8KJiM0MzsJICogYSBzZWNvbmQgZmF1bHQgd2hlcmUgdGhlIGRpcnR5IGJpdCBpcyBtYWludGFpbmVkIGluIHNvZnR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFkaXJ0eV9iYXRjaCkgewomIzQzOwkJcHRlX3QgKnB0ZXAgPSB2bWYtJmd0O3B0ZSAmIzQzOyAoKHZtZi0mZ3Q7YWRkcmVzcyAtIGFkZHIpICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwomIzQzOwkJcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgdm1mLSZndDthZGRyZXNzLCBwdGVwLAomIzQzOwkJCQkgICAgICBwdGVfbWtkaXJ0eShwdGVwX2dldChwdGVwKSksIDEpOwomIzQzOwl9CiYjNDM7CiAJLyogbm8gbmVlZCB0byBpbnZhbGlkYXRlOiBhIG5vdC1wcmVzZW50IHBhZ2Ugd29uJiMzOTt0IGJlIGNhY2hlZCAqLwogCXVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uodm1mLCB2bWEsIGFkZHIsIHZtZi0mZ3Q7cHRlLCBucik7CiB9CmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCA2YzljN2JhODliOGE5Li4zOWI1NGMyNWE5ZmFiIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTI3NTEsNiAmIzQzOzI3NTEsMjEgQEAgYm9vbCBmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCiB9CiBFWFBPUlRfU1lNQk9MKGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSk7CiAKJiM0MzsvKgomIzQzOyAqIEhhbmQgYSBkaXJ0aWVkIHJhbmdlIG9mIEBmb2xpbyB0byB0aGUgZmlsZXN5c3RlbS4gIC0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UoKSBjYW4KJiM0MzsgKiBleHByZXNzIGV2ZXJ5dGhpbmcgLSZndDtkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdAomIzQzOyAqIGRvZXMgbm90IG5lZWQgYm90aCwgYW5kIGEgd2hvbGUtZm9saW8gZGlydHkgY29tZXMgdGhyb3VnaCBoZXJlIGFzIGEgcmFuZ2UKJiM0MzsgKiBjb3ZlcmluZyB0aGUgZm9saW8uCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgbWFwcGluZ19kaXJ0eV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkJc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWlmICghbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvX3JhbmdlKQomIzQzOwkJcmV0dXJuIG1hcHBpbmctJmd0O2Ffb3BzLSZndDtkaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiYjNDM7CiYjNDM7CXJldHVybiBtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGZvbGlvX21hcmtfZGlydHkgLSBNYXJrIGEgZm9saW8gYXMgYmVpbmcgbW9kaWZpZWQuCiAgKiBAZm9saW86IFRoZSBmb2xpby4KQEAgLTI3ODIsMTMgJiM0MzsyNzk3LDM5IEBAIGJvb2wgZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpCiAJCQlmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTsKLQkJcmV0dXJuIG1hcHBpbmctJmd0O2Ffb3BzLSZndDtkaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiYjNDM7CQlyZXR1cm4gbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywgMCwKJiM0MzsJCQkJCSAgIGZvbGlvX3NpemUoZm9saW8pKTsKIAl9CiAKIAlyZXR1cm4gbm9vcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiB9CiBFWFBPUlRfU1lNQk9MKGZvbGlvX21hcmtfZGlydHkpOwogCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWFya19kaXJ0eV9yYW5nZSAtIE1hcmsgcGFydCBvZiBhIGZvbGlvIGFzIGJlaW5nIG1vZGlmaWVkLgomIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvLgomIzQzOyAqIEBvZmY6IE9mZnNldCBvZiB0aGUgbW9kaWZpZWQgcmFuZ2Ugd2l0aGluIHRoZSBmb2xpby4KJiM0MzsgKiBAbGVuOiBMZW5ndGggb2YgdGhlIG1vZGlmaWVkIHJhbmdlLgomIzQzOyAqCiYjNDM7ICogTGlrZSBmb2xpb19tYXJrX2RpcnR5KCksIGJ1dCB0ZWxscyBhIGZpbGVzeXN0ZW0gdGhhdCB0cmFja3MgZGlydHkgc3RhdGUgcGVyCiYjNDM7ICogYmxvY2sgdGhhdCBvbmx5IFtAb2ZmLCBAb2ZmICYjNDM7IEBsZW4pIGNoYW5nZWQsIHNvIHdyaXRlYmFjayBjYW4gc2tpcCB0aGUgcmVzdAomIzQzOyAqIG9mIHRoZSBmb2xpby4gIEZpbGVzeXN0ZW1zIHdpdGhvdXQgdGhhdCB0cmFja2luZyBkaXJ0eSB0aGUgd2hvbGUgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRydWUgaWYgdGhlIGZvbGlvIHdhcyBuZXdseSBkaXJ0aWVkLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBkaXJ0eS4KJiM0MzsgKi8KJiM0Mztib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChsaWtlbHkobWFwcGluZykpIHsKJiM0MzsJCWlmIChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKQomIzQzOwkJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwomIzQzOwkJcmV0dXJuIG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbm9vcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7CiYjNDM7fQomIzQzOwogLyoKICAqIGZvbGlvX21hcmtfZGlydHkoKSBpcyByYWN5IGlmIHRoZSBjYWxsZXIgaGFzIG5vIHJlZmVyZW5jZSBhZ2FpbnN0CiAgKiBmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdCwgYW5kIGlmIHRoZSBmb2xpbyBpcyB1bmxvY2tlZC4gIFRoaXMgaXMgYmVjYXVzZSBhbm90aGVyCkBAIC0yODQ0LDYgJiM0MzsyODg1LDQxIEBAIHZvaWQgX19mb2xpb19jYW5jZWxfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIEVYUE9SVF9TWU1CT0woX19mb2xpb19jYW5jZWxfZGlydHkpOwogCiYjNDM7LyoKJiM0MzsgKiBXcml0ZS1wcm90ZWN0IGV2ZXJ5IG1hcHBpbmcgb2YgQGZvbGlvIGFuZCBoYW5kIHRoZSBmaWxlc3lzdGVtIHRoZSBwYXJ0cyB0aGF0CiYjNDM7ICogd2VyZSBkaXJ0eSBpbiBhIHBhZ2UgdGFibGUuCiYjNDM7ICoKJiM0MzsgKiBXaXRob3V0IC0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UoKSB0aGVyZSBpcyBub3doZXJlIHRvIHB1dCBwZXItYmxvY2sgc3RhdGUsIHNvCiYjNDM7ICogYW55IFBURSBkaXJ0eSBiaXQgZGlydGllcyB0aGUgd2hvbGUgZm9saW8uICBTYW1lIHdoZW4gdGhlIGZvbGlvIGlzIG5vdAomIzQzOyAqIGFscmVhZHkgZGlydHksIGJlY2F1c2UgdGhlbiB0aGUgZGlydHkgdHJhbnNpdGlvbiBuZWVkcyB0aGUgZnVsbCBhY2NvdW50aW5nCiYjNDM7ICogaW4gZm9saW9fbWFya19kaXJ0eSgpLCBhbmQgZm9yIGEgZm9saW8gdG9vIGxhcmdlIGZvciB0aGUgYml0bWFwLCB3aGljaCB0aGUKJiM0MzsgKiBwYWdlIGNhY2hlIGRvZXMgbm90IG1ha2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZm9saW9fbWtjbGVhbl9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQomIzQzO3sKJiM0MzsJREVDTEFSRV9CSVRNQVAobWFwLCAxVUwgJmx0OyZsdDsgTUFYX1BBR0VDQUNIRV9PUkRFUik7CiYjNDM7CXVuc2lnbmVkIGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7CiYjNDM7CiYjNDM7CWlmICghbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fAomIzQzOwkgICAgV0FSTl9PTl9PTkNFKG5yICZndDsgKDFVTCAmbHQ7Jmx0OyBNQVhfUEFHRUNBQ0hFX09SREVSKSkpIHsKJiM0MzsJCWlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSkKJiM0MzsJCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwliaXRtYXBfemVybyhtYXAsIG5yKTsKJiM0MzsJaWYgKCFmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBtYXApKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucikgewomIzQzOwkJbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywKJiM0MzsJCQkJICAgIChzaXplX3Qpc3RhcnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJICAgIChzaXplX3QpKGVuZCAtIHN0YXJ0KSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBDbGVhciBhIGZvbGlvJiMzOTtzIGRpcnR5IGZsYWcsIHdoaWxlIGNhcmluZyBmb3IgZGlydHkgbWVtb3J5IGFjY291bnRpbmcuCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbGlvIHdhcyBwcmV2aW91c2x5IGRpcnR5LgpAQCAtMjg3NSw5ICYjNDM7Mjk1MSw5IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCSAqCiAJCSAqIFdlIHVzZSB0aGlzIHNlcXVlbmNlIHRvIG1ha2Ugc3VyZSB0aGF0CiAJCSAqICAoYSkgd2UgYWNjb3VudCBmb3IgZGlydHkgc3RhdHMgcHJvcGVybHkKLQkJICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB0bwotCQkgKiAgICAgIG1hcmsgdGhlIHdob2xlIGZvbGlvIGRpcnR5IGlmIGl0IHdhcwotCQkgKiAgICAgIGRpcnR5IGluIGEgcGFnZXRhYmxlLiBPbmx5IHRvIHRoZW4KJiM0MzsJCSAqICAoYikgd2UgdGVsbCB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gd2hpY2gKJiM0MzsJCSAqICAgICAgcGFydHMgb2YgdGhlIGZvbGlvIHdlcmUgZGlydHkgaW4gYQomIzQzOwkJICogICAgICBwYWdldGFibGUuIE9ubHkgdG8gdGhlbgogCQkgKiAgKGMpIGNsZWFuIHRoZSBmb2xpbyBhZ2FpbiBhbmQgcmV0dXJuIDEgdG8KIAkJICogICAgICBjYXVzZSB0aGUgd3JpdGViYWNrLgogCQkgKgpAQCAtMjg5NSw4ICYjNDM7Mjk3MSw3IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCSAqIGFzIGEgc2VyaWFsaXphdGlvbiBwb2ludCBmb3IgYWxsIHRoZSBkaWZmZXJlbnQKIAkJICogdGhyZWFkcyBkb2luZyB0aGVpciB0aGluZ3MuCiAJCSAqLwotCQlpZiAoZm9saW9fbWtjbGVhbihmb2xpbykpCi0JCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJCWZvbGlvX21rY2xlYW5fZm9yX2lvKGZvbGlvLCBtYXBwaW5nKTsKIAkJLyoKIAkJICogV2UgY2FyZWZ1bGx5IHN5bmNocm9uaXNlIGZhdWx0IGhhbmRsZXJzIGFnYWluc3QKIAkJICogaW5zdGFsbGluZyBhIGRpcnR5IHB0ZSBhbmQgbWFya2luZyB0aGUgZm9saW8gZGlydHkKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAxZjcyZDI3OWJhNjhmLi5hYWY0NWFjNzlmYTg0IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0xMTAwLDEyICYjNDM7MTEwMCwxOCBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLAogCXJldHVybiByd2MuY29udGVuZGVkID8gLTEgOiBwcmEucmVmZXJlbmNlZDsKIH0KIAotc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiYjNDM7c3RydWN0IG1rY2xlYW5fc3RhdGUgewomIzQzOwl1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXA7CiYjNDM7CWludCBjbGVhbmVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsCiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcCkKIHsKLQlpbnQgY2xlYW5lZCA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LSZndDt2bWE7Ci0Jc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBwdm13LSZndDthZGRyZXNzOwomIzQzOwlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwomIzQzOwlpbnQgY2xlYW5lZCA9IDA7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gYXNzdW1lIHRoZSB3b3JzZSBjYXNlIGllIHBtZCBmb3IgaW52YWxpZGF0aW9uLiBOb3RlIHRoYXQKQEAgLTExMzQsNiAmIzQzOzExNDAsMTUgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJCQlpZiAoIXB0ZV9kaXJ0eShlbnRyeSkgJmFtcDsmYW1wOyAhcHRlX3dyaXRlKGVudHJ5KSkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmIChkaXJ0eV9tYXAgJmFtcDsmYW1wOyBwdGVfZGlydHkoZW50cnkpKSB7CiYjNDM7CQkJCXBnb2ZmX3QgaWR4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSAtCiYjNDM7CQkJCQkgICAgICBwdm13LSZndDtwZ29mZjsKJiM0MzsKJiM0MzsJCQkJLyogVGhlIHdhbGsgb25seSB2aXNpdHMgcGFnZXMgb2YgdGhpcyBmb2xpbyAqLwomIzQzOwkJCQlWTV9XQVJOX09OX09OQ0UoaWR4ICZndDs9IHB2bXctJmd0O25yX3BhZ2VzKTsKJiM0MzsJCQkJX19zZXRfYml0KGlkeCwgZGlydHlfbWFwKTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcywgcHRlX3BmbihlbnRyeSkpOwogCQkJZW50cnkgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHRlKTsKIAkJCWVudHJ5ID0gcHRlX3dycHJvdGVjdChlbnRyeSk7CkBAIC0xMTU1LDYgJiM0MzsxMTcwLDkgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJCQlpZiAoIXBtZF9kaXJ0eShlbnRyeSkgJmFtcDsmYW1wOyAhcG1kX3dyaXRlKGVudHJ5KSkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmIChkaXJ0eV9tYXAgJmFtcDsmYW1wOyBwbWRfZGlydHkoZW50cnkpKQomIzQzOwkJCQliaXRtYXBfc2V0KGRpcnR5X21hcCwgMCwgcHZtdy0mZ3Q7bnJfcGFnZXMpOwomIzQzOwogCQkJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLAogCQkJCQkgIGFkZHJlc3MgJiM0MzsgSFBBR0VfUE1EX1NJWkUpOwogCQkJZW50cnkgPSBwbWRwX2ludmFsaWRhdGUodm1hLCBhZGRyZXNzLCBwbWQpOwpAQCAtMTE4MSw5ICYjNDM7MTE5OSw5IEBAIHN0YXRpYyBib29sIHBhZ2VfbWtjbGVhbl9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKQogewogCURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCBQVk1XX1NZTkMpOwotCWludCAqY2xlYW5lZCA9IGFyZzsKJiM0MzsJc3RydWN0IG1rY2xlYW5fc3RhdGUgKnN0YXRlID0gYXJnOwogCi0JKmNsZWFuZWQgJiM0Mzs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKCZhbXA7cHZtdyk7CiYjNDM7CXN0YXRlLSZndDtjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcsIHN0YXRlLSZndDtkaXJ0eV9tYXApOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMTk2LDEyICYjNDM7MTIxNCwyMyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX21rY2xlYW5fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpCiAJcmV0dXJuIHRydWU7CiB9CiAKLWludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCAtIFdyaXRlLXByb3RlY3QgYSBmb2xpbyBhbmQgcmVwb3J0IHdoYXQgd2FzIGRpcnR5LgomIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIGNsZWFuLgomIzQzOyAqIEBkaXJ0eV9tYXA6IEJpdG1hcCBvZiBhdCBsZWFzdCBmb2xpb19ucl9wYWdlcyhAZm9saW8pIGJpdHMsIG9yIE5VTEwuCiYjNDM7ICoKJiM0MzsgKiBXcml0ZS1wcm90ZWN0cyBhbmQgY2xlYW5zIGV2ZXJ5IG1hcHBpbmcgb2YgQGZvbGlvLiAgV2l0aCBAZGlydHlfbWFwLCBzZXRzIGEKJiM0MzsgKiBiaXQgZm9yIGVhY2ggcGFnZSB3aG9zZSBlbnRyeSB3YXMgZGlydHk7IGEgUE1ELW1hcHBlZCBmb2xpbyBoYXMgb25lIGRpcnR5CiYjNDM7ICogYml0IGZvciBhbGwgb2YgaXQsIHNvIGV2ZXJ5IHBhZ2UgaXMgcmVwb3J0ZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIGNsZWFuZWQuCiYjNDM7ICovCiYjNDM7aW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKQogewotCWludCBjbGVhbmVkID0gMDsKJiM0MzsJc3RydWN0IG1rY2xlYW5fc3RhdGUgc3RhdGUgPSB7IC5kaXJ0eV9tYXAgPSBkaXJ0eV9tYXAgfTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0gewotCQkuYXJnID0gKHZvaWQgKikmYW1wO2NsZWFuZWQsCiYjNDM7CQkuYXJnID0gKHZvaWQgKikmYW1wO3N0YXRlLAogCQkucm1hcF9vbmUgPSBwYWdlX21rY2xlYW5fb25lLAogCQkuaW52YWxpZF92bWEgPSBpbnZhbGlkX21rY2xlYW5fdm1hLAogCX07CkBAIC0xMjE3LDcgJiM0MzsxMjQ2LDEyIEBAIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAlybWFwX3dhbGsoZm9saW8sICZhbXA7cndjKTsKIAotCXJldHVybiBjbGVhbmVkOwomIzQzOwlyZXR1cm4gc3RhdGUuY2xlYW5lZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX21rY2xlYW4pOwogCkBAIC0xMjQxLDcgJiM0MzsxMjc1LDcgQEAgc3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCS5mbGFncwkJPSBQVk1XX1NZTkMsCiAJfTsKIAotCXN0YXRlLSZndDtjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcpOwomIzQzOwlzdGF0ZS0mZ3Q7Y2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoJmFtcDtwdm13LCBOVUxMKTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMTMyNCw3ICYjNDM7MTM1OCw3IEBAIGludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZiwKIAlwdm13LmFkZHJlc3MgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmLCBucl9wYWdlcyk7CiAJVk1fQlVHX09OX1ZNQShwdm13LmFkZHJlc3MgPT0gLUVGQVVMVCwgdm1hKTsKIAotCXJldHVybiBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcpOwomIzQzOwlyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoJmFtcDtwdm13LCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19mb2xpb19tb2Rfc3RhdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbnIsIGludCBucl9wbWRtYXBwZWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3Vic3RhbnRpYWwgS2VybmVsIE1lbW9yeSBhbmQgRmlsZXN5c3RlbSBNb2RpZmljYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUgKipzZXJpb3VzKiogY29yZSBpbmZyYXN0cnVjdHVyZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyBkZWVwIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCwgdmlydHVhbCBmaWxlc3lzdGVtIGNvZGUgKFZGUyksIGBpb21hcGAsIGFuZCBldmVuIFhGUy4gVGhlIHNwZWNpZmljIGZpbGVzIHRlbGwgdGhlIHN0b3J5OiBjaGFuZ2VzIHRvIGBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZWAsIGBpb21hcF9kaXJ0eV9mb2xpb2AsIGBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXJgLCBhbmQgYGlvbWFwX3BhZ2VfbWt3cml0ZWAgaW5kaWNhdGUgZnVuZGFtZW50YWwgYWRqdXN0bWVudHMgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBidWZmZXJlZCBJL08gdGhyb3VnaCBgaW9tYXBgLiBUaGUgaW5jbHVzaW9uIG9mIGAuZGlydHlfZm9saW9fcmFuZ2UgPSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZWAgd2l0aGluIGB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zYCBpcyBzaWduaWZpY2FudCwgZGlyZWN0bHkgaW50ZWdyYXRpbmcgdGhlc2UgYGlvbWFwYCBjaGFuZ2VzIGludG8gWEZTJiMzOTtzIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucy4KClRoZSBpbmNsdWRlIGZpbGVzIC0tIGBmcy5oYCwgYGlvbWFwLmhgLCBgbW0uaGAsIGFuZCBgcm1hcC5oYCAtLSBzaG93IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgbm90IGlzb2xhdGVkOyB0aGV5JiMzOTtyZSBleHBhbmRpbmcgdGhlIGBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNgIHN0cnVjdHVyZSwgYW5kIGFkZGluZyBuZXcgZnVuY3Rpb25zIGxpa2UgYGZvbGlvX21hcmtfZGlydHlfcmFuZ2VgLCBhbmQgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgLiBUaGUgTU0gY29kZSBpcyBhbHNvIGhlYXZpbHkgaW52b2x2ZWQsIHdpdGggYGZhdWx0X2RpcnR5X3NoYXJlZF9wYWdlYCwgYGNhbl9kaXJ0eV93aG9sZV9iYXRjaGAsIGFuZCBgc2V0X3B0ZV9yYW5nZWAgYmVpbmcgbW9kaWZpZWQsIGFsb25nc2lkZSBjaGFuZ2VzIHRvIHBhZ2Ugd3JpdGViYWNrIHZpYSBmdW5jdGlvbnMgbGlrZSBgbWFwcGluZ19kaXJ0eV9yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5YCwgYW5kIGBmb2xpb19ta2NsZWFuX2Zvcl9pb2AsIGFzIHdlbGwgYXMgcm1hcCAocmV2ZXJzZSBtYXApIG1vZGlmaWNhdGlvbnMuICBUaGUgY2hhbmdlcyB0byBybWFwIGxvb2sgdG8gc3VwcG9ydCBmb2xpbyBvcGVyYXRpb25zLCBzbyB0aGlzIGNvdWxkIGJlIGEgbWFqb3IgbWVtb3J5IHJlY2xhbWF0aW9uIG9yIHZpcnR1YWwgbWVtb3J5IGNoYW5nZS4KClRoaXMgaXMgYSAqKm1ham9yKiogYXJlYSBvZiB0aGUga2VybmVsLCBhZmZlY3RpbmcgcGFnZSBjYWNoZSB3cml0ZWJhY2ssIGZhdWx0aW5nIHNoYXJlZCBwYWdlcywgbWt3cml0ZSBvcGVyYXRpb25zLCByZXZlcnNlIG1hcHBpbmcsIGJ1ZmZlcmVkIElPLCBhbmQgWEZTISBBbmQgdGhvc2UgYXJlIGp1c3QgdGhlIG9idmlvdXMgZnVuY3Rpb25zIHRoYXQgd2VyZSBjaGFuZ2VkLiBUaGUgaW1wYWN0IG9mIHN1Y2ggY2hhbmdlcyBjb3VsZCBiZSBmYXItcmVhY2hpbmcuIEdpdmVuIHRoZSByZWFjaCBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgY29kZSBpcyBlYXNpbHkgcmVhY2hhYmxlIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cHMg4oCTIHRoaW5rIFFFTVUgb3IgZXZlbiBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgb3B0aW9ucywgdG8gdW5kZXJzdGFuZCB3aGF0IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHdvdWxkIGV4cG9zZSB0aGlzIGNvZGUuIEkgbmVlZCB0byBrbm93IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgdG8gc2VlIHRoZSBleHBvc2VkIGF0dGFjayBzdXJmYWNlLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBtYW51YWxseSBnbyB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGZzL3hmcy9LY29uZmlnYCBhbmQgYGZzL2lvbWFwL0tjb25maWdgLCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZpbmQgdGhlIGVuYWJsZWQgc3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfSU9NQVB8Y29uZmlnIFhGU19GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcbi0tXG5mcy9LY29uZmlnLTE3LVxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcbmZzL0tjb25maWctMTktXHRib29sXG4tLVxuZnMveGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3hmcy9LY29uZmlnOjI6Y29uZmlnIFhGU19GU1xuZnMveGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1hGUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlhGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogQSBRdWljayBBdWRpdCoqCgpPa2F5LCBzbyBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIFhGUyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYGZzL3hmcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIGl0LiBJIHdhbnQgdG8gemVybyBpbiBvbiB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGtlcm5lbCBzdWJzeXN0ZW1zIFhGUyBpcyBwdWxsaW5nIGluIHRocm91Z2ggJiMzNDtzZWxlY3QmIzM0OyBvciAmIzM0O2RlcGVuZHMgb24mIzM0OyBkaXJlY3RpdmVzLiBNeSBnb2FsIGlzIGEgaGlnaC1sZXZlbCBvdmVydmlldyDigJMgbG9va2luZyBmb3IgYW55IHN1YnRsZSByZWxhdGlvbnNoaXBzIG9yIGltcGxpZWQgY29uc3RyYWludHMgdGhhdCBtaWdodCBpbXBhY3QgbXkgY3VycmVudCBmb2N1cywgd2hhdGV2ZXIgaXQgbWF5IGJlLiBJJiMzOTttIG5vdCBhZnRlciBsaW5lLWJ5LWxpbmUgdW5kZXJzdGFuZGluZywganVzdCB0aGUga2V5IGRlcGVuZGVuY2llcyB0aGF0IGRpY3RhdGUgdGhlIFhGUyBidWlsZCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMveGZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgWEZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtYRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA1Olx0XHRzZWxlY3QgRVhQT1JURlNcbiAgIDY6XHRcdHNlbGVjdCBDUkMzMlxuICAgNzpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFhGUyBpcyBhIGhpZ2ggcGVyZm9ybWFuY2Ugam91cm5hbGluZyBmaWxlc3lzdGVtIHdoaWNoIG9yaWdpbmF0ZWRcbiAgMTA6XHRcdCAgb24gdGhlIFNHSSBJUklYIHBsYXRmb3JtLiAgSXQgaXMgY29tcGxldGVseSBtdWx0aS10aHJlYWRlZCwgY2FuXG4gIDExOlx0XHQgIHN1cHBvcnQgbGFyZ2UgZmlsZXMgYW5kIGxhcmdlIGZpbGVzeXN0ZW1zLCBleHRlbmRlZCBhdHRyaWJ1dGVzLFxuICAxMjpcdFx0ICB2YXJpYWJsZSBibG9jayBzaXplcywgaXMgZXh0ZW50IGJhc2VkLCBhbmQgbWFrZXMgZXh0ZW5zaXZlIHVzZSBvZlxuICAxMzpcdFx0ICBCdHJlZXMgKGRpcmVjdG9yaWVzLCBleHRlbnRzLCBmcmVlIHNwYWNlKSB0byBhaWQgYm90aCBwZXJmb3JtYW5jZVxuICAxNDpcdFx0ICBhbmQgc2NhbGFiaWxpdHkuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGF0IFx1MDAzY2h0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMvXHUwMDNlXG4gIDE3Olx0XHQgIGZvciBjb21wbGV0ZSBkZXRhaWxzLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBvbi1kaXNrIGNvbXBhdGlibGVcbiAgMTg6XHRcdCAgd2l0aCB0aGUgSVJJWCB2ZXJzaW9uIG9mIFhGUy5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAyMTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeGZzLiAgQmUgYXdhcmUsIGhvd2V2ZXIsIHRoYXQgaWYgdGhlIGZpbGVcbiAgMjI6XHRcdCAgc3lzdGVtIG9mIHlvdXIgcm9vdCBwYXJ0aXRpb24gaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHlvdSYjMzk7bGwgbmVlZFxuICAyMzpcdFx0ICB0byB1c2UgYW4gaW5pdGlhbCByYW1kaXNrIChpbml0cmQpIHRvIGJvb3QuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFhGU19TVVBQT1JUX1Y0XG4gIDI2Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZGVwcmVjYXRlZCBWNCAoY3JjPTApIGZvcm1hdFwmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBYRlNfRlNcbiAgMjg6XHRcdGRlZmF1bHQgblxuICAyOTpcdFx0aGVscFxuICAzMDpcdFx0ICBUaGUgVjQgZmlsZXN5c3RlbSBmb3JtYXQgbGFja3MgY2VydGFpbiBmZWF0dXJlcyB0aGF0IGFyZSBzdXBwb3J0ZWRcbiAgMzE6XHRcdCAgYnkgdGhlIFY1IGZvcm1hdCwgc3VjaCBhcyBtZXRhZGF0YSBjaGVja3N1bW1pbmcsIHN0cmVuZ3RoZW5lZFxuICAzMjpcdFx0ICBtZXRhZGF0YSB2ZXJpZmljYXRpb24sIGFuZCB0aGUgYWJpbGl0eSB0byBzdG9yZSB0aW1lc3RhbXBzIHBhc3QgdGhlXG4gIDMzOlx0XHQgIHllYXIgMjAzOC4gIEJlY2F1c2Ugb2YgdGhpcywgdGhlIFY0IGZvcm1hdCBpcyBkZXByZWNhdGVkLiAgQWxsIHVzZXJzXG4gIDM0Olx0XHQgIHNob3VsZCB1cGdyYWRlIGJ5IGJhY2tpbmcgdXAgdGhlaXIgZmlsZXMsIHJlZm9ybWF0dGluZywgYW5kIHJlc3RvcmluZ1xuICAzNTpcdFx0ICBmcm9tIHRoZSBiYWNrdXAuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIEFkbWluaXN0cmF0b3JzIGFuZCB1c2VycyBjYW4gZGV0ZWN0IGEgVjQgZmlsZXN5c3RlbSBieSBydW5uaW5nXG4gIDM4Olx0XHQgIHhmc19pbmZvIGFnYWluc3QgYSBmaWxlc3lzdGVtIG1vdW50cG9pbnQgYW5kIGNoZWNraW5nIGZvciBhIHN0cmluZ1xuICAzOTpcdFx0ICBiZWdpbm5pbmcgd2l0aCBcJiMzNDtjcmM9XCYjMzQ7LiAgSWYgdGhlIHN0cmluZyBcJiMzNDtjcmM9MFwmIzM0OyBpcyBmb3VuZCwgdGhlXG4gIDQwOlx0XHQgIGZpbGVzeXN0ZW0gaXMgYSBWNCBmaWxlc3lzdGVtLiAgSWYgbm8gc3VjaCBzdHJpbmcgaXMgZm91bmQsIHBsZWFzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBYRlMgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIFhGU19GUyBpcyB1c2luZyBCTE9DSyBhbmQgRlNfSU9NQVAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY2hvaWNlLiBJJiMzOTttIGFsc28gcmVtaW5kZWQgdGhhdCBtbS9tZW1vcnkuYywgbW0vcGFnZS13cml0ZWJhY2suYywgYW5kIG1tL3JtYXAuYyBhcmUgYWxsIGZvdW5kYXRpb25hbCB0byB0aGUgY29yZSBNZW1vcnkgTWFuYWdlbWVudCAoTU0pIGxheWVyLiBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBldmVyeXRoaW5nIGlzIHdvcmtpbmcgdG9nZXRoZXIgaW4gdGhhdCBhcmVhLgoKU2luY2UgWEZTIGlzIHV0aWxpemluZyBGU19JT01BUCwgSSB3b25kZXIgaWYgb3RoZXIgZmlsZXN5c3RlbXMgYXJlIGRvaW5nIHRoZSBzYW1lLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGZpbGVzeXN0ZW1zIGxldmVyYWdlIGlvbWFwIG9yIHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLiBBIHF1aWNrIGBncmVwYCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGBkaXJ0eV9mb2xpb19yYW5nZWAgc2hvdWxkIGhlbHAgbWUgaWRlbnRpZnkgYW55IG90aGVyIHBvdGVudGlhbCB1c2VycyBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIGJyb2FkZXIgY29udGV4dCB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlydHlfZm9saW9fcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz04NDg9RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg0OS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODUwOmJvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg1MS1cdFx0c2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg1Ni19XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjg1NzpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg1OC1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODU5PWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg2MC17XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjg2MTpcdHJldHVybiBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgMCwgZm9saW9fc2l6ZShmb2xpbykpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NjItfVxuLS1cbmZzL3hmcy94ZnNfYW9wcy5jPTg2Mj1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMveGZzL3hmc19hb3BzLmMtODY1LVx0LndyaXRlcGFnZXNcdFx0PSB4ZnNfdm1fd3JpdGVwYWdlcyxcbmZzL3hmcy94ZnNfYW9wcy5jOjg2NjpcdC5kaXJ0eV9mb2xpb19yYW5nZVx0PSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSxcbmZzL3hmcy94ZnNfYW9wcy5jLTg2Ny1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9NDAxPXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMge1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaC00MDktXHQvKiBNYXJrIFtvZmYsIG9mZiAmIzQzOyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi9cbmluY2x1ZGUvbGludXgvZnMuaDo0MTA6XHRib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuaW5jbHVkZS9saW51eC9mcy5oLTQxMS1cdFx0XHRcdCAgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4tLVxuaW5jbHVkZS9saW51eC9pb21hcC5oPTQ0NT1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaW9tYXAuaDo0NDY6Ym9vbCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvaW9tYXAuaC00NDctXHRcdHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xuLS1cbm1tL21lbW9yeS5jPTU2NDk9c3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsXG4tLVxubW0vbWVtb3J5LmMtNTY1OC1cbm1tL21lbW9yeS5jOjU2NTk6XHRyZXR1cm4gIXZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZTtcbm1tL21lbW9yeS5jLTU2NjAtfVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjc1Mj1FWFBPUlRfU1lNQk9MKGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSk7XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yNzU0LS8qXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3NTU6ICogSGFuZCBhIGRpcnRpZWQgcmFuZ2Ugb2YgQGZvbGlvIHRvIHRoZSBmaWxlc3lzdGVtLiAgLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgY2FuXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NTYtICogZXhwcmVzcyBldmVyeXRoaW5nIC1cdTAwM2VkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdFxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjc2MD1zdGF0aWMgYm9vbCBtYXBwaW5nX2RpcnR5X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc2Mi17XG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3NjM6XHRpZiAoIW1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UpXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NjQtXHRcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc2NS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6Mjc2NjpcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCBvZmYsIGxlbik7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NjctfVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjg4Nj1FWFBPUlRfU1lNQk9MKF9fZm9saW9fY2FuY2VsX2RpcnR5KTtcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI4OTEtICpcbm1tL3BhZ2Utd3JpdGViYWNrLmM6Mjg5MjogKiBXaXRob3V0IC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIHRoZXJlIGlzIG5vd2hlcmUgdG8gcHV0IHBlci1ibG9jayBzdGF0ZSwgc29cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjg5My0gKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0yODk4PXN0YXRpYyB2b2lkIGZvbGlvX21rY2xlYW5fZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yOTA0LVxubW0vcGFnZS13cml0ZWJhY2suYzoyOTA1Olx0aWYgKCFtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxubW0vcGFnZS13cml0ZWJhY2suYy0yOTA2LVx0ICAgIFdBUk5fT05fT05DRShuciBcdTAwM2UgKDFVTCBcdTAwM2NcdTAwM2MgTUFYX1BBR0VDQUNIRV9PUkRFUikpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MjYKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogNzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEaXJ0eSBGb2xpbyBSYW5nZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygc3ViLWZvbGlvIHJhbmdlIGRpcnR5IHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgZm9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTIHRoYXQgdXRpbGl6ZSBpb21hcC4gTXkgaW5pdGlhbCBzY2FuIGhhcyBpZGVudGlmaWVkIGEgc2V0IG9mIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGFjcm9zcyBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGBtbS9wYWdlLXdyaXRlYmFjay5jYCwgYG1tL3JtYXAuY2AsIGFuZCBgbW0vbWVtb3J5LmNgLiBJJiMzOTt2ZSBjYXRlZ29yaXplZCB0aGVtIGJhc2VkIG9uIHRoZWlyIGltcGFjdC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBub24tdWJpcXVpdG91cyBmb2N1cyBzeW1ib2xzIEkgd2FudCB0byB0YXJnZXQuIEkmIzM5O20gYXZvaWRpbmcgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGVudHJ5IHBvaW50cywgYW5kIGNvcmUgbG9jayBwcmltaXRpdmVzLCBzaW5jZSB0aG9zZSB3b24mIzM5O3QgZ2l2ZSBtZSB0aGUgc3BlY2lmaWMgY29kZSBJJiMzOTttIGFmdGVyLiBJJiMzOTt2ZSBzcGVjaWZpY2FsbHkgc2VsZWN0ZWQgYGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlYCwgYGlvbWFwX3BhZ2VfbWt3cml0ZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgLCBhbmQgYGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pb2AgYXMgdGhlIGNvcmUgZnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBvbi4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY292ZXJhZ2Ugb2YgdGhlIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O3ZlIGNoZWNrZWQgdGhlIGRlcGVuZGVuY2llcyB0byBzZWUgaWYgSSBuZWVkIHRvIGVuYWJsZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgWEZTIHRvIHRyaWdnZXIgdGhlIGhvb2tzIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gSSBrbm93IHRoYXQgYFhGU19GU2Agd2lsbCBjb21waWxlIFhGUyBhbmQsIGltcG9ydGFudGx5LCBhbHNvIGVuYWJsZSBgRlNfSU9NQVBgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gaGl0dGluZyB0aGUgWEZTIGNvZGUgcGF0aC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIHRoZSByZXF1aXJlbWVudHM6IHRoZSBmdXp6aW5nIGlzIHdvcnRoIGl0LCB0aGUgY29uZmlndXJhdGlvbiBlbmFibGVzIFhGUywgYW5kIEkmIzM5O3ZlIGdvdCB0aGUgY29ycmVjdCBgRm9jdXNTeW1ib2xzYCBzZXQgdG8gdGFyZ2V0IHRoZSBmdW5jdGlvbnMgdGhhdCByZWZsZWN0IHRoZSBjb3JlIGNoYW5nZS4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgd2UgdHJhY2sgZGlydHkgc3ViLWZvbGlvIHJhbmdlcy4gVGhpcyBpcyBjcml0aWNhbCBmb3Igc3VwcG9ydGluZyBwZXItYmxvY2sgZGlydHkgdHJhY2tpbmcgb24gbGFyZ2UgZm9saW9zLCBlc3BlY2lhbGx5IGluIGZpbGVzeXN0ZW1zIGxpa2UgWEZTIHdoaWNoIHVzZSBpb21hcC4gVGhpcyBpbXBhY3RzIGV2ZXJ5dGhpbmcgZnJvbSBwYWdlIGZhdWx0IGhhbmRsaW5nLCB0byBzaGFyZWQgcGFnZSBkaXJ0eWluZywgdG8gd3JpdGViYWNrIHRyYW5zaXRpb25zLCBhbmQgZXZlbiBybWFwIGNsZWFuaW5nLiBUaGF0IGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIC0gY2hhbmdlcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBpb21hcCwgYW5kIHRoZSBYRlMgY29kZSBwYXRoLiBUaGlzIGFuYWx5c2lzIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSYjMzQ7LAogICAgJiMzNDtpb21hcF9wYWdlX21rd3JpdGUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWFya19kaXJ0eV9yYW5nZSYjMzQ7LAogICAgJiMzNDtmb2xpb19ta2NsZWFuX2RpcnR5bWFwJiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdWItZm9saW8gcmFuZ2UgZGlydHlpbmcgdmlhIC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSwgZm9saW9fbWFya19kaXJ0eV9yYW5nZSgpLCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKCksIGFuZCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSgpIGZvciBYRlMvaW9tYXAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gZGlydHkgZm9saW8gdHJhY2tpbmcsIHdyaXRlLXByb3RlY3QvY2xlYW4gdHJhbnNpdGlvbnMgaW4gd3JpdGViYWNrIChmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8pLCBybWFwIFBURS9QTUQgZGlydHkgd2FsaywgYW5kIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncy4gVGhlc2UgcmVhY2hhYmxlIE1NIGFuZCBmaWxlc3lzdGVtIHBhdGhzIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlydHlfZm9saW9fcmFuZ2UmIzM0OywKICAgICYjMzQ7aW9tYXBfcGFnZV9ta3dyaXRlJiMzNDssCiAgICAmIzM0O2ZvbGlvX21hcmtfZGlydHlfcmFuZ2UmIzM0OywKICAgICYjMzQ7Zm9saW9fbWtjbGVhbl9kaXJ0eW1hcCYjMzQ7LAogICAgJiMzNDtmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3ViLWZvbGlvIHJhbmdlIGRpcnR5aW5nIHZpYSAtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UsIGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoKSwgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCgpLCBhbmQgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UoKSBmb3IgWEZTL2lvbWFwLiBJdCBtb2RpZmllcyBjb3JlIE1NIGRpcnR5IGZvbGlvIHRyYWNraW5nLCB3cml0ZS1wcm90ZWN0L2NsZWFuIHRyYW5zaXRpb25zIGluIHdyaXRlYmFjayAoZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKSwgcm1hcCBQVEUvUE1EIGRpcnR5IHdhbGssIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBzaGFyZWQgbWFwcGluZ3MuIFRoZXNlIHJlYWNoYWJsZSBNTSBhbmQgZmlsZXN5c3RlbSBwYXRocyB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhbmdlLWJhc2VkIGRpcnR5IHRyYWNraW5nIGZvciBsYXJnZSBmb2xpb3MgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaW9tYXAgKHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLCBgZm9saW9fbWFya19kaXJ0eV9yYW5nZWAsIGFuZCBgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcGApLlxuXG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBBbGwgbmV3IGxvY2FsIHZhcmlhYmxlcyAoYGRpcnR5X29mZmAsIGBkaXJ0eV9sZW5gLCBgc3RhdGVgLCBhbmQgc3RhY2sgYml0bWFwIGBtYXBgIGluIGBmb2xpb19ta2NsZWFuX2Zvcl9pb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChgYml0bWFwX3plcm9gLCBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBldGMuKS4gVGhlcmUgYXJlIG5vIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHZlY3RvcnMuXG4yLiBLQVNBTiAvIHN0YW5kYXJkIGRldGVjdG9ycyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gcmFuZ2UgY2FsY3VsYXRpb25zLCBiaXRtYXNrIG9wZXJhdGlvbnMsIG9yIHBhZ2UgdGFibGUgd2Fsa3Mgd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYXNzZXJ0aW9ucy9sb2NraW5nIGlzc3Vlcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDUxOWI0NjFjOWIzZmRlY2FhODgwZTBjOTNiNGRhOTk3NzUxYzFiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDQ6MDI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwppbmRleCAwYTVlYmZkYTkwZjEyLi44ZDhhOGFjYWIwMWFjIDEwMDY0NAotLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKQEAgLTg0NywxNSAmIzQzOzg0NywxOSBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pOwogCi1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCXNpemVfdCBsZW4gPSBmb2xpb19zaXplKGZvbGlvKTsKLQotCWlmc19hbGxvYyhpbm9kZSwgZm9saW8sIDApOwotCWlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgMCwgbGVuKTsKJiM0MzsJaWZzX2FsbG9jKG1hcHBpbmctJmd0O2hvc3QsIGZvbGlvLCAwKTsKJiM0MzsJaW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBvZmYsIGxlbik7CiAJcmV0dXJuIGZpbGVtYXBfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKTsKJiM0MzsKJiM0Mztib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLCBmb2xpb19zaXplKGZvbGlvKSk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlydHlfZm9saW8pOwogCiBzdGF0aWMgdm9pZApAQCAtMTgwNCw3ICYjNDM7MTgwOCw3IEBAIGlvbWFwX3RydW5jYXRlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgYm9vbCAqZGlkX3plcm8sCiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF90cnVuY2F0ZV9wYWdlKTsKIAogc3RhdGljIGludCBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3QgZGlydHlfb2ZmLCBzaXplX3QgZGlydHlfbGVuKQogewogCWxvZmZfdCBsZW5ndGggPSBpb21hcF9sZW5ndGgoaXRlcik7CiAJaW50IHJldDsKQEAgLTE4MTcsNyAmIzQzOzE4MjEsNyBAQCBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwKIAkJYmxvY2tfY29tbWl0X3dyaXRlKGZvbGlvLCAwLCBsZW5ndGgpOwogCX0gZWxzZSB7CiAJCVdBUk5fT05fT05DRSghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpOwotCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJCWZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIGRpcnR5X29mZiwgZGlydHlfbGVuKTsKIAl9CiAKIAlyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7CkBAIC0xODMyLDYgJiM0MzsxODM2LDcgQEAgdm1fZmF1bHRfdCBpb21hcF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywKIAkJLnByaXZhdGUJPSBwcml2YXRlLAogCX07CiAJc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8odm1mLSZndDtwYWdlKTsKJiM0MzsJc2l6ZV90IGRpcnR5X29mZiwgZGlydHlfbGVuOwogCXNzaXplX3QgcmV0OwogCiAJZm9saW9fbG9jayhmb2xpbyk7CkBAIC0xODQwLDggJiM0MzsxODQ1LDIyIEBAIHZtX2ZhdWx0X3QgaW9tYXBfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsCiAJCWdvdG8gb3V0X3VubG9jazsKIAlpdGVyLnBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7CiAJaXRlci5sZW4gPSByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJsb2NrcyBhcmUgc3RpbGwgYWxsb2NhdGVkIGZvciB0aGUgd2hvbGUgZm9saW8sIGJ1dCBvbmx5IHRoZSBwYWdlCiYjNDM7CSAqIHRoZSBmYXVsdCB3YXMgZm9yIGhhcyBiZWVuIHdyaXR0ZW4sIHNvIHRoYXQgaXMgYWxsIHRoYXQgaGFzIHRvIGJlCiYjNDM7CSAqIHdyaXR0ZW4gYmFjay4gIEEgcmFjaW5nIHRydW5jYXRlIGNhbiBsZWF2ZSB0aGF0IHBhZ2UgYmV5b25kIGlfc2l6ZSwKJiM0MzsJICogYW5kIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkaXJ0eS4KJiM0MzsJICovCiYjNDM7CWRpcnR5X29mZiA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCB2bWYtJmd0O3BhZ2UpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7CiYjNDM7CWlmIChkaXJ0eV9vZmYgJmx0OyByZXQpCiYjNDM7CQlkaXJ0eV9sZW4gPSBtaW5fdChzaXplX3QsIFBBR0VfU0laRSwgcmV0IC0gZGlydHlfb2ZmKTsKJiM0MzsJZWxzZQomIzQzOwkJZGlydHlfbGVuID0gMDsKJiM0MzsKIAl3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoJmFtcDtpdGVyLCBvcHMpKSAmZ3Q7IDApCi0JCWl0ZXIuc3RhdHVzID0gaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKCZhbXA7aXRlciwgZm9saW8pOwomIzQzOwkJaXRlci5zdGF0dXMgPSBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoJmFtcDtpdGVyLCBmb2xpbywKJiM0MzsJCQkJCQkgICAgICAgZGlydHlfb2ZmLCBkaXJ0eV9sZW4pOwogCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmMKaW5kZXggNzRhNjA4OWFiYWRmOS4uNjAwZTdkZTJlNTk5YyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19hb3BzLmMKQEAgLTg2Myw3ICYjNDM7ODYzLDcgQEAgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0gewogCS5yZWFkX2ZvbGlvCQk9IHhmc192bV9yZWFkX2ZvbGlvLAogCS5yZWFkYWhlYWQJCT0geGZzX3ZtX3JlYWRhaGVhZCwKIAkud3JpdGVwYWdlcwkJPSB4ZnNfdm1fd3JpdGVwYWdlcywKLQkuZGlydHlfZm9saW8JCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5kaXJ0eV9mb2xpb19yYW5nZQk9IGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlLAogCS5yZWxlYXNlX2ZvbGlvCQk9IGlvbWFwX3JlbGVhc2VfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8JPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAogCS5ibWFwCQkJPSB4ZnNfdm1fYm1hcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAwNzJkOGNkMDlhMGIyLi4xZDk4YjZjMGI4ODA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC00MDYsNiAmIzQzOzQwNiw5IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgewogCiAJLyogTWFyayBhIGZvbGlvIGRpcnR5LiAgUmV0dXJuIHRydWUgaWYgdGhpcyBkaXJ0aWVkIGl0ICovCiAJYm9vbCAoKmRpcnR5X2ZvbGlvKShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3QgZm9saW8gKik7CiYjNDM7CS8qIE1hcmsgW29mZiwgb2ZmICYjNDM7IGxlbikgb2YgYSBmb2xpbyBkaXJ0eSAqLwomIzQzOwlib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQkgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pOwogCiAJdm9pZCAoKnJlYWRhaGVhZCkoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKaW5kZXggYmM3YWU2MzI3ZGJmOC4uM2NmMmFjNzUxNDA5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaApAQCAtNDQzLDYgJiM0Mzs0NDMsOCBAQCBzdHJ1Y3QgZm9saW8gKmlvbWFwX2dldF9mb2xpbyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90IHBvcywgc2l6ZV90IGxlbik7CiBib29sIGlvbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTsKIGJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTsKIHZvaWQgaW9tYXBfZm9saW9fbWFya191cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGludCBpb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwKIAkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDg3ZmVhYTVhMmI3ODAuLjc2MjgyNjJjMTdlMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTMzMzcsNiAmIzQzOzMzMzcsNyBAQCBzdHJ1Y3Qga3ZlYzsKIHN0cnVjdCBwYWdlICpnZXRfZHVtcF9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50ICpsb2NrZWQpOwogCiBib29sIGZvbGlvX21hcmtfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7Ym9vbCBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pOwogYm9vbCBmb2xpb19tYXJrX2RpcnR5X2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7CiBib29sIHNldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfcGFnZV9kaXJ0eV9sb2NrKHN0cnVjdCBwYWdlICpwYWdlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggOGRjMDg3MWU1ZjAwMS4uNmZjMGE2MDIwMjUyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTkyNyw2ICYjNDM7OTI3LDcgQEAgdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2xlYW5lZCBQVEVzLgogICovCiBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKik7CiYjNDM7aW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKTsKIAogaW50IG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmLAogCQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CkBAIC05OTAsNiAmIzQzOzk5MSwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KICNlbmRpZgkvKiBDT05GSUdfTU1VICovCiAKICNlbmRpZgkvKiBfTElOVVhfUk1BUF9IICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhkYTBmOTQ1MTQxYjQuLjI3YTA1OWUwYzAxNmYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0zNzc4LDEwICYjNDM7Mzc3OCwxOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0mZ3Q7dm1hOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi0mZ3Q7cGFnZSk7CiYjNDM7CXNpemVfdCBvZmYgPSBmb2xpb19wYWdlX2lkeChmb2xpbywgdm1mLSZndDtwYWdlKSAmbHQ7Jmx0OyBQQUdFX1NISUZUOwogCWJvb2wgZGlydGllZDsKIAlib29sIHBhZ2VfbWt3cml0ZSA9IHZtYS0mZ3Q7dm1fb3BzICZhbXA7JmFtcDsgdm1hLSZndDt2bV9vcHMtJmd0O3BhZ2VfbWt3cml0ZTsKIAotCWRpcnRpZWQgPSBmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJLyoKJiM0MzsJICogQSBQTUQgZW50cnkgaGFzIG9uZSBkaXJ0eSBiaXQgZm9yIHRoZSB3aG9sZSBmb2xpbywgc28gdGhlcmUgaXMgbm8KJiM0MzsJICogZmluZXIgaW5mb3JtYXRpb24gdG8gcGFzcyBvbi4gQSBQVEUtbWFwcGVkIGZvbGlvIG9ubHkgaGFzIHRoZSBwYWdlCiYjNDM7CSAqIHRoZSBmYXVsdCB3YXMgZm9yIGRpcnRpZWQgc28gZmFyLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBtZF90cmFuc19odWdlKHBtZHBfZ2V0X2xvY2tsZXNzKHZtZi0mZ3Q7cG1kKSkpCiYjNDM7CQlkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiYjNDM7CWVsc2UKJiM0MzsJCWRpcnRpZWQgPSBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBvZmYsIFBBR0VfU0laRSk7CiAJVk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTsKIAkvKgogCSAqIFRha2UgYSBsb2NhbCBjb3B5IG9mIHRoZSBhZGRyZXNzX3NwYWNlIC0gZm9saW8ubWFwcGluZyBtYXkgYmUgemVyb2VkCkBAIC01NjI1LDYgJiM0Mzs1NjM0LDMxIEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhCiB9CiAjZW5kaWYKIAomIzQzOy8qCiYjNDM7ICogTWF5IHRoZSB3aG9sZSBiYXRjaCBiZSBtYXJrZWQgZGlydHk/CiYjNDM7ICoKJiM0MzsgKiBPbmx5IGEgc2hhcmVkIG1hcHBpbmcgb2YgYSBmaWxlc3lzdGVtIHRoYXQgdHJhY2tzIGRpcnR5IHN0YXRlIHBlciBibG9jayBzYXlzCiYjNDM7ICogbm8uIFRoZXJlIHRoZSBwYWdlIHRhYmxlIGRpcnR5IGJpdHMgYXJlIHRoZSBvbmx5IHJlY29yZCBvZiB3aGljaCBwYXJ0cyBvZiBhCiYjNDM7ICogbGFyZ2UgZm9saW8gd2VyZSB3cml0dGVuIHRocm91Z2ggdGhlIG1hcHBpbmcsIHNvIHBhZ2VzIG5vYm9keSBoYXMgc3RvcmVkIHRvCiYjNDM7ICogaGF2ZSB0byBzdGF5IGNsZWFuIGFuZCBsZXQgdGhlIGhhcmR3YXJlIHNldCB0aGUgYml0IG9uIHRoZSBmaXJzdCBzdG9yZS4KJiM0MzsgKgomIzQzOyAqIEV2ZXJ5d2hlcmUgZWxzZSBub3RoaW5nIGV2ZXIgcmVhZHMgdGhvc2UgYml0cywgYW5kIG9uIGhhcmR3YXJlIHdpdGhvdXQgYQomIzQzOyAqIGRpcnR5IGJpdCBsZWF2aW5nIHRoZW0gY2xlYW4gY29zdHMgYSBmYXVsdCBwZXIgcGFnZSBmb3Igbm90aGluZy4gVGhhdCBjb3ZlcnMKJiM0MzsgKiBzaG1lbSwgd2hpY2ggaGFzIG5vIGRpcnR5IHN0YXRlIGJlbG93IHRoZSBmb2xpby4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBjYW5fZGlydHlfd2hvbGVfYmF0Y2goc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBuciwKJiM0MzsJCQkJICBib29sIHByZWZhdWx0KQomIzQzO3sKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtJmd0O3ZtYTsKJiM0MzsKJiM0MzsJaWYgKCEodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1dSSVRFKSB8fCBwcmVmYXVsdCB8fCBuciA9PSAxKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gIXZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDthX29wcy0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXRfcHRlX3JhbmdlIC0gU2V0IGEgcmFuZ2Ugb2YgUFRFcyB0byBwb2ludCB0byBwYWdlcyBpbiBhIGZvbGlvLgogICogQHZtZjogRmF1bHQgZGVzY3JpcHRpb24uCkBAIC01NjM5LDYgJiM0Mzs1NjczLDcgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLSZndDt2bWE7CiAJYm9vbCB3cml0ZSA9IHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURTsKIAlib29sIHByZWZhdWx0ID0gIWluX3JhbmdlKHZtZi0mZ3Q7YWRkcmVzcywgYWRkciwgbnIgKiBQQUdFX1NJWkUpOwomIzQzOwlib29sIGRpcnR5X2JhdGNoID0gY2FuX2RpcnR5X3dob2xlX2JhdGNoKHZtZiwgbnIsIHByZWZhdWx0KTsKIAlwdGVfdCBlbnRyeTsKIAogCWZsdXNoX2ljYWNoZV9wYWdlcyh2bWEsIHBhZ2UsIG5yKTsKQEAgLTU2NDksMTAgJiM0Mzs1Njg0LDEzIEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywKIAllbHNlCiAJCWVudHJ5ID0gcHRlX3N3X21reW91bmcoZW50cnkpOwogCi0JaWYgKHdyaXRlKQotCQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwotCWVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkKJiM0MzsJaWYgKHdyaXRlKSB7CiYjNDM7CQlpZiAoZGlydHlfYmF0Y2gpCiYjNDM7CQkJZW50cnkgPSBwdGVfbWtkaXJ0eShlbnRyeSk7CiYjNDM7CQllbnRyeSA9IG1heWJlX21rd3JpdGUoZW50cnksIHZtYSk7CiYjNDM7CX0gZWxzZSBpZiAocHRlX3dyaXRlKGVudHJ5KSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7CiAJCWVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpOwomIzQzOwl9CiAJaWYgKHVubGlrZWx5KHZtZl9vcmlnX3B0ZV91ZmZkX3dwKHZtZikpKQogCQllbnRyeSA9IHB0ZV9ta3VmZmQoZW50cnkpOwogCS8qIGNvcHktb24td3JpdGUgcGFnZSAqLwpAQCAtNTY2NSw2ICYjNDM7NTcwMywxOCBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJfQogCXNldF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIGFkZHIsIHZtZi0mZ3Q7cHRlLCBlbnRyeSwgbnIpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwYWdlIHRoZSBmYXVsdCB3YXMgZm9yIGlzIGFib3V0IHRvIGJlIHN0b3JlZCB0bywgc28gZGlydHkgaXQKJiM0MzsJICogaGVyZSByYXRoZXIgdGhhbiBsZWF2ZSB0aGUgc3RvcmUgdG8gYSBzZWNvbmQgcGFnZSB0YWJsZSB3YWxrLCBvciB0bwomIzQzOwkgKiBhIHNlY29uZCBmYXVsdCB3aGVyZSB0aGUgZGlydHkgYml0IGlzIG1haW50YWluZWQgaW4gc29mdHdhcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRpcnR5X2JhdGNoKSB7CiYjNDM7CQlwdGVfdCAqcHRlcCA9IHZtZi0mZ3Q7cHRlICYjNDM7ICgodm1mLSZndDthZGRyZXNzIC0gYWRkcikgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CQlwdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCB2bWYtJmd0O2FkZHJlc3MsIHB0ZXAsCiYjNDM7CQkJCSAgICAgIHB0ZV9ta2RpcnR5KHB0ZXBfZ2V0KHB0ZXApKSwgMSk7CiYjNDM7CX0KJiM0MzsKIAkvKiBubyBuZWVkIHRvIGludmFsaWRhdGU6IGEgbm90LXByZXNlbnQgcGFnZSB3b24mIzM5O3QgYmUgY2FjaGVkICovCiAJdXBkYXRlX21tdV9jYWNoZV9yYW5nZSh2bWYsIHZtYSwgYWRkciwgdm1mLSZndDtwdGUsIG5yKTsKIH0KZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDZjOWM3YmE4OWI4YTkuLjM5YjU0YzI1YTlmYWIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtMjc1MSw2ICYjNDM7Mjc1MSwyMSBAQCBib29sIGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIH0KIEVYUE9SVF9TWU1CT0woZm9saW9fcmVkaXJ0eV9mb3Jfd3JpdGVwYWdlKTsKIAomIzQzOy8qCiYjNDM7ICogSGFuZCBhIGRpcnRpZWQgcmFuZ2Ugb2YgQGZvbGlvIHRvIHRoZSBmaWxlc3lzdGVtLiAgLSZndDtkaXJ0eV9mb2xpb19yYW5nZSgpIGNhbgomIzQzOyAqIGV4cHJlc3MgZXZlcnl0aGluZyAtJmd0O2RpcnR5X2ZvbGlvKCkgY2FuLCBzbyBhIGZpbGVzeXN0ZW0gdGhhdCBpbXBsZW1lbnRzIGl0CiYjNDM7ICogZG9lcyBub3QgbmVlZCBib3RoLCBhbmQgYSB3aG9sZS1mb2xpbyBkaXJ0eSBjb21lcyB0aHJvdWdoIGhlcmUgYXMgYSByYW5nZQomIzQzOyAqIGNvdmVyaW5nIHRoZSBmb2xpby4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBtYXBwaW5nX2RpcnR5X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJaWYgKCFtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UpCiYjNDM7CQlyZXR1cm4gbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcHBpbmctJmd0O2Ffb3BzLSZndDtkaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgb2ZmLCBsZW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9fbWFya19kaXJ0eSAtIE1hcmsgYSBmb2xpbyBhcyBiZWluZyBtb2RpZmllZC4KICAqIEBmb2xpbzogVGhlIGZvbGlvLgpAQCAtMjc4MiwxMyAmIzQzOzI3OTcsMzkgQEAgYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCSAqLwogCQlpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSkKIAkJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwotCQlyZXR1cm4gbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKJiM0MzsJCXJldHVybiBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLAomIzQzOwkJCQkJICAgZm9saW9fc2l6ZShmb2xpbykpOwogCX0KIAogCXJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKIH0KIEVYUE9SVF9TWU1CT0woZm9saW9fbWFya19kaXJ0eSk7CiAKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19tYXJrX2RpcnR5X3JhbmdlIC0gTWFyayBwYXJ0IG9mIGEgZm9saW8gYXMgYmVpbmcgbW9kaWZpZWQuCiYjNDM7ICogQGZvbGlvOiBUaGUgZm9saW8uCiYjNDM7ICogQG9mZjogT2Zmc2V0IG9mIHRoZSBtb2RpZmllZCByYW5nZSB3aXRoaW4gdGhlIGZvbGlvLgomIzQzOyAqIEBsZW46IExlbmd0aCBvZiB0aGUgbW9kaWZpZWQgcmFuZ2UuCiYjNDM7ICoKJiM0MzsgKiBMaWtlIGZvbGlvX21hcmtfZGlydHkoKSwgYnV0IHRlbGxzIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXIKJiM0MzsgKiBibG9jayB0aGF0IG9ubHkgW0BvZmYsIEBvZmYgJiM0MzsgQGxlbikgY2hhbmdlZCwgc28gd3JpdGViYWNrIGNhbiBza2lwIHRoZSByZXN0CiYjNDM7ICogb2YgdGhlIGZvbGlvLiAgRmlsZXN5c3RlbXMgd2l0aG91dCB0aGF0IHRyYWNraW5nIGRpcnR5IHRoZSB3aG9sZSBmb2xpby4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogVHJ1ZSBpZiB0aGUgZm9saW8gd2FzIG5ld2x5IGRpcnRpZWQsIGZhbHNlIGlmIGl0IHdhcyBhbHJlYWR5IGRpcnR5LgomIzQzOyAqLwomIzQzO2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseShtYXBwaW5nKSkgewomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpCiYjNDM7CQkJZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7CiYjNDM7CQlyZXR1cm4gbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywgb2ZmLCBsZW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogZm9saW9fbWFya19kaXJ0eSgpIGlzIHJhY3kgaWYgdGhlIGNhbGxlciBoYXMgbm8gcmVmZXJlbmNlIGFnYWluc3QKICAqIGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0LCBhbmQgaWYgdGhlIGZvbGlvIGlzIHVubG9ja2VkLiAgVGhpcyBpcyBiZWNhdXNlIGFub3RoZXIKQEAgLTI4NDQsNiAmIzQzOzI4ODUsNDEgQEAgdm9pZCBfX2ZvbGlvX2NhbmNlbF9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2NhbmNlbF9kaXJ0eSk7CiAKJiM0MzsvKgomIzQzOyAqIFdyaXRlLXByb3RlY3QgZXZlcnkgbWFwcGluZyBvZiBAZm9saW8gYW5kIGhhbmQgdGhlIGZpbGVzeXN0ZW0gdGhlIHBhcnRzIHRoYXQKJiM0MzsgKiB3ZXJlIGRpcnR5IGluIGEgcGFnZSB0YWJsZS4KJiM0MzsgKgomIzQzOyAqIFdpdGhvdXQgLSZndDtkaXJ0eV9mb2xpb19yYW5nZSgpIHRoZXJlIGlzIG5vd2hlcmUgdG8gcHV0IHBlci1ibG9jayBzdGF0ZSwgc28KJiM0MzsgKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90CiYjNDM7ICogYWxyZWFkeSBkaXJ0eSwgYmVjYXVzZSB0aGVuIHRoZSBkaXJ0eSB0cmFuc2l0aW9uIG5lZWRzIHRoZSBmdWxsIGFjY291bnRpbmcKJiM0MzsgKiBpbiBmb2xpb19tYXJrX2RpcnR5KCksIGFuZCBmb3IgYSBmb2xpbyB0b28gbGFyZ2UgZm9yIHRoZSBiaXRtYXAsIHdoaWNoIHRoZQomIzQzOyAqIHBhZ2UgY2FjaGUgZG9lcyBub3QgbWFrZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBmb2xpb19ta2NsZWFuX2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlERUNMQVJFX0JJVE1BUChtYXAsIDFVTCAmbHQ7Jmx0OyBNQVhfUEFHRUNBQ0hFX09SREVSKTsKJiM0MzsJdW5zaWduZWQgaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDsKJiM0MzsKJiM0MzsJaWYgKCFtYXBwaW5nLSZndDthX29wcy0mZ3Q7ZGlydHlfZm9saW9fcmFuZ2UgfHwgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8CiYjNDM7CSAgICBXQVJOX09OX09OQ0UobnIgJmd0OyAoMVVMICZsdDsmbHQ7IE1BWF9QQUdFQ0FDSEVfT1JERVIpKSkgewomIzQzOwkJaWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKQomIzQzOwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJpdG1hcF96ZXJvKG1hcCwgbnIpOwomIzQzOwlpZiAoIWZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIG1hcCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3NldF9iaXRyYW5nZShzdGFydCwgZW5kLCBtYXAsIG5yKSB7CiYjNDM7CQltYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLAomIzQzOwkJCQkgICAgKHNpemVfdClzdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZULAomIzQzOwkJCQkgICAgKHNpemVfdCkoZW5kIC0gc3RhcnQpICZsdDsmbHQ7IFBBR0VfU0hJRlQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIENsZWFyIGEgZm9saW8mIzM5O3MgZGlydHkgZmxhZywgd2hpbGUgY2FyaW5nIGZvciBkaXJ0eSBtZW1vcnkgYWNjb3VudGluZy4KICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9saW8gd2FzIHByZXZpb3VzbHkgZGlydHkuCkBAIC0yODc1LDkgJiM0MzsyOTUxLDkgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICoKIAkJICogV2UgdXNlIHRoaXMgc2VxdWVuY2UgdG8gbWFrZSBzdXJlIHRoYXQKIAkJICogIChhKSB3ZSBhY2NvdW50IGZvciBkaXJ0eSBzdGF0cyBwcm9wZXJseQotCQkgKiAgKGIpIHdlIHRlbGwgdGhlIGxvdy1sZXZlbCBmaWxlc3lzdGVtIHRvCi0JCSAqICAgICAgbWFyayB0aGUgd2hvbGUgZm9saW8gZGlydHkgaWYgaXQgd2FzCi0JCSAqICAgICAgZGlydHkgaW4gYSBwYWdldGFibGUuIE9ubHkgdG8gdGhlbgomIzQzOwkJICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB3aGljaAomIzQzOwkJICogICAgICBwYXJ0cyBvZiB0aGUgZm9saW8gd2VyZSBkaXJ0eSBpbiBhCiYjNDM7CQkgKiAgICAgIHBhZ2V0YWJsZS4gT25seSB0byB0aGVuCiAJCSAqICAoYykgY2xlYW4gdGhlIGZvbGlvIGFnYWluIGFuZCByZXR1cm4gMSB0bwogCQkgKiAgICAgIGNhdXNlIHRoZSB3cml0ZWJhY2suCiAJCSAqCkBAIC0yODk1LDggJiM0MzsyOTcxLDcgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICogYXMgYSBzZXJpYWxpemF0aW9uIHBvaW50IGZvciBhbGwgdGhlIGRpZmZlcmVudAogCQkgKiB0aHJlYWRzIGRvaW5nIHRoZWlyIHRoaW5ncy4KIAkJICovCi0JCWlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSkKLQkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwkJZm9saW9fbWtjbGVhbl9mb3JfaW8oZm9saW8sIG1hcHBpbmcpOwogCQkvKgogCQkgKiBXZSBjYXJlZnVsbHkgc3luY2hyb25pc2UgZmF1bHQgaGFuZGxlcnMgYWdhaW5zdAogCQkgKiBpbnN0YWxsaW5nIGEgZGlydHkgcHRlIGFuZCBtYXJraW5nIHRoZSBmb2xpbyBkaXJ0eQpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDFmNzJkMjc5YmE2OGYuLmFhZjQ1YWM3OWZhODQgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTExMDAsMTIgJiM0MzsxMTAwLDE4IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsCiAJcmV0dXJuIHJ3Yy5jb250ZW5kZWQgPyAtMSA6IHByYS5yZWZlcmVuY2VkOwogfQogCi1zdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKJiM0MztzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcDsKJiM0MzsJaW50IGNsZWFuZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywKJiM0MzsJCQkJdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKQogewotCWludCBjbGVhbmVkID0gMDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctJmd0O3ZtYTsKLQlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHB2bXctJmd0O2FkZHJlc3M7CiYjNDM7CXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7CiYjNDM7CWludCBjbGVhbmVkID0gMDsKIAogCS8qCiAJICogV2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uIE5vdGUgdGhhdApAQCAtMTEzNCw2ICYjNDM7MTE0MCwxNSBAQCBzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAkJCWlmICghcHRlX2RpcnR5KGVudHJ5KSAmYW1wOyZhbXA7ICFwdGVfd3JpdGUoZW50cnkpKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKGRpcnR5X21hcCAmYW1wOyZhbXA7IHB0ZV9kaXJ0eShlbnRyeSkpIHsKJiM0MzsJCQkJcGdvZmZfdCBpZHggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpIC0KJiM0MzsJCQkJCSAgICAgIHB2bXctJmd0O3Bnb2ZmOwomIzQzOwomIzQzOwkJCQkvKiBUaGUgd2FsayBvbmx5IHZpc2l0cyBwYWdlcyBvZiB0aGlzIGZvbGlvICovCiYjNDM7CQkJCVZNX1dBUk5fT05fT05DRShpZHggJmd0Oz0gcHZtdy0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJCQlfX3NldF9iaXQoaWR4LCBkaXJ0eV9tYXApOwomIzQzOwkJCX0KJiM0MzsKIAkJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyZXNzLCBwdGVfcGZuKGVudHJ5KSk7CiAJCQllbnRyeSA9IHB0ZXBfY2xlYXJfZmx1c2godm1hLCBhZGRyZXNzLCBwdGUpOwogCQkJZW50cnkgPSBwdGVfd3Jwcm90ZWN0KGVudHJ5KTsKQEAgLTExNTUsNiAmIzQzOzExNzAsOSBAQCBzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAkJCWlmICghcG1kX2RpcnR5KGVudHJ5KSAmYW1wOyZhbXA7ICFwbWRfd3JpdGUoZW50cnkpKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKGRpcnR5X21hcCAmYW1wOyZhbXA7IHBtZF9kaXJ0eShlbnRyeSkpCiYjNDM7CQkJCWJpdG1hcF9zZXQoZGlydHlfbWFwLCAwLCBwdm13LSZndDtucl9wYWdlcyk7CiYjNDM7CiAJCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsCiAJCQkJCSAgYWRkcmVzcyAmIzQzOyBIUEFHRV9QTURfU0laRSk7CiAJCQllbnRyeSA9IHBtZHBfaW52YWxpZGF0ZSh2bWEsIGFkZHJlc3MsIHBtZCk7CkBAIC0xMTgxLDkgJiM0MzsxMTk5LDkgQEAgc3RhdGljIGJvb2wgcGFnZV9ta2NsZWFuX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpCiB7CiAJREVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIFBWTVdfU1lOQyk7Ci0JaW50ICpjbGVhbmVkID0gYXJnOwomIzQzOwlzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSAqc3RhdGUgPSBhcmc7CiAKLQkqY2xlYW5lZCAmIzQzOz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoJmFtcDtwdm13KTsKJiM0MzsJc3RhdGUtJmd0O2NsZWFuZWQgJiM0Mzs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKCZhbXA7cHZtdywgc3RhdGUtJmd0O2RpcnR5X21hcCk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTExOTYsMTIgJiM0MzsxMjE0LDIzIEBAIHN0YXRpYyBib29sIGludmFsaWRfbWtjbGVhbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19ta2NsZWFuX2RpcnR5bWFwIC0gV3JpdGUtcHJvdGVjdCBhIGZvbGlvIGFuZCByZXBvcnQgd2hhdCB3YXMgZGlydHkuCiYjNDM7ICogQGZvbGlvOiBUaGUgZm9saW8gdG8gY2xlYW4uCiYjNDM7ICogQGRpcnR5X21hcDogQml0bWFwIG9mIGF0IGxlYXN0IGZvbGlvX25yX3BhZ2VzKEBmb2xpbykgYml0cywgb3IgTlVMTC4KJiM0MzsgKgomIzQzOyAqIFdyaXRlLXByb3RlY3RzIGFuZCBjbGVhbnMgZXZlcnkgbWFwcGluZyBvZiBAZm9saW8uICBXaXRoIEBkaXJ0eV9tYXAsIHNldHMgYQomIzQzOyAqIGJpdCBmb3IgZWFjaCBwYWdlIHdob3NlIGVudHJ5IHdhcyBkaXJ0eTsgYSBQTUQtbWFwcGVkIGZvbGlvIGhhcyBvbmUgZGlydHkKJiM0MzsgKiBiaXQgZm9yIGFsbCBvZiBpdCwgc28gZXZlcnkgcGFnZSBpcyByZXBvcnRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIG51bWJlciBvZiBwYWdlIHRhYmxlIGVudHJpZXMgY2xlYW5lZC4KJiM0MzsgKi8KJiM0MztpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApCiB7Ci0JaW50IGNsZWFuZWQgPSAwOwomIzQzOwlzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSBzdGF0ZSA9IHsgLmRpcnR5X21hcCA9IGRpcnR5X21hcCB9OwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCXN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7Ci0JCS5hcmcgPSAodm9pZCAqKSZhbXA7Y2xlYW5lZCwKJiM0MzsJCS5hcmcgPSAodm9pZCAqKSZhbXA7c3RhdGUsCiAJCS5ybWFwX29uZSA9IHBhZ2VfbWtjbGVhbl9vbmUsCiAJCS5pbnZhbGlkX3ZtYSA9IGludmFsaWRfbWtjbGVhbl92bWEsCiAJfTsKQEAgLTEyMTcsNyAmIzQzOzEyNDYsMTIgQEAgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbykKIAogCXJtYXBfd2Fsayhmb2xpbywgJmFtcDtyd2MpOwogCi0JcmV0dXJuIGNsZWFuZWQ7CiYjNDM7CXJldHVybiBzdGF0ZS5jbGVhbmVkOwomIzQzO30KJiM0MzsKJiM0MztpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fbWtjbGVhbik7CiAKQEAgLTEyNDEsNyAmIzQzOzEyNzUsNyBAQCBzdGF0aWMgYm9vbCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJLmZsYWdzCQk9IFBWTVdfU1lOQywKIAl9OwogCi0Jc3RhdGUtJmd0O2NsZWFuZWQgJiM0Mzs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKCZhbXA7cHZtdyk7CiYjNDM7CXN0YXRlLSZndDtjbGVhbmVkICYjNDM7PSBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcsIE5VTEwpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMzI0LDcgJiM0MzsxMzU4LDcgQEAgaW50IHBmbl9ta2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBwZ29mZl90IHBnb2ZmLAogCXB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTsKIAlWTV9CVUdfT05fVk1BKHB2bXcuYWRkcmVzcyA9PSAtRUZBVUxULCB2bWEpOwogCi0JcmV0dXJuIHBhZ2Vfdm1hX21rY2xlYW5fb25lKCZhbXA7cHZtdyk7CiYjNDM7CXJldHVybiBwYWdlX3ZtYV9ta2NsZWFuX29uZSgmYW1wO3B2bXcsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2ZvbGlvX21vZF9zdGF0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuciwgaW50IG5yX3BtZG1hcHBlZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3ViLUZvbGlvIERpcnR5IFRyYWNraW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGFpbXMgdG8gaW50cm9kdWNlIGdyYW51bGFyIHRyYWNraW5nIG9mIGRpcnR5IGRhdGEgd2l0aGluIGxhcmdlIGZvbGlvcywgZ29pbmcgYmV5b25kIHRoZSB0cmFkaXRpb25hbCBmb2xpby1sZXZlbCBkaXJ0eSBmbGFnLiBUaGlzIGxvb2tzIGxpa2UgYSBuZWNlc3Nhcnkgb3B0aW1pemF0aW9uIGZvciBtb2Rlcm4gc3RvcmFnZSBzeXN0ZW1zIGFuZCBzaG91bGQgbGVhZCB0byBtb3JlIGVmZmljaWVudCB3cml0ZWJhY2sgYW5kIGNhY2hpbmcgYmVoYXZpb3IuCgpIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIEkgcmVhZCB0aHJvdWdoIHRoZSBjaGFuZ2VzLiAgSXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgYXBwcm9hY2gsIGltcGxlbWVudGluZyBgZGlydHlfZm9saW9fcmFuZ2VgIHdpdGhpbiB0aGUgYGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc2AuIFRoZSBtYWluIGlkZWEgc2VlbXMgdG8gYmUgdG8gaW50cm9kdWNlIGEgbWVjaGFuaXNtLCBgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VgLCBhbmQgdXNlIGl0IHRvIHRyYWNrIGRpcnR5IHJlZ2lvbnMgd2l0aGluIGEgZm9saW8sIHdoaWNoIGlzIHBhcnRpY3VsYXJseSByZWxldmFudCBmb3IgaGFuZGxpbmcgbGFyZ2VyIGZvbGlvcy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZToKCiogICBgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VgIGlzIGludHJvZHVjZWQgYW5kIGNhbGxlZCBieSBgaW9tYXBfZGlydHlfZm9saW9gLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgZGVsZWdhdGlvbiBvZiB0aGUgZGlydHkgcmFuZ2UgbWFuYWdlbWVudCB0byB0aGUgbmV3IGZ1bmN0aW9uLiBNb2RpZmljYXRpb25zIGluIGBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXJgIGFuZCBgaW9tYXBfcGFnZV9ta3dyaXRlYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGNvbnN1bWVycy4KKiAgIFRoZSBgeGZzYCBmaWxlc3lzdGVtIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW5kaWNhdGVzIGEgcmVhbC13b3JsZCBhcHBsaWNhdGlvbi4KKiAgIEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBhZGRlZCB0byB0aGUgYGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc2Agc3RydWN0LCBhbmQgcmVsZXZhbnQgZGVjbGFyYXRpb25zIGFyZSBpbmNsdWRlZC4KKiAgIFRoZSBgbW1gIGNvZGUgbm93IHVzZXMgdGhlIGBkaXJ0eV9mb2xpb19yYW5nZWAgZnVuY3Rpb24gaW4gc2V2ZXJhbCBwbGFjZXMsIGluY2x1ZGluZyBgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2VgLCBgY2FuX2RpcnR5X3dob2xlX2JhdGNoYCwgYHNldF9wdGVfcmFuZ2VgLCBgbWFwcGluZ19kaXJ0eV9yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5YCwgYW5kIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgc3ViLWZvbGlvIGRpcnR5IHRyYWNraW5nIGlzIGltcGxlbWVudGVkLgoqICAgYGZvbGlvX21rY2xlYW5fZm9yX2lvYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IGFwcGVhcnMgdG8gdXRpbGl6ZSBhIGJpdG1hcCAoYG1hcGApIHRvIHJlcHJlc2VudCB0aGUgZGlydHkgc3RhdGUgb2YgaW5kaXZpZHVhbCBwYWdlcyB3aXRoaW4gYSBmb2xpbywgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGtleSB0byB0aGUgc3ViLWZvbGlvIHRyYWNraW5nLiBJIHdvbmRlciBhYm91dCBpdHMgdXNhZ2UgYW5kIHBvdGVudGlhbCBmb3IgaXNzdWVzLgoqICAgYG1tL3JtYXAuY2AgaW50cm9kdWNlcyBgc3RydWN0IG1rY2xlYW5fc3RhdGVgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gVGhpcyBzdHJ1Y3R1cmUgc2VlbXMgZGVzaWduZWQgdG8gZmFjaWxpdGF0ZSBjbGVhbmluZyBhbmQgcG90ZW50aWFsbHkgdW5tYXBwaW5nIHBhZ2VzIG9yIHN1Yi1wYWdlIHJlZ2lvbnMuCgpOb3csIGxldCBtZSB6b29tIGluIG9uIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gVGhlIHVzZSBvZiBhIGJpdG1hcCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gIHJhaXNlcyBhIHF1ZXN0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIG9mIHRoZSBgbWFwYCBiaXRtYXAuCgpgYGBjCiAgICBERUNMQVJFX0JJVE1BUChtYXAsIDFVTCAmbHQ7Jmx0OyBNQVhfUEFHRUNBQ0hFX09SREVSKTsKICAgIHVuc2lnbmVkIGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKICAgIHVuc2lnbmVkIGludCBzdGFydCwgZW5kOwoKICAgIGlmICghbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O2RpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fAogICAgICAgIFdBUk5fT05fT05DRShuciAmZ3Q7ICgxVUwgJmx0OyZsdDsgTUFYX1BBR0VDQUNIRV9PUkRFUikpKSB7CiAgICAgICAgaWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKQogICAgICAgICAgICBmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYml0bWFwX3plcm8obWFwLCBucik7CiAgICBpZiAoIWZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIG1hcCkpCiAgICAgICAgcmV0dXJuOwoKICAgIGZvcl9lYWNoX3NldF9iaXRyYW5nZShzdGFydCwgZW5kLCBtYXAsIG5yKSB7CiAgICAgICAgbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpc3RhcnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpKGVuZCAtIHN0YXJ0KSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKICAgIH0KYGBgCgpUaGUgY29kZSB6ZXJvZXMgYG5yYCBiaXRzIG9mIHRoZSBgbWFwYC4gVGhlIGxvb3AgYGZvcl9lYWNoX3NldF9iaXRyYW5nZShzdGFydCwgZW5kLCBtYXAsIG5yKWAgaXRlcmF0ZXMgb3ZlciB0aGUgc2V0IGJpdHMgd2l0aGluIHRoZSBgbWFwYC4gSXQgc2VlbXMgdG8gbWUgdGhhdCBgYml0bWFwX3plcm9gIGNsZWFycyBgbWFwYCBmb3IgYG5yYCBwYWdlcywgYW5kIHRoZSBsb29wIHVzZXMgdGhlIGNsZWFyZWQgYG1hcGAuIFRoZSB1c2Ugb2YgYG5yYCBzaG91bGQgYm91bmQgdGhlIGJpdG1hcCwgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBjb2RlIHJlbGllcyBvbiB0aGUgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIGJpdG1hcCByb3V0aW5lcy4KTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgYml0bWFwIGFjY2VzcyB3aXRoaW4gYGZvcl9lYWNoX3NldF9iaXRyYW5nZWAgcmVzcGVjdHMgdGhlIGJvdW5kcyBzZXQgYnkgYG5yYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGJpdG1hcF96ZXJvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBgYml0bWFwX3plcm9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBiaXRtYXBfemVyb2AuIEdpdmVuIGl0cyBmdW5jdGlvbiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgZ29pbmcgdG8gYmUgcmVsYXRlZCB0byBiaXQgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGJpdG1hcCBtYW5pcHVsYXRpb24gbWFjcm9zIGFuZCBmdW5jdGlvbnMuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcsIGFuZCBob3BlZnVsbHksIEkmIzM5O2xsIGZpbmQgaXRzIGRlZmluaXRpb24gb3IgYXQgbGVhc3QgcmVsYXRlZCB1dGlsaXR5IGZ1bmN0aW9ucyB0aGVyZS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvLCBidXQgSSB3b24mIzM5O3QgcnVsZSBvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGl0IGJlaW5nIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gUmVnYXJkbGVzcywgYGJpdG1hcC5oYCBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGRldGFpbHMgb24gaG93IGl0IGFjdHVhbGx5IGRvZXMgaXRzIGpvYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX3plcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JpdG1hcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUaW1lIHRvIEludmVzdGlnYXRlIGBiaXRtYXBfemVyb2AqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBob3cgYGJpdG1hcF96ZXJvYCBpcyBkZWZpbmVkIG9yIHVzZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBzdGFuZGFyZCBoZWFkZXIgZmlsZSBmb3IgYml0bWFwIGRlZmluaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBgaW5jbHVkZS9saW51eC9iaXRtYXAuaGAgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBjb3JlIGRhdGEgc3RydWN0dXJlIGFuZCB1dGlsaXR5LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgc2hvdWxkIHlpZWxkIGEgcXVpY2sgcmVzdWx0IHdpdGggdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIG9yIHVzYWdlcy4gSG9wZWZ1bGx5IGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Yml0bWFwX3plcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JpdG1hcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYml0bWFwLmg9MTc9c3RydWN0IGRldmljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTQyLSAqXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjQzOiAqICBiaXRtYXBfemVybyhkc3QsIG5iaXRzKSAgICAgICAgICAgICAgICAgICAgICpkc3QgPSAwVUxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNDQtICogIGJpdG1hcF9maWxsKGRzdCwgbmJpdHMpICAgICAgICAgICAgICAgICAgICAgKmRzdCA9IH4wVUxcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTkzLSAqXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjk0OiAqIE5vdGUsIGJpdG1hcF96ZXJvKCkgYW5kIGJpdG1hcF9maWxsKCkgb3BlcmF0ZSBvdmVyIHRoZSByZWdpb24gb2ZcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtOTUtICogdW5zaWduZWQgbG9uZ3MsIHRoYXQgaXMsIGJpdHMgYmVoaW5kIGJpdG1hcCB0aWxsIHRoZSB1bnNpZ25lZCBsb25nXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0yMzM9dm9pZCBiaXRtYXBfZm9sZCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9yaWcsXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNDAtXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI0MTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYml0bWFwX3plcm8odW5zaWduZWQgbG9uZyAqZHN0LCB1bnNpZ25lZCBpbnQgbmJpdHMpXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI0Mi17XG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD02MzQ9dm9pZCBiaXRtYXBfc2NhdHRlcih1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTYzOS1cbmluY2x1ZGUvbGludXgvYml0bWFwLmg6NjQwOlx0Yml0bWFwX3plcm8oZHN0LCBuYml0cyk7XG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTY0MS1cbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oPTY5MT12b2lkIGJpdG1hcF9nYXRoZXIodW5zaWduZWQgbG9uZyAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC02OTYtXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjY5NzpcdGJpdG1hcF96ZXJvKGRzdCwgbmJpdHMpO1xuaW5jbHVkZS9saW51eC9iaXRtYXAuaC02OTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCaXRtYXAgSGVhZGVyKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBiaXRtYXBzIGFyZSBiZWluZyBoYW5kbGVkLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgYGluY2x1ZGUvbGludXgvYml0bWFwLmhgIGhlYWRlciBmaWxlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBiaXQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWFjcm9zIGluIHRoaXMgaGVhZGVyIGlzIGVzc2VudGlhbCBmb3IsIHdlbGwsIHByZXR0eSBtdWNoIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI0MCwgYXMgYSBzdGFydGluZyBwb2ludC4gVGhhdCBzZWVtcyB0byBiZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8ganVtcCBpbiBhbmQgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvbnRleHQgb2YgYml0IG9wZXJhdGlvbnMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJyYW5jaCBvdXQgdG8gc2VlIGhvdyB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCBpcyBpbXBhY3RpbmcgdGhlIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9iaXRtYXAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XG4gMjQxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJpdG1hcF96ZXJvKHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgaW50IG5iaXRzKVxuIDI0MjpcdHtcbiAyNDM6XHRcdHVuc2lnbmVkIGludCBsZW4gPSBiaXRtYXBfc2l6ZShuYml0cyk7XG4gMjQ0Olx0XG4gMjQ1Olx0XHRpZiAoc21hbGxfY29uc3RfbmJpdHMobmJpdHMpKVxuIDI0NjpcdFx0XHQqZHN0ID0gMDtcbiAyNDc6XHRcdGVsc2VcbiAyNDg6XHRcdFx0bWVtc2V0KGRzdCwgMCwgbGVuKTtcbiAyNDk6XHR9XG4gMjUwOlx0XG4gMjUxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJpdG1hcF9maWxsKHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgaW50IG5iaXRzKVxuIDI1MjpcdHtcbiAyNTM6XHRcdHVuc2lnbmVkIGludCBsZW4gPSBiaXRtYXBfc2l6ZShuYml0cyk7XG4gMjU0Olx0XG4gMjU1Olx0XHRpZiAoc21hbGxfY29uc3RfbmJpdHMobmJpdHMpKVxuIDI1NjpcdFx0XHQqZHN0ID0gfjBVTDtcbiAyNTc6XHRcdGVsc2VcbiAyNTg6XHRcdFx0bWVtc2V0KGRzdCwgMHhmZiwgbGVuKTtcbiAyNTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjcwCgkJCQkJCQlvdXRwdXQ6IDI0NgoJCQkJCQkJdGhvdWdodHM6IDExMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN0YXJ0cyB3aXRoIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIGBiaXRtYXBfc2l6ZWAgY2FsY3VsYXRlcyB0aGUgcmVxdWlyZWQgbWVtb3J5IGZvciB0aGUgYml0bWFwLCBlbnN1cmluZyB3ZSYjMzk7cmUgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UuIFRoZSBgZm9yX2VhY2hfc2V0X2JpdHJhbmdlYCBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGNvbnN0cmFpbmVkIHRvIHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBiaXRtYXAsIGdpdmVuIHRoYXQgaXQmIzM5O3MgdXNpbmcgdGhlIGNvcnJlY3QgY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIHRoZSBgbWFwYCB2YXJpYWJsZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KCk5leHQsIEkgZXhhbWluZWQgdGhlIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYCBmdW5jdGlvbiBhbmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgc3RhdGVgIHN0cnVjdC4gYHN0YXRlLmNsZWFuZWRgIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgdHJhY2tpbmcgY2xlYW5lZCBwYWdlcy4KClRoZW4sIHRoZSBmb2N1cyBzaGlmdHMgdG8gYGlvbWFwX3BhZ2VfbWt3cml0ZWAuIEhlcmUsIGBkaXJ0eV9vZmZgIGFuZCBgZGlydHlfbGVuYCBhcmUgY2FsY3VsYXRlZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkgYXJlIGV2ZXIgdXNlZC4gVGhpcyBsb29rcyBzb2xpZC4gVGhlIGNvZGUgaXMgY2FyZWZ1bCB0byBoYW5kbGUgdGhlIHJhbmdlIHdpdGhpbiB0aGUgcGFnZSBjb3JyZWN0bHksIGFjY291bnRpbmcgZm9yIHBvdGVudGlhbCByYWNpbmcgdHJ1bmNhdGVzLiBUaGUgbG9naWMgc2VlbXMgcm9idXN0LgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4gVGhpcyBwYXRjaCBvcHRpbWl6ZXMgd3JpdGViYWNrIGFuZCBkaXJ0eSBwYWdlIHRyYWNraW5nIGZvciBsYXJnZSBmb2xpb3Mgd2l0aGluIFhGUy9pb21hcC4gSW5zdGVhZCBvZiBtYXJraW5nIHRoZSBlbnRpcmUgZm9saW8gZGlydHksIGl0IHRyYWNrcyBwZXItcGFnZSBkaXJ0eSBzdGF0ZSBhbmQgcGFzc2VzIGEgc3BlY2lmaWMgcmFuZ2UgdG8gdGhlIGZpbGVzeXN0ZW0mIzM5O3MgY2FsbGJhY2tzLCB3aGljaCB1cGRhdGVzIHRoZSBpb21hcCBzdWItcGFnZS9zdWItZm9saW8gZGlydHkgc3RhdGUuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCBwb3RlbnRpYWwgS01TQU4gY29uY2VybnM6CgoxLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uczoqKiBBcmUga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLiBUaGlzIGlzIGludGVybmFsIE1NIGFuZCBmaWxlc3lzdGVtIGRpcnR5IHRyYWNraW5nLCBzbyB0aGVyZSBhcmUgbm8gY29weS10by11c2VyIG9wZXJhdGlvbnMgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBBcmUgdGhlcmUgY29uZGl0aW9ucyBvciBicmFuY2hlcyB0aGF0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uIEFsbCB2YXJpYWJsZXMsIGxpa2UgYGRpcnR5X29mZmAsIGBkaXJ0eV9sZW5gLCBgc3RhdGVgLCBhbmQgYG1hcGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBJcyB0aGVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vLiBgaWZzX2FsbG9jYCBpcyBjYWxsZWQgYmVmb3JlLCBhbmQgdGhlIGRhdGEgaXMgYWxsb2NhdGVkIGNvcnJlY3RseS4KNC4gICoqQnVmZmVyIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkPyBOby4gVGhlIGZvbGlvIGRhdGEgYW5kIGJ1ZmZlcnMgYXJlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLgoKR2l2ZW4gdGhlIEtNU0FOIGd1aWRlbGluZXMsIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQuIFN0YW5kYXJkIEtBU0FOIGNoZWNrcywgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgd291bGQgbGlrZWx5IGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIGFyZSBtb3JlIGxpa2VseSBsb2dpYyBidWdzIHJlbGF0ZWQgdG8gcmFuZ2UgY2FsY3VsYXRpb25zLCBsb2NraW5nIGlzc3Vlcywgb3IgcmFjZSBjb25kaXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50L3dyaXRlYmFjaywgd2hpY2ggY2FuIGJlIGNhdWdodCB2aWEgdGVzdGluZyBvciBkZWJ1Z2dpbmcuCgpUaGVyZWZvcmUsICoqTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGZhbHNlLioqIEkmIzM5O20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgcmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmFuZ2UtYmFzZWQgZGlydHkgdHJhY2tpbmcgZm9yIGxhcmdlIGZvbGlvcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpb21hcCAoc3BlY2lmaWNhbGx5IGBkaXJ0eV9mb2xpb19yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYW5kIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYCkuXG5cbjEuIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMuIEFsbCBuZXcgbG9jYWwgdmFyaWFibGVzIChgZGlydHlfb2ZmYCwgYGRpcnR5X2xlbmAsIGBzdGF0ZWAsIGFuZCBzdGFjayBiaXRtYXAgYG1hcGAgaW4gYGZvbGlvX21rY2xlYW5fZm9yX2lvYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGBiaXRtYXBfemVyb2AsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGV0Yy4pLiBUaGVyZSBhcmUgbm8gaW5mby1sZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdmVjdG9ycy5cbjIuIEtBU0FOIC8gc3RhbmRhcmQgZGV0ZWN0b3JzIGFwcGxpY2FiaWxpdHk6IFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSByYW5nZSBjYWxjdWxhdGlvbnMsIGJpdG1hc2sgb3BlcmF0aW9ucywgb3IgcGFnZSB0YWJsZSB3YWxrcyB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhc3NlcnRpb25zL2xvY2tpbmcgaXNzdWVzLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhbmdlLWJhc2VkIGRpcnR5IHRyYWNraW5nIGZvciBsYXJnZSBmb2xpb3MgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaW9tYXAgKHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLCBgZm9saW9fbWFya19kaXJ0eV9yYW5nZWAsIGFuZCBgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcGApLlxuXG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBBbGwgbmV3IGxvY2FsIHZhcmlhYmxlcyAoYGRpcnR5X29mZmAsIGBkaXJ0eV9sZW5gLCBgc3RhdGVgLCBhbmQgc3RhY2sgYml0bWFwIGBtYXBgIGluIGBmb2xpb19ta2NsZWFuX2Zvcl9pb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChgYml0bWFwX3plcm9gLCBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBldGMuKS4gVGhlcmUgYXJlIG5vIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHZlY3RvcnMuXG4yLiBLQVNBTiAvIHN0YW5kYXJkIGRldGVjdG9ycyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gcmFuZ2UgY2FsY3VsYXRpb25zLCBiaXRtYXNrIG9wZXJhdGlvbnMsIG9yIHBhZ2UgdGFibGUgd2Fsa3Mgd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYXNzZXJ0aW9ucy9sb2NraW5nIGlzc3Vlcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMjo0MS4wMDQxMjY5MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDAxMzcxMjM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaXJ0eV9mb2xpb19yYW5nZVwiLFxuICAgIFwiaW9tYXBfcGFnZV9ta3dyaXRlXCIsXG4gICAgXCJmb2xpb19tYXJrX2RpcnR5X3JhbmdlXCIsXG4gICAgXCJmb2xpb19ta2NsZWFuX2RpcnR5bWFwXCIsXG4gICAgXCJmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmFuZ2UtYmFzZWQgZGlydHkgdHJhY2tpbmcgZm9yIGxhcmdlIGZvbGlvcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpb21hcCAoc3BlY2lmaWNhbGx5IGBkaXJ0eV9mb2xpb19yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYW5kIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYCkuXFxuXFxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcy4gQWxsIG5ldyBsb2NhbCB2YXJpYWJsZXMgKGBkaXJ0eV9vZmZgLCBgZGlydHlfbGVuYCwgYHN0YXRlYCwgYW5kIHN0YWNrIGJpdG1hcCBgbWFwYCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoYGJpdG1hcF96ZXJvYCwgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZXRjLikuIFRoZXJlIGFyZSBubyBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2ZWN0b3JzLlxcbjIuIEtBU0FOIC8gc3RhbmRhcmQgZGV0ZWN0b3JzIGFwcGxpY2FiaWxpdHk6IFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSByYW5nZSBjYWxjdWxhdGlvbnMsIGJpdG1hc2sgb3BlcmF0aW9ucywgb3IgcGFnZSB0YWJsZSB3YWxrcyB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhc3NlcnRpb25zL2xvY2tpbmcgaXNzdWVzLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdWItZm9saW8gcmFuZ2UgZGlydHlpbmcgdmlhIC1cXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UsIGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoKSwgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCgpLCBhbmQgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UoKSBmb3IgWEZTL2lvbWFwLiBJdCBtb2RpZmllcyBjb3JlIE1NIGRpcnR5IGZvbGlvIHRyYWNraW5nLCB3cml0ZS1wcm90ZWN0L2NsZWFuIHRyYW5zaXRpb25zIGluIHdyaXRlYmFjayAoZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKSwgcm1hcCBQVEUvUE1EIGRpcnR5IHdhbGssIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBzaGFyZWQgbWFwcGluZ3MuIFRoZXNlIHJlYWNoYWJsZSBNTSBhbmQgZmlsZXN5c3RlbSBwYXRocyB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjQxLjAwNDEzMTg5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjU5NTA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA1MTliNDYxYzliM2ZkZWNhYTg4MGUwYzkzYjRkYTk5Nzc1MWMxYjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwNDowMjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xcbmluZGV4IDBhNWViZmRhOTBmMTIuLjhkOGE4YWNhYjAxYWMgMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xcbisrKyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcXG5AQCAtODQ3LDE1ICs4NDcsMTkgQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XFxuIFxcbi1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitib29sIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbiB7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRzaXplX3QgbGVuID0gZm9saW9fc2l6ZShmb2xpbyk7XFxuLVxcbi1cXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcXG4tXFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xcbitcXHRpZnNfYWxsb2MobWFwcGluZy1cXHUwMDNlaG9zdCwgZm9saW8sIDApO1xcbitcXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZiwgbGVuKTtcXG4gXFx0cmV0dXJuIGZpbGVtYXBfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKTtcXG4rXFxuK2Jvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLCBmb2xpb19zaXplKGZvbGlvKSk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlydHlfZm9saW8pO1xcbiBcXG4gc3RhdGljIHZvaWRcXG5AQCAtMTgwNCw3ICsxODA4LDcgQEAgaW9tYXBfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfdHJ1bmNhdGVfcGFnZSk7XFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGRpcnR5X29mZiwgc2l6ZV90IGRpcnR5X2xlbilcXG4ge1xcbiBcXHRsb2ZmX3QgbGVuZ3RoID0gaW9tYXBfbGVuZ3RoKGl0ZXIpO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC0xODE3LDcgKzE4MjEsNyBAQCBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4gXFx0XFx0YmxvY2tfY29tbWl0X3dyaXRlKGZvbGlvLCAwLCBsZW5ndGgpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKTtcXG4tXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIGRpcnR5X29mZiwgZGlydHlfbGVuKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xcbkBAIC0xODMyLDYgKzE4MzYsNyBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxcbiBcXHRcXHQucHJpdmF0ZVxcdD0gcHJpdmF0ZSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVxcdTAwM2VwYWdlKTtcXG4rXFx0c2l6ZV90IGRpcnR5X29mZiwgZGlydHlfbGVuO1xcbiBcXHRzc2l6ZV90IHJldDtcXG4gXFxuIFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbkBAIC0xODQwLDggKzE4NDUsMjIgQEAgdm1fZmF1bHRfdCBpb21hcF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHRpdGVyLnBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XFxuIFxcdGl0ZXIubGVuID0gcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQmxvY2tzIGFyZSBzdGlsbCBhbGxvY2F0ZWQgZm9yIHRoZSB3aG9sZSBmb2xpbywgYnV0IG9ubHkgdGhlIHBhZ2VcXG4rXFx0ICogdGhlIGZhdWx0IHdhcyBmb3IgaGFzIGJlZW4gd3JpdHRlbiwgc28gdGhhdCBpcyBhbGwgdGhhdCBoYXMgdG8gYmVcXG4rXFx0ICogd3JpdHRlbiBiYWNrLiAgQSByYWNpbmcgdHJ1bmNhdGUgY2FuIGxlYXZlIHRoYXQgcGFnZSBiZXlvbmQgaV9zaXplLFxcbitcXHQgKiBhbmQgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRpcnR5LlxcbitcXHQgKi9cXG4rXFx0ZGlydHlfb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cXHUwMDNlcGFnZSkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4rXFx0aWYgKGRpcnR5X29mZiBcXHUwMDNjIHJldClcXG4rXFx0XFx0ZGlydHlfbGVuID0gbWluX3Qoc2l6ZV90LCBQQUdFX1NJWkUsIHJldCAtIGRpcnR5X29mZik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGlydHlfbGVuID0gMDtcXG4rXFxuIFxcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcXHUwMDI2aXRlciwgb3BzKSkgXFx1MDAzZSAwKVxcbi1cXHRcXHRpdGVyLnN0YXR1cyA9IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihcXHUwMDI2aXRlciwgZm9saW8pO1xcbitcXHRcXHRpdGVyLnN0YXR1cyA9IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihcXHUwMDI2aXRlciwgZm9saW8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXFxuaW5kZXggNzRhNjA4OWFiYWRmOS4uNjAwZTdkZTJlNTk5YyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xcbisrKyBiL2ZzL3hmcy94ZnNfYW9wcy5jXFxuQEAgLTg2Myw3ICs4NjMsNyBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5yZWFkX2ZvbGlvXFx0XFx0PSB4ZnNfdm1fcmVhZF9mb2xpbyxcXG4gXFx0LnJlYWRhaGVhZFxcdFxcdD0geGZzX3ZtX3JlYWRhaGVhZCxcXG4gXFx0LndyaXRlcGFnZXNcXHRcXHQ9IHhmc192bV93cml0ZXBhZ2VzLFxcbi1cXHQuZGlydHlfZm9saW9cXHRcXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxcbitcXHQuZGlydHlfZm9saW9fcmFuZ2VcXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlLFxcbiBcXHQucmVsZWFzZV9mb2xpb1xcdFxcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG4gXFx0LmludmFsaWRhdGVfZm9saW9cXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXFxuIFxcdC5ibWFwXFx0XFx0XFx0PSB4ZnNfdm1fYm1hcCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuaW5kZXggMDcyZDhjZDA5YTBiMi4uMWQ5OGI2YzBiODgwNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtNDA2LDYgKzQwNiw5IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMge1xcbiBcXG4gXFx0LyogTWFyayBhIGZvbGlvIGRpcnR5LiAgUmV0dXJuIHRydWUgaWYgdGhpcyBkaXJ0aWVkIGl0ICovXFxuIFxcdGJvb2wgKCpkaXJ0eV9mb2xpbykoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGZvbGlvICopO1xcbitcXHQvKiBNYXJrIFtvZmYsIG9mZiArIGxlbikgb2YgYSBmb2xpbyBkaXJ0eSAqL1xcbitcXHRib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xcbiBcXG4gXFx0dm9pZCAoKnJlYWRhaGVhZCkoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICopO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuaW5kZXggYmM3YWU2MzI3ZGJmOC4uM2NmMmFjNzUxNDA5YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG5AQCAtNDQzLDYgKzQ0Myw4IEBAIHN0cnVjdCBmb2xpbyAqaW9tYXBfZ2V0X2ZvbGlvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuKTtcXG4gYm9vbCBpb21hcF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9mbGFncyk7XFxuIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTtcXG4gYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xcbiB2b2lkIGlvbWFwX2ZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGludCBpb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA4N2ZlYWE1YTJiNzgwLi43NjI4MjYyYzE3ZTE0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC0zMzM3LDYgKzMzMzcsNyBAQCBzdHJ1Y3Qga3ZlYztcXG4gc3RydWN0IHBhZ2UgKmdldF9kdW1wX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKmxvY2tlZCk7XFxuIFxcbiBib29sIGZvbGlvX21hcmtfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcXG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5X2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGJvb2wgc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X3BhZ2VfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcXG5pbmRleCA4ZGMwODcxZTVmMDAxLi42ZmMwYTYwMjAyNTI3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcXG5AQCAtOTI3LDYgKzkyNyw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2xlYW5lZCBQVEVzLlxcbiAgKi9cXG4gaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICopO1xcbitpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApO1xcbiBcXG4gaW50IG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuQEAgLTk5MCw2ICs5OTEsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gI2VuZGlmXFx0LyogQ09ORklHX01NVSAqL1xcbiBcXG4gI2VuZGlmXFx0LyogX0xJTlVYX1JNQVBfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggOGRhMGY5NDUxNDFiNC4uMjdhMDU5ZTBjMDE2ZiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTM3NzgsMTAgKzM3NzgsMTkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXFx1MDAzZXBhZ2UpO1xcbitcXHRzaXplX3Qgb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cXHUwMDNlcGFnZSkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4gXFx0Ym9vbCBkaXJ0aWVkO1xcbiBcXHRib29sIHBhZ2VfbWt3cml0ZSA9IHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VwYWdlX21rd3JpdGU7XFxuIFxcbi1cXHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgUE1EIGVudHJ5IGhhcyBvbmUgZGlydHkgYml0IGZvciB0aGUgd2hvbGUgZm9saW8sIHNvIHRoZXJlIGlzIG5vXFxuK1xcdCAqIGZpbmVyIGluZm9ybWF0aW9uIHRvIHBhc3Mgb24uIEEgUFRFLW1hcHBlZCBmb2xpbyBvbmx5IGhhcyB0aGUgcGFnZVxcbitcXHQgKiB0aGUgZmF1bHQgd2FzIGZvciBkaXJ0aWVkIHNvIGZhci5cXG4rXFx0ICovXFxuK1xcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRwX2dldF9sb2NrbGVzcyh2bWYtXFx1MDAzZXBtZCkpKVxcbitcXHRcXHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIG9mZiwgUEFHRV9TSVpFKTtcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTtcXG4gXFx0LypcXG4gXFx0ICogVGFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3Nfc3BhY2UgLSBmb2xpby5tYXBwaW5nIG1heSBiZSB6ZXJvZWRcXG5AQCAtNTYyNSw2ICs1NjM0LDMxIEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisvKlxcbisgKiBNYXkgdGhlIHdob2xlIGJhdGNoIGJlIG1hcmtlZCBkaXJ0eT9cXG4rICpcXG4rICogT25seSBhIHNoYXJlZCBtYXBwaW5nIG9mIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXIgYmxvY2sgc2F5c1xcbisgKiBuby4gVGhlcmUgdGhlIHBhZ2UgdGFibGUgZGlydHkgYml0cyBhcmUgdGhlIG9ubHkgcmVjb3JkIG9mIHdoaWNoIHBhcnRzIG9mIGFcXG4rICogbGFyZ2UgZm9saW8gd2VyZSB3cml0dGVuIHRocm91Z2ggdGhlIG1hcHBpbmcsIHNvIHBhZ2VzIG5vYm9keSBoYXMgc3RvcmVkIHRvXFxuKyAqIGhhdmUgdG8gc3RheSBjbGVhbiBhbmQgbGV0IHRoZSBoYXJkd2FyZSBzZXQgdGhlIGJpdCBvbiB0aGUgZmlyc3Qgc3RvcmUuXFxuKyAqXFxuKyAqIEV2ZXJ5d2hlcmUgZWxzZSBub3RoaW5nIGV2ZXIgcmVhZHMgdGhvc2UgYml0cywgYW5kIG9uIGhhcmR3YXJlIHdpdGhvdXQgYVxcbisgKiBkaXJ0eSBiaXQgbGVhdmluZyB0aGVtIGNsZWFuIGNvc3RzIGEgZmF1bHQgcGVyIHBhZ2UgZm9yIG5vdGhpbmcuIFRoYXQgY292ZXJzXFxuKyAqIHNobWVtLCB3aGljaCBoYXMgbm8gZGlydHkgc3RhdGUgYmVsb3cgdGhlIGZvbGlvLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsXFxuK1xcdFxcdFxcdFxcdCAgYm9vbCBwcmVmYXVsdClcXG4re1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbitcXG4rXFx0aWYgKCEodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpIHx8IHByZWZhdWx0IHx8IG5yID09IDEpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gIXZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW9fcmFuZ2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZXRfcHRlX3JhbmdlIC0gU2V0IGEgcmFuZ2Ugb2YgUFRFcyB0byBwb2ludCB0byBwYWdlcyBpbiBhIGZvbGlvLlxcbiAgKiBAdm1mOiBGYXVsdCBkZXNjcmlwdGlvbi5cXG5AQCAtNTYzOSw2ICs1NjczLDcgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbiBcXHRib29sIHdyaXRlID0gdm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEU7XFxuIFxcdGJvb2wgcHJlZmF1bHQgPSAhaW5fcmFuZ2Uodm1mLVxcdTAwM2VhZGRyZXNzLCBhZGRyLCBuciAqIFBBR0VfU0laRSk7XFxuK1xcdGJvb2wgZGlydHlfYmF0Y2ggPSBjYW5fZGlydHlfd2hvbGVfYmF0Y2godm1mLCBuciwgcHJlZmF1bHQpO1xcbiBcXHRwdGVfdCBlbnRyeTtcXG4gXFxuIFxcdGZsdXNoX2ljYWNoZV9wYWdlcyh2bWEsIHBhZ2UsIG5yKTtcXG5AQCAtNTY0OSwxMCArNTY4NCwxMyBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGVsc2VcXG4gXFx0XFx0ZW50cnkgPSBwdGVfc3dfbWt5b3VuZyhlbnRyeSk7XFxuIFxcbi1cXHRpZiAod3JpdGUpXFxuLVxcdFxcdGVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7XFxuLVxcdGVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuK1xcdGlmICh3cml0ZSkge1xcbitcXHRcXHRpZiAoZGlydHlfYmF0Y2gpXFxuK1xcdFxcdFxcdGVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpO1xcbitcXHRcXHRlbnRyeSA9IG1heWJlX21rd3JpdGUoZW50cnksIHZtYSk7XFxuK1xcdH0gZWxzZSBpZiAocHRlX3dyaXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xcbiBcXHRcXHRlbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTtcXG4rXFx0fVxcbiBcXHRpZiAodW5saWtlbHkodm1mX29yaWdfcHRlX3VmZmRfd3Aodm1mKSkpXFxuIFxcdFxcdGVudHJ5ID0gcHRlX21rdWZmZChlbnRyeSk7XFxuIFxcdC8qIGNvcHktb24td3JpdGUgcGFnZSAqL1xcbkBAIC01NjY1LDYgKzU3MDMsMTggQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHR9XFxuIFxcdHNldF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHZtZi1cXHUwMDNlcHRlLCBlbnRyeSwgbnIpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIHBhZ2UgdGhlIGZhdWx0IHdhcyBmb3IgaXMgYWJvdXQgdG8gYmUgc3RvcmVkIHRvLCBzbyBkaXJ0eSBpdFxcbitcXHQgKiBoZXJlIHJhdGhlciB0aGFuIGxlYXZlIHRoZSBzdG9yZSB0byBhIHNlY29uZCBwYWdlIHRhYmxlIHdhbGssIG9yIHRvXFxuK1xcdCAqIGEgc2Vjb25kIGZhdWx0IHdoZXJlIHRoZSBkaXJ0eSBiaXQgaXMgbWFpbnRhaW5lZCBpbiBzb2Z0d2FyZS5cXG4rXFx0ICovXFxuK1xcdGlmICghZGlydHlfYmF0Y2gpIHtcXG4rXFx0XFx0cHRlX3QgKnB0ZXAgPSB2bWYtXFx1MDAzZXB0ZSArICgodm1mLVxcdTAwM2VhZGRyZXNzIC0gYWRkcikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcbitcXHRcXHRwdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHB0ZXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHB0ZV9ta2RpcnR5KHB0ZXBfZ2V0KHB0ZXApKSwgMSk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNhY2hlZCAqL1xcbiBcXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHZtZiwgdm1hLCBhZGRyLCB2bWYtXFx1MDAzZXB0ZSwgbnIpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jXFxuaW5kZXggNmM5YzdiYTg5YjhhOS4uMzliNTRjMjVhOWZhYiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jXFxuKysrIGIvbW0vcGFnZS13cml0ZWJhY2suY1xcbkBAIC0yNzUxLDYgKzI3NTEsMjEgQEAgYm9vbCBmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2UpO1xcbiBcXG4rLypcXG4rICogSGFuZCBhIGRpcnRpZWQgcmFuZ2Ugb2YgQGZvbGlvIHRvIHRoZSBmaWxlc3lzdGVtLiAgLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIGNhblxcbisgKiBleHByZXNzIGV2ZXJ5dGhpbmcgLVxcdTAwM2VkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdFxcbisgKiBkb2VzIG5vdCBuZWVkIGJvdGgsIGFuZCBhIHdob2xlLWZvbGlvIGRpcnR5IGNvbWVzIHRocm91Z2ggaGVyZSBhcyBhIHJhbmdlXFxuKyAqIGNvdmVyaW5nIHRoZSBmb2xpby5cXG4rICovXFxuK3N0YXRpYyBib29sIG1hcHBpbmdfZGlydHlfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0aWYgKCFtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UpXFxuK1xcdFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xcbitcXG4rXFx0cmV0dXJuIG1hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgb2ZmLCBsZW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogZm9saW9fbWFya19kaXJ0eSAtIE1hcmsgYSBmb2xpbyBhcyBiZWluZyBtb2RpZmllZC5cXG4gICogQGZvbGlvOiBUaGUgZm9saW8uXFxuQEAgLTI3ODIsMTMgKzI3OTcsMzkgQEAgYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcXG4gXFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XFxuLVxcdFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xcbitcXHRcXHRyZXR1cm4gbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gbm9vcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChmb2xpb19tYXJrX2RpcnR5KTtcXG4gXFxuKy8qKlxcbisgKiBmb2xpb19tYXJrX2RpcnR5X3JhbmdlIC0gTWFyayBwYXJ0IG9mIGEgZm9saW8gYXMgYmVpbmcgbW9kaWZpZWQuXFxuKyAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbisgKiBAb2ZmOiBPZmZzZXQgb2YgdGhlIG1vZGlmaWVkIHJhbmdlIHdpdGhpbiB0aGUgZm9saW8uXFxuKyAqIEBsZW46IExlbmd0aCBvZiB0aGUgbW9kaWZpZWQgcmFuZ2UuXFxuKyAqXFxuKyAqIExpa2UgZm9saW9fbWFya19kaXJ0eSgpLCBidXQgdGVsbHMgYSBmaWxlc3lzdGVtIHRoYXQgdHJhY2tzIGRpcnR5IHN0YXRlIHBlclxcbisgKiBibG9jayB0aGF0IG9ubHkgW0BvZmYsIEBvZmYgKyBAbGVuKSBjaGFuZ2VkLCBzbyB3cml0ZWJhY2sgY2FuIHNraXAgdGhlIHJlc3RcXG4rICogb2YgdGhlIGZvbGlvLiAgRmlsZXN5c3RlbXMgd2l0aG91dCB0aGF0IHRyYWNraW5nIGRpcnR5IHRoZSB3aG9sZSBmb2xpby5cXG4rICpcXG4rICogUmV0dXJuOiBUcnVlIGlmIHRoZSBmb2xpbyB3YXMgbmV3bHkgZGlydGllZCwgZmFsc2UgaWYgaXQgd2FzIGFscmVhZHkgZGlydHkuXFxuKyAqL1xcbitib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbitcXG4rXFx0aWYgKGxpa2VseShtYXBwaW5nKSkge1xcbitcXHRcXHRpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcXG4rXFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XFxuK1xcdFxcdHJldHVybiBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLCBvZmYsIGxlbik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4rfVxcbitcXG4gLypcXG4gICogZm9saW9fbWFya19kaXJ0eSgpIGlzIHJhY3kgaWYgdGhlIGNhbGxlciBoYXMgbm8gcmVmZXJlbmNlIGFnYWluc3RcXG4gICogZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QsIGFuZCBpZiB0aGUgZm9saW8gaXMgdW5sb2NrZWQuICBUaGlzIGlzIGJlY2F1c2UgYW5vdGhlclxcbkBAIC0yODQ0LDYgKzI4ODUsNDEgQEAgdm9pZCBfX2ZvbGlvX2NhbmNlbF9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woX19mb2xpb19jYW5jZWxfZGlydHkpO1xcbiBcXG4rLypcXG4rICogV3JpdGUtcHJvdGVjdCBldmVyeSBtYXBwaW5nIG9mIEBmb2xpbyBhbmQgaGFuZCB0aGUgZmlsZXN5c3RlbSB0aGUgcGFydHMgdGhhdFxcbisgKiB3ZXJlIGRpcnR5IGluIGEgcGFnZSB0YWJsZS5cXG4rICpcXG4rICogV2l0aG91dCAtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgdGhlcmUgaXMgbm93aGVyZSB0byBwdXQgcGVyLWJsb2NrIHN0YXRlLCBzb1xcbisgKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90XFxuKyAqIGFscmVhZHkgZGlydHksIGJlY2F1c2UgdGhlbiB0aGUgZGlydHkgdHJhbnNpdGlvbiBuZWVkcyB0aGUgZnVsbCBhY2NvdW50aW5nXFxuKyAqIGluIGZvbGlvX21hcmtfZGlydHkoKSwgYW5kIGZvciBhIGZvbGlvIHRvbyBsYXJnZSBmb3IgdGhlIGJpdG1hcCwgd2hpY2ggdGhlXFxuKyAqIHBhZ2UgY2FjaGUgZG9lcyBub3QgbWFrZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGZvbGlvX21rY2xlYW5fZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRERUNMQVJFX0JJVE1BUChtYXAsIDFVTCBcXHUwMDNjXFx1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcXG4rXFx0dW5zaWduZWQgaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDtcXG4rXFxuK1xcdGlmICghbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxcbitcXHQgICAgV0FSTl9PTl9PTkNFKG5yIFxcdTAwM2UgKDFVTCBcXHUwMDNjXFx1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKSkpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX21rY2xlYW4oZm9saW8pKVxcbitcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRiaXRtYXBfemVybyhtYXAsIG5yKTtcXG4rXFx0aWYgKCFmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBtYXApKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucikge1xcbitcXHRcXHRtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgKHNpemVfdClzdGFydCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHQgICAgKHNpemVfdCkoZW5kIC0gc3RhcnQpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIENsZWFyIGEgZm9saW8ncyBkaXJ0eSBmbGFnLCB3aGlsZSBjYXJpbmcgZm9yIGRpcnR5IG1lbW9yeSBhY2NvdW50aW5nLlxcbiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbGlvIHdhcyBwcmV2aW91c2x5IGRpcnR5LlxcbkBAIC0yODc1LDkgKzI5NTEsOSBAQCBib29sIGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRcXHQgKlxcbiBcXHRcXHQgKiBXZSB1c2UgdGhpcyBzZXF1ZW5jZSB0byBtYWtlIHN1cmUgdGhhdFxcbiBcXHRcXHQgKiAgKGEpIHdlIGFjY291bnQgZm9yIGRpcnR5IHN0YXRzIHByb3Blcmx5XFxuLVxcdFxcdCAqICAoYikgd2UgdGVsbCB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gdG9cXG4tXFx0XFx0ICogICAgICBtYXJrIHRoZSB3aG9sZSBmb2xpbyBkaXJ0eSBpZiBpdCB3YXNcXG4tXFx0XFx0ICogICAgICBkaXJ0eSBpbiBhIHBhZ2V0YWJsZS4gT25seSB0byB0aGVuXFxuK1xcdFxcdCAqICAoYikgd2UgdGVsbCB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gd2hpY2hcXG4rXFx0XFx0ICogICAgICBwYXJ0cyBvZiB0aGUgZm9saW8gd2VyZSBkaXJ0eSBpbiBhXFxuK1xcdFxcdCAqICAgICAgcGFnZXRhYmxlLiBPbmx5IHRvIHRoZW5cXG4gXFx0XFx0ICogIChjKSBjbGVhbiB0aGUgZm9saW8gYWdhaW4gYW5kIHJldHVybiAxIHRvXFxuIFxcdFxcdCAqICAgICAgY2F1c2UgdGhlIHdyaXRlYmFjay5cXG4gXFx0XFx0ICpcXG5AQCAtMjg5NSw4ICsyOTcxLDcgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0ICogYXMgYSBzZXJpYWxpemF0aW9uIHBvaW50IGZvciBhbGwgdGhlIGRpZmZlcmVudFxcbiBcXHRcXHQgKiB0aHJlYWRzIGRvaW5nIHRoZWlyIHRoaW5ncy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSlcXG4tXFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX21rY2xlYW5fZm9yX2lvKGZvbGlvLCBtYXBwaW5nKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgY2FyZWZ1bGx5IHN5bmNocm9uaXNlIGZhdWx0IGhhbmRsZXJzIGFnYWluc3RcXG4gXFx0XFx0ICogaW5zdGFsbGluZyBhIGRpcnR5IHB0ZSBhbmQgbWFya2luZyB0aGUgZm9saW8gZGlydHlcXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggMWY3MmQyNzliYTY4Zi4uYWFmNDVhYzc5ZmE4NCAxMDA2NDRcXG4tLS0gYS9tbS9ybWFwLmNcXG4rKysgYi9tbS9ybWFwLmNcXG5AQCAtMTEwMCwxMiArMTEwMCwxOCBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbiBcXHRyZXR1cm4gcndjLmNvbnRlbmRlZCA/IC0xIDogcHJhLnJlZmVyZW5jZWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbitzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcDtcXG4rXFx0aW50IGNsZWFuZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxcbiB7XFxuLVxcdGludCBjbGVhbmVkID0gMDtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVxcdTAwM2V2bWE7XFxuLVxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHB2bXctXFx1MDAzZWFkZHJlc3M7XFxuK1xcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuK1xcdGludCBjbGVhbmVkID0gMDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdlIGhhdmUgdG8gYXNzdW1lIHRoZSB3b3JzZSBjYXNlIGllIHBtZCBmb3IgaW52YWxpZGF0aW9uLiBOb3RlIHRoYXRcXG5AQCAtMTEzNCw2ICsxMTQwLDE1IEBAIHN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbiBcXHRcXHRcXHRpZiAoIXB0ZV9kaXJ0eShlbnRyeSkgXFx1MDAyNlxcdTAwMjYgIXB0ZV93cml0ZShlbnRyeSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0XFx0aWYgKGRpcnR5X21hcCBcXHUwMDI2XFx1MDAyNiBwdGVfZGlydHkoZW50cnkpKSB7XFxuK1xcdFxcdFxcdFxcdHBnb2ZmX3QgaWR4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHB2bXctXFx1MDAzZXBnb2ZmO1xcbitcXG4rXFx0XFx0XFx0XFx0LyogVGhlIHdhbGsgb25seSB2aXNpdHMgcGFnZXMgb2YgdGhpcyBmb2xpbyAqL1xcbitcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoaWR4IFxcdTAwM2U9IHB2bXctXFx1MDAzZW5yX3BhZ2VzKTtcXG4rXFx0XFx0XFx0XFx0X19zZXRfYml0KGlkeCwgZGlydHlfbWFwKTtcXG4rXFx0XFx0XFx0fVxcbitcXG4gXFx0XFx0XFx0Zmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHB0ZV9wZm4oZW50cnkpKTtcXG4gXFx0XFx0XFx0ZW50cnkgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHRlKTtcXG4gXFx0XFx0XFx0ZW50cnkgPSBwdGVfd3Jwcm90ZWN0KGVudHJ5KTtcXG5AQCAtMTE1NSw2ICsxMTcwLDkgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuIFxcdFxcdFxcdGlmICghcG1kX2RpcnR5KGVudHJ5KSBcXHUwMDI2XFx1MDAyNiAhcG1kX3dyaXRlKGVudHJ5KSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRcXHRpZiAoZGlydHlfbWFwIFxcdTAwMjZcXHUwMDI2IHBtZF9kaXJ0eShlbnRyeSkpXFxuK1xcdFxcdFxcdFxcdGJpdG1hcF9zZXQoZGlydHlfbWFwLCAwLCBwdm13LVxcdTAwM2Vucl9wYWdlcyk7XFxuK1xcbiBcXHRcXHRcXHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgYWRkcmVzcyArIEhQQUdFX1BNRF9TSVpFKTtcXG4gXFx0XFx0XFx0ZW50cnkgPSBwbWRwX2ludmFsaWRhdGUodm1hLCBhZGRyZXNzLCBwbWQpO1xcbkBAIC0xMTgxLDkgKzExOTksOSBAQCBzdGF0aWMgYm9vbCBwYWdlX21rY2xlYW5fb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbiB7XFxuIFxcdERFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyZXNzLCBQVk1XX1NZTkMpO1xcbi1cXHRpbnQgKmNsZWFuZWQgPSBhcmc7XFxuK1xcdHN0cnVjdCBta2NsZWFuX3N0YXRlICpzdGF0ZSA9IGFyZztcXG4gXFxuLVxcdCpjbGVhbmVkICs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKFxcdTAwMjZwdm13KTtcXG4rXFx0c3RhdGUtXFx1MDAzZWNsZWFuZWQgKz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXFx1MDAyNnB2bXcsIHN0YXRlLVxcdTAwM2VkaXJ0eV9tYXApO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5AQCAtMTE5NiwxMiArMTIxNCwyMyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX21rY2xlYW5fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1pbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbisvKipcXG4rICogZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCAtIFdyaXRlLXByb3RlY3QgYSBmb2xpbyBhbmQgcmVwb3J0IHdoYXQgd2FzIGRpcnR5LlxcbisgKiBAZm9saW86IFRoZSBmb2xpbyB0byBjbGVhbi5cXG4rICogQGRpcnR5X21hcDogQml0bWFwIG9mIGF0IGxlYXN0IGZvbGlvX25yX3BhZ2VzKEBmb2xpbykgYml0cywgb3IgTlVMTC5cXG4rICpcXG4rICogV3JpdGUtcHJvdGVjdHMgYW5kIGNsZWFucyBldmVyeSBtYXBwaW5nIG9mIEBmb2xpby4gIFdpdGggQGRpcnR5X21hcCwgc2V0cyBhXFxuKyAqIGJpdCBmb3IgZWFjaCBwYWdlIHdob3NlIGVudHJ5IHdhcyBkaXJ0eTsgYSBQTUQtbWFwcGVkIGZvbGlvIGhhcyBvbmUgZGlydHlcXG4rICogYml0IGZvciBhbGwgb2YgaXQsIHNvIGV2ZXJ5IHBhZ2UgaXMgcmVwb3J0ZWQuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIG51bWJlciBvZiBwYWdlIHRhYmxlIGVudHJpZXMgY2xlYW5lZC5cXG4rICovXFxuK2ludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcClcXG4ge1xcbi1cXHRpbnQgY2xlYW5lZCA9IDA7XFxuK1xcdHN0cnVjdCBta2NsZWFuX3N0YXRlIHN0YXRlID0geyAuZGlydHlfbWFwID0gZGlydHlfbWFwIH07XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbiBcXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xcbi1cXHRcXHQuYXJnID0gKHZvaWQgKilcXHUwMDI2Y2xlYW5lZCxcXG4rXFx0XFx0LmFyZyA9ICh2b2lkICopXFx1MDAyNnN0YXRlLFxcbiBcXHRcXHQucm1hcF9vbmUgPSBwYWdlX21rY2xlYW5fb25lLFxcbiBcXHRcXHQuaW52YWxpZF92bWEgPSBpbnZhbGlkX21rY2xlYW5fdm1hLFxcbiBcXHR9O1xcbkBAIC0xMjE3LDcgKzEyNDYsMTIgQEAgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIFxcdHJtYXBfd2Fsayhmb2xpbywgXFx1MDAyNnJ3Yyk7XFxuIFxcbi1cXHRyZXR1cm4gY2xlYW5lZDtcXG4rXFx0cmV0dXJuIHN0YXRlLmNsZWFuZWQ7XFxuK31cXG4rXFxuK2ludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIE5VTEwpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX21rY2xlYW4pO1xcbiBcXG5AQCAtMTI0MSw3ICsxMjc1LDcgQEAgc3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdC5mbGFnc1xcdFxcdD0gUFZNV19TWU5DLFxcbiBcXHR9O1xcbiBcXG4tXFx0c3RhdGUtXFx1MDAzZWNsZWFuZWQgKz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXFx1MDAyNnB2bXcpO1xcbitcXHRzdGF0ZS1cXHUwMDNlY2xlYW5lZCArPSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcXHUwMDI2cHZtdywgTlVMTCk7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbkBAIC0xMzI0LDcgKzEzNTgsNyBAQCBpbnQgcGZuX21rY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHBnb2ZmX3QgcGdvZmYsXFxuIFxcdHB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcXG4gXFx0Vk1fQlVHX09OX1ZNQShwdm13LmFkZHJlc3MgPT0gLUVGQVVMVCwgdm1hKTtcXG4gXFxuLVxcdHJldHVybiBwYWdlX3ZtYV9ta2NsZWFuX29uZShcXHUwMDI2cHZtdyk7XFxuK1xcdHJldHVybiBwYWdlX3ZtYV9ta2NsZWFuX29uZShcXHUwMDI2cHZtdywgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fZm9saW9fbW9kX3N0YXQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5yLCBpbnQgbnJfcG1kbWFwcGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMjo0Mi40NjczODI0MzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3ODg2MDc1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlXCIsXG4gICAgXCJpb21hcF9wYWdlX21rd3JpdGVcIixcbiAgICBcImZvbGlvX21hcmtfZGlydHlfcmFuZ2VcIixcbiAgICBcImZvbGlvX21rY2xlYW5fZGlydHltYXBcIixcbiAgICBcImZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1Yi1mb2xpbyByYW5nZSBkaXJ0eWluZyB2aWEgLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSwgZm9saW9fbWFya19kaXJ0eV9yYW5nZSgpLCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKCksIGFuZCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSgpIGZvciBYRlMvaW9tYXAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gZGlydHkgZm9saW8gdHJhY2tpbmcsIHdyaXRlLXByb3RlY3QvY2xlYW4gdHJhbnNpdGlvbnMgaW4gd3JpdGViYWNrIChmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8pLCBybWFwIFBURS9QTUQgZGlydHkgd2FsaywgYW5kIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncy4gVGhlc2UgcmVhY2hhYmxlIE1NIGFuZCBmaWxlc3lzdGVtIHBhdGhzIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNTE5YjQ2MWM5YjNmZGVjYWE4ODBlMGM5M2I0ZGE5OTc3NTFjMWIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNDowMjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5pbmRleCAwYTVlYmZkYTkwZjEyLi44ZDhhOGFjYWIwMWFjIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTg0NywxNSArODQ3LDE5IEBAIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbiBcbi1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHNpemVfdCBsZW4gPSBmb2xpb19zaXplKGZvbGlvKTtcbi1cbi1cdGlmc19hbGxvYyhpbm9kZSwgZm9saW8sIDApO1xuLVx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xuK1x0aWZzX2FsbG9jKG1hcHBpbmctXHUwMDNlaG9zdCwgZm9saW8sIDApO1xuK1x0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBvZmYsIGxlbik7XG4gXHRyZXR1cm4gZmlsZW1hcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKTtcbitcbitib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgMCwgZm9saW9fc2l6ZShmb2xpbykpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpbyk7XG4gXG4gc3RhdGljIHZvaWRcbkBAIC0xODA0LDcgKzE4MDgsNyBAQCBpb21hcF90cnVuY2F0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGJvb2wgKmRpZF96ZXJvLFxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3RydW5jYXRlX3BhZ2UpO1xuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3QgZGlydHlfb2ZmLCBzaXplX3QgZGlydHlfbGVuKVxuIHtcbiBcdGxvZmZfdCBsZW5ndGggPSBpb21hcF9sZW5ndGgoaXRlcik7XG4gXHRpbnQgcmV0O1xuQEAgLTE4MTcsNyArMTgyMSw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0XHRibG9ja19jb21taXRfd3JpdGUoZm9saW8sIDAsIGxlbmd0aCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKTtcbi1cdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIGRpcnR5X29mZiwgZGlydHlfbGVuKTtcbiBcdH1cbiBcbiBcdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTtcbkBAIC0xODMyLDYgKzE4MzYsNyBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuIFx0XHQucHJpdmF0ZVx0PSBwcml2YXRlLFxuIFx0fTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbitcdHNpemVfdCBkaXJ0eV9vZmYsIGRpcnR5X2xlbjtcbiBcdHNzaXplX3QgcmV0O1xuIFxuIFx0Zm9saW9fbG9jayhmb2xpbyk7XG5AQCAtMTg0MCw4ICsxODQ1LDIyIEBAIHZtX2ZhdWx0X3QgaW9tYXBfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdGl0ZXIucG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiBcdGl0ZXIubGVuID0gcmV0O1xuK1xuK1x0LypcbitcdCAqIEJsb2NrcyBhcmUgc3RpbGwgYWxsb2NhdGVkIGZvciB0aGUgd2hvbGUgZm9saW8sIGJ1dCBvbmx5IHRoZSBwYWdlXG4rXHQgKiB0aGUgZmF1bHQgd2FzIGZvciBoYXMgYmVlbiB3cml0dGVuLCBzbyB0aGF0IGlzIGFsbCB0aGF0IGhhcyB0byBiZVxuK1x0ICogd3JpdHRlbiBiYWNrLiAgQSByYWNpbmcgdHJ1bmNhdGUgY2FuIGxlYXZlIHRoYXQgcGFnZSBiZXlvbmQgaV9zaXplLFxuK1x0ICogYW5kIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkaXJ0eS5cbitcdCAqL1xuK1x0ZGlydHlfb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cdTAwM2VwYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbitcdGlmIChkaXJ0eV9vZmYgXHUwMDNjIHJldClcbitcdFx0ZGlydHlfbGVuID0gbWluX3Qoc2l6ZV90LCBQQUdFX1NJWkUsIHJldCAtIGRpcnR5X29mZik7XG4rXHRlbHNlXG4rXHRcdGRpcnR5X2xlbiA9IDA7XG4rXG4gXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXHUwMDI2aXRlciwgb3BzKSkgXHUwMDNlIDApXG4tXHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKFx1MDAyNml0ZXIsIGZvbGlvKTtcbitcdFx0aXRlci5zdGF0dXMgPSBpb21hcF9mb2xpb19ta3dyaXRlX2l0ZXIoXHUwMDI2aXRlciwgZm9saW8sXG4rXHRcdFx0XHRcdFx0ICAgICAgIGRpcnR5X29mZiwgZGlydHlfbGVuKTtcbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5pbmRleCA3NGE2MDg5YWJhZGY5Li42MDBlN2RlMmU1OTljIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19hb3BzLmNcbisrKyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5AQCAtODYzLDcgKzg2Myw3IEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgeGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2ZvbGlvXHRcdD0geGZzX3ZtX3JlYWRfZm9saW8sXG4gXHQucmVhZGFoZWFkXHRcdD0geGZzX3ZtX3JlYWRhaGVhZCxcbiBcdC53cml0ZXBhZ2VzXHRcdD0geGZzX3ZtX3dyaXRlcGFnZXMsXG4tXHQuZGlydHlfZm9saW9cdFx0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbitcdC5kaXJ0eV9mb2xpb19yYW5nZVx0PSBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSxcbiBcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQuYm1hcFx0XHRcdD0geGZzX3ZtX2JtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCAwNzJkOGNkMDlhMGIyLi4xZDk4YjZjMGI4ODA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC00MDYsNiArNDA2LDkgQEAgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB7XG4gXG4gXHQvKiBNYXJrIGEgZm9saW8gZGlydHkuICBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGRpcnRpZWQgaXQgKi9cbiBcdGJvb2wgKCpkaXJ0eV9mb2xpbykoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGZvbGlvICopO1xuK1x0LyogTWFyayBbb2ZmLCBvZmYgKyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi9cbitcdGJvb2wgKCpkaXJ0eV9mb2xpb19yYW5nZSkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xuIFxuIFx0dm9pZCAoKnJlYWRhaGVhZCkoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICopO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggYmM3YWU2MzI3ZGJmOC4uM2NmMmFjNzUxNDA5YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtNDQzLDYgKzQ0Myw4IEBAIHN0cnVjdCBmb2xpbyAqaW9tYXBfZ2V0X2ZvbGlvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuKTtcbiBib29sIGlvbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcbiB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbik7XG4gYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rYm9vbCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0c2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4gdm9pZCBpb21hcF9mb2xpb19tYXJrX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBpb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggODdmZWFhNWEyYjc4MC4uNzYyODI2MmMxN2UxNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzMzNyw2ICszMzM3LDcgQEAgc3RydWN0IGt2ZWM7XG4gc3RydWN0IHBhZ2UgKmdldF9kdW1wX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKmxvY2tlZCk7XG4gXG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2Jvb2wgZm9saW9fbWFya19kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcbiBib29sIGZvbGlvX21hcmtfZGlydHlfbG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHNldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X3BhZ2VfZGlydHlfbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuaW5kZXggOGRjMDg3MWU1ZjAwMS4uNmZjMGE2MDIwMjUyNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuQEAgLTkyNyw2ICs5MjcsNyBAQCB1bnNpZ25lZCBsb25nIHBhZ2VfYWRkcmVzc19pbl92bWEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2xlYW5lZCBQVEVzLlxuICAqL1xuIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqKTtcbitpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApO1xuIFxuIGludCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZixcbiBcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuQEAgLTk5MCw2ICs5OTEsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXApXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuICNlbmRpZlx0LyogQ09ORklHX01NVSAqL1xuIFxuICNlbmRpZlx0LyogX0xJTlVYX1JNQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhkYTBmOTQ1MTQxYjQuLjI3YTA1OWUwYzAxNmYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC0zNzc4LDEwICszNzc4LDE5IEBAIHN0YXRpYyB2bV9mYXVsdF90IGZhdWx0X2RpcnR5X3NoYXJlZF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSk7XG4rXHRzaXplX3Qgb2ZmID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHZtZi1cdTAwM2VwYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcdGJvb2wgZGlydGllZDtcbiBcdGJvb2wgcGFnZV9ta3dyaXRlID0gdm1hLVx1MDAzZXZtX29wcyBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VwYWdlX21rd3JpdGU7XG4gXG4tXHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHQvKlxuK1x0ICogQSBQTUQgZW50cnkgaGFzIG9uZSBkaXJ0eSBiaXQgZm9yIHRoZSB3aG9sZSBmb2xpbywgc28gdGhlcmUgaXMgbm9cbitcdCAqIGZpbmVyIGluZm9ybWF0aW9uIHRvIHBhc3Mgb24uIEEgUFRFLW1hcHBlZCBmb2xpbyBvbmx5IGhhcyB0aGUgcGFnZVxuK1x0ICogdGhlIGZhdWx0IHdhcyBmb3IgZGlydGllZCBzbyBmYXIuXG4rXHQgKi9cbitcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRwX2dldF9sb2NrbGVzcyh2bWYtXHUwMDNlcG1kKSkpXG4rXHRcdGRpcnRpZWQgPSBmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbitcdGVsc2VcbitcdFx0ZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHlfcmFuZ2UoZm9saW8sIG9mZiwgUEFHRV9TSVpFKTtcbiBcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogVGFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3Nfc3BhY2UgLSBmb2xpby5tYXBwaW5nIG1heSBiZSB6ZXJvZWRcbkBAIC01NjI1LDYgKzU2MzQsMzEgQEAgdm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFcbiB9XG4gI2VuZGlmXG4gXG4rLypcbisgKiBNYXkgdGhlIHdob2xlIGJhdGNoIGJlIG1hcmtlZCBkaXJ0eT9cbisgKlxuKyAqIE9ubHkgYSBzaGFyZWQgbWFwcGluZyBvZiBhIGZpbGVzeXN0ZW0gdGhhdCB0cmFja3MgZGlydHkgc3RhdGUgcGVyIGJsb2NrIHNheXNcbisgKiBuby4gVGhlcmUgdGhlIHBhZ2UgdGFibGUgZGlydHkgYml0cyBhcmUgdGhlIG9ubHkgcmVjb3JkIG9mIHdoaWNoIHBhcnRzIG9mIGFcbisgKiBsYXJnZSBmb2xpbyB3ZXJlIHdyaXR0ZW4gdGhyb3VnaCB0aGUgbWFwcGluZywgc28gcGFnZXMgbm9ib2R5IGhhcyBzdG9yZWQgdG9cbisgKiBoYXZlIHRvIHN0YXkgY2xlYW4gYW5kIGxldCB0aGUgaGFyZHdhcmUgc2V0IHRoZSBiaXQgb24gdGhlIGZpcnN0IHN0b3JlLlxuKyAqXG4rICogRXZlcnl3aGVyZSBlbHNlIG5vdGhpbmcgZXZlciByZWFkcyB0aG9zZSBiaXRzLCBhbmQgb24gaGFyZHdhcmUgd2l0aG91dCBhXG4rICogZGlydHkgYml0IGxlYXZpbmcgdGhlbSBjbGVhbiBjb3N0cyBhIGZhdWx0IHBlciBwYWdlIGZvciBub3RoaW5nLiBUaGF0IGNvdmVyc1xuKyAqIHNobWVtLCB3aGljaCBoYXMgbm8gZGlydHkgc3RhdGUgYmVsb3cgdGhlIGZvbGlvLlxuKyAqL1xuK3N0YXRpYyBib29sIGNhbl9kaXJ0eV93aG9sZV9iYXRjaChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG5yLFxuK1x0XHRcdFx0ICBib29sIHByZWZhdWx0KVxuK3tcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbitcbitcdGlmICghKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgfHwgcHJlZmF1bHQgfHwgbnIgPT0gMSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuICF2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2U7XG4rfVxuK1xuIC8qKlxuICAqIHNldF9wdGVfcmFuZ2UgLSBTZXQgYSByYW5nZSBvZiBQVEVzIHRvIHBvaW50IHRvIHBhZ2VzIGluIGEgZm9saW8uXG4gICogQHZtZjogRmF1bHQgZGVzY3JpcHRpb24uXG5AQCAtNTYzOSw2ICs1NjczLDcgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuIFx0Ym9vbCB3cml0ZSA9IHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURTtcbiBcdGJvb2wgcHJlZmF1bHQgPSAhaW5fcmFuZ2Uodm1mLVx1MDAzZWFkZHJlc3MsIGFkZHIsIG5yICogUEFHRV9TSVpFKTtcbitcdGJvb2wgZGlydHlfYmF0Y2ggPSBjYW5fZGlydHlfd2hvbGVfYmF0Y2godm1mLCBuciwgcHJlZmF1bHQpO1xuIFx0cHRlX3QgZW50cnk7XG4gXG4gXHRmbHVzaF9pY2FjaGVfcGFnZXModm1hLCBwYWdlLCBucik7XG5AQCAtNTY0OSwxMCArNTY4NCwxMyBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRlbHNlXG4gXHRcdGVudHJ5ID0gcHRlX3N3X21reW91bmcoZW50cnkpO1xuIFxuLVx0aWYgKHdyaXRlKVxuLVx0XHRlbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpO1xuLVx0ZWxzZSBpZiAocHRlX3dyaXRlKGVudHJ5KSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4rXHRpZiAod3JpdGUpIHtcbitcdFx0aWYgKGRpcnR5X2JhdGNoKVxuK1x0XHRcdGVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpO1xuK1x0XHRlbnRyeSA9IG1heWJlX21rd3JpdGUoZW50cnksIHZtYSk7XG4rXHR9IGVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XG4gXHRcdGVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpO1xuK1x0fVxuIFx0aWYgKHVubGlrZWx5KHZtZl9vcmlnX3B0ZV91ZmZkX3dwKHZtZikpKVxuIFx0XHRlbnRyeSA9IHB0ZV9ta3VmZmQoZW50cnkpO1xuIFx0LyogY29weS1vbi13cml0ZSBwYWdlICovXG5AQCAtNTY2NSw2ICs1NzAzLDE4IEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdH1cbiBcdHNldF9wdGVzKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgdm1mLVx1MDAzZXB0ZSwgZW50cnksIG5yKTtcbiBcbitcdC8qXG4rXHQgKiBUaGUgcGFnZSB0aGUgZmF1bHQgd2FzIGZvciBpcyBhYm91dCB0byBiZSBzdG9yZWQgdG8sIHNvIGRpcnR5IGl0XG4rXHQgKiBoZXJlIHJhdGhlciB0aGFuIGxlYXZlIHRoZSBzdG9yZSB0byBhIHNlY29uZCBwYWdlIHRhYmxlIHdhbGssIG9yIHRvXG4rXHQgKiBhIHNlY29uZCBmYXVsdCB3aGVyZSB0aGUgZGlydHkgYml0IGlzIG1haW50YWluZWQgaW4gc29mdHdhcmUuXG4rXHQgKi9cbitcdGlmICghZGlydHlfYmF0Y2gpIHtcbitcdFx0cHRlX3QgKnB0ZXAgPSB2bWYtXHUwMDNlcHRlICsgKCh2bWYtXHUwMDNlYWRkcmVzcyAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcbitcdFx0cHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIHB0ZXAsXG4rXHRcdFx0XHQgICAgICBwdGVfbWtkaXJ0eShwdGVwX2dldChwdGVwKSksIDEpO1xuK1x0fVxuK1xuIFx0Lyogbm8gbmVlZCB0byBpbnZhbGlkYXRlOiBhIG5vdC1wcmVzZW50IHBhZ2Ugd29uJ3QgYmUgY2FjaGVkICovXG4gXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHZtZiwgdm1hLCBhZGRyLCB2bWYtXHUwMDNlcHRlLCBucik7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jXG5pbmRleCA2YzljN2JhODliOGE5Li4zOWI1NGMyNWE5ZmFiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suY1xuKysrIGIvbW0vcGFnZS13cml0ZWJhY2suY1xuQEAgLTI3NTEsNiArMjc1MSwyMSBAQCBib29sIGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZShzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbiB9XG4gRVhQT1JUX1NZTUJPTChmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2UpO1xuIFxuKy8qXG4rICogSGFuZCBhIGRpcnRpZWQgcmFuZ2Ugb2YgQGZvbGlvIHRvIHRoZSBmaWxlc3lzdGVtLiAgLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgY2FuXG4rICogZXhwcmVzcyBldmVyeXRoaW5nIC1cdTAwM2VkaXJ0eV9mb2xpbygpIGNhbiwgc28gYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBpdFxuKyAqIGRvZXMgbm90IG5lZWQgYm90aCwgYW5kIGEgd2hvbGUtZm9saW8gZGlydHkgY29tZXMgdGhyb3VnaCBoZXJlIGFzIGEgcmFuZ2VcbisgKiBjb3ZlcmluZyB0aGUgZm9saW8uXG4rICovXG4rc3RhdGljIGJvb2wgbWFwcGluZ19kaXJ0eV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbitcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4re1xuK1x0aWYgKCFtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKVxuK1x0XHRyZXR1cm4gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4rXG4rXHRyZXR1cm4gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZShtYXBwaW5nLCBmb2xpbywgb2ZmLCBsZW4pO1xuK31cbitcbiAvKipcbiAgKiBmb2xpb19tYXJrX2RpcnR5IC0gTWFyayBhIGZvbGlvIGFzIGJlaW5nIG1vZGlmaWVkLlxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuQEAgLTI3ODIsMTMgKzI3OTcsMzkgQEAgYm9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcbiBcdFx0XHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcbi1cdFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuK1x0XHRyZXR1cm4gbWFwcGluZ19kaXJ0eV9yYW5nZShtYXBwaW5nLCBmb2xpbywgMCxcbitcdFx0XHRcdFx0ICAgZm9saW9fc2l6ZShmb2xpbykpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIG5vb3BfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGZvbGlvX21hcmtfZGlydHkpO1xuIFxuKy8qKlxuKyAqIGZvbGlvX21hcmtfZGlydHlfcmFuZ2UgLSBNYXJrIHBhcnQgb2YgYSBmb2xpbyBhcyBiZWluZyBtb2RpZmllZC5cbisgKiBAZm9saW86IFRoZSBmb2xpby5cbisgKiBAb2ZmOiBPZmZzZXQgb2YgdGhlIG1vZGlmaWVkIHJhbmdlIHdpdGhpbiB0aGUgZm9saW8uXG4rICogQGxlbjogTGVuZ3RoIG9mIHRoZSBtb2RpZmllZCByYW5nZS5cbisgKlxuKyAqIExpa2UgZm9saW9fbWFya19kaXJ0eSgpLCBidXQgdGVsbHMgYSBmaWxlc3lzdGVtIHRoYXQgdHJhY2tzIGRpcnR5IHN0YXRlIHBlclxuKyAqIGJsb2NrIHRoYXQgb25seSBbQG9mZiwgQG9mZiArIEBsZW4pIGNoYW5nZWQsIHNvIHdyaXRlYmFjayBjYW4gc2tpcCB0aGUgcmVzdFxuKyAqIG9mIHRoZSBmb2xpby4gIEZpbGVzeXN0ZW1zIHdpdGhvdXQgdGhhdCB0cmFja2luZyBkaXJ0eSB0aGUgd2hvbGUgZm9saW8uXG4rICpcbisgKiBSZXR1cm46IFRydWUgaWYgdGhlIGZvbGlvIHdhcyBuZXdseSBkaXJ0aWVkLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBkaXJ0eS5cbisgKi9cbitib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbit7XG4rXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuK1xuK1x0aWYgKGxpa2VseShtYXBwaW5nKSkge1xuK1x0XHRpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcbitcdFx0XHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcbitcdFx0cmV0dXJuIG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcbitcdH1cbitcbitcdHJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbit9XG4rXG4gLypcbiAgKiBmb2xpb19tYXJrX2RpcnR5KCkgaXMgcmFjeSBpZiB0aGUgY2FsbGVyIGhhcyBubyByZWZlcmVuY2UgYWdhaW5zdFxuICAqIGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCwgYW5kIGlmIHRoZSBmb2xpbyBpcyB1bmxvY2tlZC4gIFRoaXMgaXMgYmVjYXVzZSBhbm90aGVyXG5AQCAtMjg0NCw2ICsyODg1LDQxIEBAIHZvaWQgX19mb2xpb19jYW5jZWxfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2ZvbGlvX2NhbmNlbF9kaXJ0eSk7XG4gXG4rLypcbisgKiBXcml0ZS1wcm90ZWN0IGV2ZXJ5IG1hcHBpbmcgb2YgQGZvbGlvIGFuZCBoYW5kIHRoZSBmaWxlc3lzdGVtIHRoZSBwYXJ0cyB0aGF0XG4rICogd2VyZSBkaXJ0eSBpbiBhIHBhZ2UgdGFibGUuXG4rICpcbisgKiBXaXRob3V0IC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIHRoZXJlIGlzIG5vd2hlcmUgdG8gcHV0IHBlci1ibG9jayBzdGF0ZSwgc29cbisgKiBhbnkgUFRFIGRpcnR5IGJpdCBkaXJ0aWVzIHRoZSB3aG9sZSBmb2xpby4gIFNhbWUgd2hlbiB0aGUgZm9saW8gaXMgbm90XG4rICogYWxyZWFkeSBkaXJ0eSwgYmVjYXVzZSB0aGVuIHRoZSBkaXJ0eSB0cmFuc2l0aW9uIG5lZWRzIHRoZSBmdWxsIGFjY291bnRpbmdcbisgKiBpbiBmb2xpb19tYXJrX2RpcnR5KCksIGFuZCBmb3IgYSBmb2xpbyB0b28gbGFyZ2UgZm9yIHRoZSBiaXRtYXAsIHdoaWNoIHRoZVxuKyAqIHBhZ2UgY2FjaGUgZG9lcyBub3QgbWFrZS5cbisgKi9cbitzdGF0aWMgdm9pZCBmb2xpb19ta2NsZWFuX2Zvcl9pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdERFQ0xBUkVfQklUTUFQKG1hcCwgMVVMIFx1MDAzY1x1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcbitcdHVuc2lnbmVkIGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHVuc2lnbmVkIGludCBzdGFydCwgZW5kO1xuK1xuK1x0aWYgKCFtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxuK1x0ICAgIFdBUk5fT05fT05DRShuciBcdTAwM2UgKDFVTCBcdTAwM2NcdTAwM2MgTUFYX1BBR0VDQUNIRV9PUkRFUikpKSB7XG4rXHRcdGlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSlcbitcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Yml0bWFwX3plcm8obWFwLCBucik7XG4rXHRpZiAoIWZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIG1hcCkpXG4rXHRcdHJldHVybjtcbitcbitcdGZvcl9lYWNoX3NldF9iaXRyYW5nZShzdGFydCwgZW5kLCBtYXAsIG5yKSB7XG4rXHRcdG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sXG4rXHRcdFx0XHQgICAgKHNpemVfdClzdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbitcdFx0XHRcdCAgICAoc2l6ZV90KShlbmQgLSBzdGFydCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuK1x0fVxuK31cbitcbiAvKlxuICAqIENsZWFyIGEgZm9saW8ncyBkaXJ0eSBmbGFnLCB3aGlsZSBjYXJpbmcgZm9yIGRpcnR5IG1lbW9yeSBhY2NvdW50aW5nLlxuICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9saW8gd2FzIHByZXZpb3VzbHkgZGlydHkuXG5AQCAtMjg3NSw5ICsyOTUxLDkgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICpcbiBcdFx0ICogV2UgdXNlIHRoaXMgc2VxdWVuY2UgdG8gbWFrZSBzdXJlIHRoYXRcbiBcdFx0ICogIChhKSB3ZSBhY2NvdW50IGZvciBkaXJ0eSBzdGF0cyBwcm9wZXJseVxuLVx0XHQgKiAgKGIpIHdlIHRlbGwgdGhlIGxvdy1sZXZlbCBmaWxlc3lzdGVtIHRvXG4tXHRcdCAqICAgICAgbWFyayB0aGUgd2hvbGUgZm9saW8gZGlydHkgaWYgaXQgd2FzXG4tXHRcdCAqICAgICAgZGlydHkgaW4gYSBwYWdldGFibGUuIE9ubHkgdG8gdGhlblxuK1x0XHQgKiAgKGIpIHdlIHRlbGwgdGhlIGxvdy1sZXZlbCBmaWxlc3lzdGVtIHdoaWNoXG4rXHRcdCAqICAgICAgcGFydHMgb2YgdGhlIGZvbGlvIHdlcmUgZGlydHkgaW4gYVxuK1x0XHQgKiAgICAgIHBhZ2V0YWJsZS4gT25seSB0byB0aGVuXG4gXHRcdCAqICAoYykgY2xlYW4gdGhlIGZvbGlvIGFnYWluIGFuZCByZXR1cm4gMSB0b1xuIFx0XHQgKiAgICAgIGNhdXNlIHRoZSB3cml0ZWJhY2suXG4gXHRcdCAqXG5AQCAtMjg5NSw4ICsyOTcxLDcgQEAgYm9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICogYXMgYSBzZXJpYWxpemF0aW9uIHBvaW50IGZvciBhbGwgdGhlIGRpZmZlcmVudFxuIFx0XHQgKiB0aHJlYWRzIGRvaW5nIHRoZWlyIHRoaW5ncy5cbiBcdFx0ICovXG4tXHRcdGlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSlcbi1cdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbitcdFx0Zm9saW9fbWtjbGVhbl9mb3JfaW8oZm9saW8sIG1hcHBpbmcpO1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBjYXJlZnVsbHkgc3luY2hyb25pc2UgZmF1bHQgaGFuZGxlcnMgYWdhaW5zdFxuIFx0XHQgKiBpbnN0YWxsaW5nIGEgZGlydHkgcHRlIGFuZCBtYXJraW5nIHRoZSBmb2xpbyBkaXJ0eVxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWY3MmQyNzliYTY4Zi4uYWFmNDVhYzc5ZmE4NCAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMTEwMCwxMiArMTEwMCwxOCBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuIFx0cmV0dXJuIHJ3Yy5jb250ZW5kZWQgPyAtMSA6IHByYS5yZWZlcmVuY2VkO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbitzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSB7XG4rXHR1bnNpZ25lZCBsb25nICpkaXJ0eV9tYXA7XG4rXHRpbnQgY2xlYW5lZDtcbit9O1xuK1xuK3N0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxuIHtcbi1cdGludCBjbGVhbmVkID0gMDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy1cdTAwM2V2bWE7XG4tXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzID0gcHZtdy1cdTAwM2VhZGRyZXNzO1xuK1x0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbitcdGludCBjbGVhbmVkID0gMDtcbiBcbiBcdC8qXG4gXHQgKiBXZSBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc2UgY2FzZSBpZSBwbWQgZm9yIGludmFsaWRhdGlvbi4gTm90ZSB0aGF0XG5AQCAtMTEzNCw2ICsxMTQwLDE1IEBAIHN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRcdGlmICghcHRlX2RpcnR5KGVudHJ5KSBcdTAwMjZcdTAwMjYgIXB0ZV93cml0ZShlbnRyeSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAoZGlydHlfbWFwIFx1MDAyNlx1MDAyNiBwdGVfZGlydHkoZW50cnkpKSB7XG4rXHRcdFx0XHRwZ29mZl90IGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykgLVxuK1x0XHRcdFx0XHQgICAgICBwdm13LVx1MDAzZXBnb2ZmO1xuK1xuK1x0XHRcdFx0LyogVGhlIHdhbGsgb25seSB2aXNpdHMgcGFnZXMgb2YgdGhpcyBmb2xpbyAqL1xuK1x0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKGlkeCBcdTAwM2U9IHB2bXctXHUwMDNlbnJfcGFnZXMpO1xuK1x0XHRcdFx0X19zZXRfYml0KGlkeCwgZGlydHlfbWFwKTtcbitcdFx0XHR9XG4rXG4gXHRcdFx0Zmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHB0ZV9wZm4oZW50cnkpKTtcbiBcdFx0XHRlbnRyeSA9IHB0ZXBfY2xlYXJfZmx1c2godm1hLCBhZGRyZXNzLCBwdGUpO1xuIFx0XHRcdGVudHJ5ID0gcHRlX3dycHJvdGVjdChlbnRyeSk7XG5AQCAtMTE1NSw2ICsxMTcwLDkgQEAgc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4gXHRcdFx0aWYgKCFwbWRfZGlydHkoZW50cnkpIFx1MDAyNlx1MDAyNiAhcG1kX3dyaXRlKGVudHJ5KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdGlmIChkaXJ0eV9tYXAgXHUwMDI2XHUwMDI2IHBtZF9kaXJ0eShlbnRyeSkpXG4rXHRcdFx0XHRiaXRtYXBfc2V0KGRpcnR5X21hcCwgMCwgcHZtdy1cdTAwM2Vucl9wYWdlcyk7XG4rXG4gXHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLFxuIFx0XHRcdFx0XHQgIGFkZHJlc3MgKyBIUEFHRV9QTURfU0laRSk7XG4gXHRcdFx0ZW50cnkgPSBwbWRwX2ludmFsaWRhdGUodm1hLCBhZGRyZXNzLCBwbWQpO1xuQEAgLTExODEsOSArMTE5OSw5IEBAIHN0YXRpYyBib29sIHBhZ2VfbWtjbGVhbl9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbiB7XG4gXHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkcmVzcywgUFZNV19TWU5DKTtcbi1cdGludCAqY2xlYW5lZCA9IGFyZztcbitcdHN0cnVjdCBta2NsZWFuX3N0YXRlICpzdGF0ZSA9IGFyZztcbiBcbi1cdCpjbGVhbmVkICs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcpO1xuK1x0c3RhdGUtXHUwMDNlY2xlYW5lZCArPSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13LCBzdGF0ZS1cdTAwM2VkaXJ0eV9tYXApO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTExOTYsMTIgKzEyMTQsMjMgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9ta2NsZWFuX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLWludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogZm9saW9fbWtjbGVhbl9kaXJ0eW1hcCAtIFdyaXRlLXByb3RlY3QgYSBmb2xpbyBhbmQgcmVwb3J0IHdoYXQgd2FzIGRpcnR5LlxuKyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIGNsZWFuLlxuKyAqIEBkaXJ0eV9tYXA6IEJpdG1hcCBvZiBhdCBsZWFzdCBmb2xpb19ucl9wYWdlcyhAZm9saW8pIGJpdHMsIG9yIE5VTEwuXG4rICpcbisgKiBXcml0ZS1wcm90ZWN0cyBhbmQgY2xlYW5zIGV2ZXJ5IG1hcHBpbmcgb2YgQGZvbGlvLiAgV2l0aCBAZGlydHlfbWFwLCBzZXRzIGFcbisgKiBiaXQgZm9yIGVhY2ggcGFnZSB3aG9zZSBlbnRyeSB3YXMgZGlydHk7IGEgUE1ELW1hcHBlZCBmb2xpbyBoYXMgb25lIGRpcnR5XG4rICogYml0IGZvciBhbGwgb2YgaXQsIHNvIGV2ZXJ5IHBhZ2UgaXMgcmVwb3J0ZWQuXG4rICpcbisgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIGNsZWFuZWQuXG4rICovXG4raW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxuIHtcbi1cdGludCBjbGVhbmVkID0gMDtcbitcdHN0cnVjdCBta2NsZWFuX3N0YXRlIHN0YXRlID0geyAuZGlydHlfbWFwID0gZGlydHlfbWFwIH07XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG4tXHRcdC5hcmcgPSAodm9pZCAqKVx1MDAyNmNsZWFuZWQsXG4rXHRcdC5hcmcgPSAodm9pZCAqKVx1MDAyNnN0YXRlLFxuIFx0XHQucm1hcF9vbmUgPSBwYWdlX21rY2xlYW5fb25lLFxuIFx0XHQuaW52YWxpZF92bWEgPSBpbnZhbGlkX21rY2xlYW5fdm1hLFxuIFx0fTtcbkBAIC0xMjE3LDcgKzEyNDYsMTIgQEAgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdHJtYXBfd2Fsayhmb2xpbywgXHUwMDI2cndjKTtcbiBcbi1cdHJldHVybiBjbGVhbmVkO1xuK1x0cmV0dXJuIHN0YXRlLmNsZWFuZWQ7XG4rfVxuK1xuK2ludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGZvbGlvX21rY2xlYW5fZGlydHltYXAoZm9saW8sIE5VTEwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19ta2NsZWFuKTtcbiBcbkBAIC0xMjQxLDcgKzEyNzUsNyBAQCBzdGF0aWMgYm9vbCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0LmZsYWdzXHRcdD0gUFZNV19TWU5DLFxuIFx0fTtcbiBcbi1cdHN0YXRlLVx1MDAzZWNsZWFuZWQgKz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4rXHRzdGF0ZS1cdTAwM2VjbGVhbmVkICs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcsIE5VTEwpO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTEzMjQsNyArMTM1OCw3IEBAIGludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcbiBcdHB2bXcuYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHZtYSwgcGdvZmYsIG5yX3BhZ2VzKTtcbiBcdFZNX0JVR19PTl9WTUEocHZtdy5hZGRyZXNzID09IC1FRkFVTFQsIHZtYSk7XG4gXG4tXHRyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdyk7XG4rXHRyZXR1cm4gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdywgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fZm9saW9fbW9kX3N0YXQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5yLCBpbnQgbnJfcG1kbWFwcGVkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDI6NDIuNDY3MzgzODUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ2NTgwNDcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJzdGFudGlhbCBLZXJuZWwgTWVtb3J5IGFuZCBGaWxlc3lzdGVtIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgcnVubmluZyB0aHJvdWdoIG15IGhlYWQuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSAqKnNlcmlvdXMqKiBjb3JlIGluZnJhc3RydWN0dXJlLiBXZSdyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgZGVlcCB3aXRoaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHZpcnR1YWwgZmlsZXN5c3RlbSBjb2RlIChWRlMpLCBgaW9tYXBgLCBhbmQgZXZlbiBYRlMuIFRoZSBzcGVjaWZpYyBmaWxlcyB0ZWxsIHRoZSBzdG9yeTogY2hhbmdlcyB0byBgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VgLCBgaW9tYXBfZGlydHlfZm9saW9gLCBgaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyYCwgYW5kIGBpb21hcF9wYWdlX21rd3JpdGVgIGluZGljYXRlIGZ1bmRhbWVudGFsIGFkanVzdG1lbnRzIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYnVmZmVyZWQgSS9PIHRocm91Z2ggYGlvbWFwYC4gVGhlIGluY2x1c2lvbiBvZiBgLmRpcnR5X2ZvbGlvX3JhbmdlID0gaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VgIHdpdGhpbiBgeGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc2AgaXMgc2lnbmlmaWNhbnQsIGRpcmVjdGx5IGludGVncmF0aW5nIHRoZXNlIGBpb21hcGAgY2hhbmdlcyBpbnRvIFhGUydzIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucy5cblxuVGhlIGluY2x1ZGUgZmlsZXMgLS0gYGZzLmhgLCBgaW9tYXAuaGAsIGBtbS5oYCwgYW5kIGBybWFwLmhgIC0tIHNob3cgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgaXNvbGF0ZWQ7IHRoZXkncmUgZXhwYW5kaW5nIHRoZSBgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUsIGFuZCBhZGRpbmcgbmV3IGZ1bmN0aW9ucyBsaWtlIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYW5kIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYC4gVGhlIE1NIGNvZGUgaXMgYWxzbyBoZWF2aWx5IGludm9sdmVkLCB3aXRoIGBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZWAsIGBjYW5fZGlydHlfd2hvbGVfYmF0Y2hgLCBhbmQgYHNldF9wdGVfcmFuZ2VgIGJlaW5nIG1vZGlmaWVkLCBhbG9uZ3NpZGUgY2hhbmdlcyB0byBwYWdlIHdyaXRlYmFjayB2aWEgZnVuY3Rpb25zIGxpa2UgYG1hcHBpbmdfZGlydHlfcmFuZ2VgLCBgZm9saW9fbWFya19kaXJ0eWAsIGFuZCBgZm9saW9fbWtjbGVhbl9mb3JfaW9gLCBhcyB3ZWxsIGFzIHJtYXAgKHJldmVyc2UgbWFwKSBtb2RpZmljYXRpb25zLiAgVGhlIGNoYW5nZXMgdG8gcm1hcCBsb29rIHRvIHN1cHBvcnQgZm9saW8gb3BlcmF0aW9ucywgc28gdGhpcyBjb3VsZCBiZSBhIG1ham9yIG1lbW9yeSByZWNsYW1hdGlvbiBvciB2aXJ0dWFsIG1lbW9yeSBjaGFuZ2UuXG5cblRoaXMgaXMgYSAqKm1ham9yKiogYXJlYSBvZiB0aGUga2VybmVsLCBhZmZlY3RpbmcgcGFnZSBjYWNoZSB3cml0ZWJhY2ssIGZhdWx0aW5nIHNoYXJlZCBwYWdlcywgbWt3cml0ZSBvcGVyYXRpb25zLCByZXZlcnNlIG1hcHBpbmcsIGJ1ZmZlcmVkIElPLCBhbmQgWEZTISBBbmQgdGhvc2UgYXJlIGp1c3QgdGhlIG9idmlvdXMgZnVuY3Rpb25zIHRoYXQgd2VyZSBjaGFuZ2VkLiBUaGUgaW1wYWN0IG9mIHN1Y2ggY2hhbmdlcyBjb3VsZCBiZSBmYXItcmVhY2hpbmcuIEdpdmVuIHRoZSByZWFjaCBvZiB0aGVzZSBjaGFuZ2VzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBjb2RlIGlzIGVhc2lseSByZWFjaGFibGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcyDigJMgdGhpbmsgUUVNVSBvciBldmVuIHNvbWV0aGluZyBsaWtlIHN5emthbGxlci5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMsIHRvIHVuZGVyc3RhbmQgd2hhdCBidWlsZCBjb25maWd1cmF0aW9ucyB3b3VsZCBleHBvc2UgdGhpcyBjb2RlLiBJIG5lZWQgdG8ga25vdyB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIHRvIHNlZSB0aGUgZXhwb3NlZCBhdHRhY2sgc3VyZmFjZS4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBtYW51YWxseSBnbyB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGZzL3hmcy9LY29uZmlnYCBhbmQgYGZzL2lvbWFwL0tjb25maWdgLCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZpbmQgdGhlIGVuYWJsZWQgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTczOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjQ2LjkzMzE5MTkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzA2NTQyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQfGNvbmZpZyBYRlNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuLS1cXG5mcy94ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3hmcy9LY29uZmlnOjI6Y29uZmlnIFhGU19GU1xcbmZzL3hmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlhGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjQ5LjA2Mzg1MDc5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzQwNDA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlhGUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogQSBRdWljayBBdWRpdCoqXG5cbk9rYXksIHNvIEkgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUgWEZTIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZnMveGZzL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCBpdC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCBvdGhlciBmZWF0dXJlcyBvciBrZXJuZWwgc3Vic3lzdGVtcyBYRlMgaXMgcHVsbGluZyBpbiB0aHJvdWdoIFwic2VsZWN0XCIgb3IgXCJkZXBlbmRzIG9uXCIgZGlyZWN0aXZlcy4gTXkgZ29hbCBpcyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgcmVsYXRpb25zaGlwcyBvciBpbXBsaWVkIGNvbnN0cmFpbnRzIHRoYXQgbWlnaHQgaW1wYWN0IG15IGN1cnJlbnQgZm9jdXMsIHdoYXRldmVyIGl0IG1heSBiZS4gSSdtIG5vdCBhZnRlciBsaW5lLWJ5LWxpbmUgdW5kZXJzdGFuZGluZywganVzdCB0aGUga2V5IGRlcGVuZGVuY2llcyB0aGF0IGRpY3RhdGUgdGhlIFhGUyBidWlsZCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk2NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjUwLjg5Nzg5NDMwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3hmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgWEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiWEZTIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA1OlxcdFxcdHNlbGVjdCBFWFBPUlRGU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgNzpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgWEZTIGlzIGEgaGlnaCBwZXJmb3JtYW5jZSBqb3VybmFsaW5nIGZpbGVzeXN0ZW0gd2hpY2ggb3JpZ2luYXRlZFxcbiAgMTA6XFx0XFx0ICBvbiB0aGUgU0dJIElSSVggcGxhdGZvcm0uICBJdCBpcyBjb21wbGV0ZWx5IG11bHRpLXRocmVhZGVkLCBjYW5cXG4gIDExOlxcdFxcdCAgc3VwcG9ydCBsYXJnZSBmaWxlcyBhbmQgbGFyZ2UgZmlsZXN5c3RlbXMsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsXFxuICAxMjpcXHRcXHQgIHZhcmlhYmxlIGJsb2NrIHNpemVzLCBpcyBleHRlbnQgYmFzZWQsIGFuZCBtYWtlcyBleHRlbnNpdmUgdXNlIG9mXFxuICAxMzpcXHRcXHQgIEJ0cmVlcyAoZGlyZWN0b3JpZXMsIGV4dGVudHMsIGZyZWUgc3BhY2UpIHRvIGFpZCBib3RoIHBlcmZvcm1hbmNlXFxuICAxNDpcXHRcXHQgIGFuZCBzY2FsYWJpbGl0eS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBhdCBcXHUwMDNjaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL3hmcy9cXHUwMDNlXFxuICAxNzpcXHRcXHQgIGZvciBjb21wbGV0ZSBkZXRhaWxzLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBvbi1kaXNrIGNvbXBhdGlibGVcXG4gIDE4OlxcdFxcdCAgd2l0aCB0aGUgSVJJWCB2ZXJzaW9uIG9mIFhGUy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAyMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB4ZnMuICBCZSBhd2FyZSwgaG93ZXZlciwgdGhhdCBpZiB0aGUgZmlsZVxcbiAgMjI6XFx0XFx0ICBzeXN0ZW0gb2YgeW91ciByb290IHBhcnRpdGlvbiBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgeW91J2xsIG5lZWRcXG4gIDIzOlxcdFxcdCAgdG8gdXNlIGFuIGluaXRpYWwgcmFtZGlzayAoaW5pdHJkKSB0byBib290LlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgWEZTX1NVUFBPUlRfVjRcXG4gIDI2OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZGVwcmVjYXRlZCBWNCAoY3JjPTApIGZvcm1hdFxcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gWEZTX0ZTXFxuICAyODpcXHRcXHRkZWZhdWx0IG5cXG4gIDI5OlxcdFxcdGhlbHBcXG4gIDMwOlxcdFxcdCAgVGhlIFY0IGZpbGVzeXN0ZW0gZm9ybWF0IGxhY2tzIGNlcnRhaW4gZmVhdHVyZXMgdGhhdCBhcmUgc3VwcG9ydGVkXFxuICAzMTpcXHRcXHQgIGJ5IHRoZSBWNSBmb3JtYXQsIHN1Y2ggYXMgbWV0YWRhdGEgY2hlY2tzdW1taW5nLCBzdHJlbmd0aGVuZWRcXG4gIDMyOlxcdFxcdCAgbWV0YWRhdGEgdmVyaWZpY2F0aW9uLCBhbmQgdGhlIGFiaWxpdHkgdG8gc3RvcmUgdGltZXN0YW1wcyBwYXN0IHRoZVxcbiAgMzM6XFx0XFx0ICB5ZWFyIDIwMzguICBCZWNhdXNlIG9mIHRoaXMsIHRoZSBWNCBmb3JtYXQgaXMgZGVwcmVjYXRlZC4gIEFsbCB1c2Vyc1xcbiAgMzQ6XFx0XFx0ICBzaG91bGQgdXBncmFkZSBieSBiYWNraW5nIHVwIHRoZWlyIGZpbGVzLCByZWZvcm1hdHRpbmcsIGFuZCByZXN0b3JpbmdcXG4gIDM1OlxcdFxcdCAgZnJvbSB0aGUgYmFja3VwLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIEFkbWluaXN0cmF0b3JzIGFuZCB1c2VycyBjYW4gZGV0ZWN0IGEgVjQgZmlsZXN5c3RlbSBieSBydW5uaW5nXFxuICAzODpcXHRcXHQgIHhmc19pbmZvIGFnYWluc3QgYSBmaWxlc3lzdGVtIG1vdW50cG9pbnQgYW5kIGNoZWNraW5nIGZvciBhIHN0cmluZ1xcbiAgMzk6XFx0XFx0ICBiZWdpbm5pbmcgd2l0aCBcXFwiY3JjPVxcXCIuICBJZiB0aGUgc3RyaW5nIFxcXCJjcmM9MFxcXCIgaXMgZm91bmQsIHRoZVxcbiAgNDA6XFx0XFx0ICBmaWxlc3lzdGVtIGlzIGEgVjQgZmlsZXN5c3RlbS4gIElmIG5vIHN1Y2ggc3RyaW5nIGlzIGZvdW5kLCBwbGVhc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDI6NTAuODk3OTc3MjA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MzUwMTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFhGUyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBYRlNfRlMgaXMgdXNpbmcgQkxPQ0sgYW5kIEZTX0lPTUFQLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNob2ljZS4gSSdtIGFsc28gcmVtaW5kZWQgdGhhdCBtbS9tZW1vcnkuYywgbW0vcGFnZS13cml0ZWJhY2suYywgYW5kIG1tL3JtYXAuYyBhcmUgYWxsIGZvdW5kYXRpb25hbCB0byB0aGUgY29yZSBNZW1vcnkgTWFuYWdlbWVudCAoTU0pIGxheWVyLiBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBldmVyeXRoaW5nIGlzIHdvcmtpbmcgdG9nZXRoZXIgaW4gdGhhdCBhcmVhLlxuXG5TaW5jZSBYRlMgaXMgdXRpbGl6aW5nIEZTX0lPTUFQLCBJIHdvbmRlciBpZiBvdGhlciBmaWxlc3lzdGVtcyBhcmUgZG9pbmcgdGhlIHNhbWUuIEl0J3MgdGltZSB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGZpbGVzeXN0ZW1zIGxldmVyYWdlIGlvbWFwIG9yIHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLiBBIHF1aWNrIGBncmVwYCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGBkaXJ0eV9mb2xpb19yYW5nZWAgc2hvdWxkIGhlbHAgbWUgaWRlbnRpZnkgYW55IG90aGVyIHBvdGVudGlhbCB1c2VycyBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgYnJvYWRlciBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAyOjUzLjI4MTQ4MTQyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM3NDE4MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpcnR5X2ZvbGlvX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODQ4PUVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODQ5LVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODUwOmJvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NTEtXFx0XFx0c2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODU2LX1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjg1NzpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NTgtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz04NTk9Ym9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg2MC17XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4NjE6XFx0cmV0dXJuIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKG1hcHBpbmcsIGZvbGlvLCAwLCBmb2xpb19zaXplKGZvbGlvKSk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NjItfVxcbi0tXFxuZnMveGZzL3hmc19hb3BzLmM9ODYyPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgeGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jLTg2NS1cXHQud3JpdGVwYWdlc1xcdFxcdD0geGZzX3ZtX3dyaXRlcGFnZXMsXFxuZnMveGZzL3hmc19hb3BzLmM6ODY2OlxcdC5kaXJ0eV9mb2xpb19yYW5nZVxcdD0gaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UsXFxuZnMveGZzL3hmc19hb3BzLmMtODY3LVxcdC5yZWxlYXNlX2ZvbGlvXFx0XFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTQwMT1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC00MDktXFx0LyogTWFyayBbb2ZmLCBvZmYgKyBsZW4pIG9mIGEgZm9saW8gZGlydHkgKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6NDEwOlxcdGJvb2wgKCpkaXJ0eV9mb2xpb19yYW5nZSkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuaW5jbHVkZS9saW51eC9mcy5oLTQxMS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pb21hcC5oPTQ0NT1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6NDQ2OmJvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTQ0Ny1cXHRcXHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcXG4tLVxcbm1tL21lbW9yeS5jPTU2NDk9c3RhdGljIGJvb2wgY2FuX2RpcnR5X3dob2xlX2JhdGNoKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5tbS9tZW1vcnkuYy01NjU4LVxcbm1tL21lbW9yeS5jOjU2NTk6XFx0cmV0dXJuICF2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlO1xcbm1tL21lbW9yeS5jLTU2NjAtfVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yNzUyPUVYUE9SVF9TWU1CT0woZm9saW9fcmVkaXJ0eV9mb3Jfd3JpdGVwYWdlKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc1NC0vKlxcbm1tL3BhZ2Utd3JpdGViYWNrLmM6Mjc1NTogKiBIYW5kIGEgZGlydGllZCByYW5nZSBvZiBAZm9saW8gdG8gdGhlIGZpbGVzeXN0ZW0uICAtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKCkgY2FuXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNzU2LSAqIGV4cHJlc3MgZXZlcnl0aGluZyAtXFx1MDAzZWRpcnR5X2ZvbGlvKCkgY2FuLCBzbyBhIGZpbGVzeXN0ZW0gdGhhdCBpbXBsZW1lbnRzIGl0XFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI3NjA9c3RhdGljIGJvb2wgbWFwcGluZ19kaXJ0eV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc2Mi17XFxubW0vcGFnZS13cml0ZWJhY2suYzoyNzYzOlxcdGlmICghbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlKVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc2NC1cXHRcXHRyZXR1cm4gbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NjUtXFxubW0vcGFnZS13cml0ZWJhY2suYzoyNzY2OlxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3NjctfVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yODg2PUVYUE9SVF9TWU1CT0woX19mb2xpb19jYW5jZWxfZGlydHkpO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0yODkxLSAqXFxubW0vcGFnZS13cml0ZWJhY2suYzoyODkyOiAqIFdpdGhvdXQgLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIHRoZXJlIGlzIG5vd2hlcmUgdG8gcHV0IHBlci1ibG9jayBzdGF0ZSwgc29cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI4OTMtICogYW55IFBURSBkaXJ0eSBiaXQgZGlydGllcyB0aGUgd2hvbGUgZm9saW8uICBTYW1lIHdoZW4gdGhlIGZvbGlvIGlzIG5vdFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yODk4PXN0YXRpYyB2b2lkIGZvbGlvX21rY2xlYW5fZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5MDQtXFxubW0vcGFnZS13cml0ZWJhY2suYzoyOTA1OlxcdGlmICghbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlIHx8ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjkwNi1cXHQgICAgV0FSTl9PTl9PTkNFKG5yIFxcdTAwM2UgKDFVTCBcXHUwMDNjXFx1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDI6NTQuOTE4OTA3MzQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1NDc5MTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRGlydHkgRm9saW8gUmFuZ2UgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBmb2N1c2luZyBvbiB0aGUgaW50cm9kdWN0aW9uIG9mIHN1Yi1mb2xpbyByYW5nZSBkaXJ0eSB0cmFja2luZywgc3BlY2lmaWNhbGx5IGZvciBmaWxlc3lzdGVtcyBsaWtlIFhGUyB0aGF0IHV0aWxpemUgaW9tYXAuIE15IGluaXRpYWwgc2NhbiBoYXMgaWRlbnRpZmllZCBhIHNldCBvZiBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucyBhY3Jvc3MgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgLCBgbW0vcGFnZS13cml0ZWJhY2suY2AsIGBtbS9ybWFwLmNgLCBhbmQgYG1tL21lbW9yeS5jYC4gSSd2ZSBjYXRlZ29yaXplZCB0aGVtIGJhc2VkIG9uIHRoZWlyIGltcGFjdC5cblxuSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgbm9uLXViaXF1aXRvdXMgZm9jdXMgc3ltYm9scyBJIHdhbnQgdG8gdGFyZ2V0LiBJJ20gYXZvaWRpbmcgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGVudHJ5IHBvaW50cywgYW5kIGNvcmUgbG9jayBwcmltaXRpdmVzLCBzaW5jZSB0aG9zZSB3b24ndCBnaXZlIG1lIHRoZSBzcGVjaWZpYyBjb2RlIEknbSBhZnRlci4gSSd2ZSBzcGVjaWZpY2FsbHkgc2VsZWN0ZWQgYGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlYCwgYGlvbWFwX3BhZ2VfbWt3cml0ZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgLCBhbmQgYGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pb2AgYXMgdGhlIGNvcmUgZnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBvbi4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY292ZXJhZ2Ugb2YgdGhlIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25hbGl0eS5cblxuSSd2ZSBjaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMgdG8gc2VlIGlmIEkgbmVlZCB0byBlbmFibGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIFhGUyB0byB0cmlnZ2VyIHRoZSBob29rcyBJJ20gaW50ZXJlc3RlZCBpbi4gSSBrbm93IHRoYXQgYFhGU19GU2Agd2lsbCBjb21waWxlIFhGUyBhbmQsIGltcG9ydGFudGx5LCBhbHNvIGVuYWJsZSBgRlNfSU9NQVBgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBoaXR0aW5nIHRoZSBYRlMgY29kZSBwYXRoLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgYWxsIHRoZSByZXF1aXJlbWVudHM6IHRoZSBmdXp6aW5nIGlzIHdvcnRoIGl0LCB0aGUgY29uZmlndXJhdGlvbiBlbmFibGVzIFhGUywgYW5kIEkndmUgZ290IHRoZSBjb3JyZWN0IGBGb2N1c1N5bWJvbHNgIHNldCB0byB0YXJnZXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHJlZmxlY3QgdGhlIGNvcmUgY2hhbmdlLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IHdlIHRyYWNrIGRpcnR5IHN1Yi1mb2xpbyByYW5nZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHN1cHBvcnRpbmcgcGVyLWJsb2NrIGRpcnR5IHRyYWNraW5nIG9uIGxhcmdlIGZvbGlvcywgZXNwZWNpYWxseSBpbiBmaWxlc3lzdGVtcyBsaWtlIFhGUyB3aGljaCB1c2UgaW9tYXAuIFRoaXMgaW1wYWN0cyBldmVyeXRoaW5nIGZyb20gcGFnZSBmYXVsdCBoYW5kbGluZywgdG8gc2hhcmVkIHBhZ2UgZGlydHlpbmcsIHRvIHdyaXRlYmFjayB0cmFuc2l0aW9ucywgYW5kIGV2ZW4gcm1hcCBjbGVhbmluZy4gVGhhdCBpcyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yIC0gY2hhbmdlcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBpb21hcCwgYW5kIHRoZSBYRlMgY29kZSBwYXRoLiBUaGlzIGFuYWx5c2lzIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDI2LCJPdXRwdXRUb2tlbnMiOjIwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMzowMC4yNzM3MDEwNTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTc1MjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfZGlydHlfZm9saW9fcmFuZ2VcIixcbiAgICBcImlvbWFwX3BhZ2VfbWt3cml0ZVwiLFxuICAgIFwiZm9saW9fbWFya19kaXJ0eV9yYW5nZVwiLFxuICAgIFwiZm9saW9fbWtjbGVhbl9kaXJ0eW1hcFwiLFxuICAgIFwiZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3ViLWZvbGlvIHJhbmdlIGRpcnR5aW5nIHZpYSAtXFx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlLCBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKCksIGZvbGlvX21rY2xlYW5fZGlydHltYXAoKSwgYW5kIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKCkgZm9yIFhGUy9pb21hcC4gSXQgbW9kaWZpZXMgY29yZSBNTSBkaXJ0eSBmb2xpbyB0cmFja2luZywgd3JpdGUtcHJvdGVjdC9jbGVhbiB0cmFuc2l0aW9ucyBpbiB3cml0ZWJhY2sgKGZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pbyksIHJtYXAgUFRFL1BNRCBkaXJ0eSB3YWxrLCBhbmQgcGFnZSBmYXVsdCBoYW5kbGluZyBmb3Igc2hhcmVkIG1hcHBpbmdzLiBUaGVzZSByZWFjaGFibGUgTU0gYW5kIGZpbGVzeXN0ZW0gcGF0aHMgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlXCIsXG4gICAgXCJpb21hcF9wYWdlX21rd3JpdGVcIixcbiAgICBcImZvbGlvX21hcmtfZGlydHlfcmFuZ2VcIixcbiAgICBcImZvbGlvX21rY2xlYW5fZGlydHltYXBcIixcbiAgICBcImZvbGlvX2NsZWFyX2RpcnR5X2Zvcl9pb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1Yi1mb2xpbyByYW5nZSBkaXJ0eWluZyB2aWEgLVxcdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSwgZm9saW9fbWFya19kaXJ0eV9yYW5nZSgpLCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKCksIGFuZCBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSgpIGZvciBYRlMvaW9tYXAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gZGlydHkgZm9saW8gdHJhY2tpbmcsIHdyaXRlLXByb3RlY3QvY2xlYW4gdHJhbnNpdGlvbnMgaW4gd3JpdGViYWNrIChmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8pLCBybWFwIFBURS9QTUQgZGlydHkgd2FsaywgYW5kIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncy4gVGhlc2UgcmVhY2hhYmxlIE1NIGFuZCBmaWxlc3lzdGVtIHBhdGhzIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MDAuMzUzNDYxNzQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY2NDM2NzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjAwLjM1MzkzODYyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNjYzODg3NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhbmdlLWJhc2VkIGRpcnR5IHRyYWNraW5nIGZvciBsYXJnZSBmb2xpb3MgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaW9tYXAgKHNwZWNpZmljYWxseSBgZGlydHlfZm9saW9fcmFuZ2VgLCBgZm9saW9fbWFya19kaXJ0eV9yYW5nZWAsIGFuZCBgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcGApLlxcblxcbjEuIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMuIEFsbCBuZXcgbG9jYWwgdmFyaWFibGVzIChgZGlydHlfb2ZmYCwgYGRpcnR5X2xlbmAsIGBzdGF0ZWAsIGFuZCBzdGFjayBiaXRtYXAgYG1hcGAgaW4gYGZvbGlvX21rY2xlYW5fZm9yX2lvYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGBiaXRtYXBfemVyb2AsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGV0Yy4pLiBUaGVyZSBhcmUgbm8gaW5mby1sZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdmVjdG9ycy5cXG4yLiBLQVNBTiAvIHN0YW5kYXJkIGRldGVjdG9ycyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gcmFuZ2UgY2FsY3VsYXRpb25zLCBiaXRtYXNrIG9wZXJhdGlvbnMsIG9yIHBhZ2UgdGFibGUgd2Fsa3Mgd291bGQgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYXNzZXJ0aW9ucy9sb2NraW5nIGlzc3Vlcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDUxOWI0NjFjOWIzZmRlY2FhODgwZTBjOTNiNGRhOTk3NzUxYzFiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDQ6MDI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggMGE1ZWJmZGE5MGYxMi4uOGQ4YThhY2FiMDFhYyAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbisrKyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC04NDcsMTUgKzg0NywxOSBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG4gXG4tYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbitib29sIGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRzaXplX3QgbGVuID0gZm9saW9fc2l6ZShmb2xpbyk7XG4tXG4tXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcbi1cdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgMCwgbGVuKTtcbitcdGlmc19hbGxvYyhtYXBwaW5nLVx1MDAzZWhvc3QsIGZvbGlvLCAwKTtcbitcdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgb2ZmLCBsZW4pO1xuIFx0cmV0dXJuIGZpbGVtYXBfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaXJ0eV9mb2xpb19yYW5nZSk7XG4rXG4rYm9vbCBpb21hcF9kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIDAsIGZvbGlvX3NpemUoZm9saW8pKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlydHlfZm9saW8pO1xuIFxuIHN0YXRpYyB2b2lkXG5AQCAtMTgwNCw3ICsxODA4LDcgQEAgaW9tYXBfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF90cnVuY2F0ZV9wYWdlKTtcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGRpcnR5X29mZiwgc2l6ZV90IGRpcnR5X2xlbilcbiB7XG4gXHRsb2ZmX3QgbGVuZ3RoID0gaW9tYXBfbGVuZ3RoKGl0ZXIpO1xuIFx0aW50IHJldDtcbkBAIC0xODE3LDcgKzE4MjEsNyBAQCBzdGF0aWMgaW50IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdFx0YmxvY2tfY29tbWl0X3dyaXRlKGZvbGlvLCAwLCBsZW5ndGgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0V0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSk7XG4tXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuK1x0XHRmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XG4gXHR9XG4gXG4gXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XG5AQCAtMTgzMiw2ICsxODM2LDcgQEAgdm1fZmF1bHRfdCBpb21hcF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcbiBcdFx0LnByaXZhdGVcdD0gcHJpdmF0ZSxcbiBcdH07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSk7XG4rXHRzaXplX3QgZGlydHlfb2ZmLCBkaXJ0eV9sZW47XG4gXHRzc2l6ZV90IHJldDtcbiBcbiBcdGZvbGlvX2xvY2soZm9saW8pO1xuQEAgLTE4NDAsOCArMTg0NSwyMiBAQCB2bV9mYXVsdF90IGlvbWFwX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRpdGVyLnBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XG4gXHRpdGVyLmxlbiA9IHJldDtcbitcbitcdC8qXG4rXHQgKiBCbG9ja3MgYXJlIHN0aWxsIGFsbG9jYXRlZCBmb3IgdGhlIHdob2xlIGZvbGlvLCBidXQgb25seSB0aGUgcGFnZVxuK1x0ICogdGhlIGZhdWx0IHdhcyBmb3IgaGFzIGJlZW4gd3JpdHRlbiwgc28gdGhhdCBpcyBhbGwgdGhhdCBoYXMgdG8gYmVcbitcdCAqIHdyaXR0ZW4gYmFjay4gIEEgcmFjaW5nIHRydW5jYXRlIGNhbiBsZWF2ZSB0aGF0IHBhZ2UgYmV5b25kIGlfc2l6ZSxcbitcdCAqIGFuZCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlydHkuXG4rXHQgKi9cbitcdGRpcnR5X29mZiA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCB2bWYtXHUwMDNlcGFnZSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4rXHRpZiAoZGlydHlfb2ZmIFx1MDAzYyByZXQpXG4rXHRcdGRpcnR5X2xlbiA9IG1pbl90KHNpemVfdCwgUEFHRV9TSVpFLCByZXQgLSBkaXJ0eV9vZmYpO1xuK1x0ZWxzZVxuK1x0XHRkaXJ0eV9sZW4gPSAwO1xuK1xuIFx0d2hpbGUgKChyZXQgPSBpb21hcF9pdGVyKFx1MDAyNml0ZXIsIG9wcykpIFx1MDAzZSAwKVxuLVx0XHRpdGVyLnN0YXR1cyA9IGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcihcdTAwMjZpdGVyLCBmb2xpbyk7XG4rXHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfZm9saW9fbWt3cml0ZV9pdGVyKFx1MDAyNml0ZXIsIGZvbGlvLFxuK1x0XHRcdFx0XHRcdCAgICAgICBkaXJ0eV9vZmYsIGRpcnR5X2xlbik7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xuaW5kZXggNzRhNjA4OWFiYWRmOS4uNjAwZTdkZTJlNTk5YyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xuQEAgLTg2Myw3ICs4NjMsNyBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZF9mb2xpb1x0XHQ9IHhmc192bV9yZWFkX2ZvbGlvLFxuIFx0LnJlYWRhaGVhZFx0XHQ9IHhmc192bV9yZWFkYWhlYWQsXG4gXHQud3JpdGVwYWdlc1x0XHQ9IHhmc192bV93cml0ZXBhZ2VzLFxuLVx0LmRpcnR5X2ZvbGlvXHRcdD0gaW9tYXBfZGlydHlfZm9saW8sXG4rXHQuZGlydHlfZm9saW9fcmFuZ2VcdD0gaW9tYXBfZGlydHlfZm9saW9fcmFuZ2UsXG4gXHQucmVsZWFzZV9mb2xpb1x0XHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXG4gXHQuaW52YWxpZGF0ZV9mb2xpb1x0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuIFx0LmJtYXBcdFx0XHQ9IHhmc192bV9ibWFwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggMDcyZDhjZDA5YTBiMi4uMWQ5OGI2YzBiODgwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtNDA2LDYgKzQwNiw5IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMge1xuIFxuIFx0LyogTWFyayBhIGZvbGlvIGRpcnR5LiAgUmV0dXJuIHRydWUgaWYgdGhpcyBkaXJ0aWVkIGl0ICovXG4gXHRib29sICgqZGlydHlfZm9saW8pKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCBmb2xpbyAqKTtcbitcdC8qIE1hcmsgW29mZiwgb2ZmICsgbGVuKSBvZiBhIGZvbGlvIGRpcnR5ICovXG4rXHRib29sICgqZGlydHlfZm9saW9fcmFuZ2UpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKTtcbiBcbiBcdHZvaWQgKCpyZWFkYWhlYWQpKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbmluZGV4IGJjN2FlNjMyN2RiZjguLjNjZjJhYzc1MTQwOWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuQEAgLTQ0Myw2ICs0NDMsOCBAQCBzdHJ1Y3QgZm9saW8gKmlvbWFwX2dldF9mb2xpbyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90IHBvcywgc2l6ZV90IGxlbik7XG4gYm9vbCBpb21hcF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9mbGFncyk7XG4gdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pO1xuIGJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2Jvb2wgaW9tYXBfZGlydHlfZm9saW9fcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHNpemVfdCBvZmYsIHNpemVfdCBsZW4pO1xuIHZvaWQgaW9tYXBfZm9saW9fbWFya191cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgaW9tYXBfZmlsZV91bnNoYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDg3ZmVhYTVhMmI3ODAuLjc2MjgyNjJjMTdlMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTMzMzcsNiArMzMzNyw3IEBAIHN0cnVjdCBrdmVjO1xuIHN0cnVjdCBwYWdlICpnZXRfZHVtcF9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50ICpsb2NrZWQpO1xuIFxuIGJvb2wgZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitib29sIGZvbGlvX21hcmtfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbik7XG4gYm9vbCBmb2xpb19tYXJrX2RpcnR5X2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCBzZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9wYWdlX2RpcnR5X2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbmluZGV4IDhkYzA4NzFlNWYwMDEuLjZmYzBhNjAyMDI1MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbkBAIC05MjcsNiArOTI3LDcgQEAgdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNsZWFuZWQgUFRFcy5cbiAgKi9cbiBpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKik7XG4raW50IGZvbGlvX21rY2xlYW5fZGlydHltYXAoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKTtcbiBcbiBpbnQgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYsXG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbkBAIC05OTAsNiArOTkxLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21rY2xlYW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqZGlydHlfbWFwKVxuK3tcbitcdHJldHVybiAwO1xuK31cbiAjZW5kaWZcdC8qIENPTkZJR19NTVUgKi9cbiBcbiAjZW5kaWZcdC8qIF9MSU5VWF9STUFQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4ZGEwZjk0NTE0MWI0Li4yN2EwNTllMGMwMTZmIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMzc3OCwxMCArMzc3OCwxOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuK1x0c2l6ZV90IG9mZiA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCB2bWYtXHUwMDNlcGFnZSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHRib29sIGRpcnRpZWQ7XG4gXHRib29sIHBhZ2VfbWt3cml0ZSA9IHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlcGFnZV9ta3dyaXRlO1xuIFxuLVx0ZGlydGllZCA9IGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuK1x0LypcbitcdCAqIEEgUE1EIGVudHJ5IGhhcyBvbmUgZGlydHkgYml0IGZvciB0aGUgd2hvbGUgZm9saW8sIHNvIHRoZXJlIGlzIG5vXG4rXHQgKiBmaW5lciBpbmZvcm1hdGlvbiB0byBwYXNzIG9uLiBBIFBURS1tYXBwZWQgZm9saW8gb25seSBoYXMgdGhlIHBhZ2VcbitcdCAqIHRoZSBmYXVsdCB3YXMgZm9yIGRpcnRpZWQgc28gZmFyLlxuK1x0ICovXG4rXHRpZiAocG1kX3RyYW5zX2h1Z2UocG1kcF9nZXRfbG9ja2xlc3Modm1mLVx1MDAzZXBtZCkpKVxuK1x0XHRkaXJ0aWVkID0gZm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGRpcnRpZWQgPSBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKGZvbGlvLCBvZmYsIFBBR0VfU0laRSk7XG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xuIFx0LypcbiBcdCAqIFRha2UgYSBsb2NhbCBjb3B5IG9mIHRoZSBhZGRyZXNzX3NwYWNlIC0gZm9saW8ubWFwcGluZyBtYXkgYmUgemVyb2VkXG5AQCAtNTYyNSw2ICs1NjM0LDMxIEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXG4gfVxuICNlbmRpZlxuIFxuKy8qXG4rICogTWF5IHRoZSB3aG9sZSBiYXRjaCBiZSBtYXJrZWQgZGlydHk/XG4rICpcbisgKiBPbmx5IGEgc2hhcmVkIG1hcHBpbmcgb2YgYSBmaWxlc3lzdGVtIHRoYXQgdHJhY2tzIGRpcnR5IHN0YXRlIHBlciBibG9jayBzYXlzXG4rICogbm8uIFRoZXJlIHRoZSBwYWdlIHRhYmxlIGRpcnR5IGJpdHMgYXJlIHRoZSBvbmx5IHJlY29yZCBvZiB3aGljaCBwYXJ0cyBvZiBhXG4rICogbGFyZ2UgZm9saW8gd2VyZSB3cml0dGVuIHRocm91Z2ggdGhlIG1hcHBpbmcsIHNvIHBhZ2VzIG5vYm9keSBoYXMgc3RvcmVkIHRvXG4rICogaGF2ZSB0byBzdGF5IGNsZWFuIGFuZCBsZXQgdGhlIGhhcmR3YXJlIHNldCB0aGUgYml0IG9uIHRoZSBmaXJzdCBzdG9yZS5cbisgKlxuKyAqIEV2ZXJ5d2hlcmUgZWxzZSBub3RoaW5nIGV2ZXIgcmVhZHMgdGhvc2UgYml0cywgYW5kIG9uIGhhcmR3YXJlIHdpdGhvdXQgYVxuKyAqIGRpcnR5IGJpdCBsZWF2aW5nIHRoZW0gY2xlYW4gY29zdHMgYSBmYXVsdCBwZXIgcGFnZSBmb3Igbm90aGluZy4gVGhhdCBjb3ZlcnNcbisgKiBzaG1lbSwgd2hpY2ggaGFzIG5vIGRpcnR5IHN0YXRlIGJlbG93IHRoZSBmb2xpby5cbisgKi9cbitzdGF0aWMgYm9vbCBjYW5fZGlydHlfd2hvbGVfYmF0Y2goc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBucixcbitcdFx0XHRcdCAgYm9vbCBwcmVmYXVsdClcbit7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4rXG4rXHRpZiAoISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpIHx8IHByZWZhdWx0IHx8IG5yID09IDEpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiAhdm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvX3JhbmdlO1xuK31cbitcbiAvKipcbiAgKiBzZXRfcHRlX3JhbmdlIC0gU2V0IGEgcmFuZ2Ugb2YgUFRFcyB0byBwb2ludCB0byBwYWdlcyBpbiBhIGZvbGlvLlxuICAqIEB2bWY6IEZhdWx0IGRlc2NyaXB0aW9uLlxuQEAgLTU2MzksNiArNTY3Myw3IEBAIHZvaWQgc2V0X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbiBcdGJvb2wgd3JpdGUgPSB2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEU7XG4gXHRib29sIHByZWZhdWx0ID0gIWluX3JhbmdlKHZtZi1cdTAwM2VhZGRyZXNzLCBhZGRyLCBuciAqIFBBR0VfU0laRSk7XG4rXHRib29sIGRpcnR5X2JhdGNoID0gY2FuX2RpcnR5X3dob2xlX2JhdGNoKHZtZiwgbnIsIHByZWZhdWx0KTtcbiBcdHB0ZV90IGVudHJ5O1xuIFxuIFx0Zmx1c2hfaWNhY2hlX3BhZ2VzKHZtYSwgcGFnZSwgbnIpO1xuQEAgLTU2NDksMTAgKzU2ODQsMTMgQEAgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0ZWxzZVxuIFx0XHRlbnRyeSA9IHB0ZV9zd19ta3lvdW5nKGVudHJ5KTtcbiBcbi1cdGlmICh3cml0ZSlcbi1cdFx0ZW50cnkgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTtcbi1cdGVsc2UgaWYgKHB0ZV93cml0ZShlbnRyeSkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuK1x0aWYgKHdyaXRlKSB7XG4rXHRcdGlmIChkaXJ0eV9iYXRjaClcbitcdFx0XHRlbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTtcbitcdFx0ZW50cnkgPSBtYXliZV9ta3dyaXRlKGVudHJ5LCB2bWEpO1xuK1x0fSBlbHNlIGlmIChwdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xuIFx0XHRlbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTtcbitcdH1cbiBcdGlmICh1bmxpa2VseSh2bWZfb3JpZ19wdGVfdWZmZF93cCh2bWYpKSlcbiBcdFx0ZW50cnkgPSBwdGVfbWt1ZmZkKGVudHJ5KTtcbiBcdC8qIGNvcHktb24td3JpdGUgcGFnZSAqL1xuQEAgLTU2NjUsNiArNTcwMywxOCBAQCB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHR9XG4gXHRzZXRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHZtZi1cdTAwM2VwdGUsIGVudHJ5LCBucik7XG4gXG4rXHQvKlxuK1x0ICogVGhlIHBhZ2UgdGhlIGZhdWx0IHdhcyBmb3IgaXMgYWJvdXQgdG8gYmUgc3RvcmVkIHRvLCBzbyBkaXJ0eSBpdFxuK1x0ICogaGVyZSByYXRoZXIgdGhhbiBsZWF2ZSB0aGUgc3RvcmUgdG8gYSBzZWNvbmQgcGFnZSB0YWJsZSB3YWxrLCBvciB0b1xuK1x0ICogYSBzZWNvbmQgZmF1bHQgd2hlcmUgdGhlIGRpcnR5IGJpdCBpcyBtYWludGFpbmVkIGluIHNvZnR3YXJlLlxuK1x0ICovXG4rXHRpZiAoIWRpcnR5X2JhdGNoKSB7XG4rXHRcdHB0ZV90ICpwdGVwID0gdm1mLVx1MDAzZXB0ZSArICgodm1mLVx1MDAzZWFkZHJlc3MgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXG4rXHRcdHB0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBwdGVwLFxuK1x0XHRcdFx0ICAgICAgcHRlX21rZGlydHkocHRlcF9nZXQocHRlcCkpLCAxKTtcbitcdH1cbitcbiBcdC8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNhY2hlZCAqL1xuIFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZSh2bWYsIHZtYSwgYWRkciwgdm1mLVx1MDAzZXB0ZSwgbnIpO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suY1xuaW5kZXggNmM5YzdiYTg5YjhhOS4uMzliNTRjMjVhOWZhYiAxMDA2NDRcbi0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmNcbisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmNcbkBAIC0yNzUxLDYgKzI3NTEsMjEgQEAgYm9vbCBmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4gfVxuIEVYUE9SVF9TWU1CT0woZm9saW9fcmVkaXJ0eV9mb3Jfd3JpdGVwYWdlKTtcbiBcbisvKlxuKyAqIEhhbmQgYSBkaXJ0aWVkIHJhbmdlIG9mIEBmb2xpbyB0byB0aGUgZmlsZXN5c3RlbS4gIC1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSgpIGNhblxuKyAqIGV4cHJlc3MgZXZlcnl0aGluZyAtXHUwMDNlZGlydHlfZm9saW8oKSBjYW4sIHNvIGEgZmlsZXN5c3RlbSB0aGF0IGltcGxlbWVudHMgaXRcbisgKiBkb2VzIG5vdCBuZWVkIGJvdGgsIGFuZCBhIHdob2xlLWZvbGlvIGRpcnR5IGNvbWVzIHRocm91Z2ggaGVyZSBhcyBhIHJhbmdlXG4rICogY292ZXJpbmcgdGhlIGZvbGlvLlxuKyAqL1xuK3N0YXRpYyBib29sIG1hcHBpbmdfZGlydHlfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuK3tcbitcdGlmICghbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSlcbitcdFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xuK1xuK1x0cmV0dXJuIG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UobWFwcGluZywgZm9saW8sIG9mZiwgbGVuKTtcbit9XG4rXG4gLyoqXG4gICogZm9saW9fbWFya19kaXJ0eSAtIE1hcmsgYSBmb2xpbyBhcyBiZWluZyBtb2RpZmllZC5cbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbkBAIC0yNzgyLDEzICsyNzk3LDM5IEBAIGJvb2wgZm9saW9fbWFya19kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG4gXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4tXHRcdHJldHVybiBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWRpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbitcdFx0cmV0dXJuIG1hcHBpbmdfZGlydHlfcmFuZ2UobWFwcGluZywgZm9saW8sIDAsXG4rXHRcdFx0XHRcdCAgIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdH1cbiBcbiBcdHJldHVybiBub29wX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChmb2xpb19tYXJrX2RpcnR5KTtcbiBcbisvKipcbisgKiBmb2xpb19tYXJrX2RpcnR5X3JhbmdlIC0gTWFyayBwYXJ0IG9mIGEgZm9saW8gYXMgYmVpbmcgbW9kaWZpZWQuXG4rICogQGZvbGlvOiBUaGUgZm9saW8uXG4rICogQG9mZjogT2Zmc2V0IG9mIHRoZSBtb2RpZmllZCByYW5nZSB3aXRoaW4gdGhlIGZvbGlvLlxuKyAqIEBsZW46IExlbmd0aCBvZiB0aGUgbW9kaWZpZWQgcmFuZ2UuXG4rICpcbisgKiBMaWtlIGZvbGlvX21hcmtfZGlydHkoKSwgYnV0IHRlbGxzIGEgZmlsZXN5c3RlbSB0aGF0IHRyYWNrcyBkaXJ0eSBzdGF0ZSBwZXJcbisgKiBibG9jayB0aGF0IG9ubHkgW0BvZmYsIEBvZmYgKyBAbGVuKSBjaGFuZ2VkLCBzbyB3cml0ZWJhY2sgY2FuIHNraXAgdGhlIHJlc3RcbisgKiBvZiB0aGUgZm9saW8uICBGaWxlc3lzdGVtcyB3aXRob3V0IHRoYXQgdHJhY2tpbmcgZGlydHkgdGhlIHdob2xlIGZvbGlvLlxuKyAqXG4rICogUmV0dXJuOiBUcnVlIGlmIHRoZSBmb2xpbyB3YXMgbmV3bHkgZGlydGllZCwgZmFsc2UgaWYgaXQgd2FzIGFscmVhZHkgZGlydHkuXG4rICovXG4rYm9vbCBmb2xpb19tYXJrX2RpcnR5X3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4re1xuK1x0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbitcbitcdGlmIChsaWtlbHkobWFwcGluZykpIHtcbitcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG4rXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4rXHRcdHJldHVybiBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLCBvZmYsIGxlbik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbm9vcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4rfVxuK1xuIC8qXG4gICogZm9saW9fbWFya19kaXJ0eSgpIGlzIHJhY3kgaWYgdGhlIGNhbGxlciBoYXMgbm8gcmVmZXJlbmNlIGFnYWluc3RcbiAgKiBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QsIGFuZCBpZiB0aGUgZm9saW8gaXMgdW5sb2NrZWQuICBUaGlzIGlzIGJlY2F1c2UgYW5vdGhlclxuQEAgLTI4NDQsNiArMjg4NSw0MSBAQCB2b2lkIF9fZm9saW9fY2FuY2VsX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIEVYUE9SVF9TWU1CT0woX19mb2xpb19jYW5jZWxfZGlydHkpO1xuIFxuKy8qXG4rICogV3JpdGUtcHJvdGVjdCBldmVyeSBtYXBwaW5nIG9mIEBmb2xpbyBhbmQgaGFuZCB0aGUgZmlsZXN5c3RlbSB0aGUgcGFydHMgdGhhdFxuKyAqIHdlcmUgZGlydHkgaW4gYSBwYWdlIHRhYmxlLlxuKyAqXG4rICogV2l0aG91dCAtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UoKSB0aGVyZSBpcyBub3doZXJlIHRvIHB1dCBwZXItYmxvY2sgc3RhdGUsIHNvXG4rICogYW55IFBURSBkaXJ0eSBiaXQgZGlydGllcyB0aGUgd2hvbGUgZm9saW8uICBTYW1lIHdoZW4gdGhlIGZvbGlvIGlzIG5vdFxuKyAqIGFscmVhZHkgZGlydHksIGJlY2F1c2UgdGhlbiB0aGUgZGlydHkgdHJhbnNpdGlvbiBuZWVkcyB0aGUgZnVsbCBhY2NvdW50aW5nXG4rICogaW4gZm9saW9fbWFya19kaXJ0eSgpLCBhbmQgZm9yIGEgZm9saW8gdG9vIGxhcmdlIGZvciB0aGUgYml0bWFwLCB3aGljaCB0aGVcbisgKiBwYWdlIGNhY2hlIGRvZXMgbm90IG1ha2UuXG4rICovXG4rc3RhdGljIHZvaWQgZm9saW9fbWtjbGVhbl9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbit7XG4rXHRERUNMQVJFX0JJVE1BUChtYXAsIDFVTCBcdTAwM2NcdTAwM2MgTUFYX1BBR0VDQUNIRV9PUkRFUik7XG4rXHR1bnNpZ25lZCBpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHR1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDtcbitcbitcdGlmICghbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VkaXJ0eV9mb2xpb19yYW5nZSB8fCAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHxcbitcdCAgICBXQVJOX09OX09OQ0UobnIgXHUwMDNlICgxVUwgXHUwMDNjXHUwMDNjIE1BWF9QQUdFQ0FDSEVfT1JERVIpKSkge1xuK1x0XHRpZiAoZm9saW9fbWtjbGVhbihmb2xpbykpXG4rXHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGJpdG1hcF96ZXJvKG1hcCwgbnIpO1xuK1x0aWYgKCFmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBtYXApKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucikge1xuK1x0XHRtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLFxuK1x0XHRcdFx0ICAgIChzaXplX3Qpc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHQgICAgKHNpemVfdCkoZW5kIC0gc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBDbGVhciBhIGZvbGlvJ3MgZGlydHkgZmxhZywgd2hpbGUgY2FyaW5nIGZvciBkaXJ0eSBtZW1vcnkgYWNjb3VudGluZy5cbiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbGlvIHdhcyBwcmV2aW91c2x5IGRpcnR5LlxuQEAgLTI4NzUsOSArMjk1MSw5IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqXG4gXHRcdCAqIFdlIHVzZSB0aGlzIHNlcXVlbmNlIHRvIG1ha2Ugc3VyZSB0aGF0XG4gXHRcdCAqICAoYSkgd2UgYWNjb3VudCBmb3IgZGlydHkgc3RhdHMgcHJvcGVybHlcbi1cdFx0ICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB0b1xuLVx0XHQgKiAgICAgIG1hcmsgdGhlIHdob2xlIGZvbGlvIGRpcnR5IGlmIGl0IHdhc1xuLVx0XHQgKiAgICAgIGRpcnR5IGluIGEgcGFnZXRhYmxlLiBPbmx5IHRvIHRoZW5cbitcdFx0ICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB3aGljaFxuK1x0XHQgKiAgICAgIHBhcnRzIG9mIHRoZSBmb2xpbyB3ZXJlIGRpcnR5IGluIGFcbitcdFx0ICogICAgICBwYWdldGFibGUuIE9ubHkgdG8gdGhlblxuIFx0XHQgKiAgKGMpIGNsZWFuIHRoZSBmb2xpbyBhZ2FpbiBhbmQgcmV0dXJuIDEgdG9cbiBcdFx0ICogICAgICBjYXVzZSB0aGUgd3JpdGViYWNrLlxuIFx0XHQgKlxuQEAgLTI4OTUsOCArMjk3MSw3IEBAIGJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqIGFzIGEgc2VyaWFsaXphdGlvbiBwb2ludCBmb3IgYWxsIHRoZSBkaWZmZXJlbnRcbiBcdFx0ICogdGhyZWFkcyBkb2luZyB0aGVpciB0aGluZ3MuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fbWtjbGVhbihmb2xpbykpXG4tXHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdGZvbGlvX21rY2xlYW5fZm9yX2lvKGZvbGlvLCBtYXBwaW5nKTtcbiBcdFx0LypcbiBcdFx0ICogV2UgY2FyZWZ1bGx5IHN5bmNocm9uaXNlIGZhdWx0IGhhbmRsZXJzIGFnYWluc3RcbiBcdFx0ICogaW5zdGFsbGluZyBhIGRpcnR5IHB0ZSBhbmQgbWFya2luZyB0aGUgZm9saW8gZGlydHlcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFmNzJkMjc5YmE2OGYuLmFhZjQ1YWM3OWZhODQgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTExMDAsMTIgKzExMDAsMTggQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbiBcdHJldHVybiByd2MuY29udGVuZGVkID8gLTEgOiBwcmEucmVmZXJlbmNlZDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4rc3RydWN0IG1rY2xlYW5fc3RhdGUge1xuK1x0dW5zaWduZWQgbG9uZyAqZGlydHlfbWFwO1xuK1x0aW50IGNsZWFuZWQ7XG4rfTtcbitcbitzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcClcbiB7XG4tXHRpbnQgY2xlYW5lZCA9IDA7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHB2bXctXHUwMDNldm1hO1xuLVx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHB2bXctXHUwMDNlYWRkcmVzcztcbitcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4rXHRpbnQgY2xlYW5lZCA9IDA7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uIE5vdGUgdGhhdFxuQEAgLTExMzQsNiArMTE0MCwxNSBAQCBzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiBcdFx0XHRpZiAoIXB0ZV9kaXJ0eShlbnRyeSkgXHUwMDI2XHUwMDI2ICFwdGVfd3JpdGUoZW50cnkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4rXHRcdFx0aWYgKGRpcnR5X21hcCBcdTAwMjZcdTAwMjYgcHRlX2RpcnR5KGVudHJ5KSkge1xuK1x0XHRcdFx0cGdvZmZfdCBpZHggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpIC1cbitcdFx0XHRcdFx0ICAgICAgcHZtdy1cdTAwM2VwZ29mZjtcbitcbitcdFx0XHRcdC8qIFRoZSB3YWxrIG9ubHkgdmlzaXRzIHBhZ2VzIG9mIHRoaXMgZm9saW8gKi9cbitcdFx0XHRcdFZNX1dBUk5fT05fT05DRShpZHggXHUwMDNlPSBwdm13LVx1MDAzZW5yX3BhZ2VzKTtcbitcdFx0XHRcdF9fc2V0X2JpdChpZHgsIGRpcnR5X21hcCk7XG4rXHRcdFx0fVxuK1xuIFx0XHRcdGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyZXNzLCBwdGVfcGZuKGVudHJ5KSk7XG4gXHRcdFx0ZW50cnkgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHRlKTtcbiBcdFx0XHRlbnRyeSA9IHB0ZV93cnByb3RlY3QoZW50cnkpO1xuQEAgLTExNTUsNiArMTE3MCw5IEBAIHN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRcdGlmICghcG1kX2RpcnR5KGVudHJ5KSBcdTAwMjZcdTAwMjYgIXBtZF93cml0ZShlbnRyeSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAoZGlydHlfbWFwIFx1MDAyNlx1MDAyNiBwbWRfZGlydHkoZW50cnkpKVxuK1x0XHRcdFx0Yml0bWFwX3NldChkaXJ0eV9tYXAsIDAsIHB2bXctXHUwMDNlbnJfcGFnZXMpO1xuK1xuIFx0XHRcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICBhZGRyZXNzICsgSFBBR0VfUE1EX1NJWkUpO1xuIFx0XHRcdGVudHJ5ID0gcG1kcF9pbnZhbGlkYXRlKHZtYSwgYWRkcmVzcywgcG1kKTtcbkBAIC0xMTgxLDkgKzExOTksOSBAQCBzdGF0aWMgYm9vbCBwYWdlX21rY2xlYW5fb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4ge1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIFBWTVdfU1lOQyk7XG4tXHRpbnQgKmNsZWFuZWQgPSBhcmc7XG4rXHRzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSAqc3RhdGUgPSBhcmc7XG4gXG4tXHQqY2xlYW5lZCArPSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13KTtcbitcdHN0YXRlLVx1MDAzZWNsZWFuZWQgKz0gcGFnZV92bWFfbWtjbGVhbl9vbmUoXHUwMDI2cHZtdywgc3RhdGUtXHUwMDNlZGlydHlfbWFwKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC0xMTk2LDEyICsxMjE0LDIzIEBAIHN0YXRpYyBib29sIGludmFsaWRfbWtjbGVhbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1pbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuKy8qKlxuKyAqIGZvbGlvX21rY2xlYW5fZGlydHltYXAgLSBXcml0ZS1wcm90ZWN0IGEgZm9saW8gYW5kIHJlcG9ydCB3aGF0IHdhcyBkaXJ0eS5cbisgKiBAZm9saW86IFRoZSBmb2xpbyB0byBjbGVhbi5cbisgKiBAZGlydHlfbWFwOiBCaXRtYXAgb2YgYXQgbGVhc3QgZm9saW9fbnJfcGFnZXMoQGZvbGlvKSBiaXRzLCBvciBOVUxMLlxuKyAqXG4rICogV3JpdGUtcHJvdGVjdHMgYW5kIGNsZWFucyBldmVyeSBtYXBwaW5nIG9mIEBmb2xpby4gIFdpdGggQGRpcnR5X21hcCwgc2V0cyBhXG4rICogYml0IGZvciBlYWNoIHBhZ2Ugd2hvc2UgZW50cnkgd2FzIGRpcnR5OyBhIFBNRC1tYXBwZWQgZm9saW8gaGFzIG9uZSBkaXJ0eVxuKyAqIGJpdCBmb3IgYWxsIG9mIGl0LCBzbyBldmVyeSBwYWdlIGlzIHJlcG9ydGVkLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIHBhZ2UgdGFibGUgZW50cmllcyBjbGVhbmVkLlxuKyAqL1xuK2ludCBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgKmRpcnR5X21hcClcbiB7XG4tXHRpbnQgY2xlYW5lZCA9IDA7XG4rXHRzdHJ1Y3QgbWtjbGVhbl9zdGF0ZSBzdGF0ZSA9IHsgLmRpcnR5X21hcCA9IGRpcnR5X21hcCB9O1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xuLVx0XHQuYXJnID0gKHZvaWQgKilcdTAwMjZjbGVhbmVkLFxuK1x0XHQuYXJnID0gKHZvaWQgKilcdTAwMjZzdGF0ZSxcbiBcdFx0LnJtYXBfb25lID0gcGFnZV9ta2NsZWFuX29uZSxcbiBcdFx0LmludmFsaWRfdm1hID0gaW52YWxpZF9ta2NsZWFuX3ZtYSxcbiBcdH07XG5AQCAtMTIxNyw3ICsxMjQ2LDEyIEBAIGludCBmb2xpb19ta2NsZWFuKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4gXG4tXHRyZXR1cm4gY2xlYW5lZDtcbitcdHJldHVybiBzdGF0ZS5jbGVhbmVkO1xuK31cbitcbitpbnQgZm9saW9fbWtjbGVhbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBOVUxMKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fbWtjbGVhbik7XG4gXG5AQCAtMTI0MSw3ICsxMjc1LDcgQEAgc3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdC5mbGFnc1x0XHQ9IFBWTVdfU1lOQyxcbiBcdH07XG4gXG4tXHRzdGF0ZS1cdTAwM2VjbGVhbmVkICs9IHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcpO1xuK1x0c3RhdGUtXHUwMDNlY2xlYW5lZCArPSBwYWdlX3ZtYV9ta2NsZWFuX29uZShcdTAwMjZwdm13LCBOVUxMKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC0xMzI0LDcgKzEzNTgsNyBAQCBpbnQgcGZuX21rY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHBnb2ZmX3QgcGdvZmYsXG4gXHRwdm13LmFkZHJlc3MgPSB2bWFfYWRkcmVzcyh2bWEsIHBnb2ZmLCBucl9wYWdlcyk7XG4gXHRWTV9CVUdfT05fVk1BKHB2bXcuYWRkcmVzcyA9PSAtRUZBVUxULCB2bWEpO1xuIFxuLVx0cmV0dXJuIHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcpO1xuK1x0cmV0dXJuIHBhZ2Vfdm1hX21rY2xlYW5fb25lKFx1MDAyNnB2bXcsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2ZvbGlvX21vZF9zdGF0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuciwgaW50IG5yX3BtZG1hcHBlZClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjAwLjM1MzkzOTQzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDk2MDQyNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3ViLUZvbGlvIERpcnR5IFRyYWNraW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBhaW1zIHRvIGludHJvZHVjZSBncmFudWxhciB0cmFja2luZyBvZiBkaXJ0eSBkYXRhIHdpdGhpbiBsYXJnZSBmb2xpb3MsIGdvaW5nIGJleW9uZCB0aGUgdHJhZGl0aW9uYWwgZm9saW8tbGV2ZWwgZGlydHkgZmxhZy4gVGhpcyBsb29rcyBsaWtlIGEgbmVjZXNzYXJ5IG9wdGltaXphdGlvbiBmb3IgbW9kZXJuIHN0b3JhZ2Ugc3lzdGVtcyBhbmQgc2hvdWxkIGxlYWQgdG8gbW9yZSBlZmZpY2llbnQgd3JpdGViYWNrIGFuZCBjYWNoaW5nIGJlaGF2aW9yLlxuXG5IZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgSSByZWFkIHRocm91Z2ggdGhlIGNoYW5nZXMuICBJdCdzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoLCBpbXBsZW1lbnRpbmcgYGRpcnR5X2ZvbGlvX3JhbmdlYCB3aXRoaW4gdGhlIGBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNgLiBUaGUgbWFpbiBpZGVhIHNlZW1zIHRvIGJlIHRvIGludHJvZHVjZSBhIG1lY2hhbmlzbSwgYGlvbWFwX2RpcnR5X2ZvbGlvX3JhbmdlYCwgYW5kIHVzZSBpdCB0byB0cmFjayBkaXJ0eSByZWdpb25zIHdpdGhpbiBhIGZvbGlvLCB3aGljaCBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgZm9yIGhhbmRsaW5nIGxhcmdlciBmb2xpb3MuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZTpcblxuKiAgIGBpb21hcF9kaXJ0eV9mb2xpb19yYW5nZWAgaXMgaW50cm9kdWNlZCBhbmQgY2FsbGVkIGJ5IGBpb21hcF9kaXJ0eV9mb2xpb2AuIFRoaXMgc3VnZ2VzdHMgYSBjbGVhciBkZWxlZ2F0aW9uIG9mIHRoZSBkaXJ0eSByYW5nZSBtYW5hZ2VtZW50IHRvIHRoZSBuZXcgZnVuY3Rpb24uIE1vZGlmaWNhdGlvbnMgaW4gYGlvbWFwX2ZvbGlvX21rd3JpdGVfaXRlcmAgYW5kIGBpb21hcF9wYWdlX21rd3JpdGVgIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgY29uc3VtZXJzLlxuKiAgIFRoZSBgeGZzYCBmaWxlc3lzdGVtIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW5kaWNhdGVzIGEgcmVhbC13b3JsZCBhcHBsaWNhdGlvbi5cbiogICBGdW5jdGlvbiBwb2ludGVycyBhcmUgYWRkZWQgdG8gdGhlIGBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNgIHN0cnVjdCwgYW5kIHJlbGV2YW50IGRlY2xhcmF0aW9ucyBhcmUgaW5jbHVkZWQuXG4qICAgVGhlIGBtbWAgY29kZSBub3cgdXNlcyB0aGUgYGRpcnR5X2ZvbGlvX3JhbmdlYCBmdW5jdGlvbiBpbiBzZXZlcmFsIHBsYWNlcywgaW5jbHVkaW5nIGBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZWAsIGBjYW5fZGlydHlfd2hvbGVfYmF0Y2hgLCBgc2V0X3B0ZV9yYW5nZWAsIGBtYXBwaW5nX2RpcnR5X3JhbmdlYCwgYGZvbGlvX21hcmtfZGlydHlgLCBhbmQgYGZvbGlvX21hcmtfZGlydHlfcmFuZ2VgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBzdWItZm9saW8gZGlydHkgdHJhY2tpbmcgaXMgaW1wbGVtZW50ZWQuXG4qICAgYGZvbGlvX21rY2xlYW5fZm9yX2lvYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IGFwcGVhcnMgdG8gdXRpbGl6ZSBhIGJpdG1hcCAoYG1hcGApIHRvIHJlcHJlc2VudCB0aGUgZGlydHkgc3RhdGUgb2YgaW5kaXZpZHVhbCBwYWdlcyB3aXRoaW4gYSBmb2xpbywgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGtleSB0byB0aGUgc3ViLWZvbGlvIHRyYWNraW5nLiBJIHdvbmRlciBhYm91dCBpdHMgdXNhZ2UgYW5kIHBvdGVudGlhbCBmb3IgaXNzdWVzLlxuKiAgIGBtbS9ybWFwLmNgIGludHJvZHVjZXMgYHN0cnVjdCBta2NsZWFuX3N0YXRlYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIFRoaXMgc3RydWN0dXJlIHNlZW1zIGRlc2lnbmVkIHRvIGZhY2lsaXRhdGUgY2xlYW5pbmcgYW5kIHBvdGVudGlhbGx5IHVubWFwcGluZyBwYWdlcyBvciBzdWItcGFnZSByZWdpb25zLlxuXG5Ob3csIGxldCBtZSB6b29tIGluIG9uIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gVGhlIHVzZSBvZiBhIGJpdG1hcCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gIHJhaXNlcyBhIHF1ZXN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2Ugb2YgdGhlIGBtYXBgIGJpdG1hcC5cblxuYGBgY1xuICAgIERFQ0xBUkVfQklUTUFQKG1hcCwgMVVMIFx1MDAzY1x1MDAzYyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcbiAgICB1bnNpZ25lZCBpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gICAgdW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7XG5cbiAgICBpZiAoIW1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZGlydHlfZm9saW9fcmFuZ2UgfHwgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8XG4gICAgICAgIFdBUk5fT05fT05DRShuciBcdTAwM2UgKDFVTCBcdTAwM2NcdTAwM2MgTUFYX1BBR0VDQUNIRV9PUkRFUikpKSB7XG4gICAgICAgIGlmIChmb2xpb19ta2NsZWFuKGZvbGlvKSlcbiAgICAgICAgICAgIGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYml0bWFwX3plcm8obWFwLCBucik7XG4gICAgaWYgKCFmb2xpb19ta2NsZWFuX2RpcnR5bWFwKGZvbGlvLCBtYXApKVxuICAgICAgICByZXR1cm47XG5cbiAgICBmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucikge1xuICAgICAgICBtYXBwaW5nX2RpcnR5X3JhbmdlKG1hcHBpbmcsIGZvbGlvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkoZW5kIC0gc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbiAgICB9XG5gYGBcblxuVGhlIGNvZGUgemVyb2VzIGBucmAgYml0cyBvZiB0aGUgYG1hcGAuIFRoZSBsb29wIGBmb3JfZWFjaF9zZXRfYml0cmFuZ2Uoc3RhcnQsIGVuZCwgbWFwLCBucilgIGl0ZXJhdGVzIG92ZXIgdGhlIHNldCBiaXRzIHdpdGhpbiB0aGUgYG1hcGAuIEl0IHNlZW1zIHRvIG1lIHRoYXQgYGJpdG1hcF96ZXJvYCBjbGVhcnMgYG1hcGAgZm9yIGBucmAgcGFnZXMsIGFuZCB0aGUgbG9vcCB1c2VzIHRoZSBjbGVhcmVkIGBtYXBgLiBUaGUgdXNlIG9mIGBucmAgc2hvdWxkIGJvdW5kIHRoZSBiaXRtYXAsIGFuZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgY29kZSByZWxpZXMgb24gdGhlIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBiaXRtYXAgcm91dGluZXMuXG5MZXQncyBtYWtlIHN1cmUgdGhlIGJpdG1hcCBhY2Nlc3Mgd2l0aGluIGBmb3JfZWFjaF9zZXRfYml0cmFuZ2VgIHJlc3BlY3RzIHRoZSBib3VuZHMgc2V0IGJ5IGBucmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MDYuODQ5OTg0NDc4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg5NjI4MDg2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGJpdG1hcF96ZXJvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMzowOC4zMzk2MjY0MzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc3NDYzNDkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gYGJpdG1hcF96ZXJvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBiaXRtYXBfemVyb2AuIEdpdmVuIGl0cyBmdW5jdGlvbiwgaXQncyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBnb2luZyB0byBiZSByZWxhdGVkIHRvIGJpdCBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGluY2x1ZGUvbGludXgvYml0bWFwLmhgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGJpdG1hcCBtYW5pcHVsYXRpb24gbWFjcm9zIGFuZCBmdW5jdGlvbnMuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZywgYW5kIGhvcGVmdWxseSwgSSdsbCBmaW5kIGl0cyBkZWZpbml0aW9uIG9yIGF0IGxlYXN0IHJlbGF0ZWQgdXRpbGl0eSBmdW5jdGlvbnMgdGhlcmUuIEknbSBhc3N1bWluZyBpdCdzIGltcGxlbWVudGVkIGFzIGEgbWFjcm8sIGJ1dCBJIHdvbid0IHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBpdCBiZWluZyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIFJlZ2FyZGxlc3MsIGBiaXRtYXAuaGAgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIGRldGFpbHMgb24gaG93IGl0IGFjdHVhbGx5IGRvZXMgaXRzIGpvYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDowMzoxMC4xMTQyNjM2MDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Mjc4MzM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX3plcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9iaXRtYXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MTAuMTY5NTQ5NjI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDM3ODMxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRpbWUgdG8gSW52ZXN0aWdhdGUgYGJpdG1hcF96ZXJvYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBob3cgYGJpdG1hcF96ZXJvYCBpcyBkZWZpbmVkIG9yIHVzZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBzdGFuZGFyZCBoZWFkZXIgZmlsZSBmb3IgYml0bWFwIGRlZmluaXRpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgZ2l2ZW4gdGhhdCBpdCdzIGEgY29yZSBkYXRhIHN0cnVjdHVyZSBhbmQgdXRpbGl0eS4gSSdtIGFzc3VtaW5nIHRoYXQgc2hvdWxkIHlpZWxkIGEgcXVpY2sgcmVzdWx0IHdpdGggdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIG9yIHVzYWdlcy4gSG9wZWZ1bGx5IGl0J3Mgc3RyYWlnaHRmb3J3YXJkLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MTIuMjczMzM0OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTU2OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpdG1hcF96ZXJvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYml0bWFwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9iaXRtYXAuaD0xNz1zdHJ1Y3QgZGV2aWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC00Mi0gKlxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6NDM6ICogIGJpdG1hcF96ZXJvKGRzdCwgbmJpdHMpICAgICAgICAgICAgICAgICAgICAgKmRzdCA9IDBVTFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNDQtICogIGJpdG1hcF9maWxsKGRzdCwgbmJpdHMpICAgICAgICAgICAgICAgICAgICAgKmRzdCA9IH4wVUxcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtOTMtICpcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjk0OiAqIE5vdGUsIGJpdG1hcF96ZXJvKCkgYW5kIGJpdG1hcF9maWxsKCkgb3BlcmF0ZSBvdmVyIHRoZSByZWdpb24gb2ZcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTk1LSAqIHVuc2lnbmVkIGxvbmdzLCB0aGF0IGlzLCBiaXRzIGJlaGluZCBiaXRtYXAgdGlsbCB0aGUgdW5zaWduZWQgbG9uZ1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0yMzM9dm9pZCBiaXRtYXBfZm9sZCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9yaWcsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI0MC1cXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI0MTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYml0bWFwX3plcm8odW5zaWduZWQgbG9uZyAqZHN0LCB1bnNpZ25lZCBpbnQgbmJpdHMpXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNDIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD02MzQ9dm9pZCBiaXRtYXBfc2NhdHRlcih1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNjM5LVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6NjQwOlxcdGJpdG1hcF96ZXJvKGRzdCwgbmJpdHMpO1xcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNjQxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD02OTE9dm9pZCBiaXRtYXBfZ2F0aGVyKHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC02OTYtXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDo2OTc6XFx0Yml0bWFwX3plcm8oZHN0LCBuYml0cyk7XFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC02OTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjEyLjMxOTI5ODczOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc0MTgyMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQml0bWFwIEhlYWRlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBiaXRtYXBzIGFyZSBiZWluZyBoYW5kbGVkLiBMZXQncyB6ZXJvIGluIG9uIHRoZSBgaW5jbHVkZS9saW51eC9iaXRtYXAuaGAgaGVhZGVyIGZpbGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBrZXJuZWwncyBiaXQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbWFjcm9zIGluIHRoaXMgaGVhZGVyIGlzIGVzc2VudGlhbCBmb3IsIHdlbGwsIHByZXR0eSBtdWNoIGFueXRoaW5nLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIHZpY2luaXR5IG9mIGxpbmUgMjQwLCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlZW1zIHRvIGJlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBqdW1wIGluIGFuZCBnZXQgYSBzZW5zZSBvZiB0aGUgY29udGV4dCBvZiBiaXQgb3BlcmF0aW9ucy4gRnJvbSB0aGVyZSwgSSdsbCBicmFuY2ggb3V0IHRvIHNlZSBob3cgdGhlIGNvZGUgYXJvdW5kIHRoYXQgcG9pbnQgaXMgaW1wYWN0aW5nIHRoZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjE0LjA5MzQ4NDA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYml0bWFwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcbiAyNDE6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJpdG1hcF96ZXJvKHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgaW50IG5iaXRzKVxcbiAyNDI6XFx0e1xcbiAyNDM6XFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IGJpdG1hcF9zaXplKG5iaXRzKTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0aWYgKHNtYWxsX2NvbnN0X25iaXRzKG5iaXRzKSlcXG4gMjQ2OlxcdFxcdFxcdCpkc3QgPSAwO1xcbiAyNDc6XFx0XFx0ZWxzZVxcbiAyNDg6XFx0XFx0XFx0bWVtc2V0KGRzdCwgMCwgbGVuKTtcXG4gMjQ5OlxcdH1cXG4gMjUwOlxcdFxcbiAyNTE6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJpdG1hcF9maWxsKHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgaW50IG5iaXRzKVxcbiAyNTI6XFx0e1xcbiAyNTM6XFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IGJpdG1hcF9zaXplKG5iaXRzKTtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0aWYgKHNtYWxsX2NvbnN0X25iaXRzKG5iaXRzKSlcXG4gMjU2OlxcdFxcdFxcdCpkc3QgPSB+MFVMO1xcbiAyNTc6XFx0XFx0ZWxzZVxcbiAyNTg6XFx0XFx0XFx0bWVtc2V0KGRzdCwgMHhmZiwgbGVuKTtcXG4gMjU5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6MDM6MTQuMDkzNTc4NjMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5MjQyMjI1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBzdGFydHMgd2l0aCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBgYml0bWFwX3NpemVgIGNhbGN1bGF0ZXMgdGhlIHJlcXVpcmVkIG1lbW9yeSBmb3IgdGhlIGJpdG1hcCwgZW5zdXJpbmcgd2UncmUgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UuIFRoZSBgZm9yX2VhY2hfc2V0X2JpdHJhbmdlYCBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGNvbnN0cmFpbmVkIHRvIHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBiaXRtYXAsIGdpdmVuIHRoYXQgaXQncyB1c2luZyB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlIGBtYXBgIHZhcmlhYmxlIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5OZXh0LCBJIGV4YW1pbmVkIHRoZSBgZm9saW9fbWtjbGVhbl9kaXJ0eW1hcGAgZnVuY3Rpb24gYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYHN0YXRlYCBzdHJ1Y3QuIGBzdGF0ZS5jbGVhbmVkYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBlc3NlbnRpYWwgZm9yIHRyYWNraW5nIGNsZWFuZWQgcGFnZXMuXG5cblRoZW4sIHRoZSBmb2N1cyBzaGlmdHMgdG8gYGlvbWFwX3BhZ2VfbWt3cml0ZWAuIEhlcmUsIGBkaXJ0eV9vZmZgIGFuZCBgZGlydHlfbGVuYCBhcmUgY2FsY3VsYXRlZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkgYXJlIGV2ZXIgdXNlZC4gVGhpcyBsb29rcyBzb2xpZC4gVGhlIGNvZGUgaXMgY2FyZWZ1bCB0byBoYW5kbGUgdGhlIHJhbmdlIHdpdGhpbiB0aGUgcGFnZSBjb3JyZWN0bHksIGFjY291bnRpbmcgZm9yIHBvdGVudGlhbCByYWNpbmcgdHJ1bmNhdGVzLiBUaGUgbG9naWMgc2VlbXMgcm9idXN0LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guIFRoaXMgcGF0Y2ggb3B0aW1pemVzIHdyaXRlYmFjayBhbmQgZGlydHkgcGFnZSB0cmFja2luZyBmb3IgbGFyZ2UgZm9saW9zIHdpdGhpbiBYRlMvaW9tYXAuIEluc3RlYWQgb2YgbWFya2luZyB0aGUgZW50aXJlIGZvbGlvIGRpcnR5LCBpdCB0cmFja3MgcGVyLXBhZ2UgZGlydHkgc3RhdGUgYW5kIHBhc3NlcyBhIHNwZWNpZmljIHJhbmdlIHRvIHRoZSBmaWxlc3lzdGVtJ3MgY2FsbGJhY2tzLCB3aGljaCB1cGRhdGVzIHRoZSBpb21hcCBzdWItcGFnZS9zdWItZm9saW8gZGlydHkgc3RhdGUuXG5cbkkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zOlxuXG4xLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uczoqKiBBcmUga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLiBUaGlzIGlzIGludGVybmFsIE1NIGFuZCBmaWxlc3lzdGVtIGRpcnR5IHRyYWNraW5nLCBzbyB0aGVyZSBhcmUgbm8gY29weS10by11c2VyIG9wZXJhdGlvbnMgb3IgYW55dGhpbmcgbGlrZSB0aGF0LlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogQXJlIHRoZXJlIGNvbmRpdGlvbnMgb3IgYnJhbmNoZXMgdGhhdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLiBBbGwgdmFyaWFibGVzLCBsaWtlIGBkaXJ0eV9vZmZgLCBgZGlydHlfbGVuYCwgYHN0YXRlYCwgYW5kIGBtYXBgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC5cbjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzOioqIElzIHRoZXJlIGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm8uIGBpZnNfYWxsb2NgIGlzIGNhbGxlZCBiZWZvcmUsIGFuZCB0aGUgZGF0YSBpcyBhbGxvY2F0ZWQgY29ycmVjdGx5LlxuNC4gICoqQnVmZmVyIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkPyBOby4gVGhlIGZvbGlvIGRhdGEgYW5kIGJ1ZmZlcnMgYXJlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLlxuXG5HaXZlbiB0aGUgS01TQU4gZ3VpZGVsaW5lcywgdGhlIGFuc3dlciBpcyBuby4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLiBTdGFuZGFyZCBLQVNBTiBjaGVja3MsIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHdvdWxkIGxpa2VseSBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCBhcmUgbW9yZSBsaWtlbHkgbG9naWMgYnVncyByZWxhdGVkIHRvIHJhbmdlIGNhbGN1bGF0aW9ucywgbG9ja2luZyBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudC93cml0ZWJhY2ssIHdoaWNoIGNhbiBiZSBjYXVnaHQgdmlhIHRlc3Rpbmcgb3IgZGVidWdnaW5nLlxuXG5UaGVyZWZvcmUsICoqTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGZhbHNlLioqIEknbSByZWFkeSB0byBwcmVwYXJlIHRoZSByZWFzb25pbmcgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNzAsIk91dHB1dFRva2VucyI6MjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjAzOjIxLjAxNzgwMzg2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYW5nZS1iYXNlZCBkaXJ0eSB0cmFja2luZyBmb3IgbGFyZ2UgZm9saW9zIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlvbWFwIChzcGVjaWZpY2FsbHkgYGRpcnR5X2ZvbGlvX3JhbmdlYCwgYGZvbGlvX21hcmtfZGlydHlfcmFuZ2VgLCBhbmQgYGZvbGlvX21rY2xlYW5fZGlydHltYXBgKS5cXG5cXG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBBbGwgbmV3IGxvY2FsIHZhcmlhYmxlcyAoYGRpcnR5X29mZmAsIGBkaXJ0eV9sZW5gLCBgc3RhdGVgLCBhbmQgc3RhY2sgYml0bWFwIGBtYXBgIGluIGBmb2xpb19ta2NsZWFuX2Zvcl9pb2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChgYml0bWFwX3plcm9gLCBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBldGMuKS4gVGhlcmUgYXJlIG5vIGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHZlY3RvcnMuXFxuMi4gS0FTQU4gLyBzdGFuZGFyZCBkZXRlY3RvcnMgYXBwbGljYWJpbGl0eTogUG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIHJhbmdlIGNhbGN1bGF0aW9ucywgYml0bWFzayBvcGVyYXRpb25zLCBvciBwYWdlIHRhYmxlIHdhbGtzIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFzc2VydGlvbnMvbG9ja2luZyBpc3N1ZXMsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBleGlzdGluZyBrZXJuZWwgZGVidWcgY2hlY2tzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmFuZ2UtYmFzZWQgZGlydHkgdHJhY2tpbmcgZm9yIGxhcmdlIGZvbGlvcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpb21hcCAoc3BlY2lmaWNhbGx5IGBkaXJ0eV9mb2xpb19yYW5nZWAsIGBmb2xpb19tYXJrX2RpcnR5X3JhbmdlYCwgYW5kIGBmb2xpb19ta2NsZWFuX2RpcnR5bWFwYCkuXFxuXFxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcy4gQWxsIG5ldyBsb2NhbCB2YXJpYWJsZXMgKGBkaXJ0eV9vZmZgLCBgZGlydHlfbGVuYCwgYHN0YXRlYCwgYW5kIHN0YWNrIGJpdG1hcCBgbWFwYCBpbiBgZm9saW9fbWtjbGVhbl9mb3JfaW9gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoYGJpdG1hcF96ZXJvYCwgZGVzaWduYXRlZCBpbml0aWFsaXplciwgZXRjLikuIFRoZXJlIGFyZSBubyBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2ZWN0b3JzLlxcbjIuIEtBU0FOIC8gc3RhbmRhcmQgZGV0ZWN0b3JzIGFwcGxpY2FiaWxpdHk6IFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSByYW5nZSBjYWxjdWxhdGlvbnMsIGJpdG1hc2sgb3BlcmF0aW9ucywgb3IgcGFnZSB0YWJsZSB3YWxrcyB3b3VsZCBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhc3NlcnRpb25zL2xvY2tpbmcgaXNzdWVzLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvq6sv[1] Phase: Succeeded StartedAt: 2026-09-05 04:03:32 +0000 UTC FinishedAt: 2026-09-05 04:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 04:03:32 +0000 UTC FinishedAt: 2026-09-05 04:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2] Phase: Succeeded StartedAt: 2026-09-05 04:03:32 +0000 UTC FinishedAt: 2026-09-05 07:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 04:03:32 +0000 UTC FinishedAt: 2026-09-05 07:44:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 04:03:32 +0000 UTC FinishedAt: 2026-09-05 04:03:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 04:03:32 +0000 UTC FinishedAt: 2026-09-05 04:03:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowvq6sv/series-workflowvq6sv-convert-artifact-3853936070/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 04:03:42 +0000 UTC FinishedAt: 2026-09-05 04:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 04:03:42 +0000 UTC FinishedAt: 2026-09-05 04:22:25 +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:*77fc8f1e-48e4-42a8-b24f-142acbf7ad5f,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-workflowvq6sv/series-workflowvq6sv-convert-artifact-3853936070/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": "26524a68-0784-4225-b792-c0b729fc715c", "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-workflowvq6sv/series-workflowvq6sv-build-action-832779100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 04:03:42 +0000 UTC FinishedAt: 2026-09-05 04:22:15 +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:*77fc8f1e-48e4-42a8-b24f-142acbf7ad5f,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-workflowvq6sv/series-workflowvq6sv-convert-artifact-3853936070/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": "26524a68-0784-4225-b792-c0b729fc715c", "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-workflowvq6sv/series-workflowvq6sv-build-action-832779100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 04:22:25 +0000 UTC FinishedAt: 2026-09-05 04:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 04:22:25 +0000 UTC FinishedAt: 2026-09-05 04:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 04:22:25 +0000 UTC FinishedAt: 2026-09-05 04:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 04:22:25 +0000 UTC FinishedAt: 2026-09-05 04:22:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowvq6sv/series-workflowvq6sv-convert-artifact-1400924185/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 04:22:35 +0000 UTC FinishedAt: 2026-09-05 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 04:22:35 +0000 UTC FinishedAt: 2026-09-05 04:24:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*26524a68-0784-4225-b792-c0b729fc715c,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-workflowvq6sv/series-workflowvq6sv-build-action-832779100/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-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 04:24:33 +0000 UTC FinishedAt: 2026-09-05 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 04:24:33 +0000 UTC FinishedAt: 2026-09-05 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 04:24:33 +0000 UTC FinishedAt: 2026-09-05 04:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 04:24:33 +0000 UTC FinishedAt: 2026-09-05 04:40:37 +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:*77fc8f1e-48e4-42a8-b24f-142acbf7ad5f,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-workflowvq6sv/series-workflowvq6sv-convert-artifact-1400924185/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": "d03a3242-2db6-4427-bdce-8c47c1890435", "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-workflowvq6sv/series-workflowvq6sv-build-action-3345643381/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 04:24:33 +0000 UTC FinishedAt: 2026-09-05 04:40:27 +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:*77fc8f1e-48e4-42a8-b24f-142acbf7ad5f,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-workflowvq6sv/series-workflowvq6sv-convert-artifact-1400924185/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": "d03a3242-2db6-4427-bdce-8c47c1890435", "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-workflowvq6sv/series-workflowvq6sv-build-action-3345643381/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 04:40:37 +0000 UTC FinishedAt: 2026-09-05 04:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 04:40:37 +0000 UTC FinishedAt: 2026-09-05 04:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 04:40:37 +0000 UTC FinishedAt: 2026-09-05 04:42:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 04:40:37 +0000 UTC FinishedAt: 2026-09-05 04:42:28 +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:*d03a3242-2db6-4427-bdce-8c47c1890435,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-workflowvq6sv/series-workflowvq6sv-build-action-3345643381/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-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 04:42:37 +0000 UTC FinishedAt: 2026-09-05 07:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 04:42:37 +0000 UTC FinishedAt: 2026-09-05 07:44:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*26524a68-0784-4225-b792-c0b729fc715c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d03a3242-2db6-4427-bdce-8c47c1890435,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-workflowvq6sv/series-workflowvq6sv-build-action-832779100/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-workflowvq6sv/series-workflowvq6sv-build-action-3345643381/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 04:42:37 +0000 UTC FinishedAt: 2026-09-05 04:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 04:42:37 +0000 UTC FinishedAt: 2026-09-05 04:42:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvq6sv/series-workflowvq6sv-convert-artifact-4238870286/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 04:42:37 +0000 UTC FinishedAt: 2026-09-05 04:42:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 04:42:37 +0000 UTC FinishedAt: 2026-09-05 04:42:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 04:42:37 +0000 UTC FinishedAt: 2026-09-05 04:42:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 04:42:47 +0000 UTC FinishedAt: 2026-09-05 07:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvq6sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_dirty_folio_range","iomap_page_mkwrite","folio_mark_dirty_range","folio_mkclean_dirtymap","folio_clear_dirty_for_io"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"c5e9020d-26e2-47b8-83b0-8faca8ea362d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 04:42:47 +0000 UTC FinishedAt: 2026-09-05 07:44:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*26524a68-0784-4225-b792-c0b729fc715c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d03a3242-2db6-4427-bdce-8c47c1890435,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-workflowvq6sv/series-workflowvq6sv-build-action-832779100/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-workflowvq6sv/series-workflowvq6sv-build-action-3345643381/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-workflowvq6sv/series-workflowvq6sv-convert-artifact-4238870286/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,}