Name: series-workflowkq6zk Phase: Succeeded StartedAt: 2026-07-31 07:50:48 +0000 UTC FinishedAt: 2026-07-31 12:08:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[0] Phase: Succeeded StartedAt: 2026-07-31 07:50:48 +0000 UTC FinishedAt: 2026-07-31 08:09:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 07:50:48 +0000 UTC FinishedAt: 2026-07-31 08:09:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ce84eab58029ab47af39398fe770fb58c04253f4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ce84eab58029ab47af39398fe770fb58c04253f4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP", "TRANSPARENT_HUGEPAGE" ], "series_id": "f2a98e90-742d-4425-ab8b-9ab3679f2708" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_alloc_swap", "shmem_writeout", "__mem_cgroup_try_charge_swap", "mem_cgroup_get_folio_swap_margin", "page_counter_margin" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19hbGxvY19zd2FwJiMzNDssCiAgICAmIzM0O3NobWVtX3dyaXRlb3V0JiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4mIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX21hcmdpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYWxsb2NhdGlvbiBsb2dpYyB0byBoYW5kbGUgbGFyZ2UgZm9saW9zIChUSFApIG1vcmUgZ3JhY2VmdWxseSB3aGVuIHN3YXAgc3BhY2Ugb3IgbWVtY2cgc3dhcCBsaW1pdHMgYXJlIGNvbnN0cmFpbmVkLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucyBhbmQgY2hhbmdlcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzIChgLUUyQklHYCwgYC1FTk9TUENgLCBgLUVOT01FTWApIGluc3RlYWQgb2YgZ2VuZXJpYyBlcnJvcnMuIFRoZXNlIGVycm9yIGNvZGVzIGFyZSB0aGVuIHVzZWQgYnkgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBkZWNpZGUgd2hldGhlciB0byBzcGxpdCB0aGUgbGFyZ2UgZm9saW8gYW5kIHJldHJ5IHN3YXBwaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zIHRoYXQgYWZmZWN0cyBob3cgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwIGxpbWl0cyBhcmUgaGFuZGxlZCBmb3IgaHVnZSBwYWdlcywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNmODI2MWQ3MGUyY2JkMjQwMmIwYWZiZjViNjAxYTg3N2MzNmZhNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwODowNzoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02OCw2ICYjNDM7NjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDA1NDRiMmVjNGM1NjUuLjdkMTIwNTgxNzRhZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC01MDksMTIgJiM0Mzs1MDksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxuLWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO2ludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvbmcgKnN3YXBfbWFyZ2luKTtcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8sIHN3YXBfbWFyZ2luKTtcbiB9XG4gXG4gZXh0ZXJuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcyk7XG5AQCAtNTI1LDEwICYjNDM7NTI2LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXG4gXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xuIH1cbiBcbiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdFx0ICAgICBsb25nICpzd2FwX21hcmdpbilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTM4LDYgJiM0Mzs1NDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmZiMGVjNDM5YmEyZDggMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTU1OTIsMTIgJiM0Mzs1NTkyLDEzIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4gLyoqXG4gICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG4gICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXG4mIzQzOyAqIEBzd2FwX21hcmdpbjogcmVtYWluaW5nIG1lbWNnIHN3YXAgbWFyZ2luIGlmIGFsbG9jYXRpb24gb3IgY2hhcmdlIGZhaWxzXG4gICpcbiAgKiBUcnkgdG8gY2hhcmdlIEBmb2xpbyYjMzk7cyBtZW1jZyBmb3IgdGhlIHN3YXAgc3BhY2UgYXQgZm9saW8tXHUwMDNlc3dhcC5cbiAgKlxuICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG9uIGZhaWx1cmUuXG4gICovXG4taW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbkBAIC01NjE2LDYgJiM0Mzs1NjE3LDcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gXHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuJiM0MztcdFx0KnN3YXBfbWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKTtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTYyOSw2ICYjNDM7NTYzMSw3IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcdTAwMjZjb3VudGVyKSkge1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xuJiM0MztcdFx0KnN3YXBfbWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihjb3VudGVyKTtcbiBcdFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbkBAIC01NjcwLDE1ICYjNDM7NTY3MywzOSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4tXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuLVx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbi1cdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuLVx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuJiM0MztcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxuJiM0MztcdFx0bnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJiMzOTtzIG1lbWNnIHN3YXAgbWFyZ2luXG4mIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8mIzM5O3MgbWVtY2cgaGllcmFyY2h5LlxuJiM0MzsgKi9cbiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBzd2FwX21hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXG4mIzQzO1x0XHRyZXR1cm4gc3dhcF9tYXJnaW47XG4mIzQzO1xuJiM0MztcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xuJiM0MztcdGlmICghb2JqY2cpXG4mIzQzO1x0XHRyZXR1cm4gc3dhcF9tYXJnaW47XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuJiM0MztcdHN3YXBfbWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN3YXBfbWFyZ2luO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTQ2LDYgJiM0Mzs0NiwyNiBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcbiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcbiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbiYjNDM7ICovXG4mIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cdTAwM2VtYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4mIzQzO1xuJiM0MztcdFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XG4mIzQzO1x0fSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLVx1MDAzZXBhcmVudCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWFyZ2luO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxuICAqIEBjb3VudGVyOiBjb3VudGVyXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDY2NDE4MjNiZWQxNmIuLjZmOTU5MTkxZWY3MGIgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMTYwOSw2ICYjNDM7MTYwOSw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4gXHRpbnQgbnJfcGFnZXM7XG4mIzQzO1x0aW50IHJldDtcbiBcdGJvb2wgc3BsaXQgPSBmYWxzZTtcbiBcbiBcdGlmICgoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby1cdTAwM2Vub3N3YXApXG5AQCAtMTY4OSw3ICYjNDM7MTY5MCw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XG4mIzQzO1x0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiBcdFx0Ym9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7XG4gXHRcdGludCBlcnJvcjtcbiBcbkBAIC0xNzQyLDcgJiM0MzsxNzQ0LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4gXHRcdGdvdG8gcmVkaXJ0eTtcbiBcdH1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMSlcbiYjNDM7XHRpZiAobnJfcGFnZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHJldCA9PSAtRTJCSUcpXG4gXHRcdGdvdG8gdHJ5X3NwbGl0O1xuIHJlZGlydHk6XG4gXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNzBiOTBmYTljMmEwNC4uYWU2MmM5ZjljMGYyYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNzM1LDIzICYjNDM7MTczNSwyOCBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gICogc3dhcCBjYWNoZS5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxuJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LFxuJiM0MzsgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xuJiM0MzsgKiB3b3VsZCBub3QgaGVscC5cbiAgKi9cbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcdHVuc2lnbmVkIGludCBzaXplID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4mIzQzO1x0bG9uZyBzd2FwX21hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0aWYgKG9yZGVyKSB7XG4gXHRcdC8qXG4tXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsXG4tXHRcdCAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLlxuJiM0MztcdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcbiYjNDM7XHRcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cbiBcdFx0ICovXG4tXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpIHtcbiYjNDM7XHRcdFx0c3dhcF9tYXJnaW4gPSBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gZmFpbGVkO1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKlxuIFx0XHQgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemVcbkBAIC0xNzU5LDcgJiM0MzsxNzY0LDggQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICovXG4gXHRcdGlmIChzaXplIFx1MDAzZSBTV0FQRklMRV9DTFVTVEVSKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTtcbiYjNDM7XHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNzc1LDEzICYjNDM7MTc4MSwyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFxuIFx0LyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi9cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxuJiM0MztcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbywgXHUwMDI2c3dhcF9tYXJnaW4pKSkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0XHRyZXR1cm4gb3JkZXIgXHUwMDI2XHUwMDI2IHN3YXBfbWFyZ2luIFx1MDAzZSAwID8gLUUyQklHIDogLUVOT01FTTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZhaWxlZDpcbiYjNDM7XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XHRpZiAoc3dhcF9tYXJnaW4gXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI2ZGY4MWU3NzNmZmIuLmU5MTEwYWZhZDI5ZmIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xMjYzLDYgJiM0MzsxMjYzLDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4mIzQzO1x0XHRcdGludCByZXQ7XG4mIzQzO1xuIFx0XHRcdGlmICghKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9JTykpXG4gXHRcdFx0XHRnb3RvIGtlZXBfbG9ja2VkO1xuIFx0XHRcdGlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSlcbkBAIC0xMjgxLDExICYjNDM7MTI4MywxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbiYjNDM7XHRcdFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0O1xuJiM0MztcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuJiM0MztcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XG4gXHRcdFx0XHQvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqL1xuIFx0XHRcdFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX2FsbG9jX3N3YXAmIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiYjMzQ7LAogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIHRvIGhhbmRsZSBsYXJnZSBmb2xpb3MgKFRIUCkgbW9yZSBncmFjZWZ1bGx5IHdoZW4gc3dhcCBzcGFjZSBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgY29uc3RyYWluZWQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgc3dhcCBtYXJnaW5zIGFuZCBjaGFuZ2VzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGAtRU5PTUVNYCkgaW5zdGVhZCBvZiBnZW5lcmljIGVycm9ycy4gVGhlc2UgZXJyb3IgY29kZXMgYXJlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IHRoZSBsYXJnZSBmb2xpbyBhbmQgcmV0cnkgc3dhcHBpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIGFyZSBoYW5kbGVkIGZvciBodWdlIHBhZ2VzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2Y4MjYxZDcwZTJjYmQyNDAyYjBhZmJmNWI2MDFhODc3YzM2ZmE1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDA4OjA3OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCkBAIC02OCw2ICYjNDM7NjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKIAlyZXR1cm4gYXRvbWljX2xvbmdfcmVhZCgmYW1wO2NvdW50ZXItJmd0O3VzYWdlKTsKIH0KIAomIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTsKIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggMDU0NGIyZWM0YzU2NS4uN2QxMjA1ODE3NGFlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTUwOSwxMiAmIzQzOzUwOSwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19TV0FQKQotaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO2ludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvbmcgKnN3YXBfbWFyZ2luKTsKJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkJICAgICBsb25nICpzd2FwX21hcmdpbikKIHsKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbyk7CiYjNDM7CXJldHVybiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvLCBzd2FwX21hcmdpbik7CiB9CiAKIGV4dGVybiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpOwpAQCAtNTI1LDEwICYjNDM7NTI2LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wCiAJX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTsKIH0KIAomIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiBleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCQkgICAgIGxvbmcgKnN3YXBfbWFyZ2luKQogewogCXJldHVybiAwOwogfQpAQCAtNTM4LDYgJiM0Mzs1NDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDgzMTlhZDhjNWMyM2EuLmZiMGVjNDM5YmEyZDggMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTU1OTIsMTIgJiM0Mzs1NTkyLDEzIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpCiAvKioKICAqIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAgLSB0cnkgY2hhcmdpbmcgc3dhcCBzcGFjZSBmb3IgYSBmb2xpbwogICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwCiYjNDM7ICogQHN3YXBfbWFyZ2luOiByZW1haW5pbmcgbWVtY2cgc3dhcCBtYXJnaW4gaWYgYWxsb2NhdGlvbiBvciBjaGFyZ2UgZmFpbHMKICAqCiAgKiBUcnkgdG8gY2hhcmdlIEBmb2xpbyYjMzk7cyBtZW1jZyBmb3IgdGhlIHN3YXAgc3BhY2UgYXQgZm9saW8tJmd0O3N3YXAuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS4KICAqLwotaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb25nICpzd2FwX21hcmdpbikKIHsKIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTsKQEAgLTU2MTYsNiAmIzQzOzU2MTcsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJjdV9yZWFkX2xvY2soKTsKIAltZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpOwogCWlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkqc3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKCZhbXA7bWVtY2ctJmd0O3N3YXApOwogCQltZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gMDsKQEAgLTU2MjksNiAmIzQzOzU2MzEsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCSAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMsICZhbXA7Y291bnRlcikpIHsKIAkJbWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7CiAJCW1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTsKJiM0MzsJCSpzd2FwX21hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oY291bnRlcik7CiAJCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNTY3MCwxNSAmIzQzOzU2NzMsMzkgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpOwogCi0JaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpCi0JCXJldHVybiBucl9zd2FwX3BhZ2VzOwotCWZvciAoOyAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKTsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpCi0JCW5yX3N3YXBfcGFnZXMgPSBtaW5fdChsb25nLCBucl9zd2FwX3BhZ2VzLAotCQkJCSAgICAgIFJFQURfT05DRShtZW1jZy0mZ3Q7c3dhcC5tYXgpIC0KLQkJCQkgICAgICBwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO21lbWNnLSZndDtzd2FwKSk7CiYjNDM7CWlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpICZhbXA7JmFtcDsgIWRvX21lbXN3X2FjY291bnQoKSkKJiM0MzsJCW5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbigmYW1wO21lbWNnLSZndDtzd2FwKSk7CiYjNDM7CiAJcmV0dXJuIG5yX3N3YXBfcGFnZXM7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJiMzOTtzIG1lbWNnIHN3YXAgbWFyZ2luCiYjNDM7ICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1jZyBtYXJnaW4gaXMgcXVlcmllZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8mIzM5O3MgbWVtY2cgaGllcmFyY2h5LgomIzQzOyAqLwomIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWxvbmcgc3dhcF9tYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQlyZXR1cm4gc3dhcF9tYXJnaW47CiYjNDM7CiYjNDM7CW9iamNnID0gZm9saW9fb2JqY2coZm9saW8pOwomIzQzOwlpZiAoIW9iamNnKQomIzQzOwkJcmV0dXJuIHN3YXBfbWFyZ2luOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiYjNDM7CXN3YXBfbWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbigmYW1wO21lbWNnLSZndDtzd2FwKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzd2FwX21hcmdpbjsKJiM0Mzt9CiYjNDM7CiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuYwppbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NAotLS0gYS9tbS9wYWdlX2NvdW50ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuYwpAQCAtNDYsNiAmIzQzOzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYywKIAl9CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0cwomIzQzOyAqIEBjb3VudGVyOiBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZgomIzQzOyAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuCiYjNDM7ICovCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpCiYjNDM7ewomIzQzOwlsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLSZndDttYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7CiYjNDM7CiYjNDM7CQltYXJnaW4gPSBtaW4obWFyZ2luLCBtKTsKJiM0MzsJfSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLSZndDtwYXJlbnQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcmdpbjsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlcgogICogQGNvdW50ZXI6IGNvdW50ZXIKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDY2NDE4MjNiZWQxNmIuLjZmOTU5MTkxZWY3MGIgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMTYwOSw2ICYjNDM7MTYwOSw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtJmd0O2lfc2IpOwogCXBnb2ZmX3QgaW5kZXg7CiAJaW50IG5yX3BhZ2VzOwomIzQzOwlpbnQgcmV0OwogCWJvb2wgc3BsaXQgPSBmYWxzZTsKIAogCWlmICgoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby0mZ3Q7bm9zd2FwKQpAQCAtMTY4OSw3ICYjNDM7MTY5MCw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAJfQogCi0JaWYgKCFmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkgewomIzQzOwlyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTsKJiM0MzsJaWYgKCFyZXQpIHsKIAkJYm9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7CiAJCWludCBlcnJvcjsKIApAQCAtMTc0Miw3ICYjNDM7MTc0NCw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwogCQlnb3RvIHJlZGlydHk7CiAJfQotCWlmIChucl9wYWdlcyAmZ3Q7IDEpCiYjNDM7CWlmIChucl9wYWdlcyAmZ3Q7IDEgJmFtcDsmYW1wOyByZXQgPT0gLUUyQklHKQogCQlnb3RvIHRyeV9zcGxpdDsKIHJlZGlydHk6CiAJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA3MGI5MGZhOWMyYTA0Li5hZTYyYzlmOWMwZjJhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE3MzUsMjMgJiM0MzsxNzM1LDI4IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKICAqIHN3YXAgY2FjaGUuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suCi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LAomIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nCiYjNDM7ICogd291bGQgbm90IGhlbHAuCiAgKi8KIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwogCXVuc2lnbmVkIGludCBzaXplID0gMSAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsJbG9uZyBzd2FwX21hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7CiAKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pOwogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbyksIGZvbGlvKTsKIAogCWlmIChvcmRlcikgewogCQkvKgotCQkgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLAotCQkgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi4KJiM0MzsJCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93CiYjNDM7CQkgKiB3aGV0aGVyIHNwbGl0dGluZyBhbmQgcmV0cnlpbmcgY2FuIG1ha2UgcHJvZ3Jlc3MuCiAJCSAqLwotCQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSkKLQkJCXJldHVybiAtRUFHQUlOOwomIzQzOwkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpIHsKJiM0MzsJCQlzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTsKJiM0MzsJCQlnb3RvIGZhaWxlZDsKJiM0MzsJCX0KIAogCQkvKgogCQkgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemUKQEAgLTE3NTksNyAmIzQzOzE3NjQsOCBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQkgKi8KIAkJaWYgKHNpemUgJmd0OyBTV0FQRklMRV9DTFVTVEVSKSB7CiAJCQlWTV9XQVJOX09OX09OQ0UoMSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTsKJiM0MzsJCQlnb3RvIGZhaWxlZDsKIAkJfQogCX0KIApAQCAtMTc3NSwxMyAmIzQzOzE3ODEsMjMgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAl9CiAKIAkvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqLwotCWlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKQomIzQzOwlpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8sICZhbXA7c3dhcF9tYXJnaW4pKSkgewogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiYjNDM7CQlyZXR1cm4gb3JkZXIgJmFtcDsmYW1wOyBzd2FwX21hcmdpbiAmZ3Q7IDAgPyAtRTJCSUcgOiAtRU5PTUVNOwomIzQzOwl9CiAKIAlpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJZ290byBmYWlsZWQ7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztmYWlsZWQ6CiYjNDM7CWlmIChnZXRfbnJfc3dhcF9wYWdlcygpICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJaWYgKHN3YXBfbWFyZ2luICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDI2ZGY4MWU3NzNmZmIuLmU5MTEwYWZhZDI5ZmIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjYzLDYgJiM0MzsxMjYzLDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQkhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKIAkJCWlmICghKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSkKQEAgLTEyODEsMTEgJiM0MzsxMjgzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJCQkgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJfQotCQkJaWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CQkJcmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldCkgewogCQkJCWludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAogCQkJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwomIzQzOwkJCQlpZiAocmV0ICE9IC1FMkJJRykKJiM0MzsJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwogCQkJCS8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovCiAJCQkJaWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc4MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZvbGlvIFN3YXAgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbGFyZ2UgZm9saW9zIChzcGVjaWZpY2FsbHkgVEhQX1NXQVApIGluIHRoZSBzd2FwIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGNoYW5nZSBpbiBgZm9saW9fYWxsb2Nfc3dhcGAuIEluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgYSBnZW5lcmljIHN1Y2Nlc3MvZmFpbHVyZSwgaXQmIzM5O3Mgbm93IHJldHVybmluZyBtb3JlIHNwZWNpZmljIGVycm9yIGNvZGVzOiBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGlzIGdyYW51bGFyaXR5IGlzIGludGVyZXN0aW5nIGFuZCB3aWxsIGZvcmNlIHNvbWUgY2hhbmdlcyB1cCB0aGUgY2FsbCBzdGFjay4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGFmZmVjdHMgaG93IGxhcmdlIGZvbGlvcyBhcmUgc3BsaXQgd2hlbiBlaXRoZXIgc3dhcCBzcGFjZSBpcyB0aWdodCwgb3IgYSBtZW1jZyYjMzk7cyBzd2FwIGxpbWl0IGlzIGJlaW5nIGhpdC4gVGhlIGNvZGUgdXBkYXRlcyBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgdGhhdCBgLUUyQklHYCBlcnJvciwgd2hpY2ggdGVsbHMgdGhlbSB0byBzcGxpdCB0aGUgZm9saW8uIE1ha2VzIHNlbnNlLCBtb3JlIGRldGFpbGVkIGVycm9yIGNvZGVzIHByb3ZpZGUgbW9yZSByZWZpbmVkIGhhbmRsaW5nLgoKSSYjMzk7bSBzZWVpbmcgbWVudGlvbnMgb2YgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAuIFRoZXNlIHNlZW0gdG8gYmUgaW52b2x2ZWQgaW4gdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzaWRlIG9mIHRoaW5ncy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nLCBvciByZWZpbmluZywgdGhlIG1lY2hhbmlzbSBmb3IgY2FsY3VsYXRpbmcgYW5kIHJlcG9ydGluZyBhICYjMzQ7c3dhcCBtYXJnaW4mIzM0OyB3aXRoaW4gbWVtY2cuIFRoZSBnb2FsIGhlcmUgaXMgcHJvYmFibHkgdG8gaGF2ZSBiZXR0ZXIgY29udHJvbCBvdmVyIHdoZW4gdG8gc3BsaXQgdGhlIGZvbGlvcyBvciB0byBhY2N1cmF0ZWx5IHJlcG9ydCB0aGUgc3dhcCB1c2FnZS4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX1NXQVBgLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19USFBfU1dBUGAuCgpBbHJpZ2h0LCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBzeW1ib2xzOiBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBMb29rcyBsaWtlIGBmb2xpb19hbGxvY19zd2FwYCBpcyBleHBvcnRlZCwgYW5kIGl0JiMzOTtzIGxvY2F0ZWQgaW4gYG1tL3N3YXBmaWxlLmNgLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGZvbGxvdyBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYHNobWVtX3dyaXRlb3V0YCBpcyBhbHNvIGV4cG9ydGVkLiBZZXMsIGl0JiMzOTtzIGluIGBtbS9zaG1lbS5jYC4KVGhlIGBzaHJpbmtfZm9saW9fbGlzdGAgZnVuY3Rpb24gbG9va3MgdG8gYmUgc3RhdGljLCBzbyBpdCBjb3VsZCBiZSBsb2NhbCB0byB0aGUgbW9kdWxlLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuIFllcywgaXQgaXMgc3RhdGljLgpBbHNvLCBJJiMzOTtsbCBuZWVkIHRvIHN0dWR5IGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgd2hpY2ggYXJlIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG1lbWNnJiMzOTtzIGxvZ2ljLgoKVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXQgdGhlIHZlcnkgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgdHJhY2UgdGhlIGVycm9yIGNvZGUgcHJvcGFnYXRpb24gYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGJvdGggc3dhcCBhbmQgbWVtY2cgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBzaG1lbV93cml0ZW91dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTE1NTI9aW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3NobWVtLmMtMTYwMi0gKi9cbm1tL3NobWVtLmM6MTYwMzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zaG1lbS5jLTE2MDQtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vc3dhcC5oPTQ3Mz1leHRlcm4gY29uc3Qgc3RydWN0IHN3YXBfb3BzIHN3YXBfYmRldl9vcHM7XG5tbS9zd2FwLmgtNDc0LVxubW0vc3dhcC5oOjQ3NTppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zd2FwLmgtNDc2LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwIEZvbGlvIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX3dyaXRlb3V0YCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAuIFRoZXkmIzM5O3JlIGFsbCBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgc3dhcCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCkZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gdmVyaWZ5IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX1NXQVBgLCBhbmQgYENPTkZJR19USFBfU1dBUGAuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhleSYjMzk7cmUgYWxsIHByZXR0eSBzdGFuZGFyZCBmb3IgYW55IG1vZGVybiBrZXJuZWwgYnVpbGQuIEhvd2V2ZXIsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHNvbWV0aGluZyBJIHNob3VsZCBjb25zaWRlciBhcyBwb3NzaWJseSByZWxldmFudCBmb3IgcGVyZm9ybWFuY2UgaW4gdGhpcyBjb250ZXh0LCBlc3BlY2lhbGx5IHdpdGggc3dhcC4KCk5vdywgbXkgZm9jdXMgaXMgZGVmaW5pdGVseSBgZm9saW9fYWxsb2Nfc3dhcGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIGRpdmUgaW50byBgbW0vc3dhcGZpbGUuY2AgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGNvbmZpZ3VyYXRpb25zIEkganVzdCBub3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZvbGlvcyBhcmUgYmVpbmcgYWxsb2NhdGVkIHdpdGhpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggbWVtb3J5IGNncm91cHMgYW5kIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGZvbGlvX2FsbG9jX3N3YXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTIzMj1leHRlcm4gaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCk7XG4tLVxubW0vc3dhcC5oLTI1Mi0gKi9cbm1tL3N3YXAuaDoyNTM6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmgtMjU0LWludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxubW0vc3dhcGZpbGUuYz0xNjk1PXN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NDEtICovXG5tbS9zd2FwZmlsZS5jOjE3NDI6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3N3YXBmaWxlLmMtMTc0My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2ggaXMgQ3JpdGljYWwqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCYjMzk7cyBzY3JlYW1pbmcgZm9yIGZ1enppbmcgYXR0ZW50aW9uLiBJdCYjMzk7cyBwbGF5aW5nIGFyb3VuZCB3aXRoIHRoZSBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBzd2FwIGFuZCBtZW1vcnkgY2dyb3VwIGludGVyYWN0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaG93IGxhcmdlIGZvbGlvcyAoVEhQIOKAkyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBiZWhhdmUgd2hlbiB0aGV5JiMzOTtyZSBzcGxpdCBkdWUgdG8gc3dhcCBsaW1pdGF0aW9ucy4gVGhhdCYjMzk7cyBhIHNlbnNpdGl2ZSBhcmVhISBBbnkgbWlzY2FsY3VsYXRpb24gaGVyZSBhbmQgd2UgY291bGQgYmUgZmFjaW5nIHByZXR0eSBuYXN0eSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBvciwgd29yc2UsIG1lbW9yeSBjb3JydXB0aW9uLgoKVGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBpbW1lZGlhdGVseSBhcmUgYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAuIFRoZXNlIGFyZSB0aGUga2V5IHRvdWNocG9pbnRzIHdoZXJlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgYW5kLCB0aGVyZWZvcmUsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEEgZnV6emVyIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhvc2UgYnkgY2FyZWZ1bGx5IGNyYWZ0aW5nIGlucHV0LgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgY29uZmlncyBhcmUgY29ycmVjdCB0byBlbmFibGUgbXkgdGVzdC4gSSYjMzk7bSBzZWVpbmcgdGhpcyBwYXRjaCByZXF1aXJlcyBgTUVNQ0dgLCBgU1dBUGAsIGBUSFBfU1dBUGAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIGVuYWJsZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYFRIUF9TV0FQYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgbGltaXQgdGhlIHVzZWZ1bG5lc3Mgb2Ygb3VyIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRIUF9TV0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OTY2PWVuZGNob2ljZVxubW0vS2NvbmZpZy05NjctXG5tbS9LY29uZmlnOjk2ODpjb25maWcgVEhQX1NXQVBcbm1tL0tjb25maWctOTY5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCBhcyB0aG91Z2ggdGhleSBhcmUgbXkgb3duOgoKKipEZWx2aW5nIGludG8gdGhlIEJvb2xlYW4gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGVmX2Jvb2wgeWAgY29uc3RydWN0Li4uIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvbmRpdGlvbmFsIGFzcGVjdHMuIEl0JiMzOTtzICpkZWZpbmVkKiBhcyBgeWAsIHdoaWNoIGlzIGEgYm9vbGVhbiwgYnV0IHRoZSBhY3R1YWwgc3RhdGUgb2YgYHlgIGlzIGdvaW5nIHRvIGJlIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlZCBieSB0aGUgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgdGhlIHByZXNlbmNlIG9mIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBTV0FQYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGxpZXMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byBob3cgdGhvc2UgZmxhZ3MgaW50ZXJhY3QgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgZm9yIGB5YC4gVGhpcyBpcyBub3QgYSBzaW1wbGUsIHN0YXRpYyBib29sZWFuISBUaGlzIGB5YCBpcyBkeW5hbWljLCBkZXBlbmRlbnQgb24gdGhlIGludGVycGxheSBvZiB0aG9zZSB0d28gZmVhdHVyZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBsb2dpYzogdW5kZXIgd2hpY2ggc3BlY2lmaWMgcGVybXV0YXRpb25zIG9mIHRob3NlIHNldHRpbmdzIGRvZXMgYHlgIGJlY29tZSB0cnVlIG9yIGZhbHNlPyBXaGF0IGhhcHBlbnMgaWYgb25lIGlzIGVuYWJsZWQgYW5kIHRoZSBvdGhlciBkaXNhYmxlZD8gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgaXMga2V5LiBJIG5lZWQgdG8gbWFwIGl0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcmMvS2NvbmZpZz0zMDM9Y2hvaWNlXG5hcmNoL2FyYy9LY29uZmlnLTMwNC1cdHByb21wdCBcJiMzNDtNTVUgU3VwZXIgUGFnZSBTaXplXCYjMzQ7XG5hcmNoL2FyYy9LY29uZmlnOjMwNTpcdGRlcGVuZHMgb24gSVNBX0FSQ1YyIFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcmMvS2NvbmZpZy0zMDYtXHRkZWZhdWx0IEFSQ19IVUdFUEFHRV8yTVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yNDEyPWNvbmZpZyBBUk02NF9DT05UUFRFXG5hcmNoL2FybTY0L0tjb25maWctMjQxMy1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHVzZXIgbWVtb3J5XCYjMzQ7IGlmIEVYUEVSVFxuYXJjaC9hcm02NC9LY29uZmlnOjI0MTQ6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2FybTY0L0tjb25maWctMjQxNS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWc9OD1jb25maWcgREVWX0RBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVwmIzM0O1xuZHJpdmVycy9kYXgvS2NvbmZpZzoxMDpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRyaXZlcnMvZGF4L0tjb25maWctMTEtXHRoZWxwXG4tLVxuZHJpdmVycy9odi9LY29uZmlnPTg5PWNvbmZpZyBNU0hWX1ZUTFxuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy05NS1cdCMgc3BlY2lhbGx5IHdpdGggbGFyZ2UgbWVtb3J5IHJlcXVpcmVtZW50cy5cbmRyaXZlcnMvaHYvS2NvbmZpZzo5NjpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRyaXZlcnMvaHYvS2NvbmZpZy05Ny1cdCMgTVRSUnMgYXJlIGNvbnRyb2xsZWQgYnkgVlRMMCwgYW5kIGFyZSBub3Qgc3BlY2lmaWMgdG8gaW5kaXZpZHVhbCBWVExzLlxuLS1cbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcbi0tXG5mcy9LY29uZmlnLTk0LVx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZnMvS2NvbmZpZzo5NTpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmZzL0tjb25maWctOTYtXG4tLVxubGliL0tjb25maWcuZGVidWc9MzMyNj1jb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbmxpYi9LY29uZmlnLmRlYnVnOjMzMjg6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI5LVx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuLS1cbm1tL0tjb25maWc9ODEzPWNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xubW0vS2NvbmZpZy04MTQtXHRib29sIFwmIzM0O0FsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXCYjMzQ7XG5tbS9LY29uZmlnOjgxNTpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODE2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9ODMyPW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODMzLVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG5tbS9LY29uZmlnOjgzNDpcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxubW0vS2NvbmZpZy04MzUtXHRzZWxlY3QgQ09NUEFDVElPTlxuLS1cbm1tL0tjb25maWc9MTAxND1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUFxubW0vS2NvbmZpZy0xMDE1LVx0ZGVmX2Jvb2wgblxubW0vS2NvbmZpZzoxMDE2Olx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy0xMDE3LVxubW0vS2NvbmZpZz0xMDE4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcbm1tL0tjb25maWctMTAxOS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTAyMDpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTEwMjEtXG5tbS9LY29uZmlnPTEwMjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxubW0vS2NvbmZpZy0xMDIzLVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxMDI0Olx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9LY29uZmlnLTEwMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIG15IHN0YXJ0aW5nIHBvaW50IGhlcmUgaXMgZGVmaW5pdGVseSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZ292ZXJucyB0aGlzIHdob2xlIGFyZWEuIE5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBpdCYjMzk7cyBhbGwgaG9va2VkIHVwLCBwYXJ0aWN1bGFybHkgd2l0aCByZWdhcmQgdG8gc3dhcHBpbmcsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9LY29uZmlnYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIGBUSFBfU1dBUGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBzZXR0aW5ncy4gSSYjMzk7bSBhZnRlciB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBodWdlcGFnZXMgYW5kIHN3YXAgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUSFBfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05NjY9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk2Ny1cbm1tL0tjb25maWc6OTY4OmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05NjktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL0tjb25maWdgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGV5JiMzOTtyZSBzdHJ1Y3R1cmVkLCBhbmQgcGVyaGFwcyBpZGVudGlmeSBhIHNwZWNpZmljIG9wdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4uIExldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9LY29uZmlnYC4gTGluZSA5NjguLi4gdGhhdCYjMzk7cyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZXkgc3RhcnQgZGVmaW5pbmcgYSBuZXcgY2F0ZWdvcnkgb3IgbW9kdWxlLiBUaW1lIHRvIHNlZSB3aGF0IHdlIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUwOlx0XG4gOTUxOlx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxuIDk1MjpcdFx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4gOTUzOlx0XHRoZWxwXG4gOTU0Olx0XHQgIEVuYWJsZSBodWdlcGFnZSBhbGxvY2F0aW9uIGZvciB0bXBmcyBtb3VudCBpZiB0aGUgYWxsb2NhdGlvblxuIDk1NTpcdFx0ICB3aWxsIGJlIGZ1bGx5IHdpdGhpbiB0aGUgaV9zaXplLiBUaGlzIGNvbmZpZ3VyYXRpb24gYWxzbyB0YWtlc1xuIDk1NjpcdFx0ICBpbnRvIGFjY291bnQgYW55IG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgaGludHMgdGhhdCBtYXkgYmVcbiA5NTc6XHRcdCAgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9ucy5cbiA5NTg6XHRcbiA5NTk6XHRcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxuIDk2MDpcdFx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuIDk2MTpcdFx0aGVscFxuIDk2MjpcdFx0ICBFbmFibGUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBmb3IgdGhlIHRtcGZzIG1vdW50IGV4Y2x1c2l2ZWx5IHdoZW5cbiA5NjM6XHRcdCAgYXBwbGljYXRpb25zIHN1cHBseSB0aGUgbWFkdmlzZShNQURWX0hVR0VQQUdFKSBoaW50LlxuIDk2NDpcdFx0ICBUaGlzIGVuc3VyZXMgdGhhdCBodWdlcGFnZXMgYXJlIHVzZWQgb25seSBpbiByZXNwb25zZSB0byBleHBsaWNpdFxuIDk2NTpcdFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cbiA5NjY6XHRlbmRjaG9pY2VcbiA5Njc6XHRcbiA5Njg6XHRjb25maWcgVEhQX1NXQVBcbiA5Njk6XHRcdGRlZl9ib29sIHlcbiA5NzA6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcdTAwMjZcdTAwMjYgU1dBUCBcdTAwMjZcdTAwMjYgNjRCSVRcbiA5NzE6XHRcdGhlbHBcbiA5NzI6XHRcdCAgU3dhcCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGluIG9uZSBwaWVjZSwgd2l0aG91dCBzcGxpdHRpbmcuXG4gOTczOlx0XHQgIFhYWDogRm9yIG5vdywgc3dhcCBjbHVzdGVyIGJhY2tpbmcgdHJhbnNwYXJlbnQgaHVnZSBwYWdlXG4gOTc0Olx0XHQgIHdpbGwgYmUgc3BsaXQgYWZ0ZXIgc3dhcG91dC5cbiA5NzU6XHRcbiA5NzY6XHRcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXG4gOTc3Olx0XG4gOTc4Olx0Y29uZmlnIE5PX1BBR0VfTUFQQ09VTlRcbiA5Nzk6XHRcdGJvb2wgXCYjMzQ7Tm8gcGVyLXBhZ2UgbWFwY291bnQgKEVYUEVSSU1FTlRBTClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVEhQX1NXQVAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBUSFBfU1dBUGAgaXMgYmVpbmcgY29uZmlndXJlZCBoZXJlLiBJdCBzZWVtcyBsaWtlIGl0cyBhY3RpdmF0aW9uIGlzIGNvbmRpdGlvbmFsLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IGZhY3RvcnMgc2VlbSB0byBiZSBgQVJDSF9XQU5UU19USFBfU1dBUCAmYW1wOyZhbXA7IFNXQVAgJmFtcDsmYW1wOyA2NEJJVGAuICBFc3NlbnRpYWxseSwgdGhlIHN5c3RlbSAqd2FudHMqIFRIUCBzd2FwLCBzd2FwIGlzIGVuYWJsZWQsIGFuZCBpdCYjMzk7cyBhIDY0LWJpdCBhcmNoaXRlY3R1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGFyZSBhbGwgcmVhc29uYWJsZSByZXF1aXJlbWVudHMuICBUaGVyZWZvcmUsIGl0IHdpbGwgYmUgZW5hYmxlZCBpZiBgQVJDSF9XQU5UU19USFBfU1dBUGAgaXMgdHJ1ZS4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5IGRldGVybWluZXMgdGhlIHZhbHVlIG9mIGBBUkNIX1dBTlRTX1RIUF9TV0FQYC4gSSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHNlZSB3aGF0IGNvbmRpdGlvbnMgKnRoYXQqIGRlcGVuZHMgb24uIExldCYjMzk7cyBnbyBjaGVjayB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MDc9Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcbi0tXG5tbS9LY29uZmlnLTgwOS1cbm1tL0tjb25maWc6ODEwOmNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXG5tbS9LY29uZmlnLTgxMS1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQXJjaGl0ZWN0dXJhbCBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgZWxlbWVudCwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGl0cyBkZXBlbmRlbmN5IHByb2ZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoaWNoKiBhcmNoaXRlY3R1cmVzIGFyZSBldmVuIGJvdGhlcmluZyB0byB1c2UgaXQuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgZ2VuZXJhbCBhd2FyZW5lc3MsIEkgbmVlZCB0byBrbm93IHRoZSBkaXJlY3QgY29ubmVjdGlvbnMuIE5vIHBvaW50IGluIG9wdGltaXppbmcgaXQsIGltcHJvdmluZyBpdHMgaW50ZXJmYWNlLCBvciBldmVuIHdvcnJ5aW5nIGFib3V0IGl0cyBsaWZlY3ljbGUgaWYgaXQmIzM5O3Mgbm90IGFjdHVhbGx5ICpzZWxlY3RlZCogYW5kIGluY29ycG9yYXRlZCBpbnRvIGFueSBtZWFuaW5nZnVsIGFyY2hpdGVjdHVyYWwgcGF0dGVybnMuIExldOKAmXMgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBhcmNoaXRlY3R1cmUgbGFuZHNjYXBlIGFuZCB0cmFjZSBpdHMgdXNhZ2UuIFRpbWUgdG8gZ2V0IHNvbWUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTk4LVx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcbmFyY2gvYXJtNjQvS2NvbmZpZzo5OTpcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQIGlmIEFSTTY0XzRLX1BBR0VTXG5hcmNoL2FybTY0L0tjb25maWctMTAwLVx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTg1LVx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODY6XHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUCBpZiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODctXHRzZWxlY3QgQlVJTERUSU1FX1RBQkxFX1NPUlRcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTkxLVx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcbmFyY2gvcmlzY3YvS2NvbmZpZzo5MjpcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQIGlmIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9yaXNjdi9LY29uZmlnLTkzLVx0c2VsZWN0IEFSQ0hfV0VBS19SRUxFQVNFX0FDUVVJUkUgaWYgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMTYzLVx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxuYXJjaC9zMzkwL0tjb25maWc6MTY0Olx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVBcbmFyY2gvczM5MC9LY29uZmlnLTE2NS1cdHNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVFxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTUxLVx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVCBpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWc6MTUyOlx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVBcdFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTE1My1cdHNlbGVjdCBBUkNIX0hBU19QQVJBTk9JRF9MMURfRkxVU0hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBDb251bmRydW1zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgKGB4ODZfNjRgLCBgYXJtNjRgLCBldGMuKSBpcyBnb2luZyB0byBoYW5kbGUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHNlbGVjdGlvbi4gSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgQVJDSF9XQU5UU19USFBfU1dBUGAgaGVyZTsgdGhhdCYjMzk7cyBpbXBsaWVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgY2hvaWNlcy4gSSBqdXN0IG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgU1dBUGAsIGFuZCBgTUVNQ0dgLgoKSGFuZyBvbiBhIHNlY29uZOKApiBpdCYjMzk7cyBub3QgYSBkaXJlY3QgZGVwZW5kZW5jeSBpbiBgbW0vS2NvbmZpZ2AsIGlzIGl0PyBgVEhQX1NXQVBgIGRvZXNu4oCZdCBkaXJlY3RseSBkZXBlbmQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCwgYEFSQ0hfV0FOVFNfVEhQX1NXQVBgIGlzICp1c3VhbGx5KiBzZWxlY3RlZCB3aGVuIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHNldCwgc28gaXQmIzM5O3MgcHJhY3RpY2FsbHkgdGhlIHNhbWUgdGhpbmcuCgpSaWdodCwgSSBzZWUgbm93LiBgVEhQX1NXQVBgIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgIGlmIGBBUkNIX1dBTlRTX1RIUF9TV0FQYCBpcyBzZXQsIEFORCB3ZSBoYXZlIGBTV0FQYCBlbmFibGVkLCBBTkQgd2UmIzM5O3JlIG9uIGEgNjQtYml0IGFyY2hpdGVjdHVyZS4gQnV0IGhvbGQgb24sIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBjbGVhcmx5IHJlbGllcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGV4aXN0aW5nIGluIHRoZSBmaXJzdCBwbGFjZSwgb3IgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBzd2FwLCBzbyBpdCBzdGlsbCBpcyBhIHJlbGV2YW50IGZsYWcuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04Mjk9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzEtXG5tbS9LY29uZmlnOjgzMjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzMy1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUwPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU1LVxubW0vS2NvbmZpZzo4NTY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg1Ny1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2Mi1cbm1tL0tjb25maWc6ODYzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY0LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3MS1cbm1tL0tjb25maWc6ODcyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3My1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODc5PWNob2ljZVxuLS1cbm1tL0tjb25maWctODg4LVxubW0vS2NvbmZpZzo4ODk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTAtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg5OC1cbm1tL0tjb25maWc6ODk5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwNi1cbm1tL0tjb25maWc6OTA3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTA4LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTQtXG5tbS9LY29uZmlnOjkxNTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTYtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05MjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzMtXG5tbS9LY29uZmlnOjkzNDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzNS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQyLVxubW0vS2NvbmZpZzo5NDM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUwLVxubW0vS2NvbmZpZzo5NTE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1OC1cbm1tL0tjb25maWc6OTU5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2MC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MTUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRXhhbWluaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUuIE15IG5leHQgdGhvdWdodCBpcywgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB3aGF0IHRoZSBzdGF0dXMgb2YgYENPTkZJR19NRU1DR2AgaXMuIEkga25vdyB0aGVzZSBmZWF0dXJlcyBoYXZlIHNvbWUgbGV2ZWwgb2YgaW50ZXJhY3Rpb24sIGFuZCBJIG5lZWQgdG8gcmVjYWxsIGhvdyB0aGV5IGludGVycmVsYXRlIGZvciBvcHRpbWFsIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlLiBHZXR0aW5nIGBDT05GSUdfTUVNQ0dgIHdpbGwgZ2l2ZSBtZSB0aGUgZGlyZWN0aW9uIEkgbmVlZCB0byBzdGFydCBteSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3ND1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4My1cbmluaXQvS2NvbmZpZzoxMDg0OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODUtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTItXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA2LVxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgSW50ZXJhY3Rpb25zIHdpdGggVEhQIGFuZCBTd2FwKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBNRU1DR2AsIGBTV0FQYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW50ZXJhY3QuIExldCYjMzk7cyBkaWcgaW4gYSBiaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGBzaHJpbmtfZm9saW9fbGlzdGAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBzaHJpbmtfbHJ1dmVjYCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgLiBUaGF0IHN1Z2dlc3RzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gc3dhcCBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50OiBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGFsc28gYHBhZ2VfY291bnRlcl9tYXJnaW5gLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdmlzaWJpbGl0eSBvZiB0aG9zZSBrZXkgZnVuY3Rpb25zLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBpZiBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAgaXMgZXhwb3J0ZWQgb3IgaW50ZXJuYWwuIEdvb2QsIGl0JiMzOTtzIGdsb2JhbCwgc28gaXQmIzM5O3MgcmVhZGlseSBhY2Nlc3NpYmxlLiBTYW1lIGZvciBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAuIEFsbCBhcmUgZ2xvYmFsbHkgZGVmaW5lZCwgd2hpY2ggbWFrZXMgdGhpbmdzIGVhc2llciB0byB0cmFjay4KCk5vdywgYSBxdWljayBjaGVjayByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMuIEkgcmVjYWxsIGBDT05GSUdfVEhQX1NXQVBgIGJlaW5nIHJlbGV2YW50IGhlcmUuIEFoLCByaWdodCwgaXQmIzM5O3MgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAgaWYgYEFSQ0hfV0FOVFNfVEhQX1NXQVAgJmFtcDsmYW1wOyBTV0FQICZhbXA7JmFtcDsgNjRCSVRgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGVuYWJsZWQgYXV0b21hdGljYWxseSB1bmRlciB0aGUgcmlnaHQgY29uZGl0aW9ucy4gSSB3YXMgY29uc2lkZXJpbmcgZW5hYmxpbmcgaXQgZXhwbGljaXRseSwgYnV0IHRoYXQmIzM5O3Mgbm90IG5lZWRlZCwgYW5kIGFzIGl0JiMzOTtzIG5vdCBhIHByb21wdCBjb25maWcsIEkgY2Fubm90IGRvIHRoYXQuIEluc3RlYWQsIEkgc2hvdWxkIGVuc3VyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgU1dBUGAgYXJlIGVuYWJsZWQsIGFzIHRoZXkgY29udHJvbCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgVEhQX1NXQVBgIGhhcyBhIHByb21wdCBpbiB0aGUgY29uZmlndXJhdGlvbiwgYnV0IEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gaXQgZG9lc24mIzM5O3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTY1Olx0XHQgIHJlcXVlc3RzIGZyb20gYXBwbGljYXRpb25zLlxuIDk2NjpcdGVuZGNob2ljZVxuIDk2NzpcdFxuIDk2ODpcdGNvbmZpZyBUSFBfU1dBUFxuIDk2OTpcdFx0ZGVmX2Jvb2wgeVxuIDk3MDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVFxuIDk3MTpcdFx0aGVscFxuIDk3MjpcdFx0ICBTd2FwIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgaW4gb25lIHBpZWNlLCB3aXRob3V0IHNwbGl0dGluZy5cbiA5NzM6XHRcdCAgWFhYOiBGb3Igbm93LCBzd2FwIGNsdXN0ZXIgYmFja2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VcbiA5NzQ6XHRcdCAgd2lsbCBiZSBzcGxpdCBhZnRlciBzd2Fwb3V0LlxuIDk3NTpcdFxuIDk3NjpcdFx0ICBGb3Igc2VsZWN0aW9uIGJ5IGFyY2hpdGVjdHVyZXMgd2l0aCByZWFzb25hYmxlIFRIUCBzaXplcy5cbiA5Nzc6XHRcbiA5Nzg6XHRjb25maWcgTk9fUEFHRV9NQVBDT1VOVFxuIDk3OTpcdFx0Ym9vbCBcJiMzNDtObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3OQoJCQkJCQkJb3V0cHV0OiAyNDMKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFN3YXAgQWxsb2NhdGlvbiBMb2dpYyBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhlcmUmIzM5O3Mgbm8gc3BlY2lmaWMgdHJpZ2dlciBmb3IgdGhpcywgc28gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgb3BlcmF0aW5nIGJhc2VkIG9uIGRlZmF1bHQgY29uZGl0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHdlJiMzOTtyZSBlbmFibGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgU1dBUGAsIGFuZCBgTUVNQ0dgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGFuZCBzd2FwIGJlaGF2aW9yLgoKTXkgZm9jdXMgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW1wYWN0cyBzd2FwIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgZm9yIGxhcmdlIGZvbGlvcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgdGhlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBpbiBgbW0vcGFnZV9jb3VudGVyLmNgIOKAkyBhIGNydWNpYWwgZ2xvYmFsIHZhcmlhYmxlIHRvIHNlZSBob3cgc3dhcCBjb25zdHJhaW50cyBhcmUgaGFuZGxlZCBmcm9tIHRoZSBncm91bmQgdXAuIFRoZW4sIEkgbmVlZCB0byBsb29rIGludG8gYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBhbHNvIGdsb2JhbCwgYmVjYXVzZSB0aGVzZSBsaWtlbHkgaW52b2x2ZSB0aGUgaW50ZXJmYWNlIGZvciBtZW1vcnkgY2dyb3VwcyBhbmQgaG93IHN3YXAgb3BlcmF0aW9ucyBhcmUgbGltaXRlZC4gTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBmb2xpb19hbGxvY19zd2FwYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyBtYW5hZ2VkIG5vdy4gRmluYWxseSwgYHNobWVtX3dyaXRlb3V0YCBpbiBgbW0vc2htZW0uY2AgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgbmV3IGVycm9yIGNvZGVzLgoKVGhlIHBhdGNoIGFpbXMgdG8gaGFuZGxlIGxhcmdlIGZvbGlvcyAoVEhQKSBtb3JlIGVmZmVjdGl2ZWx5LCBwYXJ0aWN1bGFybHkgd2hlbiBzd2FwIHNwYWNlIGlzIGxpbWl0ZWQuIEl0JiMzOTtzIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucywgYW5kIHRoZSBjaGFuZ2UgdG8gYGZvbGlvX2FsbG9jX3N3YXBgIGxvb2tzIHNpZ25pZmljYW50LiBJbnN0ZWFkIG9mIGp1c3QgdGhyb3dpbmcgYSBnZW5lcmljIGVycm9yLCBpdCYjMzk7cyBub3cgcmV0dXJuaW5nIHNwZWNpZmljIGVycm9yIGNvZGVzOiBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGVzZSBtb3JlIGdyYW51bGFyIGVycm9ycyBhcmUgY3JpdGljYWwgYmVjYXVzZSB0aGV5JiMzOTtyZSB0aGVuIHVzZWQgYnkgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBkZWNpZGUgd2hldGhlciB0byBzcGxpdCBhIGxhcmdlIGZvbGlvIGFuZCByZXRyeSB0aGUgc3dhcC4gVGhpcyBpcyBhIHNvbGlkIGFwcHJvYWNoLiBGcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aG9yb3VnaGx5LiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIHdoZW4gaHVnZSBwYWdlcyBhcmUgaW52b2x2ZWQgcHJlc2VudHMgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19hbGxvY19zd2FwJiMzNDssCiAgICAmIzM0O3NobWVtX3dyaXRlb3V0JiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4mIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX21hcmdpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYWxsb2NhdGlvbiBsb2dpYyB0byBoYW5kbGUgbGFyZ2UgZm9saW9zIChUSFApIG1vcmUgZ3JhY2VmdWxseSB3aGVuIHN3YXAgc3BhY2Ugb3IgbWVtY2cgc3dhcCBsaW1pdHMgYXJlIGNvbnN0cmFpbmVkLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucyBhbmQgY2hhbmdlcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzIChgLUUyQklHYCwgYC1FTk9TUENgLCBgLUVOT01FTWApIGluc3RlYWQgb2YgZ2VuZXJpYyBlcnJvcnMuIFRoZXNlIGVycm9yIGNvZGVzIGFyZSB0aGVuIHVzZWQgYnkgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBkZWNpZGUgd2hldGhlciB0byBzcGxpdCB0aGUgbGFyZ2UgZm9saW8gYW5kIHJldHJ5IHN3YXBwaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zIHRoYXQgYWZmZWN0cyBob3cgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwIGxpbWl0cyBhcmUgaGFuZGxlZCBmb3IgaHVnZSBwYWdlcywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX2FsbG9jX3N3YXAmIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiYjMzQ7LAogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIHRvIGhhbmRsZSBsYXJnZSBmb2xpb3MgKFRIUCkgbW9yZSBncmFjZWZ1bGx5IHdoZW4gc3dhcCBzcGFjZSBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgY29uc3RyYWluZWQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgc3dhcCBtYXJnaW5zIGFuZCBjaGFuZ2VzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGAtRU5PTUVNYCkgaW5zdGVhZCBvZiBnZW5lcmljIGVycm9ycy4gVGhlc2UgZXJyb3IgY29kZXMgYXJlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IHRoZSBsYXJnZSBmb2xpbyBhbmQgcmV0cnkgc3dhcHBpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIGFyZSBoYW5kbGVkIGZvciBodWdlIHBhZ2VzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MTcuODk0NDQxMjIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDQ1ODMxNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcInNobWVtX3dyaXRlb3V0XCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwXCIsXG4gICAgXCJtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpblwiLFxuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIHRvIGhhbmRsZSBsYXJnZSBmb2xpb3MgKFRIUCkgbW9yZSBncmFjZWZ1bGx5IHdoZW4gc3dhcCBzcGFjZSBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgY29uc3RyYWluZWQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgc3dhcCBtYXJnaW5zIGFuZCBjaGFuZ2VzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGAtRU5PTUVNYCkgaW5zdGVhZCBvZiBnZW5lcmljIGVycm9ycy4gVGhlc2UgZXJyb3IgY29kZXMgYXJlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IHRoZSBsYXJnZSBmb2xpbyBhbmQgcmV0cnkgc3dhcHBpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIGFyZSBoYW5kbGVkIGZvciBodWdlIHBhZ2VzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowNzoxNy44OTQ0NDc3MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjAyMTU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNmODI2MWQ3MGUyY2JkMjQwMmIwYWZiZjViNjAxYTg3N2MzNmZhNWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MDc6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG5pbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXFxuQEAgLTY4LDYgKzY4LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuIFxcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZjb3VudGVyLVxcdTAwM2V1c2FnZSk7XFxuIH1cXG4gXFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcXG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiB2b2lkIHBhZ2VfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbmluZGV4IDA1NDRiMmVjNGM1NjUuLjdkMTIwNTgxNzRhZTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC01MDksMTIgKzUwOSwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbiAjZW5kaWZcXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1dBUClcXG4taW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK2ludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvbmcgKnN3YXBfbWFyZ2luKTtcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBsb25nICpzd2FwX21hcmdpbilcXG4ge1xcbiBcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pO1xcbitcXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbywgc3dhcF9tYXJnaW4pO1xcbiB9XFxuIFxcbiBleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcXG5AQCAtNTI1LDEwICs1MjYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BcXG4gXFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcXG4gfVxcbiBcXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiBleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBsb25nICpzd2FwX21hcmdpbilcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC01MzgsNiArNTQxLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuIHtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggODMxOWFkOGM1YzIzYS4uZmIwZWM0MzliYTJkOCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNTU5MiwxMiArNTU5MiwxMyBAQCBpbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbiAvKipcXG4gICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXFxuICAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxcbisgKiBAc3dhcF9tYXJnaW46IHJlbWFpbmluZyBtZW1jZyBzd2FwIG1hcmdpbiBpZiBhbGxvY2F0aW9uIG9yIGNoYXJnZSBmYWlsc1xcbiAgKlxcbiAgKiBUcnkgdG8gY2hhcmdlIEBmb2xpbydzIG1lbWNnIGZvciB0aGUgc3dhcCBzcGFjZSBhdCBmb2xpby1cXHUwMDNlc3dhcC5cXG4gICpcXG4gICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cXG4gICovXFxuLWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK2ludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvbmcgKnN3YXBfbWFyZ2luKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG5AQCAtNTYxNiw2ICs1NjE3LDcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbitcXHRcXHQqc3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCk7XFxuIFxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC01NjI5LDYgKzU2MzEsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFxcdTAwMjZjb3VudGVyKSkge1xcbiBcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG4gXFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xcbitcXHRcXHQqc3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvdW50ZXIpO1xcbiBcXHRcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuQEAgLTU2NzAsMTUgKzU2NzMsMzkgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xcbiBcXG4tXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXFxuLVxcdFxcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xcbi1cXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxcbi1cXHRcXHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwLm1heCkgLVxcbi1cXHRcXHRcXHRcXHQgICAgICBwYWdlX2NvdW50ZXJfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXApKTtcXG4rXFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWRvX21lbXN3X2FjY291bnQoKSlcXG4rXFx0XFx0bnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCkpO1xcbitcXG4gXFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJ3MgbWVtY2cgc3dhcCBtYXJnaW5cXG4rICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1jZyBtYXJnaW4gaXMgcXVlcmllZFxcbisgKlxcbisgKiBSZXR1cm46IFJlbWFpbmluZyBjaGFyZ2VhYmxlIHBhZ2VzIGluIHRoZSBmb2xpbydzIG1lbWNnIGhpZXJhcmNoeS5cXG4rICovXFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRsb25nIHN3YXBfbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuK1xcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcXG4rXFx0XFx0cmV0dXJuIHN3YXBfbWFyZ2luO1xcbitcXG4rXFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XFxuK1xcdGlmICghb2JqY2cpXFxuK1xcdFxcdHJldHVybiBzd2FwX21hcmdpbjtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4rXFx0c3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHN3YXBfbWFyZ2luO1xcbit9XFxuK1xcbiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXFxuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXFxuQEAgLTQ2LDYgKzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcXG4gXFx0fVxcbiB9XFxuIFxcbisvKipcXG4rICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcXG4rICogQGNvdW50ZXI6IGNvdW50ZXJcXG4rICpcXG4rICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcXG4rICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cXG4rICovXFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxcbit7XFxuK1xcdGxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0bG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcXG4rXFxuK1xcdFxcdG1hcmdpbiA9IG1pbihtYXJnaW4sIG0pO1xcbitcXHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXFx1MDAzZXBhcmVudCkpO1xcbitcXG4rXFx0cmV0dXJuIG1hcmdpbjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxcbiAgKiBAY291bnRlcjogY291bnRlclxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDY2NDE4MjNiZWQxNmIuLjZmOTU5MTkxZWY3MGIgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMTYwOSw2ICsxNjA5LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRwZ29mZl90IGluZGV4O1xcbiBcXHRpbnQgbnJfcGFnZXM7XFxuK1xcdGludCByZXQ7XFxuIFxcdGJvb2wgc3BsaXQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLVxcdTAwM2Vub3N3YXApXFxuQEAgLTE2ODksNyArMTY5MCw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcXG4rXFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxuK1xcdGlmICghcmV0KSB7XFxuIFxcdFxcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuIFxcbkBAIC0xNzQyLDcgKzE3NDQsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG4gXFx0XFx0Z290byByZWRpcnR5O1xcbiBcXHR9XFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEpXFxuK1xcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgcmV0ID09IC1FMkJJRylcXG4gXFx0XFx0Z290byB0cnlfc3BsaXQ7XFxuIHJlZGlydHk6XFxuIFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDcwYjkwZmE5YzJhMDQuLmFlNjJjOWY5YzBmMmEgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTczNSwyMyArMTczNSwyOCBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuICAqIHN3YXAgY2FjaGUuXFxuICAqXFxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxcbi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS5cXG4rICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCAlLUUyQklHIGlmIHNwbGl0dGluZyB0aGUgZm9saW8gbWlnaHQgYWxsb3cgc3dhcG91dCxcXG4rICogJS1FTk9TUEMgaWYgbm8gZ2xvYmFsIHN3YXAgc3BhY2UgaXMgYXZhaWxhYmxlLCBvciAlLUVOT01FTSBpZiBzcGxpdHRpbmdcXG4rICogd291bGQgbm90IGhlbHAuXFxuICAqL1xcbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG4gXFx0dW5zaWduZWQgaW50IHNpemUgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbitcXHRsb25nIHN3YXBfbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcXG4gXFxuIFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdGlmIChvcmRlcikge1xcbiBcXHRcXHQvKlxcbi1cXHRcXHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLFxcbi1cXHRcXHQgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi5cXG4rXFx0XFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcXG4rXFx0XFx0ICogd2hldGhlciBzcGxpdHRpbmcgYW5kIHJldHJ5aW5nIGNhbiBtYWtlIHByb2dyZXNzLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpXFxuLVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSkge1xcbitcXHRcXHRcXHRzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZVxcbkBAIC0xNzU5LDcgKzE3NjQsOCBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHNpemUgXFx1MDAzZSBTV0FQRklMRV9DTFVTVEVSKSB7XFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSgxKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHN3YXBfbWFyZ2luID0gbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pO1xcbitcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xNzc1LDEzICsxNzgxLDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdH1cXG4gXFxuIFxcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXFxuLVxcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxcbitcXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8sIFxcdTAwMjZzd2FwX21hcmdpbikpKSB7XFxuIFxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuIG9yZGVyIFxcdTAwMjZcXHUwMDI2IHN3YXBfbWFyZ2luIFxcdTAwM2UgMCA/IC1FMkJJRyA6IC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdGlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZmFpbGVkO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitmYWlsZWQ6XFxuK1xcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRpZiAoc3dhcF9tYXJnaW4gXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDI2ZGY4MWU3NzNmZmIuLmU5MTEwYWZhZDI5ZmIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xMjYzLDYgKzEyNjMsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4rXFx0XFx0XFx0aW50IHJldDtcXG4rXFxuIFxcdFxcdFxcdGlmICghKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKSlcXG4gXFx0XFx0XFx0XFx0Z290byBrZWVwX2xvY2tlZDtcXG4gXFx0XFx0XFx0aWYgKGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pKVxcbkBAIC0xMjgxLDExICsxMjgzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICAgIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcXG4rXFx0XFx0XFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxuK1xcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0aW50IF9fbWF5YmVfdW51c2VkIG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgIT0gLUUyQklHKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcXG4gXFx0XFx0XFx0XFx0LyogRmFsbGJhY2sgdG8gc3dhcCBub3JtYWwgcGFnZXMgKi9cXG4gXFx0XFx0XFx0XFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MTguMzI3Mzg5ODk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE0MDEyODczNTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcInNobWVtX3dyaXRlb3V0XCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwXCIsXG4gICAgXCJtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpblwiLFxuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIHRvIGhhbmRsZSBsYXJnZSBmb2xpb3MgKFRIUCkgbW9yZSBncmFjZWZ1bGx5IHdoZW4gc3dhcCBzcGFjZSBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgY29uc3RyYWluZWQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgc3dhcCBtYXJnaW5zIGFuZCBjaGFuZ2VzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGAtRU5PTUVNYCkgaW5zdGVhZCBvZiBnZW5lcmljIGVycm9ycy4gVGhlc2UgZXJyb3IgY29kZXMgYXJlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IHRoZSBsYXJnZSBmb2xpbyBhbmQgcmV0cnkgc3dhcHBpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIGFyZSBoYW5kbGVkIGZvciBodWdlIHBhZ2VzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZjgyNjFkNzBlMmNiZDI0MDJiMGFmYmY1YjYwMWE4NzdjMzZmYTVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MDc6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuIFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2Y291bnRlci1cdTAwM2V1c2FnZSk7XG4gfVxuIFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jYW5jZWwoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCAwNTQ0YjJlYzRjNTY1Li43ZDEyMDU4MTc0YWU2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtNTA5LDEyICs1MDksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxuLWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4raW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyAqc3dhcF9tYXJnaW4pO1xuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdCAgICAgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbyk7XG4rXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbywgc3dhcF9tYXJnaW4pO1xuIH1cbiBcbiBleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbkBAIC01MjUsMTAgKzUyNiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdCAgICAgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUzOCw2ICs1NDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhLi5mYjBlYzQzOWJhMmQ4IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01NTkyLDEyICs1NTkyLDEzIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4gLyoqXG4gICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG4gICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXG4rICogQHN3YXBfbWFyZ2luOiByZW1haW5pbmcgbWVtY2cgc3dhcCBtYXJnaW4gaWYgYWxsb2NhdGlvbiBvciBjaGFyZ2UgZmFpbHNcbiAgKlxuICAqIFRyeSB0byBjaGFyZ2UgQGZvbGlvJ3MgbWVtY2cgZm9yIHRoZSBzd2FwIHNwYWNlIGF0IGZvbGlvLVx1MDAzZXN3YXAuXG4gICpcbiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLlxuICAqL1xuLWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4raW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbkBAIC01NjE2LDYgKzU2MTcsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiBcdGlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4rXHRcdCpzd2FwX21hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCk7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybiAwO1xuQEAgLTU2MjksNiArNTYzMSw3IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcdTAwMjZjb3VudGVyKSkge1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xuK1x0XHQqc3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvdW50ZXIpO1xuIFx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuQEAgLTU2NzAsMTUgKzU2NzMsMzkgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXG4tXHRcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xuLVx0Zm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSlcbi1cdFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXG4tXHRcdFx0XHQgICAgICBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5tYXgpIC1cbi1cdFx0XHRcdCAgICAgIHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbitcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxuK1x0XHRucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuK1xuIFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4gfVxuIFxuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luIC0gZ2V0IGEgZm9saW8ncyBtZW1jZyBzd2FwIG1hcmdpblxuKyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcbisgKlxuKyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxuKyAqL1xuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRsb25nIHN3YXBfbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbitcbitcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKVxuK1x0XHRyZXR1cm4gc3dhcF9tYXJnaW47XG4rXG4rXHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcbitcdGlmICghb2JqY2cpXG4rXHRcdHJldHVybiBzd2FwX21hcmdpbjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4rXHRzd2FwX21hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzd2FwX21hcmdpbjtcbit9XG4rXG4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXG5pbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9jb3VudGVyLmNcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXG5AQCAtNDYsNiArNDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLFxuIFx0fVxuIH1cbiBcbisvKipcbisgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0c1xuKyAqIEBjb3VudGVyOiBjb3VudGVyXG4rICpcbisgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxuKyAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuXG4rICovXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4re1xuK1x0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuK1xuK1x0ZG8ge1xuK1x0XHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cdTAwM2VtYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4rXG4rXHRcdG1hcmdpbiA9IG1pbihtYXJnaW4sIG0pO1xuK1x0fSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLVx1MDAzZXBhcmVudCkpO1xuK1xuK1x0cmV0dXJuIG1hcmdpbjtcbit9XG4rXG4gLyoqXG4gICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyXG4gICogQGNvdW50ZXI6IGNvdW50ZXJcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNjY0MTgyM2JlZDE2Yi4uNmY5NTkxOTFlZjcwYiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0xNjA5LDYgKzE2MDksNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRwZ29mZl90IGluZGV4O1xuIFx0aW50IG5yX3BhZ2VzO1xuK1x0aW50IHJldDtcbiBcdGJvb2wgc3BsaXQgPSBmYWxzZTtcbiBcbiBcdGlmICgoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby1cdTAwM2Vub3N3YXApXG5AQCAtMTY4OSw3ICsxNjkwLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcdH1cbiBcbi1cdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xuK1x0aWYgKCFyZXQpIHtcbiBcdFx0Ym9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7XG4gXHRcdGludCBlcnJvcjtcbiBcbkBAIC0xNzQyLDcgKzE3NDQsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiBcdFx0Z290byByZWRpcnR5O1xuIFx0fVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuK1x0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiByZXQgPT0gLUUyQklHKVxuIFx0XHRnb3RvIHRyeV9zcGxpdDtcbiByZWRpcnR5OlxuIFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDcwYjkwZmE5YzJhMDQuLmFlNjJjOWY5YzBmMmEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTczNSwyMyArMTczNSwyOCBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gICogc3dhcCBjYWNoZS5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxuKyAqIFJldHVybjogJTAgb24gc3VjY2VzcywgJS1FMkJJRyBpZiBzcGxpdHRpbmcgdGhlIGZvbGlvIG1pZ2h0IGFsbG93IHN3YXBvdXQsXG4rICogJS1FTk9TUEMgaWYgbm8gZ2xvYmFsIHN3YXAgc3BhY2UgaXMgYXZhaWxhYmxlLCBvciAlLUVOT01FTSBpZiBzcGxpdHRpbmdcbisgKiB3b3VsZCBub3QgaGVscC5cbiAgKi9cbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcdHVuc2lnbmVkIGludCBzaXplID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRsb25nIHN3YXBfbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcbiBcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pLCBmb2xpbyk7XG4gXG4gXHRpZiAob3JkZXIpIHtcbiBcdFx0Lypcbi1cdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZCxcbi1cdFx0ICogdGhlIGNhbGxlciBzaG91bGQgc3BsaXQgdGhlIGZvbGlvIGFuZCB0cnkgYWdhaW4uXG4rXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93XG4rXHRcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cbiBcdFx0ICovXG4tXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSkge1xuK1x0XHRcdHN3YXBfbWFyZ2luID0gbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pO1xuK1x0XHRcdGdvdG8gZmFpbGVkO1xuK1x0XHR9XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZVxuQEAgLTE3NTksNyArMTc2NCw4IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2l6ZSBcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTtcbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE3NzUsMTMgKzE3ODEsMjMgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcbiBcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcbitcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbywgXHUwMDI2c3dhcF9tYXJnaW4pKSkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdHJldHVybiBvcmRlciBcdTAwMjZcdTAwMjYgc3dhcF9tYXJnaW4gXHUwMDNlIDAgPyAtRTJCSUcgOiAtRU5PTUVNO1xuK1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitmYWlsZWQ6XG4rXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0aWYgKHN3YXBfbWFyZ2luIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNmRmODFlNzczZmZiLi5lOTExMGFmYWQyOWZiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTI2Myw2ICsxMjYzLDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4rXHRcdFx0aW50IHJldDtcbitcbiBcdFx0XHRpZiAoIShzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuIFx0XHRcdFx0Z290byBrZWVwX2xvY2tlZDtcbiBcdFx0XHRpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpXG5AQCAtMTI4MSwxMSArMTI4MywxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdFx0XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4gXHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbitcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuK1x0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbiBcdFx0XHRcdC8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovXG4gXHRcdFx0XHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MTguMzI3MzkxNTU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEwOTg0ODk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIFN3YXAgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbGFyZ2UgZm9saW9zIChzcGVjaWZpY2FsbHkgVEhQX1NXQVApIGluIHRoZSBzd2FwIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGNoYW5nZSBpbiBgZm9saW9fYWxsb2Nfc3dhcGAuIEluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgYSBnZW5lcmljIHN1Y2Nlc3MvZmFpbHVyZSwgaXQncyBub3cgcmV0dXJuaW5nIG1vcmUgc3BlY2lmaWMgZXJyb3IgY29kZXM6IGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGFuZCBgLUVOT01FTWAuIFRoaXMgZ3JhbnVsYXJpdHkgaXMgaW50ZXJlc3RpbmcgYW5kIHdpbGwgZm9yY2Ugc29tZSBjaGFuZ2VzIHVwIHRoZSBjYWxsIHN0YWNrLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBhZmZlY3RzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IHdoZW4gZWl0aGVyIHN3YXAgc3BhY2UgaXMgdGlnaHQsIG9yIGEgbWVtY2cncyBzd2FwIGxpbWl0IGlzIGJlaW5nIGhpdC4gVGhlIGNvZGUgdXBkYXRlcyBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgdGhhdCBgLUUyQklHYCBlcnJvciwgd2hpY2ggdGVsbHMgdGhlbSB0byBzcGxpdCB0aGUgZm9saW8uIE1ha2VzIHNlbnNlLCBtb3JlIGRldGFpbGVkIGVycm9yIGNvZGVzIHByb3ZpZGUgbW9yZSByZWZpbmVkIGhhbmRsaW5nLlxuXG5JJ20gc2VlaW5nIG1lbnRpb25zIG9mIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLiBUaGVzZSBzZWVtIHRvIGJlIGludm9sdmVkIGluIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc2lkZSBvZiB0aGluZ3MuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZywgb3IgcmVmaW5pbmcsIHRoZSBtZWNoYW5pc20gZm9yIGNhbGN1bGF0aW5nIGFuZCByZXBvcnRpbmcgYSBcInN3YXAgbWFyZ2luXCIgd2l0aGluIG1lbWNnLiBUaGUgZ29hbCBoZXJlIGlzIHByb2JhYmx5IHRvIGhhdmUgYmV0dGVyIGNvbnRyb2wgb3ZlciB3aGVuIHRvIHNwbGl0IHRoZSBmb2xpb3Mgb3IgdG8gYWNjdXJhdGVseSByZXBvcnQgdGhlIHN3YXAgdXNhZ2UuXG5cbkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX1NXQVBgLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19USFBfU1dBUGAuXG5cbkFscmlnaHQsIEknbGwgZ28gdGhyb3VnaCB0aGUgc3ltYm9sczogYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgLCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gTG9va3MgbGlrZSBgZm9saW9fYWxsb2Nfc3dhcGAgaXMgZXhwb3J0ZWQsIGFuZCBpdCdzIGxvY2F0ZWQgaW4gYG1tL3N3YXBmaWxlLmNgLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGZvbGxvdyBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBjaGVjayBpZiBgc2htZW1fd3JpdGVvdXRgIGlzIGFsc28gZXhwb3J0ZWQuIFllcywgaXQncyBpbiBgbW0vc2htZW0uY2AuXG5UaGUgYHNocmlua19mb2xpb19saXN0YCBmdW5jdGlvbiBsb29rcyB0byBiZSBzdGF0aWMsIHNvIGl0IGNvdWxkIGJlIGxvY2FsIHRvIHRoZSBtb2R1bGUsIGJ1dCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBZZXMsIGl0IGlzIHN0YXRpYy5cbkFsc28sIEknbGwgbmVlZCB0byBzdHVkeSBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAsIHdoaWNoIGFyZSBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBtZW1jZydzIGxvZ2ljLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgdmVyeSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBib3RoIHN3YXAgYW5kIG1lbWNnIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzgxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MjYuNDM3MjQzMTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNTk0NzIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNobWVtX3dyaXRlb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTU1Mj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zaG1lbS5jLTE2MDItICovXFxubW0vc2htZW0uYzoxNjAzOmludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zaG1lbS5jLTE2MDQtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG4tLVxcbm1tL3N3YXAuaD00NzM9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzd2FwX29wcyBzd2FwX2JkZXZfb3BzO1xcbm1tL3N3YXAuaC00NzQtXFxubW0vc3dhcC5oOjQ3NTppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcC5oLTQ3Ni1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MjkuMjUzMTk1MTc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NzcxNDcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBGb2xpbyBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgc2htZW1fd3JpdGVvdXRgLCBgZm9saW9fYWxsb2Nfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGBwYWdlX2NvdW50ZXJfbWFyZ2luYC4gVGhleSdyZSBhbGwgZ2xvYmFsLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGV5J3JlIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgc3dhcCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC5cblxuRmlyc3QsIGxldCdzIHRha2UgYSBxdWljayBzYW5pdHkgY2hlY2sgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gdmVyaWZ5IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX1NXQVBgLCBhbmQgYENPTkZJR19USFBfU1dBUGAuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhleSdyZSBhbGwgcHJldHR5IHN0YW5kYXJkIGZvciBhbnkgbW9kZXJuIGtlcm5lbCBidWlsZC4gSG93ZXZlciwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc29tZXRoaW5nIEkgc2hvdWxkIGNvbnNpZGVyIGFzIHBvc3NpYmx5IHJlbGV2YW50IGZvciBwZXJmb3JtYW5jZSBpbiB0aGlzIGNvbnRleHQsIGVzcGVjaWFsbHkgd2l0aCBzd2FwLlxuXG5Ob3csIG15IGZvY3VzIGlzIGRlZmluaXRlbHkgYGZvbGlvX2FsbG9jX3N3YXBgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGRpdmUgaW50byBgbW0vc3dhcGZpbGUuY2AgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGNvbmZpZ3VyYXRpb25zIEkganVzdCBub3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZvbGlvcyBhcmUgYmVpbmcgYWxsb2NhdGVkIHdpdGhpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCBtZW1vcnkgY2dyb3VwcyBhbmQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDY0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA3OjMzLjgwMDkxMzA5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE5NDAyMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZm9saW9fYWxsb2Nfc3dhcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MjMyPWV4dGVybiBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm1tL3N3YXAuaC0yNTItICovXFxubW0vc3dhcC5oOjI1MzppbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9zd2FwLmgtMjU0LWludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE2OTU9c3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNzQxLSAqL1xcbm1tL3N3YXBmaWxlLmM6MTc0MjppbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBmaWxlLmMtMTc0My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA3OjM2LjUyMDMyMTg0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MjEzOTA2NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaCBpcyBDcml0aWNhbCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBzY3JlYW1pbmcgZm9yIGZ1enppbmcgYXR0ZW50aW9uLiBJdCdzIHBsYXlpbmcgYXJvdW5kIHdpdGggdGhlIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN3YXAgYW5kIG1lbW9yeSBjZ3JvdXAgaW50ZXJhY3Rpb25zLiBXZSdyZSB0YWxraW5nIGFib3V0IGhvdyBsYXJnZSBmb2xpb3MgKFRIUCDigJMgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgYmVoYXZlIHdoZW4gdGhleSdyZSBzcGxpdCBkdWUgdG8gc3dhcCBsaW1pdGF0aW9ucy4gVGhhdCdzIGEgc2Vuc2l0aXZlIGFyZWEhIEFueSBtaXNjYWxjdWxhdGlvbiBoZXJlIGFuZCB3ZSBjb3VsZCBiZSBmYWNpbmcgcHJldHR5IG5hc3R5IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIG9yLCB3b3JzZSwgbWVtb3J5IGNvcnJ1cHRpb24uXG5cblRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaW1tZWRpYXRlbHkgYXJlIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBhbmQgYHBhZ2VfY291bnRlcl9tYXJnaW5gLiBUaGVzZSBhcmUgdGhlIGtleSB0b3VjaHBvaW50cyB3aGVyZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGFuZCwgdGhlcmVmb3JlLCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBBIGZ1enplciBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRob3NlIGJ5IGNhcmVmdWxseSBjcmFmdGluZyBpbnB1dC5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgY29uZmlncyBhcmUgY29ycmVjdCB0byBlbmFibGUgbXkgdGVzdC4gSSdtIHNlZWluZyB0aGlzIHBhdGNoIHJlcXVpcmVzIGBNRU1DR2AsIGBTV0FQYCwgYFRIUF9TV0FQYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgdG8gYmUgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIGBUSFBfU1dBUGAgZG9lc24ndCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgbGltaXQgdGhlIHVzZWZ1bG5lc3Mgb2Ygb3VyIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MDAuNzM0MjMxNjQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzMyMTYwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRIUF9TV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OTY2PWVuZGNob2ljZVxcbm1tL0tjb25maWctOTY3LVxcbm1tL0tjb25maWc6OTY4OmNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTY5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MDIuMjY3NDUyMDE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMDA4NjEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIGFzIHRob3VnaCB0aGV5IGFyZSBteSBvd246XG5cbioqRGVsdmluZyBpbnRvIHRoZSBCb29sZWFuIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkZWZfYm9vbCB5YCBjb25zdHJ1Y3QuLi4gaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgY29uZGl0aW9uYWwgYXNwZWN0cy4gSXQncyAqZGVmaW5lZCogYXMgYHlgLCB3aGljaCBpcyBhIGJvb2xlYW4sIGJ1dCB0aGUgYWN0dWFsIHN0YXRlIG9mIGB5YCBpcyBnb2luZyB0byBiZSBzaWduaWZpY2FudGx5IGluZmx1ZW5jZWQgYnkgdGhlIGVudmlyb25tZW50LiBTcGVjaWZpY2FsbHksIHRoZSBwcmVzZW5jZSBvZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgU1dBUGAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGxpZXMuIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aG9zZSBmbGFncyBpbnRlcmFjdCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBmb3IgYHlgLiBUaGlzIGlzIG5vdCBhIHNpbXBsZSwgc3RhdGljIGJvb2xlYW4hIFRoaXMgYHlgIGlzIGR5bmFtaWMsIGRlcGVuZGVudCBvbiB0aGUgaW50ZXJwbGF5IG9mIHRob3NlIHR3byBmZWF0dXJlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGxvZ2ljOiB1bmRlciB3aGljaCBzcGVjaWZpYyBwZXJtdXRhdGlvbnMgb2YgdGhvc2Ugc2V0dGluZ3MgZG9lcyBgeWAgYmVjb21lIHRydWUgb3IgZmFsc2U/IFdoYXQgaGFwcGVucyBpZiBvbmUgaXMgZW5hYmxlZCBhbmQgdGhlIG90aGVyIGRpc2FibGVkPyBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBrZXkuIEkgbmVlZCB0byBtYXAgaXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MDYuMDg3NTQwNjU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg5ODQ1ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJjL0tjb25maWc9MzAzPWNob2ljZVxcbmFyY2gvYXJjL0tjb25maWctMzA0LVxcdHByb21wdCBcXFwiTU1VIFN1cGVyIFBhZ2UgU2l6ZVxcXCJcXG5hcmNoL2FyYy9LY29uZmlnOjMwNTpcXHRkZXBlbmRzIG9uIElTQV9BUkNWMiBcXHUwMDI2XFx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvYXJjL0tjb25maWctMzA2LVxcdGRlZmF1bHQgQVJDX0hVR0VQQUdFXzJNXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MjQxMj1jb25maWcgQVJNNjRfQ09OVFBURVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yNDEzLVxcdGJvb2wgXFxcIkNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB1c2VyIG1lbW9yeVxcXCIgaWYgRVhQRVJUXFxuYXJjaC9hcm02NC9LY29uZmlnOjI0MTQ6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yNDE1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZz04PWNvbmZpZyBERVZfREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy05LVxcdHRyaXN0YXRlIFxcXCJEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXFxcIlxcbmRyaXZlcnMvZGF4L0tjb25maWc6MTA6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmRyaXZlcnMvZGF4L0tjb25maWctMTEtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnPTg5PWNvbmZpZyBNU0hWX1ZUTFxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTk1LVxcdCMgc3BlY2lhbGx5IHdpdGggbGFyZ2UgbWVtb3J5IHJlcXVpcmVtZW50cy5cXG5kcml2ZXJzL2h2L0tjb25maWc6OTY6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmRyaXZlcnMvaHYvS2NvbmZpZy05Ny1cXHQjIE1UUlJzIGFyZSBjb250cm9sbGVkIGJ5IFZUTDAsIGFuZCBhcmUgbm90IHNwZWNpZmljIHRvIGluZGl2aWR1YWwgVlRMcy5cXG4tLVxcbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcXG4tLVxcbmZzL0tjb25maWctOTQtXFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmZzL0tjb25maWc6OTU6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmZzL0tjb25maWctOTYtXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0zMzI2PWNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI4OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI5LVxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG4tLVxcbm1tL0tjb25maWc9ODEzPWNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbm1tL0tjb25maWctODE0LVxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcbm1tL0tjb25maWc6ODE1OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgxNi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTgzMj1tZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzMtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5tbS9LY29uZmlnOjgzNDpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbm1tL0tjb25maWctODM1LVxcdHNlbGVjdCBDT01QQUNUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTEwMTQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMTUtXFx0ZGVmX2Jvb2wgblxcbm1tL0tjb25maWc6MTAxNjpcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy0xMDE3LVxcbm1tL0tjb25maWc9MTAxOD1jb25maWcgQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDE5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjEwMjA6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctMTAyMS1cXG5tbS9LY29uZmlnPTEwMjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxcbm1tL0tjb25maWctMTAyMy1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzoxMDI0OlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vS2NvbmZpZy0xMDI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODowOC4wNzczOTM5MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxOTUzNjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBUcmFuc3BhcmVudCBIdWdlcGFnZXMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIG15IHN0YXJ0aW5nIHBvaW50IGhlcmUgaXMgZGVmaW5pdGVseSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBnb3Zlcm5zIHRoaXMgd2hvbGUgYXJlYS4gTm93LCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGl0J3MgYWxsIGhvb2tlZCB1cCwgcGFydGljdWxhcmx5IHdpdGggcmVnYXJkIHRvIHN3YXBwaW5nLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9LY29uZmlnYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIGBUSFBfU1dBUGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBzZXR0aW5ncy4gSSdtIGFmdGVyIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlIGFuZCBmaWd1cmluZyBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGh1Z2VwYWdlcyBhbmQgc3dhcCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA4OjExLjM5NjkzMjMzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIyMjczMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRIUF9TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05NjY9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy05NjctXFxubW0vS2NvbmZpZzo5Njg6Y29uZmlnIFRIUF9TV0FQXFxubW0vS2NvbmZpZy05NjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODoxMS40MzkxNjQ3MDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5MjEwODQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQsIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGEgc3BlY2lmaWMgb3B0aW9uIEknbSBpbnRlcmVzdGVkIGluLiBMZXQncyBzdGFydCB3aXRoIGBtbS9LY29uZmlnYC4gTGluZSA5NjguLi4gdGhhdCdzIHByb2JhYmx5IGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gSXQncyBvZnRlbiB3aGVyZSB0aGV5IHN0YXJ0IGRlZmluaW5nIGEgbmV3IGNhdGVnb3J5IG9yIG1vZHVsZS4gVGltZSB0byBzZWUgd2hhdCB3ZSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MTguNzMxMjc1NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdFxcbiA5NTE6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG4gOTUyOlxcdFxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbiA5NTM6XFx0XFx0aGVscFxcbiA5NTQ6XFx0XFx0ICBFbmFibGUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBmb3IgdG1wZnMgbW91bnQgaWYgdGhlIGFsbG9jYXRpb25cXG4gOTU1OlxcdFxcdCAgd2lsbCBiZSBmdWxseSB3aXRoaW4gdGhlIGlfc2l6ZS4gVGhpcyBjb25maWd1cmF0aW9uIGFsc28gdGFrZXNcXG4gOTU2OlxcdFxcdCAgaW50byBhY2NvdW50IGFueSBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpIGhpbnRzIHRoYXQgbWF5IGJlXFxuIDk1NzpcXHRcXHQgIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbnMuXFxuIDk1ODpcXHRcXG4gOTU5OlxcdFxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbiA5NjA6XFx0XFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbiA5NjE6XFx0XFx0aGVscFxcbiA5NjI6XFx0XFx0ICBFbmFibGUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBmb3IgdGhlIHRtcGZzIG1vdW50IGV4Y2x1c2l2ZWx5IHdoZW5cXG4gOTYzOlxcdFxcdCAgYXBwbGljYXRpb25zIHN1cHBseSB0aGUgbWFkdmlzZShNQURWX0hVR0VQQUdFKSBoaW50LlxcbiA5NjQ6XFx0XFx0ICBUaGlzIGVuc3VyZXMgdGhhdCBodWdlcGFnZXMgYXJlIHVzZWQgb25seSBpbiByZXNwb25zZSB0byBleHBsaWNpdFxcbiA5NjU6XFx0XFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cXG4gOTY2OlxcdGVuZGNob2ljZVxcbiA5Njc6XFx0XFxuIDk2ODpcXHRjb25maWcgVEhQX1NXQVBcXG4gOTY5OlxcdFxcdGRlZl9ib29sIHlcXG4gOTcwOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcXHUwMDI2XFx1MDAyNiBTV0FQIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIDk3MTpcXHRcXHRoZWxwXFxuIDk3MjpcXHRcXHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxcbiA5NzM6XFx0XFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxcbiA5NzQ6XFx0XFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXFxuIDk3NTpcXHRcXG4gOTc2OlxcdFxcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXFxuIDk3NzpcXHRcXG4gOTc4OlxcdGNvbmZpZyBOT19QQUdFX01BUENPVU5UXFxuIDk3OTpcXHRcXHRib29sIFxcXCJObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MTguNzMxNDA3MTIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzAwOTU0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRIUF9TV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYFRIUF9TV0FQYCBpcyBiZWluZyBjb25maWd1cmVkIGhlcmUuIEl0IHNlZW1zIGxpa2UgaXRzIGFjdGl2YXRpb24gaXMgY29uZGl0aW9uYWwsIHdoaWNoIGlzIGdvb2QuIFRoZSBrZXkgZmFjdG9ycyBzZWVtIHRvIGJlIGBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVGAuICBFc3NlbnRpYWxseSwgdGhlIHN5c3RlbSAqd2FudHMqIFRIUCBzd2FwLCBzd2FwIGlzIGVuYWJsZWQsIGFuZCBpdCdzIGEgNjQtYml0IGFyY2hpdGVjdHVyZS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIGFsbCByZWFzb25hYmxlIHJlcXVpcmVtZW50cy4gIFRoZXJlZm9yZSwgaXQgd2lsbCBiZSBlbmFibGVkIGlmIGBBUkNIX1dBTlRTX1RIUF9TV0FQYCBpcyB0cnVlLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkgZGV0ZXJtaW5lcyB0aGUgdmFsdWUgb2YgYEFSQ0hfV0FOVFNfVEhQX1NXQVBgLiBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIHdoYXQgY29uZGl0aW9ucyAqdGhhdCogZGVwZW5kcyBvbi4gTGV0J3MgZ28gY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODoyMi41MDE1MDQ5MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTc3OTM5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MDc9Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcXG4tLVxcbm1tL0tjb25maWctODA5LVxcbm1tL0tjb25maWc6ODEwOmNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXFxubW0vS2NvbmZpZy04MTEtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODoyNC4wNTkzMDUxMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyOTAwNzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEFyY2hpdGVjdHVyYWwgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBnb3QgdGhpcyBlbGVtZW50LCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaXRzIGRlcGVuZGVuY3kgcHJvZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hpY2gqIGFyY2hpdGVjdHVyZXMgYXJlIGV2ZW4gYm90aGVyaW5nIHRvIHVzZSBpdC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGdlbmVyYWwgYXdhcmVuZXNzLCBJIG5lZWQgdG8ga25vdyB0aGUgZGlyZWN0IGNvbm5lY3Rpb25zLiBObyBwb2ludCBpbiBvcHRpbWl6aW5nIGl0LCBpbXByb3ZpbmcgaXRzIGludGVyZmFjZSwgb3IgZXZlbiB3b3JyeWluZyBhYm91dCBpdHMgbGlmZWN5Y2xlIGlmIGl0J3Mgbm90IGFjdHVhbGx5ICpzZWxlY3RlZCogYW5kIGluY29ycG9yYXRlZCBpbnRvIGFueSBtZWFuaW5nZnVsIGFyY2hpdGVjdHVyYWwgcGF0dGVybnMuIExldOKAmXMgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBhcmNoaXRlY3R1cmUgbGFuZHNjYXBlIGFuZCB0cmFjZSBpdHMgdXNhZ2UuIFRpbWUgdG8gZ2V0IHNvbWUgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODoyOC40ODgzMTUwNTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTQwNjAzMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctOTgtXFx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcXG5hcmNoL2FybTY0L0tjb25maWc6OTk6XFx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVAgaWYgQVJNNjRfNEtfUEFHRVNcXG5hcmNoL2FybTY0L0tjb25maWctMTAwLVxcdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODUtXFx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjg2OlxcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQIGlmIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODctXFx0c2VsZWN0IEJVSUxEVElNRV9UQUJMRV9TT1JUXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctOTEtXFx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcXG5hcmNoL3Jpc2N2L0tjb25maWc6OTI6XFx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVAgaWYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9yaXNjdi9LY29uZmlnLTkzLVxcdHNlbGVjdCBBUkNIX1dFQUtfUkVMRUFTRV9BQ1FVSVJFIGlmIEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0xNjMtXFx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxcbmFyY2gvczM5MC9LY29uZmlnOjE2NDpcXHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUFxcbmFyY2gvczM5MC9LY29uZmlnLTE2NS1cXHRzZWxlY3QgQlVJTERUSU1FX1RBQkxFX1NPUlRcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNTEtXFx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVCBpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnOjE1MjpcXHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUFxcdFxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMTUzLVxcdHNlbGVjdCBBUkNIX0hBU19QQVJBTk9JRF9MMURfRkxVU0hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MzAuMDAyMzgyMjc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyOTE5Nzg4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBDb251bmRydW1zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgYXJjaGl0ZWN0dXJlIChgeDg2XzY0YCwgYGFybTY0YCwgZXRjLikgaXMgZ29pbmcgdG8gaGFuZGxlIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBzZWxlY3Rpb24uIEkgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgQVJDSF9XQU5UU19USFBfU1dBUGAgaGVyZTsgdGhhdCdzIGltcGxpZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBjaG9pY2VzLiBJIGp1c3QgbmVlZCB0byBiZSBtaW5kZnVsIG9mIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBTV0FQYCwgYW5kIGBNRU1DR2AuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgaXQncyBub3QgYSBkaXJlY3QgZGVwZW5kZW5jeSBpbiBgbW0vS2NvbmZpZ2AsIGlzIGl0PyBgVEhQX1NXQVBgIGRvZXNu4oCZdCBkaXJlY3RseSBkZXBlbmQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCwgYEFSQ0hfV0FOVFNfVEhQX1NXQVBgIGlzICp1c3VhbGx5KiBzZWxlY3RlZCB3aGVuIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHNldCwgc28gaXQncyBwcmFjdGljYWxseSB0aGUgc2FtZSB0aGluZy5cblxuUmlnaHQsIEkgc2VlIG5vdy4gYFRIUF9TV0FQYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCBpZiBgQVJDSF9XQU5UU19USFBfU1dBUGAgaXMgc2V0LCBBTkQgd2UgaGF2ZSBgU1dBUGAgZW5hYmxlZCwgQU5EIHdlJ3JlIG9uIGEgNjQtYml0IGFyY2hpdGVjdHVyZS4gQnV0IGhvbGQgb24sIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBjbGVhcmx5IHJlbGllcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGV4aXN0aW5nIGluIHRoZSBmaXJzdCBwbGFjZSwgb3IgdGhlcmUncyBub3RoaW5nIHRvIHN3YXAsIHNvIGl0IHN0aWxsIGlzIGEgcmVsZXZhbnQgZmxhZy4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA4OjM3LjI5NDM2NDEwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MTIzNjA0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Mjk9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzMS1cXG5tbS9LY29uZmlnOjgzMjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzMtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUwPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTUtXFxubW0vS2NvbmZpZzo4NTY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYyLVxcbm1tL0tjb25maWc6ODYzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjQtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODcxLVxcbm1tL0tjb25maWc6ODcyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODczLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4OC1cXG5tbS9LY29uZmlnOjg4OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkwLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTgtXFxubW0vS2NvbmZpZzo4OTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDYtXFxubW0vS2NvbmZpZzo5MDc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwOC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE0LVxcbm1tL0tjb25maWc6OTE1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE2LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzMtXFxubW0vS2NvbmZpZzo5MzQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzNS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQyLVxcbm1tL0tjb25maWc6OTQzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ0LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUwLVxcbm1tL0tjb25maWc6OTUxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTItXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1OC1cXG5tbS9LY29uZmlnOjk1OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2MC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA4OjM4Ljc1NTYwNjQzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI5NTEzMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqRXhhbWluaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUuIE15IG5leHQgdGhvdWdodCBpcywgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB3aGF0IHRoZSBzdGF0dXMgb2YgYENPTkZJR19NRU1DR2AgaXMuIEkga25vdyB0aGVzZSBmZWF0dXJlcyBoYXZlIHNvbWUgbGV2ZWwgb2YgaW50ZXJhY3Rpb24sIGFuZCBJIG5lZWQgdG8gcmVjYWxsIGhvdyB0aGV5IGludGVycmVsYXRlIGZvciBvcHRpbWFsIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlLiBHZXR0aW5nIGBDT05GSUdfTUVNQ0dgIHdpbGwgZ2l2ZSBtZSB0aGUgZGlyZWN0aW9uIEkgbmVlZCB0byBzdGFydCBteSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzE1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6NDEuOTg1MTIyMjYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg4MDU2MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3ND1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDgzLVxcbmluaXQvS2NvbmZpZzoxMDg0OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg1LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTItXFxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5OS1cXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNi1cXG5pbml0L0tjb25maWc6MTEwNzpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODo0My40NzMxODI5MTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY0ODYwMzQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgSW50ZXJhY3Rpb25zIHdpdGggVEhQIGFuZCBTd2FwKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgTUVNQ0dgLCBgU1dBUGAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGludGVyYWN0LiBMZXQncyBkaWcgaW4gYSBiaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGBzaHJpbmtfZm9saW9fbGlzdGAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCdzIGNhbGxlZCBieSBgc2hyaW5rX2xydXZlY2Agd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHNocmlua19ub2RlYC4gVGhhdCBzdWdnZXN0cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gc3dhcCBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50OiBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGFsc28gYHBhZ2VfY291bnRlcl9tYXJnaW5gLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgdGhvc2Uga2V5IGZ1bmN0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaWYgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGlzIGV4cG9ydGVkIG9yIGludGVybmFsLiBHb29kLCBpdCdzIGdsb2JhbCwgc28gaXQncyByZWFkaWx5IGFjY2Vzc2libGUuIFNhbWUgZm9yIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGBwYWdlX2NvdW50ZXJfbWFyZ2luYC4gQWxsIGFyZSBnbG9iYWxseSBkZWZpbmVkLCB3aGljaCBtYWtlcyB0aGluZ3MgZWFzaWVyIHRvIHRyYWNrLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLiBJIHJlY2FsbCBgQ09ORklHX1RIUF9TV0FQYCBiZWluZyByZWxldmFudCBoZXJlLiBBaCwgcmlnaHQsIGl0J3MgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAgaWYgYEFSQ0hfV0FOVFNfVEhQX1NXQVAgXHUwMDI2XHUwMDI2IFNXQVAgXHUwMDI2XHUwMDI2IDY0QklUYC4gVGhhdCBtZWFucyBpdCdzIGVuYWJsZWQgYXV0b21hdGljYWxseSB1bmRlciB0aGUgcmlnaHQgY29uZGl0aW9ucy4gSSB3YXMgY29uc2lkZXJpbmcgZW5hYmxpbmcgaXQgZXhwbGljaXRseSwgYnV0IHRoYXQncyBub3QgbmVlZGVkLCBhbmQgYXMgaXQncyBub3QgYSBwcm9tcHQgY29uZmlnLCBJIGNhbm5vdCBkbyB0aGF0LiBJbnN0ZWFkLCBJIHNob3VsZCBlbnN1cmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFNXQVBgIGFyZSBlbmFibGVkLCBhcyB0aGV5IGNvbnRyb2wgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgVEhQX1NXQVBgIGhhcyBhIHByb21wdCBpbiB0aGUgY29uZmlndXJhdGlvbiwgYnV0IEknbSBmYWlybHkgY2VydGFpbiBpdCBkb2Vzbid0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODo1Mi4xMjE3ODgzNDFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NjUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NjU6XFx0XFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cXG4gOTY2OlxcdGVuZGNob2ljZVxcbiA5Njc6XFx0XFxuIDk2ODpcXHRjb25maWcgVEhQX1NXQVBcXG4gOTY5OlxcdFxcdGRlZl9ib29sIHlcXG4gOTcwOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcXHUwMDI2XFx1MDAyNiBTV0FQIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIDk3MTpcXHRcXHRoZWxwXFxuIDk3MjpcXHRcXHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxcbiA5NzM6XFx0XFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxcbiA5NzQ6XFx0XFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXFxuIDk3NTpcXHRcXG4gOTc2OlxcdFxcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXFxuIDk3NzpcXHRcXG4gOTc4OlxcdGNvbmZpZyBOT19QQUdFX01BUENPVU5UXFxuIDk3OTpcXHRcXHRib29sIFxcXCJObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6NTIuMTIxODg4NDgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMTQwMzk3OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTd2FwIEFsbG9jYXRpb24gTG9naWMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlcmUncyBubyBzcGVjaWZpYyB0cmlnZ2VyIGZvciB0aGlzLCBzbyBJJ20gYXNzdW1pbmcgd2UncmUgb3BlcmF0aW5nIGJhc2VkIG9uIGRlZmF1bHQgY29uZGl0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHdlJ3JlIGVuYWJsaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBTV0FQYCwgYW5kIGBNRU1DR2Ag4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgYW5kIHN3YXAgYmVoYXZpb3IuXG5cbk15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGltcGFjdHMgc3dhcCBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGZvciBsYXJnZSBmb2xpb3MuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIEZpcnN0LCBJJ20gY2hlY2tpbmcgdGhlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBpbiBgbW0vcGFnZV9jb3VudGVyLmNgIOKAkyBhIGNydWNpYWwgZ2xvYmFsIHZhcmlhYmxlIHRvIHNlZSBob3cgc3dhcCBjb25zdHJhaW50cyBhcmUgaGFuZGxlZCBmcm9tIHRoZSBncm91bmQgdXAuIFRoZW4sIEkgbmVlZCB0byBsb29rIGludG8gYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBhbHNvIGdsb2JhbCwgYmVjYXVzZSB0aGVzZSBsaWtlbHkgaW52b2x2ZSB0aGUgaW50ZXJmYWNlIGZvciBtZW1vcnkgY2dyb3VwcyBhbmQgaG93IHN3YXAgb3BlcmF0aW9ucyBhcmUgbGltaXRlZC4gTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBmb2xpb19hbGxvY19zd2FwYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyBtYW5hZ2VkIG5vdy4gRmluYWxseSwgYHNobWVtX3dyaXRlb3V0YCBpbiBgbW0vc2htZW0uY2AgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgbmV3IGVycm9yIGNvZGVzLlxuXG5UaGUgcGF0Y2ggYWltcyB0byBoYW5kbGUgbGFyZ2UgZm9saW9zIChUSFApIG1vcmUgZWZmZWN0aXZlbHksIHBhcnRpY3VsYXJseSB3aGVuIHN3YXAgc3BhY2UgaXMgbGltaXRlZC4gSXQncyBpbnRyb2R1Y2luZyBuZXcgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMsIGFuZCB0aGUgY2hhbmdlIHRvIGBmb2xpb19hbGxvY19zd2FwYCBsb29rcyBzaWduaWZpY2FudC4gSW5zdGVhZCBvZiBqdXN0IHRocm93aW5nIGEgZ2VuZXJpYyBlcnJvciwgaXQncyBub3cgcmV0dXJuaW5nIHNwZWNpZmljIGVycm9yIGNvZGVzOiBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGVzZSBtb3JlIGdyYW51bGFyIGVycm9ycyBhcmUgY3JpdGljYWwgYmVjYXVzZSB0aGV5J3JlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IGEgbGFyZ2UgZm9saW8gYW5kIHJldHJ5IHRoZSBzd2FwLiBUaGlzIGlzIGEgc29saWQgYXBwcm9hY2guIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSB3YW50IHRvIGludmVzdGlnYXRlIHRob3JvdWdobHkuIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG1lbW9yeSBwcmVzc3VyZSBhbmQgc3dhcCBsaW1pdHMgd2hlbiBodWdlIHBhZ2VzIGFyZSBpbnZvbHZlZCBwcmVzZW50cyBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE3OSwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowOToxMi4yNjIyOTExNzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk2OTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fYWxsb2Nfc3dhcFwiLFxuICAgIFwic2htZW1fd3JpdGVvdXRcIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGFsbG9jYXRpb24gbG9naWMgdG8gaGFuZGxlIGxhcmdlIGZvbGlvcyAoVEhQKSBtb3JlIGdyYWNlZnVsbHkgd2hlbiBzd2FwIHNwYWNlIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSBjb25zdHJhaW5lZC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgYW5kIGNoYW5nZXMgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2RlcyAoYC1FMkJJR2AsIGAtRU5PU1BDYCwgYC1FTk9NRU1gKSBpbnN0ZWFkIG9mIGdlbmVyaWMgZXJyb3JzLiBUaGVzZSBlcnJvciBjb2RlcyBhcmUgdGhlbiB1c2VkIGJ5IGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gZGVjaWRlIHdoZXRoZXIgdG8gc3BsaXQgdGhlIGxhcmdlIGZvbGlvIGFuZCByZXRyeSBzd2FwcGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtcyB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBwcmVzc3VyZSBhbmQgc3dhcCBsaW1pdHMgYXJlIGhhbmRsZWQgZm9yIGh1Z2UgcGFnZXMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fYWxsb2Nfc3dhcFwiLFxuICAgIFwic2htZW1fd3JpdGVvdXRcIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGFsbG9jYXRpb24gbG9naWMgdG8gaGFuZGxlIGxhcmdlIGZvbGlvcyAoVEhQKSBtb3JlIGdyYWNlZnVsbHkgd2hlbiBzd2FwIHNwYWNlIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSBjb25zdHJhaW5lZC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgYW5kIGNoYW5nZXMgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2RlcyAoYC1FMkJJR2AsIGAtRU5PU1BDYCwgYC1FTk9NRU1gKSBpbnN0ZWFkIG9mIGdlbmVyaWMgZXJyb3JzLiBUaGVzZSBlcnJvciBjb2RlcyBhcmUgdGhlbiB1c2VkIGJ5IGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gZGVjaWRlIHdoZXRoZXIgdG8gc3BsaXQgdGhlIGxhcmdlIGZvbGlvIGFuZCByZXRyeSBzd2FwcGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtcyB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBwcmVzc3VyZSBhbmQgc3dhcCBsaW1pdHMgYXJlIGhhbmRsZWQgZm9yIGh1Z2UgcGFnZXMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkq6zk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 07:50:48 +0000 UTC FinishedAt: 2026-07-31 08:09:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ce84eab58029ab47af39398fe770fb58c04253f4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ce84eab58029ab47af39398fe770fb58c04253f4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP", "TRANSPARENT_HUGEPAGE" ], "series_id": "f2a98e90-742d-4425-ab8b-9ab3679f2708" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_alloc_swap", "shmem_writeout", "__mem_cgroup_try_charge_swap", "mem_cgroup_get_folio_swap_margin", "page_counter_margin" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19hbGxvY19zd2FwJiMzNDssCiAgICAmIzM0O3NobWVtX3dyaXRlb3V0JiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4mIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX21hcmdpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYWxsb2NhdGlvbiBsb2dpYyB0byBoYW5kbGUgbGFyZ2UgZm9saW9zIChUSFApIG1vcmUgZ3JhY2VmdWxseSB3aGVuIHN3YXAgc3BhY2Ugb3IgbWVtY2cgc3dhcCBsaW1pdHMgYXJlIGNvbnN0cmFpbmVkLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucyBhbmQgY2hhbmdlcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzIChgLUUyQklHYCwgYC1FTk9TUENgLCBgLUVOT01FTWApIGluc3RlYWQgb2YgZ2VuZXJpYyBlcnJvcnMuIFRoZXNlIGVycm9yIGNvZGVzIGFyZSB0aGVuIHVzZWQgYnkgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBkZWNpZGUgd2hldGhlciB0byBzcGxpdCB0aGUgbGFyZ2UgZm9saW8gYW5kIHJldHJ5IHN3YXBwaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zIHRoYXQgYWZmZWN0cyBob3cgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwIGxpbWl0cyBhcmUgaGFuZGxlZCBmb3IgaHVnZSBwYWdlcywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNmODI2MWQ3MGUyY2JkMjQwMmIwYWZiZjViNjAxYTg3N2MzNmZhNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwODowNzoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02OCw2ICYjNDM7NjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDA1NDRiMmVjNGM1NjUuLjdkMTIwNTgxNzRhZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC01MDksMTIgJiM0Mzs1MDksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxuLWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO2ludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvbmcgKnN3YXBfbWFyZ2luKTtcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8sIHN3YXBfbWFyZ2luKTtcbiB9XG4gXG4gZXh0ZXJuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcyk7XG5AQCAtNTI1LDEwICYjNDM7NTI2LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXG4gXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xuIH1cbiBcbiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdFx0ICAgICBsb25nICpzd2FwX21hcmdpbilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTM4LDYgJiM0Mzs1NDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmZiMGVjNDM5YmEyZDggMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTU1OTIsMTIgJiM0Mzs1NTkyLDEzIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4gLyoqXG4gICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG4gICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXG4mIzQzOyAqIEBzd2FwX21hcmdpbjogcmVtYWluaW5nIG1lbWNnIHN3YXAgbWFyZ2luIGlmIGFsbG9jYXRpb24gb3IgY2hhcmdlIGZhaWxzXG4gICpcbiAgKiBUcnkgdG8gY2hhcmdlIEBmb2xpbyYjMzk7cyBtZW1jZyBmb3IgdGhlIHN3YXAgc3BhY2UgYXQgZm9saW8tXHUwMDNlc3dhcC5cbiAgKlxuICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG9uIGZhaWx1cmUuXG4gICovXG4taW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbkBAIC01NjE2LDYgJiM0Mzs1NjE3LDcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gXHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuJiM0MztcdFx0KnN3YXBfbWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKTtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTYyOSw2ICYjNDM7NTYzMSw3IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcdTAwMjZjb3VudGVyKSkge1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xuJiM0MztcdFx0KnN3YXBfbWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihjb3VudGVyKTtcbiBcdFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbkBAIC01NjcwLDE1ICYjNDM7NTY3MywzOSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4tXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuLVx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbi1cdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuLVx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuJiM0MztcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxuJiM0MztcdFx0bnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJiMzOTtzIG1lbWNnIHN3YXAgbWFyZ2luXG4mIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8mIzM5O3MgbWVtY2cgaGllcmFyY2h5LlxuJiM0MzsgKi9cbiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBzd2FwX21hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXG4mIzQzO1x0XHRyZXR1cm4gc3dhcF9tYXJnaW47XG4mIzQzO1xuJiM0MztcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xuJiM0MztcdGlmICghb2JqY2cpXG4mIzQzO1x0XHRyZXR1cm4gc3dhcF9tYXJnaW47XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuJiM0MztcdHN3YXBfbWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN3YXBfbWFyZ2luO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTQ2LDYgJiM0Mzs0NiwyNiBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcbiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcbiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbiYjNDM7ICovXG4mIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cdTAwM2VtYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4mIzQzO1xuJiM0MztcdFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XG4mIzQzO1x0fSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLVx1MDAzZXBhcmVudCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWFyZ2luO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxuICAqIEBjb3VudGVyOiBjb3VudGVyXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDY2NDE4MjNiZWQxNmIuLjZmOTU5MTkxZWY3MGIgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMTYwOSw2ICYjNDM7MTYwOSw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4gXHRpbnQgbnJfcGFnZXM7XG4mIzQzO1x0aW50IHJldDtcbiBcdGJvb2wgc3BsaXQgPSBmYWxzZTtcbiBcbiBcdGlmICgoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby1cdTAwM2Vub3N3YXApXG5AQCAtMTY4OSw3ICYjNDM7MTY5MCw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XG4mIzQzO1x0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiBcdFx0Ym9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7XG4gXHRcdGludCBlcnJvcjtcbiBcbkBAIC0xNzQyLDcgJiM0MzsxNzQ0LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4gXHRcdGdvdG8gcmVkaXJ0eTtcbiBcdH1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMSlcbiYjNDM7XHRpZiAobnJfcGFnZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHJldCA9PSAtRTJCSUcpXG4gXHRcdGdvdG8gdHJ5X3NwbGl0O1xuIHJlZGlydHk6XG4gXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNzBiOTBmYTljMmEwNC4uYWU2MmM5ZjljMGYyYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNzM1LDIzICYjNDM7MTczNSwyOCBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gICogc3dhcCBjYWNoZS5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxuJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LFxuJiM0MzsgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xuJiM0MzsgKiB3b3VsZCBub3QgaGVscC5cbiAgKi9cbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcdHVuc2lnbmVkIGludCBzaXplID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4mIzQzO1x0bG9uZyBzd2FwX21hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0aWYgKG9yZGVyKSB7XG4gXHRcdC8qXG4tXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsXG4tXHRcdCAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLlxuJiM0MztcdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcbiYjNDM7XHRcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cbiBcdFx0ICovXG4tXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpIHtcbiYjNDM7XHRcdFx0c3dhcF9tYXJnaW4gPSBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gZmFpbGVkO1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKlxuIFx0XHQgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemVcbkBAIC0xNzU5LDcgJiM0MzsxNzY0LDggQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICovXG4gXHRcdGlmIChzaXplIFx1MDAzZSBTV0FQRklMRV9DTFVTVEVSKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTtcbiYjNDM7XHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNzc1LDEzICYjNDM7MTc4MSwyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFxuIFx0LyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi9cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxuJiM0MztcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbywgXHUwMDI2c3dhcF9tYXJnaW4pKSkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0XHRyZXR1cm4gb3JkZXIgXHUwMDI2XHUwMDI2IHN3YXBfbWFyZ2luIFx1MDAzZSAwID8gLUUyQklHIDogLUVOT01FTTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZhaWxlZDpcbiYjNDM7XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XHRpZiAoc3dhcF9tYXJnaW4gXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI2ZGY4MWU3NzNmZmIuLmU5MTEwYWZhZDI5ZmIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xMjYzLDYgJiM0MzsxMjYzLDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4mIzQzO1x0XHRcdGludCByZXQ7XG4mIzQzO1xuIFx0XHRcdGlmICghKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9JTykpXG4gXHRcdFx0XHRnb3RvIGtlZXBfbG9ja2VkO1xuIFx0XHRcdGlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSlcbkBAIC0xMjgxLDExICYjNDM7MTI4MywxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbiYjNDM7XHRcdFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0O1xuJiM0MztcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuJiM0MztcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XG4gXHRcdFx0XHQvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqL1xuIFx0XHRcdFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX2FsbG9jX3N3YXAmIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiYjMzQ7LAogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIHRvIGhhbmRsZSBsYXJnZSBmb2xpb3MgKFRIUCkgbW9yZSBncmFjZWZ1bGx5IHdoZW4gc3dhcCBzcGFjZSBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgY29uc3RyYWluZWQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgc3dhcCBtYXJnaW5zIGFuZCBjaGFuZ2VzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGAtRU5PTUVNYCkgaW5zdGVhZCBvZiBnZW5lcmljIGVycm9ycy4gVGhlc2UgZXJyb3IgY29kZXMgYXJlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IHRoZSBsYXJnZSBmb2xpbyBhbmQgcmV0cnkgc3dhcHBpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIGFyZSBoYW5kbGVkIGZvciBodWdlIHBhZ2VzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2Y4MjYxZDcwZTJjYmQyNDAyYjBhZmJmNWI2MDFhODc3YzM2ZmE1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDA4OjA3OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCkBAIC02OCw2ICYjNDM7NjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKIAlyZXR1cm4gYXRvbWljX2xvbmdfcmVhZCgmYW1wO2NvdW50ZXItJmd0O3VzYWdlKTsKIH0KIAomIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTsKIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggMDU0NGIyZWM0YzU2NS4uN2QxMjA1ODE3NGFlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTUwOSwxMiAmIzQzOzUwOSwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19TV0FQKQotaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO2ludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvbmcgKnN3YXBfbWFyZ2luKTsKJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkJICAgICBsb25nICpzd2FwX21hcmdpbikKIHsKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbyk7CiYjNDM7CXJldHVybiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvLCBzd2FwX21hcmdpbik7CiB9CiAKIGV4dGVybiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpOwpAQCAtNTI1LDEwICYjNDM7NTI2LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wCiAJX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTsKIH0KIAomIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiBleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCQkgICAgIGxvbmcgKnN3YXBfbWFyZ2luKQogewogCXJldHVybiAwOwogfQpAQCAtNTM4LDYgJiM0Mzs1NDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDgzMTlhZDhjNWMyM2EuLmZiMGVjNDM5YmEyZDggMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTU1OTIsMTIgJiM0Mzs1NTkyLDEzIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpCiAvKioKICAqIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAgLSB0cnkgY2hhcmdpbmcgc3dhcCBzcGFjZSBmb3IgYSBmb2xpbwogICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwCiYjNDM7ICogQHN3YXBfbWFyZ2luOiByZW1haW5pbmcgbWVtY2cgc3dhcCBtYXJnaW4gaWYgYWxsb2NhdGlvbiBvciBjaGFyZ2UgZmFpbHMKICAqCiAgKiBUcnkgdG8gY2hhcmdlIEBmb2xpbyYjMzk7cyBtZW1jZyBmb3IgdGhlIHN3YXAgc3BhY2UgYXQgZm9saW8tJmd0O3N3YXAuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS4KICAqLwotaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb25nICpzd2FwX21hcmdpbikKIHsKIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTsKQEAgLTU2MTYsNiAmIzQzOzU2MTcsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJjdV9yZWFkX2xvY2soKTsKIAltZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpOwogCWlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkqc3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKCZhbXA7bWVtY2ctJmd0O3N3YXApOwogCQltZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gMDsKQEAgLTU2MjksNiAmIzQzOzU2MzEsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCSAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMsICZhbXA7Y291bnRlcikpIHsKIAkJbWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7CiAJCW1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTsKJiM0MzsJCSpzd2FwX21hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oY291bnRlcik7CiAJCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNTY3MCwxNSAmIzQzOzU2NzMsMzkgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpOwogCi0JaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpCi0JCXJldHVybiBucl9zd2FwX3BhZ2VzOwotCWZvciAoOyAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKTsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpCi0JCW5yX3N3YXBfcGFnZXMgPSBtaW5fdChsb25nLCBucl9zd2FwX3BhZ2VzLAotCQkJCSAgICAgIFJFQURfT05DRShtZW1jZy0mZ3Q7c3dhcC5tYXgpIC0KLQkJCQkgICAgICBwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO21lbWNnLSZndDtzd2FwKSk7CiYjNDM7CWlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpICZhbXA7JmFtcDsgIWRvX21lbXN3X2FjY291bnQoKSkKJiM0MzsJCW5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbigmYW1wO21lbWNnLSZndDtzd2FwKSk7CiYjNDM7CiAJcmV0dXJuIG5yX3N3YXBfcGFnZXM7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJiMzOTtzIG1lbWNnIHN3YXAgbWFyZ2luCiYjNDM7ICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1jZyBtYXJnaW4gaXMgcXVlcmllZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8mIzM5O3MgbWVtY2cgaGllcmFyY2h5LgomIzQzOyAqLwomIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWxvbmcgc3dhcF9tYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQlyZXR1cm4gc3dhcF9tYXJnaW47CiYjNDM7CiYjNDM7CW9iamNnID0gZm9saW9fb2JqY2coZm9saW8pOwomIzQzOwlpZiAoIW9iamNnKQomIzQzOwkJcmV0dXJuIHN3YXBfbWFyZ2luOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiYjNDM7CXN3YXBfbWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbigmYW1wO21lbWNnLSZndDtzd2FwKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzd2FwX21hcmdpbjsKJiM0Mzt9CiYjNDM7CiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuYwppbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NAotLS0gYS9tbS9wYWdlX2NvdW50ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuYwpAQCAtNDYsNiAmIzQzOzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYywKIAl9CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0cwomIzQzOyAqIEBjb3VudGVyOiBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZgomIzQzOyAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuCiYjNDM7ICovCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpCiYjNDM7ewomIzQzOwlsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLSZndDttYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7CiYjNDM7CiYjNDM7CQltYXJnaW4gPSBtaW4obWFyZ2luLCBtKTsKJiM0MzsJfSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLSZndDtwYXJlbnQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcmdpbjsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlcgogICogQGNvdW50ZXI6IGNvdW50ZXIKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDY2NDE4MjNiZWQxNmIuLjZmOTU5MTkxZWY3MGIgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMTYwOSw2ICYjNDM7MTYwOSw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtJmd0O2lfc2IpOwogCXBnb2ZmX3QgaW5kZXg7CiAJaW50IG5yX3BhZ2VzOwomIzQzOwlpbnQgcmV0OwogCWJvb2wgc3BsaXQgPSBmYWxzZTsKIAogCWlmICgoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby0mZ3Q7bm9zd2FwKQpAQCAtMTY4OSw3ICYjNDM7MTY5MCw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAJfQogCi0JaWYgKCFmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkgewomIzQzOwlyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTsKJiM0MzsJaWYgKCFyZXQpIHsKIAkJYm9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7CiAJCWludCBlcnJvcjsKIApAQCAtMTc0Miw3ICYjNDM7MTc0NCw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwogCQlnb3RvIHJlZGlydHk7CiAJfQotCWlmIChucl9wYWdlcyAmZ3Q7IDEpCiYjNDM7CWlmIChucl9wYWdlcyAmZ3Q7IDEgJmFtcDsmYW1wOyByZXQgPT0gLUUyQklHKQogCQlnb3RvIHRyeV9zcGxpdDsKIHJlZGlydHk6CiAJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA3MGI5MGZhOWMyYTA0Li5hZTYyYzlmOWMwZjJhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE3MzUsMjMgJiM0MzsxNzM1LDI4IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKICAqIHN3YXAgY2FjaGUuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suCi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LAomIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nCiYjNDM7ICogd291bGQgbm90IGhlbHAuCiAgKi8KIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwogCXVuc2lnbmVkIGludCBzaXplID0gMSAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsJbG9uZyBzd2FwX21hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7CiAKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pOwogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbyksIGZvbGlvKTsKIAogCWlmIChvcmRlcikgewogCQkvKgotCQkgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLAotCQkgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi4KJiM0MzsJCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93CiYjNDM7CQkgKiB3aGV0aGVyIHNwbGl0dGluZyBhbmQgcmV0cnlpbmcgY2FuIG1ha2UgcHJvZ3Jlc3MuCiAJCSAqLwotCQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSkKLQkJCXJldHVybiAtRUFHQUlOOwomIzQzOwkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpIHsKJiM0MzsJCQlzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTsKJiM0MzsJCQlnb3RvIGZhaWxlZDsKJiM0MzsJCX0KIAogCQkvKgogCQkgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemUKQEAgLTE3NTksNyAmIzQzOzE3NjQsOCBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQkgKi8KIAkJaWYgKHNpemUgJmd0OyBTV0FQRklMRV9DTFVTVEVSKSB7CiAJCQlWTV9XQVJOX09OX09OQ0UoMSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTsKJiM0MzsJCQlnb3RvIGZhaWxlZDsKIAkJfQogCX0KIApAQCAtMTc3NSwxMyAmIzQzOzE3ODEsMjMgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAl9CiAKIAkvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqLwotCWlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKQomIzQzOwlpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8sICZhbXA7c3dhcF9tYXJnaW4pKSkgewogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiYjNDM7CQlyZXR1cm4gb3JkZXIgJmFtcDsmYW1wOyBzd2FwX21hcmdpbiAmZ3Q7IDAgPyAtRTJCSUcgOiAtRU5PTUVNOwomIzQzOwl9CiAKIAlpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJZ290byBmYWlsZWQ7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztmYWlsZWQ6CiYjNDM7CWlmIChnZXRfbnJfc3dhcF9wYWdlcygpICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJaWYgKHN3YXBfbWFyZ2luICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDI2ZGY4MWU3NzNmZmIuLmU5MTEwYWZhZDI5ZmIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjYzLDYgJiM0MzsxMjYzLDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQkhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKIAkJCWlmICghKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSkKQEAgLTEyODEsMTEgJiM0MzsxMjgzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJCQkgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJfQotCQkJaWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CQkJcmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldCkgewogCQkJCWludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAogCQkJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwomIzQzOwkJCQlpZiAocmV0ICE9IC1FMkJJRykKJiM0MzsJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwogCQkJCS8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovCiAJCQkJaWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc4MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZvbGlvIFN3YXAgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbGFyZ2UgZm9saW9zIChzcGVjaWZpY2FsbHkgVEhQX1NXQVApIGluIHRoZSBzd2FwIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGNoYW5nZSBpbiBgZm9saW9fYWxsb2Nfc3dhcGAuIEluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgYSBnZW5lcmljIHN1Y2Nlc3MvZmFpbHVyZSwgaXQmIzM5O3Mgbm93IHJldHVybmluZyBtb3JlIHNwZWNpZmljIGVycm9yIGNvZGVzOiBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGlzIGdyYW51bGFyaXR5IGlzIGludGVyZXN0aW5nIGFuZCB3aWxsIGZvcmNlIHNvbWUgY2hhbmdlcyB1cCB0aGUgY2FsbCBzdGFjay4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGFmZmVjdHMgaG93IGxhcmdlIGZvbGlvcyBhcmUgc3BsaXQgd2hlbiBlaXRoZXIgc3dhcCBzcGFjZSBpcyB0aWdodCwgb3IgYSBtZW1jZyYjMzk7cyBzd2FwIGxpbWl0IGlzIGJlaW5nIGhpdC4gVGhlIGNvZGUgdXBkYXRlcyBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgdGhhdCBgLUUyQklHYCBlcnJvciwgd2hpY2ggdGVsbHMgdGhlbSB0byBzcGxpdCB0aGUgZm9saW8uIE1ha2VzIHNlbnNlLCBtb3JlIGRldGFpbGVkIGVycm9yIGNvZGVzIHByb3ZpZGUgbW9yZSByZWZpbmVkIGhhbmRsaW5nLgoKSSYjMzk7bSBzZWVpbmcgbWVudGlvbnMgb2YgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAuIFRoZXNlIHNlZW0gdG8gYmUgaW52b2x2ZWQgaW4gdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBzaWRlIG9mIHRoaW5ncy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nLCBvciByZWZpbmluZywgdGhlIG1lY2hhbmlzbSBmb3IgY2FsY3VsYXRpbmcgYW5kIHJlcG9ydGluZyBhICYjMzQ7c3dhcCBtYXJnaW4mIzM0OyB3aXRoaW4gbWVtY2cuIFRoZSBnb2FsIGhlcmUgaXMgcHJvYmFibHkgdG8gaGF2ZSBiZXR0ZXIgY29udHJvbCBvdmVyIHdoZW4gdG8gc3BsaXQgdGhlIGZvbGlvcyBvciB0byBhY2N1cmF0ZWx5IHJlcG9ydCB0aGUgc3dhcCB1c2FnZS4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX1NXQVBgLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19USFBfU1dBUGAuCgpBbHJpZ2h0LCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBzeW1ib2xzOiBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBMb29rcyBsaWtlIGBmb2xpb19hbGxvY19zd2FwYCBpcyBleHBvcnRlZCwgYW5kIGl0JiMzOTtzIGxvY2F0ZWQgaW4gYG1tL3N3YXBmaWxlLmNgLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGZvbGxvdyBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYHNobWVtX3dyaXRlb3V0YCBpcyBhbHNvIGV4cG9ydGVkLiBZZXMsIGl0JiMzOTtzIGluIGBtbS9zaG1lbS5jYC4KVGhlIGBzaHJpbmtfZm9saW9fbGlzdGAgZnVuY3Rpb24gbG9va3MgdG8gYmUgc3RhdGljLCBzbyBpdCBjb3VsZCBiZSBsb2NhbCB0byB0aGUgbW9kdWxlLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuIFllcywgaXQgaXMgc3RhdGljLgpBbHNvLCBJJiMzOTtsbCBuZWVkIHRvIHN0dWR5IGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgd2hpY2ggYXJlIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG1lbWNnJiMzOTtzIGxvZ2ljLgoKVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXQgdGhlIHZlcnkgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgdHJhY2UgdGhlIGVycm9yIGNvZGUgcHJvcGFnYXRpb24gYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGJvdGggc3dhcCBhbmQgbWVtY2cgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBzaG1lbV93cml0ZW91dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTE1NTI9aW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3NobWVtLmMtMTYwMi0gKi9cbm1tL3NobWVtLmM6MTYwMzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zaG1lbS5jLTE2MDQtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vc3dhcC5oPTQ3Mz1leHRlcm4gY29uc3Qgc3RydWN0IHN3YXBfb3BzIHN3YXBfYmRldl9vcHM7XG5tbS9zd2FwLmgtNDc0LVxubW0vc3dhcC5oOjQ3NTppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zd2FwLmgtNDc2LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwIEZvbGlvIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX3dyaXRlb3V0YCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAuIFRoZXkmIzM5O3JlIGFsbCBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgc3dhcCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCkZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gdmVyaWZ5IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX1NXQVBgLCBhbmQgYENPTkZJR19USFBfU1dBUGAuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhleSYjMzk7cmUgYWxsIHByZXR0eSBzdGFuZGFyZCBmb3IgYW55IG1vZGVybiBrZXJuZWwgYnVpbGQuIEhvd2V2ZXIsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHNvbWV0aGluZyBJIHNob3VsZCBjb25zaWRlciBhcyBwb3NzaWJseSByZWxldmFudCBmb3IgcGVyZm9ybWFuY2UgaW4gdGhpcyBjb250ZXh0LCBlc3BlY2lhbGx5IHdpdGggc3dhcC4KCk5vdywgbXkgZm9jdXMgaXMgZGVmaW5pdGVseSBgZm9saW9fYWxsb2Nfc3dhcGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIGRpdmUgaW50byBgbW0vc3dhcGZpbGUuY2AgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGNvbmZpZ3VyYXRpb25zIEkganVzdCBub3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZvbGlvcyBhcmUgYmVpbmcgYWxsb2NhdGVkIHdpdGhpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggbWVtb3J5IGNncm91cHMgYW5kIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGZvbGlvX2FsbG9jX3N3YXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTIzMj1leHRlcm4gaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCk7XG4tLVxubW0vc3dhcC5oLTI1Mi0gKi9cbm1tL3N3YXAuaDoyNTM6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmgtMjU0LWludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxubW0vc3dhcGZpbGUuYz0xNjk1PXN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NDEtICovXG5tbS9zd2FwZmlsZS5jOjE3NDI6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3N3YXBmaWxlLmMtMTc0My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2ggaXMgQ3JpdGljYWwqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCYjMzk7cyBzY3JlYW1pbmcgZm9yIGZ1enppbmcgYXR0ZW50aW9uLiBJdCYjMzk7cyBwbGF5aW5nIGFyb3VuZCB3aXRoIHRoZSBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBzd2FwIGFuZCBtZW1vcnkgY2dyb3VwIGludGVyYWN0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaG93IGxhcmdlIGZvbGlvcyAoVEhQIOKAkyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBiZWhhdmUgd2hlbiB0aGV5JiMzOTtyZSBzcGxpdCBkdWUgdG8gc3dhcCBsaW1pdGF0aW9ucy4gVGhhdCYjMzk7cyBhIHNlbnNpdGl2ZSBhcmVhISBBbnkgbWlzY2FsY3VsYXRpb24gaGVyZSBhbmQgd2UgY291bGQgYmUgZmFjaW5nIHByZXR0eSBuYXN0eSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBvciwgd29yc2UsIG1lbW9yeSBjb3JydXB0aW9uLgoKVGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBpbW1lZGlhdGVseSBhcmUgYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAuIFRoZXNlIGFyZSB0aGUga2V5IHRvdWNocG9pbnRzIHdoZXJlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgYW5kLCB0aGVyZWZvcmUsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEEgZnV6emVyIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhvc2UgYnkgY2FyZWZ1bGx5IGNyYWZ0aW5nIGlucHV0LgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgY29uZmlncyBhcmUgY29ycmVjdCB0byBlbmFibGUgbXkgdGVzdC4gSSYjMzk7bSBzZWVpbmcgdGhpcyBwYXRjaCByZXF1aXJlcyBgTUVNQ0dgLCBgU1dBUGAsIGBUSFBfU1dBUGAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIGVuYWJsZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYFRIUF9TV0FQYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgbGltaXQgdGhlIHVzZWZ1bG5lc3Mgb2Ygb3VyIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRIUF9TV0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OTY2PWVuZGNob2ljZVxubW0vS2NvbmZpZy05NjctXG5tbS9LY29uZmlnOjk2ODpjb25maWcgVEhQX1NXQVBcbm1tL0tjb25maWctOTY5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCBhcyB0aG91Z2ggdGhleSBhcmUgbXkgb3duOgoKKipEZWx2aW5nIGludG8gdGhlIEJvb2xlYW4gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGVmX2Jvb2wgeWAgY29uc3RydWN0Li4uIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvbmRpdGlvbmFsIGFzcGVjdHMuIEl0JiMzOTtzICpkZWZpbmVkKiBhcyBgeWAsIHdoaWNoIGlzIGEgYm9vbGVhbiwgYnV0IHRoZSBhY3R1YWwgc3RhdGUgb2YgYHlgIGlzIGdvaW5nIHRvIGJlIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlZCBieSB0aGUgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgdGhlIHByZXNlbmNlIG9mIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBTV0FQYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGxpZXMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byBob3cgdGhvc2UgZmxhZ3MgaW50ZXJhY3QgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgZm9yIGB5YC4gVGhpcyBpcyBub3QgYSBzaW1wbGUsIHN0YXRpYyBib29sZWFuISBUaGlzIGB5YCBpcyBkeW5hbWljLCBkZXBlbmRlbnQgb24gdGhlIGludGVycGxheSBvZiB0aG9zZSB0d28gZmVhdHVyZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBsb2dpYzogdW5kZXIgd2hpY2ggc3BlY2lmaWMgcGVybXV0YXRpb25zIG9mIHRob3NlIHNldHRpbmdzIGRvZXMgYHlgIGJlY29tZSB0cnVlIG9yIGZhbHNlPyBXaGF0IGhhcHBlbnMgaWYgb25lIGlzIGVuYWJsZWQgYW5kIHRoZSBvdGhlciBkaXNhYmxlZD8gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgaXMga2V5LiBJIG5lZWQgdG8gbWFwIGl0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcmMvS2NvbmZpZz0zMDM9Y2hvaWNlXG5hcmNoL2FyYy9LY29uZmlnLTMwNC1cdHByb21wdCBcJiMzNDtNTVUgU3VwZXIgUGFnZSBTaXplXCYjMzQ7XG5hcmNoL2FyYy9LY29uZmlnOjMwNTpcdGRlcGVuZHMgb24gSVNBX0FSQ1YyIFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcmMvS2NvbmZpZy0zMDYtXHRkZWZhdWx0IEFSQ19IVUdFUEFHRV8yTVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yNDEyPWNvbmZpZyBBUk02NF9DT05UUFRFXG5hcmNoL2FybTY0L0tjb25maWctMjQxMy1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHVzZXIgbWVtb3J5XCYjMzQ7IGlmIEVYUEVSVFxuYXJjaC9hcm02NC9LY29uZmlnOjI0MTQ6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2FybTY0L0tjb25maWctMjQxNS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWc9OD1jb25maWcgREVWX0RBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVwmIzM0O1xuZHJpdmVycy9kYXgvS2NvbmZpZzoxMDpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRyaXZlcnMvZGF4L0tjb25maWctMTEtXHRoZWxwXG4tLVxuZHJpdmVycy9odi9LY29uZmlnPTg5PWNvbmZpZyBNU0hWX1ZUTFxuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy05NS1cdCMgc3BlY2lhbGx5IHdpdGggbGFyZ2UgbWVtb3J5IHJlcXVpcmVtZW50cy5cbmRyaXZlcnMvaHYvS2NvbmZpZzo5NjpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRyaXZlcnMvaHYvS2NvbmZpZy05Ny1cdCMgTVRSUnMgYXJlIGNvbnRyb2xsZWQgYnkgVlRMMCwgYW5kIGFyZSBub3Qgc3BlY2lmaWMgdG8gaW5kaXZpZHVhbCBWVExzLlxuLS1cbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcbi0tXG5mcy9LY29uZmlnLTk0LVx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZnMvS2NvbmZpZzo5NTpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmZzL0tjb25maWctOTYtXG4tLVxubGliL0tjb25maWcuZGVidWc9MzMyNj1jb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbmxpYi9LY29uZmlnLmRlYnVnOjMzMjg6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI5LVx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuLS1cbm1tL0tjb25maWc9ODEzPWNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xubW0vS2NvbmZpZy04MTQtXHRib29sIFwmIzM0O0FsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXCYjMzQ7XG5tbS9LY29uZmlnOjgxNTpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODE2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9ODMyPW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODMzLVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG5tbS9LY29uZmlnOjgzNDpcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxubW0vS2NvbmZpZy04MzUtXHRzZWxlY3QgQ09NUEFDVElPTlxuLS1cbm1tL0tjb25maWc9MTAxND1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUFxubW0vS2NvbmZpZy0xMDE1LVx0ZGVmX2Jvb2wgblxubW0vS2NvbmZpZzoxMDE2Olx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy0xMDE3LVxubW0vS2NvbmZpZz0xMDE4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcbm1tL0tjb25maWctMTAxOS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTAyMDpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTEwMjEtXG5tbS9LY29uZmlnPTEwMjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxubW0vS2NvbmZpZy0xMDIzLVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxMDI0Olx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9LY29uZmlnLTEwMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIG15IHN0YXJ0aW5nIHBvaW50IGhlcmUgaXMgZGVmaW5pdGVseSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZ292ZXJucyB0aGlzIHdob2xlIGFyZWEuIE5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBpdCYjMzk7cyBhbGwgaG9va2VkIHVwLCBwYXJ0aWN1bGFybHkgd2l0aCByZWdhcmQgdG8gc3dhcHBpbmcsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9LY29uZmlnYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIGBUSFBfU1dBUGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBzZXR0aW5ncy4gSSYjMzk7bSBhZnRlciB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBodWdlcGFnZXMgYW5kIHN3YXAgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUSFBfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05NjY9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk2Ny1cbm1tL0tjb25maWc6OTY4OmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05NjktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL0tjb25maWdgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGV5JiMzOTtyZSBzdHJ1Y3R1cmVkLCBhbmQgcGVyaGFwcyBpZGVudGlmeSBhIHNwZWNpZmljIG9wdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4uIExldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9LY29uZmlnYC4gTGluZSA5NjguLi4gdGhhdCYjMzk7cyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZXkgc3RhcnQgZGVmaW5pbmcgYSBuZXcgY2F0ZWdvcnkgb3IgbW9kdWxlLiBUaW1lIHRvIHNlZSB3aGF0IHdlIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUwOlx0XG4gOTUxOlx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxuIDk1MjpcdFx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4gOTUzOlx0XHRoZWxwXG4gOTU0Olx0XHQgIEVuYWJsZSBodWdlcGFnZSBhbGxvY2F0aW9uIGZvciB0bXBmcyBtb3VudCBpZiB0aGUgYWxsb2NhdGlvblxuIDk1NTpcdFx0ICB3aWxsIGJlIGZ1bGx5IHdpdGhpbiB0aGUgaV9zaXplLiBUaGlzIGNvbmZpZ3VyYXRpb24gYWxzbyB0YWtlc1xuIDk1NjpcdFx0ICBpbnRvIGFjY291bnQgYW55IG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgaGludHMgdGhhdCBtYXkgYmVcbiA5NTc6XHRcdCAgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9ucy5cbiA5NTg6XHRcbiA5NTk6XHRcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxuIDk2MDpcdFx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuIDk2MTpcdFx0aGVscFxuIDk2MjpcdFx0ICBFbmFibGUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBmb3IgdGhlIHRtcGZzIG1vdW50IGV4Y2x1c2l2ZWx5IHdoZW5cbiA5NjM6XHRcdCAgYXBwbGljYXRpb25zIHN1cHBseSB0aGUgbWFkdmlzZShNQURWX0hVR0VQQUdFKSBoaW50LlxuIDk2NDpcdFx0ICBUaGlzIGVuc3VyZXMgdGhhdCBodWdlcGFnZXMgYXJlIHVzZWQgb25seSBpbiByZXNwb25zZSB0byBleHBsaWNpdFxuIDk2NTpcdFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cbiA5NjY6XHRlbmRjaG9pY2VcbiA5Njc6XHRcbiA5Njg6XHRjb25maWcgVEhQX1NXQVBcbiA5Njk6XHRcdGRlZl9ib29sIHlcbiA5NzA6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcdTAwMjZcdTAwMjYgU1dBUCBcdTAwMjZcdTAwMjYgNjRCSVRcbiA5NzE6XHRcdGhlbHBcbiA5NzI6XHRcdCAgU3dhcCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGluIG9uZSBwaWVjZSwgd2l0aG91dCBzcGxpdHRpbmcuXG4gOTczOlx0XHQgIFhYWDogRm9yIG5vdywgc3dhcCBjbHVzdGVyIGJhY2tpbmcgdHJhbnNwYXJlbnQgaHVnZSBwYWdlXG4gOTc0Olx0XHQgIHdpbGwgYmUgc3BsaXQgYWZ0ZXIgc3dhcG91dC5cbiA5NzU6XHRcbiA5NzY6XHRcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXG4gOTc3Olx0XG4gOTc4Olx0Y29uZmlnIE5PX1BBR0VfTUFQQ09VTlRcbiA5Nzk6XHRcdGJvb2wgXCYjMzQ7Tm8gcGVyLXBhZ2UgbWFwY291bnQgKEVYUEVSSU1FTlRBTClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVEhQX1NXQVAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBUSFBfU1dBUGAgaXMgYmVpbmcgY29uZmlndXJlZCBoZXJlLiBJdCBzZWVtcyBsaWtlIGl0cyBhY3RpdmF0aW9uIGlzIGNvbmRpdGlvbmFsLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IGZhY3RvcnMgc2VlbSB0byBiZSBgQVJDSF9XQU5UU19USFBfU1dBUCAmYW1wOyZhbXA7IFNXQVAgJmFtcDsmYW1wOyA2NEJJVGAuICBFc3NlbnRpYWxseSwgdGhlIHN5c3RlbSAqd2FudHMqIFRIUCBzd2FwLCBzd2FwIGlzIGVuYWJsZWQsIGFuZCBpdCYjMzk7cyBhIDY0LWJpdCBhcmNoaXRlY3R1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGFyZSBhbGwgcmVhc29uYWJsZSByZXF1aXJlbWVudHMuICBUaGVyZWZvcmUsIGl0IHdpbGwgYmUgZW5hYmxlZCBpZiBgQVJDSF9XQU5UU19USFBfU1dBUGAgaXMgdHJ1ZS4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5IGRldGVybWluZXMgdGhlIHZhbHVlIG9mIGBBUkNIX1dBTlRTX1RIUF9TV0FQYC4gSSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHNlZSB3aGF0IGNvbmRpdGlvbnMgKnRoYXQqIGRlcGVuZHMgb24uIExldCYjMzk7cyBnbyBjaGVjayB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MDc9Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcbi0tXG5tbS9LY29uZmlnLTgwOS1cbm1tL0tjb25maWc6ODEwOmNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXG5tbS9LY29uZmlnLTgxMS1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQXJjaGl0ZWN0dXJhbCBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgZWxlbWVudCwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGl0cyBkZXBlbmRlbmN5IHByb2ZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoaWNoKiBhcmNoaXRlY3R1cmVzIGFyZSBldmVuIGJvdGhlcmluZyB0byB1c2UgaXQuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgZ2VuZXJhbCBhd2FyZW5lc3MsIEkgbmVlZCB0byBrbm93IHRoZSBkaXJlY3QgY29ubmVjdGlvbnMuIE5vIHBvaW50IGluIG9wdGltaXppbmcgaXQsIGltcHJvdmluZyBpdHMgaW50ZXJmYWNlLCBvciBldmVuIHdvcnJ5aW5nIGFib3V0IGl0cyBsaWZlY3ljbGUgaWYgaXQmIzM5O3Mgbm90IGFjdHVhbGx5ICpzZWxlY3RlZCogYW5kIGluY29ycG9yYXRlZCBpbnRvIGFueSBtZWFuaW5nZnVsIGFyY2hpdGVjdHVyYWwgcGF0dGVybnMuIExldOKAmXMgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBhcmNoaXRlY3R1cmUgbGFuZHNjYXBlIGFuZCB0cmFjZSBpdHMgdXNhZ2UuIFRpbWUgdG8gZ2V0IHNvbWUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTk4LVx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcbmFyY2gvYXJtNjQvS2NvbmZpZzo5OTpcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQIGlmIEFSTTY0XzRLX1BBR0VTXG5hcmNoL2FybTY0L0tjb25maWctMTAwLVx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTg1LVx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODY6XHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUCBpZiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODctXHRzZWxlY3QgQlVJTERUSU1FX1RBQkxFX1NPUlRcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTkxLVx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcbmFyY2gvcmlzY3YvS2NvbmZpZzo5MjpcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQIGlmIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9yaXNjdi9LY29uZmlnLTkzLVx0c2VsZWN0IEFSQ0hfV0VBS19SRUxFQVNFX0FDUVVJUkUgaWYgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMTYzLVx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxuYXJjaC9zMzkwL0tjb25maWc6MTY0Olx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVBcbmFyY2gvczM5MC9LY29uZmlnLTE2NS1cdHNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVFxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTUxLVx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVCBpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWc6MTUyOlx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVBcdFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTE1My1cdHNlbGVjdCBBUkNIX0hBU19QQVJBTk9JRF9MMURfRkxVU0hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBDb251bmRydW1zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgKGB4ODZfNjRgLCBgYXJtNjRgLCBldGMuKSBpcyBnb2luZyB0byBoYW5kbGUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHNlbGVjdGlvbi4gSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgQVJDSF9XQU5UU19USFBfU1dBUGAgaGVyZTsgdGhhdCYjMzk7cyBpbXBsaWVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgY2hvaWNlcy4gSSBqdXN0IG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgU1dBUGAsIGFuZCBgTUVNQ0dgLgoKSGFuZyBvbiBhIHNlY29uZOKApiBpdCYjMzk7cyBub3QgYSBkaXJlY3QgZGVwZW5kZW5jeSBpbiBgbW0vS2NvbmZpZ2AsIGlzIGl0PyBgVEhQX1NXQVBgIGRvZXNu4oCZdCBkaXJlY3RseSBkZXBlbmQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCwgYEFSQ0hfV0FOVFNfVEhQX1NXQVBgIGlzICp1c3VhbGx5KiBzZWxlY3RlZCB3aGVuIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHNldCwgc28gaXQmIzM5O3MgcHJhY3RpY2FsbHkgdGhlIHNhbWUgdGhpbmcuCgpSaWdodCwgSSBzZWUgbm93LiBgVEhQX1NXQVBgIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgIGlmIGBBUkNIX1dBTlRTX1RIUF9TV0FQYCBpcyBzZXQsIEFORCB3ZSBoYXZlIGBTV0FQYCBlbmFibGVkLCBBTkQgd2UmIzM5O3JlIG9uIGEgNjQtYml0IGFyY2hpdGVjdHVyZS4gQnV0IGhvbGQgb24sIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBjbGVhcmx5IHJlbGllcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGV4aXN0aW5nIGluIHRoZSBmaXJzdCBwbGFjZSwgb3IgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBzd2FwLCBzbyBpdCBzdGlsbCBpcyBhIHJlbGV2YW50IGZsYWcuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04Mjk9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzEtXG5tbS9LY29uZmlnOjgzMjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzMy1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUwPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU1LVxubW0vS2NvbmZpZzo4NTY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg1Ny1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2Mi1cbm1tL0tjb25maWc6ODYzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY0LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3MS1cbm1tL0tjb25maWc6ODcyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3My1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODc5PWNob2ljZVxuLS1cbm1tL0tjb25maWctODg4LVxubW0vS2NvbmZpZzo4ODk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTAtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg5OC1cbm1tL0tjb25maWc6ODk5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwNi1cbm1tL0tjb25maWc6OTA3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTA4LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTQtXG5tbS9LY29uZmlnOjkxNTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTYtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05MjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzMtXG5tbS9LY29uZmlnOjkzNDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzNS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQyLVxubW0vS2NvbmZpZzo5NDM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUwLVxubW0vS2NvbmZpZzo5NTE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1OC1cbm1tL0tjb25maWc6OTU5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2MC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MTUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRXhhbWluaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUuIE15IG5leHQgdGhvdWdodCBpcywgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB3aGF0IHRoZSBzdGF0dXMgb2YgYENPTkZJR19NRU1DR2AgaXMuIEkga25vdyB0aGVzZSBmZWF0dXJlcyBoYXZlIHNvbWUgbGV2ZWwgb2YgaW50ZXJhY3Rpb24sIGFuZCBJIG5lZWQgdG8gcmVjYWxsIGhvdyB0aGV5IGludGVycmVsYXRlIGZvciBvcHRpbWFsIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlLiBHZXR0aW5nIGBDT05GSUdfTUVNQ0dgIHdpbGwgZ2l2ZSBtZSB0aGUgZGlyZWN0aW9uIEkgbmVlZCB0byBzdGFydCBteSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3ND1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4My1cbmluaXQvS2NvbmZpZzoxMDg0OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODUtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTItXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA2LVxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgSW50ZXJhY3Rpb25zIHdpdGggVEhQIGFuZCBTd2FwKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBNRU1DR2AsIGBTV0FQYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW50ZXJhY3QuIExldCYjMzk7cyBkaWcgaW4gYSBiaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGBzaHJpbmtfZm9saW9fbGlzdGAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBzaHJpbmtfbHJ1dmVjYCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgLiBUaGF0IHN1Z2dlc3RzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gc3dhcCBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50OiBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGFsc28gYHBhZ2VfY291bnRlcl9tYXJnaW5gLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdmlzaWJpbGl0eSBvZiB0aG9zZSBrZXkgZnVuY3Rpb25zLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBpZiBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAgaXMgZXhwb3J0ZWQgb3IgaW50ZXJuYWwuIEdvb2QsIGl0JiMzOTtzIGdsb2JhbCwgc28gaXQmIzM5O3MgcmVhZGlseSBhY2Nlc3NpYmxlLiBTYW1lIGZvciBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAuIEFsbCBhcmUgZ2xvYmFsbHkgZGVmaW5lZCwgd2hpY2ggbWFrZXMgdGhpbmdzIGVhc2llciB0byB0cmFjay4KCk5vdywgYSBxdWljayBjaGVjayByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMuIEkgcmVjYWxsIGBDT05GSUdfVEhQX1NXQVBgIGJlaW5nIHJlbGV2YW50IGhlcmUuIEFoLCByaWdodCwgaXQmIzM5O3MgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAgaWYgYEFSQ0hfV0FOVFNfVEhQX1NXQVAgJmFtcDsmYW1wOyBTV0FQICZhbXA7JmFtcDsgNjRCSVRgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGVuYWJsZWQgYXV0b21hdGljYWxseSB1bmRlciB0aGUgcmlnaHQgY29uZGl0aW9ucy4gSSB3YXMgY29uc2lkZXJpbmcgZW5hYmxpbmcgaXQgZXhwbGljaXRseSwgYnV0IHRoYXQmIzM5O3Mgbm90IG5lZWRlZCwgYW5kIGFzIGl0JiMzOTtzIG5vdCBhIHByb21wdCBjb25maWcsIEkgY2Fubm90IGRvIHRoYXQuIEluc3RlYWQsIEkgc2hvdWxkIGVuc3VyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgU1dBUGAgYXJlIGVuYWJsZWQsIGFzIHRoZXkgY29udHJvbCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgVEhQX1NXQVBgIGhhcyBhIHByb21wdCBpbiB0aGUgY29uZmlndXJhdGlvbiwgYnV0IEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gaXQgZG9lc24mIzM5O3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTY1Olx0XHQgIHJlcXVlc3RzIGZyb20gYXBwbGljYXRpb25zLlxuIDk2NjpcdGVuZGNob2ljZVxuIDk2NzpcdFxuIDk2ODpcdGNvbmZpZyBUSFBfU1dBUFxuIDk2OTpcdFx0ZGVmX2Jvb2wgeVxuIDk3MDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVFxuIDk3MTpcdFx0aGVscFxuIDk3MjpcdFx0ICBTd2FwIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgaW4gb25lIHBpZWNlLCB3aXRob3V0IHNwbGl0dGluZy5cbiA5NzM6XHRcdCAgWFhYOiBGb3Igbm93LCBzd2FwIGNsdXN0ZXIgYmFja2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VcbiA5NzQ6XHRcdCAgd2lsbCBiZSBzcGxpdCBhZnRlciBzd2Fwb3V0LlxuIDk3NTpcdFxuIDk3NjpcdFx0ICBGb3Igc2VsZWN0aW9uIGJ5IGFyY2hpdGVjdHVyZXMgd2l0aCByZWFzb25hYmxlIFRIUCBzaXplcy5cbiA5Nzc6XHRcbiA5Nzg6XHRjb25maWcgTk9fUEFHRV9NQVBDT1VOVFxuIDk3OTpcdFx0Ym9vbCBcJiMzNDtObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3OQoJCQkJCQkJb3V0cHV0OiAyNDMKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFN3YXAgQWxsb2NhdGlvbiBMb2dpYyBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhlcmUmIzM5O3Mgbm8gc3BlY2lmaWMgdHJpZ2dlciBmb3IgdGhpcywgc28gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgb3BlcmF0aW5nIGJhc2VkIG9uIGRlZmF1bHQgY29uZGl0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHdlJiMzOTtyZSBlbmFibGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgU1dBUGAsIGFuZCBgTUVNQ0dgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGFuZCBzd2FwIGJlaGF2aW9yLgoKTXkgZm9jdXMgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW1wYWN0cyBzd2FwIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgZm9yIGxhcmdlIGZvbGlvcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgdGhlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBpbiBgbW0vcGFnZV9jb3VudGVyLmNgIOKAkyBhIGNydWNpYWwgZ2xvYmFsIHZhcmlhYmxlIHRvIHNlZSBob3cgc3dhcCBjb25zdHJhaW50cyBhcmUgaGFuZGxlZCBmcm9tIHRoZSBncm91bmQgdXAuIFRoZW4sIEkgbmVlZCB0byBsb29rIGludG8gYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBhbHNvIGdsb2JhbCwgYmVjYXVzZSB0aGVzZSBsaWtlbHkgaW52b2x2ZSB0aGUgaW50ZXJmYWNlIGZvciBtZW1vcnkgY2dyb3VwcyBhbmQgaG93IHN3YXAgb3BlcmF0aW9ucyBhcmUgbGltaXRlZC4gTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBmb2xpb19hbGxvY19zd2FwYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyBtYW5hZ2VkIG5vdy4gRmluYWxseSwgYHNobWVtX3dyaXRlb3V0YCBpbiBgbW0vc2htZW0uY2AgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgbmV3IGVycm9yIGNvZGVzLgoKVGhlIHBhdGNoIGFpbXMgdG8gaGFuZGxlIGxhcmdlIGZvbGlvcyAoVEhQKSBtb3JlIGVmZmVjdGl2ZWx5LCBwYXJ0aWN1bGFybHkgd2hlbiBzd2FwIHNwYWNlIGlzIGxpbWl0ZWQuIEl0JiMzOTtzIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucywgYW5kIHRoZSBjaGFuZ2UgdG8gYGZvbGlvX2FsbG9jX3N3YXBgIGxvb2tzIHNpZ25pZmljYW50LiBJbnN0ZWFkIG9mIGp1c3QgdGhyb3dpbmcgYSBnZW5lcmljIGVycm9yLCBpdCYjMzk7cyBub3cgcmV0dXJuaW5nIHNwZWNpZmljIGVycm9yIGNvZGVzOiBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGVzZSBtb3JlIGdyYW51bGFyIGVycm9ycyBhcmUgY3JpdGljYWwgYmVjYXVzZSB0aGV5JiMzOTtyZSB0aGVuIHVzZWQgYnkgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBkZWNpZGUgd2hldGhlciB0byBzcGxpdCBhIGxhcmdlIGZvbGlvIGFuZCByZXRyeSB0aGUgc3dhcC4gVGhpcyBpcyBhIHNvbGlkIGFwcHJvYWNoLiBGcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aG9yb3VnaGx5LiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIHdoZW4gaHVnZSBwYWdlcyBhcmUgaW52b2x2ZWQgcHJlc2VudHMgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19hbGxvY19zd2FwJiMzNDssCiAgICAmIzM0O3NobWVtX3dyaXRlb3V0JiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4mIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX21hcmdpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYWxsb2NhdGlvbiBsb2dpYyB0byBoYW5kbGUgbGFyZ2UgZm9saW9zIChUSFApIG1vcmUgZ3JhY2VmdWxseSB3aGVuIHN3YXAgc3BhY2Ugb3IgbWVtY2cgc3dhcCBsaW1pdHMgYXJlIGNvbnN0cmFpbmVkLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucyBhbmQgY2hhbmdlcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzIChgLUUyQklHYCwgYC1FTk9TUENgLCBgLUVOT01FTWApIGluc3RlYWQgb2YgZ2VuZXJpYyBlcnJvcnMuIFRoZXNlIGVycm9yIGNvZGVzIGFyZSB0aGVuIHVzZWQgYnkgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBkZWNpZGUgd2hldGhlciB0byBzcGxpdCB0aGUgbGFyZ2UgZm9saW8gYW5kIHJldHJ5IHN3YXBwaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zIHRoYXQgYWZmZWN0cyBob3cgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwIGxpbWl0cyBhcmUgaGFuZGxlZCBmb3IgaHVnZSBwYWdlcywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX2FsbG9jX3N3YXAmIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiYjMzQ7LAogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIHRvIGhhbmRsZSBsYXJnZSBmb2xpb3MgKFRIUCkgbW9yZSBncmFjZWZ1bGx5IHdoZW4gc3dhcCBzcGFjZSBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgY29uc3RyYWluZWQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgc3dhcCBtYXJnaW5zIGFuZCBjaGFuZ2VzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGAtRU5PTUVNYCkgaW5zdGVhZCBvZiBnZW5lcmljIGVycm9ycy4gVGhlc2UgZXJyb3IgY29kZXMgYXJlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IHRoZSBsYXJnZSBmb2xpbyBhbmQgcmV0cnkgc3dhcHBpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIGFyZSBoYW5kbGVkIGZvciBodWdlIHBhZ2VzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MTcuODk0NDQxMjIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDQ1ODMxNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcInNobWVtX3dyaXRlb3V0XCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwXCIsXG4gICAgXCJtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpblwiLFxuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIHRvIGhhbmRsZSBsYXJnZSBmb2xpb3MgKFRIUCkgbW9yZSBncmFjZWZ1bGx5IHdoZW4gc3dhcCBzcGFjZSBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgY29uc3RyYWluZWQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgc3dhcCBtYXJnaW5zIGFuZCBjaGFuZ2VzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGAtRU5PTUVNYCkgaW5zdGVhZCBvZiBnZW5lcmljIGVycm9ycy4gVGhlc2UgZXJyb3IgY29kZXMgYXJlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IHRoZSBsYXJnZSBmb2xpbyBhbmQgcmV0cnkgc3dhcHBpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIGFyZSBoYW5kbGVkIGZvciBodWdlIHBhZ2VzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowNzoxNy44OTQ0NDc3MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjAyMTU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNmODI2MWQ3MGUyY2JkMjQwMmIwYWZiZjViNjAxYTg3N2MzNmZhNWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MDc6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG5pbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXFxuQEAgLTY4LDYgKzY4LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuIFxcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZjb3VudGVyLVxcdTAwM2V1c2FnZSk7XFxuIH1cXG4gXFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcXG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiB2b2lkIHBhZ2VfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbmluZGV4IDA1NDRiMmVjNGM1NjUuLjdkMTIwNTgxNzRhZTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC01MDksMTIgKzUwOSwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbiAjZW5kaWZcXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1dBUClcXG4taW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK2ludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvbmcgKnN3YXBfbWFyZ2luKTtcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBsb25nICpzd2FwX21hcmdpbilcXG4ge1xcbiBcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pO1xcbitcXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbywgc3dhcF9tYXJnaW4pO1xcbiB9XFxuIFxcbiBleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcXG5AQCAtNTI1LDEwICs1MjYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BcXG4gXFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcXG4gfVxcbiBcXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiBleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBsb25nICpzd2FwX21hcmdpbilcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC01MzgsNiArNTQxLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuIHtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggODMxOWFkOGM1YzIzYS4uZmIwZWM0MzliYTJkOCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNTU5MiwxMiArNTU5MiwxMyBAQCBpbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbiAvKipcXG4gICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXFxuICAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxcbisgKiBAc3dhcF9tYXJnaW46IHJlbWFpbmluZyBtZW1jZyBzd2FwIG1hcmdpbiBpZiBhbGxvY2F0aW9uIG9yIGNoYXJnZSBmYWlsc1xcbiAgKlxcbiAgKiBUcnkgdG8gY2hhcmdlIEBmb2xpbydzIG1lbWNnIGZvciB0aGUgc3dhcCBzcGFjZSBhdCBmb2xpby1cXHUwMDNlc3dhcC5cXG4gICpcXG4gICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cXG4gICovXFxuLWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK2ludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvbmcgKnN3YXBfbWFyZ2luKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG5AQCAtNTYxNiw2ICs1NjE3LDcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbitcXHRcXHQqc3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCk7XFxuIFxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC01NjI5LDYgKzU2MzEsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFxcdTAwMjZjb3VudGVyKSkge1xcbiBcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG4gXFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xcbitcXHRcXHQqc3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvdW50ZXIpO1xcbiBcXHRcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuQEAgLTU2NzAsMTUgKzU2NzMsMzkgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xcbiBcXG4tXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXFxuLVxcdFxcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xcbi1cXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxcbi1cXHRcXHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwLm1heCkgLVxcbi1cXHRcXHRcXHRcXHQgICAgICBwYWdlX2NvdW50ZXJfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXApKTtcXG4rXFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWRvX21lbXN3X2FjY291bnQoKSlcXG4rXFx0XFx0bnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCkpO1xcbitcXG4gXFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJ3MgbWVtY2cgc3dhcCBtYXJnaW5cXG4rICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1jZyBtYXJnaW4gaXMgcXVlcmllZFxcbisgKlxcbisgKiBSZXR1cm46IFJlbWFpbmluZyBjaGFyZ2VhYmxlIHBhZ2VzIGluIHRoZSBmb2xpbydzIG1lbWNnIGhpZXJhcmNoeS5cXG4rICovXFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRsb25nIHN3YXBfbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuK1xcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcXG4rXFx0XFx0cmV0dXJuIHN3YXBfbWFyZ2luO1xcbitcXG4rXFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XFxuK1xcdGlmICghb2JqY2cpXFxuK1xcdFxcdHJldHVybiBzd2FwX21hcmdpbjtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4rXFx0c3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHN3YXBfbWFyZ2luO1xcbit9XFxuK1xcbiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXFxuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXFxuQEAgLTQ2LDYgKzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcXG4gXFx0fVxcbiB9XFxuIFxcbisvKipcXG4rICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcXG4rICogQGNvdW50ZXI6IGNvdW50ZXJcXG4rICpcXG4rICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcXG4rICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cXG4rICovXFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxcbit7XFxuK1xcdGxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0bG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcXG4rXFxuK1xcdFxcdG1hcmdpbiA9IG1pbihtYXJnaW4sIG0pO1xcbitcXHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXFx1MDAzZXBhcmVudCkpO1xcbitcXG4rXFx0cmV0dXJuIG1hcmdpbjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxcbiAgKiBAY291bnRlcjogY291bnRlclxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDY2NDE4MjNiZWQxNmIuLjZmOTU5MTkxZWY3MGIgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMTYwOSw2ICsxNjA5LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRwZ29mZl90IGluZGV4O1xcbiBcXHRpbnQgbnJfcGFnZXM7XFxuK1xcdGludCByZXQ7XFxuIFxcdGJvb2wgc3BsaXQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLVxcdTAwM2Vub3N3YXApXFxuQEAgLTE2ODksNyArMTY5MCw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcXG4rXFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxuK1xcdGlmICghcmV0KSB7XFxuIFxcdFxcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuIFxcbkBAIC0xNzQyLDcgKzE3NDQsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG4gXFx0XFx0Z290byByZWRpcnR5O1xcbiBcXHR9XFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEpXFxuK1xcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgcmV0ID09IC1FMkJJRylcXG4gXFx0XFx0Z290byB0cnlfc3BsaXQ7XFxuIHJlZGlydHk6XFxuIFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDcwYjkwZmE5YzJhMDQuLmFlNjJjOWY5YzBmMmEgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTczNSwyMyArMTczNSwyOCBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuICAqIHN3YXAgY2FjaGUuXFxuICAqXFxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxcbi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS5cXG4rICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCAlLUUyQklHIGlmIHNwbGl0dGluZyB0aGUgZm9saW8gbWlnaHQgYWxsb3cgc3dhcG91dCxcXG4rICogJS1FTk9TUEMgaWYgbm8gZ2xvYmFsIHN3YXAgc3BhY2UgaXMgYXZhaWxhYmxlLCBvciAlLUVOT01FTSBpZiBzcGxpdHRpbmdcXG4rICogd291bGQgbm90IGhlbHAuXFxuICAqL1xcbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG4gXFx0dW5zaWduZWQgaW50IHNpemUgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbitcXHRsb25nIHN3YXBfbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcXG4gXFxuIFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdGlmIChvcmRlcikge1xcbiBcXHRcXHQvKlxcbi1cXHRcXHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLFxcbi1cXHRcXHQgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi5cXG4rXFx0XFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcXG4rXFx0XFx0ICogd2hldGhlciBzcGxpdHRpbmcgYW5kIHJldHJ5aW5nIGNhbiBtYWtlIHByb2dyZXNzLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpXFxuLVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSkge1xcbitcXHRcXHRcXHRzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZVxcbkBAIC0xNzU5LDcgKzE3NjQsOCBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHNpemUgXFx1MDAzZSBTV0FQRklMRV9DTFVTVEVSKSB7XFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSgxKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHN3YXBfbWFyZ2luID0gbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pO1xcbitcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xNzc1LDEzICsxNzgxLDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdH1cXG4gXFxuIFxcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXFxuLVxcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxcbitcXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8sIFxcdTAwMjZzd2FwX21hcmdpbikpKSB7XFxuIFxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuIG9yZGVyIFxcdTAwMjZcXHUwMDI2IHN3YXBfbWFyZ2luIFxcdTAwM2UgMCA/IC1FMkJJRyA6IC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdGlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZmFpbGVkO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitmYWlsZWQ6XFxuK1xcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRpZiAoc3dhcF9tYXJnaW4gXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDI2ZGY4MWU3NzNmZmIuLmU5MTEwYWZhZDI5ZmIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xMjYzLDYgKzEyNjMsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4rXFx0XFx0XFx0aW50IHJldDtcXG4rXFxuIFxcdFxcdFxcdGlmICghKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKSlcXG4gXFx0XFx0XFx0XFx0Z290byBrZWVwX2xvY2tlZDtcXG4gXFx0XFx0XFx0aWYgKGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pKVxcbkBAIC0xMjgxLDExICsxMjgzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICAgIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcXG4rXFx0XFx0XFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxuK1xcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0aW50IF9fbWF5YmVfdW51c2VkIG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgIT0gLUUyQklHKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcXG4gXFx0XFx0XFx0XFx0LyogRmFsbGJhY2sgdG8gc3dhcCBub3JtYWwgcGFnZXMgKi9cXG4gXFx0XFx0XFx0XFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MTguMzI3Mzg5ODk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE0MDEyODczNTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcInNobWVtX3dyaXRlb3V0XCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwXCIsXG4gICAgXCJtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpblwiLFxuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIHRvIGhhbmRsZSBsYXJnZSBmb2xpb3MgKFRIUCkgbW9yZSBncmFjZWZ1bGx5IHdoZW4gc3dhcCBzcGFjZSBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgY29uc3RyYWluZWQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgc3dhcCBtYXJnaW5zIGFuZCBjaGFuZ2VzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGAtRU5PTUVNYCkgaW5zdGVhZCBvZiBnZW5lcmljIGVycm9ycy4gVGhlc2UgZXJyb3IgY29kZXMgYXJlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IHRoZSBsYXJnZSBmb2xpbyBhbmQgcmV0cnkgc3dhcHBpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXAgbGltaXRzIGFyZSBoYW5kbGVkIGZvciBodWdlIHBhZ2VzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZjgyNjFkNzBlMmNiZDI0MDJiMGFmYmY1YjYwMWE4NzdjMzZmYTVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MDc6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuIFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2Y291bnRlci1cdTAwM2V1c2FnZSk7XG4gfVxuIFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jYW5jZWwoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCAwNTQ0YjJlYzRjNTY1Li43ZDEyMDU4MTc0YWU2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtNTA5LDEyICs1MDksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxuLWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4raW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyAqc3dhcF9tYXJnaW4pO1xuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdCAgICAgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbyk7XG4rXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbywgc3dhcF9tYXJnaW4pO1xuIH1cbiBcbiBleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbkBAIC01MjUsMTAgKzUyNiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdCAgICAgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUzOCw2ICs1NDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhLi5mYjBlYzQzOWJhMmQ4IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01NTkyLDEyICs1NTkyLDEzIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4gLyoqXG4gICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG4gICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXG4rICogQHN3YXBfbWFyZ2luOiByZW1haW5pbmcgbWVtY2cgc3dhcCBtYXJnaW4gaWYgYWxsb2NhdGlvbiBvciBjaGFyZ2UgZmFpbHNcbiAgKlxuICAqIFRyeSB0byBjaGFyZ2UgQGZvbGlvJ3MgbWVtY2cgZm9yIHRoZSBzd2FwIHNwYWNlIGF0IGZvbGlvLVx1MDAzZXN3YXAuXG4gICpcbiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLlxuICAqL1xuLWludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4raW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyAqc3dhcF9tYXJnaW4pXG4ge1xuIFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbkBAIC01NjE2LDYgKzU2MTcsNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiBcdGlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4rXHRcdCpzd2FwX21hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCk7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybiAwO1xuQEAgLTU2MjksNiArNTYzMSw3IEBAIGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcdTAwMjZjb3VudGVyKSkge1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX0ZBSUwpO1xuK1x0XHQqc3dhcF9tYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvdW50ZXIpO1xuIFx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuQEAgLTU2NzAsMTUgKzU2NzMsMzkgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXG4tXHRcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xuLVx0Zm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSlcbi1cdFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXG4tXHRcdFx0XHQgICAgICBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5tYXgpIC1cbi1cdFx0XHRcdCAgICAgIHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbitcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxuK1x0XHRucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuK1xuIFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4gfVxuIFxuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luIC0gZ2V0IGEgZm9saW8ncyBtZW1jZyBzd2FwIG1hcmdpblxuKyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcbisgKlxuKyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxuKyAqL1xuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRsb25nIHN3YXBfbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbitcbitcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKVxuK1x0XHRyZXR1cm4gc3dhcF9tYXJnaW47XG4rXG4rXHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcbitcdGlmICghb2JqY2cpXG4rXHRcdHJldHVybiBzd2FwX21hcmdpbjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4rXHRzd2FwX21hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzd2FwX21hcmdpbjtcbit9XG4rXG4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXG5pbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9jb3VudGVyLmNcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXG5AQCAtNDYsNiArNDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLFxuIFx0fVxuIH1cbiBcbisvKipcbisgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0c1xuKyAqIEBjb3VudGVyOiBjb3VudGVyXG4rICpcbisgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxuKyAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuXG4rICovXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4re1xuK1x0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuK1xuK1x0ZG8ge1xuK1x0XHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cdTAwM2VtYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4rXG4rXHRcdG1hcmdpbiA9IG1pbihtYXJnaW4sIG0pO1xuK1x0fSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLVx1MDAzZXBhcmVudCkpO1xuK1xuK1x0cmV0dXJuIG1hcmdpbjtcbit9XG4rXG4gLyoqXG4gICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyXG4gICogQGNvdW50ZXI6IGNvdW50ZXJcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNjY0MTgyM2JlZDE2Yi4uNmY5NTkxOTFlZjcwYiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0xNjA5LDYgKzE2MDksNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRwZ29mZl90IGluZGV4O1xuIFx0aW50IG5yX3BhZ2VzO1xuK1x0aW50IHJldDtcbiBcdGJvb2wgc3BsaXQgPSBmYWxzZTtcbiBcbiBcdGlmICgoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby1cdTAwM2Vub3N3YXApXG5AQCAtMTY4OSw3ICsxNjkwLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcdH1cbiBcbi1cdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xuK1x0aWYgKCFyZXQpIHtcbiBcdFx0Ym9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7XG4gXHRcdGludCBlcnJvcjtcbiBcbkBAIC0xNzQyLDcgKzE3NDQsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiBcdFx0Z290byByZWRpcnR5O1xuIFx0fVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuK1x0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiByZXQgPT0gLUUyQklHKVxuIFx0XHRnb3RvIHRyeV9zcGxpdDtcbiByZWRpcnR5OlxuIFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDcwYjkwZmE5YzJhMDQuLmFlNjJjOWY5YzBmMmEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTczNSwyMyArMTczNSwyOCBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gICogc3dhcCBjYWNoZS5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxuKyAqIFJldHVybjogJTAgb24gc3VjY2VzcywgJS1FMkJJRyBpZiBzcGxpdHRpbmcgdGhlIGZvbGlvIG1pZ2h0IGFsbG93IHN3YXBvdXQsXG4rICogJS1FTk9TUEMgaWYgbm8gZ2xvYmFsIHN3YXAgc3BhY2UgaXMgYXZhaWxhYmxlLCBvciAlLUVOT01FTSBpZiBzcGxpdHRpbmdcbisgKiB3b3VsZCBub3QgaGVscC5cbiAgKi9cbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcdHVuc2lnbmVkIGludCBzaXplID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRsb25nIHN3YXBfbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcbiBcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pLCBmb2xpbyk7XG4gXG4gXHRpZiAob3JkZXIpIHtcbiBcdFx0Lypcbi1cdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZCxcbi1cdFx0ICogdGhlIGNhbGxlciBzaG91bGQgc3BsaXQgdGhlIGZvbGlvIGFuZCB0cnkgYWdhaW4uXG4rXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93XG4rXHRcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cbiBcdFx0ICovXG4tXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSkge1xuK1x0XHRcdHN3YXBfbWFyZ2luID0gbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pO1xuK1x0XHRcdGdvdG8gZmFpbGVkO1xuK1x0XHR9XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZVxuQEAgLTE3NTksNyArMTc2NCw4IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2l6ZSBcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRzd2FwX21hcmdpbiA9IG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKTtcbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE3NzUsMTMgKzE3ODEsMjMgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcbiBcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcbitcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbywgXHUwMDI2c3dhcF9tYXJnaW4pKSkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdHJldHVybiBvcmRlciBcdTAwMjZcdTAwMjYgc3dhcF9tYXJnaW4gXHUwMDNlIDAgPyAtRTJCSUcgOiAtRU5PTUVNO1xuK1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitmYWlsZWQ6XG4rXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0aWYgKHN3YXBfbWFyZ2luIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNmRmODFlNzczZmZiLi5lOTExMGFmYWQyOWZiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTI2Myw2ICsxMjYzLDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4rXHRcdFx0aW50IHJldDtcbitcbiBcdFx0XHRpZiAoIShzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuIFx0XHRcdFx0Z290byBrZWVwX2xvY2tlZDtcbiBcdFx0XHRpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpXG5AQCAtMTI4MSwxMSArMTI4MywxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdFx0XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4gXHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbitcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuK1x0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbiBcdFx0XHRcdC8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovXG4gXHRcdFx0XHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MTguMzI3MzkxNTU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEwOTg0ODk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIFN3YXAgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbGFyZ2UgZm9saW9zIChzcGVjaWZpY2FsbHkgVEhQX1NXQVApIGluIHRoZSBzd2FwIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGNoYW5nZSBpbiBgZm9saW9fYWxsb2Nfc3dhcGAuIEluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgYSBnZW5lcmljIHN1Y2Nlc3MvZmFpbHVyZSwgaXQncyBub3cgcmV0dXJuaW5nIG1vcmUgc3BlY2lmaWMgZXJyb3IgY29kZXM6IGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGFuZCBgLUVOT01FTWAuIFRoaXMgZ3JhbnVsYXJpdHkgaXMgaW50ZXJlc3RpbmcgYW5kIHdpbGwgZm9yY2Ugc29tZSBjaGFuZ2VzIHVwIHRoZSBjYWxsIHN0YWNrLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBhZmZlY3RzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IHdoZW4gZWl0aGVyIHN3YXAgc3BhY2UgaXMgdGlnaHQsIG9yIGEgbWVtY2cncyBzd2FwIGxpbWl0IGlzIGJlaW5nIGhpdC4gVGhlIGNvZGUgdXBkYXRlcyBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgdGhhdCBgLUUyQklHYCBlcnJvciwgd2hpY2ggdGVsbHMgdGhlbSB0byBzcGxpdCB0aGUgZm9saW8uIE1ha2VzIHNlbnNlLCBtb3JlIGRldGFpbGVkIGVycm9yIGNvZGVzIHByb3ZpZGUgbW9yZSByZWZpbmVkIGhhbmRsaW5nLlxuXG5JJ20gc2VlaW5nIG1lbnRpb25zIG9mIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLiBUaGVzZSBzZWVtIHRvIGJlIGludm9sdmVkIGluIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc2lkZSBvZiB0aGluZ3MuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZywgb3IgcmVmaW5pbmcsIHRoZSBtZWNoYW5pc20gZm9yIGNhbGN1bGF0aW5nIGFuZCByZXBvcnRpbmcgYSBcInN3YXAgbWFyZ2luXCIgd2l0aGluIG1lbWNnLiBUaGUgZ29hbCBoZXJlIGlzIHByb2JhYmx5IHRvIGhhdmUgYmV0dGVyIGNvbnRyb2wgb3ZlciB3aGVuIHRvIHNwbGl0IHRoZSBmb2xpb3Mgb3IgdG8gYWNjdXJhdGVseSByZXBvcnQgdGhlIHN3YXAgdXNhZ2UuXG5cbkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX1NXQVBgLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19USFBfU1dBUGAuXG5cbkFscmlnaHQsIEknbGwgZ28gdGhyb3VnaCB0aGUgc3ltYm9sczogYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgLCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gTG9va3MgbGlrZSBgZm9saW9fYWxsb2Nfc3dhcGAgaXMgZXhwb3J0ZWQsIGFuZCBpdCdzIGxvY2F0ZWQgaW4gYG1tL3N3YXBmaWxlLmNgLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGZvbGxvdyBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBjaGVjayBpZiBgc2htZW1fd3JpdGVvdXRgIGlzIGFsc28gZXhwb3J0ZWQuIFllcywgaXQncyBpbiBgbW0vc2htZW0uY2AuXG5UaGUgYHNocmlua19mb2xpb19saXN0YCBmdW5jdGlvbiBsb29rcyB0byBiZSBzdGF0aWMsIHNvIGl0IGNvdWxkIGJlIGxvY2FsIHRvIHRoZSBtb2R1bGUsIGJ1dCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBZZXMsIGl0IGlzIHN0YXRpYy5cbkFsc28sIEknbGwgbmVlZCB0byBzdHVkeSBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAsIHdoaWNoIGFyZSBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBtZW1jZydzIGxvZ2ljLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgdmVyeSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBib3RoIHN3YXAgYW5kIG1lbWNnIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzgxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MjYuNDM3MjQzMTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNTk0NzIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNobWVtX3dyaXRlb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTU1Mj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zaG1lbS5jLTE2MDItICovXFxubW0vc2htZW0uYzoxNjAzOmludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zaG1lbS5jLTE2MDQtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG4tLVxcbm1tL3N3YXAuaD00NzM9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzd2FwX29wcyBzd2FwX2JkZXZfb3BzO1xcbm1tL3N3YXAuaC00NzQtXFxubW0vc3dhcC5oOjQ3NTppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcC5oLTQ3Ni1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDc6MjkuMjUzMTk1MTc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NzcxNDcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBGb2xpbyBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgc2htZW1fd3JpdGVvdXRgLCBgZm9saW9fYWxsb2Nfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGBwYWdlX2NvdW50ZXJfbWFyZ2luYC4gVGhleSdyZSBhbGwgZ2xvYmFsLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGV5J3JlIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgc3dhcCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC5cblxuRmlyc3QsIGxldCdzIHRha2UgYSBxdWljayBzYW5pdHkgY2hlY2sgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gdmVyaWZ5IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX1NXQVBgLCBhbmQgYENPTkZJR19USFBfU1dBUGAuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhleSdyZSBhbGwgcHJldHR5IHN0YW5kYXJkIGZvciBhbnkgbW9kZXJuIGtlcm5lbCBidWlsZC4gSG93ZXZlciwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc29tZXRoaW5nIEkgc2hvdWxkIGNvbnNpZGVyIGFzIHBvc3NpYmx5IHJlbGV2YW50IGZvciBwZXJmb3JtYW5jZSBpbiB0aGlzIGNvbnRleHQsIGVzcGVjaWFsbHkgd2l0aCBzd2FwLlxuXG5Ob3csIG15IGZvY3VzIGlzIGRlZmluaXRlbHkgYGZvbGlvX2FsbG9jX3N3YXBgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGRpdmUgaW50byBgbW0vc3dhcGZpbGUuY2AgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGNvbmZpZ3VyYXRpb25zIEkganVzdCBub3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZvbGlvcyBhcmUgYmVpbmcgYWxsb2NhdGVkIHdpdGhpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCBtZW1vcnkgY2dyb3VwcyBhbmQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDY0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA3OjMzLjgwMDkxMzA5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE5NDAyMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZm9saW9fYWxsb2Nfc3dhcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MjMyPWV4dGVybiBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm1tL3N3YXAuaC0yNTItICovXFxubW0vc3dhcC5oOjI1MzppbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9zd2FwLmgtMjU0LWludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE2OTU9c3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNzQxLSAqL1xcbm1tL3N3YXBmaWxlLmM6MTc0MjppbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBmaWxlLmMtMTc0My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA3OjM2LjUyMDMyMTg0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MjEzOTA2NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaCBpcyBDcml0aWNhbCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBzY3JlYW1pbmcgZm9yIGZ1enppbmcgYXR0ZW50aW9uLiBJdCdzIHBsYXlpbmcgYXJvdW5kIHdpdGggdGhlIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN3YXAgYW5kIG1lbW9yeSBjZ3JvdXAgaW50ZXJhY3Rpb25zLiBXZSdyZSB0YWxraW5nIGFib3V0IGhvdyBsYXJnZSBmb2xpb3MgKFRIUCDigJMgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgYmVoYXZlIHdoZW4gdGhleSdyZSBzcGxpdCBkdWUgdG8gc3dhcCBsaW1pdGF0aW9ucy4gVGhhdCdzIGEgc2Vuc2l0aXZlIGFyZWEhIEFueSBtaXNjYWxjdWxhdGlvbiBoZXJlIGFuZCB3ZSBjb3VsZCBiZSBmYWNpbmcgcHJldHR5IG5hc3R5IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIG9yLCB3b3JzZSwgbWVtb3J5IGNvcnJ1cHRpb24uXG5cblRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaW1tZWRpYXRlbHkgYXJlIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBhbmQgYHBhZ2VfY291bnRlcl9tYXJnaW5gLiBUaGVzZSBhcmUgdGhlIGtleSB0b3VjaHBvaW50cyB3aGVyZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGFuZCwgdGhlcmVmb3JlLCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBBIGZ1enplciBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRob3NlIGJ5IGNhcmVmdWxseSBjcmFmdGluZyBpbnB1dC5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgY29uZmlncyBhcmUgY29ycmVjdCB0byBlbmFibGUgbXkgdGVzdC4gSSdtIHNlZWluZyB0aGlzIHBhdGNoIHJlcXVpcmVzIGBNRU1DR2AsIGBTV0FQYCwgYFRIUF9TV0FQYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgdG8gYmUgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIGBUSFBfU1dBUGAgZG9lc24ndCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgbGltaXQgdGhlIHVzZWZ1bG5lc3Mgb2Ygb3VyIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MDAuNzM0MjMxNjQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzMyMTYwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRIUF9TV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OTY2PWVuZGNob2ljZVxcbm1tL0tjb25maWctOTY3LVxcbm1tL0tjb25maWc6OTY4OmNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTY5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MDIuMjY3NDUyMDE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMDA4NjEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIGFzIHRob3VnaCB0aGV5IGFyZSBteSBvd246XG5cbioqRGVsdmluZyBpbnRvIHRoZSBCb29sZWFuIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkZWZfYm9vbCB5YCBjb25zdHJ1Y3QuLi4gaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgY29uZGl0aW9uYWwgYXNwZWN0cy4gSXQncyAqZGVmaW5lZCogYXMgYHlgLCB3aGljaCBpcyBhIGJvb2xlYW4sIGJ1dCB0aGUgYWN0dWFsIHN0YXRlIG9mIGB5YCBpcyBnb2luZyB0byBiZSBzaWduaWZpY2FudGx5IGluZmx1ZW5jZWQgYnkgdGhlIGVudmlyb25tZW50LiBTcGVjaWZpY2FsbHksIHRoZSBwcmVzZW5jZSBvZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgU1dBUGAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGxpZXMuIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aG9zZSBmbGFncyBpbnRlcmFjdCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBmb3IgYHlgLiBUaGlzIGlzIG5vdCBhIHNpbXBsZSwgc3RhdGljIGJvb2xlYW4hIFRoaXMgYHlgIGlzIGR5bmFtaWMsIGRlcGVuZGVudCBvbiB0aGUgaW50ZXJwbGF5IG9mIHRob3NlIHR3byBmZWF0dXJlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGxvZ2ljOiB1bmRlciB3aGljaCBzcGVjaWZpYyBwZXJtdXRhdGlvbnMgb2YgdGhvc2Ugc2V0dGluZ3MgZG9lcyBgeWAgYmVjb21lIHRydWUgb3IgZmFsc2U/IFdoYXQgaGFwcGVucyBpZiBvbmUgaXMgZW5hYmxlZCBhbmQgdGhlIG90aGVyIGRpc2FibGVkPyBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBrZXkuIEkgbmVlZCB0byBtYXAgaXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MDYuMDg3NTQwNjU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg5ODQ1ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJjL0tjb25maWc9MzAzPWNob2ljZVxcbmFyY2gvYXJjL0tjb25maWctMzA0LVxcdHByb21wdCBcXFwiTU1VIFN1cGVyIFBhZ2UgU2l6ZVxcXCJcXG5hcmNoL2FyYy9LY29uZmlnOjMwNTpcXHRkZXBlbmRzIG9uIElTQV9BUkNWMiBcXHUwMDI2XFx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvYXJjL0tjb25maWctMzA2LVxcdGRlZmF1bHQgQVJDX0hVR0VQQUdFXzJNXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MjQxMj1jb25maWcgQVJNNjRfQ09OVFBURVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yNDEzLVxcdGJvb2wgXFxcIkNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB1c2VyIG1lbW9yeVxcXCIgaWYgRVhQRVJUXFxuYXJjaC9hcm02NC9LY29uZmlnOjI0MTQ6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yNDE1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9kYXgvS2NvbmZpZz04PWNvbmZpZyBERVZfREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy05LVxcdHRyaXN0YXRlIFxcXCJEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXFxcIlxcbmRyaXZlcnMvZGF4L0tjb25maWc6MTA6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmRyaXZlcnMvZGF4L0tjb25maWctMTEtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnPTg5PWNvbmZpZyBNU0hWX1ZUTFxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTk1LVxcdCMgc3BlY2lhbGx5IHdpdGggbGFyZ2UgbWVtb3J5IHJlcXVpcmVtZW50cy5cXG5kcml2ZXJzL2h2L0tjb25maWc6OTY6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmRyaXZlcnMvaHYvS2NvbmZpZy05Ny1cXHQjIE1UUlJzIGFyZSBjb250cm9sbGVkIGJ5IFZUTDAsIGFuZCBhcmUgbm90IHNwZWNpZmljIHRvIGluZGl2aWR1YWwgVlRMcy5cXG4tLVxcbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcXG4tLVxcbmZzL0tjb25maWctOTQtXFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmZzL0tjb25maWc6OTU6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmZzL0tjb25maWctOTYtXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0zMzI2PWNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI4OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI5LVxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG4tLVxcbm1tL0tjb25maWc9ODEzPWNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbm1tL0tjb25maWctODE0LVxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcbm1tL0tjb25maWc6ODE1OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgxNi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTgzMj1tZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzMtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5tbS9LY29uZmlnOjgzNDpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbm1tL0tjb25maWctODM1LVxcdHNlbGVjdCBDT01QQUNUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTEwMTQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMTUtXFx0ZGVmX2Jvb2wgblxcbm1tL0tjb25maWc6MTAxNjpcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy0xMDE3LVxcbm1tL0tjb25maWc9MTAxOD1jb25maWcgQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDE5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjEwMjA6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctMTAyMS1cXG5tbS9LY29uZmlnPTEwMjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxcbm1tL0tjb25maWctMTAyMy1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzoxMDI0OlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vS2NvbmZpZy0xMDI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODowOC4wNzczOTM5MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxOTUzNjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBUcmFuc3BhcmVudCBIdWdlcGFnZXMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIG15IHN0YXJ0aW5nIHBvaW50IGhlcmUgaXMgZGVmaW5pdGVseSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBnb3Zlcm5zIHRoaXMgd2hvbGUgYXJlYS4gTm93LCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGl0J3MgYWxsIGhvb2tlZCB1cCwgcGFydGljdWxhcmx5IHdpdGggcmVnYXJkIHRvIHN3YXBwaW5nLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9LY29uZmlnYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIGBUSFBfU1dBUGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBzZXR0aW5ncy4gSSdtIGFmdGVyIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlIGFuZCBmaWd1cmluZyBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGh1Z2VwYWdlcyBhbmQgc3dhcCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA4OjExLjM5NjkzMjMzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIyMjczMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRIUF9TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05NjY9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy05NjctXFxubW0vS2NvbmZpZzo5Njg6Y29uZmlnIFRIUF9TV0FQXFxubW0vS2NvbmZpZy05NjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODoxMS40MzkxNjQ3MDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5MjEwODQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQsIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGEgc3BlY2lmaWMgb3B0aW9uIEknbSBpbnRlcmVzdGVkIGluLiBMZXQncyBzdGFydCB3aXRoIGBtbS9LY29uZmlnYC4gTGluZSA5NjguLi4gdGhhdCdzIHByb2JhYmx5IGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gSXQncyBvZnRlbiB3aGVyZSB0aGV5IHN0YXJ0IGRlZmluaW5nIGEgbmV3IGNhdGVnb3J5IG9yIG1vZHVsZS4gVGltZSB0byBzZWUgd2hhdCB3ZSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MTguNzMxMjc1NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdFxcbiA5NTE6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG4gOTUyOlxcdFxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbiA5NTM6XFx0XFx0aGVscFxcbiA5NTQ6XFx0XFx0ICBFbmFibGUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBmb3IgdG1wZnMgbW91bnQgaWYgdGhlIGFsbG9jYXRpb25cXG4gOTU1OlxcdFxcdCAgd2lsbCBiZSBmdWxseSB3aXRoaW4gdGhlIGlfc2l6ZS4gVGhpcyBjb25maWd1cmF0aW9uIGFsc28gdGFrZXNcXG4gOTU2OlxcdFxcdCAgaW50byBhY2NvdW50IGFueSBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpIGhpbnRzIHRoYXQgbWF5IGJlXFxuIDk1NzpcXHRcXHQgIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbnMuXFxuIDk1ODpcXHRcXG4gOTU5OlxcdFxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbiA5NjA6XFx0XFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbiA5NjE6XFx0XFx0aGVscFxcbiA5NjI6XFx0XFx0ICBFbmFibGUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBmb3IgdGhlIHRtcGZzIG1vdW50IGV4Y2x1c2l2ZWx5IHdoZW5cXG4gOTYzOlxcdFxcdCAgYXBwbGljYXRpb25zIHN1cHBseSB0aGUgbWFkdmlzZShNQURWX0hVR0VQQUdFKSBoaW50LlxcbiA5NjQ6XFx0XFx0ICBUaGlzIGVuc3VyZXMgdGhhdCBodWdlcGFnZXMgYXJlIHVzZWQgb25seSBpbiByZXNwb25zZSB0byBleHBsaWNpdFxcbiA5NjU6XFx0XFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cXG4gOTY2OlxcdGVuZGNob2ljZVxcbiA5Njc6XFx0XFxuIDk2ODpcXHRjb25maWcgVEhQX1NXQVBcXG4gOTY5OlxcdFxcdGRlZl9ib29sIHlcXG4gOTcwOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcXHUwMDI2XFx1MDAyNiBTV0FQIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIDk3MTpcXHRcXHRoZWxwXFxuIDk3MjpcXHRcXHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxcbiA5NzM6XFx0XFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxcbiA5NzQ6XFx0XFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXFxuIDk3NTpcXHRcXG4gOTc2OlxcdFxcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXFxuIDk3NzpcXHRcXG4gOTc4OlxcdGNvbmZpZyBOT19QQUdFX01BUENPVU5UXFxuIDk3OTpcXHRcXHRib29sIFxcXCJObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MTguNzMxNDA3MTIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzAwOTU0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRIUF9TV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYFRIUF9TV0FQYCBpcyBiZWluZyBjb25maWd1cmVkIGhlcmUuIEl0IHNlZW1zIGxpa2UgaXRzIGFjdGl2YXRpb24gaXMgY29uZGl0aW9uYWwsIHdoaWNoIGlzIGdvb2QuIFRoZSBrZXkgZmFjdG9ycyBzZWVtIHRvIGJlIGBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVGAuICBFc3NlbnRpYWxseSwgdGhlIHN5c3RlbSAqd2FudHMqIFRIUCBzd2FwLCBzd2FwIGlzIGVuYWJsZWQsIGFuZCBpdCdzIGEgNjQtYml0IGFyY2hpdGVjdHVyZS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIGFsbCByZWFzb25hYmxlIHJlcXVpcmVtZW50cy4gIFRoZXJlZm9yZSwgaXQgd2lsbCBiZSBlbmFibGVkIGlmIGBBUkNIX1dBTlRTX1RIUF9TV0FQYCBpcyB0cnVlLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkgZGV0ZXJtaW5lcyB0aGUgdmFsdWUgb2YgYEFSQ0hfV0FOVFNfVEhQX1NXQVBgLiBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIHdoYXQgY29uZGl0aW9ucyAqdGhhdCogZGVwZW5kcyBvbi4gTGV0J3MgZ28gY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODoyMi41MDE1MDQ5MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTc3OTM5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MDc9Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcXG4tLVxcbm1tL0tjb25maWctODA5LVxcbm1tL0tjb25maWc6ODEwOmNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXFxubW0vS2NvbmZpZy04MTEtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODoyNC4wNTkzMDUxMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyOTAwNzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEFyY2hpdGVjdHVyYWwgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBnb3QgdGhpcyBlbGVtZW50LCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaXRzIGRlcGVuZGVuY3kgcHJvZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hpY2gqIGFyY2hpdGVjdHVyZXMgYXJlIGV2ZW4gYm90aGVyaW5nIHRvIHVzZSBpdC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGdlbmVyYWwgYXdhcmVuZXNzLCBJIG5lZWQgdG8ga25vdyB0aGUgZGlyZWN0IGNvbm5lY3Rpb25zLiBObyBwb2ludCBpbiBvcHRpbWl6aW5nIGl0LCBpbXByb3ZpbmcgaXRzIGludGVyZmFjZSwgb3IgZXZlbiB3b3JyeWluZyBhYm91dCBpdHMgbGlmZWN5Y2xlIGlmIGl0J3Mgbm90IGFjdHVhbGx5ICpzZWxlY3RlZCogYW5kIGluY29ycG9yYXRlZCBpbnRvIGFueSBtZWFuaW5nZnVsIGFyY2hpdGVjdHVyYWwgcGF0dGVybnMuIExldOKAmXMgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBhcmNoaXRlY3R1cmUgbGFuZHNjYXBlIGFuZCB0cmFjZSBpdHMgdXNhZ2UuIFRpbWUgdG8gZ2V0IHNvbWUgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODoyOC40ODgzMTUwNTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTQwNjAzMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctOTgtXFx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcXG5hcmNoL2FybTY0L0tjb25maWc6OTk6XFx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVAgaWYgQVJNNjRfNEtfUEFHRVNcXG5hcmNoL2FybTY0L0tjb25maWctMTAwLVxcdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODUtXFx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjg2OlxcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQIGlmIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODctXFx0c2VsZWN0IEJVSUxEVElNRV9UQUJMRV9TT1JUXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctOTEtXFx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcXG5hcmNoL3Jpc2N2L0tjb25maWc6OTI6XFx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVAgaWYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9yaXNjdi9LY29uZmlnLTkzLVxcdHNlbGVjdCBBUkNIX1dFQUtfUkVMRUFTRV9BQ1FVSVJFIGlmIEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0xNjMtXFx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxcbmFyY2gvczM5MC9LY29uZmlnOjE2NDpcXHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUFxcbmFyY2gvczM5MC9LY29uZmlnLTE2NS1cXHRzZWxlY3QgQlVJTERUSU1FX1RBQkxFX1NPUlRcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNTEtXFx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVCBpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnOjE1MjpcXHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUFxcdFxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMTUzLVxcdHNlbGVjdCBBUkNIX0hBU19QQVJBTk9JRF9MMURfRkxVU0hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6MzAuMDAyMzgyMjc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyOTE5Nzg4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBDb251bmRydW1zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgYXJjaGl0ZWN0dXJlIChgeDg2XzY0YCwgYGFybTY0YCwgZXRjLikgaXMgZ29pbmcgdG8gaGFuZGxlIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBzZWxlY3Rpb24uIEkgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgQVJDSF9XQU5UU19USFBfU1dBUGAgaGVyZTsgdGhhdCdzIGltcGxpZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBjaG9pY2VzLiBJIGp1c3QgbmVlZCB0byBiZSBtaW5kZnVsIG9mIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBTV0FQYCwgYW5kIGBNRU1DR2AuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgaXQncyBub3QgYSBkaXJlY3QgZGVwZW5kZW5jeSBpbiBgbW0vS2NvbmZpZ2AsIGlzIGl0PyBgVEhQX1NXQVBgIGRvZXNu4oCZdCBkaXJlY3RseSBkZXBlbmQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCwgYEFSQ0hfV0FOVFNfVEhQX1NXQVBgIGlzICp1c3VhbGx5KiBzZWxlY3RlZCB3aGVuIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHNldCwgc28gaXQncyBwcmFjdGljYWxseSB0aGUgc2FtZSB0aGluZy5cblxuUmlnaHQsIEkgc2VlIG5vdy4gYFRIUF9TV0FQYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCBpZiBgQVJDSF9XQU5UU19USFBfU1dBUGAgaXMgc2V0LCBBTkQgd2UgaGF2ZSBgU1dBUGAgZW5hYmxlZCwgQU5EIHdlJ3JlIG9uIGEgNjQtYml0IGFyY2hpdGVjdHVyZS4gQnV0IGhvbGQgb24sIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBjbGVhcmx5IHJlbGllcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGV4aXN0aW5nIGluIHRoZSBmaXJzdCBwbGFjZSwgb3IgdGhlcmUncyBub3RoaW5nIHRvIHN3YXAsIHNvIGl0IHN0aWxsIGlzIGEgcmVsZXZhbnQgZmxhZy4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA4OjM3LjI5NDM2NDEwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MTIzNjA0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Mjk9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzMS1cXG5tbS9LY29uZmlnOjgzMjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzMtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUwPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTUtXFxubW0vS2NvbmZpZzo4NTY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYyLVxcbm1tL0tjb25maWc6ODYzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjQtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODcxLVxcbm1tL0tjb25maWc6ODcyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODczLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4OC1cXG5tbS9LY29uZmlnOjg4OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkwLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTgtXFxubW0vS2NvbmZpZzo4OTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDYtXFxubW0vS2NvbmZpZzo5MDc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwOC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE0LVxcbm1tL0tjb25maWc6OTE1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE2LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzMtXFxubW0vS2NvbmZpZzo5MzQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzNS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQyLVxcbm1tL0tjb25maWc6OTQzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ0LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUwLVxcbm1tL0tjb25maWc6OTUxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTItXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1OC1cXG5tbS9LY29uZmlnOjk1OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2MC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjA4OjM4Ljc1NTYwNjQzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI5NTEzMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqRXhhbWluaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUuIE15IG5leHQgdGhvdWdodCBpcywgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB3aGF0IHRoZSBzdGF0dXMgb2YgYENPTkZJR19NRU1DR2AgaXMuIEkga25vdyB0aGVzZSBmZWF0dXJlcyBoYXZlIHNvbWUgbGV2ZWwgb2YgaW50ZXJhY3Rpb24sIGFuZCBJIG5lZWQgdG8gcmVjYWxsIGhvdyB0aGV5IGludGVycmVsYXRlIGZvciBvcHRpbWFsIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlLiBHZXR0aW5nIGBDT05GSUdfTUVNQ0dgIHdpbGwgZ2l2ZSBtZSB0aGUgZGlyZWN0aW9uIEkgbmVlZCB0byBzdGFydCBteSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzE1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6NDEuOTg1MTIyMjYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg4MDU2MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3ND1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDgzLVxcbmluaXQvS2NvbmZpZzoxMDg0OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg1LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTItXFxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5OS1cXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNi1cXG5pbml0L0tjb25maWc6MTEwNzpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODo0My40NzMxODI5MTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY0ODYwMzQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgSW50ZXJhY3Rpb25zIHdpdGggVEhQIGFuZCBTd2FwKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgTUVNQ0dgLCBgU1dBUGAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGludGVyYWN0LiBMZXQncyBkaWcgaW4gYSBiaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGBzaHJpbmtfZm9saW9fbGlzdGAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCdzIGNhbGxlZCBieSBgc2hyaW5rX2xydXZlY2Agd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHNocmlua19ub2RlYC4gVGhhdCBzdWdnZXN0cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gc3dhcCBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50OiBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGFsc28gYHBhZ2VfY291bnRlcl9tYXJnaW5gLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgdGhvc2Uga2V5IGZ1bmN0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaWYgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGlzIGV4cG9ydGVkIG9yIGludGVybmFsLiBHb29kLCBpdCdzIGdsb2JhbCwgc28gaXQncyByZWFkaWx5IGFjY2Vzc2libGUuIFNhbWUgZm9yIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYW5kIGBwYWdlX2NvdW50ZXJfbWFyZ2luYC4gQWxsIGFyZSBnbG9iYWxseSBkZWZpbmVkLCB3aGljaCBtYWtlcyB0aGluZ3MgZWFzaWVyIHRvIHRyYWNrLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLiBJIHJlY2FsbCBgQ09ORklHX1RIUF9TV0FQYCBiZWluZyByZWxldmFudCBoZXJlLiBBaCwgcmlnaHQsIGl0J3MgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAgaWYgYEFSQ0hfV0FOVFNfVEhQX1NXQVAgXHUwMDI2XHUwMDI2IFNXQVAgXHUwMDI2XHUwMDI2IDY0QklUYC4gVGhhdCBtZWFucyBpdCdzIGVuYWJsZWQgYXV0b21hdGljYWxseSB1bmRlciB0aGUgcmlnaHQgY29uZGl0aW9ucy4gSSB3YXMgY29uc2lkZXJpbmcgZW5hYmxpbmcgaXQgZXhwbGljaXRseSwgYnV0IHRoYXQncyBub3QgbmVlZGVkLCBhbmQgYXMgaXQncyBub3QgYSBwcm9tcHQgY29uZmlnLCBJIGNhbm5vdCBkbyB0aGF0LiBJbnN0ZWFkLCBJIHNob3VsZCBlbnN1cmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFNXQVBgIGFyZSBlbmFibGVkLCBhcyB0aGV5IGNvbnRyb2wgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgVEhQX1NXQVBgIGhhcyBhIHByb21wdCBpbiB0aGUgY29uZmlndXJhdGlvbiwgYnV0IEknbSBmYWlybHkgY2VydGFpbiBpdCBkb2Vzbid0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowODo1Mi4xMjE3ODgzNDFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NjUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NjU6XFx0XFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cXG4gOTY2OlxcdGVuZGNob2ljZVxcbiA5Njc6XFx0XFxuIDk2ODpcXHRjb25maWcgVEhQX1NXQVBcXG4gOTY5OlxcdFxcdGRlZl9ib29sIHlcXG4gOTcwOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcXHUwMDI2XFx1MDAyNiBTV0FQIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIDk3MTpcXHRcXHRoZWxwXFxuIDk3MjpcXHRcXHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxcbiA5NzM6XFx0XFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxcbiA5NzQ6XFx0XFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXFxuIDk3NTpcXHRcXG4gOTc2OlxcdFxcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXFxuIDk3NzpcXHRcXG4gOTc4OlxcdGNvbmZpZyBOT19QQUdFX01BUENPVU5UXFxuIDk3OTpcXHRcXHRib29sIFxcXCJObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MDg6NTIuMTIxODg4NDgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMTQwMzk3OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTd2FwIEFsbG9jYXRpb24gTG9naWMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlcmUncyBubyBzcGVjaWZpYyB0cmlnZ2VyIGZvciB0aGlzLCBzbyBJJ20gYXNzdW1pbmcgd2UncmUgb3BlcmF0aW5nIGJhc2VkIG9uIGRlZmF1bHQgY29uZGl0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHdlJ3JlIGVuYWJsaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBTV0FQYCwgYW5kIGBNRU1DR2Ag4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgYW5kIHN3YXAgYmVoYXZpb3IuXG5cbk15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGltcGFjdHMgc3dhcCBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGZvciBsYXJnZSBmb2xpb3MuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIEZpcnN0LCBJJ20gY2hlY2tpbmcgdGhlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBpbiBgbW0vcGFnZV9jb3VudGVyLmNgIOKAkyBhIGNydWNpYWwgZ2xvYmFsIHZhcmlhYmxlIHRvIHNlZSBob3cgc3dhcCBjb25zdHJhaW50cyBhcmUgaGFuZGxlZCBmcm9tIHRoZSBncm91bmQgdXAuIFRoZW4sIEkgbmVlZCB0byBsb29rIGludG8gYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBhbHNvIGdsb2JhbCwgYmVjYXVzZSB0aGVzZSBsaWtlbHkgaW52b2x2ZSB0aGUgaW50ZXJmYWNlIGZvciBtZW1vcnkgY2dyb3VwcyBhbmQgaG93IHN3YXAgb3BlcmF0aW9ucyBhcmUgbGltaXRlZC4gTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBmb2xpb19hbGxvY19zd2FwYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyBtYW5hZ2VkIG5vdy4gRmluYWxseSwgYHNobWVtX3dyaXRlb3V0YCBpbiBgbW0vc2htZW0uY2AgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgbmV3IGVycm9yIGNvZGVzLlxuXG5UaGUgcGF0Y2ggYWltcyB0byBoYW5kbGUgbGFyZ2UgZm9saW9zIChUSFApIG1vcmUgZWZmZWN0aXZlbHksIHBhcnRpY3VsYXJseSB3aGVuIHN3YXAgc3BhY2UgaXMgbGltaXRlZC4gSXQncyBpbnRyb2R1Y2luZyBuZXcgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMsIGFuZCB0aGUgY2hhbmdlIHRvIGBmb2xpb19hbGxvY19zd2FwYCBsb29rcyBzaWduaWZpY2FudC4gSW5zdGVhZCBvZiBqdXN0IHRocm93aW5nIGEgZ2VuZXJpYyBlcnJvciwgaXQncyBub3cgcmV0dXJuaW5nIHNwZWNpZmljIGVycm9yIGNvZGVzOiBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGVzZSBtb3JlIGdyYW51bGFyIGVycm9ycyBhcmUgY3JpdGljYWwgYmVjYXVzZSB0aGV5J3JlIHRoZW4gdXNlZCBieSBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHNwbGl0IGEgbGFyZ2UgZm9saW8gYW5kIHJldHJ5IHRoZSBzd2FwLiBUaGlzIGlzIGEgc29saWQgYXBwcm9hY2guIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSB3YW50IHRvIGludmVzdGlnYXRlIHRob3JvdWdobHkuIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG1lbW9yeSBwcmVzc3VyZSBhbmQgc3dhcCBsaW1pdHMgd2hlbiBodWdlIHBhZ2VzIGFyZSBpbnZvbHZlZCBwcmVzZW50cyBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE3OSwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODowOToxMi4yNjIyOTExNzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk2OTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fYWxsb2Nfc3dhcFwiLFxuICAgIFwic2htZW1fd3JpdGVvdXRcIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGFsbG9jYXRpb24gbG9naWMgdG8gaGFuZGxlIGxhcmdlIGZvbGlvcyAoVEhQKSBtb3JlIGdyYWNlZnVsbHkgd2hlbiBzd2FwIHNwYWNlIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSBjb25zdHJhaW5lZC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgYW5kIGNoYW5nZXMgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2RlcyAoYC1FMkJJR2AsIGAtRU5PU1BDYCwgYC1FTk9NRU1gKSBpbnN0ZWFkIG9mIGdlbmVyaWMgZXJyb3JzLiBUaGVzZSBlcnJvciBjb2RlcyBhcmUgdGhlbiB1c2VkIGJ5IGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gZGVjaWRlIHdoZXRoZXIgdG8gc3BsaXQgdGhlIGxhcmdlIGZvbGlvIGFuZCByZXRyeSBzd2FwcGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtcyB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBwcmVzc3VyZSBhbmQgc3dhcCBsaW1pdHMgYXJlIGhhbmRsZWQgZm9yIGh1Z2UgcGFnZXMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fYWxsb2Nfc3dhcFwiLFxuICAgIFwic2htZW1fd3JpdGVvdXRcIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGFsbG9jYXRpb24gbG9naWMgdG8gaGFuZGxlIGxhcmdlIGZvbGlvcyAoVEhQKSBtb3JlIGdyYWNlZnVsbHkgd2hlbiBzd2FwIHNwYWNlIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSBjb25zdHJhaW5lZC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgYW5kIGNoYW5nZXMgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2RlcyAoYC1FMkJJR2AsIGAtRU5PU1BDYCwgYC1FTk9NRU1gKSBpbnN0ZWFkIG9mIGdlbmVyaWMgZXJyb3JzLiBUaGVzZSBlcnJvciBjb2RlcyBhcmUgdGhlbiB1c2VkIGJ5IGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gZGVjaWRlIHdoZXRoZXIgdG8gc3BsaXQgdGhlIGxhcmdlIGZvbGlvIGFuZCByZXRyeSBzd2FwcGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtcyB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBwcmVzc3VyZSBhbmQgc3dhcCBsaW1pdHMgYXJlIGhhbmRsZWQgZm9yIGh1Z2UgcGFnZXMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkq6zk[1] Phase: Succeeded StartedAt: 2026-07-31 08:09:46 +0000 UTC FinishedAt: 2026-07-31 08:09:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 08:09:46 +0000 UTC FinishedAt: 2026-07-31 08:09:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2] Phase: Succeeded StartedAt: 2026-07-31 08:09:46 +0000 UTC FinishedAt: 2026-07-31 12:08:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 08:09:46 +0000 UTC FinishedAt: 2026-07-31 12:08:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 08:09:46 +0000 UTC FinishedAt: 2026-07-31 08:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 08:09:46 +0000 UTC FinishedAt: 2026-07-31 08:09:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkq6zk/series-workflowkq6zk-convert-artifact-1373344634/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 08:10:07 +0000 UTC FinishedAt: 2026-07-31 08:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 08:10:07 +0000 UTC FinishedAt: 2026-07-31 08:26:47 +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:*b75f506f-8bdf-4a3f-9d17-ed531b918027,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-workflowkq6zk/series-workflowkq6zk-convert-artifact-1373344634/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": "77656614-337e-4a5e-a901-9796e57df751", "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-workflowkq6zk/series-workflowkq6zk-build-action-3708118056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 08:10:07 +0000 UTC FinishedAt: 2026-07-31 08:26:36 +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:*b75f506f-8bdf-4a3f-9d17-ed531b918027,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-workflowkq6zk/series-workflowkq6zk-convert-artifact-1373344634/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": "77656614-337e-4a5e-a901-9796e57df751", "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-workflowkq6zk/series-workflowkq6zk-build-action-3708118056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 08:26:47 +0000 UTC FinishedAt: 2026-07-31 08:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 08:26:47 +0000 UTC FinishedAt: 2026-07-31 08:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 08:26:47 +0000 UTC FinishedAt: 2026-07-31 08:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 08:26:47 +0000 UTC FinishedAt: 2026-07-31 08:27:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkq6zk/series-workflowkq6zk-convert-artifact-1578091221/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 08:27:20 +0000 UTC FinishedAt: 2026-07-31 08:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 08:27:20 +0000 UTC FinishedAt: 2026-07-31 08:29:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77656614-337e-4a5e-a901-9796e57df751,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-workflowkq6zk/series-workflowkq6zk-build-action-3708118056/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-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 08:29:17 +0000 UTC FinishedAt: 2026-07-31 08:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 08:29:17 +0000 UTC FinishedAt: 2026-07-31 08:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 08:29:17 +0000 UTC FinishedAt: 2026-07-31 09:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 08:29:17 +0000 UTC FinishedAt: 2026-07-31 09:03:19 +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:*b75f506f-8bdf-4a3f-9d17-ed531b918027,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-workflowkq6zk/series-workflowkq6zk-convert-artifact-1578091221/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": "cf32f34d-0a04-40bf-bc63-c4bc1e3a4391", "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-workflowkq6zk/series-workflowkq6zk-build-action-3154175073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 08:29:17 +0000 UTC FinishedAt: 2026-07-31 09:03:07 +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:*b75f506f-8bdf-4a3f-9d17-ed531b918027,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-workflowkq6zk/series-workflowkq6zk-convert-artifact-1578091221/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": "cf32f34d-0a04-40bf-bc63-c4bc1e3a4391", "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-workflowkq6zk/series-workflowkq6zk-build-action-3154175073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 09:03:19 +0000 UTC FinishedAt: 2026-07-31 09:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 09:03:19 +0000 UTC FinishedAt: 2026-07-31 09:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 09:03:19 +0000 UTC FinishedAt: 2026-07-31 09:05:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 09:03:19 +0000 UTC FinishedAt: 2026-07-31 09:05:15 +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:*cf32f34d-0a04-40bf-bc63-c4bc1e3a4391,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-workflowkq6zk/series-workflowkq6zk-build-action-3154175073/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-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 09:05:25 +0000 UTC FinishedAt: 2026-07-31 12:08:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 09:05:25 +0000 UTC FinishedAt: 2026-07-31 12:08:53 +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"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"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:*77656614-337e-4a5e-a901-9796e57df751,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cf32f34d-0a04-40bf-bc63-c4bc1e3a4391,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-workflowkq6zk/series-workflowkq6zk-build-action-3708118056/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-workflowkq6zk/series-workflowkq6zk-build-action-3154175073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 09:05:25 +0000 UTC FinishedAt: 2026-07-31 09:05:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 09:05:25 +0000 UTC FinishedAt: 2026-07-31 09:05:51 +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"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"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-workflowkq6zk/series-workflowkq6zk-convert-artifact-3329619898/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 09:05:25 +0000 UTC FinishedAt: 2026-07-31 09:05:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 09:05:25 +0000 UTC FinishedAt: 2026-07-31 09:05:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 09:05:25 +0000 UTC FinishedAt: 2026-07-31 09:05:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 09:05:59 +0000 UTC FinishedAt: 2026-07-31 12:08:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkq6zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_alloc_swap","shmem_writeout","__mem_cgroup_try_charge_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ce84eab58029ab47af39398fe770fb58c04253f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP","TRANSPARENT_HUGEPAGE"],"series_id":"f2a98e90-742d-4425-ab8b-9ab3679f2708","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 09:05:59 +0000 UTC FinishedAt: 2026-07-31 12:08:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77656614-337e-4a5e-a901-9796e57df751,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cf32f34d-0a04-40bf-bc63-c4bc1e3a4391,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-workflowkq6zk/series-workflowkq6zk-build-action-3708118056/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-workflowkq6zk/series-workflowkq6zk-build-action-3154175073/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-workflowkq6zk/series-workflowkq6zk-convert-artifact-3329619898/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,}