Name: series-workflowqmwzc Phase: Succeeded StartedAt: 2026-08-02 00:27:28 +0000 UTC FinishedAt: 2026-08-02 04:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[0] Phase: Succeeded StartedAt: 2026-08-02 00:27:31 +0000 UTC FinishedAt: 2026-08-02 00:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 00:27:31 +0000 UTC FinishedAt: 2026-08-02 00:47:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM", "VFIO", "VFIO_GROUP", "VFIO_CONTAINER", "VFIO_IOMMU_TYPE1", "ACRN_GUEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM", "VFIO", "VFIO_GROUP", "VFIO_CONTAINER", "VFIO_IOMMU_TYPE1", "ACRN_GUEST" ], "series_id": "d290b1a7-9dce-4b34-842a-5b4e31e20440" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "follow_pfnmap_start", "generic_access_phys", "__kvm_faultin_pfn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fR1JPVVAmIzM0OywKICAgICYjMzQ7VkZJT19DT05UQUlORVImIzM0OywKICAgICYjMzQ7VkZJT19JT01NVV9UWVBFMSYjMzQ7LAogICAgJiMzNDtBQ1JOX0dVRVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9sbG93X3Bmbm1hcF9zdGFydCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDssCiAgICAmIzM0O19fa3ZtX2ZhdWx0aW5fcGZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGhhbmRsaW5nIHdyaXRlIGZhdWx0cyBpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgYW5kIGBwZm5tYXBfYXJnc19zZXR1cGAuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBLVk0sIFZGSU8sIEFDUk4sIGFuZCBnZW5lcmljIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHdyaXRlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNWZjMTQ2NzcxNTViMGFkYjM4YWUzNDkzNGY3NDRiNjU5N2IzZTJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwMDo0MzozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMgYi9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNcbmluZGV4IDUxZTdhMjhhZjg5OTQuLjUyNmY4MGI4ZmIzYjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9wY2kvcGNpX21taW8uY1xuQEAgLTE4MCw2ICYjNDM7MTgwLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fd3JpdGUsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcbiBcbiBcdGFyZ3MuYWRkcmVzcyA9IG1taW9fYWRkcjtcbiBcdGFyZ3Mudm1hID0gdm1hO1xuJiM0MztcdGFyZ3Mud3JpdGVfZmF1bHQgPSB0cnVlO1xuIFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xuQEAgLTMzMiw2ICYjNDM7MzMzLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fcmVhZCwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxuIFxuIFx0YXJncy52bWEgPSB2bWE7XG4gXHRhcmdzLmFkZHJlc3MgPSBtbWlvX2FkZHI7XG4mIzQzO1x0YXJncy53cml0ZV9mYXVsdCA9IGZhbHNlO1xuIFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBtbWlvX2FkZHIsIDAsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMgYi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jXG5pbmRleCBjODE1MWJhNTRkZTMzLi45ZWU5MjgyMGI0ZGUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xuQEAgLTU0MSw3ICYjNDM7NTQxLDExIEBAIHN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBmbixcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqYWRkcl9tYXNrLCBib29sIHdyaXRlX2ZhdWx0KVxuIHtcbi1cdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSB2YWRkciB9O1xuJiM0MztcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbiYjNDM7XHRcdC52bWEgPSB2bWEsXG4mIzQzO1x0XHQuYWRkcmVzcyA9IHZhZGRyLFxuJiM0MztcdFx0LndyaXRlX2ZhdWx0ID0gd3JpdGVfZmF1bHRcbiYjNDM7XHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5AQCAtNTYzLDE1ICYjNDM7NTY3LDEwIEBAIHN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdGlmICh3cml0ZV9mYXVsdCBcdTAwMjZcdTAwMjYgIWFyZ3Mud3JpdGFibGUpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdH0gZWxzZSB7XG4tXHRcdCpwZm4gPSBhcmdzLnBmbjtcbi1cdFx0KmFkZHJfbWFzayA9IGFyZ3MuYWRkcl9tYXNrO1xuLVx0fVxuLVxuJiM0MztcdCpwZm4gPSBhcmdzLnBmbjtcbiYjNDM7XHQqYWRkcl9tYXNrID0gYXJncy5hZGRyX21hc2s7XG4gXHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0L2Fjcm4vbW0uYyBiL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcbmluZGV4IDViY2E1MDBhODNlMDUuLmIwNTdlNzhlZjNmNDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jXG5AQCAtMTc3LDcgJiM0MzsxNzcsNiBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXG4gXHR2bWEgPSB2bWFfbG9va3VwKGN1cnJlbnQtXHUwMDNlbW0sIG1lbW1hcC1cdTAwM2V2bWFfYmFzZSk7XG4gXHRpZiAodm1hIFx1MDAyNlx1MDAyNiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKSAhPSAwKSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgY3VyX3Bmbjtcbi1cdFx0Ym9vbCB3cml0YWJsZTtcbiBcbiBcdFx0aWYgKChtZW1tYXAtXHUwMDNldm1hX2Jhc2UgJiM0MzsgbWVtbWFwLVx1MDAzZWxlbikgXHUwMDNlIHZtYS1cdTAwM2V2bV9lbmQpIHtcbiBcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuQEAgLTE4OCw2ICYjNDM7MTg3LDcgQEAgaW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxuIFx0XHRcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbiBcdFx0XHRcdC52bWEgPSB2bWEsXG4gXHRcdFx0XHQuYWRkcmVzcyA9IG1lbW1hcC1cdTAwM2V2bWFfYmFzZSAmIzQzOyBpICogUEFHRV9TSVpFLFxuJiM0MztcdFx0XHRcdC53cml0ZV9mYXVsdCA9ICEhKG1lbW1hcC1cdTAwM2VhdHRyIFx1MDAyNiBBQ1JOX01FTV9BQ0NFU1NfV1JJVEUpLFxuIFx0XHRcdH07XG4gXG4gXHRcdFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbkBAIC0xOTcsMTYgJiM0MzsxOTcsOCBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXG4gXHRcdFx0Y3VyX3BmbiA9IGFyZ3MucGZuO1xuIFx0XHRcdGlmIChpID09IDApXG4gXHRcdFx0XHRzdGFydF9wZm4gPSBjdXJfcGZuO1xuLVx0XHRcdHdyaXRhYmxlID0gYXJncy53cml0YWJsZTtcbiBcdFx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbiBcbi1cdFx0XHQvKiBEaXNhbGxvdyB3cml0ZSBhY2Nlc3MgaWYgdGhlIFBURSBpcyBub3Qgd3JpdGFibGUuICovXG4tXHRcdFx0aWYgKCF3cml0YWJsZSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKG1lbW1hcC1cdTAwM2VhdHRyIFx1MDAyNiBBQ1JOX01FTV9BQ0NFU1NfV1JJVEUpKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVxuIFx0XHRcdC8qIERpc2FsbG93IHJlZmNvdW50ZWQgcGFnZXMuICovXG4gXHRcdFx0aWYgKHBmbl92YWxpZChjdXJfcGZuKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgIVBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShjdXJfcGZuKSkpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIuLjM0Yzc5YjVmY2I5YjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTMxMzYsOSAmIzQzOzMxMzYsMTIgQEAgc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyB7XG4gXHQgKiBJbnB1dHM6XG4gXHQgKiBAdm1hOiBQb2ludGVyIHRvIEB2bV9hcmVhX3N0cnVjdCBzdHJ1Y3RcbiBcdCAqIEBhZGRyZXNzOiB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIHdhbGtcbiYjNDM7XHQgKiBAd3JpdGVfZmF1bHQ6IGlmIHRydWUsIGZhaWwgd2l0aCAtRUZBVUxUIHVubGVzcyB0aGUgbWFwcGluZyBpc1xuJiM0MztcdCAqIHdyaXRhYmxlXG4gXHQgKi9cbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuJiM0MztcdGJvb2wgd3JpdGVfZmF1bHQ7XG4gXHQvKipcbiBcdCAqIEludGVybmFsczpcbiBcdCAqXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMy4uNDA5OTdhMjY4NDZmNSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTY3ODYsMTIgJiM0Mzs2Nzg2LDE1IEBAIGludCBfX3BtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIH1cbiAjZW5kaWYgLyogX19QQUdFVEFCTEVfUE1EX0ZPTERFRCAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxuLVx0XHRcdFx0ICAgICBzcGlubG9ja190ICpsb2NrLCBwdGVfdCAqcHRlcCxcbi1cdFx0XHRcdCAgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJfbWFzaywgYm9vbCB3cml0YWJsZSxcbi1cdFx0XHRcdCAgICAgYm9vbCBzcGVjaWFsKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxuJiM0MztcdFx0XHRcdCAgICBzcGlubG9ja190ICpsb2NrLCBwdGVfdCAqcHRlcCxcbiYjNDM7XHRcdFx0XHQgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHJfbWFzaywgYm9vbCB3cml0YWJsZSxcbiYjNDM7XHRcdFx0XHQgICAgYm9vbCBzcGVjaWFsKVxuIHtcbiYjNDM7XHRpZiAoIXdyaXRhYmxlIFx1MDAyNlx1MDAyNiBhcmdzLVx1MDAzZXdyaXRlX2ZhdWx0KVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuIFx0YXJncy1cdTAwM2Vsb2NrID0gbG9jaztcbiBcdGFyZ3MtXHUwMDNlcHRlcCA9IHB0ZXA7XG4gXHRhcmdzLVx1MDAzZXBmbiA9IHBmbl9iYXNlICYjNDM7ICgoYXJncy1cdTAwM2VhZGRyZXNzIFx1MDAyNiB+YWRkcl9tYXNrKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNjc5OSw2ICYjNDM7NjgwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxuIFx0YXJncy1cdTAwM2VwZ3Byb3QgPSBwZ3Byb3Q7XG4gXHRhcmdzLVx1MDAzZXdyaXRhYmxlID0gd3JpdGFibGU7XG4gXHRhcmdzLVx1MDAzZXNwZWNpYWwgPSBzcGVjaWFsO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2xvY2tkZXBfYXNzZXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuQEAgLTY4MjAsOCAmIzQzOzY4MjQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2xvY2tkZXBfYXNzZXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzXG4gICpcbiAgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIHNldHVwIGFyZ3MtXHUwMDNldm1hIGFuZCBhcmdzLVx1MDAzZWFkZHJlc3MgdG8gcG9pbnQgdG8gdGhlXG4tICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAuICBPbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLFxuLSAqIHRoZSByZXN1bHRzIHdpbGwgYmUgcHV0IGludG8gb3RoZXIgb3V0cHV0IGZpZWxkcy5cbiYjNDM7ICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAsIGFuZCBvcHRpb25hbGx5IHNldFxuJiM0MzsgKiBhcmdzLVx1MDAzZXdyaXRlX2ZhdWx0IHRvIHJlcXVpcmUgYSB3cml0YWJsZSBtYXBwaW5nLiAgT24gYSBzdWNjZXNzZnVsXG4mIzQzOyAqIHJldHVybiwgdGhlIHJlc3VsdHMgd2lsbCBiZSBwdXQgaW50byBvdGhlciBvdXRwdXQgZmllbGRzLlxuICAqXG4gICogQWZ0ZXIgdGhlIGNhbGxlciBmaW5pc2hlZCB1c2luZyB0aGUgZmllbGRzLCB0aGUgY2FsbGVyIG11c3QgaW52b2tlXG4gICogYW5vdGhlciBmb2xsb3dfcGZubWFwX2VuZCgpIHRvIHByb3BlciByZWxlYXNlcyB0aGUgbG9ja3MgYW5kIHJlc291cmNlc1xuQEAgLTY4NDQsNyAmIzQzOzY4NDksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2xvY2tkZXBfYXNzZXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSB1c2VkIHRvIG1vZGlmeSBQVEUgY29udGVudC5cbiAgKlxuLSAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvdGhlcndpc2UuXG4mIzQzOyAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCAtRUZBVUxUIGlmIEBhcmdzLVx1MDAzZXdyaXRlX2ZhdWx0IHdhcyBzZXQgYnV0IHRoZVxuJiM0MzsgKiBtYXBwaW5nIGlzIG5vdCB3cml0YWJsZSwgLUVJTlZBTCBpZiB0aGVyZSBpcyBubyBtYXBwaW5nIGF0IGFsbC5cbiAgKi9cbiBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIHtcbkBAIC02ODU3LDYgJiM0Mzs2ODYzLDcgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcbiBcdHB1ZF90ICpwdWRwLCBwdWQ7XG4gXHRwbWRfdCAqcG1kcCwgcG1kO1xuIFx0cHRlX3QgKnB0ZXAsIHB0ZTtcbiYjNDM7XHRpbnQgciA9IC1FSU5WQUw7XG4gXG4gXHRwZm5tYXBfbG9ja2RlcF9hc3NlcnQodm1hKTtcbiBcbkBAIC02ODkwLDEwICYjNDM7Njg5NywxMiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0XHRcdHNwaW5fdW5sb2NrKGxvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbi1cdFx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcHVkX3BncHJvdChwdWQpLFxuLVx0XHRcdFx0ICBwdWRfcGZuKHB1ZCksIFBVRF9NQVNLLCBwdWRfd3JpdGUocHVkKSxcbi1cdFx0XHRcdCAgcHVkX3NwZWNpYWwocHVkKSk7XG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0ciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHB1ZF9wZ3Byb3QocHVkKSxcbiYjNDM7XHRcdFx0XHQgICAgICBwdWRfcGZuKHB1ZCksIFBVRF9NQVNLLCBwdWRfd3JpdGUocHVkKSxcbiYjNDM7XHRcdFx0XHQgICAgICBwdWRfc3BlY2lhbChwdWQpKTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRzcGluX3VubG9jayhsb2NrKTtcbiYjNDM7XHRcdHJldHVybiByO1xuIFx0fVxuIFxuIFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XG5AQCAtNjkxMSwxMCAmIzQzOzY5MjAsMTIgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcbiBcdFx0XHRzcGluX3VubG9jayhsb2NrKTtcbiBcdFx0XHRnb3RvIHJldHJ5O1xuIFx0XHR9XG4tXHRcdHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHBtZF9wZ3Byb3QocG1kKSxcbi1cdFx0XHRcdCAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksXG4tXHRcdFx0XHQgIHBtZF9zcGVjaWFsKHBtZCkpO1xuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHIgPSBwZm5tYXBfYXJnc19zZXR1cChhcmdzLCBsb2NrLCBOVUxMLCBwbWRfcGdwcm90KHBtZCksXG4mIzQzO1x0XHRcdFx0ICAgICAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksXG4mIzQzO1x0XHRcdFx0ICAgICAgcG1kX3NwZWNpYWwocG1kKSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2sobG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gcjtcbiBcdH1cbiBcbiBcdHB0ZXAgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWRwLCBhZGRyZXNzLCBcdTAwMjZsb2NrKTtcbkBAIC02OTIzLDE0ICYjNDM7NjkzNCwxNiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0cHRlID0gcHRlcF9nZXQocHRlcCk7XG4gXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXG4gXHRcdGdvdG8gdW5sb2NrO1xuLVx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgcHRlcCwgcHRlX3BncHJvdChwdGUpLFxuLVx0XHRcdCAgcHRlX3BmbihwdGUpLCBQQUdFX01BU0ssIHB0ZV93cml0ZShwdGUpLFxuLVx0XHRcdCAgcHRlX3NwZWNpYWwocHRlKSk7XG4mIzQzO1x0ciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSxcbiYjNDM7XHRcdFx0ICAgICAgcHRlX3BmbihwdGUpLCBQQUdFX01BU0ssIHB0ZV93cml0ZShwdGUpLFxuJiM0MztcdFx0XHQgICAgICBwdGVfc3BlY2lhbChwdGUpKTtcbiYjNDM7XHRpZiAocilcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0cmV0dXJuIDA7XG4gdW5sb2NrOlxuIFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBsb2NrKTtcbiBvdXQ6XG4tXHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9zdGFydCk7XG4gXG5AQCAtNjk3Miw3ICYjNDM7Njk4NSwxMSBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xuIFx0aW50IHJldCA9IC1FSU5WQUw7XG4gXHRib29sIHdyaXRhYmxlO1xuLVx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiYjNDM7XHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7XG4mIzQzO1x0XHQudm1hID0gdm1hLFxuJiM0MztcdFx0LmFkZHJlc3MgPSBhZGRyLFxuJiM0MztcdFx0LndyaXRlX2ZhdWx0ID0gISEod3JpdGUgXHUwMDI2IEZPTExfV1JJVEUpXG4mIzQzO1x0fTtcbiBcbiByZXRyeTpcbiBcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpKVxuQEAgLTY5ODIsOSAmIzQzOzY5OTksNiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuIFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXG4tXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7XG4gXHRpZiAoIW1hZGRyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNDVlNzg0NDYyZWM2ZS4uMGM0ZmYyMjMxNjJiOSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0yOTM5LDggJiM0MzsyOTM5LDExIEBAIHN0YXRpYyBib29sIHZtYV9pc192YWxpZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCB3cml0ZV9mYXVsdClcbiBzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxuIHtcbi1cdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBrZnAtXHUwMDNlaHZhIH07XG4tXHRib29sIHdyaXRlX2ZhdWx0ID0ga2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFO1xuJiM0MztcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbiYjNDM7XHRcdC52bWEgPSB2bWEsXG4mIzQzO1x0XHQuYWRkcmVzcyA9IGtmcC1cdTAwM2VodmEsXG4mIzQzO1x0XHQud3JpdGVfZmF1bHQgPSAhIShrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpLFxuJiM0MztcdH07XG4gXHRpbnQgcjtcbiBcbiBcdC8qXG5AQCAtMjk1OSw3ICYjNDM7Mjk2Miw3IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICovXG4gXHRcdGJvb2wgdW5sb2NrZWQgPSBmYWxzZTtcbiBcdFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cdTAwM2VtbSwga2ZwLVx1MDAzZWh2YSxcbi1cdFx0XHRcdCAgICAgKHdyaXRlX2ZhdWx0ID8gRkFVTFRfRkxBR19XUklURSA6IDApLFxuJiM0MztcdFx0XHRcdCAgICAgKGFyZ3Mud3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXG4gXHRcdFx0XHQgICAgIFx1MDAyNnVubG9ja2VkKTtcbiBcdFx0aWYgKHVubG9ja2VkKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTI5NjcsMTcgJiM0MzsyOTcwLDE2IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRyZXR1cm4gcjtcbiBcbiBcdFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG4tXHRcdGlmIChyKVxuJiM0MztcdFx0aWYgKHIpIHtcbiYjNDM7XHRcdFx0aWYgKHIgPT0gLUVGQVVMVCkge1xuJiM0MztcdFx0XHRcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIHI7XG4tXHR9XG4tXG4tXHRpZiAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICFhcmdzLndyaXRhYmxlKSB7XG4tXHRcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdCpwX3BmbiA9IGt2bV9yZXNvbHZlX3BmbihrZnAsIE5VTEwsIFx1MDAyNmFyZ3MsIGFyZ3Mud3JpdGFibGUpO1xuLW91dDpcbiBcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuIFx0cmV0dXJuIHI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fSU9NTVVfVFlQRTEmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGxvd19wZm5tYXBfc3RhcnQmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICAgJiMzNDtfX2t2bV9mYXVsdGluX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTVmYzE0Njc3MTU1YjBhZGIzOGFlMzQ5MzRmNzQ0YjY1OTdiM2UyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMDA6NDM6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMgYi9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMKaW5kZXggNTFlN2EyOGFmODk5NC4uNTI2ZjgwYjhmYjNiMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9wY2kvcGNpX21taW8uYwpAQCAtMTgwLDYgJiM0MzsxODAsNyBAQCBTWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb193cml0ZSwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLAogCiAJYXJncy5hZGRyZXNzID0gbW1pb19hZGRyOwogCWFyZ3Mudm1hID0gdm1hOwomIzQzOwlhcmdzLndyaXRlX2ZhdWx0ID0gdHJ1ZTsKIAlyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KCZhbXA7YXJncyk7CiAJaWYgKHJldCkgewogCQlmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtJmd0O21tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpOwpAQCAtMzMyLDYgJiM0MzszMzMsNyBAQCBTWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb19yZWFkLCB1bnNpZ25lZCBsb25nLCBtbWlvX2FkZHIsCiAKIAlhcmdzLnZtYSA9IHZtYTsKIAlhcmdzLmFkZHJlc3MgPSBtbWlvX2FkZHI7CiYjNDM7CWFyZ3Mud3JpdGVfZmF1bHQgPSBmYWxzZTsKIAlyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KCZhbXA7YXJncyk7CiAJaWYgKHJldCkgewogCQlmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtJmd0O21tLCBtbWlvX2FkZHIsIDAsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyBiL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMKaW5kZXggYzgxNTFiYTU0ZGUzMy4uOWVlOTI4MjBiNGRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jCkBAIC01NDEsNyAmIzQzOzU0MSwxMSBAQCBzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBmbiwKIAkJCSAgICB1bnNpZ25lZCBsb25nICphZGRyX21hc2ssIGJvb2wgd3JpdGVfZmF1bHQpCiB7Ci0Jc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IHZhZGRyIH07CiYjNDM7CXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsKJiM0MzsJCS52bWEgPSB2bWEsCiYjNDM7CQkuYWRkcmVzcyA9IHZhZGRyLAomIzQzOwkJLndyaXRlX2ZhdWx0ID0gd3JpdGVfZmF1bHQKJiM0MzsJfTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydCgmYW1wO2FyZ3MpOwpAQCAtNTYzLDE1ICYjNDM7NTY3LDEwIEBAIHN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICh3cml0ZV9mYXVsdCAmYW1wOyZhbXA7ICFhcmdzLndyaXRhYmxlKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJKnBmbiA9IGFyZ3MucGZuOwotCQkqYWRkcl9tYXNrID0gYXJncy5hZGRyX21hc2s7Ci0JfQotCiYjNDM7CSpwZm4gPSBhcmdzLnBmbjsKJiM0MzsJKmFkZHJfbWFzayA9IGFyZ3MuYWRkcl9tYXNrOwogCWZvbGxvd19wZm5tYXBfZW5kKCZhbXA7YXJncyk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jIGIvZHJpdmVycy92aXJ0L2Fjcm4vbW0uYwppbmRleCA1YmNhNTAwYTgzZTA1Li5iMDU3ZTc4ZWYzZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydC9hY3JuL21tLmMKQEAgLTE3Nyw3ICYjNDM7MTc3LDYgQEAgaW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKQogCXZtYSA9IHZtYV9sb29rdXAoY3VycmVudC0mZ3Q7bW0sIG1lbW1hcC0mZ3Q7dm1hX2Jhc2UpOwogCWlmICh2bWEgJmFtcDsmYW1wOyAoKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUEZOTUFQKSAhPSAwKSkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgY3VyX3BmbjsKLQkJYm9vbCB3cml0YWJsZTsKIAogCQlpZiAoKG1lbW1hcC0mZ3Q7dm1hX2Jhc2UgJiM0MzsgbWVtbWFwLSZndDtsZW4pICZndDsgdm1hLSZndDt2bV9lbmQpIHsKIAkJCW1tYXBfcmVhZF91bmxvY2soY3VycmVudC0mZ3Q7bW0pOwpAQCAtMTg4LDYgJiM0MzsxODcsNyBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApCiAJCQlzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7CiAJCQkJLnZtYSA9IHZtYSwKIAkJCQkuYWRkcmVzcyA9IG1lbW1hcC0mZ3Q7dm1hX2Jhc2UgJiM0MzsgaSAqIFBBR0VfU0laRSwKJiM0MzsJCQkJLndyaXRlX2ZhdWx0ID0gISEobWVtbWFwLSZndDthdHRyICZhbXA7IEFDUk5fTUVNX0FDQ0VTU19XUklURSksCiAJCQl9OwogCiAJCQlyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KCZhbXA7YXJncyk7CkBAIC0xOTcsMTYgJiM0MzsxOTcsOCBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApCiAJCQljdXJfcGZuID0gYXJncy5wZm47CiAJCQlpZiAoaSA9PSAwKQogCQkJCXN0YXJ0X3BmbiA9IGN1cl9wZm47Ci0JCQl3cml0YWJsZSA9IGFyZ3Mud3JpdGFibGU7CiAJCQlmb2xsb3dfcGZubWFwX2VuZCgmYW1wO2FyZ3MpOwogCi0JCQkvKiBEaXNhbGxvdyB3cml0ZSBhY2Nlc3MgaWYgdGhlIFBURSBpcyBub3Qgd3JpdGFibGUuICovCi0JCQlpZiAoIXdyaXRhYmxlICZhbXA7JmFtcDsKLQkJCSAgICAobWVtbWFwLSZndDthdHRyICZhbXA7IEFDUk5fTUVNX0FDQ0VTU19XUklURSkpIHsKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJCWJyZWFrOwotCQkJfQotCiAJCQkvKiBEaXNhbGxvdyByZWZjb3VudGVkIHBhZ2VzLiAqLwogCQkJaWYgKHBmbl92YWxpZChjdXJfcGZuKSAmYW1wOyZhbXA7CiAJCQkgICAgIVBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShjdXJfcGZuKSkpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiLi4zNGM3OWI1ZmNiOWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zMTM2LDkgJiM0MzszMTM2LDEyIEBAIHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgewogCSAqIElucHV0czoKIAkgKiBAdm1hOiBQb2ludGVyIHRvIEB2bV9hcmVhX3N0cnVjdCBzdHJ1Y3QKIAkgKiBAYWRkcmVzczogdGhlIHZpcnR1YWwgYWRkcmVzcyB0byB3YWxrCiYjNDM7CSAqIEB3cml0ZV9mYXVsdDogaWYgdHJ1ZSwgZmFpbCB3aXRoIC1FRkFVTFQgdW5sZXNzIHRoZSBtYXBwaW5nIGlzCiYjNDM7CSAqIHdyaXRhYmxlCiAJICovCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwomIzQzOwlib29sIHdyaXRlX2ZhdWx0OwogCS8qKgogCSAqIEludGVybmFsczoKIAkgKgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBmZjMzOGMyYWJlOTIzLi40MDk5N2EyNjg0NmY1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNjc4NiwxMiAmIzQzOzY3ODYsMTUgQEAgaW50IF9fcG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB9CiAjZW5kaWYgLyogX19QQUdFVEFCTEVfUE1EX0ZPTERFRCAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2FyZ3Nfc2V0dXAoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncywKLQkJCQkgICAgIHNwaW5sb2NrX3QgKmxvY2ssIHB0ZV90ICpwdGVwLAotCQkJCSAgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyX21hc2ssIGJvb2wgd3JpdGFibGUsCi0JCQkJICAgICBib29sIHNwZWNpYWwpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGZubWFwX2FyZ3Nfc2V0dXAoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncywKJiM0MzsJCQkJICAgIHNwaW5sb2NrX3QgKmxvY2ssIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyX21hc2ssIGJvb2wgd3JpdGFibGUsCiYjNDM7CQkJCSAgICBib29sIHNwZWNpYWwpCiB7CiYjNDM7CWlmICghd3JpdGFibGUgJmFtcDsmYW1wOyBhcmdzLSZndDt3cml0ZV9mYXVsdCkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwogCWFyZ3MtJmd0O2xvY2sgPSBsb2NrOwogCWFyZ3MtJmd0O3B0ZXAgPSBwdGVwOwogCWFyZ3MtJmd0O3BmbiA9IHBmbl9iYXNlICYjNDM7ICgoYXJncy0mZ3Q7YWRkcmVzcyAmYW1wOyB+YWRkcl9tYXNrKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKQEAgLTY3OTksNiAmIzQzOzY4MDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2FyZ3Nfc2V0dXAoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncywKIAlhcmdzLSZndDtwZ3Byb3QgPSBwZ3Byb3Q7CiAJYXJncy0mZ3Q7d3JpdGFibGUgPSB3cml0YWJsZTsKIAlhcmdzLSZndDtzcGVjaWFsID0gc3BlY2lhbDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCkBAIC02ODIwLDggJiM0Mzs2ODI0LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzCiAgKgogICogVGhlIGNhbGxlciBuZWVkcyB0byBzZXR1cCBhcmdzLSZndDt2bWEgYW5kIGFyZ3MtJmd0O2FkZHJlc3MgdG8gcG9pbnQgdG8gdGhlCi0gKiB2aXJ0dWFsIGFkZHJlc3MgYXMgdGhlIHRhcmdldCBvZiBzdWNoIGxvb2t1cC4gIE9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4sCi0gKiB0aGUgcmVzdWx0cyB3aWxsIGJlIHB1dCBpbnRvIG90aGVyIG91dHB1dCBmaWVsZHMuCiYjNDM7ICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAsIGFuZCBvcHRpb25hbGx5IHNldAomIzQzOyAqIGFyZ3MtJmd0O3dyaXRlX2ZhdWx0IHRvIHJlcXVpcmUgYSB3cml0YWJsZSBtYXBwaW5nLiAgT24gYSBzdWNjZXNzZnVsCiYjNDM7ICogcmV0dXJuLCB0aGUgcmVzdWx0cyB3aWxsIGJlIHB1dCBpbnRvIG90aGVyIG91dHB1dCBmaWVsZHMuCiAgKgogICogQWZ0ZXIgdGhlIGNhbGxlciBmaW5pc2hlZCB1c2luZyB0aGUgZmllbGRzLCB0aGUgY2FsbGVyIG11c3QgaW52b2tlCiAgKiBhbm90aGVyIGZvbGxvd19wZm5tYXBfZW5kKCkgdG8gcHJvcGVyIHJlbGVhc2VzIHRoZSBsb2NrcyBhbmQgcmVzb3VyY2VzCkBAIC02ODQ0LDcgJiM0Mzs2ODQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIHVzZWQgdG8gbW9kaWZ5IFBURSBjb250ZW50LgogICoKLSAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIC1FRkFVTFQgaWYgQGFyZ3MtJmd0O3dyaXRlX2ZhdWx0IHdhcyBzZXQgYnV0IHRoZQomIzQzOyAqIG1hcHBpbmcgaXMgbm90IHdyaXRhYmxlLCAtRUlOVkFMIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcgYXQgYWxsLgogICovCiBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKQogewpAQCAtNjg1Nyw2ICYjNDM7Njg2Myw3IEBAIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpCiAJcHVkX3QgKnB1ZHAsIHB1ZDsKIAlwbWRfdCAqcG1kcCwgcG1kOwogCXB0ZV90ICpwdGVwLCBwdGU7CiYjNDM7CWludCByID0gLUVJTlZBTDsKIAogCXBmbm1hcF9sb2NrZGVwX2Fzc2VydCh2bWEpOwogCkBAIC02ODkwLDEwICYjNDM7Njg5NywxMiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKQogCQkJc3Bpbl91bmxvY2sobG9jayk7CiAJCQlnb3RvIHJldHJ5OwogCQl9Ci0JCXBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHB1ZF9wZ3Byb3QocHVkKSwKLQkJCQkgIHB1ZF9wZm4ocHVkKSwgUFVEX01BU0ssIHB1ZF93cml0ZShwdWQpLAotCQkJCSAgcHVkX3NwZWNpYWwocHVkKSk7Ci0JCXJldHVybiAwOwomIzQzOwkJciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHB1ZF9wZ3Byb3QocHVkKSwKJiM0MzsJCQkJICAgICAgcHVkX3BmbihwdWQpLCBQVURfTUFTSywgcHVkX3dyaXRlKHB1ZCksCiYjNDM7CQkJCSAgICAgIHB1ZF9zcGVjaWFsKHB1ZCkpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJc3Bpbl91bmxvY2sobG9jayk7CiYjNDM7CQlyZXR1cm4gcjsKIAl9CiAKIAlwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyZXNzKTsKQEAgLTY5MTEsMTAgJiM0Mzs2OTIwLDEyIEBAIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpCiAJCQlzcGluX3VubG9jayhsb2NrKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KLQkJcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLAotCQkJCSAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksCi0JCQkJICBwbWRfc3BlY2lhbChwbWQpKTsKLQkJcmV0dXJuIDA7CiYjNDM7CQlyID0gcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLAomIzQzOwkJCQkgICAgICBwbWRfcGZuKHBtZCksIFBNRF9NQVNLLCBwbWRfd3JpdGUocG1kKSwKJiM0MzsJCQkJICAgICAgcG1kX3NwZWNpYWwocG1kKSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlzcGluX3VubG9jayhsb2NrKTsKJiM0MzsJCXJldHVybiByOwogCX0KIAogCXB0ZXAgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWRwLCBhZGRyZXNzLCAmYW1wO2xvY2spOwpAQCAtNjkyMywxNCAmIzQzOzY5MzQsMTYgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncykKIAlwdGUgPSBwdGVwX2dldChwdGVwKTsKIAlpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpCiAJCWdvdG8gdW5sb2NrOwotCXBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSwKLQkJCSAgcHRlX3BmbihwdGUpLCBQQUdFX01BU0ssIHB0ZV93cml0ZShwdGUpLAotCQkJICBwdGVfc3BlY2lhbChwdGUpKTsKJiM0MzsJciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSwKJiM0MzsJCQkgICAgICBwdGVfcGZuKHB0ZSksIFBBR0VfTUFTSywgcHRlX3dyaXRlKHB0ZSksCiYjNDM7CQkJICAgICAgcHRlX3NwZWNpYWwocHRlKSk7CiYjNDM7CWlmIChyKQomIzQzOwkJZ290byB1bmxvY2s7CiAJcmV0dXJuIDA7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwdGVwLCBsb2NrKTsKIG91dDoKLQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX3N0YXJ0KTsKIApAQCAtNjk3Miw3ICYjNDM7Njk4NSwxMSBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAlib29sIHdyaXRhYmxlOwotCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07CiYjNDM7CXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsKJiM0MzsJCS52bWEgPSB2bWEsCiYjNDM7CQkuYWRkcmVzcyA9IGFkZHIsCiYjNDM7CQkud3JpdGVfZmF1bHQgPSAhISh3cml0ZSAmYW1wOyBGT0xMX1dSSVRFKQomIzQzOwl9OwogCiByZXRyeToKIAlpZiAoZm9sbG93X3Bmbm1hcF9zdGFydCgmYW1wO2FyZ3MpKQpAQCAtNjk4Miw5ICYjNDM7Njk5OSw2IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJd3JpdGFibGUgPSBhcmdzLndyaXRhYmxlOwogCWZvbGxvd19wZm5tYXBfZW5kKCZhbXA7YXJncyk7CiAKLQlpZiAoKHdyaXRlICZhbXA7IEZPTExfV1JJVEUpICZhbXA7JmFtcDsgIXdyaXRhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7CiAJaWYgKCFtYWRkcikKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA0NWU3ODQ0NjJlYzZlLi4wYzRmZjIyMzE2MmI5IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTI5MzksOCAmIzQzOzI5MzksMTEgQEAgc3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KQogc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKQogewotCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBrZnAtJmd0O2h2YSB9OwotCWJvb2wgd3JpdGVfZmF1bHQgPSBrZnAtJmd0O2ZsYWdzICZhbXA7IEZPTExfV1JJVEU7CiYjNDM7CXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsKJiM0MzsJCS52bWEgPSB2bWEsCiYjNDM7CQkuYWRkcmVzcyA9IGtmcC0mZ3Q7aHZhLAomIzQzOwkJLndyaXRlX2ZhdWx0ID0gISEoa2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX1dSSVRFKSwKJiM0MzsJfTsKIAlpbnQgcjsKIAogCS8qCkBAIC0yOTU5LDcgJiM0MzsyOTYyLDcgQEAgc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYm9vbCB1bmxvY2tlZCA9IGZhbHNlOwogCQlyID0gZml4dXBfdXNlcl9mYXVsdChjdXJyZW50LSZndDttbSwga2ZwLSZndDtodmEsCi0JCQkJICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksCiYjNDM7CQkJCSAgICAgKGFyZ3Mud3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksCiAJCQkJICAgICAmYW1wO3VubG9ja2VkKTsKIAkJaWYgKHVubG9ja2VkKQogCQkJcmV0dXJuIC1FQUdBSU47CkBAIC0yOTY3LDE3ICYjNDM7Mjk3MCwxNiBAQCBzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlyZXR1cm4gcjsKIAogCQlyID0gZm9sbG93X3Bmbm1hcF9zdGFydCgmYW1wO2FyZ3MpOwotCQlpZiAocikKJiM0MzsJCWlmIChyKSB7CiYjNDM7CQkJaWYgKHIgPT0gLUVGQVVMVCkgewomIzQzOwkJCQkqcF9wZm4gPSBLVk1fUEZOX0VSUl9ST19GQVVMVDsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQogCQkJcmV0dXJuIHI7Ci0JfQotCi0JaWYgKHdyaXRlX2ZhdWx0ICZhbXA7JmFtcDsgIWFyZ3Mud3JpdGFibGUpIHsKLQkJKnBfcGZuID0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQ7Ci0JCWdvdG8gb3V0OwomIzQzOwkJfQogCX0KIAogCSpwX3BmbiA9IGt2bV9yZXNvbHZlX3BmbihrZnAsIE5VTEwsICZhbXA7YXJncywgYXJncy53cml0YWJsZSk7Ci1vdXQ6CiAJZm9sbG93X3Bmbm1hcF9lbmQoJmFtcDthcmdzKTsKIAlyZXR1cm4gcjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgd3JpdGUgZmF1bHRzIGFyZSBoYW5kbGVkIHdpdGhpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGB3cml0ZV9mYXVsdGAgZmllbGQgdG8gYHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3NgLiBUaGUgZ2lzdCBpcyB0aGF0IGlmIGB3cml0ZV9mYXVsdGAgaXMgc2V0IHRvIHRydWUgYW5kIHRoZSBtYXBwaW5nIGlzbiYjMzk7dCB3cml0YWJsZSwgYGZvbGxvd19wZm5tYXBfc3RhcnRgIG5vdyBkaXJlY3RseSByZXR1cm5zIGAtRUZBVUxUYC4gVGhpcyB1c2VkIHRvIGJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCYjMzk7cyBiZWVuIHNoaWZ0ZWQgaW50byBgcGZubWFwX2FyZ3Nfc2V0dXBgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZvbGxvd19wZm5tYXBfc3RhcnRgLiBUaGlzIGRlZmluaXRlbHkgc3RyZWFtbGluZXMgdGhlIGNvZGUgYW5kIGF2b2lkcyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBkaXJlY3RseSB0b3VjaGVkIGJ5IHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlIGhhdmU6IGBzMzkwX3BjaV9tbWlvX3dyaXRlYCwgYHMzOTBfcGNpX21taW9fcmVhZGAsIGBmb2xsb3dfZmF1bHRfcGZuYCBpbiBgZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY2AsIGBhY3JuX3ZtX3JhbV9tYXBgIGluIGBkcml2ZXJzL3ZpcnQvYWNybi9tbS5jYCwgYHBmbm1hcF9hcmdzX3NldHVwYCwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbmQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFsbCBpbiBgbW0vbWVtb3J5LmNgLCBhbmQgZmluYWxseSBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLgoKVGhpcyBpcyBzaWduaWZpY2FudC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyB0aGF0IHJpcHBsZSB0aHJvdWdoIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRvdWNoIHZpcnR1YWxpemF0aW9uIHN1YnN5c3RlbXMg4oCTIEtWTSwgVkZJTywgYW5kIEFDUk4uIFRoaXMgZGVmaW5pdGVseSBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBodmFfdG9fcGZuX3JlbWFwcGVkYCwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBgZm9sbG93X2ZhdWx0X3BmbmAsIGFuZCBgYWNybl92bV9yYW1fbWFwYC4gTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlaXIgdmlzaWJpbGl0eS4gQWgsIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTGAuIGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyBzdGF0aWMgd2l0aGluIGBrdm1fbWFpbi5jYCwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIGV4cG9ydGVkLCBgZm9sbG93X2ZhdWx0X3BmbmAgaXMgc3RhdGljIHRvIGB2ZmlvX2lvbW11X3R5cGUxLmNgLCBhbmQgYGFjcm5fdm1fcmFtX21hcGAgaXMgd2l0aGluIGBkcml2ZXJzL3ZpcnQvYWNybi9tbS5jYC4KCk9rYXksIG5leHQgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgdGhlc2Ugc3Vic3lzdGVtczogS1ZNIGlzLCBvZiBjb3Vyc2UsIGBDT05GSUdfS1ZNYCwgVkZJTyBpcyBgQ09ORklHX1ZGSU9gLCBhbmQgQUNSTiBpcyBgQ09ORklHX0FDUk5fR1VFU1RgLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIGJ1dCB0aGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUNSTl9HVUVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTg2OD1jb25maWcgSkFJTEhPVVNFX0dVRVNUXG4tLVxuYXJjaC94ODYvS2NvbmZpZy04NzYtXG5hcmNoL3g4Ni9LY29uZmlnOjg3Nzpjb25maWcgQUNSTl9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy04NzgtXHRib29sIFwmIzM0O0FDUk4gR3Vlc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipWRklPIEludmVzdGlnYXRpb24gLSBBQ1JOIEd1ZXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIGBBQ1JOX0dVRVNUYCBzZXR0aW5nIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYSBib29sZWFuLCBtZWFuaW5nIGl0JiMzOTtzIGVpdGhlciB0cnVlIG9yIGZhbHNlLiBBbmQgZ2l2ZW4gdGhlIGNvbnRleHQsIG15IG1pbmQmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyB0byBWRklPLiBHaXZlbiB0aGF0IHRoaXMgc2VlbXMgdG8gYmUgYSBrZXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcm9sZSBpdCBwbGF5cyBpbiB0aGlzIHNldHVwLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGNvbmZpZyBpbnRlcmFjdHMgd2l0aCBWRklPIGFuZCB3aGF0IGNvbnNlcXVlbmNlcyB0aGlzIGhhcy4gTGV0JiMzOTtzIGRpZyBpbnRvIFZGSU8gdG8gZmlndXJlIG91dCB3aGF0IHRoaXMgc2V0dGluZyBlbmFibGVzIG9yIGRpc2FibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTgwOT1jb25maWcgQVBfREVCVUdcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MjItXG5hcmNoL3MzOTAvS2NvbmZpZzo4MjM6Y29uZmlnIFZGSU9fQ0NXXG5hcmNoL3MzOTAvS2NvbmZpZy04MjQtXHRkZWZfdHJpc3RhdGUgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTgzMy1cbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxuYXJjaC9zMzkwL0tjb25maWctODM1LVx0ZGVmX3RyaXN0YXRlIG5cbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92ZmlvL0tjb25maWc6MjptZW51Y29uZmlnIFZGSU9cbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9MTY9aWYgVkZJT1xuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMjktXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzozMDpjb25maWcgVkZJT19HUk9VUFxuZHJpdmVycy92ZmlvL0tjb25maWctMzEtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zOS1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjQwOmNvbmZpZyBWRklPX0NPTlRBSU5FUlxuZHJpdmVycy92ZmlvL0tjb25maWctNDEtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnPTUyPWlmIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxuZHJpdmVycy92ZmlvL0tjb25maWctNTQtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTU2LVxuZHJpdmVycy92ZmlvL0tjb25maWc6NTc6Y29uZmlnIFZGSU9fSU9NTVVfU1BBUFJfVENFXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01OC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9NjE9ZW5kaWZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTYyLVxuZHJpdmVycy92ZmlvL0tjb25maWc6NjM6Y29uZmlnIFZGSU9fTk9JT01NVVxuZHJpdmVycy92ZmlvL0tjb25maWctNjQtXHRib29sIFwmIzM0O1ZGSU8gTm8tSU9NTVUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTc3LVxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzg6Y29uZmlnIFZGSU9fVklSUUZEXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy03OS1cdGJvb2xcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04Mi1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjgzOmNvbmZpZyBWRklPX0RFQlVHRlNcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFeHBvcnQgVkZJTyBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9jZHgvS2NvbmZpZy03LVxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnOjg6Y29uZmlnIFZGSU9fQ0RYXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQ0RYIGJ1cyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTE9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0zLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjQ6Y29uZmlnIFZGSU9fRlNMX01DXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgUW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZy0yLVxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZzozOmNvbmZpZyBWRklPX01ERVZcbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc9Mj1tZW51IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgcGxhdGZvcm0gZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo1OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JBU0VcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTgtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo5OmNvbmZpZyBWRklPX1BMQVRGT1JNXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgcGxhdGZvcm0gZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTgtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzoxOTpjb25maWcgVkZJT19BTUJBXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQU1CQSBkZXZpY2VzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnPTI9aWYgVkZJT19QTEFURk9STVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWc6Mzpjb25maWcgVkZJT19QTEFURk9STV9DQUxYRURBWEdNQUNfUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIGNhbHhlZGEgeGdtYWMgcmVzZXQgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BMQVRGT1JNX0FNRFhHQkVfUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBBTUQgWEdCRSByZXNldCAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xNi1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjE3OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JDTUZMRVhSTV9SRVNFVFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEJyb2FkY29tIEZsZXhSTSByZXNldCAoREVQUkVDQVRFRClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIGl0JiMzOTtzIG1vZGlmeWluZyBzZXZlcmFsIGtleSBjb21wb25lbnRzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGhpdHRpbmcgYGRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmNgLCBhbmQgdGhhdCYjMzk7cyBvYnZpb3VzbHkgYmVoaW5kIHRoZSBgVkZJT19JT01NVV9UWVBFMWAgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIHRoZXJlLCB0aGF0JiMzOTtzIGNydWNpYWwuIFRoZW4gdGhlcmUmIzM5O3MgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCB3aGljaCBpcyB1bmRlciBgS1ZNYCwgb2J2aW91c2x5LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIGludGVyYWN0aW9ucyB0aGVyZS4gTmV4dCwgaXQmIzM5O3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jYCwgaW1wbHlpbmcgdGhpcyByZWxhdGVzIHRvIGBQQ0lgIG9uIHMzOTAgc3lzdGVtcy4gVGhhdCBtZWFucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBGaW5hbGx5LCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBgZHJpdmVycy92aXJ0L2Fjcm4vbW0uY2AsIHdoaWNoLCBhcyBhIHN5c3RlbSBleHBlcnQsIEkgaW1tZWRpYXRlbHkgYXNzb2NpYXRlIHdpdGggYEFDUk5fR1VFU1RgLiBUaGlzIGltcGxpZXMgY2hhbmdlcyB3aXRoaW4gdGhlIEFDUk4gaHlwZXJ2aXNvciBmcmFtZXdvcmsuCgpNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFZGSU9fSU9NTVVfVFlQRTFgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gVW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcGllY2Ugb2YgaW5mb3JtYXRpb24gdG8gYmUgZ2F0aGVyaW5nIGF0IHRoaXMgbW9tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0lPTU1VX1RZUEUxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnPTUyPWlmIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxuZHJpdmVycy92ZmlvL0tjb25maWctNTQtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDg0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipWRklPX0NPTlRBSU5FUiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gaGluZ2Ugb24gYFZGSU9fQ09OVEFJTkVSYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEJlZm9yZSBJIGNhbiBtYWtlIGFueSBkZWZpbml0aXZlIGNvbmNsdXNpb25zIG9yIHJlY29tbWVuZGF0aW9ucywgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFZGSU9fQ09OVEFJTkVSYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIGtlcm5lbCBtb2R1bGVzIGl0IHJlbGllcyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBhcmNoaXRlY3R1cmFsIGxhbmRzY2FwZSBhbmQgYWxsb3cgbWUgdG8gYXNzZXNzIHBvdGVudGlhbCBpbXBhY3RzIGRvd24gdGhlIGxpbmUuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwIHRvIGEgbGFyZ2VyIGRpYWdub3Npcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQ09OVEFJTkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnPTMwPWNvbmZpZyBWRklPX0dST1VQXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo0MDpjb25maWcgVkZJT19DT05UQUlORVJcbmRyaXZlcnMvdmZpby9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjb250YWluZXIgL2Rldi92ZmlvL3ZmaW9cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAtIFZGSU9fR1JPVVAqKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGhpbmdlcyBvbiBgVkZJT19HUk9VUGAuIFRoYXQmIzM5O3MgdGhlIGtleSB2YXJpYWJsZSBoZXJlLCBhbmQgaXRzIGJlaGF2aW9yIHdpbGwgZGljdGF0ZSBldmVyeXRoaW5nLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AuIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBvcHRpb25zLCBmZWF0dXJlcywgb3IgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyBjb250cm9sIHRoZSBhdmFpbGFiaWxpdHkgb3IgYmVoYXZpb3Igb2YgYFZGSU9fR1JPVVBgLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHRoYXQgY291bGQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIGF0IGhhbmQuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgb3B0aW9ucyB3aWxsIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3JrcyogYXQgYSBncmFudWxhciBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcdCAgIGRldmljZXMgdGhyb3VnaCBWRklPIGFuZCBpcyB1c2VkIGJ5IHRoZSBtYWpvcml0eSBvZiB1c2Vyc3BhY2VcbiAgMzY6XHRcdCAgIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtYWtpbmcgdXNlIG9mIFZGSU8uXG4gIDM3Olx0XG4gIDM4Olx0XHQgICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS5cbiAgMzk6XHRcbiAgNDA6XHRjb25maWcgVkZJT19DT05UQUlORVJcbiAgNDE6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4gIDQyOlx0XHRzZWxlY3QgVkZJT19JT01NVV9UWVBFMSBpZiBNTVUgXHUwMDI2XHUwMDI2IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpXG4gIDQzOlx0XHRkZXBlbmRzIG9uIFZGSU9fR1JPVVBcbiAgNDQ6XHRcdGRlZmF1bHQgeVxuICA0NTpcdFx0aGVscFxuICA0NjpcdFx0ICBUaGUgVkZJTyBjb250YWluZXIgaXMgdGhlIGNsYXNzaWMgaW50ZXJmYWNlIHRvIFZGSU8gZm9yIGVzdGFibGlzaGluZ1xuICA0NzpcdFx0ICBJT01NVSBtYXBwaW5ncy4gSWYgTiBpcyBzZWxlY3RlZCBoZXJlIHRoZW4gSU9NTVVGRCBtdXN0IGJlIHVzZWQgdG9cbiAgNDg6XHRcdCAgbWFuYWdlIHRoZSBtYXBwaW5ncy5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVW5sZXNzIHRlc3RpbmcgSU9NTVVGRCBzYXkgWSBoZXJlLlxuICA1MTpcdFxuICA1MjpcdGlmIFZGSU9fQ09OVEFJTkVSXG4gIDUzOlx0Y29uZmlnIFZGSU9fSU9NTVVfVFlQRTFcbiAgNTQ6XHRcdHRyaXN0YXRlXG4gIDU1Olx0XHRkZWZhdWx0IG5cbiAgNTY6XHRcbiAgNTc6XHRjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcbiAgNTg6XHRcdHRyaXN0YXRlXG4gIDU5Olx0XHRkZXBlbmRzIG9uIFNQQVBSX1RDRV9JT01NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBWRklPIERlcGVuZGVuY3kgQ2hhaW4qKgoKUmlnaHQsIHNvIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIFZGSU8gY29tcG9uZW50cyByZWxhdGUgdG8gZWFjaCBvdGhlci4gSXQgc2VlbXMgdGhhdCBgVkZJT19DT05UQUlORVJgIGlzIGJ1aWx0IG9uIHRvcCBvZiBgVkZJT19HUk9VUGAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIHRoZSBmb3VuZGF0aW9uYWwgYFZGSU9gIG1vZHVsZS4gVGhpcyBzdWdnZXN0cyBhIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUuIElmIGBWRklPYCBmYWlscywgYFZGSU9fR1JPVVBgIGFuZCBgVkZJT19DT05UQUlORVJgIGFyZSB1c2VsZXNzLiBJZiBgVkZJT19HUk9VUGAgZmFpbHMsIGBWRklPX0NPTlRBSU5FUmAgd2lsbCBmYWlsLiBUaGVyZWZvcmUsIGxvZ2ljYWxseSwgaXQgbWFrZXMgc2Vuc2UgdG8gZGlnIGludG8gYFZGSU9fR1JPVVBgIGZpcnN0IHRvIHVuZGVyc3RhbmQgdGhlIGNydWNpYWwgbGluayBpdCBwbGF5cyBpbiB0aGUgY2hhaW4uIE15IG5leHQgYWN0aW9uIGlzIGNsZWFyOyBsZXQmIzM5O3MgaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljcyBvZiBgVkZJT19HUk9VUGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0XHQgIHRvIHNldCB1cCBzZWN1cmUgRE1BIGNvbnRleHQgZm9yIGRldmljZSBhY2Nlc3MuICBUaGlzIGludGVyZmFjZSBkb2VzXG4gIDI2Olx0XHQgIG5vdCBzdXBwb3J0IG5vaW9tbXUuXG4gIDI3Olx0XG4gIDI4Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBWRklPX0dST1VQXG4gIDMxOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcJiMzNDtcbiAgMzI6XHRcdGRlZmF1bHQgeVxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICAgVkZJTyBncm91cCBzdXBwb3J0IHByb3ZpZGVzIHRoZSB0cmFkaXRpb25hbCBtb2RlbCBmb3IgYWNjZXNzaW5nXG4gIDM1Olx0XHQgICBkZXZpY2VzIHRocm91Z2ggVkZJTyBhbmQgaXMgdXNlZCBieSB0aGUgbWFqb3JpdHkgb2YgdXNlcnNwYWNlXG4gIDM2Olx0XHQgICBhcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgbWFraW5nIHVzZSBvZiBWRklPLlxuICAzNzpcdFxuICAzODpcdFx0ICAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IFkuXG4gIDM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVmlydHVhbGl6YXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGlzIHZpcnR1YWxpemF0aW9uIHByb2JsZW0gYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIGluY29ycG9yYXRlIGBWRklPYCwgYFZGSU9fR1JPVVBgLCBgVkZJT19DT05UQUlORVJgLCBhbmQgYFZGSU9fSU9NTVVfVFlQRTFgLiBJdCYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwsIG9idmlvdXNseS4gVGhlbiB3ZSBoYXZlIGBLVk1gLCB3aGljaCBpcyB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSwgYW5kIHdlIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgYEFDUk5fR1VFU1RgIGNvbXBvbmVudC4gVGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3MsIG5vIGRvdWJ0LgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGVzZSBmb2N1cyBzeW1ib2xzLiBXZSBoYXZlIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCwgYGh2YV90b19wZm5fcmVtYXBwZWRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGBmb2xsb3dfZmF1bHRfcGZuYCwgYW5kIGBhY3JuX3ZtX3JhbV9tYXBgLiBFYWNoIG9mIHRoZW0gdGVsbHMgYSBiaXQgb2YgdGhlIHN0b3J5LgoKSG1tLCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYW5kIGBmb2xsb3dfZmF1bHRfcGZuYCBhcmUgc3RhdGljLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IGEgc3RhdGljIGZ1bmN0aW9uIGlzIG9ubHkgdmlzaWJsZSB3aXRoaW4gYSBzaW5nbGUgZmlsZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGwgdGhlbS4gRmluZGluZyB0aGF0IG91dCB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtIGFuZCBob3cgdGhleSBhZmZlY3Qgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxpbmUgb2YgaW5xdWlyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3Bmbl9yZW1hcHBlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzOC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9Mjk4Nz1rdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTUtXHRlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNjpcdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTctXHRcdGlmIChyID09IC1FQUdBSU4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgSFZBIHRvIFBGTiBNYXBwaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBodmFfdG9fcGZuYCBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkcmlsbCBkb3duLiBJdCBhcHBlYXJzIHRoYXQgYGh2YV90b19wZm5gIGNhbGxzIGBodmFfdG9fcGZuX3JlbWFwcGVkYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIGF0IHNvbWUga2luZCBvZiByZW1hcHBpbmcgaW52b2x2ZWQsIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZy4gQmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGh2YV90b19wZm5gIGl0c2VsZiBpcyBkb2luZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgYGh2YV90b19wZm5gIGZ1bmN0aW9uIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGFjY29tcGxpc2gsIGFuZCB0aGUgcm9sZSBvZiB0aGUgcmVtYXAgZnVuY3Rpb24gaXMgcGxheWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3BmbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTI4Mjc9c3RhdGljIGt2bV9wZm5fdCBrdm1fcmVzb2x2ZV9wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzOC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4Nzprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4OC17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTk3LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTk4Olx0aWYgKGh2YV90b19wZm5fZmFzdChrZnAsIFx1MDAyNnBmbikpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5OTktXHRcdHJldHVybiBwZm47XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMDAtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMDE6XHRucGFnZXMgPSBodmFfdG9fcGZuX3Nsb3coa2ZwLCBcdTAwMjZwZm4pO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDAyLVx0aWYgKG5wYWdlcyA9PSAxKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNS1cdGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xudmlydC9rdm0va3ZtX21haW4uYzozMDE2Olx0XHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXHUwMDI2cGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNy1cdFx0aWYgKHIgPT0gLUVBR0FJTilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMzI9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNDctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNDg6XHRyZXR1cm4gaHZhX3RvX3BmbihrZnApO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDQ5LX1cbi0tXG52aXJ0L2t2bS9rdm1fbW0uaD0yNz1zdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ge1xuLS1cbnZpcnQva3ZtL2t2bV9tbS5oLTU4LVxudmlydC9rdm0va3ZtX21tLmg6NTk6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApO1xudmlydC9rdm0va3ZtX21tLmgtNjAtXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1NC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MTU1OnN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTYte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjA4LVxudmlydC9rdm0vcGZuY2FjaGUuYzoyMDk6XHRcdG5ld19wZm4gPSBodmFfdG9fcGZuKFx1MDAyNmtmcCk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTIxMC1cdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4obmV3X3BmbikpXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0yNTY9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzIyOlx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMy1cdGdwYy1cdTAwM2V1aHZhICYjNDM7PSBwYWdlX29mZnNldDtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyOS1cdGlmICghZ3BjLVx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMwOlx0XHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMS1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzgyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gS1ZNIFBGTiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBLVk0gaGFuZGxlcyBQaHlzaWNhbCBGcmFtZSBOdW1iZXJzIChQRk5zKS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGBodmFfdG9fcGZuYCDigJMgb3IgYXQgbGVhc3QsIHNvbWV0aGluZyB3aXRoIHRoYXQgbmFtZSBhbmQgZnVuY3Rpb24gc2lnbmF0dXJlIOKAkyBpcyBleHBvc2VkIG91dHNpZGUgaXRzIGxpa2VseSBvcmlnaW5hbCBjb21waWxhdGlvbiB1bml0IHdpdGhpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCB0ZWxscyBtZSB0aGF0IHRoaXMgdHJhbnNsYXRpb24gZnVuY3Rpb24gaXMgKmludGVuZGVkKiBmb3IgdXNlIGVsc2V3aGVyZSwgd2hpY2ggaW4gdHVybiBtZWFucyBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIHNvbWUgY3Jvc3MtbW9kdWxlIGludGVyYWN0aW9uIG9yIGFkZHJlc3Mgc3BhY2UgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUgS1ZNIHN1YnN5c3RlbS4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZnVydGhlciwgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGh2YV90b19wZm5gIGlzIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgZm9sbG93X2ZhdWx0X3BmbmAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGl0IGlzIHdvcnRoIHRvIGNoZWNrIHRoaXMgZnVuY3Rpb24sIGFzIGBodmFfdG9fcGZuYCBwcm9iYWJseSB0cmFuc2xhdGVzIGhvc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGZuLCBhbmQgYGZvbGxvd19mYXVsdF9wZm5gIGlzIHJlbGF0ZWQgdG8gZmF1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xsb3dfZmF1bHRfcGZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTM0PXN0YXRpYyB2b2lkIHZmaW9fYmF0Y2hfZmluaShzdHJ1Y3QgdmZpb19iYXRjaCAqYmF0Y2gpXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01MzktXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU0MDpzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NDEtXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBmbixcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTU4Mz1zdGF0aWMgbG9uZyB2YWRkcl9nZXRfcGZucyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkcixcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTYxNC1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NjE1Olx0XHRyZXQgPSBmb2xsb3dfZmF1bHRfcGZuKHZtYSwgbW0sIHZhZGRyLCBwZm4sIFx1MDAyNmFkZHJfbWFzayxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNjE2LVx0XHRcdFx0ICAgICAgIHByb3QgXHUwMDI2IElPTU1VX1dSSVRFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzODcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqU3RhdGljIEZ1bmN0aW9uIElucXVpcmllcyoqCgpPa2F5LCBzbyBgdmFkZHJfZ2V0X3BmbnNgIGlzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHNjb3BlZCB3aXRoaW4gYSBzaW5nbGUgY29tcGlsYXRpb24gdW5pdCwgYW5kIGl0cyB1c2FnZSBpcyBpbnRlbnRpb25hbGx5IHJlc3RyaWN0ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlc2Ugc29ydHMgb2Ygb3B0aW1pemF0aW9ucywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyBob3cgdGhlIHZpcnR1YWwgbWVtb3J5IHN5c3RlbSBpcyBzdHJ1Y3R1cmVkIGhlcmUuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIGB2YWRkcl9nZXRfcGZuc2AgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIGl0cyBzcGVjaWZpYyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsgYW5kIGhpZ2hsaWdodCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbnN0cmFpbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIHByb2JhYmx5IGEgc3ltYm9sIGxvb2t1cCBvciBjcm9zcy1yZWZlcmVuY2UgdG9vbCB0byBkbyB0aGlzIGVmZmVjdGl2ZWx5LCBvciBzaW1wbHkgc2VhcmNoIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseS4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmFkZHJfZ2V0X3BmbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz01NDA9c3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU4Mi0gKi9cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NTgzOnN0YXRpYyBsb25nIHZhZGRyX2dldF9wZm5zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01ODQtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucGFnZXMsIGludCBwcm90LCB1bnNpZ25lZCBsb25nICpwZm4sXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz02NzQ9c3RhdGljIGxvbmcgdmZpb19waW5fcGFnZXNfcmVtb3RlKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzA5LVx0XHRcdC8qIEVtcHR5IGJhdGNoLCBzbyByZWZpbGwgaXQuICovXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjcxMDpcdFx0XHRyZXQgPSB2YWRkcl9nZXRfcGZucyhtbSwgdmFkZHIsIG5wYWdlLCBkbWEtXHUwMDNlcHJvdCxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzExLVx0XHRcdFx0XHQgICAgIFx1MDAyNnBmbiwgYmF0Y2gpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzM0LVx0XHQgKiBwZm4gaXMgcHJlc2V0IGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uIG9mIHRoaXMgaW5uZXIgbG9vcFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo3MzU6XHRcdCAqIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHZhZGRyX2dldF9wZm5zKCkgbmVlZHMgdG8gcHJvdmlkZSB0aGVcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzM2LVx0XHQgKiBpbml0aWFsIHBmbiBmb3IgcGZubWFwcy4gIFRoZXJlZm9yZSB0byByZWR1Y2UgcmVkdW5kYW5jeSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTc0OS1cdFx0XHQgKiBVc2luZyBHVVAgd2l0aCB0aGUgRk9MTF9MT05HVEVSTSBpblxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo3NTA6XHRcdFx0ICogdmFkZHJfZ2V0X3BmbnMoKSB3aWxsIG5vdCByZXR1cm4gaW52YWxpZFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy03NTEtXHRcdFx0ICogb3IgcmVzZXJ2ZWQgcGFnZXMuXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz04Mzg9c3RhdGljIGludCB2ZmlvX3Bpbl9wYWdlX2V4dGVybmFsKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtODUwLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo4NTE6XHRyZXQgPSB2YWRkcl9nZXRfcGZucyhtbSwgdmFkZHIsIDEsIGRtYS1cdTAwM2Vwcm90LCBwZm5fYmFzZSwgXHUwMDI2YmF0Y2gpO1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy04NTItXHRpZiAocmV0ICE9IDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzI0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVkZJTyBQYWdlIFBpbm5pbmcgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIGJvdGggYHZmaW9fcGluX3BhZ2VzX3JlbW90ZWAgYW5kIGB2ZmlvX3Bpbl9wYWdlX2V4dGVybmFsYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgYXMgaXQgbGltaXRzIHRoZWlyIHNjb3BlIGFuZCBhY2Nlc3NpYmlsaXR5IHdpdGhpbiB0aGUgVkZJTyBjb2RlYmFzZS4gVGhleSYjMzk7cmUgaW50ZXJuYWwgZnVuY3Rpb25zLCBlZmZlY3RpdmVseSBoaWRkZW4gZnJvbSB0aGUgb3V0c2lkZSB3b3JsZCBleGNlcHQgdGhyb3VnaCB0aGVpciBkZWZpbmVkIGludGVyZmFjZXMsIGJ1dCBpdCBzdGlsbCBtZWFucyB0aGV5IGFyZSBub3QgdmlzaWJsZSBvdXRzaWRlIHRoZWlyIEMgZmlsZXMuCgpMZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIGZvY3VzIG9uIGB2ZmlvX3Bpbl9wYWdlc19yZW1vdGVgIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBwYWdlIHBpbm5pbmcgcHJvY2Vzcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcGlubmluZyBtZW1vcnkgdGhhdCBpcyAqYWxyZWFkeSogcmVtb3RlIG9yIHNvbWV0aGluZyB0aGUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyByZW1vdGU/IElzIHRoaXMgYWJvdXQgcGlubmluZyBwYWdlcyBmb3IgRE1BIHRyYW5zZmVycyBhY3Jvc3MgYSBkZXZpY2Ugb3IgZm9yIHNvbWUgb3RoZXIgcHVycG9zZT8gSSBuZWVkIHRvIHJldmlldyBpdHMgY2FsbGluZyBjb250ZXh0cyBhbmQgaXRzIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHdlIGFyZSB1c2luZyB2ZmlvLCBzbyBETUEgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiBJIHNob3VsZCBhbHNvIGNoZWNrIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBtYXliZSBpbnZlc3RpZ2F0aW5nIHRoZSBgZG1hX2J1ZmAgb3IgYHBjaV9kbWFgIHN0cnVjdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIFZGSU8gbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyBpdCBpbXBhY3RzIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19waW5fcGFnZXNfcmVtb3RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NjM3PXN0YXRpYyBsb25nIHZwZm5fcGFnZXMoc3RydWN0IHZmaW9fZG1hICpkbWEsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy02NzMtICovXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjY3NDpzdGF0aWMgbG9uZyB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoc3RydWN0IHZmaW9fZG1hICpkbWEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTY3NS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucGFnZSwgdW5zaWduZWQgbG9uZyAqcGZuX2Jhc2UsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNTc5PXN0YXRpYyBpbnQgdmZpb19waW5fbWFwX2RtYShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTU5My1cdFx0LyogUGluIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgKi9cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6MTU5NDpcdFx0bnBhZ2UgPSB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoZG1hLCB2YWRkciAmIzQzOyBkbWEtXHUwMDNlc2l6ZSxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTU5NS1cdFx0XHRcdFx0ICAgICAgc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgXHUwMDI2cGZuLCBsaW1pdCxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE4MDI9c3RhdGljIGludCB2ZmlvX2lvbW11X3JlcGxheShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xODYxLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxODYyOlx0XHRcdFx0bnBhZ2UgPSB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoZG1hLCB2YWRkcixcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTg2My1cdFx0XHRcdFx0XHRcdCAgICAgIG4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgUmV2aWV3IG9mIERNQSBNYXBwaW5nIGluIFZGSU8qKgoKUmlnaHQsIGB2ZmlvX3Bpbl9tYXBfZG1hYC4uLiB0aGF0JiMzOTtzIGEgKnN0YXRpYyogZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIG15IG1lbnRhbCBtb2RlbCBpcyBhY2N1cmF0ZSBoZXJlLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHZmaW9fcGluX21hcF9kbWFgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0JiMzOTtzIGRvaW5nLiBHb3R0YSBrZWVwIHRoZSBkZXRhaWxzIHNoYXJwIHRvIG1haW50YWluIGEgdGlnaHQgZ3JpcCBvbiB0aGVzZSBETUEgbWFwcGluZyBpbnRyaWNhY2llcyB3aXRoaW4gdGhlIFZGSU8gZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgYXNwZWN0cyBpdCBoYW5kbGVzPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUsIHNvIGEgcXVpY2sgcmVmcmVzaGVyIGlzIGluIG9yZGVyIHRvIGtlZXAgdGhpcyBvcHRpbWl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGluX21hcF9kbWEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNTUyPXN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LCBkbWFfYWRkcl90IGlvdmEsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTc4LVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNTc5OnN0YXRpYyBpbnQgdmZpb19waW5fbWFwX2RtYShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTgwLVx0XHRcdCAgICBzaXplX3QgbWFwX3NpemUpXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNjc5PXN0YXRpYyBpbnQgdmZpb19kbWFfZG9fbWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE3ODgtXHRlbHNlXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjE3ODk6XHRcdHJldCA9IHZmaW9fcGluX21hcF9kbWEoaW9tbXUsIGRtYSwgc2l6ZSk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE3OTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njg3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB2ZmlvX2RtYV9kb19tYXBgKioKCk9rYXksIHNvIGB2ZmlvX2RtYV9kb19tYXBgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBpdCBpbXBsaWVzIGEgbW9yZSBmb2N1c2VkIHNjb3BlIHdpdGhpbiB0aGUgVkZJTyBkcml2ZXIsIGxpa2VseSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSBmb3IgYHZmaW9fZG1hX2RvX21hcGAgaXRzZWxmLiBVbmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBjcnVjaWFsIHRvIGZ1bGx5IGdyYXNwIGhvdyBETUEgbWFwcGluZyBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIFZGSU8gc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24sIGlucHV0cywgYW5kIG91dHB1dHMgYW5kIHdoYXQgZGVjaXNpb25zIGl0IGlzIG1ha2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fZG1hX2RvX21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE2NDc9c3RhdGljIGludCB2ZmlvX2NoYW5nZV9kbWFfb3duZXIoc3RydWN0IHZmaW9fZG1hICpkbWEpXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNjc4LVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNjc5OnN0YXRpYyBpbnQgdmZpb19kbWFfZG9fbWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTY4MC1cdFx0XHQgICBzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwICptYXApXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0yODk0PXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9tYXBfZG1hKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTI5MDktXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjI5MTA6XHRyZXR1cm4gdmZpb19kbWFfZG9fbWFwKGlvbW11LCBcdTAwMjZtYXApO1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0yOTExLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWFgKioKCk9rYXksIHNvIEkmIzM5O20gcHJvY2Vzc2luZyB0aGlzIGNvZGUgYW5kIEkmIzM5O3ZlIGp1c3Qgbm90aWNlZCB0aGF0IGB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWFgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBzY29wZWQgdG8gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCB3aGljaCBpc24mIzM5O3QgaW5oZXJlbnRseSBhIHByb2JsZW0sIGJ1dCBpdCBkb2VzIG1lYW4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGFuZCBpZiB0aGF0IHNjb3BlIGlzIHRydWx5IHN1ZmZpY2llbnQuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFZGSU8gSU9NTVUgVHlwZSAxIHNjaGVtZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgYHN0YXRpY2AgZGVjbGFyYXRpb24gaXMgYXBwcm9wcmlhdGUgYW5kIGRvZXNuJiMzOTt0IGhpbmRlciBhbnkgcG90ZW50aWFsIGZ1dHVyZSBmbGV4aWJpbGl0eSBvciBpbnRyb2R1Y2UgYW55IHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBsaW1pdGF0aW9ucy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYHZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTI4MzU9c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX2dldF9pbmZvKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTI4OTMtXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjI4OTQ6c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWEoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0yODk1LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9MzA4MD1zdGF0aWMgbG9uZyB2ZmlvX2lvbW11X3R5cGUxX2lvY3RsKHZvaWQgKmlvbW11X2RhdGEsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0zMDkwLVx0Y2FzZSBWRklPX0lPTU1VX01BUF9ETUE6XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjMwOTE6XHRcdHJldHVybiB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWEoaW9tbXUsIGFyZyk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMwOTItXHRjYXNlIFZGSU9fSU9NTVVfVU5NQVBfRE1BOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgyNQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgVkZJTyBJT01NVSBJT0NUTCBFbnRyeSBQb2ludCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAgaXMgKnRoZSogaW9jdGwgaGFuZGxlciwgdGhlIG1haW4gZnVuY3Rpb24uIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gSXQgc2VlbXMgdGhlIGNvbm5lY3Rpb24gaGFwcGVucyB2aWEgdGhlIGB2ZmlvX2lvbW11X2RyaXZlcl9vcHNgIHN0cnVjdC4gTG9va2luZyBhdCB0aGF0LCB0aGUgYC5pb2N0bGAgZmllbGQgaXMgYXNzaWduZWQgdG8gYHZmaW9faW9tbXVfdHlwZTFfaW9jdGxgLiBSaWdodCwgc28gdGhhdCBjb25maXJtcyBpdCwgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIEkvTyBjb250cm9sIHJlcXVlc3RzIGlzIGluZGVlZCBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAuIE5vdyB0byBjb250aW51ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIEkmIzM5O2xsIG1vdmUgb24gdG8gY2hlY2sgYGFjcm5fdm1fcmFtX21hcGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fjcm5fdm1fcmFtX21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oPTE5OD1pbnQgYWNybl92bV9tZW1zZWdfdW5tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcCk7XG5kcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oOjE5OTppbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xuZHJpdmVycy92aXJ0L2Fjcm4vYWNybl9kcnYuaC0yMDAtdm9pZCBhY3JuX3ZtX2FsbF9yYW1fdW5tYXAoc3RydWN0IGFjcm5fdm0gKnZtKTtcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jPTEwOD1pbnQgYWNybl92bV9tZW1zZWdfbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXG4tLVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYy0xMTItXHRpZiAobWVtbWFwLVx1MDAzZXR5cGUgPT0gQUNSTl9NRU1NQVBfUkFNKVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYzoxMTM6XHRcdHJldHVybiBhY3JuX3ZtX3JhbV9tYXAodm0sIG1lbW1hcCk7XG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTExNC1cbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jPTEzMT1pbnQgYWNybl92bV9tZW1zZWdfdW5tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE0OS0vKipcbmRyaXZlcnMvdmlydC9hY3JuL21tLmM6MTUwOiAqIGFjcm5fdm1fcmFtX21hcCgpIC0gQ3JlYXRlIGEgUkFNIEVQVCBtYXBwaW5nIG9mIFVzZXIgVk0uXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE1MS0gKiBAdm06XHRcdFRoZSBVc2VyIFZNIHBvaW50ZXJcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE1NS0gKi9cbmRyaXZlcnMvdmlydC9hY3JuL21tLmM6MTU2OmludCBhY3JuX3ZtX3JhbV9tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTU3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MjUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5hdmlnYXRpbmcgdGhlIEFDUk4gTWVtb3J5IE1hcHBpbmcgTGFuZHNjYXBlKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBhY3JuX3ZtX3JhbV9tYXBgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgdmlydHVhbCBtYWNoaW5lJiMzOTtzIFJBTSBwcm9wZXJseSBtYXBwZWQsIG9idmlvdXNseS4gVGhlIGtleSB0aGluZyBpcyAqaG93KiBpdCBnZXRzIGNhbGxlZC4gTXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGNhbGxlZCBieSBzb21ldGhpbmcgaGlnaGVyIHVwIHRoZSBzdGFjay4gQW5kIHllcCwgY29uZmlybWVkIOKAkyBpdCBsb29rcyBsaWtlIGBhY3JuX3ZtX21lbXNlZ19tYXBgIGlzIHRoZSBvbmUgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIGludm9raW5nIGl0LiBTbywgYG1lbXNlZ19tYXBgIGlzIGhhbmRsaW5nIHRoZSBicm9hZGVyIG1lbW9yeSBzZWdtZW50IG1hcHBpbmcgdGFza3MsIGFuZCB0aGVuIGl0IGxldmVyYWdlcyB0aGUgbW9yZSBzcGVjaWFsaXplZCBgcmFtX21hcGAgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIFJBTSBtYXBwaW5nLiBJdCYjMzk7cyBhIG5pY2UsIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMsIHR5cGljYWwgb2YgYSB3ZWxsLWRlc2lnbmVkIGtlcm5lbCBtb2R1bGUuIGBtZW1zZWdfbWFwYCBwcm9iYWJseSBoYW5kbGVzIHRoaW5ncyBsaWtlIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlIHBhZ2UgdGFibGVzLCBtYW5hZ2luZyBwaHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9ucywgZGVhbGluZyB3aXRoIG1lbW9yeSBhdHRyaWJ1dGVzLCBhbmQgY29vcmRpbmF0aW5nIHdpdGggb3RoZXIgc3Vic3lzdGVtcywgYmVmb3JlIHVsdGltYXRlbHkgY2FsbGluZyBgcmFtX21hcGAgdG8gaGFuZGxlIHRoZSBhY3R1YWwgcGh5c2ljYWwgdG8gdmlydHVhbCBtYXBwaW5nIG9mIFJBTS4gVGhhdCYjMzk7cyBhIGdvb2QgbWVudGFsIG1vZGVsIHRvIGtlZXAgaW4gbWluZCBhcyBJIGRlbHZlIGZ1cnRoZXIgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXJjaGl0ZWN0dXJlLiBLbm93aW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fjcm5fdm1fbWVtc2VnX21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oPTE5Nj1pbnQgYWNybl9tbV9yZWdpb25fZGVsKHN0cnVjdCBhY3JuX3ZtICp2bSwgdTY0IHVzZXJfZ3BhLCB1NjQgc2l6ZSk7XG5kcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oOjE5NzppbnQgYWNybl92bV9tZW1zZWdfbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xuZHJpdmVycy92aXJ0L2Fjcm4vYWNybl9kcnYuaC0xOTgtaW50IGFjcm5fdm1fbWVtc2VnX3VubWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xuLS1cbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jPTEwOD1zdGF0aWMgbG9uZyBhY3JuX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0yMjMtXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYzoyMjQ6XHRcdHJldCA9IGFjcm5fdm1fbWVtc2VnX21hcCh2bSwgXHUwMDI2bWVtbWFwKTtcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTIyNS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYz04NT1pbnQgYWNybl9tbV9yZWdpb25fZGVsKHN0cnVjdCBhY3JuX3ZtICp2bSwgdTY0IHVzZXJfZ3BhLCB1NjQgc2l6ZSlcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTEwNy1cbmRyaXZlcnMvdmlydC9hY3JuL21tLmM6MTA4OmludCBhY3JuX3ZtX21lbXNlZ19tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTA5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqTmF2aWdhdGluZyB0aGUgQUNSTiBNZW1vcnkgTWFwcGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgbWVtb3J5IG1hcHBpbmcgaW4gdGhlIEFDUk4gaHlwZXJ2aXNvciwgYW5kIGl0IGxvb2tzIGxpa2UgYGFjcm5fdm1fbWVtc2VnX21hcGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gU2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBhY3JuX2Rldl9pb2N0bGAsIHRoYXQgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byB1bmRlcnN0YW5kLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgcGh5c2ljYWwgbWVtb3J5IGlzIGhhbmRsZWQgd2l0aGluIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvY2R4L2NkeC5jLTY2My0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NkeC9jZHguYzo2NjQ6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvY2R4L2NkeC5jLTY2NS0jZW5kaWZcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xuZHJpdmVycy9jaGFyL21lbS5jLTMyMC0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzIxOlx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjItI2VuZGlmXG4tLVxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwNi0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA3Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA4LSNlbmRpZlxuLS1cbmRyaXZlcnMvcGNpL21tYXAuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvcGNpL21tYXAuYy0xOS0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3BjaS9tbWFwLmM6MjA6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvcGNpL21tYXAuYy0yMS0jZW5kaWZcbi0tXG5kcml2ZXJzL3Vpby91aW8uYz03MzY9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fcGh5c2ljYWxfdm1fb3BzID0ge1xuZHJpdmVycy91aW8vdWlvLmMtNzM3LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvdWlvL3Vpby5jOjczODpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy91aW8vdWlvLmMtNzM5LSNlbmRpZlxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD03ODM9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtODM1LVx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XG5pbmNsdWRlL2xpbnV4L21tLmg6ODM2Olx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXG5pbmNsdWRlL2xpbnV4L21tLmgtODM3LVx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzEzMD1jb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMxMzE6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvbW0uaC0zMTMyLVx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTtcbi0tXG5tbS9tZW1vcnkuYz02OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbi0tXG5tbS9tZW1vcnkuYy02OTY3LS8qKlxubW0vbWVtb3J5LmM6Njk2ODogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3Ncbm1tL21lbW9yeS5jLTY5NjktICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3Ncbi0tXG5tbS9tZW1vcnkuYy02OTc4LSAqL1xubW0vbWVtb3J5LmM6Njk3OTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtNjk4MC1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbi0tXG5tbS9tZW1vcnkuYy03MDI3LX1cbm1tL21lbW9yeS5jOjcwMjg6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG5tbS9tZW1vcnkuYy03MDI5LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9NjMyPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODQtXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6Njg1Olx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY4Ni1cdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjU1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFjY2VzcyBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYWNjZXNzIG1ldGhvZHMuIEl0IGxvb2tzIGxpa2UgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdXNlZCBhcyB0aGUgYC5hY2Nlc3NgIG1lbWJlciB3aXRoaW4gdGhlIGB2bV9vcGVyYXRpb25zX3N0cnVjdGAuIEl0JiMzOTtzIGV4cG9ydGVkLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlbGF0ZWQuIE15IGN1cnJlbnQgdGhpbmtpbmcgaXMgdGhhdCB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGl0c2VsZiwgYW5kIHRoZW4gdGhlIG1vcmUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIHJlbGF0ZWQgcmVhZHMgYW5kIHdyaXRlcyBgczM5MF9wY2lfbW1pb193cml0ZWAgYW5kIGBzMzkwX3BjaV9tbWlvX3JlYWRgLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZXJlIGFyZSB0aGUgbW9yZSBkZXZpY2Utc3BlY2lmaWMgaW9jdGxzOiBgYWNybl9kZXZfaW9jdGxgIGFuZCBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAuCgpIb2xkIG9uLi4uIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAgYXJlIGFjdHVhbGx5IHN5c2NhbGxzIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIGBhY3JuX2Rldl9pb2N0bGAgaXMgdGhlIGlvY3RsIGZvciBBQ1JOLCBhbmQgYHZmaW9faW9tbXVfdHlwZTFfaW9jdGxgIGlzIGZvciBWRklPLiBJIGtub3cgYWJvdXQgdGhvc2UuIEkgYWxzbyBzZWUgdGhhdCBgaHZhX3RvX3BmbmAgaXMgY2FsbGVkIGJ5IGBrdm1fZm9sbG93X3BmbmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IHNldmVyYWwgS1ZNIGZ1bmN0aW9ucy4gSW50ZXJlc3RpbmcsIGJ1dCBga3ZtX2ZvbGxvd19wZm5gIGlzIHN0YXRpYyBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoYXQgbWVhbnMgSSBoYXZlIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoYXQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGt2bV9mb2xsb3dfcGZuYCBuZXh0LCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2ZvbGxvd19wZm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yODI1PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjgyNi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjgyNzpzdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4MjgtXHRcdFx0XHQgc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqbWFwLCBib29sIHdyaXRhYmxlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mzk9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudmlydC9rdm0va3ZtX21haW4uYzoyOTQwOlx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk0MS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTg3Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg4LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMzEtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMzI6c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAzMy17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDUxPWt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDU0LXtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1NTpcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTYtXHRcdC5zbG90ID0gc2xvdCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjgtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNjk6XHRyZXR1cm4ga3ZtX2ZvbGxvd19wZm4oXHUwMDI2a2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA3MC19XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDk3PXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA5OS1cdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2UgPSBOVUxMO1xudmlydC9rdm0va3ZtX21haW4uYzozMTAwOlx0c3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwMS1cdFx0LnNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbiksXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMTA2LVxudmlydC9rdm0va3ZtX21haW4uYzozMTA3Olx0KHZvaWQpa3ZtX2ZvbGxvd19wZm4oXHUwMDI2a2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwOC1cdHJldHVybiByZWZjb3VudGVkX3BhZ2U7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMTEyPWludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExNC17XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMTU6XHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xudmlydC9rdm0va3ZtX21haW4uYy0zMTE2LVx0XHQuc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbiksXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMTI4LVxudmlydC9rdm0va3ZtX21haW4uYzozMTI5Olx0bWFwLVx1MDAzZXBmbiA9IGt2bV9mb2xsb3dfcGZuKFx1MDAyNmtmcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMzAtXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihtYXAtXHUwMDNlcGZuKSlcbi0tXG52aXJ0L2t2bS9rdm1fbW0uaC0yNi1cbnZpcnQva3ZtL2t2bV9tbS5oOjI3OnN0cnVjdCBrdm1fZm9sbG93X3BmbiB7XG52aXJ0L2t2bS9rdm1fbW0uaC0yOC1cdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4tLVxudmlydC9rdm0va3ZtX21tLmgtNTgtXG52aXJ0L2t2bS9rdm1fbW0uaDo1OTprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCk7XG52aXJ0L2t2bS9rdm1fbW0uaC02MC1cbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTE1NT1zdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2My1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MTY0Olx0c3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHtcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTY1LVx0XHQuc2xvdCA9IGdwYy1cdTAwM2VtZW1zbG90LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg2NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzLgoKKipLVk0gU3ltYm9sIEFuYWx5c2lzOiBgX19rdm1fZmF1bHRpbl9wZm5gKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IHNldmVyYWwga2V5IEtWTSBmdW5jdGlvbnMg4oCTIHNwZWNpZmljYWxseSBgX19rdm1fZmF1bHRpbl9wZm5gLCBgX19nZm5fdG9fcGFnZWAsIGFuZCBgX19rdm1fdmNwdV9tYXBgIOKAkyBhcmUgYWxsIGZ1bm5lbGluZyBkb3duIHRvIGEgY2FsbCB0byBga3ZtX2ZvbGxvd19wZm5gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBHaXZlbiBob3cgd2lkZXNwcmVhZCB0aGUgdXNlIGFuZC9vciBleHBvcnQgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB3aXRoaW4gS1ZNLCBpdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBfX2t2bV9mYXVsdGluX3BmbmAgaXMgYSBwb3RlbnRpYWxseSBmcnVpdGZ1bCBzeW1ib2wgdG8gemVybyBpbiBvbiBmb3IgZGVlcGVyIGFuYWx5c2lzLiBJdCYjMzk7cyBhIGNlbnRyYWwgcG9pbnQgb2YgaW50ZXJhY3Rpb24uIEdpdmVuIHRoZSBpbnRlcmNvbm5lY3RlZG5lc3MgSSBzZWUgaGVyZSwgaXQgc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgdW5kZXJzdGFuZGluZyBhIGxhcmdlciBjaHVuayBvZiBLVk0mIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byBgX19rdm1fZmF1bHRpbl9wZm5gLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa3ZtX2ZhdWx0aW5fcGZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jPTE4NDg9c3RhdGljIGludCBrdm1fczJfZmF1bHRfZ2V0X3ZtYV9pbmZvKGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCxcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xODc4LVx0ICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZlxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTg3OTpcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0b1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTg4MC1cdCAqIGFjcXVpcmluZyBrdm0tXHUwMDNlbW11X2xvY2suXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTkwMz1zdGF0aWMgaW50IGt2bV9zMl9mYXVsdF9waW5fcGZuKGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCxcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xOTExLVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTkxMjpcdHMydmktXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oczJmZC1cdTAwM2VtZW1zbG90LCBnZXRfY2Fub25pY2FsX2dmbihzMmZkLCBzMnZpKSxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE5MTMtXHRcdFx0XHQgICAgICBrdm1faXNfd3JpdGVfZmF1bHQoczJmZC1cdTAwM2V2Y3B1KSA/IEZPTExfV1JJVEUgOiAwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE5NDktXHRcdFx0ICogbGFyZ2VzdCBxdWFudGl0eSB3ZSBjYW4gbWFwLiAgSWYgaW5zdGVhZCBpdCB3YXMgbWFwcGVkXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxOTUwOlx0XHRcdCAqIHZpYSBfX2t2bV9mYXVsdGluX3BmbigpLCB2bWFfcGFnZXNpemUgaXMgc2V0IHRvIFBBR0VfU0laRVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTk1MS1cdFx0XHQgKiBhbmQgbXVzdCBub3QgYmUgdXBncmFkZWQuXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM1OD1zdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQxMS1cdGlmICghKmlzX2dtZW0pIHtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE0MTI6XHRcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKG1lbXNsb3QsIGdmbiwgd3JpdGVfZmF1bHQgPyBGT0xMX1dSSVRFIDogMCxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MTMtXHRcdFx0XHRcdFx1MDAyNndyaXRhYmxlLCBcdTAwMjZwYWdlKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYz01MDY9aW50IGt2bXBwY19ib29rM3NfaHZfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2h2LmMtNjA1LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2h2LmM6NjA2Olx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0aW5nID8gRk9MTF9XUklURSA6IDAsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYy02MDctXHRcdFx0XHRcdTAwMjZ3cml0ZV9vaywgXHUwMDI2cGFnZSk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM9ODIxPWludCBrdm1wcGNfYm9vazNzX2luc3RhbnRpYXRlX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTg0Mi1cdGh2YSA9IGdmbl90b19odmFfbWVtc2xvdChtZW1zbG90LCBnZm4pO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM6ODQzOlx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0aW5nID8gRk9MTF9XUklURSA6IDAsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy04NDQtXHRcdFx0XHRcdTAwMjZ1cGdyYWRlX3dyaXRlLCBcdTAwMjZwYWdlKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11X2hvc3QuYz0zMjA9c3RhdGljIGlubGluZSBpbnQga3ZtcHBjX2U1MDBfc2hhZG93X21hcChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXVfaG9zdC5jLTM1NC1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXVfaG9zdC5jOjM1NTpcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgRk9MTF9XUklURSwgXHUwMDI2d3JpdGFibGUsIFx1MDAyNnBhZ2UpO1xuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdV9ob3N0LmMtMzU2LVx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSkge1xuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTUzNj1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTU5OS1cdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjYwMDpcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0byBhY3F1aXJpbmdcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYwMS1cdCAqIGt2bS1cdTAwM2VtbXVfbG9jay5cbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MTUtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo2MTY6XHRoZm4gPSBfX2t2bV9mYXVsdGluX3BmbihtZW1zbG90LCBnZm4sIGlzX3dyaXRlID8gRk9MTF9XUklURSA6IDAsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MTctXHRcdFx0XHRcdTAwMjZ3cml0YWJsZSwgXHUwMDI2cGFnZSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM9MzM9aW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYpXG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtNzMtXHRcdFx0c2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZi1cdTAwM2VnZm4pO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6NzQ6XHRcdGYtXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oc2xvdCwgZi1cdTAwM2VnZm4sIGZvbGwsIFx1MDAyNmYtXHUwMDNld3JpdGFibGUsIFx1MDAyNmYtXHUwMDNlcGFnZSk7XG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy03NS1cbi0tXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy04Ny1cdFx0XHRmb2xsIFx1MDAyNj0gfkZPTExfTk9XQUlUO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6ODg6XHRcdFx0Zi1cdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihzbG90LCBmLVx1MDAzZWdmbiwgZm9sbCwgXHUwMDI2Zi1cdTAwM2V3cml0YWJsZSwgXHUwMDI2Zi1cdTAwM2VwYWdlKTtcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTg5LVx0XHR9XG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM9MTI5PWludCBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZiwgZ2ZuX3QgZ2ZuLCBib29sIHcpXG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTM1LVx0Zi1cdTAwM2VnZm4gPSBnZm47XG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxMzY6XHRmLVx1MDAzZXBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgZm9sbCwgXHUwMDI2Zi1cdTAwM2V3cml0YWJsZSwgXHUwMDI2Zi1cdTAwM2VwYWdlKTtcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTEzNy1cdGlmIChpc19ub3Nsb3RfcGZuKGYtXHUwMDNlcGZuKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2NTY9c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY2NC1cdGZvbGwgfD0gRk9MTF9OT1dBSVQ7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2NjU6XHRmYXVsdC1cdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIGZvbGwsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NjYtXHRcdFx0XHQgICAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlbWFwX3dyaXRhYmxlLCBcdTAwMjZmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY5NC1cdGZvbGwgXHUwMDI2PSB+Rk9MTF9OT1dBSVQ7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2OTU6XHRmYXVsdC1cdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIGZvbGwsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2OTYtXHRcdFx0XHQgICAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlbWFwX3dyaXRhYmxlLCBcdTAwMjZmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9Njk0Nj12b2lkIHZteF9zZXRfYXBpY19hY2Nlc3NfcGFnZV9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY5ODctXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6Njk4ODpcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgRk9MTF9XUklURSwgXHUwMDI2d3JpdGFibGUsIFx1MDAyNnJlZmNvdW50ZWRfcGFnZSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY5ODktXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pKVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjg1PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTMxMC1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMzExOmt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTMxMi1cdFx0XHQgICAgdW5zaWduZWQgaW50IGZvbGwsIGJvb2wgKndyaXRhYmxlLFxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMzE1PXN0YXRpYyBpbmxpbmUga3ZtX3Bmbl90IGt2bV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTMxOC17XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTMxOTpcdHJldHVybiBfX2t2bV9mYXVsdGluX3Bmbihrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pLCBnZm4sXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTMyMC1cdFx0XHRcdCB3cml0ZSA/IEZPTExfV1JJVEUgOiAwLCB3cml0YWJsZSwgcmVmY291bnRlZF9wYWdlKTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMzI9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTAtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNTE6a3ZtX3Bmbl90IF9fa3ZtX2ZhdWx0aW5fcGZuKGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cdFx0XHQgICAgdW5zaWduZWQgaW50IGZvbGwsIGJvb2wgKndyaXRhYmxlLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA3MC19XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNzE6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fa3ZtX2ZhdWx0aW5fcGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIGBfX2t2bV9mYXVsdGluX3BmbmAgaXMgYSBLVk0gaW50ZXJuYWwgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGEgdXNlZnVsIHBvaW50IHRvIHN0YXJ0IGxvb2tpbmcgYXQuIExldCYjMzk7cyBzZWUuLi4gdGhlIHJlYWwgaW50ZXJlc3RpbmcgcG9pbnQgaGVyZSBpcyB0aGUgZm9jdXMgb24gTU1JTyBvcGVyYXRpb25zLgoKSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhvc2UgYHMzOTBfcGNpX21taW9fd3JpdGVgIGFuZCBgczM5MF9wY2lfbW1pb19yZWFkYCBzeXNjYWxscy4gUmlnaHQsIHRoZXkgKmFyZSogc3lzY2FsbHMsIHdoaWNoIG1lYW5zIFN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhlbSBkaXJlY3RseSBpZiB0aGV5JiMzOTtyZSBkZXNjcmliZWQgaW4gdGhlIHN5emxhbmcgZGVmaW5pdGlvbi4gSG1tLCBgczM5MF9wY2lfbW1pb193cml0ZWAgaXMgZGVmaW5pdGVseSBhIHN5c2NhbGwuCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgYXJlIHRoZXNlIHdvcnRoIGZ1enppbmc/IFllcywgb2YgY291cnNlLCB0aGV5IGFyZSBzeXNjYWxscy4KCkFoLCBidXQgdGhleSBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBzcGVjaWZpYyB0byBzMzkwLiBUaGF0JiMzOTtzIGEgYml0IGxpbWl0aW5nLiBIb3dldmVyLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBnb29kIG5ld3MsIGFzIGEgY29yZSBNTSBtb2RpZmljYXRpb24gb3BlbnMgdXAgbWFueSBmdXp6aW5nIHBhdGhzLiBJIGNhbiByZWFjaCB0aGlzIHZpYSBLVk0sIFZGSU8sIEFDUk4sIGFuZCBldmVuIHRoZSBnZW5lcmljIGBnZW5lcmljX2FjY2Vzc19waHlzYCBwYXRoLiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXRzZWxmIGlzIHVzZWQgYnkgYC9kZXYvbWVtYCAodmlhIGBtbWFwX21lbV9vcHNgKSwgUENJIE1NSU8gbWFwcGluZyAoYHBjaV9waHlzX3ZtX29wc2ApLCBhbmQgVUlPIChgdWlvX3BoeXNpY2FsX3ZtX29wc2ApLiBTbywgSSBzaG91bGQgYmUgYWJsZSB0byBmdXp6IHRoZSBNTUlPIGxvZ2ljIHRocm91Z2ggYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBUaGF04oCZcyBhIG11Y2ggbW9yZSBnZW5lcmFsIGFwcHJvYWNoLgoKT2theSwgbm93IGxldCYjMzk7cyBnbyBhbmQgY2hlY2sgd2hvIGNhbGxzIGBmb2xsb3dfcGZubWFwX3N0YXJ0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9sbG93X3Bmbm1hcF9zdGFydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM9MTI4PVNZU0NBTExfREVGSU5FMyhzMzkwX3BjaV9tbWlvX3dyaXRlLCB1bnNpZ25lZCBsb25nLCBtbWlvX2FkZHIsXG4tLVxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTE4My1cdGFyZ3Mud3JpdGVfZmF1bHQgPSB0cnVlO1xuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjE4NDpcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMTg1LVx0aWYgKHJldCkge1xuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTE4Ni1cdFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjE4NzpcdFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODgtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jPTI4ND1TWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb19yZWFkLCB1bnNpZ25lZCBsb25nLCBtbWlvX2FkZHIsXG4tLVxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTMzNi1cdGFyZ3Mud3JpdGVfZmF1bHQgPSBmYWxzZTtcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYzozMzc6XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTMzOC1cdGlmIChyZXQpIHtcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0zMzktXHRcdGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cdTAwM2VtbSwgbW1pb19hZGRyLCAwLCBOVUxMKTtcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYzozNDA6XHRcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzQxLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTQwPXN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU1MTpcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU1Mi1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU2NC1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NTY1Olx0XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NjYtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYz0xNTY9aW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxuLS1cbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTkyLVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYzoxOTM6XHRcdFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTk0LVx0XHRcdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMxMzQ9c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTMxNjYtfTtcbmluY2x1ZGUvbGludXgvbW0uaDozMTY3OmludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTMxNjgtdm9pZCBmb2xsb3dfcGZubWFwX2VuZChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKTtcbi0tXG5tbS9tZW1vcnkuYz02ODA4PXN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmMtNjgyMi0vKipcbm1tL21lbW9yeS5jOjY4MjM6ICogZm9sbG93X3Bmbm1hcF9zdGFydCgpIC0gTG9vayB1cCBhIHBmbiBtYXBwaW5nIGF0IGEgdXNlciB2aXJ0dWFsIGFkZHJlc3Ncbm1tL21lbW9yeS5jLTY4MjQtICogQGFyZ3M6IFBvaW50ZXIgdG8gc3RydWN0IEBmb2xsb3dfcGZubWFwX2FyZ3Ncbi0tXG5tbS9tZW1vcnkuYy02ODU0LSAqL1xubW0vbWVtb3J5LmM6Njg1NTppbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxubW0vbWVtb3J5LmMtNjg1Ni17XG4tLVxubW0vbWVtb3J5LmMtNjk0Ny19XG5tbS9tZW1vcnkuYzo2OTQ4OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfc3RhcnQpO1xubW0vbWVtb3J5LmMtNjk0OS1cbm1tL21lbW9yeS5jLTY5NTAtLyoqXG5tbS9tZW1vcnkuYzo2OTUxOiAqIGZvbGxvd19wZm5tYXBfZW5kKCk6IEVuZCBhIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBwcm9jZXNzXG5tbS9tZW1vcnkuYy02OTUyLSAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzXG5tbS9tZW1vcnkuYy02OTUzLSAqXG5tbS9tZW1vcnkuYzo2OTU0OiAqIE11c3QgYmUgdXNlZCBpbiBwYWlyIG9mIGZvbGxvd19wZm5tYXBfc3RhcnQoKS4gIFNlZSB0aGUgc3RhcnQoKSBmdW5jdGlvblxubW0vbWVtb3J5LmMtNjk1NS0gKiBhYm92ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbi0tXG5tbS9tZW1vcnkuYz02OTc5PWludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtNjk5NC1yZXRyeTpcbm1tL21lbW9yeS5jOjY5OTU6XHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbm1tL21lbW9yeS5jLTY5OTYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm1tL21lbW9yeS5jLTcwMDUtXG5tbS9tZW1vcnkuYzo3MDA2Olx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG5tbS9tZW1vcnkuYy03MDA3LVx0XHRnb3RvIG91dF91bm1hcDtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mzk9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk1Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk1NzpcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xudmlydC9rdm0va3ZtX21haW4uYy0yOTU4LVx0aWYgKHIpIHtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzEtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NzI6XHRcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVx0XHRpZiAocikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ0MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBEZXBlbmRlbmN5IENoYWluKioKCk9rYXksIHNvIHRoZSBgZm9sbG93X3Bmbm1hcF9zdGFydGAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBwb2ludCBvZiB0aGlzIHBhdGNoLCBhcyBpdCYjMzk7cyB0aGUgdGFyZ2V0IHRoYXQgZ2V0cyBjYWxsZWQgYnkgdGhlIHVwZGF0ZWQgYHBmbm1hcF9hcmdzX3NldHVwYC4gQmFzZWQgb24gdGhlIGNvZGUsIGl0JiMzOTtzIHVzZWQgYnkgc2V2ZXJhbCBjb3JlIGNvbXBvbmVudHM6IGBzMzkwX3BjaV9tbWlvX3dyaXRlYCwgYHMzOTBfcGNpX21taW9fcmVhZGAsIGBmb2xsb3dfZmF1bHRfcGZuYCBmb3IgVkZJTywgYGFjcm5fdm1fcmFtX21hcGAgZm9yIEFDUk4sIHRoZSBnZW5lcmljIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb24gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBhbmQgYGh2YV90b19wZm5fcmVtYXBwZWRgIHdpdGhpbiBLVk0uCgpHaXZlbiB0aGF0LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAsIHRvbywgdGhleSBzaG91bGQgYmUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEFuZCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIHNlZSBpZiBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAgYW5kIGBhY3JuX2Rldl9pb2N0bGBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19pb21tdV90eXBlMV9pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTI5NjY9c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX2RpcnR5X3BhZ2VzKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMwNzktXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjMwODA6c3RhdGljIGxvbmcgdmZpb19pb21tdV90eXBlMV9pb2N0bCh2b2lkICppb21tdV9kYXRhLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0zMDgxLVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0zMjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19pb21tdV9kcml2ZXJfb3BzIHZmaW9faW9tbXVfZHJpdmVyX29wc190eXBlMSA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMyNTUtXHQucmVsZWFzZVx0XHQ9IHZmaW9faW9tbXVfdHlwZTFfcmVsZWFzZSxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6MzI1NjpcdC5pb2N0bFx0XHRcdD0gdmZpb19pb21tdV90eXBlMV9pb2N0bCxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMzI1Ny1cdC5hdHRhY2hfZ3JvdXBcdFx0PSB2ZmlvX2lvbW11X3R5cGUxX2F0dGFjaF9ncm91cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyOTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogVGhlIFN5c3RlbSBpcyBGcm96ZW4qKgoKSG1tLCB0aGlzIGZlZWxzLi4uIHN0YXRpYy4gSXQmIzM5O3MgbGlrZSB0aGUgc3lzdGVtIGlzIGNvbXBsZXRlbHkgdW5yZXNwb25zaXZlLCB3aGljaCBpcyBjb25jZXJuaW5nLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgc29tZXRoaW5nIGhhcyBncm91bmQgdG8gYSBoYWx0LiBXZSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBhdHRlbnRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNvcmUgaW50ZXJmYWNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYWNybl9kZXZfaW9jdGxgLiBUaGF0IGZ1bmN0aW9uIGNhbGwgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGhvbGRpbmcgdXAgdGhlIHdvcmtzLCBlc3BlY2lhbGx5IGlmIHRoZXJlIGlzIGFuIGlzc3VlIHdpdGggdGhlIHVuZGVybHlpbmcgZGV2aWNlIG9yIGFueSByZWxhdGVkIGxvY2tpbmcuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZW50cnkgcG9pbnQsIGFuZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWNybl9kZXZfaW9jdGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L2Fjcm4vaHNtLmM9NDM9c3RhdGljIGludCBwbWNtZF9pb2N0bCh1NjQgY21kLCB2b2lkIF9fdXNlciAqdXB0cilcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0xMDctICovXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYzoxMDg6c3RhdGljIGxvbmcgYWNybl9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0xMDktXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBpb2N0bF9wYXJhbSlcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYz00OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNybl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTQ5My1cdC5yZWxlYXNlXHQ9IGFjcm5fZGV2X3JlbGVhc2UsXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYzo0OTQ6XHQudW5sb2NrZWRfaW9jdGwgPSBhY3JuX2Rldl9pb2N0bCxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTQ5NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcyMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgZm9yIFNlbGVjdGluZyBLZXJuZWwgQVBJIEVudHJ5IFBvaW50cyoqCgpPa2F5LCB0aGlzIHNpdHVhdGlvbiBmZWVscyBhIGJpdCBzdGF0aWMsIGJ1dCBsZXQmIzM5O3MgYnJlYWsgaXQgZG93biBtZXRob2RpY2FsbHkuIE15IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBBUEkgZW50cnkgcG9pbnRzIHRoYXQgbWVldCB0aGUgY3JpdGVyaWE6IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkLiBDb25zaWRlcmluZyB0aGF0LCBJIHNlZSB0aGF0IHRoZSBwb3RlbnRpYWwgZnVuY3Rpb25zIGFyZToKKiAgIGBmb2xsb3dfcGZubWFwX3N0YXJ0YAoqICAgYGdlbmVyaWNfYWNjZXNzX3BoeXNgCiogICBgX19rdm1fZmF1bHRpbl9wZm5gCgpJJiMzOTtsbCByZXZpc2l0IGBfX2t2bV9mYXVsdGluX3BmbmAuIEl0JiMzOTtzIGV4cG9ydGVkLCBidXQgZm9yIEtWTSYjMzk7cyBpbnRlcm5hbCB1c2UuIE9rYXkuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgZml0IHRoZSBiaWxsPyBZZXMsIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFyZSBib3RoIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLgoKV2hhdCBhYm91dCBgczM5MF9wY2lfbW1pb193cml0ZWA/IFNpbmNlIHRoaXMgaXMgYSBzeXNjYWxsLCBpdCB3b3VsZCBiZSBhIHZlcnkgZ29vZCBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgcHJvbWlzaW5nLCBidXQgSSBzZWUgdGhhdCBpdCBpcyBzcGVjaWZpYyB0byBzMzkwLiBTeXprYWxsZXIgY2FuIGZ1enogaXQgaWYgaXQgaXMgcnVubmluZyBvbiBzMzkwLgoKQW5kIHRoZSBwcm9tcHQgc2F5czogJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gVGhpcyBtZWFucyBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAgYXJlIHByb21pc2luZy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIEkgaGF2ZSB0byB3b3JrIHdpdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOgoqICAgYENPTkZJR19LVk1gCiogICBgQ09ORklHX1ZGSU9gCiogICBgQ09ORklHX1ZGSU9fR1JPVVBgCiogICBgQ09ORklHX1ZGSU9fQ09OVEFJTkVSYAoqICAgYENPTkZJR19WRklPX0lPTU1VX1RZUEUxYAoqICAgYENPTkZJR19BQ1JOX0dVRVNUYAoKV2FpdCwgYEFDUk5fR1VFU1RgIGlzIHNwZWNpZmljIHRvIHg4Ni4gYFZGSU9fSU9NTVVfVFlQRTFgIGlzIHNlbGVjdGVkIGJ5IGBWRklPX0NPTlRBSU5FUmAgaWYgYE1NVSAmYW1wOyZhbXA7IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpYC4gU28gdGhpcyBtZWFucyBJIGNhbiBzaW1wbGlmeSB0aGUgY29uZmlndXJhdGlvbi4gQWxsIEkgbmVlZCB0byBlbmFibGUgYXJlOiBgVkZJT2AsIGBWRklPX0dST1VQYCwgYFZGSU9fQ09OVEFJTkVSYCwgYFZGSU9fSU9NTVVfVFlQRTFgLiBBbmQgb2YgY291cnNlLCBgS1ZNYC4KCkkmIzM5O2xsIGNoZWNrIHRoZSBLVk0gZGVwZW5kZW5jaWVzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWc9MTY9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xNy1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzoxODpjb25maWcgS1ZNXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzAtXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MzE6Y29uZmlnIEtWTV9NSVBTX0RFQlVHX0NPUDBfQ09VTlRFUlNcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7TWFpbnRhaW4gY291bnRlcnMgZm9yIENPUDAgYWNjZXNzZXNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI2OmNvbmZpZyBLVk1fQk9PSzNTX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNy1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyOTpjb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzAtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00NC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0NTpjb25maWcgS1ZNX0JPT0szU18zMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzMyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTI2OmNvbmZpZyBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjk6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIHRoZSBQOSBlbnRyeSBwb2ludFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0My1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgdGltaW5nIGZvciBoeXBlcnZpc29yIHJlYWwtbW9kZSBjb2RlIChmb3IgUE9XRVI4KVwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTYtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTU3OmNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7TmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTcxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QTVVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtIeXBlcnZpc29yIFBlcmYgZXZlbnRzIGZvciBLVk0gQm9vazNzLUhWXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4My1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9CT09LRV9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4NS1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODYtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg3OmNvbmZpZyBLVk1fRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O0RldGFpbGVkIGV4aXQgdGltaW5nXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5Ny1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTg6Y29uZmlnIEtWTV9FNTAwVjJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTktXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMi1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTM6Y29uZmlnIEtWTV9FNTAwTUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTQtXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9NUElDXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjMwLVx0Ym9vbCBcJiMzNDtLVk0gaW4ta2VybmVsIE1QSUMgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0MC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNDE6Y29uZmlnIEtWTV9YSUNTXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQyLVx0Ym9vbCBcJiMzNDtLVk0gaW4ta2VybmVsIFhJQ1MgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1MC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTE6Y29uZmlnIEtWTV9YSVZFXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUyLVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZz0yMj1zb3VyY2UgXCYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1wmIzM0O1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTIzLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTgyNj1zb3VyY2UgXCYjMzQ7YXJjaC94ODYveGVuL0tjb25maWdcJiMzNDtcbmFyY2gveDg2L0tjb25maWctODI3LVxuYXJjaC94ODYvS2NvbmZpZzo4Mjg6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy04MjktXHRib29sIFwmIzM0O0tWTSBHdWVzdCBzdXBwb3J0IChpbmNsdWRpbmcga3ZtY2xvY2spXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4tLVxudmlydC9rdm0vS2NvbmZpZy0zLVxudmlydC9rdm0vS2NvbmZpZzo0OmNvbmZpZyBLVk1fQ09NTU9OXG52aXJ0L2t2bS9LY29uZmlnLTUtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTM5PWNvbmZpZyBORUVEX0tWTV9ESVJUWV9SSU5HX1dJVEhfQklUTUFQXG4tLVxudmlydC9rdm0vS2NvbmZpZy00Mi1cbnZpcnQva3ZtL0tjb25maWc6NDM6Y29uZmlnIEtWTV9NTUlPXG52aXJ0L2t2bS9LY29uZmlnLTQ0LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTQ1LVxudmlydC9rdm0vS2NvbmZpZzo0Njpjb25maWcgS1ZNX0FTWU5DX1BGXG52aXJ0L2t2bS9LY29uZmlnLTQ3LSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZy00OS0jIFRvZ2dsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaXJlY3Qgbm90aWZpY2F0aW9uIGFuZCBiYXRjaCBqb2JcbnZpcnQva3ZtL0tjb25maWc6NTA6Y29uZmlnIEtWTV9BU1lOQ19QRl9TWU5DXG52aXJ0L2t2bS9LY29uZmlnLTUxLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz01OT1jb25maWcgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuLS1cbnZpcnQva3ZtL0tjb25maWctNjEtXG52aXJ0L2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fVkZJT1xudmlydC9rdm0vS2NvbmZpZy02My0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9NjU9Y29uZmlnIEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xuLS1cbnZpcnQva3ZtL0tjb25maWctNjctXG52aXJ0L2t2bS9LY29uZmlnOjY4OmNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbnZpcnQva3ZtL0tjb25maWctNjktICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzAtXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9LY29uZmlnLTcyLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTczLVxudmlydC9rdm0vS2NvbmZpZzo3NDpjb25maWcgS1ZNX0NPTVBBVFxudmlydC9rdm0vS2NvbmZpZy03NS0gICAgICAgZGVmX2Jvb2wgeVxuLS1cbnZpcnQva3ZtL0tjb25maWc9OTE9Y29uZmlnIEhBVkVfS1ZNX1BNX05PVElGSUVSXG4tLVxudmlydC9rdm0vS2NvbmZpZy05My1cbnZpcnQva3ZtL0tjb25maWc6OTQ6Y29uZmlnIEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG52aXJ0L2t2bS9LY29uZmlnLTk1LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk2LVxudmlydC9rdm0vS2NvbmZpZzo5Nzpjb25maWcgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xudmlydC9rdm0vS2NvbmZpZy05OC0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy05OS1cbnZpcnQva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG52aXJ0L2t2bS9LY29uZmlnLTEwMS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy0xMDItXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTU1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWxpemF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyBgS1ZNYC4uLiB5ZWFoLCB0aGF0IGZhbGxzIHNxdWFyZWx5IHVuZGVyIHRoZSBgVklSVFVBTElaQVRJT05gIHVtYnJlbGxhLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHJlbGF0aW9uc2hpcC4gVGhlcmVmb3JlLCBhbnkgYW5hbHlzaXMgb3IgY29uZmlndXJhdGlvbiBJJiMzOTttIGRvaW5nIHJlbGF0ZWQgdG8gYEtWTWAgaW5oZXJlbnRseSByZXF1aXJlcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgYW5kIGV4YW1pbmF0aW9uIG9mIHRoZSBicm9hZGVyIGBWSVJUVUFMSVpBVElPTmAgcHJpbmNpcGxlcyBhbmQgdGVjaG5vbG9naWVzLiBUaGUgZGVwZW5kZW5jeSBpcyBjbGVhci4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIGBLVk1gIHBhdGgsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIGBWSVJUVUFMSVpBVElPTmAgaXMgY3VycmVudCBhbmQgdGhhdCBJIGhhdmUgaWRlbnRpZmllZCB0aGUgcmVsZXZhbnQgY29tcG9uZW50cyB0aGF0IHVuZGVycGluIGFueSB3b3JrIEkmIzM5O20gdW5kZXJ0YWtpbmcuIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIGNoZWNrIG15IGV4aXN0aW5nIGtub3dsZWRnZSBiYXNlIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGF0IHRoZSBgVklSVFVBTElaQVRJT05gIGxheWVyIHRoYXQgd2lsbCBpbXBhY3QgYEtWTWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSVJUVUFMSVpBVElPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNy1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctNy1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWc9NT1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTYtXG5hcmNoL21pcHMva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL21pcHMva3ZtL0tjb25maWctOC1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctNy1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWctNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3OTYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogVmlydHVhbGl6YXRpb24gYW5kIFZGSU8qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgdmlydHVhbGl6YXRpb24gc29sdXRpb24uIFRoZSBwcm9ibGVtIGRpY3RhdGVzIGl0IOKAkyB3ZSAqbmVlZCogdmlydHVhbGl6YXRpb24uIE5vdywgZ2l2ZW4gdGhlIGltcGxpZWQgcmVxdWlyZW1lbnRzLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcGFydGljdWxhcmx5IHBvdGVudCBjb250ZW5kZXI6IGBWRklPYC4gTGV0JiMzOTtzIGV4cGxvcmUgaXRzIGNhcGFiaWxpdGllcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgaXNzdWUgYXQgaGFuZC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgVkZJT2AgYW5kIHNlZSBpZiBpdCYjMzk7cyB0aGUgcmlnaHQgZml0IGZvciB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MDk9Y29uZmlnIEFQX0RFQlVHXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODIyLVxuYXJjaC9zMzkwL0tjb25maWc6ODIzOmNvbmZpZyBWRklPX0NDV1xuYXJjaC9zMzkwL0tjb25maWctODI0LVx0ZGVmX3RyaXN0YXRlIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cdGRlZl90cmlzdGF0ZSBuXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvdmZpby9LY29uZmlnOjI6bWVudWNvbmZpZyBWRklPXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnPTE2PWlmIFZGSU9cbmRyaXZlcnMvdmZpby9LY29uZmlnOjE3OmNvbmZpZyBWRklPX0RFVklDRV9DREVWXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY2RldiAvZGV2L3ZmaW8vZGV2aWNlcy92ZmlvWFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTI5LVxuZHJpdmVycy92ZmlvL0tjb25maWc6MzA6Y29uZmlnIFZGSU9fR1JPVVBcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo0MDpjb25maWcgVkZJT19DT05UQUlORVJcbmRyaXZlcnMvdmZpby9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjb250YWluZXIgL2Rldi92ZmlvL3ZmaW9cJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz01Mj1pZiBWRklPX0NPTlRBSU5FUlxuZHJpdmVycy92ZmlvL0tjb25maWc6NTM6Y29uZmlnIFZGSU9fSU9NTVVfVFlQRTFcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU0LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ni1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjU3OmNvbmZpZyBWRklPX0lPTU1VX1NQQVBSX1RDRVxuZHJpdmVycy92ZmlvL0tjb25maWctNTgtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnPTYxPWVuZGlmXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02Mi1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjYzOmNvbmZpZyBWRklPX05PSU9NTVVcbmRyaXZlcnMvdmZpby9LY29uZmlnLTY0LVx0Ym9vbCBcJiMzNDtWRklPIE5vLUlPTU1VIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy03Ny1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjc4OmNvbmZpZyBWRklPX1ZJUlFGRFxuZHJpdmVycy92ZmlvL0tjb25maWctNzktXHRib29sXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctODItXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo4Mzpjb25maWcgVkZJT19ERUJVR0ZTXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RXhwb3J0IFZGSU8gaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctNy1cbmRyaXZlcnMvdmZpby9jZHgvS2NvbmZpZzo4OmNvbmZpZyBWRklPX0NEWFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTktXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIENEWCBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZz0xPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctMy1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo0OmNvbmZpZyBWRklPX0ZTTF9NQ1xuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctMi1cbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWc6Mzpjb25maWcgVkZJT19NREVWXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTQtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIHBsYXRmb3JtIGRldmljZXNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6NTpjb25maWcgVkZJT19QTEFURk9STV9CQVNFXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy04LVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6OTpjb25maWcgVkZJT19QTEFURk9STVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IHBsYXRmb3JtIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTE4LVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6MTk6Y29uZmlnIFZGSU9fQU1CQVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEFNQkEgZGV2aWNlcyAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZz0yPWlmIFZGSU9fUExBVEZPUk1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjM6Y29uZmlnIFZGSU9fUExBVEZPUk1fQ0FMWEVEQVhHTUFDX1JFU0VUXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBjYWx4ZWRhIHhnbWFjIHJlc2V0IChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTktXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QTEFURk9STV9BTURYR0JFX1JFU0VUXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQU1EIFhHQkUgcmVzZXQgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctMTYtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzoxNzpjb25maWcgVkZJT19QTEFURk9STV9CQ01GTEVYUk1fUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBCcm9hZGNvbSBGbGV4Uk0gcmVzZXQgKERFUFJFQ0FURUQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODYxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIFZpcnR1YWxpemF0aW9uIEZ1bmRhbWVudGFscyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgKlZGSU8qLCBzcGVjaWZpY2FsbHkgdGhlIGNvcmUgY29tcG9uZW50czogYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAsIGFuZCB0aGUgSU9NTVUgYXNwZWN0LCBgVkZJT19JT01NVV9UWVBFMWAuIFRoYXQmIzM5O3MgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciBQQ0kgcGFzc3Rocm91Z2gsIHdoaWNoIGlzIGNydWNpYWwuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoYXQsIGl0IG5hdHVyYWxseSBtZWFucyB3ZSYjMzk7cmUgYWxzbyB0b3VjaGluZyBvbiAqS1ZNKiwgdGhlIGtlcm5lbC1iYXNlZCB2aXJ0dWFsIG1hY2hpbmUgaXRzZWxmLiBDbGVhcmx5LCB0aGUgb3ZlcmFyY2hpbmcgY29uY2VwdCBoZXJlIGlzICpWSVJUVUFMSVpBVElPTiouIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kLgoKR2l2ZW4gdGhpcyBjb250ZXh0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uc2lkZXIgKkFDUk5fR1VFU1QqLiBXZSBuZWVkIHRvIHNlZSBob3cgQUNSTiBpbnRlcmFjdHMgd2l0aCB0aGVzZSBjb25jZXB0cy4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFDUk5fR1VFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz04Njg9Y29uZmlnIEpBSUxIT1VTRV9HVUVTVFxuLS1cbmFyY2gveDg2L0tjb25maWctODc2LVxuYXJjaC94ODYvS2NvbmZpZzo4Nzc6Y29uZmlnIEFDUk5fR1VFU1RcbmFyY2gveDg2L0tjb25maWctODc4LVx0Ym9vbCBcJiMzNDtBQ1JOIEd1ZXN0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBhbmQgS1ZNIEZvY3VzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBmb2N1c2luZyBvbiBmdXp6aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBLVk0sIGFuZCBWRklPIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUuLi4gdGhpcyBzcGVjaWZpYyB4ODYgc3R1ZmYsIHdlIGNhbiBza2lwIGl0IGZvciBub3c7IG5vdCByZWxldmFudCB0byB0aGUgY29yZSBjb21wb25lbnRzIHdlJiMzOTtyZSB0YXJnZXRpbmcuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgaXMgbGlrZWx5IGluIGBtbS9tZW1vcnkuY2AuIFNvIHdlIHNob3VsZCBiZSBmb2N1c2luZyBvbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGBfX2t2bV9mYXVsdGluX3BmbmAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBZZXAsIGBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUxgIHRlbGxzIHVzIGl0JiMzOTtzIGF2YWlsYWJsZSwgaXQmIzM5O3MgYSBjb3JlIEtWTSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggcGFnZSBmYXVsdHMuIEdvb2QgY2FuZGlkYXRlIGZvciBhIGZ1enogdGFyZ2V0LgoKTm93LCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuIFRoYXQmIzM5O3MgZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MX0dQTGAsIHNvIGl04oCZcyB1c2VkIGJ5IHRoaW5ncyBsaWtlIGAvZGV2L21lbWAgYW5kIFBDSSBtbWFwLiBJbXBvcnRhbnQuCgpBbmQgZmluYWxseSwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbHNvIGBFWFBPUlRfU1lNQk9MX0dQTGAuCgpTbyBvdXIgdGFyZ2V0IHN5bWJvbHMgYXJlIHNldDogYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBgX19rdm1fZmF1bHRpbl9wZm5gLgoKQWxyaWdodCwgY29uZmlnLXdpc2UsIHdlIG5lZWQgYFZJUlRVQUxJWkFUSU9OYCwgYEtWTWAsIGBWRklPYCwgYFZGSU9fR1JPVVBgLCBgVkZJT19DT05UQUlORVJgLCBhbmQgYFZGSU9fSU9NTVVfVFlQRTFgLiBCdXQgd2FpdCwgYFZGSU9fSU9NTVVfVFlQRTFgIGlzIHNlbGVjdGVkIGJ5IGBWRklPX0NPTlRBSU5FUmAgaWYgTU1VIGFuZCBYODYvUzM5MC9BUk0vQVJNNjQuIFdlIHNob3VsZCBiZSBnb29kIHdpdGgganVzdCBlbmFibGluZyBgVkZJT19DT05UQUlORVJgLiBMZXQmIzM5O3MgY29uZmlybSBpbiBgZHJpdmVycy92ZmlvL0tjb25maWdgLiBZdXAsIGBWRklPX0NPTlRBSU5FUmAgZGVwZW5kcyBvbiBgVkZJT19HUk9VUGAgYW5kIGlzIGRlZmF1bHQgeSBpZiBWRklPIGFuZCBNTVUuIE1pZ2h0IGFzIHdlbGwgYmUgZXhwbGljaXQgYW5kIGVuYWJsZSB0aG9zZS4KCkFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlcj8gV2UgbmVlZCBgQ09ORklHX1BDSWAgZm9yIGBwY2lfcGh5c192bV9vcHNgIHdoaWNoIHVzZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBgQ09ORklHX0RFVk1FTWAgZm9yIGAvZGV2L21lbWAgd2hpY2ggYWxzbyB1c2VzIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gQnV0Li4uIGRvZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGdldCBjb21waWxlZCBpZiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZD8gVGltZSB0byBjaGVjayBgbW0vbWVtb3J5LmNgIGFnYWluIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvY2R4L2NkeC5jLTY2My0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NkeC9jZHguYzo2NjQ6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvY2R4L2NkeC5jLTY2NS0jZW5kaWZcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xuZHJpdmVycy9jaGFyL21lbS5jLTMyMC0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzIxOlx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjItI2VuZGlmXG4tLVxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwNi0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA3Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA4LSNlbmRpZlxuLS1cbmRyaXZlcnMvcGNpL21tYXAuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvcGNpL21tYXAuYy0xOS0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3BjaS9tbWFwLmM6MjA6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvcGNpL21tYXAuYy0yMS0jZW5kaWZcbi0tXG5kcml2ZXJzL3Vpby91aW8uYz03MzY9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fcGh5c2ljYWxfdm1fb3BzID0ge1xuZHJpdmVycy91aW8vdWlvLmMtNzM3LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvdWlvL3Vpby5jOjczODpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy91aW8vdWlvLmMtNzM5LSNlbmRpZlxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD03ODM9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtODM1LVx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XG5pbmNsdWRlL2xpbnV4L21tLmg6ODM2Olx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXG5pbmNsdWRlL2xpbnV4L21tLmgtODM3LVx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzEzMD1jb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMxMzE6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvbW0uaC0zMTMyLVx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTtcbi0tXG5tbS9tZW1vcnkuYz02OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbi0tXG5tbS9tZW1vcnkuYy02OTY3LS8qKlxubW0vbWVtb3J5LmM6Njk2ODogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3Ncbm1tL21lbW9yeS5jLTY5NjktICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3Ncbi0tXG5tbS9tZW1vcnkuYy02OTc4LSAqL1xubW0vbWVtb3J5LmM6Njk3OTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtNjk4MC1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbi0tXG5tbS9tZW1vcnkuYy03MDI3LX1cbm1tL21lbW9yeS5jOjcwMjg6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG5tbS9tZW1vcnkuYy03MDI5LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9NjMyPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODQtXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6Njg1Olx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY4Ni1cdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDkxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgQ29udGV4dCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgc2VlbXMgdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIHdlIGhhdmUgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgZGVmaW5lZC4gVGhhdCBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSB1c2luZyBwcm90ZWN0ZWQgbWVtb3J5IHJlZ2lvbnMgaW4gc29tZSB3YXkuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgc3RhdGUgb2YgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgZmlyc3QsIGFuZCBleGFjdGx5IHdoeSB0aGF0JiMzOTtzIGEgZmFjdG9yIGhlcmUuIE5lZWQgdG8gZ28gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgd2hlcmUgdGhhdCYjMzk7cyBzZXQgd2l0aGluIG91ciBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzICphY3R1YWxseSogZ29pbmcgb24gaW4gdGhlIGNvZGUgYW5kIGhvdyB0aGUgZnVuY3Rpb25hbGl0eSBpbiBxdWVzdGlvbiBjaGFuZ2VzIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0mIzM5O3MgY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFWRV9JT1JFTUFQX1BST1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTI1OD1jb25maWcgVVNFUl9SRVRVUk5fTk9USUZJRVJcbi0tXG5hcmNoL0tjb25maWctMjY0LVxuYXJjaC9LY29uZmlnOjI2NTpjb25maWcgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvS2NvbmZpZy0yNjYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODAxCgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEFyY2hpdGVjdHVyZXMgc2VsZWN0IHRoZSByZWxldmFudCBjb2RlLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cGxpY2l0bHkgZW5hYmxpbmcgaXQuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoZSBuZXcgd3JpdGUgZmF1bHQgaGFuZGxpbmcgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgIGlzIHJvYnVzdC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0cyB3aXRoIEtWTSwgVkZJTywgQUNSTiwgYW5kIGdlbmVyaWMgcGh5c2ljYWwgbWVtb3J5IGFjY2VzcywgYWxsIG9mIHdoaWNoIGFyZSBjcml0aWNhbCBrZXJuZWwgcGF0aHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBicmVhayBhbnl0aGluZy4KCkZpcnN0LCBJIGNoZWNrZWQgaWYgYGZvbGxvd19wZm5tYXBfc3RhcnRgIG5lZWRlZCBhIHNwZWNpZmljIGNvbmZpZywgYW5kIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlncy4gQmFzZWQgb24gd2hlcmUgdGhlIGNvZGUgbGl2ZXMgKGBtbS9tZW1vcnkuY2ApLCBJJiMzOTttIHRoaW5raW5nOiBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgdGhhbiB0aGF0LCBzbyBgVkZJT19JT01NVV9UWVBFMWAsIHNpbmNlIGl0JiMzOTtzIHRyaXN0YXRlLgoKVGhlbiB0aGVyZSYjMzk7cyBgQUNSTl9HVUVTVGAsIHdoaWNoIGlzIHg4Ni1zcGVjaWZpYywgYnV0IEkgY2FuIGFkZCBpdCB0b28sIG5vIGhhcm0gZG9uZS4KCkkgbmVlZCB0byBjb25maXJtIGlmIGp1c3QgYEtWTWAgaXMgZW5vdWdoIG9yIGlmIEkgbmVlZCBgS1ZNX1g4NmAsIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYC4gYEtWTWAgaXMgYSB0cmlzdGF0ZSwgYW5kIGBLVk1fWDg2YCBkZXBlbmRzIG9uIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAuIFNpbmNlIFN5emthbGxlciB1c3VhbGx5IHRlc3RzIG9uIHg4NiB3aXRoIEtWTSBlbmFibGVkLCBJJiMzOTttIGp1c3QgbGlzdGluZyBgS1ZNYCBmb3Igbm93LgoKU28sIGhlcmUmIzM5O3MgbXkgcGxhbjoKCiogICAqKldvcnRoRnV6emluZzoqKiBZZXMKKiAgICoqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggYWx0ZXJzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGhhbmRsaW5nIHdyaXRlIGZhdWx0cyBpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgYW5kIGBwZm5tYXBfYXJnc19zZXR1cGAuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBLVk0sIFZGSU8sIEFDUk4sIGFuZCBnZW5lcmljIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHdyaXRlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuCiogICAqKkZvY3VzU3ltYm9sczoqKgogICAgKiAgIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCAoVGhpcyBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCkKICAgICogICBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgKEl0JiMzOTtzIGEgZ29vZCBmb2N1cyBzeW1ib2wpCiAgICAqICAgYF9fa3ZtX2ZhdWx0aW5fcGZuYCAoRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLikKKiAgICoqRW5hYmxlQ29uZmlnczoqKgogICAgKiAgIGBWSVJUVUFMSVpBVElPTmAKICAgICogICBgS1ZNYAogICAgKiAgIGBWRklPYAogICAgKiAgIGBWRklPX0dST1VQYAogICAgKiAgIGBWRklPX0NPTlRBSU5FUmAKICAgICogICBgVkZJT19JT01NVV9UWVBFMWAKICAgICogICBgQUNSTl9HVUVTVGAKCkkgd2lsbCBkb3VibGUtY2hlY2sgYF9fa3ZtX2ZhdWx0aW5fcGZuYCwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbmQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBUaGV5IGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBJIGxvb2tlZCBhdCBzb21lIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAsIGJ1dCB0aG9zZSBhcmUgczM5MCBzcGVjaWZpYyBzeXNjYWxscywgc28gSSBhbSBnb2luZyB0byBzdGljayB3aXRoIHRoZSBpbml0aWFsIHRocmVlIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhhdCYjMzk7cyB0aGUgY29yZS4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fSU9NTVVfVFlQRTEmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGxvd19wZm5tYXBfc3RhcnQmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICAgJiMzNDtfX2t2bV9mYXVsdGluX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fSU9NTVVfVFlQRTEmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGxvd19wZm5tYXBfc3RhcnQmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICAgJiMzNDtfX2t2bV9mYXVsdGluX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDM6MzkuNDI0NjIyMTA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0OTc0ODMxMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0lPTU1VX1RZUEUxXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9sbG93X3Bmbm1hcF9zdGFydFwiLFxuICAgIFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiLFxuICAgIFwiX19rdm1fZmF1bHRpbl9wZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0MzozOS40MjQ2Mzk3MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDg0NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU1ZmMxNDY3NzE1NWIwYWRiMzhhZTM0OTM0Zjc0NGI2NTk3YjNlMmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAwMDo0MzozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMgYi9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNcXG5pbmRleCA1MWU3YTI4YWY4OTk0Li41MjZmODBiOGZiM2IxIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9wY2kvcGNpX21taW8uY1xcbisrKyBiL2FyY2gvczM5MC9wY2kvcGNpX21taW8uY1xcbkBAIC0xODAsNiArMTgwLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fd3JpdGUsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcXG4gXFxuIFxcdGFyZ3MuYWRkcmVzcyA9IG1taW9fYWRkcjtcXG4gXFx0YXJncy52bWEgPSB2bWE7XFxuK1xcdGFyZ3Mud3JpdGVfZmF1bHQgPSB0cnVlO1xcbiBcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXFx1MDAzZW1tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xcbkBAIC0zMzIsNiArMzMzLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fcmVhZCwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxcbiBcXG4gXFx0YXJncy52bWEgPSB2bWE7XFxuIFxcdGFyZ3MuYWRkcmVzcyA9IG1taW9fYWRkcjtcXG4rXFx0YXJncy53cml0ZV9mYXVsdCA9IGZhbHNlO1xcbiBcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXFx1MDAzZW1tLCBtbWlvX2FkZHIsIDAsIE5VTEwpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xcbmluZGV4IGM4MTUxYmE1NGRlMzMuLjllZTkyODIwYjRkZTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmNcXG5AQCAtNTQxLDcgKzU0MSwxMSBAQCBzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyAqcGZuLFxcbiBcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqYWRkcl9tYXNrLCBib29sIHdyaXRlX2ZhdWx0KVxcbiB7XFxuLVxcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSB2YWRkciB9O1xcbitcXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC52bWEgPSB2bWEsXFxuK1xcdFxcdC5hZGRyZXNzID0gdmFkZHIsXFxuK1xcdFxcdC53cml0ZV9mYXVsdCA9IHdyaXRlX2ZhdWx0XFxuK1xcdH07XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG5AQCAtNTYzLDE1ICs1NjcsMTAgQEAgc3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHdyaXRlX2ZhdWx0IFxcdTAwMjZcXHUwMDI2ICFhcmdzLndyaXRhYmxlKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdCpwZm4gPSBhcmdzLnBmbjtcXG4tXFx0XFx0KmFkZHJfbWFzayA9IGFyZ3MuYWRkcl9tYXNrO1xcbi1cXHR9XFxuLVxcbitcXHQqcGZuID0gYXJncy5wZm47XFxuK1xcdCphZGRyX21hc2sgPSBhcmdzLmFkZHJfbWFzaztcXG4gXFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0L2Fjcm4vbW0uYyBiL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcXG5pbmRleCA1YmNhNTAwYTgzZTA1Li5iMDU3ZTc4ZWYzZjQ4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcXG4rKysgYi9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jXFxuQEAgLTE3Nyw3ICsxNzcsNiBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXFxuIFxcdHZtYSA9IHZtYV9sb29rdXAoY3VycmVudC1cXHUwMDNlbW0sIG1lbW1hcC1cXHUwMDNldm1hX2Jhc2UpO1xcbiBcXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2ICgodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUCkgIT0gMCkpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGN1cl9wZm47XFxuLVxcdFxcdGJvb2wgd3JpdGFibGU7XFxuIFxcbiBcXHRcXHRpZiAoKG1lbW1hcC1cXHUwMDNldm1hX2Jhc2UgKyBtZW1tYXAtXFx1MDAzZWxlbikgXFx1MDAzZSB2bWEtXFx1MDAzZXZtX2VuZCkge1xcbiBcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5AQCAtMTg4LDYgKzE4Nyw3IEBAIGludCBhY3JuX3ZtX3JhbV9tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcXG4gXFx0XFx0XFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0ge1xcbiBcXHRcXHRcXHRcXHQudm1hID0gdm1hLFxcbiBcXHRcXHRcXHRcXHQuYWRkcmVzcyA9IG1lbW1hcC1cXHUwMDNldm1hX2Jhc2UgKyBpICogUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHQud3JpdGVfZmF1bHQgPSAhIShtZW1tYXAtXFx1MDAzZWF0dHIgXFx1MDAyNiBBQ1JOX01FTV9BQ0NFU1NfV1JJVEUpLFxcbiBcXHRcXHRcXHR9O1xcbiBcXG4gXFx0XFx0XFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuQEAgLTE5NywxNiArMTk3LDggQEAgaW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxcbiBcXHRcXHRcXHRjdXJfcGZuID0gYXJncy5wZm47XFxuIFxcdFxcdFxcdGlmIChpID09IDApXFxuIFxcdFxcdFxcdFxcdHN0YXJ0X3BmbiA9IGN1cl9wZm47XFxuLVxcdFxcdFxcdHdyaXRhYmxlID0gYXJncy53cml0YWJsZTtcXG4gXFx0XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbiBcXG4tXFx0XFx0XFx0LyogRGlzYWxsb3cgd3JpdGUgYWNjZXNzIGlmIHRoZSBQVEUgaXMgbm90IHdyaXRhYmxlLiAqL1xcbi1cXHRcXHRcXHRpZiAoIXdyaXRhYmxlIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAobWVtbWFwLVxcdTAwM2VhdHRyIFxcdTAwMjYgQUNSTl9NRU1fQUNDRVNTX1dSSVRFKSkge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXG4gXFx0XFx0XFx0LyogRGlzYWxsb3cgcmVmY291bnRlZCBwYWdlcy4gKi9cXG4gXFx0XFx0XFx0aWYgKHBmbl92YWxpZChjdXJfcGZuKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgIVBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShjdXJfcGZuKSkpIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNDg1ZGY5YzJkYmRkYi4uMzRjNzliNWZjYjliMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMzEzNiw5ICszMTM2LDEyIEBAIHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3Mge1xcbiBcXHQgKiBJbnB1dHM6XFxuIFxcdCAqIEB2bWE6IFBvaW50ZXIgdG8gQHZtX2FyZWFfc3RydWN0IHN0cnVjdFxcbiBcXHQgKiBAYWRkcmVzczogdGhlIHZpcnR1YWwgYWRkcmVzcyB0byB3YWxrXFxuK1xcdCAqIEB3cml0ZV9mYXVsdDogaWYgdHJ1ZSwgZmFpbCB3aXRoIC1FRkFVTFQgdW5sZXNzIHRoZSBtYXBwaW5nIGlzXFxuK1xcdCAqIHdyaXRhYmxlXFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xcbitcXHRib29sIHdyaXRlX2ZhdWx0O1xcbiBcXHQvKipcXG4gXFx0ICogSW50ZXJuYWxzOlxcbiBcXHQgKlxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZmYzMzhjMmFiZTkyMy4uNDA5OTdhMjY4NDZmNSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTY3ODYsMTIgKzY3ODYsMTUgQEAgaW50IF9fcG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIH1cXG4gI2VuZGlmIC8qIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQgKi9cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxcbi1cXHRcXHRcXHRcXHQgICAgIHNwaW5sb2NrX3QgKmxvY2ssIHB0ZV90ICpwdGVwLFxcbi1cXHRcXHRcXHRcXHQgICAgIHBncHJvdF90IHBncHJvdCwgdW5zaWduZWQgbG9uZyBwZm5fYmFzZSxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJfbWFzaywgYm9vbCB3cml0YWJsZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBib29sIHNwZWNpYWwpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHBmbm1hcF9hcmdzX3NldHVwKHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICBzcGlubG9ja190ICpsb2NrLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0XFx0XFx0ICAgIHBncHJvdF90IHBncHJvdCwgdW5zaWduZWQgbG9uZyBwZm5fYmFzZSxcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcl9tYXNrLCBib29sIHdyaXRhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgYm9vbCBzcGVjaWFsKVxcbiB7XFxuK1xcdGlmICghd3JpdGFibGUgXFx1MDAyNlxcdTAwMjYgYXJncy1cXHUwMDNld3JpdGVfZmF1bHQpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0YXJncy1cXHUwMDNlbG9jayA9IGxvY2s7XFxuIFxcdGFyZ3MtXFx1MDAzZXB0ZXAgPSBwdGVwO1xcbiBcXHRhcmdzLVxcdTAwM2VwZm4gPSBwZm5fYmFzZSArICgoYXJncy1cXHUwMDNlYWRkcmVzcyBcXHUwMDI2IH5hZGRyX21hc2spIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbkBAIC02Nzk5LDYgKzY4MDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2FyZ3Nfc2V0dXAoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncyxcXG4gXFx0YXJncy1cXHUwMDNlcGdwcm90ID0gcGdwcm90O1xcbiBcXHRhcmdzLVxcdTAwM2V3cml0YWJsZSA9IHdyaXRhYmxlO1xcbiBcXHRhcmdzLVxcdTAwM2VzcGVjaWFsID0gc3BlY2lhbDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuQEAgLTY4MjAsOCArNjgyNCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuICAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzXFxuICAqXFxuICAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gc2V0dXAgYXJncy1cXHUwMDNldm1hIGFuZCBhcmdzLVxcdTAwM2VhZGRyZXNzIHRvIHBvaW50IHRvIHRoZVxcbi0gKiB2aXJ0dWFsIGFkZHJlc3MgYXMgdGhlIHRhcmdldCBvZiBzdWNoIGxvb2t1cC4gIE9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4sXFxuLSAqIHRoZSByZXN1bHRzIHdpbGwgYmUgcHV0IGludG8gb3RoZXIgb3V0cHV0IGZpZWxkcy5cXG4rICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAsIGFuZCBvcHRpb25hbGx5IHNldFxcbisgKiBhcmdzLVxcdTAwM2V3cml0ZV9mYXVsdCB0byByZXF1aXJlIGEgd3JpdGFibGUgbWFwcGluZy4gIE9uIGEgc3VjY2Vzc2Z1bFxcbisgKiByZXR1cm4sIHRoZSByZXN1bHRzIHdpbGwgYmUgcHV0IGludG8gb3RoZXIgb3V0cHV0IGZpZWxkcy5cXG4gICpcXG4gICogQWZ0ZXIgdGhlIGNhbGxlciBmaW5pc2hlZCB1c2luZyB0aGUgZmllbGRzLCB0aGUgY2FsbGVyIG11c3QgaW52b2tlXFxuICAqIGFub3RoZXIgZm9sbG93X3Bmbm1hcF9lbmQoKSB0byBwcm9wZXIgcmVsZWFzZXMgdGhlIGxvY2tzIGFuZCByZXNvdXJjZXNcXG5AQCAtNjg0NCw3ICs2ODQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSB1c2VkIHRvIG1vZGlmeSBQVEUgY29udGVudC5cXG4gICpcXG4tICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIC1FRkFVTFQgaWYgQGFyZ3MtXFx1MDAzZXdyaXRlX2ZhdWx0IHdhcyBzZXQgYnV0IHRoZVxcbisgKiBtYXBwaW5nIGlzIG5vdCB3cml0YWJsZSwgLUVJTlZBTCBpZiB0aGVyZSBpcyBubyBtYXBwaW5nIGF0IGFsbC5cXG4gICovXFxuIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpXFxuIHtcXG5AQCAtNjg1Nyw2ICs2ODYzLDcgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcXG4gXFx0cHVkX3QgKnB1ZHAsIHB1ZDtcXG4gXFx0cG1kX3QgKnBtZHAsIHBtZDtcXG4gXFx0cHRlX3QgKnB0ZXAsIHB0ZTtcXG4rXFx0aW50IHIgPSAtRUlOVkFMO1xcbiBcXG4gXFx0cGZubWFwX2xvY2tkZXBfYXNzZXJ0KHZtYSk7XFxuIFxcbkBAIC02ODkwLDEwICs2ODk3LDEyIEBAIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpXFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrKGxvY2spO1xcbiBcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHRcXHR9XFxuLVxcdFxcdHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHB1ZF9wZ3Byb3QocHVkKSxcXG4tXFx0XFx0XFx0XFx0ICBwdWRfcGZuKHB1ZCksIFBVRF9NQVNLLCBwdWRfd3JpdGUocHVkKSxcXG4tXFx0XFx0XFx0XFx0ICBwdWRfc3BlY2lhbChwdWQpKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHIgPSBwZm5tYXBfYXJnc19zZXR1cChhcmdzLCBsb2NrLCBOVUxMLCBwdWRfcGdwcm90KHB1ZCksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHB1ZF9wZm4ocHVkKSwgUFVEX01BU0ssIHB1ZF93cml0ZShwdWQpLFxcbitcXHRcXHRcXHRcXHQgICAgICBwdWRfc3BlY2lhbChwdWQpKTtcXG4rXFx0XFx0aWYgKHIpXFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKGxvY2spO1xcbitcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXG4gXFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XFxuQEAgLTY5MTEsMTAgKzY5MjAsMTIgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2sobG9jayk7XFxuIFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLFxcbi1cXHRcXHRcXHRcXHQgIHBtZF9wZm4ocG1kKSwgUE1EX01BU0ssIHBtZF93cml0ZShwbWQpLFxcbi1cXHRcXHRcXHRcXHQgIHBtZF9zcGVjaWFsKHBtZCkpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0ciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHBtZF9wZ3Byb3QocG1kKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBtZF9zcGVjaWFsKHBtZCkpO1xcbitcXHRcXHRpZiAocilcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2sobG9jayk7XFxuK1xcdFxcdHJldHVybiByO1xcbiBcXHR9XFxuIFxcbiBcXHRwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgYWRkcmVzcywgXFx1MDAyNmxvY2spO1xcbkBAIC02OTIzLDE0ICs2OTM0LDE2IEBAIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpXFxuIFxcdHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbiBcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHRwZm5tYXBfYXJnc19zZXR1cChhcmdzLCBsb2NrLCBwdGVwLCBwdGVfcGdwcm90KHB0ZSksXFxuLVxcdFxcdFxcdCAgcHRlX3BmbihwdGUpLCBQQUdFX01BU0ssIHB0ZV93cml0ZShwdGUpLFxcbi1cXHRcXHRcXHQgIHB0ZV9zcGVjaWFsKHB0ZSkpO1xcbitcXHRyID0gcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgcHRlcCwgcHRlX3BncHJvdChwdGUpLFxcbitcXHRcXHRcXHQgICAgICBwdGVfcGZuKHB0ZSksIFBBR0VfTUFTSywgcHRlX3dyaXRlKHB0ZSksXFxuK1xcdFxcdFxcdCAgICAgIHB0ZV9zcGVjaWFsKHB0ZSkpO1xcbitcXHRpZiAocilcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdHJldHVybiAwO1xcbiB1bmxvY2s6XFxuIFxcdHB0ZV91bm1hcF91bmxvY2socHRlcCwgbG9jayk7XFxuIG91dDpcXG4tXFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiByO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfc3RhcnQpO1xcbiBcXG5AQCAtNjk3Miw3ICs2OTg1LDExIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcXG4gXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuIFxcdGJvb2wgd3JpdGFibGU7XFxuLVxcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07XFxuK1xcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcXG4rXFx0XFx0LnZtYSA9IHZtYSxcXG4rXFx0XFx0LmFkZHJlc3MgPSBhZGRyLFxcbitcXHRcXHQud3JpdGVfZmF1bHQgPSAhISh3cml0ZSBcXHUwMDI2IEZPTExfV1JJVEUpXFxuK1xcdH07XFxuIFxcbiByZXRyeTpcXG4gXFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbkBAIC02OTgyLDkgKzY5OTksNiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR3cml0YWJsZSA9IGFyZ3Mud3JpdGFibGU7XFxuIFxcdGZvbGxvd19wZm5tYXBfZW5kKFxcdTAwMjZhcmdzKTtcXG4gXFxuLVxcdGlmICgod3JpdGUgXFx1MDAyNiBGT0xMX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiAhd3JpdGFibGUpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX0FMSUdOKGxlbiArIG9mZnNldCksIHByb3QpO1xcbiBcXHRpZiAoIW1hZGRyKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi4wYzRmZjIyMzE2MmI5IDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTI5MzksOCArMjkzOSwxMSBAQCBzdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXFxuIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbiB7XFxuLVxcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBrZnAtXFx1MDAzZWh2YSB9O1xcbi1cXHRib29sIHdyaXRlX2ZhdWx0ID0ga2ZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZPTExfV1JJVEU7XFxuK1xcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcXG4rXFx0XFx0LnZtYSA9IHZtYSxcXG4rXFx0XFx0LmFkZHJlc3MgPSBrZnAtXFx1MDAzZWh2YSxcXG4rXFx0XFx0LndyaXRlX2ZhdWx0ID0gISEoa2ZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZPTExfV1JJVEUpLFxcbitcXHR9O1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5NTksNyArMjk2Miw3IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJvb2wgdW5sb2NrZWQgPSBmYWxzZTtcXG4gXFx0XFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cXHUwMDNlbW0sIGtmcC1cXHUwMDNlaHZhLFxcbi1cXHRcXHRcXHRcXHQgICAgICh3cml0ZV9mYXVsdCA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAoYXJncy53cml0ZV9mYXVsdCA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dW5sb2NrZWQpO1xcbiBcXHRcXHRpZiAodW5sb2NrZWQpXFxuIFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbkBAIC0yOTY3LDE3ICsyOTcwLDE2IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0cmV0dXJuIHI7XFxuIFxcbiBcXHRcXHRyID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuLVxcdFxcdGlmIChyKVxcbitcXHRcXHRpZiAocikge1xcbitcXHRcXHRcXHRpZiAociA9PSAtRUZBVUxUKSB7XFxuK1xcdFxcdFxcdFxcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRyZXR1cm4gcjtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHdyaXRlX2ZhdWx0IFxcdTAwMjZcXHUwMDI2ICFhcmdzLndyaXRhYmxlKSB7XFxuLVxcdFxcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHQqcF9wZm4gPSBrdm1fcmVzb2x2ZV9wZm4oa2ZwLCBOVUxMLCBcXHUwMDI2YXJncywgYXJncy53cml0YWJsZSk7XFxuLW91dDpcXG4gXFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbiBcXHRyZXR1cm4gcjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0MzozOS44NTA0MzMzNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDQ1NDkwMDc2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiLFxuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19HUk9VUFwiLFxuICAgIFwiVkZJT19DT05UQUlORVJcIixcbiAgICBcIlZGSU9fSU9NTVVfVFlQRTFcIixcbiAgICBcIkFDUk5fR1VFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xsb3dfcGZubWFwX3N0YXJ0XCIsXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gICAgXCJfX2t2bV9mYXVsdGluX3BmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGhhbmRsaW5nIHdyaXRlIGZhdWx0cyBpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgYW5kIGBwZm5tYXBfYXJnc19zZXR1cGAuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBLVk0sIFZGSU8sIEFDUk4sIGFuZCBnZW5lcmljIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHdyaXRlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU1ZmMxNDY3NzE1NWIwYWRiMzhhZTM0OTM0Zjc0NGI2NTk3YjNlMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDAwOjQzOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jIGIvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jXG5pbmRleCA1MWU3YTI4YWY4OTk0Li41MjZmODBiOGZiM2IxIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jXG4rKysgYi9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNcbkBAIC0xODAsNiArMTgwLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fd3JpdGUsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcbiBcbiBcdGFyZ3MuYWRkcmVzcyA9IG1taW9fYWRkcjtcbiBcdGFyZ3Mudm1hID0gdm1hO1xuK1x0YXJncy53cml0ZV9mYXVsdCA9IHRydWU7XG4gXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXHUwMDNlbW0sIG1taW9fYWRkciwgRkFVTFRfRkxBR19XUklURSwgTlVMTCk7XG5AQCAtMzMyLDYgKzMzMyw3IEBAIFNZU0NBTExfREVGSU5FMyhzMzkwX3BjaV9tbWlvX3JlYWQsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcbiBcbiBcdGFyZ3Mudm1hID0gdm1hO1xuIFx0YXJncy5hZGRyZXNzID0gbW1pb19hZGRyO1xuK1x0YXJncy53cml0ZV9mYXVsdCA9IGZhbHNlO1xuIFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBtbWlvX2FkZHIsIDAsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMgYi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jXG5pbmRleCBjODE1MWJhNTRkZTMzLi45ZWU5MjgyMGI0ZGUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xuKysrIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xuQEAgLTU0MSw3ICs1NDEsMTEgQEAgc3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyAqcGZuLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICphZGRyX21hc2ssIGJvb2wgd3JpdGVfZmF1bHQpXG4ge1xuLVx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IHZhZGRyIH07XG4rXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7XG4rXHRcdC52bWEgPSB2bWEsXG4rXHRcdC5hZGRyZXNzID0gdmFkZHIsXG4rXHRcdC53cml0ZV9mYXVsdCA9IHdyaXRlX2ZhdWx0XG4rXHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5AQCAtNTYzLDE1ICs1NjcsMTAgQEAgc3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0aWYgKHdyaXRlX2ZhdWx0IFx1MDAyNlx1MDAyNiAhYXJncy53cml0YWJsZSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0fSBlbHNlIHtcbi1cdFx0KnBmbiA9IGFyZ3MucGZuO1xuLVx0XHQqYWRkcl9tYXNrID0gYXJncy5hZGRyX21hc2s7XG4tXHR9XG4tXG4rXHQqcGZuID0gYXJncy5wZm47XG4rXHQqYWRkcl9tYXNrID0gYXJncy5hZGRyX21hc2s7XG4gXHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jIGIvZHJpdmVycy92aXJ0L2Fjcm4vbW0uY1xuaW5kZXggNWJjYTUwMGE4M2UwNS4uYjA1N2U3OGVmM2Y0OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcbisrKyBiL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcbkBAIC0xNzcsNyArMTc3LDYgQEAgaW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxuIFx0dm1hID0gdm1hX2xvb2t1cChjdXJyZW50LVx1MDAzZW1tLCBtZW1tYXAtXHUwMDNldm1hX2Jhc2UpO1xuIFx0aWYgKHZtYSBcdTAwMjZcdTAwMjYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkgIT0gMCkpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGN1cl9wZm47XG4tXHRcdGJvb2wgd3JpdGFibGU7XG4gXG4gXHRcdGlmICgobWVtbWFwLVx1MDAzZXZtYV9iYXNlICsgbWVtbWFwLVx1MDAzZWxlbikgXHUwMDNlIHZtYS1cdTAwM2V2bV9lbmQpIHtcbiBcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuQEAgLTE4OCw2ICsxODcsNyBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXG4gXHRcdFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0ge1xuIFx0XHRcdFx0LnZtYSA9IHZtYSxcbiBcdFx0XHRcdC5hZGRyZXNzID0gbWVtbWFwLVx1MDAzZXZtYV9iYXNlICsgaSAqIFBBR0VfU0laRSxcbitcdFx0XHRcdC53cml0ZV9mYXVsdCA9ICEhKG1lbW1hcC1cdTAwM2VhdHRyIFx1MDAyNiBBQ1JOX01FTV9BQ0NFU1NfV1JJVEUpLFxuIFx0XHRcdH07XG4gXG4gXHRcdFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbkBAIC0xOTcsMTYgKzE5Nyw4IEBAIGludCBhY3JuX3ZtX3JhbV9tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcbiBcdFx0XHRjdXJfcGZuID0gYXJncy5wZm47XG4gXHRcdFx0aWYgKGkgPT0gMClcbiBcdFx0XHRcdHN0YXJ0X3BmbiA9IGN1cl9wZm47XG4tXHRcdFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuIFx0XHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuIFxuLVx0XHRcdC8qIERpc2FsbG93IHdyaXRlIGFjY2VzcyBpZiB0aGUgUFRFIGlzIG5vdCB3cml0YWJsZS4gKi9cbi1cdFx0XHRpZiAoIXdyaXRhYmxlIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAobWVtbWFwLVx1MDAzZWF0dHIgXHUwMDI2IEFDUk5fTUVNX0FDQ0VTU19XUklURSkpIHtcbi1cdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXG4gXHRcdFx0LyogRGlzYWxsb3cgcmVmY291bnRlZCBwYWdlcy4gKi9cbiBcdFx0XHRpZiAocGZuX3ZhbGlkKGN1cl9wZm4pIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAhUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKGN1cl9wZm4pKSkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYi4uMzRjNzliNWZjYjliMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzEzNiw5ICszMTM2LDEyIEBAIHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3Mge1xuIFx0ICogSW5wdXRzOlxuIFx0ICogQHZtYTogUG9pbnRlciB0byBAdm1fYXJlYV9zdHJ1Y3Qgc3RydWN0XG4gXHQgKiBAYWRkcmVzczogdGhlIHZpcnR1YWwgYWRkcmVzcyB0byB3YWxrXG4rXHQgKiBAd3JpdGVfZmF1bHQ6IGlmIHRydWUsIGZhaWwgd2l0aCAtRUZBVUxUIHVubGVzcyB0aGUgbWFwcGluZyBpc1xuK1x0ICogd3JpdGFibGVcbiBcdCAqL1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG4rXHRib29sIHdyaXRlX2ZhdWx0O1xuIFx0LyoqXG4gXHQgKiBJbnRlcm5hbHM6XG4gXHQgKlxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMuLjQwOTk3YTI2ODQ2ZjUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC02Nzg2LDEyICs2Nzg2LDE1IEBAIGludCBfX3BtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIH1cbiAjZW5kaWYgLyogX19QQUdFVEFCTEVfUE1EX0ZPTERFRCAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxuLVx0XHRcdFx0ICAgICBzcGlubG9ja190ICpsb2NrLCBwdGVfdCAqcHRlcCxcbi1cdFx0XHRcdCAgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJfbWFzaywgYm9vbCB3cml0YWJsZSxcbi1cdFx0XHRcdCAgICAgYm9vbCBzcGVjaWFsKVxuK3N0YXRpYyBpbmxpbmUgaW50IHBmbm1hcF9hcmdzX3NldHVwKHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MsXG4rXHRcdFx0XHQgICAgc3BpbmxvY2tfdCAqbG9jaywgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHQgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcl9tYXNrLCBib29sIHdyaXRhYmxlLFxuK1x0XHRcdFx0ICAgIGJvb2wgc3BlY2lhbClcbiB7XG4rXHRpZiAoIXdyaXRhYmxlIFx1MDAyNlx1MDAyNiBhcmdzLVx1MDAzZXdyaXRlX2ZhdWx0KVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbiBcdGFyZ3MtXHUwMDNlbG9jayA9IGxvY2s7XG4gXHRhcmdzLVx1MDAzZXB0ZXAgPSBwdGVwO1xuIFx0YXJncy1cdTAwM2VwZm4gPSBwZm5fYmFzZSArICgoYXJncy1cdTAwM2VhZGRyZXNzIFx1MDAyNiB+YWRkcl9tYXNrKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNjc5OSw2ICs2ODAyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9hcmdzX3NldHVwKHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MsXG4gXHRhcmdzLVx1MDAzZXBncHJvdCA9IHBncHJvdDtcbiBcdGFyZ3MtXHUwMDNld3JpdGFibGUgPSB3cml0YWJsZTtcbiBcdGFyZ3MtXHUwMDNlc3BlY2lhbCA9IHNwZWNpYWw7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbkBAIC02ODIwLDggKzY4MjQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2xvY2tkZXBfYXNzZXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzXG4gICpcbiAgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIHNldHVwIGFyZ3MtXHUwMDNldm1hIGFuZCBhcmdzLVx1MDAzZWFkZHJlc3MgdG8gcG9pbnQgdG8gdGhlXG4tICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAuICBPbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLFxuLSAqIHRoZSByZXN1bHRzIHdpbGwgYmUgcHV0IGludG8gb3RoZXIgb3V0cHV0IGZpZWxkcy5cbisgKiB2aXJ0dWFsIGFkZHJlc3MgYXMgdGhlIHRhcmdldCBvZiBzdWNoIGxvb2t1cCwgYW5kIG9wdGlvbmFsbHkgc2V0XG4rICogYXJncy1cdTAwM2V3cml0ZV9mYXVsdCB0byByZXF1aXJlIGEgd3JpdGFibGUgbWFwcGluZy4gIE9uIGEgc3VjY2Vzc2Z1bFxuKyAqIHJldHVybiwgdGhlIHJlc3VsdHMgd2lsbCBiZSBwdXQgaW50byBvdGhlciBvdXRwdXQgZmllbGRzLlxuICAqXG4gICogQWZ0ZXIgdGhlIGNhbGxlciBmaW5pc2hlZCB1c2luZyB0aGUgZmllbGRzLCB0aGUgY2FsbGVyIG11c3QgaW52b2tlXG4gICogYW5vdGhlciBmb2xsb3dfcGZubWFwX2VuZCgpIHRvIHByb3BlciByZWxlYXNlcyB0aGUgbG9ja3MgYW5kIHJlc291cmNlc1xuQEAgLTY4NDQsNyArNjg0OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIHVzZWQgdG8gbW9kaWZ5IFBURSBjb250ZW50LlxuICAqXG4tICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG90aGVyd2lzZS5cbisgKiBSZXR1cm46IHplcm8gb24gc3VjY2VzcywgLUVGQVVMVCBpZiBAYXJncy1cdTAwM2V3cml0ZV9mYXVsdCB3YXMgc2V0IGJ1dCB0aGVcbisgKiBtYXBwaW5nIGlzIG5vdCB3cml0YWJsZSwgLUVJTlZBTCBpZiB0aGVyZSBpcyBubyBtYXBwaW5nIGF0IGFsbC5cbiAgKi9cbiBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIHtcbkBAIC02ODU3LDYgKzY4NjMsNyBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0cHVkX3QgKnB1ZHAsIHB1ZDtcbiBcdHBtZF90ICpwbWRwLCBwbWQ7XG4gXHRwdGVfdCAqcHRlcCwgcHRlO1xuK1x0aW50IHIgPSAtRUlOVkFMO1xuIFxuIFx0cGZubWFwX2xvY2tkZXBfYXNzZXJ0KHZtYSk7XG4gXG5AQCAtNjg5MCwxMCArNjg5NywxMiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0XHRcdHNwaW5fdW5sb2NrKGxvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbi1cdFx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcHVkX3BncHJvdChwdWQpLFxuLVx0XHRcdFx0ICBwdWRfcGZuKHB1ZCksIFBVRF9NQVNLLCBwdWRfd3JpdGUocHVkKSxcbi1cdFx0XHRcdCAgcHVkX3NwZWNpYWwocHVkKSk7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRyID0gcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcHVkX3BncHJvdChwdWQpLFxuK1x0XHRcdFx0ICAgICAgcHVkX3BmbihwdWQpLCBQVURfTUFTSywgcHVkX3dyaXRlKHB1ZCksXG4rXHRcdFx0XHQgICAgICBwdWRfc3BlY2lhbChwdWQpKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0c3Bpbl91bmxvY2sobG9jayk7XG4rXHRcdHJldHVybiByO1xuIFx0fVxuIFxuIFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XG5AQCAtNjkxMSwxMCArNjkyMCwxMiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0XHRcdHNwaW5fdW5sb2NrKGxvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbi1cdFx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLFxuLVx0XHRcdFx0ICBwbWRfcGZuKHBtZCksIFBNRF9NQVNLLCBwbWRfd3JpdGUocG1kKSxcbi1cdFx0XHRcdCAgcG1kX3NwZWNpYWwocG1kKSk7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRyID0gcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLFxuK1x0XHRcdFx0ICAgICAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksXG4rXHRcdFx0XHQgICAgICBwbWRfc3BlY2lhbChwbWQpKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0c3Bpbl91bmxvY2sobG9jayk7XG4rXHRcdHJldHVybiByO1xuIFx0fVxuIFxuIFx0cHRlcCA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZHAsIGFkZHJlc3MsIFx1MDAyNmxvY2spO1xuQEAgLTY5MjMsMTQgKzY5MzQsMTYgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcbiBcdHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0aWYgKCFwdGVfcHJlc2VudChwdGUpKVxuIFx0XHRnb3RvIHVubG9jaztcbi1cdHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSxcbi1cdFx0XHQgIHB0ZV9wZm4ocHRlKSwgUEFHRV9NQVNLLCBwdGVfd3JpdGUocHRlKSxcbi1cdFx0XHQgIHB0ZV9zcGVjaWFsKHB0ZSkpO1xuK1x0ciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSxcbitcdFx0XHQgICAgICBwdGVfcGZuKHB0ZSksIFBBR0VfTUFTSywgcHRlX3dyaXRlKHB0ZSksXG4rXHRcdFx0ICAgICAgcHRlX3NwZWNpYWwocHRlKSk7XG4rXHRpZiAocilcbitcdFx0Z290byB1bmxvY2s7XG4gXHRyZXR1cm4gMDtcbiB1bmxvY2s6XG4gXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIGxvY2spO1xuIG91dDpcbi1cdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIHI7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfc3RhcnQpO1xuIFxuQEAgLTY5NzIsNyArNjk4NSwxMSBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xuIFx0aW50IHJldCA9IC1FSU5WQUw7XG4gXHRib29sIHdyaXRhYmxlO1xuLVx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbitcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbitcdFx0LnZtYSA9IHZtYSxcbitcdFx0LmFkZHJlc3MgPSBhZGRyLFxuK1x0XHQud3JpdGVfZmF1bHQgPSAhISh3cml0ZSBcdTAwMjYgRk9MTF9XUklURSlcbitcdH07XG4gXG4gcmV0cnk6XG4gXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbkBAIC02OTgyLDkgKzY5OTksNiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuIFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXG4tXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcbiBcdGlmICghbWFkZHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi4wYzRmZjIyMzE2MmI5IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTI5MzksOCArMjkzOSwxMSBAQCBzdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXG4gc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcbiB7XG4tXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0ga2ZwLVx1MDAzZWh2YSB9O1xuLVx0Ym9vbCB3cml0ZV9mYXVsdCA9IGtmcC1cdTAwM2VmbGFncyBcdTAwMjYgRk9MTF9XUklURTtcbitcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbitcdFx0LnZtYSA9IHZtYSxcbitcdFx0LmFkZHJlc3MgPSBrZnAtXHUwMDNlaHZhLFxuK1x0XHQud3JpdGVfZmF1bHQgPSAhIShrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpLFxuK1x0fTtcbiBcdGludCByO1xuIFxuIFx0LypcbkBAIC0yOTU5LDcgKzI5NjIsNyBAQCBzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqL1xuIFx0XHRib29sIHVubG9ja2VkID0gZmFsc2U7XG4gXHRcdHIgPSBmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXHUwMDNlbW0sIGtmcC1cdTAwM2VodmEsXG4tXHRcdFx0XHQgICAgICh3cml0ZV9mYXVsdCA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKSxcbitcdFx0XHRcdCAgICAgKGFyZ3Mud3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXG4gXHRcdFx0XHQgICAgIFx1MDAyNnVubG9ja2VkKTtcbiBcdFx0aWYgKHVubG9ja2VkKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTI5NjcsMTcgKzI5NzAsMTYgQEAgc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdHJldHVybiByO1xuIFxuIFx0XHRyID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbi1cdFx0aWYgKHIpXG4rXHRcdGlmIChyKSB7XG4rXHRcdFx0aWYgKHIgPT0gLUVGQVVMVCkge1xuK1x0XHRcdFx0KnBfcGZuID0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQ7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIHI7XG4tXHR9XG4tXG4tXHRpZiAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICFhcmdzLndyaXRhYmxlKSB7XG4tXHRcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0KnBfcGZuID0ga3ZtX3Jlc29sdmVfcGZuKGtmcCwgTlVMTCwgXHUwMDI2YXJncywgYXJncy53cml0YWJsZSk7XG4tb3V0OlxuIFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXHRyZXR1cm4gcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0MzozOS44NTA0MzUzNTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM0NzA0NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgd3JpdGUgZmF1bHRzIGFyZSBoYW5kbGVkIHdpdGhpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAuIEVzc2VudGlhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgYHdyaXRlX2ZhdWx0YCBmaWVsZCB0byBgc3RydWN0IGZvbGxvd19wZm5tYXBfYXJnc2AuIFRoZSBnaXN0IGlzIHRoYXQgaWYgYHdyaXRlX2ZhdWx0YCBpcyBzZXQgdG8gdHJ1ZSBhbmQgdGhlIG1hcHBpbmcgaXNuJ3Qgd3JpdGFibGUsIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBub3cgZGlyZWN0bHkgcmV0dXJucyBgLUVGQVVMVGAuIFRoaXMgdXNlZCB0byBiZSB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQncyBiZWVuIHNoaWZ0ZWQgaW50byBgcGZubWFwX2FyZ3Nfc2V0dXBgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZvbGxvd19wZm5tYXBfc3RhcnRgLiBUaGlzIGRlZmluaXRlbHkgc3RyZWFtbGluZXMgdGhlIGNvZGUgYW5kIGF2b2lkcyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgZGlyZWN0bHkgdG91Y2hlZCBieSB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlOiBgczM5MF9wY2lfbW1pb193cml0ZWAsIGBzMzkwX3BjaV9tbWlvX3JlYWRgLCBgZm9sbG93X2ZhdWx0X3BmbmAgaW4gYGRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmNgLCBgYWNybl92bV9yYW1fbWFwYCBpbiBgZHJpdmVycy92aXJ0L2Fjcm4vbW0uY2AsIGBwZm5tYXBfYXJnc19zZXR1cGAsIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCwgYW5kIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbGwgaW4gYG1tL21lbW9yeS5jYCwgYW5kIGZpbmFsbHkgYGh2YV90b19wZm5fcmVtYXBwZWRgIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC5cblxuVGhpcyBpcyBzaWduaWZpY2FudC4gV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRoYXQgcmlwcGxlIHRocm91Z2ggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdG91Y2ggdmlydHVhbGl6YXRpb24gc3Vic3lzdGVtcyDigJMgS1ZNLCBWRklPLCBhbmQgQUNSTi4gVGhpcyBkZWZpbml0ZWx5IGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBodmFfdG9fcGZuX3JlbWFwcGVkYCwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBgZm9sbG93X2ZhdWx0X3BmbmAsIGFuZCBgYWNybl92bV9yYW1fbWFwYC4gTGV0J3MgcXVpY2tseSBjaGVjayB0aGVpciB2aXNpYmlsaXR5LiBBaCwgYGZvbGxvd19wZm5tYXBfc3RhcnRgIGlzIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMYC4gYGh2YV90b19wZm5fcmVtYXBwZWRgIGlzIHN0YXRpYyB3aXRoaW4gYGt2bV9tYWluLmNgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXMgZXhwb3J0ZWQsIGBmb2xsb3dfZmF1bHRfcGZuYCBpcyBzdGF0aWMgdG8gYHZmaW9faW9tbXVfdHlwZTEuY2AsIGFuZCBgYWNybl92bV9yYW1fbWFwYCBpcyB3aXRoaW4gYGRyaXZlcnMvdmlydC9hY3JuL21tLmNgLlxuXG5Pa2F5LCBuZXh0IEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIHRoZXNlIHN1YnN5c3RlbXM6IEtWTSBpcywgb2YgY291cnNlLCBgQ09ORklHX0tWTWAsIFZGSU8gaXMgYENPTkZJR19WRklPYCwgYW5kIEFDUk4gaXMgYENPTkZJR19BQ1JOX0dVRVNUYC4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIGJ1dCB0aGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQzOjQ3LjY4NTE0MzY4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg1MzQ3MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBQ1JOX0dVRVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9ODY4PWNvbmZpZyBKQUlMSE9VU0VfR1VFU1RcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODc2LVxcbmFyY2gveDg2L0tjb25maWc6ODc3OmNvbmZpZyBBQ1JOX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy04NzgtXFx0Ym9vbCBcXFwiQUNSTiBHdWVzdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Mzo1MC4zNzA0OTg5NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDc1NzkyMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipWRklPIEludmVzdGlnYXRpb24gLSBBQ1JOIEd1ZXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgQUNSTl9HVUVTVGAgc2V0dGluZyBmdW5jdGlvbnMuIEl0J3MgYSBib29sZWFuLCBtZWFuaW5nIGl0J3MgZWl0aGVyIHRydWUgb3IgZmFsc2UuIEFuZCBnaXZlbiB0aGUgY29udGV4dCwgbXkgbWluZCdzIGltbWVkaWF0ZWx5IGp1bXBpbmcgdG8gVkZJTy4gR2l2ZW4gdGhhdCB0aGlzIHNlZW1zIHRvIGJlIGEga2V5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHJvbGUgaXQgcGxheXMgaW4gdGhpcyBzZXR1cC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGNvbmZpZyBpbnRlcmFjdHMgd2l0aCBWRklPIGFuZCB3aGF0IGNvbnNlcXVlbmNlcyB0aGlzIGhhcy4gTGV0J3MgZGlnIGludG8gVkZJTyB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBzZXR0aW5nIGVuYWJsZXMgb3IgZGlzYWJsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Mzo1Mi44NDYyOTM4NjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzc4Mjk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MDk9Y29uZmlnIEFQX0RFQlVHXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MjItXFxuYXJjaC9zMzkwL0tjb25maWc6ODIzOmNvbmZpZyBWRklPX0NDV1xcbmFyY2gvczM5MC9LY29uZmlnLTgyNC1cXHRkZWZfdHJpc3RhdGUgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODMzLVxcbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cXHRkZWZfdHJpc3RhdGUgblxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMjktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MzA6Y29uZmlnIFZGSU9fR1JPVVBcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ni1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01OC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NjE9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXFxuZHJpdmVycy92ZmlvL0tjb25maWctNjQtXFx0Ym9vbCBcXFwiVkZJTyBOby1JT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzg6Y29uZmlnIFZGSU9fVklSUUZEXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzktXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctODItXFxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkV4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTctXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnOjg6Y29uZmlnIFZGSU9fQ0RYXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQ0RYIGJ1cyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTE9bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctMy1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc6NDpjb25maWcgVkZJT19GU0xfTUNcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTItXFxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZzozOmNvbmZpZyBWRklPX01ERVZcXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTQtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNDpjb25maWcgVkZJT19QQ0lfVkdBXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgc3VwcG9ydCBmb3IgVkdBIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo0Nzpjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgcGxhdGZvcm0gZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6NTpjb25maWcgVkZJT19QTEFURk9STV9CQVNFXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctOC1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo5OmNvbmZpZyBWRklPX1BMQVRGT1JNXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgcGxhdGZvcm0gZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTgtXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6MTk6Y29uZmlnIFZGSU9fQU1CQVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIEFNQkEgZGV2aWNlcyAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZz0yPWlmIFZGSU9fUExBVEZPUk1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzozOmNvbmZpZyBWRklPX1BMQVRGT1JNX0NBTFhFREFYR01BQ19SRVNFVFxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgY2FseGVkYSB4Z21hYyByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy05LVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BMQVRGT1JNX0FNRFhHQkVfUkVTRVRcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBBTUQgWEdCRSByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzoxNzpjb25maWcgVkZJT19QTEFURk9STV9CQ01GTEVYUk1fUkVTRVRcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBCcm9hZGNvbSBGbGV4Uk0gcmVzZXQgKERFUFJFQ0FURUQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Mzo1NS4xNzQwODY0NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzkzODQ1NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQncyBtb2RpZnlpbmcgc2V2ZXJhbCBrZXkgY29tcG9uZW50cy4gU3BlY2lmaWNhbGx5LCBpdCdzIGhpdHRpbmcgYGRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmNgLCBhbmQgdGhhdCdzIG9idmlvdXNseSBiZWhpbmQgdGhlIGBWRklPX0lPTU1VX1RZUEUxYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyB0aGVyZSwgdGhhdCdzIGNydWNpYWwuIFRoZW4gdGhlcmUncyBgdmlydC9rdm0va3ZtX21haW4uY2AsIHdoaWNoIGlzIHVuZGVyIGBLVk1gLCBvYnZpb3VzbHkuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuIE5leHQsIGl0J3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jYCwgaW1wbHlpbmcgdGhpcyByZWxhdGVzIHRvIGBQQ0lgIG9uIHMzOTAgc3lzdGVtcy4gVGhhdCBtZWFucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBGaW5hbGx5LCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBgZHJpdmVycy92aXJ0L2Fjcm4vbW0uY2AsIHdoaWNoLCBhcyBhIHN5c3RlbSBleHBlcnQsIEkgaW1tZWRpYXRlbHkgYXNzb2NpYXRlIHdpdGggYEFDUk5fR1VFU1RgLiBUaGlzIGltcGxpZXMgY2hhbmdlcyB3aXRoaW4gdGhlIEFDUk4gaHlwZXJ2aXNvciBmcmFtZXdvcmsuXG5cbk15IGZpcnN0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgVkZJT19JT01NVV9UWVBFMWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gaXMgdGhlIG1vc3QgaW1wb3J0YW50IHBpZWNlIG9mIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmluZyBhdCB0aGlzIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU0NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Mzo1OS41Njc5MzU0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUwNjcxNjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0lPTU1VX1RZUEUxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9LY29uZmlnPTUyPWlmIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWc6NTM6Y29uZmlnIFZGSU9fSU9NTVVfVFlQRTFcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01NC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDowMS44MTg2MTE4OTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc2OTk1MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKlZGSU9fQ09OVEFJTkVSIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGhpbmdlIG9uIGBWRklPX0NPTlRBSU5FUmAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEJlZm9yZSBJIGNhbiBtYWtlIGFueSBkZWZpbml0aXZlIGNvbmNsdXNpb25zIG9yIHJlY29tbWVuZGF0aW9ucywgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFZGSU9fQ09OVEFJTkVSYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIGtlcm5lbCBtb2R1bGVzIGl0IHJlbGllcyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBhcmNoaXRlY3R1cmFsIGxhbmRzY2FwZSBhbmQgYWxsb3cgbWUgdG8gYXNzZXNzIHBvdGVudGlhbCBpbXBhY3RzIGRvd24gdGhlIGxpbmUuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwIHRvIGEgbGFyZ2VyIGRpYWdub3Npcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDowNC41OTU2MTEwNTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODI4Nzk5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fQ09OVEFJTkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9LY29uZmlnPTMwPWNvbmZpZyBWRklPX0dST1VQXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zOS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo0MDpjb25maWcgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy00MS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjb250YWluZXIgL2Rldi92ZmlvL3ZmaW9cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjA2Ljk3ODQ5OTk3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE0Mzk5NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAtIFZGSU9fR1JPVVAqKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaGluZ2VzIG9uIGBWRklPX0dST1VQYC4gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIGl0cyBiZWhhdmlvciB3aWxsIGRpY3RhdGUgZXZlcnl0aGluZy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0J3MgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGRyaXZlcnMvdmZpby9LY29uZmlnYC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIG9wdGlvbnMsIGZlYXR1cmVzLCBvciBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGNvbnRyb2wgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgVkZJT19HUk9VUGAuIEknbSBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyB0aGluZyBhY3R1YWxseSAqd29ya3MqIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6MTAuMTkyOTAzMDU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmZpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdCAgIGRldmljZXMgdGhyb3VnaCBWRklPIGFuZCBpcyB1c2VkIGJ5IHRoZSBtYWpvcml0eSBvZiB1c2Vyc3BhY2VcXG4gIDM2OlxcdFxcdCAgIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtYWtpbmcgdXNlIG9mIFZGSU8uXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IFkuXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBWRklPX0NPTlRBSU5FUlxcbiAgNDE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbiAgNDI6XFx0XFx0c2VsZWN0IFZGSU9fSU9NTVVfVFlQRTEgaWYgTU1VIFxcdTAwMjZcXHUwMDI2IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFZGSU9fR1JPVVBcXG4gIDQ0OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBUaGUgVkZJTyBjb250YWluZXIgaXMgdGhlIGNsYXNzaWMgaW50ZXJmYWNlIHRvIFZGSU8gZm9yIGVzdGFibGlzaGluZ1xcbiAgNDc6XFx0XFx0ICBJT01NVSBtYXBwaW5ncy4gSWYgTiBpcyBzZWxlY3RlZCBoZXJlIHRoZW4gSU9NTVVGRCBtdXN0IGJlIHVzZWQgdG9cXG4gIDQ4OlxcdFxcdCAgbWFuYWdlIHRoZSBtYXBwaW5ncy5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBVbmxlc3MgdGVzdGluZyBJT01NVUZEIHNheSBZIGhlcmUuXFxuICA1MTpcXHRcXG4gIDUyOlxcdGlmIFZGSU9fQ09OVEFJTkVSXFxuICA1MzpcXHRjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbiAgNTQ6XFx0XFx0dHJpc3RhdGVcXG4gIDU1OlxcdFxcdGRlZmF1bHQgblxcbiAgNTY6XFx0XFxuICA1NzpcXHRjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG4gIDU4OlxcdFxcdHRyaXN0YXRlXFxuICA1OTpcXHRcXHRkZXBlbmRzIG9uIFNQQVBSX1RDRV9JT01NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDoxMC4xOTI5OTQzMjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwOTY0Mjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFZGSU8gRGVwZW5kZW5jeSBDaGFpbioqXG5cblJpZ2h0LCBzbyBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIFZGSU8gY29tcG9uZW50cyByZWxhdGUgdG8gZWFjaCBvdGhlci4gSXQgc2VlbXMgdGhhdCBgVkZJT19DT05UQUlORVJgIGlzIGJ1aWx0IG9uIHRvcCBvZiBgVkZJT19HUk9VUGAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIHRoZSBmb3VuZGF0aW9uYWwgYFZGSU9gIG1vZHVsZS4gVGhpcyBzdWdnZXN0cyBhIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUuIElmIGBWRklPYCBmYWlscywgYFZGSU9fR1JPVVBgIGFuZCBgVkZJT19DT05UQUlORVJgIGFyZSB1c2VsZXNzLiBJZiBgVkZJT19HUk9VUGAgZmFpbHMsIGBWRklPX0NPTlRBSU5FUmAgd2lsbCBmYWlsLiBUaGVyZWZvcmUsIGxvZ2ljYWxseSwgaXQgbWFrZXMgc2Vuc2UgdG8gZGlnIGludG8gYFZGSU9fR1JPVVBgIGZpcnN0IHRvIHVuZGVyc3RhbmQgdGhlIGNydWNpYWwgbGluayBpdCBwbGF5cyBpbiB0aGUgY2hhaW4uIE15IG5leHQgYWN0aW9uIGlzIGNsZWFyOyBsZXQncyBpbnZlc3RpZ2F0ZSB0aGUgc3BlY2lmaWNzIG9mIGBWRklPX0dST1VQYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjEzLjMwMjY0MDY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRcXHQgIHRvIHNldCB1cCBzZWN1cmUgRE1BIGNvbnRleHQgZm9yIGRldmljZSBhY2Nlc3MuICBUaGlzIGludGVyZmFjZSBkb2VzXFxuICAyNjpcXHRcXHQgIG5vdCBzdXBwb3J0IG5vaW9tbXUuXFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIFZGSU9fR1JPVVBcXG4gIDMxOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcXFwiXFxuICAzMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgIFZGSU8gZ3JvdXAgc3VwcG9ydCBwcm92aWRlcyB0aGUgdHJhZGl0aW9uYWwgbW9kZWwgZm9yIGFjY2Vzc2luZ1xcbiAgMzU6XFx0XFx0ICAgZGV2aWNlcyB0aHJvdWdoIFZGSU8gYW5kIGlzIHVzZWQgYnkgdGhlIG1ham9yaXR5IG9mIHVzZXJzcGFjZVxcbiAgMzY6XFx0XFx0ICAgYXBwbGljYXRpb25zIGFuZCBkcml2ZXJzIG1ha2luZyB1c2Ugb2YgVkZJTy5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS5cXG4gIDM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDoxMy4zMDI3NTE3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg2MDk5NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVmlydHVhbGl6YXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhpcyB2aXJ0dWFsaXphdGlvbiBwcm9ibGVtIGFuZCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gaW5jb3Jwb3JhdGUgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAsIGFuZCBgVkZJT19JT01NVV9UWVBFMWAuIEl0J3MgcHJldHR5IGZ1bmRhbWVudGFsLCBvYnZpb3VzbHkuIFRoZW4gd2UgaGF2ZSBgS1ZNYCwgd2hpY2ggaXMgdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUsIGFuZCB3ZSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGBBQ1JOX0dVRVNUYCBjb21wb25lbnQuIFRoZXNlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBubyBkb3VidC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZXNlIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmUgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAsIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYGZvbGxvd19mYXVsdF9wZm5gLCBhbmQgYGFjcm5fdm1fcmFtX21hcGAuIEVhY2ggb2YgdGhlbSB0ZWxscyBhIGJpdCBvZiB0aGUgc3RvcnkuXG5cbkhtbSwgYGh2YV90b19wZm5fcmVtYXBwZWRgIGFuZCBgZm9sbG93X2ZhdWx0X3BmbmAgYXJlIHN0YXRpYy4gVGhhdCdzIGludGVyZXN0aW5nLCB1c3VhbGx5IGEgc3RhdGljIGZ1bmN0aW9uIGlzIG9ubHkgdmlzaWJsZSB3aXRoaW4gYSBzaW5nbGUgZmlsZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGwgdGhlbS4gRmluZGluZyB0aGF0IG91dCB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtIGFuZCBob3cgdGhleSBhZmZlY3Qgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgdGhlIG5leHQgbGluZSBvZiBpbnF1aXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjE3LjQ4ODg1NjE5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNTc2MjQxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodmFfdG9fcGZuX3JlbWFwcGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjkyOD1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MzgtXFxudmlydC9rdm0va3ZtX21haW4uYzoyOTM5OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yOTg3PWt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDE1LVxcdGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XFxudmlydC9rdm0va3ZtX21haW4uYzozMDE2OlxcdFxcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcXHUwMDI2cGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTctXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6MTkuNzI0NjIyNzkyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1ODU0Mjg2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEhWQSB0byBQRk4gTWFwcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGh2YV90b19wZm5gIGZ1bmN0aW9uIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24uIEl0IGFwcGVhcnMgdGhhdCBgaHZhX3RvX3BmbmAgY2FsbHMgYGh2YV90b19wZm5fcmVtYXBwZWRgLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGludHMgYXQgc29tZSBraW5kIG9mIHJlbWFwcGluZyBpbnZvbHZlZCwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBCZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaHZhX3RvX3BmbmAgaXRzZWxmIGlzIGRvaW5nLiBMZXQncyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggY2hlY2sgb2YgdGhlIGBodmFfdG9fcGZuYCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFjY29tcGxpc2gsIGFuZCB0aGUgcm9sZSBvZiB0aGUgcmVtYXAgZnVuY3Rpb24gaXMgcGxheWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDoyOC4zMTAwNTQ3OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNzI3MjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodmFfdG9fcGZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTM4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTQwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ni1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODc6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg4LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5Ny1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5OTg6XFx0aWYgKGh2YV90b19wZm5fZmFzdChrZnAsIFxcdTAwMjZwZm4pKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5OS1cXHRcXHRyZXR1cm4gcGZuO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAwMC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMDE6XFx0bnBhZ2VzID0gaHZhX3RvX3Bmbl9zbG93KGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDAyLVxcdGlmIChucGFnZXMgPT0gMSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNS1cXHRlbHNlIGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNjpcXHRcXHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDE3LVxcdFxcdGlmIChyID09IC1FQUdBSU4pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMzI9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA0Ny1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNDg6XFx0cmV0dXJuIGh2YV90b19wZm4oa2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNDktfVxcbi0tXFxudmlydC9rdm0va3ZtX21tLmg9Mjc9c3RydWN0IGt2bV9mb2xsb3dfcGZuIHtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tbS5oLTU4LVxcbnZpcnQva3ZtL2t2bV9tbS5oOjU5Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKTtcXG52aXJ0L2t2bS9rdm1fbW0uaC02MC1cXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9MTI3PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1NC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjE1NTpzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1Ni17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTIwOC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjIwOTpcXHRcXHRuZXdfcGZuID0gaHZhX3RvX3BmbihcXHUwMDI2a2ZwKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTIxMC1cXHRcXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihuZXdfcGZuKSlcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9MjU2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjMyMjpcXHQvKiBOb3RlOiB0aGUgb2Zmc2V0IG11c3QgYmUgY29ycmVjdCBiZWZvcmUgY2FsbGluZyBodmFfdG9fcGZuX3JldHJ5KCkgKi9cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMy1cXHRncGMtXFx1MDAzZXVodmEgKz0gcGFnZV9vZmZzZXQ7XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyOS1cXHRpZiAoIWdwYy1cXHUwMDNldmFsaWQgfHwgaHZhX2NoYW5nZSkge1xcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMwOlxcdFxcdHJldCA9IGh2YV90b19wZm5fcmV0cnkoZ3BjKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMS1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDozMC40MjczMzIxNzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxOTEzNjg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gS1ZNIFBGTiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgS1ZNIGhhbmRsZXMgUGh5c2ljYWwgRnJhbWUgTnVtYmVycyAoUEZOcykuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgaHZhX3RvX3BmbmAg4oCTIG9yIGF0IGxlYXN0LCBzb21ldGhpbmcgd2l0aCB0aGF0IG5hbWUgYW5kIGZ1bmN0aW9uIHNpZ25hdHVyZSDigJMgaXMgZXhwb3NlZCBvdXRzaWRlIGl0cyBsaWtlbHkgb3JpZ2luYWwgY29tcGlsYXRpb24gdW5pdCB3aXRoaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCB0ZWxscyBtZSB0aGF0IHRoaXMgdHJhbnNsYXRpb24gZnVuY3Rpb24gaXMgKmludGVuZGVkKiBmb3IgdXNlIGVsc2V3aGVyZSwgd2hpY2ggaW4gdHVybiBtZWFucyBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3Igc29tZSBjcm9zcy1tb2R1bGUgaW50ZXJhY3Rpb24gb3IgYWRkcmVzcyBzcGFjZSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoaXMgZnVydGhlciwgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGh2YV90b19wZm5gIGlzIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgZm9sbG93X2ZhdWx0X3BmbmAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGl0IGlzIHdvcnRoIHRvIGNoZWNrIHRoaXMgZnVuY3Rpb24sIGFzIGBodmFfdG9fcGZuYCBwcm9iYWJseSB0cmFuc2xhdGVzIGhvc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGZuLCBhbmQgYGZvbGxvd19mYXVsdF9wZm5gIGlzIHJlbGF0ZWQgdG8gZmF1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc4MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjMzLjk0NjQ3MjEwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMDk5NzA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xsb3dfZmF1bHRfcGZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTM0PXN0YXRpYyB2b2lkIHZmaW9fYmF0Y2hfZmluaShzdHJ1Y3QgdmZpb19iYXRjaCAqYmF0Y2gpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTUzOS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU0MDpzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNTQxLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nICpwZm4sXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTU4Mz1zdGF0aWMgbG9uZyB2YWRkcl9nZXRfcGZucyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkcixcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNjE0LVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NjE1OlxcdFxcdHJldCA9IGZvbGxvd19mYXVsdF9wZm4odm1hLCBtbSwgdmFkZHIsIHBmbiwgXFx1MDAyNmFkZHJfbWFzayxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTYxNi1cXHRcXHRcXHRcXHQgICAgICAgcHJvdCBcXHUwMDI2IElPTU1VX1dSSVRFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6MzYuMjc3NDc0NDU4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODU2MjAwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipTdGF0aWMgRnVuY3Rpb24gSW5xdWlyaWVzKipcblxuT2theSwgc28gYHZhZGRyX2dldF9wZm5zYCBpcyBhbHNvIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0J3MgbGlrZWx5IHNjb3BlZCB3aXRoaW4gYSBzaW5nbGUgY29tcGlsYXRpb24gdW5pdCwgYW5kIGl0cyB1c2FnZSBpcyBpbnRlbnRpb25hbGx5IHJlc3RyaWN0ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlc2Ugc29ydHMgb2Ygb3B0aW1pemF0aW9ucywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIGlzIGtleSB0byBmdWxseSB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgdmlydHVhbCBtZW1vcnkgc3lzdGVtIGlzIHN0cnVjdHVyZWQgaGVyZS4gU28sIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHZhZGRyX2dldF9wZm5zYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoaXMgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgaXRzIHNwZWNpZmljIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yayBhbmQgaGlnaGxpZ2h0IGFueSBkZXBlbmRlbmNpZXMgb3IgY29uc3RyYWludHMuIEknbGwgbmVlZCB0byB1c2Ugc29tZSB0b29saW5nLCBwcm9iYWJseSBhIHN5bWJvbCBsb29rdXAgb3IgY3Jvc3MtcmVmZXJlbmNlIHRvb2wgdG8gZG8gdGhpcyBlZmZlY3RpdmVseSwgb3Igc2ltcGx5IHNlYXJjaCB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkuIFRoaXMgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzg3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6MzkuMzYzMDk4MDMxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEwNDIyNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZhZGRyX2dldF9wZm5zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTQwPXN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU4Mi0gKi9cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU4MzpzdGF0aWMgbG9uZyB2YWRkcl9nZXRfcGZucyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkcixcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU4NC1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcywgaW50IHByb3QsIHVuc2lnbmVkIGxvbmcgKnBmbixcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9Njc0PXN0YXRpYyBsb25nIHZmaW9fcGluX3BhZ2VzX3JlbW90ZShzdHJ1Y3QgdmZpb19kbWEgKmRtYSwgdW5zaWduZWQgbG9uZyB2YWRkcixcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzA5LVxcdFxcdFxcdC8qIEVtcHR5IGJhdGNoLCBzbyByZWZpbGwgaXQuICovXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo3MTA6XFx0XFx0XFx0cmV0ID0gdmFkZHJfZ2V0X3BmbnMobW0sIHZhZGRyLCBucGFnZSwgZG1hLVxcdTAwM2Vwcm90LFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzExLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBmbiwgYmF0Y2gpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy03MzQtXFx0XFx0ICogcGZuIGlzIHByZXNldCBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvZiB0aGlzIGlubmVyIGxvb3BcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjczNTpcXHRcXHQgKiBkdWUgdG8gdGhlIGZhY3QgdGhhdCB2YWRkcl9nZXRfcGZucygpIG5lZWRzIHRvIHByb3ZpZGUgdGhlXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy03MzYtXFx0XFx0ICogaW5pdGlhbCBwZm4gZm9yIHBmbm1hcHMuICBUaGVyZWZvcmUgdG8gcmVkdWNlIHJlZHVuZGFuY3ksXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTc0OS1cXHRcXHRcXHQgKiBVc2luZyBHVVAgd2l0aCB0aGUgRk9MTF9MT05HVEVSTSBpblxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NzUwOlxcdFxcdFxcdCAqIHZhZGRyX2dldF9wZm5zKCkgd2lsbCBub3QgcmV0dXJuIGludmFsaWRcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTc1MS1cXHRcXHRcXHQgKiBvciByZXNlcnZlZCBwYWdlcy5cXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9ODM4PXN0YXRpYyBpbnQgdmZpb19waW5fcGFnZV9leHRlcm5hbChzdHJ1Y3QgdmZpb19kbWEgKmRtYSwgdW5zaWduZWQgbG9uZyB2YWRkcixcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtODUwLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6ODUxOlxcdHJldCA9IHZhZGRyX2dldF9wZm5zKG1tLCB2YWRkciwgMSwgZG1hLVxcdTAwM2Vwcm90LCBwZm5fYmFzZSwgXFx1MDAyNmJhdGNoKTtcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTg1Mi1cXHRpZiAocmV0ICE9IDEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjQxLjU3MzUyNjgxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYwNjk2NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZGSU8gUGFnZSBQaW5uaW5nIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIGJvdGggYHZmaW9fcGluX3BhZ2VzX3JlbW90ZWAgYW5kIGB2ZmlvX3Bpbl9wYWdlX2V4dGVybmFsYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBsaW1pdHMgdGhlaXIgc2NvcGUgYW5kIGFjY2Vzc2liaWxpdHkgd2l0aGluIHRoZSBWRklPIGNvZGViYXNlLiBUaGV5J3JlIGludGVybmFsIGZ1bmN0aW9ucywgZWZmZWN0aXZlbHkgaGlkZGVuIGZyb20gdGhlIG91dHNpZGUgd29ybGQgZXhjZXB0IHRocm91Z2ggdGhlaXIgZGVmaW5lZCBpbnRlcmZhY2VzLCBidXQgaXQgc3RpbGwgbWVhbnMgdGhleSBhcmUgbm90IHZpc2libGUgb3V0c2lkZSB0aGVpciBDIGZpbGVzLlxuXG5MZXQncyBkaXZlIGRlZXBlciBhbmQgZm9jdXMgb24gYHZmaW9fcGluX3BhZ2VzX3JlbW90ZWAgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHBhZ2UgcGlubmluZyBwcm9jZXNzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBwaW5uaW5nIG1lbW9yeSB0aGF0IGlzICphbHJlYWR5KiByZW1vdGUgb3Igc29tZXRoaW5nIHRoZSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHJlbW90ZT8gSXMgdGhpcyBhYm91dCBwaW5uaW5nIHBhZ2VzIGZvciBETUEgdHJhbnNmZXJzIGFjcm9zcyBhIGRldmljZSBvciBmb3Igc29tZSBvdGhlciBwdXJwb3NlPyBJIG5lZWQgdG8gcmV2aWV3IGl0cyBjYWxsaW5nIGNvbnRleHRzIGFuZCBpdHMgaW1wbGVtZW50YXRpb24uIEknbSBhc3N1bWluZyB3ZSBhcmUgdXNpbmcgdmZpbywgc28gRE1BIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIG1lbW9yeS4gSSBzaG91bGQgYWxzbyBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgbWF5YmUgaW52ZXN0aWdhdGluZyB0aGUgYGRtYV9idWZgIG9yIGBwY2lfZG1hYCBzdHJ1Y3R1cmVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBWRklPIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBob3cgaXQgaW1wYWN0cyBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzI0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6NDUuMTM0MjI2MzkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ1MjY1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGluX3BhZ2VzX3JlbW90ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTYzNz1zdGF0aWMgbG9uZyB2cGZuX3BhZ2VzKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy02NzMtICovXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo2NzQ6c3RhdGljIGxvbmcgdmZpb19waW5fcGFnZXNfcmVtb3RlKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNjc1LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBucGFnZSwgdW5zaWduZWQgbG9uZyAqcGZuX2Jhc2UsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE1Nzk9c3RhdGljIGludCB2ZmlvX3Bpbl9tYXBfZG1hKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSwgc3RydWN0IHZmaW9fZG1hICpkbWEsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE1OTMtXFx0XFx0LyogUGluIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgKi9cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjE1OTQ6XFx0XFx0bnBhZ2UgPSB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoZG1hLCB2YWRkciArIGRtYS1cXHUwMDNlc2l6ZSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE1OTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBcXHUwMDI2cGZuLCBsaW1pdCxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9MTgwMj1zdGF0aWMgaW50IHZmaW9faW9tbXVfcmVwbGF5KHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTg2MS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjE4NjI6XFx0XFx0XFx0XFx0bnBhZ2UgPSB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoZG1hLCB2YWRkcixcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE4NjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDo0Ny4yNzk0OTgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjc3Mzk2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIFJldmlldyBvZiBETUEgTWFwcGluZyBpbiBWRklPKipcblxuUmlnaHQsIGB2ZmlvX3Bpbl9tYXBfZG1hYC4uLiB0aGF0J3MgYSAqc3RhdGljKiBmdW5jdGlvbiwgaXNuJ3QgaXQ/IE9rYXksIGxldCdzIGp1c3QgbWFrZSBzdXJlIG15IG1lbnRhbCBtb2RlbCBpcyBhY2N1cmF0ZSBoZXJlLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHZmaW9fcGluX21hcF9kbWFgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0J3MgZG9pbmcuIEdvdHRhIGtlZXAgdGhlIGRldGFpbHMgc2hhcnAgdG8gbWFpbnRhaW4gYSB0aWdodCBncmlwIG9uIHRoZXNlIERNQSBtYXBwaW5nIGludHJpY2FjaWVzIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUga2V5IGFzcGVjdHMgaXQgaGFuZGxlcz8gSXQncyBiZWVuIGEgd2hpbGUsIHNvIGEgcXVpY2sgcmVmcmVzaGVyIGlzIGluIG9yZGVyIHRvIGtlZXAgdGhpcyBvcHRpbWl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTQ4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6NTAuMzA3MjQyNjczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMxMzQ0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGluX21hcF9kbWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNTUyPXN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LCBkbWFfYWRkcl90IGlvdmEsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE1NzgtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNTc5OnN0YXRpYyBpbnQgdmZpb19waW5fbWFwX2RtYShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTU4MC1cXHRcXHRcXHQgICAgc2l6ZV90IG1hcF9zaXplKVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNjc5PXN0YXRpYyBpbnQgdmZpb19kbWFfZG9fbWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTc4OC1cXHRlbHNlXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNzg5OlxcdFxcdHJldCA9IHZmaW9fcGluX21hcF9kbWEoaW9tbXUsIGRtYSwgc2l6ZSk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNzkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDo1Mi42Mzg1OTYxMDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzNDYzNTkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB2ZmlvX2RtYV9kb19tYXBgKipcblxuT2theSwgc28gYHZmaW9fZG1hX2RvX21hcGAgaXMgbWFya2VkIGFzIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdywgaXQgaW1wbGllcyBhIG1vcmUgZm9jdXNlZCBzY29wZSB3aXRoaW4gdGhlIFZGSU8gZHJpdmVyLCBsaWtlbHkgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgZm9yIGB2ZmlvX2RtYV9kb19tYXBgIGl0c2VsZi4gVW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gaXMgY3J1Y2lhbCB0byBmdWxseSBncmFzcCBob3cgRE1BIG1hcHBpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBWRklPIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLCBpbnB1dHMsIGFuZCBvdXRwdXRzIGFuZCB3aGF0IGRlY2lzaW9ucyBpdCBpcyBtYWtpbmcuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Njg3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6NTUuNDczMjM4MjU1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY3NTc1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fZG1hX2RvX21hcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE2NDc9c3RhdGljIGludCB2ZmlvX2NoYW5nZV9kbWFfb3duZXIoc3RydWN0IHZmaW9fZG1hICpkbWEpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE2NzgtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNjc5OnN0YXRpYyBpbnQgdmZpb19kbWFfZG9fbWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE2ODAtXFx0XFx0XFx0ICAgc3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX21hcCAqbWFwKVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0yODk0PXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9tYXBfZG1hKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMjkwOS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjI5MTA6XFx0cmV0dXJuIHZmaW9fZG1hX2RvX21hcChpb21tdSwgXFx1MDAyNm1hcCk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0yOTExLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6NTcuNjQwODE5MzQxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzY2NTczNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgYHZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYWAqKlxuXG5Pa2F5LCBzbyBJJ20gcHJvY2Vzc2luZyB0aGlzIGNvZGUgYW5kIEkndmUganVzdCBub3RpY2VkIHRoYXQgYHZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIGl0J3Mgc2NvcGVkIHRvIHRoaXMgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggaXNuJ3QgaW5oZXJlbnRseSBhIHByb2JsZW0sIGJ1dCBpdCBkb2VzIG1lYW4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYW5kIGlmIHRoYXQgc2NvcGUgaXMgdHJ1bHkgc3VmZmljaWVudC4gTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgVkZJTyBJT01NVSBUeXBlIDEgc2NoZW1lLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbiBpcyBhcHByb3ByaWF0ZSBhbmQgZG9lc24ndCBoaW5kZXIgYW55IHBvdGVudGlhbCBmdXR1cmUgZmxleGliaWxpdHkgb3IgaW50cm9kdWNlIGFueSBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgbGltaXRhdGlvbnMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYHZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjA4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6MDEuMzE3NDc4OTI1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUzOTg1MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTI4MzU9c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX2dldF9pbmZvKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMjg5My1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjI4OTQ6c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWEoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMjg5NS1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTMwODA9c3RhdGljIGxvbmcgdmZpb19pb21tdV90eXBlMV9pb2N0bCh2b2lkICppb21tdV9kYXRhLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0zMDkwLVxcdGNhc2UgVkZJT19JT01NVV9NQVBfRE1BOlxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6MzA5MTpcXHRcXHRyZXR1cm4gdmZpb19pb21tdV90eXBlMV9tYXBfZG1hKGlvbW11LCBhcmcpO1xcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMzA5Mi1cXHRjYXNlIFZGSU9fSU9NTVVfVU5NQVBfRE1BOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NTowMy40NzE0Njk4NDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NjczNjM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgVkZJTyBJT01NVSBJT0NUTCBFbnRyeSBQb2ludCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYHZmaW9faW9tbXVfdHlwZTFfaW9jdGxgIGlzICp0aGUqIGlvY3RsIGhhbmRsZXIsIHRoZSBtYWluIGZ1bmN0aW9uLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdCBzZWVtcyB0aGUgY29ubmVjdGlvbiBoYXBwZW5zIHZpYSB0aGUgYHZmaW9faW9tbXVfZHJpdmVyX29wc2Agc3RydWN0LiBMb29raW5nIGF0IHRoYXQsIHRoZSBgLmlvY3RsYCBmaWVsZCBpcyBhc3NpZ25lZCB0byBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAuIFJpZ2h0LCBzbyB0aGF0IGNvbmZpcm1zIGl0LCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgSS9PIGNvbnRyb2wgcmVxdWVzdHMgaXMgaW5kZWVkIGB2ZmlvX2lvbW11X3R5cGUxX2lvY3RsYC4gTm93IHRvIGNvbnRpbnVlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gSSdsbCBtb3ZlIG9uIHRvIGNoZWNrIGBhY3JuX3ZtX3JhbV9tYXBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgyNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NTowNi41NTgyMDk4OTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk3MjI5NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWNybl92bV9yYW1fbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC9hY3JuL2Fjcm5fZHJ2Lmg9MTk4PWludCBhY3JuX3ZtX21lbXNlZ191bm1hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKTtcXG5kcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oOjE5OTppbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xcbmRyaXZlcnMvdmlydC9hY3JuL2Fjcm5fZHJ2LmgtMjAwLXZvaWQgYWNybl92bV9hbGxfcmFtX3VubWFwKHN0cnVjdCBhY3JuX3ZtICp2bSk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jPTEwOD1pbnQgYWNybl92bV9tZW1zZWdfbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTExMi1cXHRpZiAobWVtbWFwLVxcdTAwM2V0eXBlID09IEFDUk5fTUVNTUFQX1JBTSlcXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jOjExMzpcXHRcXHRyZXR1cm4gYWNybl92bV9yYW1fbWFwKHZtLCBtZW1tYXApO1xcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTE0LVxcbi0tXFxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYz0xMzE9aW50IGFjcm5fdm1fbWVtc2VnX3VubWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE0OS0vKipcXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jOjE1MDogKiBhY3JuX3ZtX3JhbV9tYXAoKSAtIENyZWF0ZSBhIFJBTSBFUFQgbWFwcGluZyBvZiBVc2VyIFZNLlxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTUxLSAqIEB2bTpcXHRcXHRUaGUgVXNlciBWTSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE1NS0gKi9cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jOjE1NjppbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXFxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYy0xNTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NTowOC44Mzc5Mzk0M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY0NDY0NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFDUk4gTWVtb3J5IE1hcHBpbmcgTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBgYWNybl92bV9yYW1fbWFwYC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgdmlydHVhbCBtYWNoaW5lJ3MgUkFNIHByb3Blcmx5IG1hcHBlZCwgb2J2aW91c2x5LiBUaGUga2V5IHRoaW5nIGlzICpob3cqIGl0IGdldHMgY2FsbGVkLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQncyBnb2luZyB0byBiZSBjYWxsZWQgYnkgc29tZXRoaW5nIGhpZ2hlciB1cCB0aGUgc3RhY2suIEFuZCB5ZXAsIGNvbmZpcm1lZCDigJMgaXQgbG9va3MgbGlrZSBgYWNybl92bV9tZW1zZWdfbWFwYCBpcyB0aGUgb25lIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciBpbnZva2luZyBpdC4gU28sIGBtZW1zZWdfbWFwYCBpcyBoYW5kbGluZyB0aGUgYnJvYWRlciBtZW1vcnkgc2VnbWVudCBtYXBwaW5nIHRhc2tzLCBhbmQgdGhlbiBpdCBsZXZlcmFnZXMgdGhlIG1vcmUgc3BlY2lhbGl6ZWQgYHJhbV9tYXBgIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBSQU0gbWFwcGluZy4gSXQncyBhIG5pY2UsIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMsIHR5cGljYWwgb2YgYSB3ZWxsLWRlc2lnbmVkIGtlcm5lbCBtb2R1bGUuIGBtZW1zZWdfbWFwYCBwcm9iYWJseSBoYW5kbGVzIHRoaW5ncyBsaWtlIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlIHBhZ2UgdGFibGVzLCBtYW5hZ2luZyBwaHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9ucywgZGVhbGluZyB3aXRoIG1lbW9yeSBhdHRyaWJ1dGVzLCBhbmQgY29vcmRpbmF0aW5nIHdpdGggb3RoZXIgc3Vic3lzdGVtcywgYmVmb3JlIHVsdGltYXRlbHkgY2FsbGluZyBgcmFtX21hcGAgdG8gaGFuZGxlIHRoZSBhY3R1YWwgcGh5c2ljYWwgdG8gdmlydHVhbCBtYXBwaW5nIG9mIFJBTS4gVGhhdCdzIGEgZ29vZCBtZW50YWwgbW9kZWwgdG8ga2VlcCBpbiBtaW5kIGFzIEkgZGVsdmUgZnVydGhlciBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmNoaXRlY3R1cmUuIEtub3dpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NToxMi42MDI0MDYzNzJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjM3MTQ1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWNybl92bV9tZW1zZWdfbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC9hY3JuL2Fjcm5fZHJ2Lmg9MTk2PWludCBhY3JuX21tX3JlZ2lvbl9kZWwoc3RydWN0IGFjcm5fdm0gKnZtLCB1NjQgdXNlcl9ncGEsIHU2NCBzaXplKTtcXG5kcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oOjE5NzppbnQgYWNybl92bV9tZW1zZWdfbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xcbmRyaXZlcnMvdmlydC9hY3JuL2Fjcm5fZHJ2LmgtMTk4LWludCBhY3JuX3ZtX21lbXNlZ191bm1hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKTtcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jPTEwOD1zdGF0aWMgbG9uZyBhY3JuX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTIyMy1cXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYzoyMjQ6XFx0XFx0cmV0ID0gYWNybl92bV9tZW1zZWdfbWFwKHZtLCBcXHUwMDI2bWVtbWFwKTtcXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0yMjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jPTg1PWludCBhY3JuX21tX3JlZ2lvbl9kZWwoc3RydWN0IGFjcm5fdm0gKnZtLCB1NjQgdXNlcl9ncGEsIHU2NCBzaXplKVxcbi0tXFxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYy0xMDctXFxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYzoxMDg6aW50IGFjcm5fdm1fbWVtc2VnX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6MTQuODI2MTI4NjY4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjQxMzE5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBBQ1JOIE1lbW9yeSBNYXBwaW5nIExvZ2ljKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgbWVtb3J5IG1hcHBpbmcgaW4gdGhlIEFDUk4gaHlwZXJ2aXNvciwgYW5kIGl0IGxvb2tzIGxpa2UgYGFjcm5fdm1fbWVtc2VnX21hcGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gU2luY2UgaXQncyBjYWxsZWQgYnkgYGFjcm5fZGV2X2lvY3RsYCwgdGhhdCBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgcGljdHVyZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyBwaHlzaWNhbCBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzYzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6MTcuNzkwMjYzNjczWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU3MjA0MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfYWNjZXNzX3BoeXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jZHgvY2R4LmM9NjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgY2R4X3BoeXNfdm1fb3BzID0ge1xcbmRyaXZlcnMvY2R4L2NkeC5jLTY2My0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9jZHgvY2R4LmM6NjY0OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvY2R4L2NkeC5jLTY2NS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYz0zMTk9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7XFxuZHJpdmVycy9jaGFyL21lbS5jLTMyMC0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9jaGFyL21lbS5jOjMyMTpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5c1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjItI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM9ODA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWZ1X3ZtYV9vcHMgPSB7XFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwNi0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jOjgwNzpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA4LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xcbmRyaXZlcnMvcGNpL21tYXAuYy0xOS0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9wY2kvbW1hcC5jOjIwOlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvcGNpL21tYXAuYy0yMS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvdWlvL3Vpby5jPTczNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb19waHlzaWNhbF92bV9vcHMgPSB7XFxuZHJpdmVycy91aW8vdWlvLmMtNzM3LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzg6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy91aW8vdWlvLmMtNzM5LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTc4Mz1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTgzNS1cXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcXG5pbmNsdWRlL2xpbnV4L21tLmg6ODM2OlxcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xcbmluY2x1ZGUvbGludXgvbW0uaC04MzctXFx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0zMTMwPWNvcHlfcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjMxMzE6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzEzMi1cXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7XFxuLS1cXG5tbS9tZW1vcnkuYz02OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcXG4tLVxcbm1tL21lbW9yeS5jLTY5NjctLyoqXFxubW0vbWVtb3J5LmM6Njk2ODogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3NcXG5tbS9tZW1vcnkuYy02OTY5LSAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXFxuLS1cXG5tbS9tZW1vcnkuYy02OTc4LSAqL1xcbm1tL21lbW9yeS5jOjY5Nzk6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1vcnkuYy02OTgwLVxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxcbi0tXFxubW0vbWVtb3J5LmMtNzAyNy19XFxubW0vbWVtb3J5LmM6NzAyODpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcXG5tbS9tZW1vcnkuYy03MDI5LSNlbmRpZlxcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaD02MzI9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjg0LVxcdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6Njg1OlxcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjg2LVxcdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjE5Ljk0NzQ3MzE0OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODM0NTM4MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEFjY2VzcyBNZWNoYW5pc21zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGFjY2VzcyBtZXRob2RzLiBJdCBsb29rcyBsaWtlIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHVzZWQgYXMgdGhlIGAuYWNjZXNzYCBtZW1iZXIgd2l0aGluIHRoZSBgdm1fb3BlcmF0aW9uc19zdHJ1Y3RgLiBJdCdzIGV4cG9ydGVkLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0J3MgcmVsYXRlZC4gTXkgY3VycmVudCB0aGlua2luZyBpcyB0aGF0IHRoZSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXRzZWxmLCBhbmQgdGhlbiB0aGUgbW9yZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgcmVsYXRlZCByZWFkcyBhbmQgd3JpdGVzIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAuIFRoZW4sIG9mIGNvdXJzZSwgdGhlcmUgYXJlIHRoZSBtb3JlIGRldmljZS1zcGVjaWZpYyBpb2N0bHM6IGBhY3JuX2Rldl9pb2N0bGAgYW5kIGB2ZmlvX2lvbW11X3R5cGUxX2lvY3RsYC5cblxuSG9sZCBvbi4uLiBgczM5MF9wY2lfbW1pb193cml0ZWAgYW5kIGBzMzkwX3BjaV9tbWlvX3JlYWRgIGFyZSBhY3R1YWxseSBzeXNjYWxscyBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBgYWNybl9kZXZfaW9jdGxgIGlzIHRoZSBpb2N0bCBmb3IgQUNSTiwgYW5kIGB2ZmlvX2lvbW11X3R5cGUxX2lvY3RsYCBpcyBmb3IgVkZJTy4gSSBrbm93IGFib3V0IHRob3NlLiBJIGFsc28gc2VlIHRoYXQgYGh2YV90b19wZm5gIGlzIGNhbGxlZCBieSBga3ZtX2ZvbGxvd19wZm5gLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBzZXZlcmFsIEtWTSBmdW5jdGlvbnMuIEludGVyZXN0aW5nLCBidXQgYGt2bV9mb2xsb3dfcGZuYCBpcyBzdGF0aWMgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBUaGF0IG1lYW5zIEkgaGF2ZSB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGF0IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGt2bV9mb2xsb3dfcGZuYCBuZXh0LCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCdzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY1NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NToyNC43ODIwMTQ1NTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzMxMTE1MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2ZvbGxvd19wZm5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0yODI1PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4MjYtXFxudmlydC9rdm0va3ZtX21haW4uYzoyODI3OnN0YXRpYyBrdm1fcGZuX3Qga3ZtX3Jlc29sdmVfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4MjgtXFx0XFx0XFx0XFx0IHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKm1hcCwgYm9vbCB3cml0YWJsZSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4NTE6c3RhdGljIGJvb2wgaHZhX3RvX3Bmbl9mYXN0KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTIte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yODgyLSAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg4MzpzdGF0aWMgaW50IGh2YV90b19wZm5fc2xvdyhzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjkzOT1zdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudmlydC9rdm0va3ZtX21haW4uYzoyOTQwOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDEte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4Nzprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5ODgte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDMxLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAzMjpzdGF0aWMga3ZtX3Bmbl90IGt2bV9mb2xsb3dfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAzMy17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwNTE9a3ZtX3Bmbl90IF9fa3ZtX2ZhdWx0aW5fcGZuKGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1NC17XFxudmlydC9rdm0va3ZtX21haW4uYzozMDU1OlxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDU2LVxcdFxcdC5zbG90ID0gc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2OC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNjk6XFx0cmV0dXJuIGt2bV9mb2xsb3dfcGZuKFxcdTAwMjZrZnApO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA3MC19XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwOTc9c3RydWN0IHBhZ2UgKl9fZ2ZuX3RvX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGJvb2wgd3JpdGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwOTktXFx0c3RydWN0IHBhZ2UgKnJlZmNvdW50ZWRfcGFnZSA9IE5VTEw7XFxudmlydC9rdm0va3ZtX21haW4uYzozMTAwOlxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTAxLVxcdFxcdC5zbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMTA2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzEwNzpcXHQodm9pZClrdm1fZm9sbG93X3BmbihcXHUwMDI2a2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMDgtXFx0cmV0dXJuIHJlZmNvdW50ZWRfcGFnZTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzExMj1pbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExNC17XFxudmlydC9rdm0va3ZtX21haW4uYzozMTE1OlxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTE2LVxcdFxcdC5zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEyOC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMjk6XFx0bWFwLVxcdTAwM2VwZm4gPSBrdm1fZm9sbG93X3BmbihcXHUwMDI2a2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMzAtXFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4obWFwLVxcdTAwM2VwZm4pKVxcbi0tXFxudmlydC9rdm0va3ZtX21tLmgtMjYtXFxudmlydC9rdm0va3ZtX21tLmg6Mjc6c3RydWN0IGt2bV9mb2xsb3dfcGZuIHtcXG52aXJ0L2t2bS9rdm1fbW0uaC0yOC1cXHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xcbi0tXFxudmlydC9rdm0va3ZtX21tLmgtNTgtXFxudmlydC9rdm0va3ZtX21tLmg6NTk6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApO1xcbnZpcnQva3ZtL2t2bV9tbS5oLTYwLVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYz0xNTU9c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2My1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjE2NDpcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTY1LVxcdFxcdC5zbG90ID0gZ3BjLVxcdTAwM2VtZW1zbG90LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NToyNi45MTUxMzE0NjJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1Mjc5NzM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzLlxuXG4qKktWTSBTeW1ib2wgQW5hbHlzaXM6IGBfX2t2bV9mYXVsdGluX3BmbmAqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGF0IHNldmVyYWwga2V5IEtWTSBmdW5jdGlvbnMg4oCTIHNwZWNpZmljYWxseSBgX19rdm1fZmF1bHRpbl9wZm5gLCBgX19nZm5fdG9fcGFnZWAsIGFuZCBgX19rdm1fdmNwdV9tYXBgIOKAkyBhcmUgYWxsIGZ1bm5lbGluZyBkb3duIHRvIGEgY2FsbCB0byBga3ZtX2ZvbGxvd19wZm5gLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEdpdmVuIGhvdyB3aWRlc3ByZWFkIHRoZSB1c2UgYW5kL29yIGV4cG9ydCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHdpdGhpbiBLVk0sIGl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYF9fa3ZtX2ZhdWx0aW5fcGZuYCBpcyBhIHBvdGVudGlhbGx5IGZydWl0ZnVsIHN5bWJvbCB0byB6ZXJvIGluIG9uIGZvciBkZWVwZXIgYW5hbHlzaXMuIEl0J3MgYSBjZW50cmFsIHBvaW50IG9mIGludGVyYWN0aW9uLiBHaXZlbiB0aGUgaW50ZXJjb25uZWN0ZWRuZXNzIEkgc2VlIGhlcmUsIGl0IHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIHVuZGVyc3RhbmRpbmcgYSBsYXJnZXIgY2h1bmsgb2YgS1ZNJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byBgX19rdm1fZmF1bHRpbl9wZm5gLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg2NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjMwLjE2NzkzMjc5M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1OTQ5ODM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2t2bV9mYXVsdGluX3BmblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9tbXUuYz0xODQ4PXN0YXRpYyBpbnQga3ZtX3MyX2ZhdWx0X2dldF92bWFfaW5mbyhjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xODc4LVxcdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxODc5OlxcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0b1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE4ODAtXFx0ICogYWNxdWlyaW5nIGt2bS1cXHUwMDNlbW11X2xvY2suXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xOTAzPXN0YXRpYyBpbnQga3ZtX3MyX2ZhdWx0X3Bpbl9wZm4oY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTkxMS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxOTEyOlxcdHMydmktXFx1MDAzZXBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHMyZmQtXFx1MDAzZW1lbXNsb3QsIGdldF9jYW5vbmljYWxfZ2ZuKHMyZmQsIHMydmkpLFxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE5MTMtXFx0XFx0XFx0XFx0ICAgICAga3ZtX2lzX3dyaXRlX2ZhdWx0KHMyZmQtXFx1MDAzZXZjcHUpID8gRk9MTF9XUklURSA6IDAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xOTQ5LVxcdFxcdFxcdCAqIGxhcmdlc3QgcXVhbnRpdHkgd2UgY2FuIG1hcC4gIElmIGluc3RlYWQgaXQgd2FzIG1hcHBlZFxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjE5NTA6XFx0XFx0XFx0ICogdmlhIF9fa3ZtX2ZhdWx0aW5fcGZuKCksIHZtYV9wYWdlc2l6ZSBpcyBzZXQgdG8gUEFHRV9TSVpFXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTk1MS1cXHRcXHRcXHQgKiBhbmQgbXVzdCBub3QgYmUgdXBncmFkZWQuXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzU4PXN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MTEtXFx0aWYgKCEqaXNfZ21lbSkge1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE0MTI6XFx0XFx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0ZV9mYXVsdCA/IEZPTExfV1JJVEUgOiAwLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MTMtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNndyaXRhYmxlLCBcXHUwMDI2cGFnZSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYz01MDY9aW50IGt2bXBwY19ib29rM3NfaHZfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYy02MDUtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2h2LmM6NjA2OlxcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKG1lbXNsb3QsIGdmbiwgd3JpdGluZyA/IEZPTExfV1JJVEUgOiAwLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9odi5jLTYwNy1cXHRcXHRcXHRcXHRcXHUwMDI2d3JpdGVfb2ssIFxcdTAwMjZwYWdlKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTgyMT1pbnQga3ZtcHBjX2Jvb2szc19pbnN0YW50aWF0ZV9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTg0Mi1cXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3QobWVtc2xvdCwgZ2ZuKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYzo4NDM6XFx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0aW5nID8gRk9MTF9XUklURSA6IDAsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtODQ0LVxcdFxcdFxcdFxcdFxcdTAwMjZ1cGdyYWRlX3dyaXRlLCBcXHUwMDI2cGFnZSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11X2hvc3QuYz0zMjA9c3RhdGljIGlubGluZSBpbnQga3ZtcHBjX2U1MDBfc2hhZG93X21hcChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdV9ob3N0LmMtMzU0LVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXVfaG9zdC5jOjM1NTpcXHRwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihzbG90LCBnZm4sIEZPTExfV1JJVEUsIFxcdTAwMjZ3cml0YWJsZSwgXFx1MDAyNnBhZ2UpO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXVfaG9zdC5jLTM1Ni1cXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pKSB7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz01MzY9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTU5OS1cXHQgKiBSZWFkIG1tdV9pbnZhbGlkYXRlX3NlcSBzbyB0aGF0IEtWTSBjYW4gZGV0ZWN0IGlmIHRoZSByZXN1bHRzIG9mXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NjAwOlxcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0byBhY3F1aXJpbmdcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MDEtXFx0ICoga3ZtLVxcdTAwM2VtbXVfbG9jay5cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYxNS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo2MTY6XFx0aGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCBpc193cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYxNy1cXHRcXHRcXHRcXHRcXHUwMDI2d3JpdGFibGUsIFxcdTAwMjZwYWdlKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jPTMzPWludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtNzMtXFx0XFx0XFx0c2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZi1cXHUwMDNlZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzo3NDpcXHRcXHRmLVxcdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihzbG90LCBmLVxcdTAwM2VnZm4sIGZvbGwsIFxcdTAwMjZmLVxcdTAwM2V3cml0YWJsZSwgXFx1MDAyNmYtXFx1MDAzZXBhZ2UpO1xcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTc1LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtODctXFx0XFx0XFx0Zm9sbCBcXHUwMDI2PSB+Rk9MTF9OT1dBSVQ7XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6ODg6XFx0XFx0XFx0Zi1cXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oc2xvdCwgZi1cXHUwMDNlZ2ZuLCBmb2xsLCBcXHUwMDI2Zi1cXHUwMDNld3JpdGFibGUsIFxcdTAwMjZmLVxcdTAwM2VwYWdlKTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy04OS1cXHRcXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYz0xMjk9aW50IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLCBnZm5fdCBnZm4sIGJvb2wgdylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTEzNS1cXHRmLVxcdTAwM2VnZm4gPSBnZm47XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTM2OlxcdGYtXFx1MDAzZXBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgZm9sbCwgXFx1MDAyNmYtXFx1MDAzZXdyaXRhYmxlLCBcXHUwMDI2Zi1cXHUwMDNlcGFnZSk7XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTM3LVxcdGlmIChpc19ub3Nsb3RfcGZuKGYtXFx1MDAzZXBmbikpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2NTY9c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjY0LVxcdGZvbGwgfD0gRk9MTF9OT1dBSVQ7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjY1OlxcdGZhdWx0LVxcdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cXHUwMDNlc2xvdCwgZmF1bHQtXFx1MDAzZWdmbiwgZm9sbCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NjYtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZmYXVsdC1cXHUwMDNlbWFwX3dyaXRhYmxlLCBcXHUwMDI2ZmF1bHQtXFx1MDAzZXJlZmNvdW50ZWRfcGFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2OTQtXFx0Zm9sbCBcXHUwMDI2PSB+Rk9MTF9OT1dBSVQ7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0Njk1OlxcdGZhdWx0LVxcdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cXHUwMDNlc2xvdCwgZmF1bHQtXFx1MDAzZWdmbiwgZm9sbCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2OTYtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZmYXVsdC1cXHUwMDNlbWFwX3dyaXRhYmxlLCBcXHUwMDI2ZmF1bHQtXFx1MDAzZXJlZmNvdW50ZWRfcGFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY5NDY9dm9pZCB2bXhfc2V0X2FwaWNfYWNjZXNzX3BhZ2VfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY5ODctXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2OTg4OlxcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgRk9MTF9XUklURSwgXFx1MDAyNndyaXRhYmxlLCBcXHUwMDI2cmVmY291bnRlZF9wYWdlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY5ODktXFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSlcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjg1PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMzEwLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMzExOmt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEzMTItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBmb2xsLCBib29sICp3cml0YWJsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMzE1PXN0YXRpYyBpbmxpbmUga3ZtX3Bmbl90IGt2bV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMzE4LXtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTMxOTpcXHRyZXR1cm4gX19rdm1fZmF1bHRpbl9wZm4oa3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKSwgZ2ZuLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMzIwLVxcdFxcdFxcdFxcdCB3cml0ZSA/IEZPTExfV1JJVEUgOiAwLCB3cml0YWJsZSwgcmVmY291bnRlZF9wYWdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzAzMj1zdGF0aWMga3ZtX3Bmbl90IGt2bV9mb2xsb3dfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDUwLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1MTprdm1fcGZuX3QgX19rdm1fZmF1bHRpbl9wZm4oY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGZvbGwsIGJvb2wgKndyaXRhYmxlLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDcwLX1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNzE6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fa3ZtX2ZhdWx0aW5fcGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjMyLjMyNzQzNTg4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTgwNTIwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gYF9fa3ZtX2ZhdWx0aW5fcGZuYCBpcyBhIEtWTSBpbnRlcm5hbCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgYSB1c2VmdWwgcG9pbnQgdG8gc3RhcnQgbG9va2luZyBhdC4gTGV0J3Mgc2VlLi4uIHRoZSByZWFsIGludGVyZXN0aW5nIHBvaW50IGhlcmUgaXMgdGhlIGZvY3VzIG9uIE1NSU8gb3BlcmF0aW9ucy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhvc2UgYHMzOTBfcGNpX21taW9fd3JpdGVgIGFuZCBgczM5MF9wY2lfbW1pb19yZWFkYCBzeXNjYWxscy4gUmlnaHQsIHRoZXkgKmFyZSogc3lzY2FsbHMsIHdoaWNoIG1lYW5zIFN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhlbSBkaXJlY3RseSBpZiB0aGV5J3JlIGRlc2NyaWJlZCBpbiB0aGUgc3l6bGFuZyBkZWZpbml0aW9uLiBIbW0sIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBpcyBkZWZpbml0ZWx5IGEgc3lzY2FsbC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGFyZSB0aGVzZSB3b3J0aCBmdXp6aW5nPyBZZXMsIG9mIGNvdXJzZSwgdGhleSBhcmUgc3lzY2FsbHMuXG5cbkFoLCBidXQgdGhleSBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBzcGVjaWZpYyB0byBzMzkwLiBUaGF0J3MgYSBiaXQgbGltaXRpbmcuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGdvb2QgbmV3cywgYXMgYSBjb3JlIE1NIG1vZGlmaWNhdGlvbiBvcGVucyB1cCBtYW55IGZ1enppbmcgcGF0aHMuIEkgY2FuIHJlYWNoIHRoaXMgdmlhIEtWTSwgVkZJTywgQUNSTiwgYW5kIGV2ZW4gdGhlIGdlbmVyaWMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIHBhdGguIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpdHNlbGYgaXMgdXNlZCBieSBgL2Rldi9tZW1gICh2aWEgYG1tYXBfbWVtX29wc2ApLCBQQ0kgTU1JTyBtYXBwaW5nIChgcGNpX3BoeXNfdm1fb3BzYCksIGFuZCBVSU8gKGB1aW9fcGh5c2ljYWxfdm1fb3BzYCkuIFNvLCBJIHNob3VsZCBiZSBhYmxlIHRvIGZ1enogdGhlIE1NSU8gbG9naWMgdGhyb3VnaCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuIFRoYXTigJlzIGEgbXVjaCBtb3JlIGdlbmVyYWwgYXBwcm9hY2guXG5cbk9rYXksIG5vdyBsZXQncyBnbyBhbmQgY2hlY2sgd2hvIGNhbGxzIGBmb2xsb3dfcGZubWFwX3N0YXJ0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6MzguMzg1NDkyMDM3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU3MDEyNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGxvd19wZm5tYXBfc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jPTEyOD1TWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb193cml0ZSwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTE4My1cXHRhcmdzLndyaXRlX2ZhdWx0ID0gdHJ1ZTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM6MTg0OlxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODUtXFx0aWYgKHJldCkge1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODYtXFx0XFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVxcdTAwM2VtbSwgbW1pb19hZGRyLCBGQVVMVF9GTEFHX1dSSVRFLCBOVUxMKTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM6MTg3OlxcdFxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYz0yODQ9U1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fcmVhZCwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTMzNi1cXHRhcmdzLndyaXRlX2ZhdWx0ID0gZmFsc2U7XFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjMzNzpcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzM4LVxcdGlmIChyZXQpIHtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzM5LVxcdFxcdGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cXHUwMDNlbW0sIG1taW9fYWRkciwgMCwgTlVMTCk7XFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjM0MDpcXHRcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzQxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTU0MD1zdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo1NTE6XFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NjQtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo1NjU6XFx0XFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NjYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmM9MTU2PWludCBhY3JuX3ZtX3JhbV9tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTkyLVxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmM6MTkzOlxcdFxcdFxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTk0LVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzEzND1zdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0zMTY2LX07XFxuaW5jbHVkZS9saW51eC9tbS5oOjMxNjc6aW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTMxNjgtdm9pZCBmb2xsb3dfcGZubWFwX2VuZChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY4MDg9c3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jLTY4MjItLyoqXFxubW0vbWVtb3J5LmM6NjgyMzogKiBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgLSBMb29rIHVwIGEgcGZuIG1hcHBpbmcgYXQgYSB1c2VyIHZpcnR1YWwgYWRkcmVzc1xcbm1tL21lbW9yeS5jLTY4MjQtICogQGFyZ3M6IFBvaW50ZXIgdG8gc3RydWN0IEBmb2xsb3dfcGZubWFwX2FyZ3NcXG4tLVxcbm1tL21lbW9yeS5jLTY4NTQtICovXFxubW0vbWVtb3J5LmM6Njg1NTppbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxcbm1tL21lbW9yeS5jLTY4NTYte1xcbi0tXFxubW0vbWVtb3J5LmMtNjk0Ny19XFxubW0vbWVtb3J5LmM6Njk0ODpFWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX3N0YXJ0KTtcXG5tbS9tZW1vcnkuYy02OTQ5LVxcbm1tL21lbW9yeS5jLTY5NTAtLyoqXFxubW0vbWVtb3J5LmM6Njk1MTogKiBmb2xsb3dfcGZubWFwX2VuZCgpOiBFbmQgYSBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgcHJvY2Vzc1xcbm1tL21lbW9yeS5jLTY5NTItICogQGFyZ3M6IFBvaW50ZXIgdG8gc3RydWN0IEBmb2xsb3dfcGZubWFwX2FyZ3NcXG5tbS9tZW1vcnkuYy02OTUzLSAqXFxubW0vbWVtb3J5LmM6Njk1NDogKiBNdXN0IGJlIHVzZWQgaW4gcGFpciBvZiBmb2xsb3dfcGZubWFwX3N0YXJ0KCkuICBTZWUgdGhlIHN0YXJ0KCkgZnVuY3Rpb25cXG5tbS9tZW1vcnkuYy02OTU1LSAqIGFib3ZlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbi0tXFxubW0vbWVtb3J5LmM9Njk3OT1pbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtNjk5NC1yZXRyeTpcXG5tbS9tZW1vcnkuYzo2OTk1OlxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG5tbS9tZW1vcnkuYy02OTk2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubW0vbWVtb3J5LmMtNzAwNS1cXG5tbS9tZW1vcnkuYzo3MDA2OlxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG5tbS9tZW1vcnkuYy03MDA3LVxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yOTM5PXN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk1Ni1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NTc6XFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk1OC1cXHRpZiAocikge1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTcxLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk3MjpcXHRcXHRyID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxcdFxcdGlmIChyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjQwLjY0MjUxMDg5MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIzMjI5NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGZvbGxvd19wZm5tYXBfc3RhcnRgIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5Pa2F5LCBzbyB0aGUgYGZvbGxvd19wZm5tYXBfc3RhcnRgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZS4gSXQncyB0aGUgY2VudHJhbCBwb2ludCBvZiB0aGlzIHBhdGNoLCBhcyBpdCdzIHRoZSB0YXJnZXQgdGhhdCBnZXRzIGNhbGxlZCBieSB0aGUgdXBkYXRlZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBCYXNlZCBvbiB0aGUgY29kZSwgaXQncyB1c2VkIGJ5IHNldmVyYWwgY29yZSBjb21wb25lbnRzOiBgczM5MF9wY2lfbW1pb193cml0ZWAsIGBzMzkwX3BjaV9tbWlvX3JlYWRgLCBgZm9sbG93X2ZhdWx0X3BmbmAgZm9yIFZGSU8sIGBhY3JuX3ZtX3JhbV9tYXBgIGZvciBBQ1JOLCB0aGUgZ2VuZXJpYyBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9uIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBodmFfdG9fcGZuX3JlbWFwcGVkYCB3aXRoaW4gS1ZNLlxuXG5HaXZlbiB0aGF0LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAsIHRvbywgdGhleSBzaG91bGQgYmUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEFuZCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIHNlZSBpZiBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAgYW5kIGBhY3JuX2Rldl9pb2N0bGBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6NDUuMjY1NzQzNTcyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcxMDY2NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9faW9tbXVfdHlwZTFfaW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0yOTY2PXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMwNzktXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzozMDgwOnN0YXRpYyBsb25nIHZmaW9faW9tbXVfdHlwZTFfaW9jdGwodm9pZCAqaW9tbXVfZGF0YSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMwODEtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTMyNTE9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2lvbW11X2RyaXZlcl9vcHMgdmZpb19pb21tdV9kcml2ZXJfb3BzX3R5cGUxID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0zMjU1LVxcdC5yZWxlYXNlXFx0XFx0PSB2ZmlvX2lvbW11X3R5cGUxX3JlbGVhc2UsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzozMjU2OlxcdC5pb2N0bFxcdFxcdFxcdD0gdmZpb19pb21tdV90eXBlMV9pb2N0bCxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMyNTctXFx0LmF0dGFjaF9ncm91cFxcdFxcdD0gdmZpb19pb21tdV90eXBlMV9hdHRhY2hfZ3JvdXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjQ3LjUzNjgxNTc5N1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE0NDY4NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVGhlIFN5c3RlbSBpcyBGcm96ZW4qKlxuXG5IbW0sIHRoaXMgZmVlbHMuLi4gc3RhdGljLiBJdCdzIGxpa2UgdGhlIHN5c3RlbSBpcyBjb21wbGV0ZWx5IHVucmVzcG9uc2l2ZSwgd2hpY2ggaXMgY29uY2VybmluZy4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHNvbWV0aGluZyBoYXMgZ3JvdW5kIHRvIGEgaGFsdC4gV2UgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgYXR0ZW50aW9uIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBjb3JlIGludGVyZmFjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgYWNybl9kZXZfaW9jdGxgLiBUaGF0IGZ1bmN0aW9uIGNhbGwgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGhvbGRpbmcgdXAgdGhlIHdvcmtzLCBlc3BlY2lhbGx5IGlmIHRoZXJlIGlzIGFuIGlzc3VlIHdpdGggdGhlIHVuZGVybHlpbmcgZGV2aWNlIG9yIGFueSByZWxhdGVkIGxvY2tpbmcuIEl0J3MgYSBmdW5kYW1lbnRhbCBlbnRyeSBwb2ludCwgYW5kIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI5NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjUwLjQ1MTI4Nzg1MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4OTM1MTM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3JuX2Rldl9pb2N0bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnQvYWNybi9oc20uYz00Mz1zdGF0aWMgaW50IHBtY21kX2lvY3RsKHU2NCBjbWQsIHZvaWQgX191c2VyICp1cHRyKVxcbi0tXFxuZHJpdmVycy92aXJ0L2Fjcm4vaHNtLmMtMTA3LSAqL1xcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jOjEwODpzdGF0aWMgbG9uZyBhY3JuX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0xMDktXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBpb2N0bF9wYXJhbSlcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jPTQ5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3JuX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy00OTMtXFx0LnJlbGVhc2VcXHQ9IGFjcm5fZGV2X3JlbGVhc2UsXFxuZHJpdmVycy92aXJ0L2Fjcm4vaHNtLmM6NDk0OlxcdC51bmxvY2tlZF9pb2N0bCA9IGFjcm5fZGV2X2lvY3RsLFxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTQ5NS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NTo1Mi42NDA2NDMzNTlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyNjg5ODkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIFNlbGVjdGluZyBLZXJuZWwgQVBJIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHRoaXMgc2l0dWF0aW9uIGZlZWxzIGEgYml0IHN0YXRpYywgYnV0IGxldCdzIGJyZWFrIGl0IGRvd24gbWV0aG9kaWNhbGx5LiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgQVBJIGVudHJ5IHBvaW50cyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhOiBub24tc3RhdGljLCBub24taW5saW5lZC4gQ29uc2lkZXJpbmcgdGhhdCwgSSBzZWUgdGhhdCB0aGUgcG90ZW50aWFsIGZ1bmN0aW9ucyBhcmU6XG4qICAgYGZvbGxvd19wZm5tYXBfc3RhcnRgXG4qICAgYGdlbmVyaWNfYWNjZXNzX3BoeXNgXG4qICAgYF9fa3ZtX2ZhdWx0aW5fcGZuYFxuXG5JJ2xsIHJldmlzaXQgYF9fa3ZtX2ZhdWx0aW5fcGZuYC4gSXQncyBleHBvcnRlZCwgYnV0IGZvciBLVk0ncyBpbnRlcm5hbCB1c2UuIE9rYXkuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgZml0IHRoZSBiaWxsPyBZZXMsIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFyZSBib3RoIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLlxuXG5XaGF0IGFib3V0IGBzMzkwX3BjaV9tbWlvX3dyaXRlYD8gU2luY2UgdGhpcyBpcyBhIHN5c2NhbGwsIGl0IHdvdWxkIGJlIGEgdmVyeSBnb29kIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBzZWVtcyBwcm9taXNpbmcsIGJ1dCBJIHNlZSB0aGF0IGl0IGlzIHNwZWNpZmljIHRvIHMzOTAuIFN5emthbGxlciBjYW4gZnV6eiBpdCBpZiBpdCBpcyBydW5uaW5nIG9uIHMzOTAuXG5cbkFuZCB0aGUgcHJvbXB0IHNheXM6IFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXCIuIFRoaXMgbWVhbnMgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBgX19rdm1fZmF1bHRpbl9wZm5gIGFyZSBwcm9taXNpbmcuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgSSBoYXZlIHRvIHdvcmsgd2l0aC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6XG4qICAgYENPTkZJR19LVk1gXG4qICAgYENPTkZJR19WRklPYFxuKiAgIGBDT05GSUdfVkZJT19HUk9VUGBcbiogICBgQ09ORklHX1ZGSU9fQ09OVEFJTkVSYFxuKiAgIGBDT05GSUdfVkZJT19JT01NVV9UWVBFMWBcbiogICBgQ09ORklHX0FDUk5fR1VFU1RgXG5cbldhaXQsIGBBQ1JOX0dVRVNUYCBpcyBzcGVjaWZpYyB0byB4ODYuIGBWRklPX0lPTU1VX1RZUEUxYCBpcyBzZWxlY3RlZCBieSBgVkZJT19DT05UQUlORVJgIGlmIGBNTVUgXHUwMDI2XHUwMDI2IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpYC4gU28gdGhpcyBtZWFucyBJIGNhbiBzaW1wbGlmeSB0aGUgY29uZmlndXJhdGlvbi4gQWxsIEkgbmVlZCB0byBlbmFibGUgYXJlOiBgVkZJT2AsIGBWRklPX0dST1VQYCwgYFZGSU9fQ09OVEFJTkVSYCwgYFZGSU9fSU9NTVVfVFlQRTFgLiBBbmQgb2YgY291cnNlLCBgS1ZNYC5cblxuSSdsbCBjaGVjayB0aGUgS1ZNIGRlcGVuZGVuY2llcyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzIzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjU5LjM2NzU0NTI1NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4OTk0ODgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc9MTY9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTctXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MzE6Y29uZmlnIEtWTV9NSVBTX0RFQlVHX0NPUDBfQ09VTlRFUlNcXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiTWFpbnRhaW4gY291bnRlcnMgZm9yIENPUDAgYWNjZXNzZXNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNjpjb25maWcgS1ZNX0JPT0szU19IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzAtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozNDpjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzktXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0NTpjb25maWcgS1ZNX0JPT0szU18zMlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzMyIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjUtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyNjpjb25maWcgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIkRldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDMtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgdGltaW5nIGZvciBoeXBlcnZpc29yIHJlYWwtbW9kZSBjb2RlIChmb3IgUE9XRVI4KVxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTYtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE1Nzpjb25maWcgS1ZNX0JPT0szU19IVl9ORVNURURfUE1VX1dPUktBUk9VTkRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIk5lc3RlZCBMMCBob3N0IHdvcmthcm91bmQgZm9yIEwxIEtWTSBob3N0IFBNVSBoYW5kbGluZyBidWdcXFwiIGlmIEVYUEVSVFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkh5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9CT09LRV9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODUtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODYtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4Nzpjb25maWcgS1ZNX0VYSVRfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJEZXRhaWxlZCBleGl0IHRpbWluZ1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTktXFx0Ym9vbCBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTM6Y29uZmlnIEtWTV9FNTAwTUNcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjE0LVxcdGJvb2wgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fTVBJQ1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbCBcXFwiS1ZNIGluLWtlcm5lbCBNUElDIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDAtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQyLVxcdGJvb2wgXFxcIktWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTE6Y29uZmlnIEtWTV9YSVZFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1Mi1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc9MjI9c291cmNlIFxcXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXFxcIlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yMy1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9ODI2PXNvdXJjZSBcXFwiYXJjaC94ODYveGVuL0tjb25maWdcXFwiXFxuYXJjaC94ODYvS2NvbmZpZy04MjctXFxuYXJjaC94ODYvS2NvbmZpZzo4Mjg6Y29uZmlnIEtWTV9HVUVTVFxcbmFyY2gveDg2L0tjb25maWctODI5LVxcdGJvb2wgXFxcIktWTSBHdWVzdCBzdXBwb3J0IChpbmNsdWRpbmcga3ZtY2xvY2spXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMy1cXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cXG52aXJ0L2t2bS9LY29uZmlnLTUtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNDItXFxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cXG52aXJ0L2t2bS9LY29uZmlnLTQ0LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy00NS1cXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcXG52aXJ0L2t2bS9LY29uZmlnLTQ3LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxcbnZpcnQva3ZtL0tjb25maWc6NTA6Y29uZmlnIEtWTV9BU1lOQ19QRl9TWU5DXFxudmlydC9rdm0vS2NvbmZpZy01MS0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz01OT1jb25maWcgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy02MS1cXG52aXJ0L2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fVkZJT1xcbnZpcnQva3ZtL0tjb25maWctNjMtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9NjU9Y29uZmlnIEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy02Ny1cXG52aXJ0L2t2bS9LY29uZmlnOjY4OmNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG52aXJ0L2t2bS9LY29uZmlnLTY5LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy03MC1cXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0vS2NvbmZpZy03Mi0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNzMtXFxudmlydC9rdm0vS2NvbmZpZzo3NDpjb25maWcgS1ZNX0NPTVBBVFxcbnZpcnQva3ZtL0tjb25maWctNzUtICAgICAgIGRlZl9ib29sIHlcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9OTE9Y29uZmlnIEhBVkVfS1ZNX1BNX05PVElGSUVSXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxcbnZpcnQva3ZtL0tjb25maWc6OTQ6Y29uZmlnIEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxudmlydC9rdm0vS2NvbmZpZy05NS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctOTYtXFxudmlydC9rdm0vS2NvbmZpZzo5Nzpjb25maWcgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbnZpcnQva3ZtL0tjb25maWctOTgtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxcbnZpcnQva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXFxudmlydC9rdm0vS2NvbmZpZy0xMDEtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG52aXJ0L2t2bS9LY29uZmlnLTEwNC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctMTA1LVxcbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NjowMS40NTc0OTkzMjNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MDE1NDMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWxpemF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIGBLVk1gLi4uIHllYWgsIHRoYXQgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIGBWSVJUVUFMSVpBVElPTmAgdW1icmVsbGEuIEl0J3MgYSBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAuIFRoZXJlZm9yZSwgYW55IGFuYWx5c2lzIG9yIGNvbmZpZ3VyYXRpb24gSSdtIGRvaW5nIHJlbGF0ZWQgdG8gYEtWTWAgaW5oZXJlbnRseSByZXF1aXJlcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgYW5kIGV4YW1pbmF0aW9uIG9mIHRoZSBicm9hZGVyIGBWSVJUVUFMSVpBVElPTmAgcHJpbmNpcGxlcyBhbmQgdGVjaG5vbG9naWVzLiBUaGUgZGVwZW5kZW5jeSBpcyBjbGVhci4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIGBLVk1gIHBhdGgsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIGBWSVJUVUFMSVpBVElPTmAgaXMgY3VycmVudCBhbmQgdGhhdCBJIGhhdmUgaWRlbnRpZmllZCB0aGUgcmVsZXZhbnQgY29tcG9uZW50cyB0aGF0IHVuZGVycGluIGFueSB3b3JrIEknbSB1bmRlcnRha2luZy4gTGV0IG1lIHB1bGwgdXAgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgY2hlY2sgbXkgZXhpc3Rpbmcga25vd2xlZGdlIGJhc2UgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYWxpZ25lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBhdCB0aGUgYFZJUlRVQUxJWkFUSU9OYCBsYXllciB0aGF0IHdpbGwgaW1wYWN0IGBLVk1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk1NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjA0LjU5NzY1NzI3NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NzU2MjQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTctXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo4Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy03LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc9NT1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTYtXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy04LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9Nj1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy03LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy05LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo3Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctOC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjA2LjY4NTIyODU0M1oiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTY3MzAxNzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogVmlydHVhbGl6YXRpb24gYW5kIFZGSU8qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBhIHZpcnR1YWxpemF0aW9uIHNvbHV0aW9uLiBUaGUgcHJvYmxlbSBkaWN0YXRlcyBpdCDigJMgd2UgKm5lZWQqIHZpcnR1YWxpemF0aW9uLiBOb3csIGdpdmVuIHRoZSBpbXBsaWVkIHJlcXVpcmVtZW50cywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHBhcnRpY3VsYXJseSBwb3RlbnQgY29udGVuZGVyOiBgVkZJT2AuIExldCdzIGV4cGxvcmUgaXRzIGNhcGFiaWxpdGllcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgaXNzdWUgYXQgaGFuZC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgVkZJT2AgYW5kIHNlZSBpZiBpdCdzIHRoZSByaWdodCBmaXQgZm9yIHRoaXMgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1Nzk2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDY6MDkuMjUyNTM0NzE0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc4MzYxNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9LY29uZmlnPTgwOT1jb25maWcgQVBfREVCVUdcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTgyMi1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4MjM6Y29uZmlnIFZGSU9fQ0NXXFxuYXJjaC9zMzkwL0tjb25maWctODI0LVxcdGRlZl90cmlzdGF0ZSBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXFxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODM1LVxcdGRlZl90cmlzdGF0ZSBuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmZpby9LY29uZmlnOjI6bWVudWNvbmZpZyBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9LY29uZmlnPTE2PWlmIFZGSU9cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoxNzpjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzozMDpjb25maWcgVkZJT19HUk9VUFxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zOS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo0MDpjb25maWcgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy00MS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjb250YWluZXIgL2Rldi92ZmlvL3ZmaW9cXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz01Mj1pZiBWRklPX0NPTlRBSU5FUlxcbmRyaXZlcnMvdmZpby9LY29uZmlnOjUzOmNvbmZpZyBWRklPX0lPTU1VX1RZUEUxXFxuZHJpdmVycy92ZmlvL0tjb25maWctNTQtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU2LVxcbmRyaXZlcnMvdmZpby9LY29uZmlnOjU3OmNvbmZpZyBWRklPX0lPTU1VX1NQQVBSX1RDRVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU4LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz02MT1lbmRpZlxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTYyLVxcbmRyaXZlcnMvdmZpby9LY29uZmlnOjYzOmNvbmZpZyBWRklPX05PSU9NTVVcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02NC1cXHRib29sIFxcXCJWRklPIE5vLUlPTU1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy03Ny1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo3ODpjb25maWcgVkZJT19WSVJRRkRcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy03OS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo4Mzpjb25maWcgVkZJT19ERUJVR0ZTXFxuZHJpdmVycy92ZmlvL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRXhwb3J0IFZGSU8gaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctNy1cXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWc6ODpjb25maWcgVkZJT19DRFhcXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBDRFggYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9MT1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0zLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo0OmNvbmZpZyBWRklPX0ZTTF9NQ1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctMi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnOjM6Y29uZmlnIFZGSU9fTURFVlxcbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1OmNvbmZpZyBWRklPX1BDSV9DT1JFXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMS1cXHRkZWZfYm9vbCB5IGlmICFTMzkwXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MzQ6Y29uZmlnIFZGSU9fUENJX0lHRFxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIEludGVsIGdyYXBoaWNzIChHVlQtZClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9NDU9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00OC1cXHRib29sIFxcXCJWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU4OmNvbmZpZyBWRklPX1BDSV9ETUFCVUZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnPTI9bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBwbGF0Zm9ybSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo1OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JBU0VcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy04LVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnOjk6Y29uZmlnIFZGSU9fUExBVEZPUk1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBwbGF0Zm9ybSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0xOC1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzoxOTpjb25maWcgVkZJT19BTUJBXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQU1CQSBkZXZpY2VzIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnPTI9aWYgVkZJT19QTEFURk9STVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjM6Y29uZmlnIFZGSU9fUExBVEZPUk1fQ0FMWEVEQVhHTUFDX1JFU0VUXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBjYWx4ZWRhIHhnbWFjIHJlc2V0IChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUExBVEZPUk1fQU1EWEdCRV9SRVNFVFxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIEFNRCBYR0JFIHJlc2V0IChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjE3OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JDTUZMRVhSTV9SRVNFVFxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIEJyb2FkY29tIEZsZXhSTSByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjExLjMzMDkwMzE3MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM0ODczMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gVmlydHVhbGl6YXRpb24gRnVuZGFtZW50YWxzKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgKlZGSU8qLCBzcGVjaWZpY2FsbHkgdGhlIGNvcmUgY29tcG9uZW50czogYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAsIGFuZCB0aGUgSU9NTVUgYXNwZWN0LCBgVkZJT19JT01NVV9UWVBFMWAuIFRoYXQncyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIFBDSSBwYXNzdGhyb3VnaCwgd2hpY2ggaXMgY3J1Y2lhbC4gQW5kIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGF0LCBpdCBuYXR1cmFsbHkgbWVhbnMgd2UncmUgYWxzbyB0b3VjaGluZyBvbiAqS1ZNKiwgdGhlIGtlcm5lbC1iYXNlZCB2aXJ0dWFsIG1hY2hpbmUgaXRzZWxmLiBDbGVhcmx5LCB0aGUgb3ZlcmFyY2hpbmcgY29uY2VwdCBoZXJlIGlzICpWSVJUVUFMSVpBVElPTiouIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5HaXZlbiB0aGlzIGNvbnRleHQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25zaWRlciAqQUNSTl9HVUVTVCouIFdlIG5lZWQgdG8gc2VlIGhvdyBBQ1JOIGludGVyYWN0cyB3aXRoIHRoZXNlIGNvbmNlcHRzLiBMZXQncyBzZWUgaG93IHRoYXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODYxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDY6MTQuNTY1Nzc5NjIzWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk2OTYzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBQ1JOX0dVRVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9ODY4PWNvbmZpZyBKQUlMSE9VU0VfR1VFU1RcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODc2LVxcbmFyY2gveDg2L0tjb25maWc6ODc3OmNvbmZpZyBBQ1JOX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy04NzgtXFx0Ym9vbCBcXFwiQUNSTiBHdWVzdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NjoxNi43NjI3NDkwMjlaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAwMTc1MTAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBLVk0gRm9jdXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBmdXp6aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBLVk0sIGFuZCBWRklPIGZ1bmN0aW9uYWxpdHkuIExldCdzIHNlZS4uLiB0aGlzIHNwZWNpZmljIHg4NiBzdHVmZiwgd2UgY2FuIHNraXAgaXQgZm9yIG5vdzsgbm90IHJlbGV2YW50IHRvIHRoZSBjb3JlIGNvbXBvbmVudHMgd2UncmUgdGFyZ2V0aW5nLiBUaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzIGlzIGxpa2VseSBpbiBgbW0vbWVtb3J5LmNgLiBTbyB3ZSBzaG91bGQgYmUgZm9jdXNpbmcgb24gYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBgX19rdm1fZmF1bHRpbl9wZm5gLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgYF9fa3ZtX2ZhdWx0aW5fcGZuYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFllcCwgYEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTGAgdGVsbHMgdXMgaXQncyBhdmFpbGFibGUsIGl0J3MgYSBjb3JlIEtWTSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggcGFnZSBmYXVsdHMuIEdvb2QgY2FuZGlkYXRlIGZvciBhIGZ1enogdGFyZ2V0LlxuXG5Ob3csIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gVGhhdCdzIGV4cG9ydGVkIHZpYSBgRVhQT1JUX1NZTUJPTF9HUExgLCBzbyBpdOKAmXMgdXNlZCBieSB0aGluZ3MgbGlrZSBgL2Rldi9tZW1gIGFuZCBQQ0kgbW1hcC4gSW1wb3J0YW50LlxuXG5BbmQgZmluYWxseSwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbHNvIGBFWFBPUlRfU1lNQk9MX0dQTGAuXG5cblNvIG91ciB0YXJnZXQgc3ltYm9scyBhcmUgc2V0OiBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAuXG5cbkFscmlnaHQsIGNvbmZpZy13aXNlLCB3ZSBuZWVkIGBWSVJUVUFMSVpBVElPTmAsIGBLVk1gLCBgVkZJT2AsIGBWRklPX0dST1VQYCwgYFZGSU9fQ09OVEFJTkVSYCwgYW5kIGBWRklPX0lPTU1VX1RZUEUxYC4gQnV0IHdhaXQsIGBWRklPX0lPTU1VX1RZUEUxYCBpcyBzZWxlY3RlZCBieSBgVkZJT19DT05UQUlORVJgIGlmIE1NVSBhbmQgWDg2L1MzOTAvQVJNL0FSTTY0LiBXZSBzaG91bGQgYmUgZ29vZCB3aXRoIGp1c3QgZW5hYmxpbmcgYFZGSU9fQ09OVEFJTkVSYC4gTGV0J3MgY29uZmlybSBpbiBgZHJpdmVycy92ZmlvL0tjb25maWdgLiBZdXAsIGBWRklPX0NPTlRBSU5FUmAgZGVwZW5kcyBvbiBgVkZJT19HUk9VUGAgYW5kIGlzIGRlZmF1bHQgeSBpZiBWRklPIGFuZCBNTVUuIE1pZ2h0IGFzIHdlbGwgYmUgZXhwbGljaXQgYW5kIGVuYWJsZSB0aG9zZS5cblxuQW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBXZSBuZWVkIGBDT05GSUdfUENJYCBmb3IgYHBjaV9waHlzX3ZtX29wc2Agd2hpY2ggdXNlIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBDT05GSUdfREVWTUVNYCBmb3IgYC9kZXYvbWVtYCB3aGljaCBhbHNvIHVzZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBCdXQuLi4gZG9lcyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZ2V0IGNvbXBpbGVkIGlmIGBDT05GSUdfTU1VYCBpcyBlbmFibGVkPyBUaW1lIHRvIGNoZWNrIGBtbS9tZW1vcnkuY2AgYWdhaW4gYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjI1Ljc2NDUwMzgzMVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MDUxNzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcXG5kcml2ZXJzL2NkeC9jZHguYy02NjMtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2R4L2NkeC5jOjY2NDpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL2NkeC9jZHguYy02NjUtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2hhci9tZW0uYzozMjE6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIyLSNlbmRpZlxcbi0tXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDYtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYzo4MDc6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwOC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvcGNpL21tYXAuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9waHlzX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3BjaS9tbWFwLmMtMTktI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvcGNpL21tYXAuYzoyMDpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL3BjaS9tbWFwLmMtMjEtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3Vpby91aW8uYz03MzY9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fcGh5c2ljYWxfdm1fb3BzID0ge1xcbmRyaXZlcnMvdWlvL3Vpby5jLTczNy0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy91aW8vdWlvLmM6NzM4OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOS0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD03ODM9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC04MzUtXFx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XFxuaW5jbHVkZS9saW51eC9tbS5oOjgzNjpcXHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcXG5pbmNsdWRlL2xpbnV4L21tLmgtODM3LVxcdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzEzMD1jb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMTMxOmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMxMzItXFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpO1xcbi0tXFxubW0vbWVtb3J5LmM9Njk2ND1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XFxuLS1cXG5tbS9tZW1vcnkuYy02OTY3LS8qKlxcbm1tL21lbW9yeS5jOjY5Njg6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxubW0vbWVtb3J5LmMtNjk2OS0gKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbi0tXFxubW0vbWVtb3J5LmMtNjk3OC0gKi9cXG5tbS9tZW1vcnkuYzo2OTc5OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNjk4MC1cXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG4tLVxcbm1tL21lbW9yeS5jLTcwMjctfVxcbm1tL21lbW9yeS5jOjcwMjg6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XFxubW0vbWVtb3J5LmMtNzAyOS0jZW5kaWZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9NjMyPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY4NC1cXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjY4NTpcXHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY4Ni1cXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NjoyOC4wMTUwMjUyMDZaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDA4MjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UYCBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgc2VlbXMgdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIHdlIGhhdmUgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgZGVmaW5lZC4gVGhhdCBtZWFucyBpdCdzIHByb2JhYmx5IHVzaW5nIHByb3RlY3RlZCBtZW1vcnkgcmVnaW9ucyBpbiBzb21lIHdheS4gTGV0J3MgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHN0YXRlIG9mIGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgIGZpcnN0LCBhbmQgZXhhY3RseSB3aHkgdGhhdCdzIGEgZmFjdG9yIGhlcmUuIE5lZWQgdG8gZ28gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgd2hlcmUgdGhhdCdzIHNldCB3aXRoaW4gb3VyIGN1cnJlbnQgYnVpbGQgY29uZmlndXJhdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyAqYWN0dWFsbHkqIGdvaW5nIG9uIGluIHRoZSBjb2RlIGFuZCBob3cgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gcXVlc3Rpb24gY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtJ3MgY2FwYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ5MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjMxLjMwNTExMTM5NloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MjM1NzY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFWRV9JT1JFTUFQX1BST1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTI1OD1jb25maWcgVVNFUl9SRVRVUk5fTk9USUZJRVJcXG4tLVxcbmFyY2gvS2NvbmZpZy0yNjQtXFxuYXJjaC9LY29uZmlnOjI2NTpjb25maWcgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL0tjb25maWctMjY2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDY6MzMuNTQ3NDc3MTMyWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNzAzNjY0MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLiBBcmNoaXRlY3R1cmVzIHNlbGVjdCB0aGUgcmVsZXZhbnQgY29kZSwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cGxpY2l0bHkgZW5hYmxpbmcgaXQuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoZSBuZXcgd3JpdGUgZmF1bHQgaGFuZGxpbmcgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgIGlzIHJvYnVzdC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0cyB3aXRoIEtWTSwgVkZJTywgQUNSTiwgYW5kIGdlbmVyaWMgcGh5c2ljYWwgbWVtb3J5IGFjY2VzcywgYWxsIG9mIHdoaWNoIGFyZSBjcml0aWNhbCBrZXJuZWwgcGF0aHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGJyZWFrIGFueXRoaW5nLlxuXG5GaXJzdCwgSSBjaGVja2VkIGlmIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBuZWVkZWQgYSBzcGVjaWZpYyBjb25maWcsIGFuZCBpdCdzIGFsd2F5cyBjb21waWxlZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3MuIEJhc2VkIG9uIHdoZXJlIHRoZSBjb2RlIGxpdmVzIChgbW0vbWVtb3J5LmNgKSwgSSdtIHRoaW5raW5nOiBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgdGhhbiB0aGF0LCBzbyBgVkZJT19JT01NVV9UWVBFMWAsIHNpbmNlIGl0J3MgdHJpc3RhdGUuXG5cblRoZW4gdGhlcmUncyBgQUNSTl9HVUVTVGAsIHdoaWNoIGlzIHg4Ni1zcGVjaWZpYywgYnV0IEkgY2FuIGFkZCBpdCB0b28sIG5vIGhhcm0gZG9uZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYganVzdCBgS1ZNYCBpcyBlbm91Z2ggb3IgaWYgSSBuZWVkIGBLVk1fWDg2YCwgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLiBgS1ZNYCBpcyBhIHRyaXN0YXRlLCBhbmQgYEtWTV9YODZgIGRlcGVuZHMgb24gYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYC4gU2luY2UgU3l6a2FsbGVyIHVzdWFsbHkgdGVzdHMgb24geDg2IHdpdGggS1ZNIGVuYWJsZWQsIEknbSBqdXN0IGxpc3RpbmcgYEtWTWAgZm9yIG5vdy5cblxuU28sIGhlcmUncyBteSBwbGFuOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogWWVzXG4qICAgKipSZWFzb25pbmc6KiogVGhpcyBwYXRjaCBhbHRlcnMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaGFuZGxpbmcgd3JpdGUgZmF1bHRzIGluIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBhbmQgYHBmbm1hcF9hcmdzX3NldHVwYC4gVGhpcyBhZmZlY3RzIG11bHRpcGxlIHN1YnN5c3RlbXMgaW5jbHVkaW5nIEtWTSwgVkZJTywgQUNSTiwgYW5kIGdlbmVyaWMgcGh5c2ljYWwgbWVtb3J5IGFjY2Vzcy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgd3JpdGUgZmF1bHQgaGFuZGxpbmcgbG9naWMgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcy5cbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgZm9sbG93X3Bmbm1hcF9zdGFydGAgKFRoaXMgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQpXG4gICAgKiAgIGBnZW5lcmljX2FjY2Vzc19waHlzYCAoSXQncyBhIGdvb2QgZm9jdXMgc3ltYm9sKVxuICAgICogICBgX19rdm1fZmF1bHRpbl9wZm5gIChEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuKVxuKiAgICoqRW5hYmxlQ29uZmlnczoqKlxuICAgICogICBgVklSVFVBTElaQVRJT05gXG4gICAgKiAgIGBLVk1gXG4gICAgKiAgIGBWRklPYFxuICAgICogICBgVkZJT19HUk9VUGBcbiAgICAqICAgYFZGSU9fQ09OVEFJTkVSYFxuICAgICogICBgVkZJT19JT01NVV9UWVBFMWBcbiAgICAqICAgYEFDUk5fR1VFU1RgXG5cbkkgd2lsbCBkb3VibGUtY2hlY2sgYF9fa3ZtX2ZhdWx0aW5fcGZuYCwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbmQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBUaGV5IGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBJIGxvb2tlZCBhdCBzb21lIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAsIGJ1dCB0aG9zZSBhcmUgczM5MCBzcGVjaWZpYyBzeXNjYWxscywgc28gSSBhbSBnb2luZyB0byBzdGljayB3aXRoIHRoZSBpbml0aWFsIHRocmVlIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhhdCdzIHRoZSBjb3JlLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODAxLCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Nzo0NC4yNTExNDU3MTlaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgyOTEzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0lPTU1VX1RZUEUxXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9sbG93X3Bmbm1hcF9zdGFydFwiLFxuICAgIFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiLFxuICAgIFwiX19rdm1fZmF1bHRpbl9wZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0lPTU1VX1RZUEUxXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9sbG93X3Bmbm1hcF9zdGFydFwiLFxuICAgIFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiLFxuICAgIFwiX19rdm1fZmF1bHRpbl9wZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmwzc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 00:27:31 +0000 UTC FinishedAt: 2026-08-02 00:47:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM", "VFIO", "VFIO_GROUP", "VFIO_CONTAINER", "VFIO_IOMMU_TYPE1", "ACRN_GUEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM", "VFIO", "VFIO_GROUP", "VFIO_CONTAINER", "VFIO_IOMMU_TYPE1", "ACRN_GUEST" ], "series_id": "d290b1a7-9dce-4b34-842a-5b4e31e20440" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "follow_pfnmap_start", "generic_access_phys", "__kvm_faultin_pfn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fR1JPVVAmIzM0OywKICAgICYjMzQ7VkZJT19DT05UQUlORVImIzM0OywKICAgICYjMzQ7VkZJT19JT01NVV9UWVBFMSYjMzQ7LAogICAgJiMzNDtBQ1JOX0dVRVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9sbG93X3Bmbm1hcF9zdGFydCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDssCiAgICAmIzM0O19fa3ZtX2ZhdWx0aW5fcGZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGhhbmRsaW5nIHdyaXRlIGZhdWx0cyBpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgYW5kIGBwZm5tYXBfYXJnc19zZXR1cGAuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBLVk0sIFZGSU8sIEFDUk4sIGFuZCBnZW5lcmljIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHdyaXRlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNWZjMTQ2NzcxNTViMGFkYjM4YWUzNDkzNGY3NDRiNjU5N2IzZTJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwMDo0MzozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMgYi9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNcbmluZGV4IDUxZTdhMjhhZjg5OTQuLjUyNmY4MGI4ZmIzYjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9wY2kvcGNpX21taW8uY1xuQEAgLTE4MCw2ICYjNDM7MTgwLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fd3JpdGUsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcbiBcbiBcdGFyZ3MuYWRkcmVzcyA9IG1taW9fYWRkcjtcbiBcdGFyZ3Mudm1hID0gdm1hO1xuJiM0MztcdGFyZ3Mud3JpdGVfZmF1bHQgPSB0cnVlO1xuIFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xuQEAgLTMzMiw2ICYjNDM7MzMzLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fcmVhZCwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxuIFxuIFx0YXJncy52bWEgPSB2bWE7XG4gXHRhcmdzLmFkZHJlc3MgPSBtbWlvX2FkZHI7XG4mIzQzO1x0YXJncy53cml0ZV9mYXVsdCA9IGZhbHNlO1xuIFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBtbWlvX2FkZHIsIDAsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMgYi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jXG5pbmRleCBjODE1MWJhNTRkZTMzLi45ZWU5MjgyMGI0ZGUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xuQEAgLTU0MSw3ICYjNDM7NTQxLDExIEBAIHN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBmbixcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqYWRkcl9tYXNrLCBib29sIHdyaXRlX2ZhdWx0KVxuIHtcbi1cdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSB2YWRkciB9O1xuJiM0MztcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbiYjNDM7XHRcdC52bWEgPSB2bWEsXG4mIzQzO1x0XHQuYWRkcmVzcyA9IHZhZGRyLFxuJiM0MztcdFx0LndyaXRlX2ZhdWx0ID0gd3JpdGVfZmF1bHRcbiYjNDM7XHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5AQCAtNTYzLDE1ICYjNDM7NTY3LDEwIEBAIHN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdGlmICh3cml0ZV9mYXVsdCBcdTAwMjZcdTAwMjYgIWFyZ3Mud3JpdGFibGUpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdH0gZWxzZSB7XG4tXHRcdCpwZm4gPSBhcmdzLnBmbjtcbi1cdFx0KmFkZHJfbWFzayA9IGFyZ3MuYWRkcl9tYXNrO1xuLVx0fVxuLVxuJiM0MztcdCpwZm4gPSBhcmdzLnBmbjtcbiYjNDM7XHQqYWRkcl9tYXNrID0gYXJncy5hZGRyX21hc2s7XG4gXHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0L2Fjcm4vbW0uYyBiL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcbmluZGV4IDViY2E1MDBhODNlMDUuLmIwNTdlNzhlZjNmNDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jXG5AQCAtMTc3LDcgJiM0MzsxNzcsNiBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXG4gXHR2bWEgPSB2bWFfbG9va3VwKGN1cnJlbnQtXHUwMDNlbW0sIG1lbW1hcC1cdTAwM2V2bWFfYmFzZSk7XG4gXHRpZiAodm1hIFx1MDAyNlx1MDAyNiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKSAhPSAwKSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgY3VyX3Bmbjtcbi1cdFx0Ym9vbCB3cml0YWJsZTtcbiBcbiBcdFx0aWYgKChtZW1tYXAtXHUwMDNldm1hX2Jhc2UgJiM0MzsgbWVtbWFwLVx1MDAzZWxlbikgXHUwMDNlIHZtYS1cdTAwM2V2bV9lbmQpIHtcbiBcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuQEAgLTE4OCw2ICYjNDM7MTg3LDcgQEAgaW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxuIFx0XHRcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbiBcdFx0XHRcdC52bWEgPSB2bWEsXG4gXHRcdFx0XHQuYWRkcmVzcyA9IG1lbW1hcC1cdTAwM2V2bWFfYmFzZSAmIzQzOyBpICogUEFHRV9TSVpFLFxuJiM0MztcdFx0XHRcdC53cml0ZV9mYXVsdCA9ICEhKG1lbW1hcC1cdTAwM2VhdHRyIFx1MDAyNiBBQ1JOX01FTV9BQ0NFU1NfV1JJVEUpLFxuIFx0XHRcdH07XG4gXG4gXHRcdFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbkBAIC0xOTcsMTYgJiM0MzsxOTcsOCBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXG4gXHRcdFx0Y3VyX3BmbiA9IGFyZ3MucGZuO1xuIFx0XHRcdGlmIChpID09IDApXG4gXHRcdFx0XHRzdGFydF9wZm4gPSBjdXJfcGZuO1xuLVx0XHRcdHdyaXRhYmxlID0gYXJncy53cml0YWJsZTtcbiBcdFx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbiBcbi1cdFx0XHQvKiBEaXNhbGxvdyB3cml0ZSBhY2Nlc3MgaWYgdGhlIFBURSBpcyBub3Qgd3JpdGFibGUuICovXG4tXHRcdFx0aWYgKCF3cml0YWJsZSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKG1lbW1hcC1cdTAwM2VhdHRyIFx1MDAyNiBBQ1JOX01FTV9BQ0NFU1NfV1JJVEUpKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVxuIFx0XHRcdC8qIERpc2FsbG93IHJlZmNvdW50ZWQgcGFnZXMuICovXG4gXHRcdFx0aWYgKHBmbl92YWxpZChjdXJfcGZuKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgIVBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShjdXJfcGZuKSkpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIuLjM0Yzc5YjVmY2I5YjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTMxMzYsOSAmIzQzOzMxMzYsMTIgQEAgc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyB7XG4gXHQgKiBJbnB1dHM6XG4gXHQgKiBAdm1hOiBQb2ludGVyIHRvIEB2bV9hcmVhX3N0cnVjdCBzdHJ1Y3RcbiBcdCAqIEBhZGRyZXNzOiB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIHdhbGtcbiYjNDM7XHQgKiBAd3JpdGVfZmF1bHQ6IGlmIHRydWUsIGZhaWwgd2l0aCAtRUZBVUxUIHVubGVzcyB0aGUgbWFwcGluZyBpc1xuJiM0MztcdCAqIHdyaXRhYmxlXG4gXHQgKi9cbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuJiM0MztcdGJvb2wgd3JpdGVfZmF1bHQ7XG4gXHQvKipcbiBcdCAqIEludGVybmFsczpcbiBcdCAqXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMy4uNDA5OTdhMjY4NDZmNSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTY3ODYsMTIgJiM0Mzs2Nzg2LDE1IEBAIGludCBfX3BtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIH1cbiAjZW5kaWYgLyogX19QQUdFVEFCTEVfUE1EX0ZPTERFRCAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxuLVx0XHRcdFx0ICAgICBzcGlubG9ja190ICpsb2NrLCBwdGVfdCAqcHRlcCxcbi1cdFx0XHRcdCAgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJfbWFzaywgYm9vbCB3cml0YWJsZSxcbi1cdFx0XHRcdCAgICAgYm9vbCBzcGVjaWFsKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxuJiM0MztcdFx0XHRcdCAgICBzcGlubG9ja190ICpsb2NrLCBwdGVfdCAqcHRlcCxcbiYjNDM7XHRcdFx0XHQgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHJfbWFzaywgYm9vbCB3cml0YWJsZSxcbiYjNDM7XHRcdFx0XHQgICAgYm9vbCBzcGVjaWFsKVxuIHtcbiYjNDM7XHRpZiAoIXdyaXRhYmxlIFx1MDAyNlx1MDAyNiBhcmdzLVx1MDAzZXdyaXRlX2ZhdWx0KVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuIFx0YXJncy1cdTAwM2Vsb2NrID0gbG9jaztcbiBcdGFyZ3MtXHUwMDNlcHRlcCA9IHB0ZXA7XG4gXHRhcmdzLVx1MDAzZXBmbiA9IHBmbl9iYXNlICYjNDM7ICgoYXJncy1cdTAwM2VhZGRyZXNzIFx1MDAyNiB+YWRkcl9tYXNrKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNjc5OSw2ICYjNDM7NjgwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxuIFx0YXJncy1cdTAwM2VwZ3Byb3QgPSBwZ3Byb3Q7XG4gXHRhcmdzLVx1MDAzZXdyaXRhYmxlID0gd3JpdGFibGU7XG4gXHRhcmdzLVx1MDAzZXNwZWNpYWwgPSBzcGVjaWFsO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2xvY2tkZXBfYXNzZXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuQEAgLTY4MjAsOCAmIzQzOzY4MjQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2xvY2tkZXBfYXNzZXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzXG4gICpcbiAgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIHNldHVwIGFyZ3MtXHUwMDNldm1hIGFuZCBhcmdzLVx1MDAzZWFkZHJlc3MgdG8gcG9pbnQgdG8gdGhlXG4tICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAuICBPbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLFxuLSAqIHRoZSByZXN1bHRzIHdpbGwgYmUgcHV0IGludG8gb3RoZXIgb3V0cHV0IGZpZWxkcy5cbiYjNDM7ICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAsIGFuZCBvcHRpb25hbGx5IHNldFxuJiM0MzsgKiBhcmdzLVx1MDAzZXdyaXRlX2ZhdWx0IHRvIHJlcXVpcmUgYSB3cml0YWJsZSBtYXBwaW5nLiAgT24gYSBzdWNjZXNzZnVsXG4mIzQzOyAqIHJldHVybiwgdGhlIHJlc3VsdHMgd2lsbCBiZSBwdXQgaW50byBvdGhlciBvdXRwdXQgZmllbGRzLlxuICAqXG4gICogQWZ0ZXIgdGhlIGNhbGxlciBmaW5pc2hlZCB1c2luZyB0aGUgZmllbGRzLCB0aGUgY2FsbGVyIG11c3QgaW52b2tlXG4gICogYW5vdGhlciBmb2xsb3dfcGZubWFwX2VuZCgpIHRvIHByb3BlciByZWxlYXNlcyB0aGUgbG9ja3MgYW5kIHJlc291cmNlc1xuQEAgLTY4NDQsNyAmIzQzOzY4NDksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2xvY2tkZXBfYXNzZXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSB1c2VkIHRvIG1vZGlmeSBQVEUgY29udGVudC5cbiAgKlxuLSAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvdGhlcndpc2UuXG4mIzQzOyAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCAtRUZBVUxUIGlmIEBhcmdzLVx1MDAzZXdyaXRlX2ZhdWx0IHdhcyBzZXQgYnV0IHRoZVxuJiM0MzsgKiBtYXBwaW5nIGlzIG5vdCB3cml0YWJsZSwgLUVJTlZBTCBpZiB0aGVyZSBpcyBubyBtYXBwaW5nIGF0IGFsbC5cbiAgKi9cbiBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIHtcbkBAIC02ODU3LDYgJiM0Mzs2ODYzLDcgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcbiBcdHB1ZF90ICpwdWRwLCBwdWQ7XG4gXHRwbWRfdCAqcG1kcCwgcG1kO1xuIFx0cHRlX3QgKnB0ZXAsIHB0ZTtcbiYjNDM7XHRpbnQgciA9IC1FSU5WQUw7XG4gXG4gXHRwZm5tYXBfbG9ja2RlcF9hc3NlcnQodm1hKTtcbiBcbkBAIC02ODkwLDEwICYjNDM7Njg5NywxMiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0XHRcdHNwaW5fdW5sb2NrKGxvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbi1cdFx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcHVkX3BncHJvdChwdWQpLFxuLVx0XHRcdFx0ICBwdWRfcGZuKHB1ZCksIFBVRF9NQVNLLCBwdWRfd3JpdGUocHVkKSxcbi1cdFx0XHRcdCAgcHVkX3NwZWNpYWwocHVkKSk7XG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0ciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHB1ZF9wZ3Byb3QocHVkKSxcbiYjNDM7XHRcdFx0XHQgICAgICBwdWRfcGZuKHB1ZCksIFBVRF9NQVNLLCBwdWRfd3JpdGUocHVkKSxcbiYjNDM7XHRcdFx0XHQgICAgICBwdWRfc3BlY2lhbChwdWQpKTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRzcGluX3VubG9jayhsb2NrKTtcbiYjNDM7XHRcdHJldHVybiByO1xuIFx0fVxuIFxuIFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XG5AQCAtNjkxMSwxMCAmIzQzOzY5MjAsMTIgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcbiBcdFx0XHRzcGluX3VubG9jayhsb2NrKTtcbiBcdFx0XHRnb3RvIHJldHJ5O1xuIFx0XHR9XG4tXHRcdHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHBtZF9wZ3Byb3QocG1kKSxcbi1cdFx0XHRcdCAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksXG4tXHRcdFx0XHQgIHBtZF9zcGVjaWFsKHBtZCkpO1xuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHIgPSBwZm5tYXBfYXJnc19zZXR1cChhcmdzLCBsb2NrLCBOVUxMLCBwbWRfcGdwcm90KHBtZCksXG4mIzQzO1x0XHRcdFx0ICAgICAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksXG4mIzQzO1x0XHRcdFx0ICAgICAgcG1kX3NwZWNpYWwocG1kKSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2sobG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gcjtcbiBcdH1cbiBcbiBcdHB0ZXAgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWRwLCBhZGRyZXNzLCBcdTAwMjZsb2NrKTtcbkBAIC02OTIzLDE0ICYjNDM7NjkzNCwxNiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0cHRlID0gcHRlcF9nZXQocHRlcCk7XG4gXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXG4gXHRcdGdvdG8gdW5sb2NrO1xuLVx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgcHRlcCwgcHRlX3BncHJvdChwdGUpLFxuLVx0XHRcdCAgcHRlX3BmbihwdGUpLCBQQUdFX01BU0ssIHB0ZV93cml0ZShwdGUpLFxuLVx0XHRcdCAgcHRlX3NwZWNpYWwocHRlKSk7XG4mIzQzO1x0ciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSxcbiYjNDM7XHRcdFx0ICAgICAgcHRlX3BmbihwdGUpLCBQQUdFX01BU0ssIHB0ZV93cml0ZShwdGUpLFxuJiM0MztcdFx0XHQgICAgICBwdGVfc3BlY2lhbChwdGUpKTtcbiYjNDM7XHRpZiAocilcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0cmV0dXJuIDA7XG4gdW5sb2NrOlxuIFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBsb2NrKTtcbiBvdXQ6XG4tXHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9zdGFydCk7XG4gXG5AQCAtNjk3Miw3ICYjNDM7Njk4NSwxMSBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xuIFx0aW50IHJldCA9IC1FSU5WQUw7XG4gXHRib29sIHdyaXRhYmxlO1xuLVx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiYjNDM7XHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7XG4mIzQzO1x0XHQudm1hID0gdm1hLFxuJiM0MztcdFx0LmFkZHJlc3MgPSBhZGRyLFxuJiM0MztcdFx0LndyaXRlX2ZhdWx0ID0gISEod3JpdGUgXHUwMDI2IEZPTExfV1JJVEUpXG4mIzQzO1x0fTtcbiBcbiByZXRyeTpcbiBcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpKVxuQEAgLTY5ODIsOSAmIzQzOzY5OTksNiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuIFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXG4tXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7XG4gXHRpZiAoIW1hZGRyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNDVlNzg0NDYyZWM2ZS4uMGM0ZmYyMjMxNjJiOSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0yOTM5LDggJiM0MzsyOTM5LDExIEBAIHN0YXRpYyBib29sIHZtYV9pc192YWxpZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCB3cml0ZV9mYXVsdClcbiBzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxuIHtcbi1cdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBrZnAtXHUwMDNlaHZhIH07XG4tXHRib29sIHdyaXRlX2ZhdWx0ID0ga2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFO1xuJiM0MztcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbiYjNDM7XHRcdC52bWEgPSB2bWEsXG4mIzQzO1x0XHQuYWRkcmVzcyA9IGtmcC1cdTAwM2VodmEsXG4mIzQzO1x0XHQud3JpdGVfZmF1bHQgPSAhIShrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpLFxuJiM0MztcdH07XG4gXHRpbnQgcjtcbiBcbiBcdC8qXG5AQCAtMjk1OSw3ICYjNDM7Mjk2Miw3IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICovXG4gXHRcdGJvb2wgdW5sb2NrZWQgPSBmYWxzZTtcbiBcdFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cdTAwM2VtbSwga2ZwLVx1MDAzZWh2YSxcbi1cdFx0XHRcdCAgICAgKHdyaXRlX2ZhdWx0ID8gRkFVTFRfRkxBR19XUklURSA6IDApLFxuJiM0MztcdFx0XHRcdCAgICAgKGFyZ3Mud3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXG4gXHRcdFx0XHQgICAgIFx1MDAyNnVubG9ja2VkKTtcbiBcdFx0aWYgKHVubG9ja2VkKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTI5NjcsMTcgJiM0MzsyOTcwLDE2IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRyZXR1cm4gcjtcbiBcbiBcdFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG4tXHRcdGlmIChyKVxuJiM0MztcdFx0aWYgKHIpIHtcbiYjNDM7XHRcdFx0aWYgKHIgPT0gLUVGQVVMVCkge1xuJiM0MztcdFx0XHRcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIHI7XG4tXHR9XG4tXG4tXHRpZiAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICFhcmdzLndyaXRhYmxlKSB7XG4tXHRcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdCpwX3BmbiA9IGt2bV9yZXNvbHZlX3BmbihrZnAsIE5VTEwsIFx1MDAyNmFyZ3MsIGFyZ3Mud3JpdGFibGUpO1xuLW91dDpcbiBcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuIFx0cmV0dXJuIHI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fSU9NTVVfVFlQRTEmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGxvd19wZm5tYXBfc3RhcnQmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICAgJiMzNDtfX2t2bV9mYXVsdGluX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTVmYzE0Njc3MTU1YjBhZGIzOGFlMzQ5MzRmNzQ0YjY1OTdiM2UyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMDA6NDM6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMgYi9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMKaW5kZXggNTFlN2EyOGFmODk5NC4uNTI2ZjgwYjhmYjNiMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9wY2kvcGNpX21taW8uYwpAQCAtMTgwLDYgJiM0MzsxODAsNyBAQCBTWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb193cml0ZSwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLAogCiAJYXJncy5hZGRyZXNzID0gbW1pb19hZGRyOwogCWFyZ3Mudm1hID0gdm1hOwomIzQzOwlhcmdzLndyaXRlX2ZhdWx0ID0gdHJ1ZTsKIAlyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KCZhbXA7YXJncyk7CiAJaWYgKHJldCkgewogCQlmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtJmd0O21tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpOwpAQCAtMzMyLDYgJiM0MzszMzMsNyBAQCBTWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb19yZWFkLCB1bnNpZ25lZCBsb25nLCBtbWlvX2FkZHIsCiAKIAlhcmdzLnZtYSA9IHZtYTsKIAlhcmdzLmFkZHJlc3MgPSBtbWlvX2FkZHI7CiYjNDM7CWFyZ3Mud3JpdGVfZmF1bHQgPSBmYWxzZTsKIAlyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KCZhbXA7YXJncyk7CiAJaWYgKHJldCkgewogCQlmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtJmd0O21tLCBtbWlvX2FkZHIsIDAsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyBiL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMKaW5kZXggYzgxNTFiYTU0ZGUzMy4uOWVlOTI4MjBiNGRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jCkBAIC01NDEsNyAmIzQzOzU0MSwxMSBAQCBzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBmbiwKIAkJCSAgICB1bnNpZ25lZCBsb25nICphZGRyX21hc2ssIGJvb2wgd3JpdGVfZmF1bHQpCiB7Ci0Jc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IHZhZGRyIH07CiYjNDM7CXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsKJiM0MzsJCS52bWEgPSB2bWEsCiYjNDM7CQkuYWRkcmVzcyA9IHZhZGRyLAomIzQzOwkJLndyaXRlX2ZhdWx0ID0gd3JpdGVfZmF1bHQKJiM0MzsJfTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydCgmYW1wO2FyZ3MpOwpAQCAtNTYzLDE1ICYjNDM7NTY3LDEwIEBAIHN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICh3cml0ZV9mYXVsdCAmYW1wOyZhbXA7ICFhcmdzLndyaXRhYmxlKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJKnBmbiA9IGFyZ3MucGZuOwotCQkqYWRkcl9tYXNrID0gYXJncy5hZGRyX21hc2s7Ci0JfQotCiYjNDM7CSpwZm4gPSBhcmdzLnBmbjsKJiM0MzsJKmFkZHJfbWFzayA9IGFyZ3MuYWRkcl9tYXNrOwogCWZvbGxvd19wZm5tYXBfZW5kKCZhbXA7YXJncyk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jIGIvZHJpdmVycy92aXJ0L2Fjcm4vbW0uYwppbmRleCA1YmNhNTAwYTgzZTA1Li5iMDU3ZTc4ZWYzZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydC9hY3JuL21tLmMKQEAgLTE3Nyw3ICYjNDM7MTc3LDYgQEAgaW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKQogCXZtYSA9IHZtYV9sb29rdXAoY3VycmVudC0mZ3Q7bW0sIG1lbW1hcC0mZ3Q7dm1hX2Jhc2UpOwogCWlmICh2bWEgJmFtcDsmYW1wOyAoKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUEZOTUFQKSAhPSAwKSkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgY3VyX3BmbjsKLQkJYm9vbCB3cml0YWJsZTsKIAogCQlpZiAoKG1lbW1hcC0mZ3Q7dm1hX2Jhc2UgJiM0MzsgbWVtbWFwLSZndDtsZW4pICZndDsgdm1hLSZndDt2bV9lbmQpIHsKIAkJCW1tYXBfcmVhZF91bmxvY2soY3VycmVudC0mZ3Q7bW0pOwpAQCAtMTg4LDYgJiM0MzsxODcsNyBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApCiAJCQlzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7CiAJCQkJLnZtYSA9IHZtYSwKIAkJCQkuYWRkcmVzcyA9IG1lbW1hcC0mZ3Q7dm1hX2Jhc2UgJiM0MzsgaSAqIFBBR0VfU0laRSwKJiM0MzsJCQkJLndyaXRlX2ZhdWx0ID0gISEobWVtbWFwLSZndDthdHRyICZhbXA7IEFDUk5fTUVNX0FDQ0VTU19XUklURSksCiAJCQl9OwogCiAJCQlyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KCZhbXA7YXJncyk7CkBAIC0xOTcsMTYgJiM0MzsxOTcsOCBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApCiAJCQljdXJfcGZuID0gYXJncy5wZm47CiAJCQlpZiAoaSA9PSAwKQogCQkJCXN0YXJ0X3BmbiA9IGN1cl9wZm47Ci0JCQl3cml0YWJsZSA9IGFyZ3Mud3JpdGFibGU7CiAJCQlmb2xsb3dfcGZubWFwX2VuZCgmYW1wO2FyZ3MpOwogCi0JCQkvKiBEaXNhbGxvdyB3cml0ZSBhY2Nlc3MgaWYgdGhlIFBURSBpcyBub3Qgd3JpdGFibGUuICovCi0JCQlpZiAoIXdyaXRhYmxlICZhbXA7JmFtcDsKLQkJCSAgICAobWVtbWFwLSZndDthdHRyICZhbXA7IEFDUk5fTUVNX0FDQ0VTU19XUklURSkpIHsKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJCWJyZWFrOwotCQkJfQotCiAJCQkvKiBEaXNhbGxvdyByZWZjb3VudGVkIHBhZ2VzLiAqLwogCQkJaWYgKHBmbl92YWxpZChjdXJfcGZuKSAmYW1wOyZhbXA7CiAJCQkgICAgIVBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShjdXJfcGZuKSkpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiLi4zNGM3OWI1ZmNiOWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zMTM2LDkgJiM0MzszMTM2LDEyIEBAIHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgewogCSAqIElucHV0czoKIAkgKiBAdm1hOiBQb2ludGVyIHRvIEB2bV9hcmVhX3N0cnVjdCBzdHJ1Y3QKIAkgKiBAYWRkcmVzczogdGhlIHZpcnR1YWwgYWRkcmVzcyB0byB3YWxrCiYjNDM7CSAqIEB3cml0ZV9mYXVsdDogaWYgdHJ1ZSwgZmFpbCB3aXRoIC1FRkFVTFQgdW5sZXNzIHRoZSBtYXBwaW5nIGlzCiYjNDM7CSAqIHdyaXRhYmxlCiAJICovCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwomIzQzOwlib29sIHdyaXRlX2ZhdWx0OwogCS8qKgogCSAqIEludGVybmFsczoKIAkgKgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBmZjMzOGMyYWJlOTIzLi40MDk5N2EyNjg0NmY1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNjc4NiwxMiAmIzQzOzY3ODYsMTUgQEAgaW50IF9fcG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB9CiAjZW5kaWYgLyogX19QQUdFVEFCTEVfUE1EX0ZPTERFRCAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2FyZ3Nfc2V0dXAoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncywKLQkJCQkgICAgIHNwaW5sb2NrX3QgKmxvY2ssIHB0ZV90ICpwdGVwLAotCQkJCSAgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyX21hc2ssIGJvb2wgd3JpdGFibGUsCi0JCQkJICAgICBib29sIHNwZWNpYWwpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGZubWFwX2FyZ3Nfc2V0dXAoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncywKJiM0MzsJCQkJICAgIHNwaW5sb2NrX3QgKmxvY2ssIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyX21hc2ssIGJvb2wgd3JpdGFibGUsCiYjNDM7CQkJCSAgICBib29sIHNwZWNpYWwpCiB7CiYjNDM7CWlmICghd3JpdGFibGUgJmFtcDsmYW1wOyBhcmdzLSZndDt3cml0ZV9mYXVsdCkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwogCWFyZ3MtJmd0O2xvY2sgPSBsb2NrOwogCWFyZ3MtJmd0O3B0ZXAgPSBwdGVwOwogCWFyZ3MtJmd0O3BmbiA9IHBmbl9iYXNlICYjNDM7ICgoYXJncy0mZ3Q7YWRkcmVzcyAmYW1wOyB+YWRkcl9tYXNrKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKQEAgLTY3OTksNiAmIzQzOzY4MDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2FyZ3Nfc2V0dXAoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncywKIAlhcmdzLSZndDtwZ3Byb3QgPSBwZ3Byb3Q7CiAJYXJncy0mZ3Q7d3JpdGFibGUgPSB3cml0YWJsZTsKIAlhcmdzLSZndDtzcGVjaWFsID0gc3BlY2lhbDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCkBAIC02ODIwLDggJiM0Mzs2ODI0LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzCiAgKgogICogVGhlIGNhbGxlciBuZWVkcyB0byBzZXR1cCBhcmdzLSZndDt2bWEgYW5kIGFyZ3MtJmd0O2FkZHJlc3MgdG8gcG9pbnQgdG8gdGhlCi0gKiB2aXJ0dWFsIGFkZHJlc3MgYXMgdGhlIHRhcmdldCBvZiBzdWNoIGxvb2t1cC4gIE9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4sCi0gKiB0aGUgcmVzdWx0cyB3aWxsIGJlIHB1dCBpbnRvIG90aGVyIG91dHB1dCBmaWVsZHMuCiYjNDM7ICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAsIGFuZCBvcHRpb25hbGx5IHNldAomIzQzOyAqIGFyZ3MtJmd0O3dyaXRlX2ZhdWx0IHRvIHJlcXVpcmUgYSB3cml0YWJsZSBtYXBwaW5nLiAgT24gYSBzdWNjZXNzZnVsCiYjNDM7ICogcmV0dXJuLCB0aGUgcmVzdWx0cyB3aWxsIGJlIHB1dCBpbnRvIG90aGVyIG91dHB1dCBmaWVsZHMuCiAgKgogICogQWZ0ZXIgdGhlIGNhbGxlciBmaW5pc2hlZCB1c2luZyB0aGUgZmllbGRzLCB0aGUgY2FsbGVyIG11c3QgaW52b2tlCiAgKiBhbm90aGVyIGZvbGxvd19wZm5tYXBfZW5kKCkgdG8gcHJvcGVyIHJlbGVhc2VzIHRoZSBsb2NrcyBhbmQgcmVzb3VyY2VzCkBAIC02ODQ0LDcgJiM0Mzs2ODQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIHVzZWQgdG8gbW9kaWZ5IFBURSBjb250ZW50LgogICoKLSAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIC1FRkFVTFQgaWYgQGFyZ3MtJmd0O3dyaXRlX2ZhdWx0IHdhcyBzZXQgYnV0IHRoZQomIzQzOyAqIG1hcHBpbmcgaXMgbm90IHdyaXRhYmxlLCAtRUlOVkFMIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcgYXQgYWxsLgogICovCiBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKQogewpAQCAtNjg1Nyw2ICYjNDM7Njg2Myw3IEBAIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpCiAJcHVkX3QgKnB1ZHAsIHB1ZDsKIAlwbWRfdCAqcG1kcCwgcG1kOwogCXB0ZV90ICpwdGVwLCBwdGU7CiYjNDM7CWludCByID0gLUVJTlZBTDsKIAogCXBmbm1hcF9sb2NrZGVwX2Fzc2VydCh2bWEpOwogCkBAIC02ODkwLDEwICYjNDM7Njg5NywxMiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKQogCQkJc3Bpbl91bmxvY2sobG9jayk7CiAJCQlnb3RvIHJldHJ5OwogCQl9Ci0JCXBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHB1ZF9wZ3Byb3QocHVkKSwKLQkJCQkgIHB1ZF9wZm4ocHVkKSwgUFVEX01BU0ssIHB1ZF93cml0ZShwdWQpLAotCQkJCSAgcHVkX3NwZWNpYWwocHVkKSk7Ci0JCXJldHVybiAwOwomIzQzOwkJciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHB1ZF9wZ3Byb3QocHVkKSwKJiM0MzsJCQkJICAgICAgcHVkX3BmbihwdWQpLCBQVURfTUFTSywgcHVkX3dyaXRlKHB1ZCksCiYjNDM7CQkJCSAgICAgIHB1ZF9zcGVjaWFsKHB1ZCkpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJc3Bpbl91bmxvY2sobG9jayk7CiYjNDM7CQlyZXR1cm4gcjsKIAl9CiAKIAlwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyZXNzKTsKQEAgLTY5MTEsMTAgJiM0Mzs2OTIwLDEyIEBAIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpCiAJCQlzcGluX3VubG9jayhsb2NrKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KLQkJcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLAotCQkJCSAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksCi0JCQkJICBwbWRfc3BlY2lhbChwbWQpKTsKLQkJcmV0dXJuIDA7CiYjNDM7CQlyID0gcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLAomIzQzOwkJCQkgICAgICBwbWRfcGZuKHBtZCksIFBNRF9NQVNLLCBwbWRfd3JpdGUocG1kKSwKJiM0MzsJCQkJICAgICAgcG1kX3NwZWNpYWwocG1kKSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlzcGluX3VubG9jayhsb2NrKTsKJiM0MzsJCXJldHVybiByOwogCX0KIAogCXB0ZXAgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWRwLCBhZGRyZXNzLCAmYW1wO2xvY2spOwpAQCAtNjkyMywxNCAmIzQzOzY5MzQsMTYgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncykKIAlwdGUgPSBwdGVwX2dldChwdGVwKTsKIAlpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpCiAJCWdvdG8gdW5sb2NrOwotCXBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSwKLQkJCSAgcHRlX3BmbihwdGUpLCBQQUdFX01BU0ssIHB0ZV93cml0ZShwdGUpLAotCQkJICBwdGVfc3BlY2lhbChwdGUpKTsKJiM0MzsJciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSwKJiM0MzsJCQkgICAgICBwdGVfcGZuKHB0ZSksIFBBR0VfTUFTSywgcHRlX3dyaXRlKHB0ZSksCiYjNDM7CQkJICAgICAgcHRlX3NwZWNpYWwocHRlKSk7CiYjNDM7CWlmIChyKQomIzQzOwkJZ290byB1bmxvY2s7CiAJcmV0dXJuIDA7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwdGVwLCBsb2NrKTsKIG91dDoKLQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX3N0YXJ0KTsKIApAQCAtNjk3Miw3ICYjNDM7Njk4NSwxMSBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAlib29sIHdyaXRhYmxlOwotCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07CiYjNDM7CXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsKJiM0MzsJCS52bWEgPSB2bWEsCiYjNDM7CQkuYWRkcmVzcyA9IGFkZHIsCiYjNDM7CQkud3JpdGVfZmF1bHQgPSAhISh3cml0ZSAmYW1wOyBGT0xMX1dSSVRFKQomIzQzOwl9OwogCiByZXRyeToKIAlpZiAoZm9sbG93X3Bmbm1hcF9zdGFydCgmYW1wO2FyZ3MpKQpAQCAtNjk4Miw5ICYjNDM7Njk5OSw2IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJd3JpdGFibGUgPSBhcmdzLndyaXRhYmxlOwogCWZvbGxvd19wZm5tYXBfZW5kKCZhbXA7YXJncyk7CiAKLQlpZiAoKHdyaXRlICZhbXA7IEZPTExfV1JJVEUpICZhbXA7JmFtcDsgIXdyaXRhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7CiAJaWYgKCFtYWRkcikKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA0NWU3ODQ0NjJlYzZlLi4wYzRmZjIyMzE2MmI5IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTI5MzksOCAmIzQzOzI5MzksMTEgQEAgc3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KQogc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKQogewotCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBrZnAtJmd0O2h2YSB9OwotCWJvb2wgd3JpdGVfZmF1bHQgPSBrZnAtJmd0O2ZsYWdzICZhbXA7IEZPTExfV1JJVEU7CiYjNDM7CXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsKJiM0MzsJCS52bWEgPSB2bWEsCiYjNDM7CQkuYWRkcmVzcyA9IGtmcC0mZ3Q7aHZhLAomIzQzOwkJLndyaXRlX2ZhdWx0ID0gISEoa2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX1dSSVRFKSwKJiM0MzsJfTsKIAlpbnQgcjsKIAogCS8qCkBAIC0yOTU5LDcgJiM0MzsyOTYyLDcgQEAgc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYm9vbCB1bmxvY2tlZCA9IGZhbHNlOwogCQlyID0gZml4dXBfdXNlcl9mYXVsdChjdXJyZW50LSZndDttbSwga2ZwLSZndDtodmEsCi0JCQkJICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksCiYjNDM7CQkJCSAgICAgKGFyZ3Mud3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksCiAJCQkJICAgICAmYW1wO3VubG9ja2VkKTsKIAkJaWYgKHVubG9ja2VkKQogCQkJcmV0dXJuIC1FQUdBSU47CkBAIC0yOTY3LDE3ICYjNDM7Mjk3MCwxNiBAQCBzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlyZXR1cm4gcjsKIAogCQlyID0gZm9sbG93X3Bmbm1hcF9zdGFydCgmYW1wO2FyZ3MpOwotCQlpZiAocikKJiM0MzsJCWlmIChyKSB7CiYjNDM7CQkJaWYgKHIgPT0gLUVGQVVMVCkgewomIzQzOwkJCQkqcF9wZm4gPSBLVk1fUEZOX0VSUl9ST19GQVVMVDsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQogCQkJcmV0dXJuIHI7Ci0JfQotCi0JaWYgKHdyaXRlX2ZhdWx0ICZhbXA7JmFtcDsgIWFyZ3Mud3JpdGFibGUpIHsKLQkJKnBfcGZuID0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQ7Ci0JCWdvdG8gb3V0OwomIzQzOwkJfQogCX0KIAogCSpwX3BmbiA9IGt2bV9yZXNvbHZlX3BmbihrZnAsIE5VTEwsICZhbXA7YXJncywgYXJncy53cml0YWJsZSk7Ci1vdXQ6CiAJZm9sbG93X3Bmbm1hcF9lbmQoJmFtcDthcmdzKTsKIAlyZXR1cm4gcjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgd3JpdGUgZmF1bHRzIGFyZSBoYW5kbGVkIHdpdGhpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGB3cml0ZV9mYXVsdGAgZmllbGQgdG8gYHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3NgLiBUaGUgZ2lzdCBpcyB0aGF0IGlmIGB3cml0ZV9mYXVsdGAgaXMgc2V0IHRvIHRydWUgYW5kIHRoZSBtYXBwaW5nIGlzbiYjMzk7dCB3cml0YWJsZSwgYGZvbGxvd19wZm5tYXBfc3RhcnRgIG5vdyBkaXJlY3RseSByZXR1cm5zIGAtRUZBVUxUYC4gVGhpcyB1c2VkIHRvIGJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCYjMzk7cyBiZWVuIHNoaWZ0ZWQgaW50byBgcGZubWFwX2FyZ3Nfc2V0dXBgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZvbGxvd19wZm5tYXBfc3RhcnRgLiBUaGlzIGRlZmluaXRlbHkgc3RyZWFtbGluZXMgdGhlIGNvZGUgYW5kIGF2b2lkcyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBkaXJlY3RseSB0b3VjaGVkIGJ5IHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlIGhhdmU6IGBzMzkwX3BjaV9tbWlvX3dyaXRlYCwgYHMzOTBfcGNpX21taW9fcmVhZGAsIGBmb2xsb3dfZmF1bHRfcGZuYCBpbiBgZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY2AsIGBhY3JuX3ZtX3JhbV9tYXBgIGluIGBkcml2ZXJzL3ZpcnQvYWNybi9tbS5jYCwgYHBmbm1hcF9hcmdzX3NldHVwYCwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbmQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFsbCBpbiBgbW0vbWVtb3J5LmNgLCBhbmQgZmluYWxseSBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLgoKVGhpcyBpcyBzaWduaWZpY2FudC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyB0aGF0IHJpcHBsZSB0aHJvdWdoIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRvdWNoIHZpcnR1YWxpemF0aW9uIHN1YnN5c3RlbXMg4oCTIEtWTSwgVkZJTywgYW5kIEFDUk4uIFRoaXMgZGVmaW5pdGVseSBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBodmFfdG9fcGZuX3JlbWFwcGVkYCwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBgZm9sbG93X2ZhdWx0X3BmbmAsIGFuZCBgYWNybl92bV9yYW1fbWFwYC4gTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlaXIgdmlzaWJpbGl0eS4gQWgsIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTGAuIGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyBzdGF0aWMgd2l0aGluIGBrdm1fbWFpbi5jYCwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIGV4cG9ydGVkLCBgZm9sbG93X2ZhdWx0X3BmbmAgaXMgc3RhdGljIHRvIGB2ZmlvX2lvbW11X3R5cGUxLmNgLCBhbmQgYGFjcm5fdm1fcmFtX21hcGAgaXMgd2l0aGluIGBkcml2ZXJzL3ZpcnQvYWNybi9tbS5jYC4KCk9rYXksIG5leHQgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgdGhlc2Ugc3Vic3lzdGVtczogS1ZNIGlzLCBvZiBjb3Vyc2UsIGBDT05GSUdfS1ZNYCwgVkZJTyBpcyBgQ09ORklHX1ZGSU9gLCBhbmQgQUNSTiBpcyBgQ09ORklHX0FDUk5fR1VFU1RgLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIGJ1dCB0aGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUNSTl9HVUVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTg2OD1jb25maWcgSkFJTEhPVVNFX0dVRVNUXG4tLVxuYXJjaC94ODYvS2NvbmZpZy04NzYtXG5hcmNoL3g4Ni9LY29uZmlnOjg3Nzpjb25maWcgQUNSTl9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy04NzgtXHRib29sIFwmIzM0O0FDUk4gR3Vlc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipWRklPIEludmVzdGlnYXRpb24gLSBBQ1JOIEd1ZXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIGBBQ1JOX0dVRVNUYCBzZXR0aW5nIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYSBib29sZWFuLCBtZWFuaW5nIGl0JiMzOTtzIGVpdGhlciB0cnVlIG9yIGZhbHNlLiBBbmQgZ2l2ZW4gdGhlIGNvbnRleHQsIG15IG1pbmQmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyB0byBWRklPLiBHaXZlbiB0aGF0IHRoaXMgc2VlbXMgdG8gYmUgYSBrZXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcm9sZSBpdCBwbGF5cyBpbiB0aGlzIHNldHVwLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGNvbmZpZyBpbnRlcmFjdHMgd2l0aCBWRklPIGFuZCB3aGF0IGNvbnNlcXVlbmNlcyB0aGlzIGhhcy4gTGV0JiMzOTtzIGRpZyBpbnRvIFZGSU8gdG8gZmlndXJlIG91dCB3aGF0IHRoaXMgc2V0dGluZyBlbmFibGVzIG9yIGRpc2FibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTgwOT1jb25maWcgQVBfREVCVUdcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MjItXG5hcmNoL3MzOTAvS2NvbmZpZzo4MjM6Y29uZmlnIFZGSU9fQ0NXXG5hcmNoL3MzOTAvS2NvbmZpZy04MjQtXHRkZWZfdHJpc3RhdGUgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTgzMy1cbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxuYXJjaC9zMzkwL0tjb25maWctODM1LVx0ZGVmX3RyaXN0YXRlIG5cbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92ZmlvL0tjb25maWc6MjptZW51Y29uZmlnIFZGSU9cbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9MTY9aWYgVkZJT1xuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMjktXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzozMDpjb25maWcgVkZJT19HUk9VUFxuZHJpdmVycy92ZmlvL0tjb25maWctMzEtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zOS1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjQwOmNvbmZpZyBWRklPX0NPTlRBSU5FUlxuZHJpdmVycy92ZmlvL0tjb25maWctNDEtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnPTUyPWlmIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxuZHJpdmVycy92ZmlvL0tjb25maWctNTQtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTU2LVxuZHJpdmVycy92ZmlvL0tjb25maWc6NTc6Y29uZmlnIFZGSU9fSU9NTVVfU1BBUFJfVENFXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01OC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9NjE9ZW5kaWZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTYyLVxuZHJpdmVycy92ZmlvL0tjb25maWc6NjM6Y29uZmlnIFZGSU9fTk9JT01NVVxuZHJpdmVycy92ZmlvL0tjb25maWctNjQtXHRib29sIFwmIzM0O1ZGSU8gTm8tSU9NTVUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTc3LVxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzg6Y29uZmlnIFZGSU9fVklSUUZEXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy03OS1cdGJvb2xcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04Mi1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjgzOmNvbmZpZyBWRklPX0RFQlVHRlNcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFeHBvcnQgVkZJTyBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9jZHgvS2NvbmZpZy03LVxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnOjg6Y29uZmlnIFZGSU9fQ0RYXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQ0RYIGJ1cyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTE9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0zLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjQ6Y29uZmlnIFZGSU9fRlNMX01DXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgUW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZy0yLVxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZzozOmNvbmZpZyBWRklPX01ERVZcbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc9Mj1tZW51IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgcGxhdGZvcm0gZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo1OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JBU0VcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTgtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo5OmNvbmZpZyBWRklPX1BMQVRGT1JNXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgcGxhdGZvcm0gZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTgtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzoxOTpjb25maWcgVkZJT19BTUJBXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQU1CQSBkZXZpY2VzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnPTI9aWYgVkZJT19QTEFURk9STVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWc6Mzpjb25maWcgVkZJT19QTEFURk9STV9DQUxYRURBWEdNQUNfUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIGNhbHhlZGEgeGdtYWMgcmVzZXQgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BMQVRGT1JNX0FNRFhHQkVfUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBBTUQgWEdCRSByZXNldCAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xNi1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjE3OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JDTUZMRVhSTV9SRVNFVFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEJyb2FkY29tIEZsZXhSTSByZXNldCAoREVQUkVDQVRFRClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIGl0JiMzOTtzIG1vZGlmeWluZyBzZXZlcmFsIGtleSBjb21wb25lbnRzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGhpdHRpbmcgYGRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmNgLCBhbmQgdGhhdCYjMzk7cyBvYnZpb3VzbHkgYmVoaW5kIHRoZSBgVkZJT19JT01NVV9UWVBFMWAgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIHRoZXJlLCB0aGF0JiMzOTtzIGNydWNpYWwuIFRoZW4gdGhlcmUmIzM5O3MgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCB3aGljaCBpcyB1bmRlciBgS1ZNYCwgb2J2aW91c2x5LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIGludGVyYWN0aW9ucyB0aGVyZS4gTmV4dCwgaXQmIzM5O3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jYCwgaW1wbHlpbmcgdGhpcyByZWxhdGVzIHRvIGBQQ0lgIG9uIHMzOTAgc3lzdGVtcy4gVGhhdCBtZWFucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBGaW5hbGx5LCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBgZHJpdmVycy92aXJ0L2Fjcm4vbW0uY2AsIHdoaWNoLCBhcyBhIHN5c3RlbSBleHBlcnQsIEkgaW1tZWRpYXRlbHkgYXNzb2NpYXRlIHdpdGggYEFDUk5fR1VFU1RgLiBUaGlzIGltcGxpZXMgY2hhbmdlcyB3aXRoaW4gdGhlIEFDUk4gaHlwZXJ2aXNvciBmcmFtZXdvcmsuCgpNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFZGSU9fSU9NTVVfVFlQRTFgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gVW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcGllY2Ugb2YgaW5mb3JtYXRpb24gdG8gYmUgZ2F0aGVyaW5nIGF0IHRoaXMgbW9tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0lPTU1VX1RZUEUxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnPTUyPWlmIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxuZHJpdmVycy92ZmlvL0tjb25maWctNTQtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDg0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipWRklPX0NPTlRBSU5FUiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gaGluZ2Ugb24gYFZGSU9fQ09OVEFJTkVSYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEJlZm9yZSBJIGNhbiBtYWtlIGFueSBkZWZpbml0aXZlIGNvbmNsdXNpb25zIG9yIHJlY29tbWVuZGF0aW9ucywgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFZGSU9fQ09OVEFJTkVSYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIGtlcm5lbCBtb2R1bGVzIGl0IHJlbGllcyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBhcmNoaXRlY3R1cmFsIGxhbmRzY2FwZSBhbmQgYWxsb3cgbWUgdG8gYXNzZXNzIHBvdGVudGlhbCBpbXBhY3RzIGRvd24gdGhlIGxpbmUuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwIHRvIGEgbGFyZ2VyIGRpYWdub3Npcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQ09OVEFJTkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnPTMwPWNvbmZpZyBWRklPX0dST1VQXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo0MDpjb25maWcgVkZJT19DT05UQUlORVJcbmRyaXZlcnMvdmZpby9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjb250YWluZXIgL2Rldi92ZmlvL3ZmaW9cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAtIFZGSU9fR1JPVVAqKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGhpbmdlcyBvbiBgVkZJT19HUk9VUGAuIFRoYXQmIzM5O3MgdGhlIGtleSB2YXJpYWJsZSBoZXJlLCBhbmQgaXRzIGJlaGF2aW9yIHdpbGwgZGljdGF0ZSBldmVyeXRoaW5nLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AuIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBvcHRpb25zLCBmZWF0dXJlcywgb3IgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyBjb250cm9sIHRoZSBhdmFpbGFiaWxpdHkgb3IgYmVoYXZpb3Igb2YgYFZGSU9fR1JPVVBgLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHRoYXQgY291bGQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIGF0IGhhbmQuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgb3B0aW9ucyB3aWxsIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3JrcyogYXQgYSBncmFudWxhciBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcdCAgIGRldmljZXMgdGhyb3VnaCBWRklPIGFuZCBpcyB1c2VkIGJ5IHRoZSBtYWpvcml0eSBvZiB1c2Vyc3BhY2VcbiAgMzY6XHRcdCAgIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtYWtpbmcgdXNlIG9mIFZGSU8uXG4gIDM3Olx0XG4gIDM4Olx0XHQgICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS5cbiAgMzk6XHRcbiAgNDA6XHRjb25maWcgVkZJT19DT05UQUlORVJcbiAgNDE6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4gIDQyOlx0XHRzZWxlY3QgVkZJT19JT01NVV9UWVBFMSBpZiBNTVUgXHUwMDI2XHUwMDI2IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpXG4gIDQzOlx0XHRkZXBlbmRzIG9uIFZGSU9fR1JPVVBcbiAgNDQ6XHRcdGRlZmF1bHQgeVxuICA0NTpcdFx0aGVscFxuICA0NjpcdFx0ICBUaGUgVkZJTyBjb250YWluZXIgaXMgdGhlIGNsYXNzaWMgaW50ZXJmYWNlIHRvIFZGSU8gZm9yIGVzdGFibGlzaGluZ1xuICA0NzpcdFx0ICBJT01NVSBtYXBwaW5ncy4gSWYgTiBpcyBzZWxlY3RlZCBoZXJlIHRoZW4gSU9NTVVGRCBtdXN0IGJlIHVzZWQgdG9cbiAgNDg6XHRcdCAgbWFuYWdlIHRoZSBtYXBwaW5ncy5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVW5sZXNzIHRlc3RpbmcgSU9NTVVGRCBzYXkgWSBoZXJlLlxuICA1MTpcdFxuICA1MjpcdGlmIFZGSU9fQ09OVEFJTkVSXG4gIDUzOlx0Y29uZmlnIFZGSU9fSU9NTVVfVFlQRTFcbiAgNTQ6XHRcdHRyaXN0YXRlXG4gIDU1Olx0XHRkZWZhdWx0IG5cbiAgNTY6XHRcbiAgNTc6XHRjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcbiAgNTg6XHRcdHRyaXN0YXRlXG4gIDU5Olx0XHRkZXBlbmRzIG9uIFNQQVBSX1RDRV9JT01NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBWRklPIERlcGVuZGVuY3kgQ2hhaW4qKgoKUmlnaHQsIHNvIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIFZGSU8gY29tcG9uZW50cyByZWxhdGUgdG8gZWFjaCBvdGhlci4gSXQgc2VlbXMgdGhhdCBgVkZJT19DT05UQUlORVJgIGlzIGJ1aWx0IG9uIHRvcCBvZiBgVkZJT19HUk9VUGAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIHRoZSBmb3VuZGF0aW9uYWwgYFZGSU9gIG1vZHVsZS4gVGhpcyBzdWdnZXN0cyBhIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUuIElmIGBWRklPYCBmYWlscywgYFZGSU9fR1JPVVBgIGFuZCBgVkZJT19DT05UQUlORVJgIGFyZSB1c2VsZXNzLiBJZiBgVkZJT19HUk9VUGAgZmFpbHMsIGBWRklPX0NPTlRBSU5FUmAgd2lsbCBmYWlsLiBUaGVyZWZvcmUsIGxvZ2ljYWxseSwgaXQgbWFrZXMgc2Vuc2UgdG8gZGlnIGludG8gYFZGSU9fR1JPVVBgIGZpcnN0IHRvIHVuZGVyc3RhbmQgdGhlIGNydWNpYWwgbGluayBpdCBwbGF5cyBpbiB0aGUgY2hhaW4uIE15IG5leHQgYWN0aW9uIGlzIGNsZWFyOyBsZXQmIzM5O3MgaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljcyBvZiBgVkZJT19HUk9VUGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0XHQgIHRvIHNldCB1cCBzZWN1cmUgRE1BIGNvbnRleHQgZm9yIGRldmljZSBhY2Nlc3MuICBUaGlzIGludGVyZmFjZSBkb2VzXG4gIDI2Olx0XHQgIG5vdCBzdXBwb3J0IG5vaW9tbXUuXG4gIDI3Olx0XG4gIDI4Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBWRklPX0dST1VQXG4gIDMxOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcJiMzNDtcbiAgMzI6XHRcdGRlZmF1bHQgeVxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICAgVkZJTyBncm91cCBzdXBwb3J0IHByb3ZpZGVzIHRoZSB0cmFkaXRpb25hbCBtb2RlbCBmb3IgYWNjZXNzaW5nXG4gIDM1Olx0XHQgICBkZXZpY2VzIHRocm91Z2ggVkZJTyBhbmQgaXMgdXNlZCBieSB0aGUgbWFqb3JpdHkgb2YgdXNlcnNwYWNlXG4gIDM2Olx0XHQgICBhcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgbWFraW5nIHVzZSBvZiBWRklPLlxuICAzNzpcdFxuICAzODpcdFx0ICAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IFkuXG4gIDM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVmlydHVhbGl6YXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGlzIHZpcnR1YWxpemF0aW9uIHByb2JsZW0gYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIGluY29ycG9yYXRlIGBWRklPYCwgYFZGSU9fR1JPVVBgLCBgVkZJT19DT05UQUlORVJgLCBhbmQgYFZGSU9fSU9NTVVfVFlQRTFgLiBJdCYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwsIG9idmlvdXNseS4gVGhlbiB3ZSBoYXZlIGBLVk1gLCB3aGljaCBpcyB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSwgYW5kIHdlIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgYEFDUk5fR1VFU1RgIGNvbXBvbmVudC4gVGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3MsIG5vIGRvdWJ0LgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGVzZSBmb2N1cyBzeW1ib2xzLiBXZSBoYXZlIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCwgYGh2YV90b19wZm5fcmVtYXBwZWRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGBmb2xsb3dfZmF1bHRfcGZuYCwgYW5kIGBhY3JuX3ZtX3JhbV9tYXBgLiBFYWNoIG9mIHRoZW0gdGVsbHMgYSBiaXQgb2YgdGhlIHN0b3J5LgoKSG1tLCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYW5kIGBmb2xsb3dfZmF1bHRfcGZuYCBhcmUgc3RhdGljLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IGEgc3RhdGljIGZ1bmN0aW9uIGlzIG9ubHkgdmlzaWJsZSB3aXRoaW4gYSBzaW5nbGUgZmlsZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGwgdGhlbS4gRmluZGluZyB0aGF0IG91dCB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtIGFuZCBob3cgdGhleSBhZmZlY3Qgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxpbmUgb2YgaW5xdWlyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3Bmbl9yZW1hcHBlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzOC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9Mjk4Nz1rdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTUtXHRlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNjpcdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTctXHRcdGlmIChyID09IC1FQUdBSU4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgSFZBIHRvIFBGTiBNYXBwaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBodmFfdG9fcGZuYCBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkcmlsbCBkb3duLiBJdCBhcHBlYXJzIHRoYXQgYGh2YV90b19wZm5gIGNhbGxzIGBodmFfdG9fcGZuX3JlbWFwcGVkYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIGF0IHNvbWUga2luZCBvZiByZW1hcHBpbmcgaW52b2x2ZWQsIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZy4gQmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGh2YV90b19wZm5gIGl0c2VsZiBpcyBkb2luZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgYGh2YV90b19wZm5gIGZ1bmN0aW9uIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGFjY29tcGxpc2gsIGFuZCB0aGUgcm9sZSBvZiB0aGUgcmVtYXAgZnVuY3Rpb24gaXMgcGxheWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3BmbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTI4Mjc9c3RhdGljIGt2bV9wZm5fdCBrdm1fcmVzb2x2ZV9wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzOC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4Nzprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4OC17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTk3LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTk4Olx0aWYgKGh2YV90b19wZm5fZmFzdChrZnAsIFx1MDAyNnBmbikpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5OTktXHRcdHJldHVybiBwZm47XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMDAtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMDE6XHRucGFnZXMgPSBodmFfdG9fcGZuX3Nsb3coa2ZwLCBcdTAwMjZwZm4pO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDAyLVx0aWYgKG5wYWdlcyA9PSAxKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNS1cdGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xudmlydC9rdm0va3ZtX21haW4uYzozMDE2Olx0XHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXHUwMDI2cGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNy1cdFx0aWYgKHIgPT0gLUVBR0FJTilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMzI9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNDctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNDg6XHRyZXR1cm4gaHZhX3RvX3BmbihrZnApO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDQ5LX1cbi0tXG52aXJ0L2t2bS9rdm1fbW0uaD0yNz1zdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ge1xuLS1cbnZpcnQva3ZtL2t2bV9tbS5oLTU4LVxudmlydC9rdm0va3ZtX21tLmg6NTk6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApO1xudmlydC9rdm0va3ZtX21tLmgtNjAtXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1NC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MTU1OnN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTYte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjA4LVxudmlydC9rdm0vcGZuY2FjaGUuYzoyMDk6XHRcdG5ld19wZm4gPSBodmFfdG9fcGZuKFx1MDAyNmtmcCk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTIxMC1cdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4obmV3X3BmbikpXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0yNTY9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzIyOlx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMy1cdGdwYy1cdTAwM2V1aHZhICYjNDM7PSBwYWdlX29mZnNldDtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyOS1cdGlmICghZ3BjLVx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMwOlx0XHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMS1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzgyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gS1ZNIFBGTiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBLVk0gaGFuZGxlcyBQaHlzaWNhbCBGcmFtZSBOdW1iZXJzIChQRk5zKS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGBodmFfdG9fcGZuYCDigJMgb3IgYXQgbGVhc3QsIHNvbWV0aGluZyB3aXRoIHRoYXQgbmFtZSBhbmQgZnVuY3Rpb24gc2lnbmF0dXJlIOKAkyBpcyBleHBvc2VkIG91dHNpZGUgaXRzIGxpa2VseSBvcmlnaW5hbCBjb21waWxhdGlvbiB1bml0IHdpdGhpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCB0ZWxscyBtZSB0aGF0IHRoaXMgdHJhbnNsYXRpb24gZnVuY3Rpb24gaXMgKmludGVuZGVkKiBmb3IgdXNlIGVsc2V3aGVyZSwgd2hpY2ggaW4gdHVybiBtZWFucyBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIHNvbWUgY3Jvc3MtbW9kdWxlIGludGVyYWN0aW9uIG9yIGFkZHJlc3Mgc3BhY2UgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUgS1ZNIHN1YnN5c3RlbS4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZnVydGhlciwgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGh2YV90b19wZm5gIGlzIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgZm9sbG93X2ZhdWx0X3BmbmAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGl0IGlzIHdvcnRoIHRvIGNoZWNrIHRoaXMgZnVuY3Rpb24sIGFzIGBodmFfdG9fcGZuYCBwcm9iYWJseSB0cmFuc2xhdGVzIGhvc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGZuLCBhbmQgYGZvbGxvd19mYXVsdF9wZm5gIGlzIHJlbGF0ZWQgdG8gZmF1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xsb3dfZmF1bHRfcGZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTM0PXN0YXRpYyB2b2lkIHZmaW9fYmF0Y2hfZmluaShzdHJ1Y3QgdmZpb19iYXRjaCAqYmF0Y2gpXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01MzktXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU0MDpzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NDEtXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBmbixcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTU4Mz1zdGF0aWMgbG9uZyB2YWRkcl9nZXRfcGZucyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkcixcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTYxNC1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NjE1Olx0XHRyZXQgPSBmb2xsb3dfZmF1bHRfcGZuKHZtYSwgbW0sIHZhZGRyLCBwZm4sIFx1MDAyNmFkZHJfbWFzayxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNjE2LVx0XHRcdFx0ICAgICAgIHByb3QgXHUwMDI2IElPTU1VX1dSSVRFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzODcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqU3RhdGljIEZ1bmN0aW9uIElucXVpcmllcyoqCgpPa2F5LCBzbyBgdmFkZHJfZ2V0X3BmbnNgIGlzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHNjb3BlZCB3aXRoaW4gYSBzaW5nbGUgY29tcGlsYXRpb24gdW5pdCwgYW5kIGl0cyB1c2FnZSBpcyBpbnRlbnRpb25hbGx5IHJlc3RyaWN0ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlc2Ugc29ydHMgb2Ygb3B0aW1pemF0aW9ucywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyBob3cgdGhlIHZpcnR1YWwgbWVtb3J5IHN5c3RlbSBpcyBzdHJ1Y3R1cmVkIGhlcmUuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIGB2YWRkcl9nZXRfcGZuc2AgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIGl0cyBzcGVjaWZpYyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsgYW5kIGhpZ2hsaWdodCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbnN0cmFpbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIHByb2JhYmx5IGEgc3ltYm9sIGxvb2t1cCBvciBjcm9zcy1yZWZlcmVuY2UgdG9vbCB0byBkbyB0aGlzIGVmZmVjdGl2ZWx5LCBvciBzaW1wbHkgc2VhcmNoIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseS4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmFkZHJfZ2V0X3BmbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz01NDA9c3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU4Mi0gKi9cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NTgzOnN0YXRpYyBsb25nIHZhZGRyX2dldF9wZm5zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01ODQtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucGFnZXMsIGludCBwcm90LCB1bnNpZ25lZCBsb25nICpwZm4sXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz02NzQ9c3RhdGljIGxvbmcgdmZpb19waW5fcGFnZXNfcmVtb3RlKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzA5LVx0XHRcdC8qIEVtcHR5IGJhdGNoLCBzbyByZWZpbGwgaXQuICovXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjcxMDpcdFx0XHRyZXQgPSB2YWRkcl9nZXRfcGZucyhtbSwgdmFkZHIsIG5wYWdlLCBkbWEtXHUwMDNlcHJvdCxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzExLVx0XHRcdFx0XHQgICAgIFx1MDAyNnBmbiwgYmF0Y2gpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzM0LVx0XHQgKiBwZm4gaXMgcHJlc2V0IGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uIG9mIHRoaXMgaW5uZXIgbG9vcFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo3MzU6XHRcdCAqIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHZhZGRyX2dldF9wZm5zKCkgbmVlZHMgdG8gcHJvdmlkZSB0aGVcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzM2LVx0XHQgKiBpbml0aWFsIHBmbiBmb3IgcGZubWFwcy4gIFRoZXJlZm9yZSB0byByZWR1Y2UgcmVkdW5kYW5jeSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTc0OS1cdFx0XHQgKiBVc2luZyBHVVAgd2l0aCB0aGUgRk9MTF9MT05HVEVSTSBpblxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo3NTA6XHRcdFx0ICogdmFkZHJfZ2V0X3BmbnMoKSB3aWxsIG5vdCByZXR1cm4gaW52YWxpZFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy03NTEtXHRcdFx0ICogb3IgcmVzZXJ2ZWQgcGFnZXMuXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz04Mzg9c3RhdGljIGludCB2ZmlvX3Bpbl9wYWdlX2V4dGVybmFsKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtODUwLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo4NTE6XHRyZXQgPSB2YWRkcl9nZXRfcGZucyhtbSwgdmFkZHIsIDEsIGRtYS1cdTAwM2Vwcm90LCBwZm5fYmFzZSwgXHUwMDI2YmF0Y2gpO1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy04NTItXHRpZiAocmV0ICE9IDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzI0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVkZJTyBQYWdlIFBpbm5pbmcgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIGJvdGggYHZmaW9fcGluX3BhZ2VzX3JlbW90ZWAgYW5kIGB2ZmlvX3Bpbl9wYWdlX2V4dGVybmFsYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgYXMgaXQgbGltaXRzIHRoZWlyIHNjb3BlIGFuZCBhY2Nlc3NpYmlsaXR5IHdpdGhpbiB0aGUgVkZJTyBjb2RlYmFzZS4gVGhleSYjMzk7cmUgaW50ZXJuYWwgZnVuY3Rpb25zLCBlZmZlY3RpdmVseSBoaWRkZW4gZnJvbSB0aGUgb3V0c2lkZSB3b3JsZCBleGNlcHQgdGhyb3VnaCB0aGVpciBkZWZpbmVkIGludGVyZmFjZXMsIGJ1dCBpdCBzdGlsbCBtZWFucyB0aGV5IGFyZSBub3QgdmlzaWJsZSBvdXRzaWRlIHRoZWlyIEMgZmlsZXMuCgpMZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIGZvY3VzIG9uIGB2ZmlvX3Bpbl9wYWdlc19yZW1vdGVgIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBwYWdlIHBpbm5pbmcgcHJvY2Vzcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcGlubmluZyBtZW1vcnkgdGhhdCBpcyAqYWxyZWFkeSogcmVtb3RlIG9yIHNvbWV0aGluZyB0aGUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyByZW1vdGU/IElzIHRoaXMgYWJvdXQgcGlubmluZyBwYWdlcyBmb3IgRE1BIHRyYW5zZmVycyBhY3Jvc3MgYSBkZXZpY2Ugb3IgZm9yIHNvbWUgb3RoZXIgcHVycG9zZT8gSSBuZWVkIHRvIHJldmlldyBpdHMgY2FsbGluZyBjb250ZXh0cyBhbmQgaXRzIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHdlIGFyZSB1c2luZyB2ZmlvLCBzbyBETUEgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiBJIHNob3VsZCBhbHNvIGNoZWNrIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBtYXliZSBpbnZlc3RpZ2F0aW5nIHRoZSBgZG1hX2J1ZmAgb3IgYHBjaV9kbWFgIHN0cnVjdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIFZGSU8gbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyBpdCBpbXBhY3RzIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19waW5fcGFnZXNfcmVtb3RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NjM3PXN0YXRpYyBsb25nIHZwZm5fcGFnZXMoc3RydWN0IHZmaW9fZG1hICpkbWEsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy02NzMtICovXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjY3NDpzdGF0aWMgbG9uZyB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoc3RydWN0IHZmaW9fZG1hICpkbWEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTY3NS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucGFnZSwgdW5zaWduZWQgbG9uZyAqcGZuX2Jhc2UsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNTc5PXN0YXRpYyBpbnQgdmZpb19waW5fbWFwX2RtYShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTU5My1cdFx0LyogUGluIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgKi9cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6MTU5NDpcdFx0bnBhZ2UgPSB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoZG1hLCB2YWRkciAmIzQzOyBkbWEtXHUwMDNlc2l6ZSxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTU5NS1cdFx0XHRcdFx0ICAgICAgc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgXHUwMDI2cGZuLCBsaW1pdCxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE4MDI9c3RhdGljIGludCB2ZmlvX2lvbW11X3JlcGxheShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xODYxLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxODYyOlx0XHRcdFx0bnBhZ2UgPSB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoZG1hLCB2YWRkcixcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTg2My1cdFx0XHRcdFx0XHRcdCAgICAgIG4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgUmV2aWV3IG9mIERNQSBNYXBwaW5nIGluIFZGSU8qKgoKUmlnaHQsIGB2ZmlvX3Bpbl9tYXBfZG1hYC4uLiB0aGF0JiMzOTtzIGEgKnN0YXRpYyogZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIG15IG1lbnRhbCBtb2RlbCBpcyBhY2N1cmF0ZSBoZXJlLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHZmaW9fcGluX21hcF9kbWFgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0JiMzOTtzIGRvaW5nLiBHb3R0YSBrZWVwIHRoZSBkZXRhaWxzIHNoYXJwIHRvIG1haW50YWluIGEgdGlnaHQgZ3JpcCBvbiB0aGVzZSBETUEgbWFwcGluZyBpbnRyaWNhY2llcyB3aXRoaW4gdGhlIFZGSU8gZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgYXNwZWN0cyBpdCBoYW5kbGVzPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUsIHNvIGEgcXVpY2sgcmVmcmVzaGVyIGlzIGluIG9yZGVyIHRvIGtlZXAgdGhpcyBvcHRpbWl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGluX21hcF9kbWEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNTUyPXN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LCBkbWFfYWRkcl90IGlvdmEsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTc4LVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNTc5OnN0YXRpYyBpbnQgdmZpb19waW5fbWFwX2RtYShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTgwLVx0XHRcdCAgICBzaXplX3QgbWFwX3NpemUpXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNjc5PXN0YXRpYyBpbnQgdmZpb19kbWFfZG9fbWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE3ODgtXHRlbHNlXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjE3ODk6XHRcdHJldCA9IHZmaW9fcGluX21hcF9kbWEoaW9tbXUsIGRtYSwgc2l6ZSk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE3OTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njg3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB2ZmlvX2RtYV9kb19tYXBgKioKCk9rYXksIHNvIGB2ZmlvX2RtYV9kb19tYXBgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBpdCBpbXBsaWVzIGEgbW9yZSBmb2N1c2VkIHNjb3BlIHdpdGhpbiB0aGUgVkZJTyBkcml2ZXIsIGxpa2VseSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSBmb3IgYHZmaW9fZG1hX2RvX21hcGAgaXRzZWxmLiBVbmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBjcnVjaWFsIHRvIGZ1bGx5IGdyYXNwIGhvdyBETUEgbWFwcGluZyBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIFZGSU8gc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24sIGlucHV0cywgYW5kIG91dHB1dHMgYW5kIHdoYXQgZGVjaXNpb25zIGl0IGlzIG1ha2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fZG1hX2RvX21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE2NDc9c3RhdGljIGludCB2ZmlvX2NoYW5nZV9kbWFfb3duZXIoc3RydWN0IHZmaW9fZG1hICpkbWEpXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNjc4LVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNjc5OnN0YXRpYyBpbnQgdmZpb19kbWFfZG9fbWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTY4MC1cdFx0XHQgICBzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwICptYXApXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0yODk0PXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9tYXBfZG1hKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTI5MDktXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjI5MTA6XHRyZXR1cm4gdmZpb19kbWFfZG9fbWFwKGlvbW11LCBcdTAwMjZtYXApO1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0yOTExLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWFgKioKCk9rYXksIHNvIEkmIzM5O20gcHJvY2Vzc2luZyB0aGlzIGNvZGUgYW5kIEkmIzM5O3ZlIGp1c3Qgbm90aWNlZCB0aGF0IGB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWFgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBzY29wZWQgdG8gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCB3aGljaCBpc24mIzM5O3QgaW5oZXJlbnRseSBhIHByb2JsZW0sIGJ1dCBpdCBkb2VzIG1lYW4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGFuZCBpZiB0aGF0IHNjb3BlIGlzIHRydWx5IHN1ZmZpY2llbnQuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFZGSU8gSU9NTVUgVHlwZSAxIHNjaGVtZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgYHN0YXRpY2AgZGVjbGFyYXRpb24gaXMgYXBwcm9wcmlhdGUgYW5kIGRvZXNuJiMzOTt0IGhpbmRlciBhbnkgcG90ZW50aWFsIGZ1dHVyZSBmbGV4aWJpbGl0eSBvciBpbnRyb2R1Y2UgYW55IHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBsaW1pdGF0aW9ucy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYHZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTI4MzU9c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX2dldF9pbmZvKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTI4OTMtXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjI4OTQ6c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWEoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0yODk1LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9MzA4MD1zdGF0aWMgbG9uZyB2ZmlvX2lvbW11X3R5cGUxX2lvY3RsKHZvaWQgKmlvbW11X2RhdGEsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0zMDkwLVx0Y2FzZSBWRklPX0lPTU1VX01BUF9ETUE6XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjMwOTE6XHRcdHJldHVybiB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWEoaW9tbXUsIGFyZyk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMwOTItXHRjYXNlIFZGSU9fSU9NTVVfVU5NQVBfRE1BOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgyNQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgVkZJTyBJT01NVSBJT0NUTCBFbnRyeSBQb2ludCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAgaXMgKnRoZSogaW9jdGwgaGFuZGxlciwgdGhlIG1haW4gZnVuY3Rpb24uIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gSXQgc2VlbXMgdGhlIGNvbm5lY3Rpb24gaGFwcGVucyB2aWEgdGhlIGB2ZmlvX2lvbW11X2RyaXZlcl9vcHNgIHN0cnVjdC4gTG9va2luZyBhdCB0aGF0LCB0aGUgYC5pb2N0bGAgZmllbGQgaXMgYXNzaWduZWQgdG8gYHZmaW9faW9tbXVfdHlwZTFfaW9jdGxgLiBSaWdodCwgc28gdGhhdCBjb25maXJtcyBpdCwgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIEkvTyBjb250cm9sIHJlcXVlc3RzIGlzIGluZGVlZCBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAuIE5vdyB0byBjb250aW51ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIEkmIzM5O2xsIG1vdmUgb24gdG8gY2hlY2sgYGFjcm5fdm1fcmFtX21hcGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fjcm5fdm1fcmFtX21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oPTE5OD1pbnQgYWNybl92bV9tZW1zZWdfdW5tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcCk7XG5kcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oOjE5OTppbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xuZHJpdmVycy92aXJ0L2Fjcm4vYWNybl9kcnYuaC0yMDAtdm9pZCBhY3JuX3ZtX2FsbF9yYW1fdW5tYXAoc3RydWN0IGFjcm5fdm0gKnZtKTtcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jPTEwOD1pbnQgYWNybl92bV9tZW1zZWdfbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXG4tLVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYy0xMTItXHRpZiAobWVtbWFwLVx1MDAzZXR5cGUgPT0gQUNSTl9NRU1NQVBfUkFNKVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYzoxMTM6XHRcdHJldHVybiBhY3JuX3ZtX3JhbV9tYXAodm0sIG1lbW1hcCk7XG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTExNC1cbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jPTEzMT1pbnQgYWNybl92bV9tZW1zZWdfdW5tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE0OS0vKipcbmRyaXZlcnMvdmlydC9hY3JuL21tLmM6MTUwOiAqIGFjcm5fdm1fcmFtX21hcCgpIC0gQ3JlYXRlIGEgUkFNIEVQVCBtYXBwaW5nIG9mIFVzZXIgVk0uXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE1MS0gKiBAdm06XHRcdFRoZSBVc2VyIFZNIHBvaW50ZXJcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE1NS0gKi9cbmRyaXZlcnMvdmlydC9hY3JuL21tLmM6MTU2OmludCBhY3JuX3ZtX3JhbV9tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTU3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MjUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5hdmlnYXRpbmcgdGhlIEFDUk4gTWVtb3J5IE1hcHBpbmcgTGFuZHNjYXBlKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBhY3JuX3ZtX3JhbV9tYXBgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgdmlydHVhbCBtYWNoaW5lJiMzOTtzIFJBTSBwcm9wZXJseSBtYXBwZWQsIG9idmlvdXNseS4gVGhlIGtleSB0aGluZyBpcyAqaG93KiBpdCBnZXRzIGNhbGxlZC4gTXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGNhbGxlZCBieSBzb21ldGhpbmcgaGlnaGVyIHVwIHRoZSBzdGFjay4gQW5kIHllcCwgY29uZmlybWVkIOKAkyBpdCBsb29rcyBsaWtlIGBhY3JuX3ZtX21lbXNlZ19tYXBgIGlzIHRoZSBvbmUgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIGludm9raW5nIGl0LiBTbywgYG1lbXNlZ19tYXBgIGlzIGhhbmRsaW5nIHRoZSBicm9hZGVyIG1lbW9yeSBzZWdtZW50IG1hcHBpbmcgdGFza3MsIGFuZCB0aGVuIGl0IGxldmVyYWdlcyB0aGUgbW9yZSBzcGVjaWFsaXplZCBgcmFtX21hcGAgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIFJBTSBtYXBwaW5nLiBJdCYjMzk7cyBhIG5pY2UsIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMsIHR5cGljYWwgb2YgYSB3ZWxsLWRlc2lnbmVkIGtlcm5lbCBtb2R1bGUuIGBtZW1zZWdfbWFwYCBwcm9iYWJseSBoYW5kbGVzIHRoaW5ncyBsaWtlIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlIHBhZ2UgdGFibGVzLCBtYW5hZ2luZyBwaHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9ucywgZGVhbGluZyB3aXRoIG1lbW9yeSBhdHRyaWJ1dGVzLCBhbmQgY29vcmRpbmF0aW5nIHdpdGggb3RoZXIgc3Vic3lzdGVtcywgYmVmb3JlIHVsdGltYXRlbHkgY2FsbGluZyBgcmFtX21hcGAgdG8gaGFuZGxlIHRoZSBhY3R1YWwgcGh5c2ljYWwgdG8gdmlydHVhbCBtYXBwaW5nIG9mIFJBTS4gVGhhdCYjMzk7cyBhIGdvb2QgbWVudGFsIG1vZGVsIHRvIGtlZXAgaW4gbWluZCBhcyBJIGRlbHZlIGZ1cnRoZXIgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXJjaGl0ZWN0dXJlLiBLbm93aW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fjcm5fdm1fbWVtc2VnX21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oPTE5Nj1pbnQgYWNybl9tbV9yZWdpb25fZGVsKHN0cnVjdCBhY3JuX3ZtICp2bSwgdTY0IHVzZXJfZ3BhLCB1NjQgc2l6ZSk7XG5kcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oOjE5NzppbnQgYWNybl92bV9tZW1zZWdfbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xuZHJpdmVycy92aXJ0L2Fjcm4vYWNybl9kcnYuaC0xOTgtaW50IGFjcm5fdm1fbWVtc2VnX3VubWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xuLS1cbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jPTEwOD1zdGF0aWMgbG9uZyBhY3JuX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0yMjMtXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYzoyMjQ6XHRcdHJldCA9IGFjcm5fdm1fbWVtc2VnX21hcCh2bSwgXHUwMDI2bWVtbWFwKTtcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTIyNS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYz04NT1pbnQgYWNybl9tbV9yZWdpb25fZGVsKHN0cnVjdCBhY3JuX3ZtICp2bSwgdTY0IHVzZXJfZ3BhLCB1NjQgc2l6ZSlcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTEwNy1cbmRyaXZlcnMvdmlydC9hY3JuL21tLmM6MTA4OmludCBhY3JuX3ZtX21lbXNlZ19tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTA5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqTmF2aWdhdGluZyB0aGUgQUNSTiBNZW1vcnkgTWFwcGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgbWVtb3J5IG1hcHBpbmcgaW4gdGhlIEFDUk4gaHlwZXJ2aXNvciwgYW5kIGl0IGxvb2tzIGxpa2UgYGFjcm5fdm1fbWVtc2VnX21hcGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gU2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBhY3JuX2Rldl9pb2N0bGAsIHRoYXQgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byB1bmRlcnN0YW5kLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgcGh5c2ljYWwgbWVtb3J5IGlzIGhhbmRsZWQgd2l0aGluIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvY2R4L2NkeC5jLTY2My0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NkeC9jZHguYzo2NjQ6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvY2R4L2NkeC5jLTY2NS0jZW5kaWZcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xuZHJpdmVycy9jaGFyL21lbS5jLTMyMC0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzIxOlx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjItI2VuZGlmXG4tLVxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwNi0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA3Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA4LSNlbmRpZlxuLS1cbmRyaXZlcnMvcGNpL21tYXAuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvcGNpL21tYXAuYy0xOS0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3BjaS9tbWFwLmM6MjA6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvcGNpL21tYXAuYy0yMS0jZW5kaWZcbi0tXG5kcml2ZXJzL3Vpby91aW8uYz03MzY9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fcGh5c2ljYWxfdm1fb3BzID0ge1xuZHJpdmVycy91aW8vdWlvLmMtNzM3LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvdWlvL3Vpby5jOjczODpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy91aW8vdWlvLmMtNzM5LSNlbmRpZlxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD03ODM9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtODM1LVx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XG5pbmNsdWRlL2xpbnV4L21tLmg6ODM2Olx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXG5pbmNsdWRlL2xpbnV4L21tLmgtODM3LVx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzEzMD1jb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMxMzE6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvbW0uaC0zMTMyLVx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTtcbi0tXG5tbS9tZW1vcnkuYz02OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbi0tXG5tbS9tZW1vcnkuYy02OTY3LS8qKlxubW0vbWVtb3J5LmM6Njk2ODogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3Ncbm1tL21lbW9yeS5jLTY5NjktICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3Ncbi0tXG5tbS9tZW1vcnkuYy02OTc4LSAqL1xubW0vbWVtb3J5LmM6Njk3OTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtNjk4MC1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbi0tXG5tbS9tZW1vcnkuYy03MDI3LX1cbm1tL21lbW9yeS5jOjcwMjg6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG5tbS9tZW1vcnkuYy03MDI5LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9NjMyPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODQtXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6Njg1Olx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY4Ni1cdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjU1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFjY2VzcyBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYWNjZXNzIG1ldGhvZHMuIEl0IGxvb2tzIGxpa2UgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdXNlZCBhcyB0aGUgYC5hY2Nlc3NgIG1lbWJlciB3aXRoaW4gdGhlIGB2bV9vcGVyYXRpb25zX3N0cnVjdGAuIEl0JiMzOTtzIGV4cG9ydGVkLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlbGF0ZWQuIE15IGN1cnJlbnQgdGhpbmtpbmcgaXMgdGhhdCB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGl0c2VsZiwgYW5kIHRoZW4gdGhlIG1vcmUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIHJlbGF0ZWQgcmVhZHMgYW5kIHdyaXRlcyBgczM5MF9wY2lfbW1pb193cml0ZWAgYW5kIGBzMzkwX3BjaV9tbWlvX3JlYWRgLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZXJlIGFyZSB0aGUgbW9yZSBkZXZpY2Utc3BlY2lmaWMgaW9jdGxzOiBgYWNybl9kZXZfaW9jdGxgIGFuZCBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAuCgpIb2xkIG9uLi4uIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAgYXJlIGFjdHVhbGx5IHN5c2NhbGxzIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIGBhY3JuX2Rldl9pb2N0bGAgaXMgdGhlIGlvY3RsIGZvciBBQ1JOLCBhbmQgYHZmaW9faW9tbXVfdHlwZTFfaW9jdGxgIGlzIGZvciBWRklPLiBJIGtub3cgYWJvdXQgdGhvc2UuIEkgYWxzbyBzZWUgdGhhdCBgaHZhX3RvX3BmbmAgaXMgY2FsbGVkIGJ5IGBrdm1fZm9sbG93X3BmbmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IHNldmVyYWwgS1ZNIGZ1bmN0aW9ucy4gSW50ZXJlc3RpbmcsIGJ1dCBga3ZtX2ZvbGxvd19wZm5gIGlzIHN0YXRpYyBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoYXQgbWVhbnMgSSBoYXZlIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoYXQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGt2bV9mb2xsb3dfcGZuYCBuZXh0LCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2ZvbGxvd19wZm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yODI1PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjgyNi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjgyNzpzdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4MjgtXHRcdFx0XHQgc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqbWFwLCBib29sIHdyaXRhYmxlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mzk9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudmlydC9rdm0va3ZtX21haW4uYzoyOTQwOlx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk0MS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTg3Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg4LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMzEtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMzI6c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAzMy17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDUxPWt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDU0LXtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1NTpcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTYtXHRcdC5zbG90ID0gc2xvdCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjgtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNjk6XHRyZXR1cm4ga3ZtX2ZvbGxvd19wZm4oXHUwMDI2a2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA3MC19XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDk3PXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA5OS1cdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2UgPSBOVUxMO1xudmlydC9rdm0va3ZtX21haW4uYzozMTAwOlx0c3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwMS1cdFx0LnNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbiksXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMTA2LVxudmlydC9rdm0va3ZtX21haW4uYzozMTA3Olx0KHZvaWQpa3ZtX2ZvbGxvd19wZm4oXHUwMDI2a2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwOC1cdHJldHVybiByZWZjb3VudGVkX3BhZ2U7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMTEyPWludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExNC17XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMTU6XHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xudmlydC9rdm0va3ZtX21haW4uYy0zMTE2LVx0XHQuc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbiksXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMTI4LVxudmlydC9rdm0va3ZtX21haW4uYzozMTI5Olx0bWFwLVx1MDAzZXBmbiA9IGt2bV9mb2xsb3dfcGZuKFx1MDAyNmtmcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMzAtXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihtYXAtXHUwMDNlcGZuKSlcbi0tXG52aXJ0L2t2bS9rdm1fbW0uaC0yNi1cbnZpcnQva3ZtL2t2bV9tbS5oOjI3OnN0cnVjdCBrdm1fZm9sbG93X3BmbiB7XG52aXJ0L2t2bS9rdm1fbW0uaC0yOC1cdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4tLVxudmlydC9rdm0va3ZtX21tLmgtNTgtXG52aXJ0L2t2bS9rdm1fbW0uaDo1OTprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCk7XG52aXJ0L2t2bS9rdm1fbW0uaC02MC1cbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTE1NT1zdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2My1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MTY0Olx0c3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHtcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTY1LVx0XHQuc2xvdCA9IGdwYy1cdTAwM2VtZW1zbG90LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg2NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzLgoKKipLVk0gU3ltYm9sIEFuYWx5c2lzOiBgX19rdm1fZmF1bHRpbl9wZm5gKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IHNldmVyYWwga2V5IEtWTSBmdW5jdGlvbnMg4oCTIHNwZWNpZmljYWxseSBgX19rdm1fZmF1bHRpbl9wZm5gLCBgX19nZm5fdG9fcGFnZWAsIGFuZCBgX19rdm1fdmNwdV9tYXBgIOKAkyBhcmUgYWxsIGZ1bm5lbGluZyBkb3duIHRvIGEgY2FsbCB0byBga3ZtX2ZvbGxvd19wZm5gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBHaXZlbiBob3cgd2lkZXNwcmVhZCB0aGUgdXNlIGFuZC9vciBleHBvcnQgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB3aXRoaW4gS1ZNLCBpdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBfX2t2bV9mYXVsdGluX3BmbmAgaXMgYSBwb3RlbnRpYWxseSBmcnVpdGZ1bCBzeW1ib2wgdG8gemVybyBpbiBvbiBmb3IgZGVlcGVyIGFuYWx5c2lzLiBJdCYjMzk7cyBhIGNlbnRyYWwgcG9pbnQgb2YgaW50ZXJhY3Rpb24uIEdpdmVuIHRoZSBpbnRlcmNvbm5lY3RlZG5lc3MgSSBzZWUgaGVyZSwgaXQgc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgdW5kZXJzdGFuZGluZyBhIGxhcmdlciBjaHVuayBvZiBLVk0mIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byBgX19rdm1fZmF1bHRpbl9wZm5gLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa3ZtX2ZhdWx0aW5fcGZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jPTE4NDg9c3RhdGljIGludCBrdm1fczJfZmF1bHRfZ2V0X3ZtYV9pbmZvKGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCxcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xODc4LVx0ICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZlxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTg3OTpcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0b1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTg4MC1cdCAqIGFjcXVpcmluZyBrdm0tXHUwMDNlbW11X2xvY2suXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTkwMz1zdGF0aWMgaW50IGt2bV9zMl9mYXVsdF9waW5fcGZuKGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCxcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xOTExLVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTkxMjpcdHMydmktXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oczJmZC1cdTAwM2VtZW1zbG90LCBnZXRfY2Fub25pY2FsX2dmbihzMmZkLCBzMnZpKSxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE5MTMtXHRcdFx0XHQgICAgICBrdm1faXNfd3JpdGVfZmF1bHQoczJmZC1cdTAwM2V2Y3B1KSA/IEZPTExfV1JJVEUgOiAwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE5NDktXHRcdFx0ICogbGFyZ2VzdCBxdWFudGl0eSB3ZSBjYW4gbWFwLiAgSWYgaW5zdGVhZCBpdCB3YXMgbWFwcGVkXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxOTUwOlx0XHRcdCAqIHZpYSBfX2t2bV9mYXVsdGluX3BmbigpLCB2bWFfcGFnZXNpemUgaXMgc2V0IHRvIFBBR0VfU0laRVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTk1MS1cdFx0XHQgKiBhbmQgbXVzdCBub3QgYmUgdXBncmFkZWQuXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM1OD1zdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQxMS1cdGlmICghKmlzX2dtZW0pIHtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE0MTI6XHRcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKG1lbXNsb3QsIGdmbiwgd3JpdGVfZmF1bHQgPyBGT0xMX1dSSVRFIDogMCxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MTMtXHRcdFx0XHRcdFx1MDAyNndyaXRhYmxlLCBcdTAwMjZwYWdlKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYz01MDY9aW50IGt2bXBwY19ib29rM3NfaHZfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2h2LmMtNjA1LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2h2LmM6NjA2Olx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0aW5nID8gRk9MTF9XUklURSA6IDAsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYy02MDctXHRcdFx0XHRcdTAwMjZ3cml0ZV9vaywgXHUwMDI2cGFnZSk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM9ODIxPWludCBrdm1wcGNfYm9vazNzX2luc3RhbnRpYXRlX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTg0Mi1cdGh2YSA9IGdmbl90b19odmFfbWVtc2xvdChtZW1zbG90LCBnZm4pO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM6ODQzOlx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0aW5nID8gRk9MTF9XUklURSA6IDAsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy04NDQtXHRcdFx0XHRcdTAwMjZ1cGdyYWRlX3dyaXRlLCBcdTAwMjZwYWdlKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11X2hvc3QuYz0zMjA9c3RhdGljIGlubGluZSBpbnQga3ZtcHBjX2U1MDBfc2hhZG93X21hcChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXVfaG9zdC5jLTM1NC1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXVfaG9zdC5jOjM1NTpcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgRk9MTF9XUklURSwgXHUwMDI2d3JpdGFibGUsIFx1MDAyNnBhZ2UpO1xuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdV9ob3N0LmMtMzU2LVx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSkge1xuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTUzNj1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTU5OS1cdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjYwMDpcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0byBhY3F1aXJpbmdcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYwMS1cdCAqIGt2bS1cdTAwM2VtbXVfbG9jay5cbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MTUtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo2MTY6XHRoZm4gPSBfX2t2bV9mYXVsdGluX3BmbihtZW1zbG90LCBnZm4sIGlzX3dyaXRlID8gRk9MTF9XUklURSA6IDAsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MTctXHRcdFx0XHRcdTAwMjZ3cml0YWJsZSwgXHUwMDI2cGFnZSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM9MzM9aW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYpXG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtNzMtXHRcdFx0c2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZi1cdTAwM2VnZm4pO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6NzQ6XHRcdGYtXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oc2xvdCwgZi1cdTAwM2VnZm4sIGZvbGwsIFx1MDAyNmYtXHUwMDNld3JpdGFibGUsIFx1MDAyNmYtXHUwMDNlcGFnZSk7XG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy03NS1cbi0tXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy04Ny1cdFx0XHRmb2xsIFx1MDAyNj0gfkZPTExfTk9XQUlUO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6ODg6XHRcdFx0Zi1cdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihzbG90LCBmLVx1MDAzZWdmbiwgZm9sbCwgXHUwMDI2Zi1cdTAwM2V3cml0YWJsZSwgXHUwMDI2Zi1cdTAwM2VwYWdlKTtcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTg5LVx0XHR9XG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM9MTI5PWludCBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZiwgZ2ZuX3QgZ2ZuLCBib29sIHcpXG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTM1LVx0Zi1cdTAwM2VnZm4gPSBnZm47XG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxMzY6XHRmLVx1MDAzZXBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgZm9sbCwgXHUwMDI2Zi1cdTAwM2V3cml0YWJsZSwgXHUwMDI2Zi1cdTAwM2VwYWdlKTtcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTEzNy1cdGlmIChpc19ub3Nsb3RfcGZuKGYtXHUwMDNlcGZuKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2NTY9c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY2NC1cdGZvbGwgfD0gRk9MTF9OT1dBSVQ7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2NjU6XHRmYXVsdC1cdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIGZvbGwsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NjYtXHRcdFx0XHQgICAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlbWFwX3dyaXRhYmxlLCBcdTAwMjZmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY5NC1cdGZvbGwgXHUwMDI2PSB+Rk9MTF9OT1dBSVQ7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2OTU6XHRmYXVsdC1cdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIGZvbGwsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2OTYtXHRcdFx0XHQgICAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlbWFwX3dyaXRhYmxlLCBcdTAwMjZmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9Njk0Nj12b2lkIHZteF9zZXRfYXBpY19hY2Nlc3NfcGFnZV9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY5ODctXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6Njk4ODpcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgRk9MTF9XUklURSwgXHUwMDI2d3JpdGFibGUsIFx1MDAyNnJlZmNvdW50ZWRfcGFnZSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY5ODktXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pKVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjg1PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTMxMC1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMzExOmt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTMxMi1cdFx0XHQgICAgdW5zaWduZWQgaW50IGZvbGwsIGJvb2wgKndyaXRhYmxlLFxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMzE1PXN0YXRpYyBpbmxpbmUga3ZtX3Bmbl90IGt2bV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTMxOC17XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTMxOTpcdHJldHVybiBfX2t2bV9mYXVsdGluX3Bmbihrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pLCBnZm4sXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTMyMC1cdFx0XHRcdCB3cml0ZSA/IEZPTExfV1JJVEUgOiAwLCB3cml0YWJsZSwgcmVmY291bnRlZF9wYWdlKTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMzI9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTAtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNTE6a3ZtX3Bmbl90IF9fa3ZtX2ZhdWx0aW5fcGZuKGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cdFx0XHQgICAgdW5zaWduZWQgaW50IGZvbGwsIGJvb2wgKndyaXRhYmxlLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA3MC19XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNzE6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fa3ZtX2ZhdWx0aW5fcGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIGBfX2t2bV9mYXVsdGluX3BmbmAgaXMgYSBLVk0gaW50ZXJuYWwgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGEgdXNlZnVsIHBvaW50IHRvIHN0YXJ0IGxvb2tpbmcgYXQuIExldCYjMzk7cyBzZWUuLi4gdGhlIHJlYWwgaW50ZXJlc3RpbmcgcG9pbnQgaGVyZSBpcyB0aGUgZm9jdXMgb24gTU1JTyBvcGVyYXRpb25zLgoKSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhvc2UgYHMzOTBfcGNpX21taW9fd3JpdGVgIGFuZCBgczM5MF9wY2lfbW1pb19yZWFkYCBzeXNjYWxscy4gUmlnaHQsIHRoZXkgKmFyZSogc3lzY2FsbHMsIHdoaWNoIG1lYW5zIFN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhlbSBkaXJlY3RseSBpZiB0aGV5JiMzOTtyZSBkZXNjcmliZWQgaW4gdGhlIHN5emxhbmcgZGVmaW5pdGlvbi4gSG1tLCBgczM5MF9wY2lfbW1pb193cml0ZWAgaXMgZGVmaW5pdGVseSBhIHN5c2NhbGwuCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgYXJlIHRoZXNlIHdvcnRoIGZ1enppbmc/IFllcywgb2YgY291cnNlLCB0aGV5IGFyZSBzeXNjYWxscy4KCkFoLCBidXQgdGhleSBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBzcGVjaWZpYyB0byBzMzkwLiBUaGF0JiMzOTtzIGEgYml0IGxpbWl0aW5nLiBIb3dldmVyLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBnb29kIG5ld3MsIGFzIGEgY29yZSBNTSBtb2RpZmljYXRpb24gb3BlbnMgdXAgbWFueSBmdXp6aW5nIHBhdGhzLiBJIGNhbiByZWFjaCB0aGlzIHZpYSBLVk0sIFZGSU8sIEFDUk4sIGFuZCBldmVuIHRoZSBnZW5lcmljIGBnZW5lcmljX2FjY2Vzc19waHlzYCBwYXRoLiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXRzZWxmIGlzIHVzZWQgYnkgYC9kZXYvbWVtYCAodmlhIGBtbWFwX21lbV9vcHNgKSwgUENJIE1NSU8gbWFwcGluZyAoYHBjaV9waHlzX3ZtX29wc2ApLCBhbmQgVUlPIChgdWlvX3BoeXNpY2FsX3ZtX29wc2ApLiBTbywgSSBzaG91bGQgYmUgYWJsZSB0byBmdXp6IHRoZSBNTUlPIGxvZ2ljIHRocm91Z2ggYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBUaGF04oCZcyBhIG11Y2ggbW9yZSBnZW5lcmFsIGFwcHJvYWNoLgoKT2theSwgbm93IGxldCYjMzk7cyBnbyBhbmQgY2hlY2sgd2hvIGNhbGxzIGBmb2xsb3dfcGZubWFwX3N0YXJ0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9sbG93X3Bmbm1hcF9zdGFydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM9MTI4PVNZU0NBTExfREVGSU5FMyhzMzkwX3BjaV9tbWlvX3dyaXRlLCB1bnNpZ25lZCBsb25nLCBtbWlvX2FkZHIsXG4tLVxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTE4My1cdGFyZ3Mud3JpdGVfZmF1bHQgPSB0cnVlO1xuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjE4NDpcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMTg1LVx0aWYgKHJldCkge1xuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTE4Ni1cdFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjE4NzpcdFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODgtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jPTI4ND1TWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb19yZWFkLCB1bnNpZ25lZCBsb25nLCBtbWlvX2FkZHIsXG4tLVxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTMzNi1cdGFyZ3Mud3JpdGVfZmF1bHQgPSBmYWxzZTtcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYzozMzc6XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTMzOC1cdGlmIChyZXQpIHtcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0zMzktXHRcdGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cdTAwM2VtbSwgbW1pb19hZGRyLCAwLCBOVUxMKTtcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYzozNDA6XHRcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzQxLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTQwPXN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU1MTpcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU1Mi1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU2NC1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NTY1Olx0XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NjYtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYz0xNTY9aW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxuLS1cbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTkyLVxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYzoxOTM6XHRcdFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTk0LVx0XHRcdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMxMzQ9c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTMxNjYtfTtcbmluY2x1ZGUvbGludXgvbW0uaDozMTY3OmludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTMxNjgtdm9pZCBmb2xsb3dfcGZubWFwX2VuZChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKTtcbi0tXG5tbS9tZW1vcnkuYz02ODA4PXN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmMtNjgyMi0vKipcbm1tL21lbW9yeS5jOjY4MjM6ICogZm9sbG93X3Bmbm1hcF9zdGFydCgpIC0gTG9vayB1cCBhIHBmbiBtYXBwaW5nIGF0IGEgdXNlciB2aXJ0dWFsIGFkZHJlc3Ncbm1tL21lbW9yeS5jLTY4MjQtICogQGFyZ3M6IFBvaW50ZXIgdG8gc3RydWN0IEBmb2xsb3dfcGZubWFwX2FyZ3Ncbi0tXG5tbS9tZW1vcnkuYy02ODU0LSAqL1xubW0vbWVtb3J5LmM6Njg1NTppbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxubW0vbWVtb3J5LmMtNjg1Ni17XG4tLVxubW0vbWVtb3J5LmMtNjk0Ny19XG5tbS9tZW1vcnkuYzo2OTQ4OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfc3RhcnQpO1xubW0vbWVtb3J5LmMtNjk0OS1cbm1tL21lbW9yeS5jLTY5NTAtLyoqXG5tbS9tZW1vcnkuYzo2OTUxOiAqIGZvbGxvd19wZm5tYXBfZW5kKCk6IEVuZCBhIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBwcm9jZXNzXG5tbS9tZW1vcnkuYy02OTUyLSAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzXG5tbS9tZW1vcnkuYy02OTUzLSAqXG5tbS9tZW1vcnkuYzo2OTU0OiAqIE11c3QgYmUgdXNlZCBpbiBwYWlyIG9mIGZvbGxvd19wZm5tYXBfc3RhcnQoKS4gIFNlZSB0aGUgc3RhcnQoKSBmdW5jdGlvblxubW0vbWVtb3J5LmMtNjk1NS0gKiBhYm92ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbi0tXG5tbS9tZW1vcnkuYz02OTc5PWludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtNjk5NC1yZXRyeTpcbm1tL21lbW9yeS5jOjY5OTU6XHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbm1tL21lbW9yeS5jLTY5OTYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm1tL21lbW9yeS5jLTcwMDUtXG5tbS9tZW1vcnkuYzo3MDA2Olx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG5tbS9tZW1vcnkuYy03MDA3LVx0XHRnb3RvIG91dF91bm1hcDtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mzk9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk1Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk1NzpcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xudmlydC9rdm0va3ZtX21haW4uYy0yOTU4LVx0aWYgKHIpIHtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzEtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NzI6XHRcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVx0XHRpZiAocikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ0MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBEZXBlbmRlbmN5IENoYWluKioKCk9rYXksIHNvIHRoZSBgZm9sbG93X3Bmbm1hcF9zdGFydGAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBwb2ludCBvZiB0aGlzIHBhdGNoLCBhcyBpdCYjMzk7cyB0aGUgdGFyZ2V0IHRoYXQgZ2V0cyBjYWxsZWQgYnkgdGhlIHVwZGF0ZWQgYHBmbm1hcF9hcmdzX3NldHVwYC4gQmFzZWQgb24gdGhlIGNvZGUsIGl0JiMzOTtzIHVzZWQgYnkgc2V2ZXJhbCBjb3JlIGNvbXBvbmVudHM6IGBzMzkwX3BjaV9tbWlvX3dyaXRlYCwgYHMzOTBfcGNpX21taW9fcmVhZGAsIGBmb2xsb3dfZmF1bHRfcGZuYCBmb3IgVkZJTywgYGFjcm5fdm1fcmFtX21hcGAgZm9yIEFDUk4sIHRoZSBnZW5lcmljIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb24gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBhbmQgYGh2YV90b19wZm5fcmVtYXBwZWRgIHdpdGhpbiBLVk0uCgpHaXZlbiB0aGF0LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAsIHRvbywgdGhleSBzaG91bGQgYmUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEFuZCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIHNlZSBpZiBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAgYW5kIGBhY3JuX2Rldl9pb2N0bGBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19pb21tdV90eXBlMV9pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTI5NjY9c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX2RpcnR5X3BhZ2VzKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMwNzktXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjMwODA6c3RhdGljIGxvbmcgdmZpb19pb21tdV90eXBlMV9pb2N0bCh2b2lkICppb21tdV9kYXRhLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0zMDgxLVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0zMjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19pb21tdV9kcml2ZXJfb3BzIHZmaW9faW9tbXVfZHJpdmVyX29wc190eXBlMSA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMyNTUtXHQucmVsZWFzZVx0XHQ9IHZmaW9faW9tbXVfdHlwZTFfcmVsZWFzZSxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6MzI1NjpcdC5pb2N0bFx0XHRcdD0gdmZpb19pb21tdV90eXBlMV9pb2N0bCxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMzI1Ny1cdC5hdHRhY2hfZ3JvdXBcdFx0PSB2ZmlvX2lvbW11X3R5cGUxX2F0dGFjaF9ncm91cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyOTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogVGhlIFN5c3RlbSBpcyBGcm96ZW4qKgoKSG1tLCB0aGlzIGZlZWxzLi4uIHN0YXRpYy4gSXQmIzM5O3MgbGlrZSB0aGUgc3lzdGVtIGlzIGNvbXBsZXRlbHkgdW5yZXNwb25zaXZlLCB3aGljaCBpcyBjb25jZXJuaW5nLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgc29tZXRoaW5nIGhhcyBncm91bmQgdG8gYSBoYWx0LiBXZSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBhdHRlbnRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNvcmUgaW50ZXJmYWNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYWNybl9kZXZfaW9jdGxgLiBUaGF0IGZ1bmN0aW9uIGNhbGwgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGhvbGRpbmcgdXAgdGhlIHdvcmtzLCBlc3BlY2lhbGx5IGlmIHRoZXJlIGlzIGFuIGlzc3VlIHdpdGggdGhlIHVuZGVybHlpbmcgZGV2aWNlIG9yIGFueSByZWxhdGVkIGxvY2tpbmcuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZW50cnkgcG9pbnQsIGFuZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWNybl9kZXZfaW9jdGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L2Fjcm4vaHNtLmM9NDM9c3RhdGljIGludCBwbWNtZF9pb2N0bCh1NjQgY21kLCB2b2lkIF9fdXNlciAqdXB0cilcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0xMDctICovXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYzoxMDg6c3RhdGljIGxvbmcgYWNybl9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0xMDktXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBpb2N0bF9wYXJhbSlcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYz00OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNybl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTQ5My1cdC5yZWxlYXNlXHQ9IGFjcm5fZGV2X3JlbGVhc2UsXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYzo0OTQ6XHQudW5sb2NrZWRfaW9jdGwgPSBhY3JuX2Rldl9pb2N0bCxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTQ5NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcyMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgZm9yIFNlbGVjdGluZyBLZXJuZWwgQVBJIEVudHJ5IFBvaW50cyoqCgpPa2F5LCB0aGlzIHNpdHVhdGlvbiBmZWVscyBhIGJpdCBzdGF0aWMsIGJ1dCBsZXQmIzM5O3MgYnJlYWsgaXQgZG93biBtZXRob2RpY2FsbHkuIE15IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBBUEkgZW50cnkgcG9pbnRzIHRoYXQgbWVldCB0aGUgY3JpdGVyaWE6IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkLiBDb25zaWRlcmluZyB0aGF0LCBJIHNlZSB0aGF0IHRoZSBwb3RlbnRpYWwgZnVuY3Rpb25zIGFyZToKKiAgIGBmb2xsb3dfcGZubWFwX3N0YXJ0YAoqICAgYGdlbmVyaWNfYWNjZXNzX3BoeXNgCiogICBgX19rdm1fZmF1bHRpbl9wZm5gCgpJJiMzOTtsbCByZXZpc2l0IGBfX2t2bV9mYXVsdGluX3BmbmAuIEl0JiMzOTtzIGV4cG9ydGVkLCBidXQgZm9yIEtWTSYjMzk7cyBpbnRlcm5hbCB1c2UuIE9rYXkuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgZml0IHRoZSBiaWxsPyBZZXMsIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFyZSBib3RoIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLgoKV2hhdCBhYm91dCBgczM5MF9wY2lfbW1pb193cml0ZWA/IFNpbmNlIHRoaXMgaXMgYSBzeXNjYWxsLCBpdCB3b3VsZCBiZSBhIHZlcnkgZ29vZCBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgcHJvbWlzaW5nLCBidXQgSSBzZWUgdGhhdCBpdCBpcyBzcGVjaWZpYyB0byBzMzkwLiBTeXprYWxsZXIgY2FuIGZ1enogaXQgaWYgaXQgaXMgcnVubmluZyBvbiBzMzkwLgoKQW5kIHRoZSBwcm9tcHQgc2F5czogJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gVGhpcyBtZWFucyBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAgYXJlIHByb21pc2luZy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIEkgaGF2ZSB0byB3b3JrIHdpdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOgoqICAgYENPTkZJR19LVk1gCiogICBgQ09ORklHX1ZGSU9gCiogICBgQ09ORklHX1ZGSU9fR1JPVVBgCiogICBgQ09ORklHX1ZGSU9fQ09OVEFJTkVSYAoqICAgYENPTkZJR19WRklPX0lPTU1VX1RZUEUxYAoqICAgYENPTkZJR19BQ1JOX0dVRVNUYAoKV2FpdCwgYEFDUk5fR1VFU1RgIGlzIHNwZWNpZmljIHRvIHg4Ni4gYFZGSU9fSU9NTVVfVFlQRTFgIGlzIHNlbGVjdGVkIGJ5IGBWRklPX0NPTlRBSU5FUmAgaWYgYE1NVSAmYW1wOyZhbXA7IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpYC4gU28gdGhpcyBtZWFucyBJIGNhbiBzaW1wbGlmeSB0aGUgY29uZmlndXJhdGlvbi4gQWxsIEkgbmVlZCB0byBlbmFibGUgYXJlOiBgVkZJT2AsIGBWRklPX0dST1VQYCwgYFZGSU9fQ09OVEFJTkVSYCwgYFZGSU9fSU9NTVVfVFlQRTFgLiBBbmQgb2YgY291cnNlLCBgS1ZNYC4KCkkmIzM5O2xsIGNoZWNrIHRoZSBLVk0gZGVwZW5kZW5jaWVzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWc9MTY9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xNy1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzoxODpjb25maWcgS1ZNXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzAtXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MzE6Y29uZmlnIEtWTV9NSVBTX0RFQlVHX0NPUDBfQ09VTlRFUlNcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7TWFpbnRhaW4gY291bnRlcnMgZm9yIENPUDAgYWNjZXNzZXNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI2OmNvbmZpZyBLVk1fQk9PSzNTX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNy1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyOTpjb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzAtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00NC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0NTpjb25maWcgS1ZNX0JPT0szU18zMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzMyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTI2OmNvbmZpZyBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjk6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIHRoZSBQOSBlbnRyeSBwb2ludFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0My1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgdGltaW5nIGZvciBoeXBlcnZpc29yIHJlYWwtbW9kZSBjb2RlIChmb3IgUE9XRVI4KVwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTYtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTU3OmNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7TmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTcxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QTVVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtIeXBlcnZpc29yIFBlcmYgZXZlbnRzIGZvciBLVk0gQm9vazNzLUhWXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4My1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9CT09LRV9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4NS1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODYtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg3OmNvbmZpZyBLVk1fRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O0RldGFpbGVkIGV4aXQgdGltaW5nXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5Ny1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTg6Y29uZmlnIEtWTV9FNTAwVjJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTktXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMi1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTM6Y29uZmlnIEtWTV9FNTAwTUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTQtXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9NUElDXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjMwLVx0Ym9vbCBcJiMzNDtLVk0gaW4ta2VybmVsIE1QSUMgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0MC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNDE6Y29uZmlnIEtWTV9YSUNTXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQyLVx0Ym9vbCBcJiMzNDtLVk0gaW4ta2VybmVsIFhJQ1MgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1MC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTE6Y29uZmlnIEtWTV9YSVZFXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUyLVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZz0yMj1zb3VyY2UgXCYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1wmIzM0O1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTIzLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTgyNj1zb3VyY2UgXCYjMzQ7YXJjaC94ODYveGVuL0tjb25maWdcJiMzNDtcbmFyY2gveDg2L0tjb25maWctODI3LVxuYXJjaC94ODYvS2NvbmZpZzo4Mjg6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy04MjktXHRib29sIFwmIzM0O0tWTSBHdWVzdCBzdXBwb3J0IChpbmNsdWRpbmcga3ZtY2xvY2spXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4tLVxudmlydC9rdm0vS2NvbmZpZy0zLVxudmlydC9rdm0vS2NvbmZpZzo0OmNvbmZpZyBLVk1fQ09NTU9OXG52aXJ0L2t2bS9LY29uZmlnLTUtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTM5PWNvbmZpZyBORUVEX0tWTV9ESVJUWV9SSU5HX1dJVEhfQklUTUFQXG4tLVxudmlydC9rdm0vS2NvbmZpZy00Mi1cbnZpcnQva3ZtL0tjb25maWc6NDM6Y29uZmlnIEtWTV9NTUlPXG52aXJ0L2t2bS9LY29uZmlnLTQ0LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTQ1LVxudmlydC9rdm0vS2NvbmZpZzo0Njpjb25maWcgS1ZNX0FTWU5DX1BGXG52aXJ0L2t2bS9LY29uZmlnLTQ3LSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZy00OS0jIFRvZ2dsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaXJlY3Qgbm90aWZpY2F0aW9uIGFuZCBiYXRjaCBqb2JcbnZpcnQva3ZtL0tjb25maWc6NTA6Y29uZmlnIEtWTV9BU1lOQ19QRl9TWU5DXG52aXJ0L2t2bS9LY29uZmlnLTUxLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz01OT1jb25maWcgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuLS1cbnZpcnQva3ZtL0tjb25maWctNjEtXG52aXJ0L2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fVkZJT1xudmlydC9rdm0vS2NvbmZpZy02My0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9NjU9Y29uZmlnIEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xuLS1cbnZpcnQva3ZtL0tjb25maWctNjctXG52aXJ0L2t2bS9LY29uZmlnOjY4OmNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbnZpcnQva3ZtL0tjb25maWctNjktICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzAtXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9LY29uZmlnLTcyLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTczLVxudmlydC9rdm0vS2NvbmZpZzo3NDpjb25maWcgS1ZNX0NPTVBBVFxudmlydC9rdm0vS2NvbmZpZy03NS0gICAgICAgZGVmX2Jvb2wgeVxuLS1cbnZpcnQva3ZtL0tjb25maWc9OTE9Y29uZmlnIEhBVkVfS1ZNX1BNX05PVElGSUVSXG4tLVxudmlydC9rdm0vS2NvbmZpZy05My1cbnZpcnQva3ZtL0tjb25maWc6OTQ6Y29uZmlnIEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG52aXJ0L2t2bS9LY29uZmlnLTk1LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk2LVxudmlydC9rdm0vS2NvbmZpZzo5Nzpjb25maWcgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xudmlydC9rdm0vS2NvbmZpZy05OC0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy05OS1cbnZpcnQva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG52aXJ0L2t2bS9LY29uZmlnLTEwMS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy0xMDItXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTU1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWxpemF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyBgS1ZNYC4uLiB5ZWFoLCB0aGF0IGZhbGxzIHNxdWFyZWx5IHVuZGVyIHRoZSBgVklSVFVBTElaQVRJT05gIHVtYnJlbGxhLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHJlbGF0aW9uc2hpcC4gVGhlcmVmb3JlLCBhbnkgYW5hbHlzaXMgb3IgY29uZmlndXJhdGlvbiBJJiMzOTttIGRvaW5nIHJlbGF0ZWQgdG8gYEtWTWAgaW5oZXJlbnRseSByZXF1aXJlcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgYW5kIGV4YW1pbmF0aW9uIG9mIHRoZSBicm9hZGVyIGBWSVJUVUFMSVpBVElPTmAgcHJpbmNpcGxlcyBhbmQgdGVjaG5vbG9naWVzLiBUaGUgZGVwZW5kZW5jeSBpcyBjbGVhci4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIGBLVk1gIHBhdGgsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIGBWSVJUVUFMSVpBVElPTmAgaXMgY3VycmVudCBhbmQgdGhhdCBJIGhhdmUgaWRlbnRpZmllZCB0aGUgcmVsZXZhbnQgY29tcG9uZW50cyB0aGF0IHVuZGVycGluIGFueSB3b3JrIEkmIzM5O20gdW5kZXJ0YWtpbmcuIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIGNoZWNrIG15IGV4aXN0aW5nIGtub3dsZWRnZSBiYXNlIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGF0IHRoZSBgVklSVFVBTElaQVRJT05gIGxheWVyIHRoYXQgd2lsbCBpbXBhY3QgYEtWTWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSVJUVUFMSVpBVElPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNy1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctNy1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWc9NT1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTYtXG5hcmNoL21pcHMva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL21pcHMva3ZtL0tjb25maWctOC1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctNy1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWctNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3OTYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogVmlydHVhbGl6YXRpb24gYW5kIFZGSU8qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgdmlydHVhbGl6YXRpb24gc29sdXRpb24uIFRoZSBwcm9ibGVtIGRpY3RhdGVzIGl0IOKAkyB3ZSAqbmVlZCogdmlydHVhbGl6YXRpb24uIE5vdywgZ2l2ZW4gdGhlIGltcGxpZWQgcmVxdWlyZW1lbnRzLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcGFydGljdWxhcmx5IHBvdGVudCBjb250ZW5kZXI6IGBWRklPYC4gTGV0JiMzOTtzIGV4cGxvcmUgaXRzIGNhcGFiaWxpdGllcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgaXNzdWUgYXQgaGFuZC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgVkZJT2AgYW5kIHNlZSBpZiBpdCYjMzk7cyB0aGUgcmlnaHQgZml0IGZvciB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MDk9Y29uZmlnIEFQX0RFQlVHXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODIyLVxuYXJjaC9zMzkwL0tjb25maWc6ODIzOmNvbmZpZyBWRklPX0NDV1xuYXJjaC9zMzkwL0tjb25maWctODI0LVx0ZGVmX3RyaXN0YXRlIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cdGRlZl90cmlzdGF0ZSBuXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvdmZpby9LY29uZmlnOjI6bWVudWNvbmZpZyBWRklPXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnPTE2PWlmIFZGSU9cbmRyaXZlcnMvdmZpby9LY29uZmlnOjE3OmNvbmZpZyBWRklPX0RFVklDRV9DREVWXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY2RldiAvZGV2L3ZmaW8vZGV2aWNlcy92ZmlvWFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTI5LVxuZHJpdmVycy92ZmlvL0tjb25maWc6MzA6Y29uZmlnIFZGSU9fR1JPVVBcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo0MDpjb25maWcgVkZJT19DT05UQUlORVJcbmRyaXZlcnMvdmZpby9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjb250YWluZXIgL2Rldi92ZmlvL3ZmaW9cJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz01Mj1pZiBWRklPX0NPTlRBSU5FUlxuZHJpdmVycy92ZmlvL0tjb25maWc6NTM6Y29uZmlnIFZGSU9fSU9NTVVfVFlQRTFcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU0LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ni1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjU3OmNvbmZpZyBWRklPX0lPTU1VX1NQQVBSX1RDRVxuZHJpdmVycy92ZmlvL0tjb25maWctNTgtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnPTYxPWVuZGlmXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02Mi1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjYzOmNvbmZpZyBWRklPX05PSU9NTVVcbmRyaXZlcnMvdmZpby9LY29uZmlnLTY0LVx0Ym9vbCBcJiMzNDtWRklPIE5vLUlPTU1VIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy03Ny1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjc4OmNvbmZpZyBWRklPX1ZJUlFGRFxuZHJpdmVycy92ZmlvL0tjb25maWctNzktXHRib29sXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctODItXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo4Mzpjb25maWcgVkZJT19ERUJVR0ZTXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RXhwb3J0IFZGSU8gaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctNy1cbmRyaXZlcnMvdmZpby9jZHgvS2NvbmZpZzo4OmNvbmZpZyBWRklPX0NEWFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTktXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIENEWCBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZz0xPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctMy1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo0OmNvbmZpZyBWRklPX0ZTTF9NQ1xuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctMi1cbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWc6Mzpjb25maWcgVkZJT19NREVWXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTQtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIHBsYXRmb3JtIGRldmljZXNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6NTpjb25maWcgVkZJT19QTEFURk9STV9CQVNFXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy04LVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6OTpjb25maWcgVkZJT19QTEFURk9STVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IHBsYXRmb3JtIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTE4LVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6MTk6Y29uZmlnIFZGSU9fQU1CQVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEFNQkEgZGV2aWNlcyAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZz0yPWlmIFZGSU9fUExBVEZPUk1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjM6Y29uZmlnIFZGSU9fUExBVEZPUk1fQ0FMWEVEQVhHTUFDX1JFU0VUXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBjYWx4ZWRhIHhnbWFjIHJlc2V0IChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTktXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QTEFURk9STV9BTURYR0JFX1JFU0VUXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQU1EIFhHQkUgcmVzZXQgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctMTYtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzoxNzpjb25maWcgVkZJT19QTEFURk9STV9CQ01GTEVYUk1fUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBCcm9hZGNvbSBGbGV4Uk0gcmVzZXQgKERFUFJFQ0FURUQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODYxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIFZpcnR1YWxpemF0aW9uIEZ1bmRhbWVudGFscyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgKlZGSU8qLCBzcGVjaWZpY2FsbHkgdGhlIGNvcmUgY29tcG9uZW50czogYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAsIGFuZCB0aGUgSU9NTVUgYXNwZWN0LCBgVkZJT19JT01NVV9UWVBFMWAuIFRoYXQmIzM5O3MgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciBQQ0kgcGFzc3Rocm91Z2gsIHdoaWNoIGlzIGNydWNpYWwuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoYXQsIGl0IG5hdHVyYWxseSBtZWFucyB3ZSYjMzk7cmUgYWxzbyB0b3VjaGluZyBvbiAqS1ZNKiwgdGhlIGtlcm5lbC1iYXNlZCB2aXJ0dWFsIG1hY2hpbmUgaXRzZWxmLiBDbGVhcmx5LCB0aGUgb3ZlcmFyY2hpbmcgY29uY2VwdCBoZXJlIGlzICpWSVJUVUFMSVpBVElPTiouIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kLgoKR2l2ZW4gdGhpcyBjb250ZXh0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uc2lkZXIgKkFDUk5fR1VFU1QqLiBXZSBuZWVkIHRvIHNlZSBob3cgQUNSTiBpbnRlcmFjdHMgd2l0aCB0aGVzZSBjb25jZXB0cy4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFDUk5fR1VFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz04Njg9Y29uZmlnIEpBSUxIT1VTRV9HVUVTVFxuLS1cbmFyY2gveDg2L0tjb25maWctODc2LVxuYXJjaC94ODYvS2NvbmZpZzo4Nzc6Y29uZmlnIEFDUk5fR1VFU1RcbmFyY2gveDg2L0tjb25maWctODc4LVx0Ym9vbCBcJiMzNDtBQ1JOIEd1ZXN0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBhbmQgS1ZNIEZvY3VzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBmb2N1c2luZyBvbiBmdXp6aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBLVk0sIGFuZCBWRklPIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUuLi4gdGhpcyBzcGVjaWZpYyB4ODYgc3R1ZmYsIHdlIGNhbiBza2lwIGl0IGZvciBub3c7IG5vdCByZWxldmFudCB0byB0aGUgY29yZSBjb21wb25lbnRzIHdlJiMzOTtyZSB0YXJnZXRpbmcuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgaXMgbGlrZWx5IGluIGBtbS9tZW1vcnkuY2AuIFNvIHdlIHNob3VsZCBiZSBmb2N1c2luZyBvbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGBfX2t2bV9mYXVsdGluX3BmbmAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBZZXAsIGBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUxgIHRlbGxzIHVzIGl0JiMzOTtzIGF2YWlsYWJsZSwgaXQmIzM5O3MgYSBjb3JlIEtWTSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggcGFnZSBmYXVsdHMuIEdvb2QgY2FuZGlkYXRlIGZvciBhIGZ1enogdGFyZ2V0LgoKTm93LCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuIFRoYXQmIzM5O3MgZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MX0dQTGAsIHNvIGl04oCZcyB1c2VkIGJ5IHRoaW5ncyBsaWtlIGAvZGV2L21lbWAgYW5kIFBDSSBtbWFwLiBJbXBvcnRhbnQuCgpBbmQgZmluYWxseSwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbHNvIGBFWFBPUlRfU1lNQk9MX0dQTGAuCgpTbyBvdXIgdGFyZ2V0IHN5bWJvbHMgYXJlIHNldDogYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBgX19rdm1fZmF1bHRpbl9wZm5gLgoKQWxyaWdodCwgY29uZmlnLXdpc2UsIHdlIG5lZWQgYFZJUlRVQUxJWkFUSU9OYCwgYEtWTWAsIGBWRklPYCwgYFZGSU9fR1JPVVBgLCBgVkZJT19DT05UQUlORVJgLCBhbmQgYFZGSU9fSU9NTVVfVFlQRTFgLiBCdXQgd2FpdCwgYFZGSU9fSU9NTVVfVFlQRTFgIGlzIHNlbGVjdGVkIGJ5IGBWRklPX0NPTlRBSU5FUmAgaWYgTU1VIGFuZCBYODYvUzM5MC9BUk0vQVJNNjQuIFdlIHNob3VsZCBiZSBnb29kIHdpdGgganVzdCBlbmFibGluZyBgVkZJT19DT05UQUlORVJgLiBMZXQmIzM5O3MgY29uZmlybSBpbiBgZHJpdmVycy92ZmlvL0tjb25maWdgLiBZdXAsIGBWRklPX0NPTlRBSU5FUmAgZGVwZW5kcyBvbiBgVkZJT19HUk9VUGAgYW5kIGlzIGRlZmF1bHQgeSBpZiBWRklPIGFuZCBNTVUuIE1pZ2h0IGFzIHdlbGwgYmUgZXhwbGljaXQgYW5kIGVuYWJsZSB0aG9zZS4KCkFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlcj8gV2UgbmVlZCBgQ09ORklHX1BDSWAgZm9yIGBwY2lfcGh5c192bV9vcHNgIHdoaWNoIHVzZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBgQ09ORklHX0RFVk1FTWAgZm9yIGAvZGV2L21lbWAgd2hpY2ggYWxzbyB1c2VzIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gQnV0Li4uIGRvZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGdldCBjb21waWxlZCBpZiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZD8gVGltZSB0byBjaGVjayBgbW0vbWVtb3J5LmNgIGFnYWluIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvY2R4L2NkeC5jLTY2My0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NkeC9jZHguYzo2NjQ6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvY2R4L2NkeC5jLTY2NS0jZW5kaWZcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xuZHJpdmVycy9jaGFyL21lbS5jLTMyMC0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzIxOlx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjItI2VuZGlmXG4tLVxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwNi0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA3Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA4LSNlbmRpZlxuLS1cbmRyaXZlcnMvcGNpL21tYXAuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9waHlzX3ZtX29wcyA9IHtcbmRyaXZlcnMvcGNpL21tYXAuYy0xOS0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3BjaS9tbWFwLmM6MjA6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvcGNpL21tYXAuYy0yMS0jZW5kaWZcbi0tXG5kcml2ZXJzL3Vpby91aW8uYz03MzY9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fcGh5c2ljYWxfdm1fb3BzID0ge1xuZHJpdmVycy91aW8vdWlvLmMtNzM3LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvdWlvL3Vpby5jOjczODpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy91aW8vdWlvLmMtNzM5LSNlbmRpZlxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD03ODM9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtODM1LVx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XG5pbmNsdWRlL2xpbnV4L21tLmg6ODM2Olx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXG5pbmNsdWRlL2xpbnV4L21tLmgtODM3LVx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzEzMD1jb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMxMzE6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvbW0uaC0zMTMyLVx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTtcbi0tXG5tbS9tZW1vcnkuYz02OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbi0tXG5tbS9tZW1vcnkuYy02OTY3LS8qKlxubW0vbWVtb3J5LmM6Njk2ODogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3Ncbm1tL21lbW9yeS5jLTY5NjktICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3Ncbi0tXG5tbS9tZW1vcnkuYy02OTc4LSAqL1xubW0vbWVtb3J5LmM6Njk3OTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtNjk4MC1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbi0tXG5tbS9tZW1vcnkuYy03MDI3LX1cbm1tL21lbW9yeS5jOjcwMjg6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG5tbS9tZW1vcnkuYy03MDI5LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9NjMyPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODQtXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6Njg1Olx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY4Ni1cdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDkxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgQ29udGV4dCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgc2VlbXMgdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIHdlIGhhdmUgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgZGVmaW5lZC4gVGhhdCBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSB1c2luZyBwcm90ZWN0ZWQgbWVtb3J5IHJlZ2lvbnMgaW4gc29tZSB3YXkuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgc3RhdGUgb2YgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgZmlyc3QsIGFuZCBleGFjdGx5IHdoeSB0aGF0JiMzOTtzIGEgZmFjdG9yIGhlcmUuIE5lZWQgdG8gZ28gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgd2hlcmUgdGhhdCYjMzk7cyBzZXQgd2l0aGluIG91ciBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzICphY3R1YWxseSogZ29pbmcgb24gaW4gdGhlIGNvZGUgYW5kIGhvdyB0aGUgZnVuY3Rpb25hbGl0eSBpbiBxdWVzdGlvbiBjaGFuZ2VzIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0mIzM5O3MgY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFWRV9JT1JFTUFQX1BST1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTI1OD1jb25maWcgVVNFUl9SRVRVUk5fTk9USUZJRVJcbi0tXG5hcmNoL0tjb25maWctMjY0LVxuYXJjaC9LY29uZmlnOjI2NTpjb25maWcgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvS2NvbmZpZy0yNjYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODAxCgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEFyY2hpdGVjdHVyZXMgc2VsZWN0IHRoZSByZWxldmFudCBjb2RlLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cGxpY2l0bHkgZW5hYmxpbmcgaXQuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoZSBuZXcgd3JpdGUgZmF1bHQgaGFuZGxpbmcgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgIGlzIHJvYnVzdC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0cyB3aXRoIEtWTSwgVkZJTywgQUNSTiwgYW5kIGdlbmVyaWMgcGh5c2ljYWwgbWVtb3J5IGFjY2VzcywgYWxsIG9mIHdoaWNoIGFyZSBjcml0aWNhbCBrZXJuZWwgcGF0aHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBicmVhayBhbnl0aGluZy4KCkZpcnN0LCBJIGNoZWNrZWQgaWYgYGZvbGxvd19wZm5tYXBfc3RhcnRgIG5lZWRlZCBhIHNwZWNpZmljIGNvbmZpZywgYW5kIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlncy4gQmFzZWQgb24gd2hlcmUgdGhlIGNvZGUgbGl2ZXMgKGBtbS9tZW1vcnkuY2ApLCBJJiMzOTttIHRoaW5raW5nOiBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgdGhhbiB0aGF0LCBzbyBgVkZJT19JT01NVV9UWVBFMWAsIHNpbmNlIGl0JiMzOTtzIHRyaXN0YXRlLgoKVGhlbiB0aGVyZSYjMzk7cyBgQUNSTl9HVUVTVGAsIHdoaWNoIGlzIHg4Ni1zcGVjaWZpYywgYnV0IEkgY2FuIGFkZCBpdCB0b28sIG5vIGhhcm0gZG9uZS4KCkkgbmVlZCB0byBjb25maXJtIGlmIGp1c3QgYEtWTWAgaXMgZW5vdWdoIG9yIGlmIEkgbmVlZCBgS1ZNX1g4NmAsIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYC4gYEtWTWAgaXMgYSB0cmlzdGF0ZSwgYW5kIGBLVk1fWDg2YCBkZXBlbmRzIG9uIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAuIFNpbmNlIFN5emthbGxlciB1c3VhbGx5IHRlc3RzIG9uIHg4NiB3aXRoIEtWTSBlbmFibGVkLCBJJiMzOTttIGp1c3QgbGlzdGluZyBgS1ZNYCBmb3Igbm93LgoKU28sIGhlcmUmIzM5O3MgbXkgcGxhbjoKCiogICAqKldvcnRoRnV6emluZzoqKiBZZXMKKiAgICoqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggYWx0ZXJzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGhhbmRsaW5nIHdyaXRlIGZhdWx0cyBpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgYW5kIGBwZm5tYXBfYXJnc19zZXR1cGAuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBLVk0sIFZGSU8sIEFDUk4sIGFuZCBnZW5lcmljIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHdyaXRlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuCiogICAqKkZvY3VzU3ltYm9sczoqKgogICAgKiAgIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCAoVGhpcyBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCkKICAgICogICBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgKEl0JiMzOTtzIGEgZ29vZCBmb2N1cyBzeW1ib2wpCiAgICAqICAgYF9fa3ZtX2ZhdWx0aW5fcGZuYCAoRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLikKKiAgICoqRW5hYmxlQ29uZmlnczoqKgogICAgKiAgIGBWSVJUVUFMSVpBVElPTmAKICAgICogICBgS1ZNYAogICAgKiAgIGBWRklPYAogICAgKiAgIGBWRklPX0dST1VQYAogICAgKiAgIGBWRklPX0NPTlRBSU5FUmAKICAgICogICBgVkZJT19JT01NVV9UWVBFMWAKICAgICogICBgQUNSTl9HVUVTVGAKCkkgd2lsbCBkb3VibGUtY2hlY2sgYF9fa3ZtX2ZhdWx0aW5fcGZuYCwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbmQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBUaGV5IGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBJIGxvb2tlZCBhdCBzb21lIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAsIGJ1dCB0aG9zZSBhcmUgczM5MCBzcGVjaWZpYyBzeXNjYWxscywgc28gSSBhbSBnb2luZyB0byBzdGljayB3aXRoIHRoZSBpbml0aWFsIHRocmVlIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhhdCYjMzk7cyB0aGUgY29yZS4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fSU9NTVVfVFlQRTEmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGxvd19wZm5tYXBfc3RhcnQmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICAgJiMzNDtfX2t2bV9mYXVsdGluX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fSU9NTVVfVFlQRTEmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGxvd19wZm5tYXBfc3RhcnQmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7LAogICAgJiMzNDtfX2t2bV9mYXVsdGluX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDM6MzkuNDI0NjIyMTA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0OTc0ODMxMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0lPTU1VX1RZUEUxXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9sbG93X3Bmbm1hcF9zdGFydFwiLFxuICAgIFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiLFxuICAgIFwiX19rdm1fZmF1bHRpbl9wZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0MzozOS40MjQ2Mzk3MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDg0NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU1ZmMxNDY3NzE1NWIwYWRiMzhhZTM0OTM0Zjc0NGI2NTk3YjNlMmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAwMDo0MzozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMgYi9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNcXG5pbmRleCA1MWU3YTI4YWY4OTk0Li41MjZmODBiOGZiM2IxIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9wY2kvcGNpX21taW8uY1xcbisrKyBiL2FyY2gvczM5MC9wY2kvcGNpX21taW8uY1xcbkBAIC0xODAsNiArMTgwLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fd3JpdGUsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcXG4gXFxuIFxcdGFyZ3MuYWRkcmVzcyA9IG1taW9fYWRkcjtcXG4gXFx0YXJncy52bWEgPSB2bWE7XFxuK1xcdGFyZ3Mud3JpdGVfZmF1bHQgPSB0cnVlO1xcbiBcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXFx1MDAzZW1tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xcbkBAIC0zMzIsNiArMzMzLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fcmVhZCwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxcbiBcXG4gXFx0YXJncy52bWEgPSB2bWE7XFxuIFxcdGFyZ3MuYWRkcmVzcyA9IG1taW9fYWRkcjtcXG4rXFx0YXJncy53cml0ZV9mYXVsdCA9IGZhbHNlO1xcbiBcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXFx1MDAzZW1tLCBtbWlvX2FkZHIsIDAsIE5VTEwpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xcbmluZGV4IGM4MTUxYmE1NGRlMzMuLjllZTkyODIwYjRkZTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmNcXG5AQCAtNTQxLDcgKzU0MSwxMSBAQCBzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyAqcGZuLFxcbiBcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqYWRkcl9tYXNrLCBib29sIHdyaXRlX2ZhdWx0KVxcbiB7XFxuLVxcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSB2YWRkciB9O1xcbitcXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC52bWEgPSB2bWEsXFxuK1xcdFxcdC5hZGRyZXNzID0gdmFkZHIsXFxuK1xcdFxcdC53cml0ZV9mYXVsdCA9IHdyaXRlX2ZhdWx0XFxuK1xcdH07XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG5AQCAtNTYzLDE1ICs1NjcsMTAgQEAgc3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHdyaXRlX2ZhdWx0IFxcdTAwMjZcXHUwMDI2ICFhcmdzLndyaXRhYmxlKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdCpwZm4gPSBhcmdzLnBmbjtcXG4tXFx0XFx0KmFkZHJfbWFzayA9IGFyZ3MuYWRkcl9tYXNrO1xcbi1cXHR9XFxuLVxcbitcXHQqcGZuID0gYXJncy5wZm47XFxuK1xcdCphZGRyX21hc2sgPSBhcmdzLmFkZHJfbWFzaztcXG4gXFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0L2Fjcm4vbW0uYyBiL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcXG5pbmRleCA1YmNhNTAwYTgzZTA1Li5iMDU3ZTc4ZWYzZjQ4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcXG4rKysgYi9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jXFxuQEAgLTE3Nyw3ICsxNzcsNiBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXFxuIFxcdHZtYSA9IHZtYV9sb29rdXAoY3VycmVudC1cXHUwMDNlbW0sIG1lbW1hcC1cXHUwMDNldm1hX2Jhc2UpO1xcbiBcXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2ICgodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUCkgIT0gMCkpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGN1cl9wZm47XFxuLVxcdFxcdGJvb2wgd3JpdGFibGU7XFxuIFxcbiBcXHRcXHRpZiAoKG1lbW1hcC1cXHUwMDNldm1hX2Jhc2UgKyBtZW1tYXAtXFx1MDAzZWxlbikgXFx1MDAzZSB2bWEtXFx1MDAzZXZtX2VuZCkge1xcbiBcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5AQCAtMTg4LDYgKzE4Nyw3IEBAIGludCBhY3JuX3ZtX3JhbV9tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcXG4gXFx0XFx0XFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0ge1xcbiBcXHRcXHRcXHRcXHQudm1hID0gdm1hLFxcbiBcXHRcXHRcXHRcXHQuYWRkcmVzcyA9IG1lbW1hcC1cXHUwMDNldm1hX2Jhc2UgKyBpICogUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHQud3JpdGVfZmF1bHQgPSAhIShtZW1tYXAtXFx1MDAzZWF0dHIgXFx1MDAyNiBBQ1JOX01FTV9BQ0NFU1NfV1JJVEUpLFxcbiBcXHRcXHRcXHR9O1xcbiBcXG4gXFx0XFx0XFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuQEAgLTE5NywxNiArMTk3LDggQEAgaW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxcbiBcXHRcXHRcXHRjdXJfcGZuID0gYXJncy5wZm47XFxuIFxcdFxcdFxcdGlmIChpID09IDApXFxuIFxcdFxcdFxcdFxcdHN0YXJ0X3BmbiA9IGN1cl9wZm47XFxuLVxcdFxcdFxcdHdyaXRhYmxlID0gYXJncy53cml0YWJsZTtcXG4gXFx0XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbiBcXG4tXFx0XFx0XFx0LyogRGlzYWxsb3cgd3JpdGUgYWNjZXNzIGlmIHRoZSBQVEUgaXMgbm90IHdyaXRhYmxlLiAqL1xcbi1cXHRcXHRcXHRpZiAoIXdyaXRhYmxlIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAobWVtbWFwLVxcdTAwM2VhdHRyIFxcdTAwMjYgQUNSTl9NRU1fQUNDRVNTX1dSSVRFKSkge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXG4gXFx0XFx0XFx0LyogRGlzYWxsb3cgcmVmY291bnRlZCBwYWdlcy4gKi9cXG4gXFx0XFx0XFx0aWYgKHBmbl92YWxpZChjdXJfcGZuKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgIVBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShjdXJfcGZuKSkpIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNDg1ZGY5YzJkYmRkYi4uMzRjNzliNWZjYjliMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMzEzNiw5ICszMTM2LDEyIEBAIHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3Mge1xcbiBcXHQgKiBJbnB1dHM6XFxuIFxcdCAqIEB2bWE6IFBvaW50ZXIgdG8gQHZtX2FyZWFfc3RydWN0IHN0cnVjdFxcbiBcXHQgKiBAYWRkcmVzczogdGhlIHZpcnR1YWwgYWRkcmVzcyB0byB3YWxrXFxuK1xcdCAqIEB3cml0ZV9mYXVsdDogaWYgdHJ1ZSwgZmFpbCB3aXRoIC1FRkFVTFQgdW5sZXNzIHRoZSBtYXBwaW5nIGlzXFxuK1xcdCAqIHdyaXRhYmxlXFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xcbitcXHRib29sIHdyaXRlX2ZhdWx0O1xcbiBcXHQvKipcXG4gXFx0ICogSW50ZXJuYWxzOlxcbiBcXHQgKlxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZmYzMzhjMmFiZTkyMy4uNDA5OTdhMjY4NDZmNSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTY3ODYsMTIgKzY3ODYsMTUgQEAgaW50IF9fcG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIH1cXG4gI2VuZGlmIC8qIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQgKi9cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxcbi1cXHRcXHRcXHRcXHQgICAgIHNwaW5sb2NrX3QgKmxvY2ssIHB0ZV90ICpwdGVwLFxcbi1cXHRcXHRcXHRcXHQgICAgIHBncHJvdF90IHBncHJvdCwgdW5zaWduZWQgbG9uZyBwZm5fYmFzZSxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJfbWFzaywgYm9vbCB3cml0YWJsZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBib29sIHNwZWNpYWwpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHBmbm1hcF9hcmdzX3NldHVwKHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICBzcGlubG9ja190ICpsb2NrLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0XFx0XFx0ICAgIHBncHJvdF90IHBncHJvdCwgdW5zaWduZWQgbG9uZyBwZm5fYmFzZSxcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcl9tYXNrLCBib29sIHdyaXRhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgYm9vbCBzcGVjaWFsKVxcbiB7XFxuK1xcdGlmICghd3JpdGFibGUgXFx1MDAyNlxcdTAwMjYgYXJncy1cXHUwMDNld3JpdGVfZmF1bHQpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0YXJncy1cXHUwMDNlbG9jayA9IGxvY2s7XFxuIFxcdGFyZ3MtXFx1MDAzZXB0ZXAgPSBwdGVwO1xcbiBcXHRhcmdzLVxcdTAwM2VwZm4gPSBwZm5fYmFzZSArICgoYXJncy1cXHUwMDNlYWRkcmVzcyBcXHUwMDI2IH5hZGRyX21hc2spIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbkBAIC02Nzk5LDYgKzY4MDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2FyZ3Nfc2V0dXAoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncyxcXG4gXFx0YXJncy1cXHUwMDNlcGdwcm90ID0gcGdwcm90O1xcbiBcXHRhcmdzLVxcdTAwM2V3cml0YWJsZSA9IHdyaXRhYmxlO1xcbiBcXHRhcmdzLVxcdTAwM2VzcGVjaWFsID0gc3BlY2lhbDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuQEAgLTY4MjAsOCArNjgyNCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuICAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzXFxuICAqXFxuICAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gc2V0dXAgYXJncy1cXHUwMDNldm1hIGFuZCBhcmdzLVxcdTAwM2VhZGRyZXNzIHRvIHBvaW50IHRvIHRoZVxcbi0gKiB2aXJ0dWFsIGFkZHJlc3MgYXMgdGhlIHRhcmdldCBvZiBzdWNoIGxvb2t1cC4gIE9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4sXFxuLSAqIHRoZSByZXN1bHRzIHdpbGwgYmUgcHV0IGludG8gb3RoZXIgb3V0cHV0IGZpZWxkcy5cXG4rICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAsIGFuZCBvcHRpb25hbGx5IHNldFxcbisgKiBhcmdzLVxcdTAwM2V3cml0ZV9mYXVsdCB0byByZXF1aXJlIGEgd3JpdGFibGUgbWFwcGluZy4gIE9uIGEgc3VjY2Vzc2Z1bFxcbisgKiByZXR1cm4sIHRoZSByZXN1bHRzIHdpbGwgYmUgcHV0IGludG8gb3RoZXIgb3V0cHV0IGZpZWxkcy5cXG4gICpcXG4gICogQWZ0ZXIgdGhlIGNhbGxlciBmaW5pc2hlZCB1c2luZyB0aGUgZmllbGRzLCB0aGUgY2FsbGVyIG11c3QgaW52b2tlXFxuICAqIGFub3RoZXIgZm9sbG93X3Bmbm1hcF9lbmQoKSB0byBwcm9wZXIgcmVsZWFzZXMgdGhlIGxvY2tzIGFuZCByZXNvdXJjZXNcXG5AQCAtNjg0NCw3ICs2ODQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSB1c2VkIHRvIG1vZGlmeSBQVEUgY29udGVudC5cXG4gICpcXG4tICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIC1FRkFVTFQgaWYgQGFyZ3MtXFx1MDAzZXdyaXRlX2ZhdWx0IHdhcyBzZXQgYnV0IHRoZVxcbisgKiBtYXBwaW5nIGlzIG5vdCB3cml0YWJsZSwgLUVJTlZBTCBpZiB0aGVyZSBpcyBubyBtYXBwaW5nIGF0IGFsbC5cXG4gICovXFxuIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpXFxuIHtcXG5AQCAtNjg1Nyw2ICs2ODYzLDcgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcXG4gXFx0cHVkX3QgKnB1ZHAsIHB1ZDtcXG4gXFx0cG1kX3QgKnBtZHAsIHBtZDtcXG4gXFx0cHRlX3QgKnB0ZXAsIHB0ZTtcXG4rXFx0aW50IHIgPSAtRUlOVkFMO1xcbiBcXG4gXFx0cGZubWFwX2xvY2tkZXBfYXNzZXJ0KHZtYSk7XFxuIFxcbkBAIC02ODkwLDEwICs2ODk3LDEyIEBAIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpXFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrKGxvY2spO1xcbiBcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHRcXHR9XFxuLVxcdFxcdHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHB1ZF9wZ3Byb3QocHVkKSxcXG4tXFx0XFx0XFx0XFx0ICBwdWRfcGZuKHB1ZCksIFBVRF9NQVNLLCBwdWRfd3JpdGUocHVkKSxcXG4tXFx0XFx0XFx0XFx0ICBwdWRfc3BlY2lhbChwdWQpKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHIgPSBwZm5tYXBfYXJnc19zZXR1cChhcmdzLCBsb2NrLCBOVUxMLCBwdWRfcGdwcm90KHB1ZCksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHB1ZF9wZm4ocHVkKSwgUFVEX01BU0ssIHB1ZF93cml0ZShwdWQpLFxcbitcXHRcXHRcXHRcXHQgICAgICBwdWRfc3BlY2lhbChwdWQpKTtcXG4rXFx0XFx0aWYgKHIpXFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKGxvY2spO1xcbitcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXG4gXFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XFxuQEAgLTY5MTEsMTAgKzY5MjAsMTIgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2sobG9jayk7XFxuIFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLFxcbi1cXHRcXHRcXHRcXHQgIHBtZF9wZm4ocG1kKSwgUE1EX01BU0ssIHBtZF93cml0ZShwbWQpLFxcbi1cXHRcXHRcXHRcXHQgIHBtZF9zcGVjaWFsKHBtZCkpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0ciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIE5VTEwsIHBtZF9wZ3Byb3QocG1kKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBtZF9zcGVjaWFsKHBtZCkpO1xcbitcXHRcXHRpZiAocilcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2sobG9jayk7XFxuK1xcdFxcdHJldHVybiByO1xcbiBcXHR9XFxuIFxcbiBcXHRwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgYWRkcmVzcywgXFx1MDAyNmxvY2spO1xcbkBAIC02OTIzLDE0ICs2OTM0LDE2IEBAIGludCBmb2xsb3dfcGZubWFwX3N0YXJ0KHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MpXFxuIFxcdHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbiBcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHRwZm5tYXBfYXJnc19zZXR1cChhcmdzLCBsb2NrLCBwdGVwLCBwdGVfcGdwcm90KHB0ZSksXFxuLVxcdFxcdFxcdCAgcHRlX3BmbihwdGUpLCBQQUdFX01BU0ssIHB0ZV93cml0ZShwdGUpLFxcbi1cXHRcXHRcXHQgIHB0ZV9zcGVjaWFsKHB0ZSkpO1xcbitcXHRyID0gcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgcHRlcCwgcHRlX3BncHJvdChwdGUpLFxcbitcXHRcXHRcXHQgICAgICBwdGVfcGZuKHB0ZSksIFBBR0VfTUFTSywgcHRlX3dyaXRlKHB0ZSksXFxuK1xcdFxcdFxcdCAgICAgIHB0ZV9zcGVjaWFsKHB0ZSkpO1xcbitcXHRpZiAocilcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdHJldHVybiAwO1xcbiB1bmxvY2s6XFxuIFxcdHB0ZV91bm1hcF91bmxvY2socHRlcCwgbG9jayk7XFxuIG91dDpcXG4tXFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiByO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfc3RhcnQpO1xcbiBcXG5AQCAtNjk3Miw3ICs2OTg1LDExIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcXG4gXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuIFxcdGJvb2wgd3JpdGFibGU7XFxuLVxcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07XFxuK1xcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcXG4rXFx0XFx0LnZtYSA9IHZtYSxcXG4rXFx0XFx0LmFkZHJlc3MgPSBhZGRyLFxcbitcXHRcXHQud3JpdGVfZmF1bHQgPSAhISh3cml0ZSBcXHUwMDI2IEZPTExfV1JJVEUpXFxuK1xcdH07XFxuIFxcbiByZXRyeTpcXG4gXFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbkBAIC02OTgyLDkgKzY5OTksNiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR3cml0YWJsZSA9IGFyZ3Mud3JpdGFibGU7XFxuIFxcdGZvbGxvd19wZm5tYXBfZW5kKFxcdTAwMjZhcmdzKTtcXG4gXFxuLVxcdGlmICgod3JpdGUgXFx1MDAyNiBGT0xMX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiAhd3JpdGFibGUpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX0FMSUdOKGxlbiArIG9mZnNldCksIHByb3QpO1xcbiBcXHRpZiAoIW1hZGRyKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi4wYzRmZjIyMzE2MmI5IDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTI5MzksOCArMjkzOSwxMSBAQCBzdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXFxuIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbiB7XFxuLVxcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBrZnAtXFx1MDAzZWh2YSB9O1xcbi1cXHRib29sIHdyaXRlX2ZhdWx0ID0ga2ZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZPTExfV1JJVEU7XFxuK1xcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcXG4rXFx0XFx0LnZtYSA9IHZtYSxcXG4rXFx0XFx0LmFkZHJlc3MgPSBrZnAtXFx1MDAzZWh2YSxcXG4rXFx0XFx0LndyaXRlX2ZhdWx0ID0gISEoa2ZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZPTExfV1JJVEUpLFxcbitcXHR9O1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5NTksNyArMjk2Miw3IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJvb2wgdW5sb2NrZWQgPSBmYWxzZTtcXG4gXFx0XFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cXHUwMDNlbW0sIGtmcC1cXHUwMDNlaHZhLFxcbi1cXHRcXHRcXHRcXHQgICAgICh3cml0ZV9mYXVsdCA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAoYXJncy53cml0ZV9mYXVsdCA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dW5sb2NrZWQpO1xcbiBcXHRcXHRpZiAodW5sb2NrZWQpXFxuIFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbkBAIC0yOTY3LDE3ICsyOTcwLDE2IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0cmV0dXJuIHI7XFxuIFxcbiBcXHRcXHRyID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuLVxcdFxcdGlmIChyKVxcbitcXHRcXHRpZiAocikge1xcbitcXHRcXHRcXHRpZiAociA9PSAtRUZBVUxUKSB7XFxuK1xcdFxcdFxcdFxcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRyZXR1cm4gcjtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHdyaXRlX2ZhdWx0IFxcdTAwMjZcXHUwMDI2ICFhcmdzLndyaXRhYmxlKSB7XFxuLVxcdFxcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHQqcF9wZm4gPSBrdm1fcmVzb2x2ZV9wZm4oa2ZwLCBOVUxMLCBcXHUwMDI2YXJncywgYXJncy53cml0YWJsZSk7XFxuLW91dDpcXG4gXFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbiBcXHRyZXR1cm4gcjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0MzozOS44NTA0MzMzNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDQ1NDkwMDc2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiLFxuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19HUk9VUFwiLFxuICAgIFwiVkZJT19DT05UQUlORVJcIixcbiAgICBcIlZGSU9fSU9NTVVfVFlQRTFcIixcbiAgICBcIkFDUk5fR1VFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xsb3dfcGZubWFwX3N0YXJ0XCIsXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCIsXG4gICAgXCJfX2t2bV9mYXVsdGluX3BmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIGhhbmRsaW5nIHdyaXRlIGZhdWx0cyBpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgYW5kIGBwZm5tYXBfYXJnc19zZXR1cGAuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBLVk0sIFZGSU8sIEFDUk4sIGFuZCBnZW5lcmljIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHdyaXRlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU1ZmMxNDY3NzE1NWIwYWRiMzhhZTM0OTM0Zjc0NGI2NTk3YjNlMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDAwOjQzOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jIGIvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jXG5pbmRleCA1MWU3YTI4YWY4OTk0Li41MjZmODBiOGZiM2IxIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jXG4rKysgYi9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNcbkBAIC0xODAsNiArMTgwLDcgQEAgU1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fd3JpdGUsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcbiBcbiBcdGFyZ3MuYWRkcmVzcyA9IG1taW9fYWRkcjtcbiBcdGFyZ3Mudm1hID0gdm1hO1xuK1x0YXJncy53cml0ZV9mYXVsdCA9IHRydWU7XG4gXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXHUwMDNlbW0sIG1taW9fYWRkciwgRkFVTFRfRkxBR19XUklURSwgTlVMTCk7XG5AQCAtMzMyLDYgKzMzMyw3IEBAIFNZU0NBTExfREVGSU5FMyhzMzkwX3BjaV9tbWlvX3JlYWQsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcbiBcbiBcdGFyZ3Mudm1hID0gdm1hO1xuIFx0YXJncy5hZGRyZXNzID0gbW1pb19hZGRyO1xuK1x0YXJncy53cml0ZV9mYXVsdCA9IGZhbHNlO1xuIFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBtbWlvX2FkZHIsIDAsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMgYi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jXG5pbmRleCBjODE1MWJhNTRkZTMzLi45ZWU5MjgyMGI0ZGUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xuKysrIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1xuQEAgLTU0MSw3ICs1NDEsMTEgQEAgc3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyAqcGZuLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICphZGRyX21hc2ssIGJvb2wgd3JpdGVfZmF1bHQpXG4ge1xuLVx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IHZhZGRyIH07XG4rXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7XG4rXHRcdC52bWEgPSB2bWEsXG4rXHRcdC5hZGRyZXNzID0gdmFkZHIsXG4rXHRcdC53cml0ZV9mYXVsdCA9IHdyaXRlX2ZhdWx0XG4rXHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG5AQCAtNTYzLDE1ICs1NjcsMTAgQEAgc3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0aWYgKHdyaXRlX2ZhdWx0IFx1MDAyNlx1MDAyNiAhYXJncy53cml0YWJsZSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0fSBlbHNlIHtcbi1cdFx0KnBmbiA9IGFyZ3MucGZuO1xuLVx0XHQqYWRkcl9tYXNrID0gYXJncy5hZGRyX21hc2s7XG4tXHR9XG4tXG4rXHQqcGZuID0gYXJncy5wZm47XG4rXHQqYWRkcl9tYXNrID0gYXJncy5hZGRyX21hc2s7XG4gXHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvYWNybi9tbS5jIGIvZHJpdmVycy92aXJ0L2Fjcm4vbW0uY1xuaW5kZXggNWJjYTUwMGE4M2UwNS4uYjA1N2U3OGVmM2Y0OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcbisrKyBiL2RyaXZlcnMvdmlydC9hY3JuL21tLmNcbkBAIC0xNzcsNyArMTc3LDYgQEAgaW50IGFjcm5fdm1fcmFtX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxuIFx0dm1hID0gdm1hX2xvb2t1cChjdXJyZW50LVx1MDAzZW1tLCBtZW1tYXAtXHUwMDNldm1hX2Jhc2UpO1xuIFx0aWYgKHZtYSBcdTAwMjZcdTAwMjYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkgIT0gMCkpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGN1cl9wZm47XG4tXHRcdGJvb2wgd3JpdGFibGU7XG4gXG4gXHRcdGlmICgobWVtbWFwLVx1MDAzZXZtYV9iYXNlICsgbWVtbWFwLVx1MDAzZWxlbikgXHUwMDNlIHZtYS1cdTAwM2V2bV9lbmQpIHtcbiBcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuQEAgLTE4OCw2ICsxODcsNyBAQCBpbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXG4gXHRcdFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0ge1xuIFx0XHRcdFx0LnZtYSA9IHZtYSxcbiBcdFx0XHRcdC5hZGRyZXNzID0gbWVtbWFwLVx1MDAzZXZtYV9iYXNlICsgaSAqIFBBR0VfU0laRSxcbitcdFx0XHRcdC53cml0ZV9mYXVsdCA9ICEhKG1lbW1hcC1cdTAwM2VhdHRyIFx1MDAyNiBBQ1JOX01FTV9BQ0NFU1NfV1JJVEUpLFxuIFx0XHRcdH07XG4gXG4gXHRcdFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbkBAIC0xOTcsMTYgKzE5Nyw4IEBAIGludCBhY3JuX3ZtX3JhbV9tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcbiBcdFx0XHRjdXJfcGZuID0gYXJncy5wZm47XG4gXHRcdFx0aWYgKGkgPT0gMClcbiBcdFx0XHRcdHN0YXJ0X3BmbiA9IGN1cl9wZm47XG4tXHRcdFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuIFx0XHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuIFxuLVx0XHRcdC8qIERpc2FsbG93IHdyaXRlIGFjY2VzcyBpZiB0aGUgUFRFIGlzIG5vdCB3cml0YWJsZS4gKi9cbi1cdFx0XHRpZiAoIXdyaXRhYmxlIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAobWVtbWFwLVx1MDAzZWF0dHIgXHUwMDI2IEFDUk5fTUVNX0FDQ0VTU19XUklURSkpIHtcbi1cdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXG4gXHRcdFx0LyogRGlzYWxsb3cgcmVmY291bnRlZCBwYWdlcy4gKi9cbiBcdFx0XHRpZiAocGZuX3ZhbGlkKGN1cl9wZm4pIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAhUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKGN1cl9wZm4pKSkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYi4uMzRjNzliNWZjYjliMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzEzNiw5ICszMTM2LDEyIEBAIHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3Mge1xuIFx0ICogSW5wdXRzOlxuIFx0ICogQHZtYTogUG9pbnRlciB0byBAdm1fYXJlYV9zdHJ1Y3Qgc3RydWN0XG4gXHQgKiBAYWRkcmVzczogdGhlIHZpcnR1YWwgYWRkcmVzcyB0byB3YWxrXG4rXHQgKiBAd3JpdGVfZmF1bHQ6IGlmIHRydWUsIGZhaWwgd2l0aCAtRUZBVUxUIHVubGVzcyB0aGUgbWFwcGluZyBpc1xuK1x0ICogd3JpdGFibGVcbiBcdCAqL1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG4rXHRib29sIHdyaXRlX2ZhdWx0O1xuIFx0LyoqXG4gXHQgKiBJbnRlcm5hbHM6XG4gXHQgKlxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMuLjQwOTk3YTI2ODQ2ZjUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC02Nzg2LDEyICs2Nzg2LDE1IEBAIGludCBfX3BtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIH1cbiAjZW5kaWYgLyogX19QQUdFVEFCTEVfUE1EX0ZPTERFRCAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfYXJnc19zZXR1cChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzLFxuLVx0XHRcdFx0ICAgICBzcGlubG9ja190ICpsb2NrLCBwdGVfdCAqcHRlcCxcbi1cdFx0XHRcdCAgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJfbWFzaywgYm9vbCB3cml0YWJsZSxcbi1cdFx0XHRcdCAgICAgYm9vbCBzcGVjaWFsKVxuK3N0YXRpYyBpbmxpbmUgaW50IHBmbm1hcF9hcmdzX3NldHVwKHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MsXG4rXHRcdFx0XHQgICAgc3BpbmxvY2tfdCAqbG9jaywgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHQgICAgcGdwcm90X3QgcGdwcm90LCB1bnNpZ25lZCBsb25nIHBmbl9iYXNlLFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcl9tYXNrLCBib29sIHdyaXRhYmxlLFxuK1x0XHRcdFx0ICAgIGJvb2wgc3BlY2lhbClcbiB7XG4rXHRpZiAoIXdyaXRhYmxlIFx1MDAyNlx1MDAyNiBhcmdzLVx1MDAzZXdyaXRlX2ZhdWx0KVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbiBcdGFyZ3MtXHUwMDNlbG9jayA9IGxvY2s7XG4gXHRhcmdzLVx1MDAzZXB0ZXAgPSBwdGVwO1xuIFx0YXJncy1cdTAwM2VwZm4gPSBwZm5fYmFzZSArICgoYXJncy1cdTAwM2VhZGRyZXNzIFx1MDAyNiB+YWRkcl9tYXNrKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNjc5OSw2ICs2ODAyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9hcmdzX3NldHVwKHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKmFyZ3MsXG4gXHRhcmdzLVx1MDAzZXBncHJvdCA9IHBncHJvdDtcbiBcdGFyZ3MtXHUwMDNld3JpdGFibGUgPSB3cml0YWJsZTtcbiBcdGFyZ3MtXHUwMDNlc3BlY2lhbCA9IHNwZWNpYWw7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbkBAIC02ODIwLDggKzY4MjQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGZubWFwX2xvY2tkZXBfYXNzZXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqIEBhcmdzOiBQb2ludGVyIHRvIHN0cnVjdCBAZm9sbG93X3Bmbm1hcF9hcmdzXG4gICpcbiAgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIHNldHVwIGFyZ3MtXHUwMDNldm1hIGFuZCBhcmdzLVx1MDAzZWFkZHJlc3MgdG8gcG9pbnQgdG8gdGhlXG4tICogdmlydHVhbCBhZGRyZXNzIGFzIHRoZSB0YXJnZXQgb2Ygc3VjaCBsb29rdXAuICBPbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLFxuLSAqIHRoZSByZXN1bHRzIHdpbGwgYmUgcHV0IGludG8gb3RoZXIgb3V0cHV0IGZpZWxkcy5cbisgKiB2aXJ0dWFsIGFkZHJlc3MgYXMgdGhlIHRhcmdldCBvZiBzdWNoIGxvb2t1cCwgYW5kIG9wdGlvbmFsbHkgc2V0XG4rICogYXJncy1cdTAwM2V3cml0ZV9mYXVsdCB0byByZXF1aXJlIGEgd3JpdGFibGUgbWFwcGluZy4gIE9uIGEgc3VjY2Vzc2Z1bFxuKyAqIHJldHVybiwgdGhlIHJlc3VsdHMgd2lsbCBiZSBwdXQgaW50byBvdGhlciBvdXRwdXQgZmllbGRzLlxuICAqXG4gICogQWZ0ZXIgdGhlIGNhbGxlciBmaW5pc2hlZCB1c2luZyB0aGUgZmllbGRzLCB0aGUgY2FsbGVyIG11c3QgaW52b2tlXG4gICogYW5vdGhlciBmb2xsb3dfcGZubWFwX2VuZCgpIHRvIHByb3BlciByZWxlYXNlcyB0aGUgbG9ja3MgYW5kIHJlc291cmNlc1xuQEAgLTY4NDQsNyArNjg0OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwZm5tYXBfbG9ja2RlcF9hc3NlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIHVzZWQgdG8gbW9kaWZ5IFBURSBjb250ZW50LlxuICAqXG4tICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG90aGVyd2lzZS5cbisgKiBSZXR1cm46IHplcm8gb24gc3VjY2VzcywgLUVGQVVMVCBpZiBAYXJncy1cdTAwM2V3cml0ZV9mYXVsdCB3YXMgc2V0IGJ1dCB0aGVcbisgKiBtYXBwaW5nIGlzIG5vdCB3cml0YWJsZSwgLUVJTlZBTCBpZiB0aGVyZSBpcyBubyBtYXBwaW5nIGF0IGFsbC5cbiAgKi9cbiBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIHtcbkBAIC02ODU3LDYgKzY4NjMsNyBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0cHVkX3QgKnB1ZHAsIHB1ZDtcbiBcdHBtZF90ICpwbWRwLCBwbWQ7XG4gXHRwdGVfdCAqcHRlcCwgcHRlO1xuK1x0aW50IHIgPSAtRUlOVkFMO1xuIFxuIFx0cGZubWFwX2xvY2tkZXBfYXNzZXJ0KHZtYSk7XG4gXG5AQCAtNjg5MCwxMCArNjg5NywxMiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0XHRcdHNwaW5fdW5sb2NrKGxvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbi1cdFx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcHVkX3BncHJvdChwdWQpLFxuLVx0XHRcdFx0ICBwdWRfcGZuKHB1ZCksIFBVRF9NQVNLLCBwdWRfd3JpdGUocHVkKSxcbi1cdFx0XHRcdCAgcHVkX3NwZWNpYWwocHVkKSk7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRyID0gcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcHVkX3BncHJvdChwdWQpLFxuK1x0XHRcdFx0ICAgICAgcHVkX3BmbihwdWQpLCBQVURfTUFTSywgcHVkX3dyaXRlKHB1ZCksXG4rXHRcdFx0XHQgICAgICBwdWRfc3BlY2lhbChwdWQpKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0c3Bpbl91bmxvY2sobG9jayk7XG4rXHRcdHJldHVybiByO1xuIFx0fVxuIFxuIFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XG5AQCAtNjkxMSwxMCArNjkyMCwxMiBAQCBpbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxuIFx0XHRcdHNwaW5fdW5sb2NrKGxvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbi1cdFx0cGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLFxuLVx0XHRcdFx0ICBwbWRfcGZuKHBtZCksIFBNRF9NQVNLLCBwbWRfd3JpdGUocG1kKSxcbi1cdFx0XHRcdCAgcG1kX3NwZWNpYWwocG1kKSk7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRyID0gcGZubWFwX2FyZ3Nfc2V0dXAoYXJncywgbG9jaywgTlVMTCwgcG1kX3BncHJvdChwbWQpLFxuK1x0XHRcdFx0ICAgICAgcG1kX3BmbihwbWQpLCBQTURfTUFTSywgcG1kX3dyaXRlKHBtZCksXG4rXHRcdFx0XHQgICAgICBwbWRfc3BlY2lhbChwbWQpKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0c3Bpbl91bmxvY2sobG9jayk7XG4rXHRcdHJldHVybiByO1xuIFx0fVxuIFxuIFx0cHRlcCA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZHAsIGFkZHJlc3MsIFx1MDAyNmxvY2spO1xuQEAgLTY5MjMsMTQgKzY5MzQsMTYgQEAgaW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncylcbiBcdHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0aWYgKCFwdGVfcHJlc2VudChwdGUpKVxuIFx0XHRnb3RvIHVubG9jaztcbi1cdHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSxcbi1cdFx0XHQgIHB0ZV9wZm4ocHRlKSwgUEFHRV9NQVNLLCBwdGVfd3JpdGUocHRlKSxcbi1cdFx0XHQgIHB0ZV9zcGVjaWFsKHB0ZSkpO1xuK1x0ciA9IHBmbm1hcF9hcmdzX3NldHVwKGFyZ3MsIGxvY2ssIHB0ZXAsIHB0ZV9wZ3Byb3QocHRlKSxcbitcdFx0XHQgICAgICBwdGVfcGZuKHB0ZSksIFBBR0VfTUFTSywgcHRlX3dyaXRlKHB0ZSksXG4rXHRcdFx0ICAgICAgcHRlX3NwZWNpYWwocHRlKSk7XG4rXHRpZiAocilcbitcdFx0Z290byB1bmxvY2s7XG4gXHRyZXR1cm4gMDtcbiB1bmxvY2s6XG4gXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIGxvY2spO1xuIG91dDpcbi1cdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIHI7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfc3RhcnQpO1xuIFxuQEAgLTY5NzIsNyArNjk4NSwxMSBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHIpO1xuIFx0aW50IHJldCA9IC1FSU5WQUw7XG4gXHRib29sIHdyaXRhYmxlO1xuLVx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbitcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbitcdFx0LnZtYSA9IHZtYSxcbitcdFx0LmFkZHJlc3MgPSBhZGRyLFxuK1x0XHQud3JpdGVfZmF1bHQgPSAhISh3cml0ZSBcdTAwMjYgRk9MTF9XUklURSlcbitcdH07XG4gXG4gcmV0cnk6XG4gXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbkBAIC02OTgyLDkgKzY5OTksNiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuIFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXG4tXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcbiBcdGlmICghbWFkZHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi4wYzRmZjIyMzE2MmI5IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTI5MzksOCArMjkzOSwxMSBAQCBzdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXG4gc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcbiB7XG4tXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0ga2ZwLVx1MDAzZWh2YSB9O1xuLVx0Ym9vbCB3cml0ZV9mYXVsdCA9IGtmcC1cdTAwM2VmbGFncyBcdTAwMjYgRk9MTF9XUklURTtcbitcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHtcbitcdFx0LnZtYSA9IHZtYSxcbitcdFx0LmFkZHJlc3MgPSBrZnAtXHUwMDNlaHZhLFxuK1x0XHQud3JpdGVfZmF1bHQgPSAhIShrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpLFxuK1x0fTtcbiBcdGludCByO1xuIFxuIFx0LypcbkBAIC0yOTU5LDcgKzI5NjIsNyBAQCBzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqL1xuIFx0XHRib29sIHVubG9ja2VkID0gZmFsc2U7XG4gXHRcdHIgPSBmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXHUwMDNlbW0sIGtmcC1cdTAwM2VodmEsXG4tXHRcdFx0XHQgICAgICh3cml0ZV9mYXVsdCA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKSxcbitcdFx0XHRcdCAgICAgKGFyZ3Mud3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXG4gXHRcdFx0XHQgICAgIFx1MDAyNnVubG9ja2VkKTtcbiBcdFx0aWYgKHVubG9ja2VkKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTI5NjcsMTcgKzI5NzAsMTYgQEAgc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdHJldHVybiByO1xuIFxuIFx0XHRyID0gZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKTtcbi1cdFx0aWYgKHIpXG4rXHRcdGlmIChyKSB7XG4rXHRcdFx0aWYgKHIgPT0gLUVGQVVMVCkge1xuK1x0XHRcdFx0KnBfcGZuID0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQ7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIHI7XG4tXHR9XG4tXG4tXHRpZiAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICFhcmdzLndyaXRhYmxlKSB7XG4tXHRcdCpwX3BmbiA9IEtWTV9QRk5fRVJSX1JPX0ZBVUxUO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0KnBfcGZuID0ga3ZtX3Jlc29sdmVfcGZuKGtmcCwgTlVMTCwgXHUwMDI2YXJncywgYXJncy53cml0YWJsZSk7XG4tb3V0OlxuIFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXHRyZXR1cm4gcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0MzozOS44NTA0MzUzNTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM0NzA0NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgd3JpdGUgZmF1bHRzIGFyZSBoYW5kbGVkIHdpdGhpbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAuIEVzc2VudGlhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgYHdyaXRlX2ZhdWx0YCBmaWVsZCB0byBgc3RydWN0IGZvbGxvd19wZm5tYXBfYXJnc2AuIFRoZSBnaXN0IGlzIHRoYXQgaWYgYHdyaXRlX2ZhdWx0YCBpcyBzZXQgdG8gdHJ1ZSBhbmQgdGhlIG1hcHBpbmcgaXNuJ3Qgd3JpdGFibGUsIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBub3cgZGlyZWN0bHkgcmV0dXJucyBgLUVGQVVMVGAuIFRoaXMgdXNlZCB0byBiZSB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQncyBiZWVuIHNoaWZ0ZWQgaW50byBgcGZubWFwX2FyZ3Nfc2V0dXBgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZvbGxvd19wZm5tYXBfc3RhcnRgLiBUaGlzIGRlZmluaXRlbHkgc3RyZWFtbGluZXMgdGhlIGNvZGUgYW5kIGF2b2lkcyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgZGlyZWN0bHkgdG91Y2hlZCBieSB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlOiBgczM5MF9wY2lfbW1pb193cml0ZWAsIGBzMzkwX3BjaV9tbWlvX3JlYWRgLCBgZm9sbG93X2ZhdWx0X3BmbmAgaW4gYGRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmNgLCBgYWNybl92bV9yYW1fbWFwYCBpbiBgZHJpdmVycy92aXJ0L2Fjcm4vbW0uY2AsIGBwZm5tYXBfYXJnc19zZXR1cGAsIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCwgYW5kIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbGwgaW4gYG1tL21lbW9yeS5jYCwgYW5kIGZpbmFsbHkgYGh2YV90b19wZm5fcmVtYXBwZWRgIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC5cblxuVGhpcyBpcyBzaWduaWZpY2FudC4gV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRoYXQgcmlwcGxlIHRocm91Z2ggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdG91Y2ggdmlydHVhbGl6YXRpb24gc3Vic3lzdGVtcyDigJMgS1ZNLCBWRklPLCBhbmQgQUNSTi4gVGhpcyBkZWZpbml0ZWx5IGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBodmFfdG9fcGZuX3JlbWFwcGVkYCwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLCBgZm9sbG93X2ZhdWx0X3BmbmAsIGFuZCBgYWNybl92bV9yYW1fbWFwYC4gTGV0J3MgcXVpY2tseSBjaGVjayB0aGVpciB2aXNpYmlsaXR5LiBBaCwgYGZvbGxvd19wZm5tYXBfc3RhcnRgIGlzIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMYC4gYGh2YV90b19wZm5fcmVtYXBwZWRgIGlzIHN0YXRpYyB3aXRoaW4gYGt2bV9tYWluLmNgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXMgZXhwb3J0ZWQsIGBmb2xsb3dfZmF1bHRfcGZuYCBpcyBzdGF0aWMgdG8gYHZmaW9faW9tbXVfdHlwZTEuY2AsIGFuZCBgYWNybl92bV9yYW1fbWFwYCBpcyB3aXRoaW4gYGRyaXZlcnMvdmlydC9hY3JuL21tLmNgLlxuXG5Pa2F5LCBuZXh0IEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIHRoZXNlIHN1YnN5c3RlbXM6IEtWTSBpcywgb2YgY291cnNlLCBgQ09ORklHX0tWTWAsIFZGSU8gaXMgYENPTkZJR19WRklPYCwgYW5kIEFDUk4gaXMgYENPTkZJR19BQ1JOX0dVRVNUYC4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIGJ1dCB0aGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQzOjQ3LjY4NTE0MzY4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg1MzQ3MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBQ1JOX0dVRVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9ODY4PWNvbmZpZyBKQUlMSE9VU0VfR1VFU1RcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODc2LVxcbmFyY2gveDg2L0tjb25maWc6ODc3OmNvbmZpZyBBQ1JOX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy04NzgtXFx0Ym9vbCBcXFwiQUNSTiBHdWVzdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Mzo1MC4zNzA0OTg5NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDc1NzkyMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipWRklPIEludmVzdGlnYXRpb24gLSBBQ1JOIEd1ZXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgQUNSTl9HVUVTVGAgc2V0dGluZyBmdW5jdGlvbnMuIEl0J3MgYSBib29sZWFuLCBtZWFuaW5nIGl0J3MgZWl0aGVyIHRydWUgb3IgZmFsc2UuIEFuZCBnaXZlbiB0aGUgY29udGV4dCwgbXkgbWluZCdzIGltbWVkaWF0ZWx5IGp1bXBpbmcgdG8gVkZJTy4gR2l2ZW4gdGhhdCB0aGlzIHNlZW1zIHRvIGJlIGEga2V5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHJvbGUgaXQgcGxheXMgaW4gdGhpcyBzZXR1cC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGNvbmZpZyBpbnRlcmFjdHMgd2l0aCBWRklPIGFuZCB3aGF0IGNvbnNlcXVlbmNlcyB0aGlzIGhhcy4gTGV0J3MgZGlnIGludG8gVkZJTyB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBzZXR0aW5nIGVuYWJsZXMgb3IgZGlzYWJsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Mzo1Mi44NDYyOTM4NjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzc4Mjk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MDk9Y29uZmlnIEFQX0RFQlVHXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MjItXFxuYXJjaC9zMzkwL0tjb25maWc6ODIzOmNvbmZpZyBWRklPX0NDV1xcbmFyY2gvczM5MC9LY29uZmlnLTgyNC1cXHRkZWZfdHJpc3RhdGUgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODMzLVxcbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cXHRkZWZfdHJpc3RhdGUgblxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMjktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MzA6Y29uZmlnIFZGSU9fR1JPVVBcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ni1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01OC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NjE9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXFxuZHJpdmVycy92ZmlvL0tjb25maWctNjQtXFx0Ym9vbCBcXFwiVkZJTyBOby1JT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzg6Y29uZmlnIFZGSU9fVklSUUZEXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzktXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctODItXFxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkV4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTctXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnOjg6Y29uZmlnIFZGSU9fQ0RYXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQ0RYIGJ1cyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTE9bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctMy1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc6NDpjb25maWcgVkZJT19GU0xfTUNcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTItXFxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZzozOmNvbmZpZyBWRklPX01ERVZcXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTQtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNDpjb25maWcgVkZJT19QQ0lfVkdBXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgc3VwcG9ydCBmb3IgVkdBIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo0Nzpjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgcGxhdGZvcm0gZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6NTpjb25maWcgVkZJT19QTEFURk9STV9CQVNFXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctOC1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo5OmNvbmZpZyBWRklPX1BMQVRGT1JNXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgcGxhdGZvcm0gZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTgtXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6MTk6Y29uZmlnIFZGSU9fQU1CQVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIEFNQkEgZGV2aWNlcyAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZz0yPWlmIFZGSU9fUExBVEZPUk1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzozOmNvbmZpZyBWRklPX1BMQVRGT1JNX0NBTFhFREFYR01BQ19SRVNFVFxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgY2FseGVkYSB4Z21hYyByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy05LVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BMQVRGT1JNX0FNRFhHQkVfUkVTRVRcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBBTUQgWEdCRSByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzoxNzpjb25maWcgVkZJT19QTEFURk9STV9CQ01GTEVYUk1fUkVTRVRcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBCcm9hZGNvbSBGbGV4Uk0gcmVzZXQgKERFUFJFQ0FURUQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Mzo1NS4xNzQwODY0NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzkzODQ1NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQncyBtb2RpZnlpbmcgc2V2ZXJhbCBrZXkgY29tcG9uZW50cy4gU3BlY2lmaWNhbGx5LCBpdCdzIGhpdHRpbmcgYGRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmNgLCBhbmQgdGhhdCdzIG9idmlvdXNseSBiZWhpbmQgdGhlIGBWRklPX0lPTU1VX1RZUEUxYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyB0aGVyZSwgdGhhdCdzIGNydWNpYWwuIFRoZW4gdGhlcmUncyBgdmlydC9rdm0va3ZtX21haW4uY2AsIHdoaWNoIGlzIHVuZGVyIGBLVk1gLCBvYnZpb3VzbHkuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuIE5leHQsIGl0J3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jYCwgaW1wbHlpbmcgdGhpcyByZWxhdGVzIHRvIGBQQ0lgIG9uIHMzOTAgc3lzdGVtcy4gVGhhdCBtZWFucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBGaW5hbGx5LCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBgZHJpdmVycy92aXJ0L2Fjcm4vbW0uY2AsIHdoaWNoLCBhcyBhIHN5c3RlbSBleHBlcnQsIEkgaW1tZWRpYXRlbHkgYXNzb2NpYXRlIHdpdGggYEFDUk5fR1VFU1RgLiBUaGlzIGltcGxpZXMgY2hhbmdlcyB3aXRoaW4gdGhlIEFDUk4gaHlwZXJ2aXNvciBmcmFtZXdvcmsuXG5cbk15IGZpcnN0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgVkZJT19JT01NVV9UWVBFMWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gaXMgdGhlIG1vc3QgaW1wb3J0YW50IHBpZWNlIG9mIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmluZyBhdCB0aGlzIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU0NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Mzo1OS41Njc5MzU0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUwNjcxNjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0lPTU1VX1RZUEUxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9LY29uZmlnPTUyPWlmIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWc6NTM6Y29uZmlnIFZGSU9fSU9NTVVfVFlQRTFcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01NC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDowMS44MTg2MTE4OTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc2OTk1MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKlZGSU9fQ09OVEFJTkVSIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGhpbmdlIG9uIGBWRklPX0NPTlRBSU5FUmAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEJlZm9yZSBJIGNhbiBtYWtlIGFueSBkZWZpbml0aXZlIGNvbmNsdXNpb25zIG9yIHJlY29tbWVuZGF0aW9ucywgSSBhYnNvbHV0ZWx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFZGSU9fQ09OVEFJTkVSYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIGtlcm5lbCBtb2R1bGVzIGl0IHJlbGllcyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBhcmNoaXRlY3R1cmFsIGxhbmRzY2FwZSBhbmQgYWxsb3cgbWUgdG8gYXNzZXNzIHBvdGVudGlhbCBpbXBhY3RzIGRvd24gdGhlIGxpbmUuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwIHRvIGEgbGFyZ2VyIGRpYWdub3Npcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDowNC41OTU2MTEwNTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODI4Nzk5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fQ09OVEFJTkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9LY29uZmlnPTMwPWNvbmZpZyBWRklPX0dST1VQXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zOS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo0MDpjb25maWcgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy00MS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjb250YWluZXIgL2Rldi92ZmlvL3ZmaW9cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjA2Ljk3ODQ5OTk3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE0Mzk5NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAtIFZGSU9fR1JPVVAqKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaGluZ2VzIG9uIGBWRklPX0dST1VQYC4gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIGl0cyBiZWhhdmlvciB3aWxsIGRpY3RhdGUgZXZlcnl0aGluZy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0J3MgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGRyaXZlcnMvdmZpby9LY29uZmlnYC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIG9wdGlvbnMsIGZlYXR1cmVzLCBvciBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGNvbnRyb2wgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgVkZJT19HUk9VUGAuIEknbSBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyB0aGluZyBhY3R1YWxseSAqd29ya3MqIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6MTAuMTkyOTAzMDU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmZpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdCAgIGRldmljZXMgdGhyb3VnaCBWRklPIGFuZCBpcyB1c2VkIGJ5IHRoZSBtYWpvcml0eSBvZiB1c2Vyc3BhY2VcXG4gIDM2OlxcdFxcdCAgIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtYWtpbmcgdXNlIG9mIFZGSU8uXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IFkuXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBWRklPX0NPTlRBSU5FUlxcbiAgNDE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbiAgNDI6XFx0XFx0c2VsZWN0IFZGSU9fSU9NTVVfVFlQRTEgaWYgTU1VIFxcdTAwMjZcXHUwMDI2IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFZGSU9fR1JPVVBcXG4gIDQ0OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBUaGUgVkZJTyBjb250YWluZXIgaXMgdGhlIGNsYXNzaWMgaW50ZXJmYWNlIHRvIFZGSU8gZm9yIGVzdGFibGlzaGluZ1xcbiAgNDc6XFx0XFx0ICBJT01NVSBtYXBwaW5ncy4gSWYgTiBpcyBzZWxlY3RlZCBoZXJlIHRoZW4gSU9NTVVGRCBtdXN0IGJlIHVzZWQgdG9cXG4gIDQ4OlxcdFxcdCAgbWFuYWdlIHRoZSBtYXBwaW5ncy5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBVbmxlc3MgdGVzdGluZyBJT01NVUZEIHNheSBZIGhlcmUuXFxuICA1MTpcXHRcXG4gIDUyOlxcdGlmIFZGSU9fQ09OVEFJTkVSXFxuICA1MzpcXHRjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbiAgNTQ6XFx0XFx0dHJpc3RhdGVcXG4gIDU1OlxcdFxcdGRlZmF1bHQgblxcbiAgNTY6XFx0XFxuICA1NzpcXHRjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG4gIDU4OlxcdFxcdHRyaXN0YXRlXFxuICA1OTpcXHRcXHRkZXBlbmRzIG9uIFNQQVBSX1RDRV9JT01NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDoxMC4xOTI5OTQzMjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwOTY0Mjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFZGSU8gRGVwZW5kZW5jeSBDaGFpbioqXG5cblJpZ2h0LCBzbyBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIFZGSU8gY29tcG9uZW50cyByZWxhdGUgdG8gZWFjaCBvdGhlci4gSXQgc2VlbXMgdGhhdCBgVkZJT19DT05UQUlORVJgIGlzIGJ1aWx0IG9uIHRvcCBvZiBgVkZJT19HUk9VUGAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIHRoZSBmb3VuZGF0aW9uYWwgYFZGSU9gIG1vZHVsZS4gVGhpcyBzdWdnZXN0cyBhIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUuIElmIGBWRklPYCBmYWlscywgYFZGSU9fR1JPVVBgIGFuZCBgVkZJT19DT05UQUlORVJgIGFyZSB1c2VsZXNzLiBJZiBgVkZJT19HUk9VUGAgZmFpbHMsIGBWRklPX0NPTlRBSU5FUmAgd2lsbCBmYWlsLiBUaGVyZWZvcmUsIGxvZ2ljYWxseSwgaXQgbWFrZXMgc2Vuc2UgdG8gZGlnIGludG8gYFZGSU9fR1JPVVBgIGZpcnN0IHRvIHVuZGVyc3RhbmQgdGhlIGNydWNpYWwgbGluayBpdCBwbGF5cyBpbiB0aGUgY2hhaW4uIE15IG5leHQgYWN0aW9uIGlzIGNsZWFyOyBsZXQncyBpbnZlc3RpZ2F0ZSB0aGUgc3BlY2lmaWNzIG9mIGBWRklPX0dST1VQYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjEzLjMwMjY0MDY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRcXHQgIHRvIHNldCB1cCBzZWN1cmUgRE1BIGNvbnRleHQgZm9yIGRldmljZSBhY2Nlc3MuICBUaGlzIGludGVyZmFjZSBkb2VzXFxuICAyNjpcXHRcXHQgIG5vdCBzdXBwb3J0IG5vaW9tbXUuXFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIFZGSU9fR1JPVVBcXG4gIDMxOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcXFwiXFxuICAzMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgIFZGSU8gZ3JvdXAgc3VwcG9ydCBwcm92aWRlcyB0aGUgdHJhZGl0aW9uYWwgbW9kZWwgZm9yIGFjY2Vzc2luZ1xcbiAgMzU6XFx0XFx0ICAgZGV2aWNlcyB0aHJvdWdoIFZGSU8gYW5kIGlzIHVzZWQgYnkgdGhlIG1ham9yaXR5IG9mIHVzZXJzcGFjZVxcbiAgMzY6XFx0XFx0ICAgYXBwbGljYXRpb25zIGFuZCBkcml2ZXJzIG1ha2luZyB1c2Ugb2YgVkZJTy5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS5cXG4gIDM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDoxMy4zMDI3NTE3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg2MDk5NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVmlydHVhbGl6YXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhpcyB2aXJ0dWFsaXphdGlvbiBwcm9ibGVtIGFuZCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gaW5jb3Jwb3JhdGUgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAsIGFuZCBgVkZJT19JT01NVV9UWVBFMWAuIEl0J3MgcHJldHR5IGZ1bmRhbWVudGFsLCBvYnZpb3VzbHkuIFRoZW4gd2UgaGF2ZSBgS1ZNYCwgd2hpY2ggaXMgdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUsIGFuZCB3ZSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGBBQ1JOX0dVRVNUYCBjb21wb25lbnQuIFRoZXNlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBubyBkb3VidC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZXNlIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmUgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAsIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYGZvbGxvd19mYXVsdF9wZm5gLCBhbmQgYGFjcm5fdm1fcmFtX21hcGAuIEVhY2ggb2YgdGhlbSB0ZWxscyBhIGJpdCBvZiB0aGUgc3RvcnkuXG5cbkhtbSwgYGh2YV90b19wZm5fcmVtYXBwZWRgIGFuZCBgZm9sbG93X2ZhdWx0X3BmbmAgYXJlIHN0YXRpYy4gVGhhdCdzIGludGVyZXN0aW5nLCB1c3VhbGx5IGEgc3RhdGljIGZ1bmN0aW9uIGlzIG9ubHkgdmlzaWJsZSB3aXRoaW4gYSBzaW5nbGUgZmlsZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGwgdGhlbS4gRmluZGluZyB0aGF0IG91dCB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtIGFuZCBob3cgdGhleSBhZmZlY3Qgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgdGhlIG5leHQgbGluZSBvZiBpbnF1aXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjE3LjQ4ODg1NjE5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNTc2MjQxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodmFfdG9fcGZuX3JlbWFwcGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjkyOD1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MzgtXFxudmlydC9rdm0va3ZtX21haW4uYzoyOTM5OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yOTg3PWt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDE1LVxcdGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XFxudmlydC9rdm0va3ZtX21haW4uYzozMDE2OlxcdFxcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcXHUwMDI2cGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTctXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6MTkuNzI0NjIyNzkyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1ODU0Mjg2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEhWQSB0byBQRk4gTWFwcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGh2YV90b19wZm5gIGZ1bmN0aW9uIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24uIEl0IGFwcGVhcnMgdGhhdCBgaHZhX3RvX3BmbmAgY2FsbHMgYGh2YV90b19wZm5fcmVtYXBwZWRgLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGludHMgYXQgc29tZSBraW5kIG9mIHJlbWFwcGluZyBpbnZvbHZlZCwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBCZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaHZhX3RvX3BmbmAgaXRzZWxmIGlzIGRvaW5nLiBMZXQncyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggY2hlY2sgb2YgdGhlIGBodmFfdG9fcGZuYCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFjY29tcGxpc2gsIGFuZCB0aGUgcm9sZSBvZiB0aGUgcmVtYXAgZnVuY3Rpb24gaXMgcGxheWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDoyOC4zMTAwNTQ3OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNzI3MjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodmFfdG9fcGZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTM4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTQwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ni1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODc6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg4LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5Ny1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5OTg6XFx0aWYgKGh2YV90b19wZm5fZmFzdChrZnAsIFxcdTAwMjZwZm4pKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5OS1cXHRcXHRyZXR1cm4gcGZuO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAwMC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMDE6XFx0bnBhZ2VzID0gaHZhX3RvX3Bmbl9zbG93KGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDAyLVxcdGlmIChucGFnZXMgPT0gMSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNS1cXHRlbHNlIGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNjpcXHRcXHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDE3LVxcdFxcdGlmIChyID09IC1FQUdBSU4pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMzI9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA0Ny1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNDg6XFx0cmV0dXJuIGh2YV90b19wZm4oa2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNDktfVxcbi0tXFxudmlydC9rdm0va3ZtX21tLmg9Mjc9c3RydWN0IGt2bV9mb2xsb3dfcGZuIHtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tbS5oLTU4LVxcbnZpcnQva3ZtL2t2bV9tbS5oOjU5Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKTtcXG52aXJ0L2t2bS9rdm1fbW0uaC02MC1cXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9MTI3PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1NC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjE1NTpzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1Ni17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTIwOC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjIwOTpcXHRcXHRuZXdfcGZuID0gaHZhX3RvX3BmbihcXHUwMDI2a2ZwKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTIxMC1cXHRcXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihuZXdfcGZuKSlcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9MjU2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjMyMjpcXHQvKiBOb3RlOiB0aGUgb2Zmc2V0IG11c3QgYmUgY29ycmVjdCBiZWZvcmUgY2FsbGluZyBodmFfdG9fcGZuX3JldHJ5KCkgKi9cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMy1cXHRncGMtXFx1MDAzZXVodmEgKz0gcGFnZV9vZmZzZXQ7XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyOS1cXHRpZiAoIWdwYy1cXHUwMDNldmFsaWQgfHwgaHZhX2NoYW5nZSkge1xcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMwOlxcdFxcdHJldCA9IGh2YV90b19wZm5fcmV0cnkoZ3BjKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMS1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDozMC40MjczMzIxNzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxOTEzNjg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gS1ZNIFBGTiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgS1ZNIGhhbmRsZXMgUGh5c2ljYWwgRnJhbWUgTnVtYmVycyAoUEZOcykuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgaHZhX3RvX3BmbmAg4oCTIG9yIGF0IGxlYXN0LCBzb21ldGhpbmcgd2l0aCB0aGF0IG5hbWUgYW5kIGZ1bmN0aW9uIHNpZ25hdHVyZSDigJMgaXMgZXhwb3NlZCBvdXRzaWRlIGl0cyBsaWtlbHkgb3JpZ2luYWwgY29tcGlsYXRpb24gdW5pdCB3aXRoaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCB0ZWxscyBtZSB0aGF0IHRoaXMgdHJhbnNsYXRpb24gZnVuY3Rpb24gaXMgKmludGVuZGVkKiBmb3IgdXNlIGVsc2V3aGVyZSwgd2hpY2ggaW4gdHVybiBtZWFucyBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3Igc29tZSBjcm9zcy1tb2R1bGUgaW50ZXJhY3Rpb24gb3IgYWRkcmVzcyBzcGFjZSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoaXMgZnVydGhlciwgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGh2YV90b19wZm5gIGlzIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgZm9sbG93X2ZhdWx0X3BmbmAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGl0IGlzIHdvcnRoIHRvIGNoZWNrIHRoaXMgZnVuY3Rpb24sIGFzIGBodmFfdG9fcGZuYCBwcm9iYWJseSB0cmFuc2xhdGVzIGhvc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGZuLCBhbmQgYGZvbGxvd19mYXVsdF9wZm5gIGlzIHJlbGF0ZWQgdG8gZmF1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc4MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjMzLjk0NjQ3MjEwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMDk5NzA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xsb3dfZmF1bHRfcGZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTM0PXN0YXRpYyB2b2lkIHZmaW9fYmF0Y2hfZmluaShzdHJ1Y3QgdmZpb19iYXRjaCAqYmF0Y2gpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTUzOS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU0MDpzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNTQxLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nICpwZm4sXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTU4Mz1zdGF0aWMgbG9uZyB2YWRkcl9nZXRfcGZucyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkcixcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNjE0LVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NjE1OlxcdFxcdHJldCA9IGZvbGxvd19mYXVsdF9wZm4odm1hLCBtbSwgdmFkZHIsIHBmbiwgXFx1MDAyNmFkZHJfbWFzayxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTYxNi1cXHRcXHRcXHRcXHQgICAgICAgcHJvdCBcXHUwMDI2IElPTU1VX1dSSVRFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6MzYuMjc3NDc0NDU4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODU2MjAwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipTdGF0aWMgRnVuY3Rpb24gSW5xdWlyaWVzKipcblxuT2theSwgc28gYHZhZGRyX2dldF9wZm5zYCBpcyBhbHNvIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0J3MgbGlrZWx5IHNjb3BlZCB3aXRoaW4gYSBzaW5nbGUgY29tcGlsYXRpb24gdW5pdCwgYW5kIGl0cyB1c2FnZSBpcyBpbnRlbnRpb25hbGx5IHJlc3RyaWN0ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlc2Ugc29ydHMgb2Ygb3B0aW1pemF0aW9ucywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIGlzIGtleSB0byBmdWxseSB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgdmlydHVhbCBtZW1vcnkgc3lzdGVtIGlzIHN0cnVjdHVyZWQgaGVyZS4gU28sIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHZhZGRyX2dldF9wZm5zYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoaXMgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgaXRzIHNwZWNpZmljIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yayBhbmQgaGlnaGxpZ2h0IGFueSBkZXBlbmRlbmNpZXMgb3IgY29uc3RyYWludHMuIEknbGwgbmVlZCB0byB1c2Ugc29tZSB0b29saW5nLCBwcm9iYWJseSBhIHN5bWJvbCBsb29rdXAgb3IgY3Jvc3MtcmVmZXJlbmNlIHRvb2wgdG8gZG8gdGhpcyBlZmZlY3RpdmVseSwgb3Igc2ltcGx5IHNlYXJjaCB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkuIFRoaXMgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzg3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6MzkuMzYzMDk4MDMxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEwNDIyNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZhZGRyX2dldF9wZm5zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTQwPXN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU4Mi0gKi9cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU4MzpzdGF0aWMgbG9uZyB2YWRkcl9nZXRfcGZucyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkcixcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU4NC1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcywgaW50IHByb3QsIHVuc2lnbmVkIGxvbmcgKnBmbixcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9Njc0PXN0YXRpYyBsb25nIHZmaW9fcGluX3BhZ2VzX3JlbW90ZShzdHJ1Y3QgdmZpb19kbWEgKmRtYSwgdW5zaWduZWQgbG9uZyB2YWRkcixcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzA5LVxcdFxcdFxcdC8qIEVtcHR5IGJhdGNoLCBzbyByZWZpbGwgaXQuICovXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo3MTA6XFx0XFx0XFx0cmV0ID0gdmFkZHJfZ2V0X3BmbnMobW0sIHZhZGRyLCBucGFnZSwgZG1hLVxcdTAwM2Vwcm90LFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNzExLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBmbiwgYmF0Y2gpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy03MzQtXFx0XFx0ICogcGZuIGlzIHByZXNldCBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvZiB0aGlzIGlubmVyIGxvb3BcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjczNTpcXHRcXHQgKiBkdWUgdG8gdGhlIGZhY3QgdGhhdCB2YWRkcl9nZXRfcGZucygpIG5lZWRzIHRvIHByb3ZpZGUgdGhlXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy03MzYtXFx0XFx0ICogaW5pdGlhbCBwZm4gZm9yIHBmbm1hcHMuICBUaGVyZWZvcmUgdG8gcmVkdWNlIHJlZHVuZGFuY3ksXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTc0OS1cXHRcXHRcXHQgKiBVc2luZyBHVVAgd2l0aCB0aGUgRk9MTF9MT05HVEVSTSBpblxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NzUwOlxcdFxcdFxcdCAqIHZhZGRyX2dldF9wZm5zKCkgd2lsbCBub3QgcmV0dXJuIGludmFsaWRcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTc1MS1cXHRcXHRcXHQgKiBvciByZXNlcnZlZCBwYWdlcy5cXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9ODM4PXN0YXRpYyBpbnQgdmZpb19waW5fcGFnZV9leHRlcm5hbChzdHJ1Y3QgdmZpb19kbWEgKmRtYSwgdW5zaWduZWQgbG9uZyB2YWRkcixcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtODUwLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6ODUxOlxcdHJldCA9IHZhZGRyX2dldF9wZm5zKG1tLCB2YWRkciwgMSwgZG1hLVxcdTAwM2Vwcm90LCBwZm5fYmFzZSwgXFx1MDAyNmJhdGNoKTtcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTg1Mi1cXHRpZiAocmV0ICE9IDEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ0OjQxLjU3MzUyNjgxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYwNjk2NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZGSU8gUGFnZSBQaW5uaW5nIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIGJvdGggYHZmaW9fcGluX3BhZ2VzX3JlbW90ZWAgYW5kIGB2ZmlvX3Bpbl9wYWdlX2V4dGVybmFsYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBsaW1pdHMgdGhlaXIgc2NvcGUgYW5kIGFjY2Vzc2liaWxpdHkgd2l0aGluIHRoZSBWRklPIGNvZGViYXNlLiBUaGV5J3JlIGludGVybmFsIGZ1bmN0aW9ucywgZWZmZWN0aXZlbHkgaGlkZGVuIGZyb20gdGhlIG91dHNpZGUgd29ybGQgZXhjZXB0IHRocm91Z2ggdGhlaXIgZGVmaW5lZCBpbnRlcmZhY2VzLCBidXQgaXQgc3RpbGwgbWVhbnMgdGhleSBhcmUgbm90IHZpc2libGUgb3V0c2lkZSB0aGVpciBDIGZpbGVzLlxuXG5MZXQncyBkaXZlIGRlZXBlciBhbmQgZm9jdXMgb24gYHZmaW9fcGluX3BhZ2VzX3JlbW90ZWAgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHBhZ2UgcGlubmluZyBwcm9jZXNzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBwaW5uaW5nIG1lbW9yeSB0aGF0IGlzICphbHJlYWR5KiByZW1vdGUgb3Igc29tZXRoaW5nIHRoZSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHJlbW90ZT8gSXMgdGhpcyBhYm91dCBwaW5uaW5nIHBhZ2VzIGZvciBETUEgdHJhbnNmZXJzIGFjcm9zcyBhIGRldmljZSBvciBmb3Igc29tZSBvdGhlciBwdXJwb3NlPyBJIG5lZWQgdG8gcmV2aWV3IGl0cyBjYWxsaW5nIGNvbnRleHRzIGFuZCBpdHMgaW1wbGVtZW50YXRpb24uIEknbSBhc3N1bWluZyB3ZSBhcmUgdXNpbmcgdmZpbywgc28gRE1BIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIG1lbW9yeS4gSSBzaG91bGQgYWxzbyBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgbWF5YmUgaW52ZXN0aWdhdGluZyB0aGUgYGRtYV9idWZgIG9yIGBwY2lfZG1hYCBzdHJ1Y3R1cmVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBWRklPIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBob3cgaXQgaW1wYWN0cyBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzI0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6NDUuMTM0MjI2MzkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ1MjY1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGluX3BhZ2VzX3JlbW90ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTYzNz1zdGF0aWMgbG9uZyB2cGZuX3BhZ2VzKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy02NzMtICovXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo2NzQ6c3RhdGljIGxvbmcgdmZpb19waW5fcGFnZXNfcmVtb3RlKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNjc1LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBucGFnZSwgdW5zaWduZWQgbG9uZyAqcGZuX2Jhc2UsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE1Nzk9c3RhdGljIGludCB2ZmlvX3Bpbl9tYXBfZG1hKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSwgc3RydWN0IHZmaW9fZG1hICpkbWEsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE1OTMtXFx0XFx0LyogUGluIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgKi9cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjE1OTQ6XFx0XFx0bnBhZ2UgPSB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoZG1hLCB2YWRkciArIGRtYS1cXHUwMDNlc2l6ZSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE1OTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBcXHUwMDI2cGZuLCBsaW1pdCxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9MTgwMj1zdGF0aWMgaW50IHZmaW9faW9tbXVfcmVwbGF5KHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTg2MS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjE4NjI6XFx0XFx0XFx0XFx0bnBhZ2UgPSB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoZG1hLCB2YWRkcixcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE4NjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDo0Ny4yNzk0OTgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjc3Mzk2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIFJldmlldyBvZiBETUEgTWFwcGluZyBpbiBWRklPKipcblxuUmlnaHQsIGB2ZmlvX3Bpbl9tYXBfZG1hYC4uLiB0aGF0J3MgYSAqc3RhdGljKiBmdW5jdGlvbiwgaXNuJ3QgaXQ/IE9rYXksIGxldCdzIGp1c3QgbWFrZSBzdXJlIG15IG1lbnRhbCBtb2RlbCBpcyBhY2N1cmF0ZSBoZXJlLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHZmaW9fcGluX21hcF9kbWFgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0J3MgZG9pbmcuIEdvdHRhIGtlZXAgdGhlIGRldGFpbHMgc2hhcnAgdG8gbWFpbnRhaW4gYSB0aWdodCBncmlwIG9uIHRoZXNlIERNQSBtYXBwaW5nIGludHJpY2FjaWVzIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUga2V5IGFzcGVjdHMgaXQgaGFuZGxlcz8gSXQncyBiZWVuIGEgd2hpbGUsIHNvIGEgcXVpY2sgcmVmcmVzaGVyIGlzIGluIG9yZGVyIHRvIGtlZXAgdGhpcyBvcHRpbWl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTQ4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6NTAuMzA3MjQyNjczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMxMzQ0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGluX21hcF9kbWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNTUyPXN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LCBkbWFfYWRkcl90IGlvdmEsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE1NzgtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNTc5OnN0YXRpYyBpbnQgdmZpb19waW5fbWFwX2RtYShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTU4MC1cXHRcXHRcXHQgICAgc2l6ZV90IG1hcF9zaXplKVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNjc5PXN0YXRpYyBpbnQgdmZpb19kbWFfZG9fbWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTc4OC1cXHRlbHNlXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNzg5OlxcdFxcdHJldCA9IHZmaW9fcGluX21hcF9kbWEoaW9tbXUsIGRtYSwgc2l6ZSk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNzkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NDo1Mi42Mzg1OTYxMDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzNDYzNTkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB2ZmlvX2RtYV9kb19tYXBgKipcblxuT2theSwgc28gYHZmaW9fZG1hX2RvX21hcGAgaXMgbWFya2VkIGFzIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdywgaXQgaW1wbGllcyBhIG1vcmUgZm9jdXNlZCBzY29wZSB3aXRoaW4gdGhlIFZGSU8gZHJpdmVyLCBsaWtlbHkgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgZm9yIGB2ZmlvX2RtYV9kb19tYXBgIGl0c2VsZi4gVW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gaXMgY3J1Y2lhbCB0byBmdWxseSBncmFzcCBob3cgRE1BIG1hcHBpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBWRklPIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLCBpbnB1dHMsIGFuZCBvdXRwdXRzIGFuZCB3aGF0IGRlY2lzaW9ucyBpdCBpcyBtYWtpbmcuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Njg3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6NTUuNDczMjM4MjU1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY3NTc1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fZG1hX2RvX21hcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE2NDc9c3RhdGljIGludCB2ZmlvX2NoYW5nZV9kbWFfb3duZXIoc3RydWN0IHZmaW9fZG1hICpkbWEpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE2NzgtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNjc5OnN0YXRpYyBpbnQgdmZpb19kbWFfZG9fbWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE2ODAtXFx0XFx0XFx0ICAgc3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX21hcCAqbWFwKVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0yODk0PXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9tYXBfZG1hKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMjkwOS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjI5MTA6XFx0cmV0dXJuIHZmaW9fZG1hX2RvX21hcChpb21tdSwgXFx1MDAyNm1hcCk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0yOTExLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDQ6NTcuNjQwODE5MzQxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzY2NTczNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgYHZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYWAqKlxuXG5Pa2F5LCBzbyBJJ20gcHJvY2Vzc2luZyB0aGlzIGNvZGUgYW5kIEkndmUganVzdCBub3RpY2VkIHRoYXQgYHZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIGl0J3Mgc2NvcGVkIHRvIHRoaXMgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggaXNuJ3QgaW5oZXJlbnRseSBhIHByb2JsZW0sIGJ1dCBpdCBkb2VzIG1lYW4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYW5kIGlmIHRoYXQgc2NvcGUgaXMgdHJ1bHkgc3VmZmljaWVudC4gTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgVkZJTyBJT01NVSBUeXBlIDEgc2NoZW1lLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbiBpcyBhcHByb3ByaWF0ZSBhbmQgZG9lc24ndCBoaW5kZXIgYW55IHBvdGVudGlhbCBmdXR1cmUgZmxleGliaWxpdHkgb3IgaW50cm9kdWNlIGFueSBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgbGltaXRhdGlvbnMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYHZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjA4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6MDEuMzE3NDc4OTI1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUzOTg1MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9faW9tbXVfdHlwZTFfbWFwX2RtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTI4MzU9c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX2dldF9pbmZvKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMjg5My1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjI4OTQ6c3RhdGljIGludCB2ZmlvX2lvbW11X3R5cGUxX21hcF9kbWEoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMjg5NS1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTMwODA9c3RhdGljIGxvbmcgdmZpb19pb21tdV90eXBlMV9pb2N0bCh2b2lkICppb21tdV9kYXRhLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0zMDkwLVxcdGNhc2UgVkZJT19JT01NVV9NQVBfRE1BOlxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6MzA5MTpcXHRcXHRyZXR1cm4gdmZpb19pb21tdV90eXBlMV9tYXBfZG1hKGlvbW11LCBhcmcpO1xcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMzA5Mi1cXHRjYXNlIFZGSU9fSU9NTVVfVU5NQVBfRE1BOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NTowMy40NzE0Njk4NDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NjczNjM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgVkZJTyBJT01NVSBJT0NUTCBFbnRyeSBQb2ludCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYHZmaW9faW9tbXVfdHlwZTFfaW9jdGxgIGlzICp0aGUqIGlvY3RsIGhhbmRsZXIsIHRoZSBtYWluIGZ1bmN0aW9uLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdCBzZWVtcyB0aGUgY29ubmVjdGlvbiBoYXBwZW5zIHZpYSB0aGUgYHZmaW9faW9tbXVfZHJpdmVyX29wc2Agc3RydWN0LiBMb29raW5nIGF0IHRoYXQsIHRoZSBgLmlvY3RsYCBmaWVsZCBpcyBhc3NpZ25lZCB0byBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAuIFJpZ2h0LCBzbyB0aGF0IGNvbmZpcm1zIGl0LCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgSS9PIGNvbnRyb2wgcmVxdWVzdHMgaXMgaW5kZWVkIGB2ZmlvX2lvbW11X3R5cGUxX2lvY3RsYC4gTm93IHRvIGNvbnRpbnVlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gSSdsbCBtb3ZlIG9uIHRvIGNoZWNrIGBhY3JuX3ZtX3JhbV9tYXBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgyNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NTowNi41NTgyMDk4OTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk3MjI5NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWNybl92bV9yYW1fbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC9hY3JuL2Fjcm5fZHJ2Lmg9MTk4PWludCBhY3JuX3ZtX21lbXNlZ191bm1hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKTtcXG5kcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oOjE5OTppbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xcbmRyaXZlcnMvdmlydC9hY3JuL2Fjcm5fZHJ2LmgtMjAwLXZvaWQgYWNybl92bV9hbGxfcmFtX3VubWFwKHN0cnVjdCBhY3JuX3ZtICp2bSk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jPTEwOD1pbnQgYWNybl92bV9tZW1zZWdfbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTExMi1cXHRpZiAobWVtbWFwLVxcdTAwM2V0eXBlID09IEFDUk5fTUVNTUFQX1JBTSlcXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jOjExMzpcXHRcXHRyZXR1cm4gYWNybl92bV9yYW1fbWFwKHZtLCBtZW1tYXApO1xcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTE0LVxcbi0tXFxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYz0xMzE9aW50IGFjcm5fdm1fbWVtc2VnX3VubWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE0OS0vKipcXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jOjE1MDogKiBhY3JuX3ZtX3JhbV9tYXAoKSAtIENyZWF0ZSBhIFJBTSBFUFQgbWFwcGluZyBvZiBVc2VyIFZNLlxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTUxLSAqIEB2bTpcXHRcXHRUaGUgVXNlciBWTSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jLTE1NS0gKi9cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jOjE1NjppbnQgYWNybl92bV9yYW1fbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApXFxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYy0xNTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NTowOC44Mzc5Mzk0M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY0NDY0NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFDUk4gTWVtb3J5IE1hcHBpbmcgTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBgYWNybl92bV9yYW1fbWFwYC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgdmlydHVhbCBtYWNoaW5lJ3MgUkFNIHByb3Blcmx5IG1hcHBlZCwgb2J2aW91c2x5LiBUaGUga2V5IHRoaW5nIGlzICpob3cqIGl0IGdldHMgY2FsbGVkLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQncyBnb2luZyB0byBiZSBjYWxsZWQgYnkgc29tZXRoaW5nIGhpZ2hlciB1cCB0aGUgc3RhY2suIEFuZCB5ZXAsIGNvbmZpcm1lZCDigJMgaXQgbG9va3MgbGlrZSBgYWNybl92bV9tZW1zZWdfbWFwYCBpcyB0aGUgb25lIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciBpbnZva2luZyBpdC4gU28sIGBtZW1zZWdfbWFwYCBpcyBoYW5kbGluZyB0aGUgYnJvYWRlciBtZW1vcnkgc2VnbWVudCBtYXBwaW5nIHRhc2tzLCBhbmQgdGhlbiBpdCBsZXZlcmFnZXMgdGhlIG1vcmUgc3BlY2lhbGl6ZWQgYHJhbV9tYXBgIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBSQU0gbWFwcGluZy4gSXQncyBhIG5pY2UsIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMsIHR5cGljYWwgb2YgYSB3ZWxsLWRlc2lnbmVkIGtlcm5lbCBtb2R1bGUuIGBtZW1zZWdfbWFwYCBwcm9iYWJseSBoYW5kbGVzIHRoaW5ncyBsaWtlIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlIHBhZ2UgdGFibGVzLCBtYW5hZ2luZyBwaHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9ucywgZGVhbGluZyB3aXRoIG1lbW9yeSBhdHRyaWJ1dGVzLCBhbmQgY29vcmRpbmF0aW5nIHdpdGggb3RoZXIgc3Vic3lzdGVtcywgYmVmb3JlIHVsdGltYXRlbHkgY2FsbGluZyBgcmFtX21hcGAgdG8gaGFuZGxlIHRoZSBhY3R1YWwgcGh5c2ljYWwgdG8gdmlydHVhbCBtYXBwaW5nIG9mIFJBTS4gVGhhdCdzIGEgZ29vZCBtZW50YWwgbW9kZWwgdG8ga2VlcCBpbiBtaW5kIGFzIEkgZGVsdmUgZnVydGhlciBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmNoaXRlY3R1cmUuIEtub3dpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NToxMi42MDI0MDYzNzJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjM3MTQ1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWNybl92bV9tZW1zZWdfbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC9hY3JuL2Fjcm5fZHJ2Lmg9MTk2PWludCBhY3JuX21tX3JlZ2lvbl9kZWwoc3RydWN0IGFjcm5fdm0gKnZtLCB1NjQgdXNlcl9ncGEsIHU2NCBzaXplKTtcXG5kcml2ZXJzL3ZpcnQvYWNybi9hY3JuX2Rydi5oOjE5NzppbnQgYWNybl92bV9tZW1zZWdfbWFwKHN0cnVjdCBhY3JuX3ZtICp2bSwgc3RydWN0IGFjcm5fdm1fbWVtbWFwICptZW1tYXApO1xcbmRyaXZlcnMvdmlydC9hY3JuL2Fjcm5fZHJ2LmgtMTk4LWludCBhY3JuX3ZtX21lbXNlZ191bm1hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKTtcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jPTEwOD1zdGF0aWMgbG9uZyBhY3JuX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTIyMy1cXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYzoyMjQ6XFx0XFx0cmV0ID0gYWNybl92bV9tZW1zZWdfbWFwKHZtLCBcXHUwMDI2bWVtbWFwKTtcXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0yMjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9tbS5jPTg1PWludCBhY3JuX21tX3JlZ2lvbl9kZWwoc3RydWN0IGFjcm5fdm0gKnZtLCB1NjQgdXNlcl9ncGEsIHU2NCBzaXplKVxcbi0tXFxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYy0xMDctXFxuZHJpdmVycy92aXJ0L2Fjcm4vbW0uYzoxMDg6aW50IGFjcm5fdm1fbWVtc2VnX21hcChzdHJ1Y3QgYWNybl92bSAqdm0sIHN0cnVjdCBhY3JuX3ZtX21lbW1hcCAqbWVtbWFwKVxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6MTQuODI2MTI4NjY4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjQxMzE5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBBQ1JOIE1lbW9yeSBNYXBwaW5nIExvZ2ljKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgbWVtb3J5IG1hcHBpbmcgaW4gdGhlIEFDUk4gaHlwZXJ2aXNvciwgYW5kIGl0IGxvb2tzIGxpa2UgYGFjcm5fdm1fbWVtc2VnX21hcGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gU2luY2UgaXQncyBjYWxsZWQgYnkgYGFjcm5fZGV2X2lvY3RsYCwgdGhhdCBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgcGljdHVyZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyBwaHlzaWNhbCBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzYzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6MTcuNzkwMjYzNjczWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU3MjA0MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfYWNjZXNzX3BoeXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jZHgvY2R4LmM9NjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgY2R4X3BoeXNfdm1fb3BzID0ge1xcbmRyaXZlcnMvY2R4L2NkeC5jLTY2My0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9jZHgvY2R4LmM6NjY0OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvY2R4L2NkeC5jLTY2NS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYz0zMTk9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7XFxuZHJpdmVycy9jaGFyL21lbS5jLTMyMC0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9jaGFyL21lbS5jOjMyMTpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5c1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjItI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM9ODA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWZ1X3ZtYV9vcHMgPSB7XFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwNi0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jOjgwNzpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA4LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xcbmRyaXZlcnMvcGNpL21tYXAuYy0xOS0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9wY2kvbW1hcC5jOjIwOlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvcGNpL21tYXAuYy0yMS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvdWlvL3Vpby5jPTczNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb19waHlzaWNhbF92bV9vcHMgPSB7XFxuZHJpdmVycy91aW8vdWlvLmMtNzM3LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzg6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy91aW8vdWlvLmMtNzM5LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTc4Mz1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTgzNS1cXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcXG5pbmNsdWRlL2xpbnV4L21tLmg6ODM2OlxcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xcbmluY2x1ZGUvbGludXgvbW0uaC04MzctXFx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0zMTMwPWNvcHlfcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjMxMzE6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzEzMi1cXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7XFxuLS1cXG5tbS9tZW1vcnkuYz02OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcXG4tLVxcbm1tL21lbW9yeS5jLTY5NjctLyoqXFxubW0vbWVtb3J5LmM6Njk2ODogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3NcXG5tbS9tZW1vcnkuYy02OTY5LSAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXFxuLS1cXG5tbS9tZW1vcnkuYy02OTc4LSAqL1xcbm1tL21lbW9yeS5jOjY5Nzk6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1vcnkuYy02OTgwLVxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxcbi0tXFxubW0vbWVtb3J5LmMtNzAyNy19XFxubW0vbWVtb3J5LmM6NzAyODpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcXG5tbS9tZW1vcnkuYy03MDI5LSNlbmRpZlxcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaD02MzI9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjg0LVxcdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6Njg1OlxcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjg2LVxcdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjE5Ljk0NzQ3MzE0OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODM0NTM4MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEFjY2VzcyBNZWNoYW5pc21zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGFjY2VzcyBtZXRob2RzLiBJdCBsb29rcyBsaWtlIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHVzZWQgYXMgdGhlIGAuYWNjZXNzYCBtZW1iZXIgd2l0aGluIHRoZSBgdm1fb3BlcmF0aW9uc19zdHJ1Y3RgLiBJdCdzIGV4cG9ydGVkLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0J3MgcmVsYXRlZC4gTXkgY3VycmVudCB0aGlua2luZyBpcyB0aGF0IHRoZSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXRzZWxmLCBhbmQgdGhlbiB0aGUgbW9yZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgcmVsYXRlZCByZWFkcyBhbmQgd3JpdGVzIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAuIFRoZW4sIG9mIGNvdXJzZSwgdGhlcmUgYXJlIHRoZSBtb3JlIGRldmljZS1zcGVjaWZpYyBpb2N0bHM6IGBhY3JuX2Rldl9pb2N0bGAgYW5kIGB2ZmlvX2lvbW11X3R5cGUxX2lvY3RsYC5cblxuSG9sZCBvbi4uLiBgczM5MF9wY2lfbW1pb193cml0ZWAgYW5kIGBzMzkwX3BjaV9tbWlvX3JlYWRgIGFyZSBhY3R1YWxseSBzeXNjYWxscyBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBgYWNybl9kZXZfaW9jdGxgIGlzIHRoZSBpb2N0bCBmb3IgQUNSTiwgYW5kIGB2ZmlvX2lvbW11X3R5cGUxX2lvY3RsYCBpcyBmb3IgVkZJTy4gSSBrbm93IGFib3V0IHRob3NlLiBJIGFsc28gc2VlIHRoYXQgYGh2YV90b19wZm5gIGlzIGNhbGxlZCBieSBga3ZtX2ZvbGxvd19wZm5gLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBzZXZlcmFsIEtWTSBmdW5jdGlvbnMuIEludGVyZXN0aW5nLCBidXQgYGt2bV9mb2xsb3dfcGZuYCBpcyBzdGF0aWMgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBUaGF0IG1lYW5zIEkgaGF2ZSB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGF0IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGt2bV9mb2xsb3dfcGZuYCBuZXh0LCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCdzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY1NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NToyNC43ODIwMTQ1NTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzMxMTE1MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2ZvbGxvd19wZm5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0yODI1PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4MjYtXFxudmlydC9rdm0va3ZtX21haW4uYzoyODI3OnN0YXRpYyBrdm1fcGZuX3Qga3ZtX3Jlc29sdmVfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4MjgtXFx0XFx0XFx0XFx0IHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgKm1hcCwgYm9vbCB3cml0YWJsZSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4NTE6c3RhdGljIGJvb2wgaHZhX3RvX3Bmbl9mYXN0KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTIte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yODgyLSAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg4MzpzdGF0aWMgaW50IGh2YV90b19wZm5fc2xvdyhzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjkzOT1zdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudmlydC9rdm0va3ZtX21haW4uYzoyOTQwOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDEte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4Nzprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5ODgte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDMxLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAzMjpzdGF0aWMga3ZtX3Bmbl90IGt2bV9mb2xsb3dfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAzMy17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwNTE9a3ZtX3Bmbl90IF9fa3ZtX2ZhdWx0aW5fcGZuKGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1NC17XFxudmlydC9rdm0va3ZtX21haW4uYzozMDU1OlxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDU2LVxcdFxcdC5zbG90ID0gc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2OC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNjk6XFx0cmV0dXJuIGt2bV9mb2xsb3dfcGZuKFxcdTAwMjZrZnApO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA3MC19XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwOTc9c3RydWN0IHBhZ2UgKl9fZ2ZuX3RvX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGJvb2wgd3JpdGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwOTktXFx0c3RydWN0IHBhZ2UgKnJlZmNvdW50ZWRfcGFnZSA9IE5VTEw7XFxudmlydC9rdm0va3ZtX21haW4uYzozMTAwOlxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTAxLVxcdFxcdC5zbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMTA2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzEwNzpcXHQodm9pZClrdm1fZm9sbG93X3BmbihcXHUwMDI2a2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMDgtXFx0cmV0dXJuIHJlZmNvdW50ZWRfcGFnZTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzExMj1pbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExNC17XFxudmlydC9rdm0va3ZtX21haW4uYzozMTE1OlxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTE2LVxcdFxcdC5zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEyOC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMjk6XFx0bWFwLVxcdTAwM2VwZm4gPSBrdm1fZm9sbG93X3BmbihcXHUwMDI2a2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMzAtXFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4obWFwLVxcdTAwM2VwZm4pKVxcbi0tXFxudmlydC9rdm0va3ZtX21tLmgtMjYtXFxudmlydC9rdm0va3ZtX21tLmg6Mjc6c3RydWN0IGt2bV9mb2xsb3dfcGZuIHtcXG52aXJ0L2t2bS9rdm1fbW0uaC0yOC1cXHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xcbi0tXFxudmlydC9rdm0va3ZtX21tLmgtNTgtXFxudmlydC9rdm0va3ZtX21tLmg6NTk6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApO1xcbnZpcnQva3ZtL2t2bV9tbS5oLTYwLVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYz0xNTU9c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2My1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjE2NDpcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTY1LVxcdFxcdC5zbG90ID0gZ3BjLVxcdTAwM2VtZW1zbG90LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NToyNi45MTUxMzE0NjJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1Mjc5NzM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzLlxuXG4qKktWTSBTeW1ib2wgQW5hbHlzaXM6IGBfX2t2bV9mYXVsdGluX3BmbmAqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGF0IHNldmVyYWwga2V5IEtWTSBmdW5jdGlvbnMg4oCTIHNwZWNpZmljYWxseSBgX19rdm1fZmF1bHRpbl9wZm5gLCBgX19nZm5fdG9fcGFnZWAsIGFuZCBgX19rdm1fdmNwdV9tYXBgIOKAkyBhcmUgYWxsIGZ1bm5lbGluZyBkb3duIHRvIGEgY2FsbCB0byBga3ZtX2ZvbGxvd19wZm5gLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEdpdmVuIGhvdyB3aWRlc3ByZWFkIHRoZSB1c2UgYW5kL29yIGV4cG9ydCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHdpdGhpbiBLVk0sIGl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYF9fa3ZtX2ZhdWx0aW5fcGZuYCBpcyBhIHBvdGVudGlhbGx5IGZydWl0ZnVsIHN5bWJvbCB0byB6ZXJvIGluIG9uIGZvciBkZWVwZXIgYW5hbHlzaXMuIEl0J3MgYSBjZW50cmFsIHBvaW50IG9mIGludGVyYWN0aW9uLiBHaXZlbiB0aGUgaW50ZXJjb25uZWN0ZWRuZXNzIEkgc2VlIGhlcmUsIGl0IHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIHVuZGVyc3RhbmRpbmcgYSBsYXJnZXIgY2h1bmsgb2YgS1ZNJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byBgX19rdm1fZmF1bHRpbl9wZm5gLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg2NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjMwLjE2NzkzMjc5M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1OTQ5ODM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2t2bV9mYXVsdGluX3BmblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9tbXUuYz0xODQ4PXN0YXRpYyBpbnQga3ZtX3MyX2ZhdWx0X2dldF92bWFfaW5mbyhjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xODc4LVxcdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxODc5OlxcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0b1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE4ODAtXFx0ICogYWNxdWlyaW5nIGt2bS1cXHUwMDNlbW11X2xvY2suXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xOTAzPXN0YXRpYyBpbnQga3ZtX3MyX2ZhdWx0X3Bpbl9wZm4oY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTkxMS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxOTEyOlxcdHMydmktXFx1MDAzZXBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHMyZmQtXFx1MDAzZW1lbXNsb3QsIGdldF9jYW5vbmljYWxfZ2ZuKHMyZmQsIHMydmkpLFxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE5MTMtXFx0XFx0XFx0XFx0ICAgICAga3ZtX2lzX3dyaXRlX2ZhdWx0KHMyZmQtXFx1MDAzZXZjcHUpID8gRk9MTF9XUklURSA6IDAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xOTQ5LVxcdFxcdFxcdCAqIGxhcmdlc3QgcXVhbnRpdHkgd2UgY2FuIG1hcC4gIElmIGluc3RlYWQgaXQgd2FzIG1hcHBlZFxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjE5NTA6XFx0XFx0XFx0ICogdmlhIF9fa3ZtX2ZhdWx0aW5fcGZuKCksIHZtYV9wYWdlc2l6ZSBpcyBzZXQgdG8gUEFHRV9TSVpFXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTk1MS1cXHRcXHRcXHQgKiBhbmQgbXVzdCBub3QgYmUgdXBncmFkZWQuXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzU4PXN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MTEtXFx0aWYgKCEqaXNfZ21lbSkge1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE0MTI6XFx0XFx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0ZV9mYXVsdCA/IEZPTExfV1JJVEUgOiAwLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MTMtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNndyaXRhYmxlLCBcXHUwMDI2cGFnZSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYz01MDY9aW50IGt2bXBwY19ib29rM3NfaHZfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfaHYuYy02MDUtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2h2LmM6NjA2OlxcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKG1lbXNsb3QsIGdmbiwgd3JpdGluZyA/IEZPTExfV1JJVEUgOiAwLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9odi5jLTYwNy1cXHRcXHRcXHRcXHRcXHUwMDI2d3JpdGVfb2ssIFxcdTAwMjZwYWdlKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTgyMT1pbnQga3ZtcHBjX2Jvb2szc19pbnN0YW50aWF0ZV9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTg0Mi1cXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3QobWVtc2xvdCwgZ2ZuKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYzo4NDM6XFx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0aW5nID8gRk9MTF9XUklURSA6IDAsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtODQ0LVxcdFxcdFxcdFxcdFxcdTAwMjZ1cGdyYWRlX3dyaXRlLCBcXHUwMDI2cGFnZSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11X2hvc3QuYz0zMjA9c3RhdGljIGlubGluZSBpbnQga3ZtcHBjX2U1MDBfc2hhZG93X21hcChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdV9ob3N0LmMtMzU0LVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXVfaG9zdC5jOjM1NTpcXHRwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihzbG90LCBnZm4sIEZPTExfV1JJVEUsIFxcdTAwMjZ3cml0YWJsZSwgXFx1MDAyNnBhZ2UpO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXVfaG9zdC5jLTM1Ni1cXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pKSB7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz01MzY9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTU5OS1cXHQgKiBSZWFkIG1tdV9pbnZhbGlkYXRlX3NlcSBzbyB0aGF0IEtWTSBjYW4gZGV0ZWN0IGlmIHRoZSByZXN1bHRzIG9mXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NjAwOlxcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0byBhY3F1aXJpbmdcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MDEtXFx0ICoga3ZtLVxcdTAwM2VtbXVfbG9jay5cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYxNS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo2MTY6XFx0aGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCBpc193cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYxNy1cXHRcXHRcXHRcXHRcXHUwMDI2d3JpdGFibGUsIFxcdTAwMjZwYWdlKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jPTMzPWludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtNzMtXFx0XFx0XFx0c2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZi1cXHUwMDNlZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzo3NDpcXHRcXHRmLVxcdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihzbG90LCBmLVxcdTAwM2VnZm4sIGZvbGwsIFxcdTAwMjZmLVxcdTAwM2V3cml0YWJsZSwgXFx1MDAyNmYtXFx1MDAzZXBhZ2UpO1xcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTc1LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtODctXFx0XFx0XFx0Zm9sbCBcXHUwMDI2PSB+Rk9MTF9OT1dBSVQ7XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6ODg6XFx0XFx0XFx0Zi1cXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oc2xvdCwgZi1cXHUwMDNlZ2ZuLCBmb2xsLCBcXHUwMDI2Zi1cXHUwMDNld3JpdGFibGUsIFxcdTAwMjZmLVxcdTAwM2VwYWdlKTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy04OS1cXHRcXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYz0xMjk9aW50IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLCBnZm5fdCBnZm4sIGJvb2wgdylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTEzNS1cXHRmLVxcdTAwM2VnZm4gPSBnZm47XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTM2OlxcdGYtXFx1MDAzZXBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgZm9sbCwgXFx1MDAyNmYtXFx1MDAzZXdyaXRhYmxlLCBcXHUwMDI2Zi1cXHUwMDNlcGFnZSk7XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTM3LVxcdGlmIChpc19ub3Nsb3RfcGZuKGYtXFx1MDAzZXBmbikpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2NTY9c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjY0LVxcdGZvbGwgfD0gRk9MTF9OT1dBSVQ7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjY1OlxcdGZhdWx0LVxcdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cXHUwMDNlc2xvdCwgZmF1bHQtXFx1MDAzZWdmbiwgZm9sbCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NjYtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZmYXVsdC1cXHUwMDNlbWFwX3dyaXRhYmxlLCBcXHUwMDI2ZmF1bHQtXFx1MDAzZXJlZmNvdW50ZWRfcGFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2OTQtXFx0Zm9sbCBcXHUwMDI2PSB+Rk9MTF9OT1dBSVQ7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0Njk1OlxcdGZhdWx0LVxcdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cXHUwMDNlc2xvdCwgZmF1bHQtXFx1MDAzZWdmbiwgZm9sbCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2OTYtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZmYXVsdC1cXHUwMDNlbWFwX3dyaXRhYmxlLCBcXHUwMDI2ZmF1bHQtXFx1MDAzZXJlZmNvdW50ZWRfcGFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY5NDY9dm9pZCB2bXhfc2V0X2FwaWNfYWNjZXNzX3BhZ2VfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY5ODctXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2OTg4OlxcdHBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKHNsb3QsIGdmbiwgRk9MTF9XUklURSwgXFx1MDAyNndyaXRhYmxlLCBcXHUwMDI2cmVmY291bnRlZF9wYWdlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY5ODktXFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSlcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjg1PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMzEwLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMzExOmt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEzMTItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBmb2xsLCBib29sICp3cml0YWJsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMzE1PXN0YXRpYyBpbmxpbmUga3ZtX3Bmbl90IGt2bV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMzE4LXtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTMxOTpcXHRyZXR1cm4gX19rdm1fZmF1bHRpbl9wZm4oa3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKSwgZ2ZuLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMzIwLVxcdFxcdFxcdFxcdCB3cml0ZSA/IEZPTExfV1JJVEUgOiAwLCB3cml0YWJsZSwgcmVmY291bnRlZF9wYWdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzAzMj1zdGF0aWMga3ZtX3Bmbl90IGt2bV9mb2xsb3dfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDUwLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1MTprdm1fcGZuX3QgX19rdm1fZmF1bHRpbl9wZm4oY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGZvbGwsIGJvb2wgKndyaXRhYmxlLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDcwLX1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNzE6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fa3ZtX2ZhdWx0aW5fcGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjMyLjMyNzQzNTg4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTgwNTIwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gYF9fa3ZtX2ZhdWx0aW5fcGZuYCBpcyBhIEtWTSBpbnRlcm5hbCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgYSB1c2VmdWwgcG9pbnQgdG8gc3RhcnQgbG9va2luZyBhdC4gTGV0J3Mgc2VlLi4uIHRoZSByZWFsIGludGVyZXN0aW5nIHBvaW50IGhlcmUgaXMgdGhlIGZvY3VzIG9uIE1NSU8gb3BlcmF0aW9ucy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhvc2UgYHMzOTBfcGNpX21taW9fd3JpdGVgIGFuZCBgczM5MF9wY2lfbW1pb19yZWFkYCBzeXNjYWxscy4gUmlnaHQsIHRoZXkgKmFyZSogc3lzY2FsbHMsIHdoaWNoIG1lYW5zIFN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhlbSBkaXJlY3RseSBpZiB0aGV5J3JlIGRlc2NyaWJlZCBpbiB0aGUgc3l6bGFuZyBkZWZpbml0aW9uLiBIbW0sIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBpcyBkZWZpbml0ZWx5IGEgc3lzY2FsbC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGFyZSB0aGVzZSB3b3J0aCBmdXp6aW5nPyBZZXMsIG9mIGNvdXJzZSwgdGhleSBhcmUgc3lzY2FsbHMuXG5cbkFoLCBidXQgdGhleSBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBzcGVjaWZpYyB0byBzMzkwLiBUaGF0J3MgYSBiaXQgbGltaXRpbmcuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGdvb2QgbmV3cywgYXMgYSBjb3JlIE1NIG1vZGlmaWNhdGlvbiBvcGVucyB1cCBtYW55IGZ1enppbmcgcGF0aHMuIEkgY2FuIHJlYWNoIHRoaXMgdmlhIEtWTSwgVkZJTywgQUNSTiwgYW5kIGV2ZW4gdGhlIGdlbmVyaWMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIHBhdGguIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpdHNlbGYgaXMgdXNlZCBieSBgL2Rldi9tZW1gICh2aWEgYG1tYXBfbWVtX29wc2ApLCBQQ0kgTU1JTyBtYXBwaW5nIChgcGNpX3BoeXNfdm1fb3BzYCksIGFuZCBVSU8gKGB1aW9fcGh5c2ljYWxfdm1fb3BzYCkuIFNvLCBJIHNob3VsZCBiZSBhYmxlIHRvIGZ1enogdGhlIE1NSU8gbG9naWMgdGhyb3VnaCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuIFRoYXTigJlzIGEgbXVjaCBtb3JlIGdlbmVyYWwgYXBwcm9hY2guXG5cbk9rYXksIG5vdyBsZXQncyBnbyBhbmQgY2hlY2sgd2hvIGNhbGxzIGBmb2xsb3dfcGZubWFwX3N0YXJ0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6MzguMzg1NDkyMDM3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU3MDEyNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGxvd19wZm5tYXBfc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jPTEyOD1TWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb193cml0ZSwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTE4My1cXHRhcmdzLndyaXRlX2ZhdWx0ID0gdHJ1ZTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM6MTg0OlxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODUtXFx0aWYgKHJldCkge1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODYtXFx0XFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVxcdTAwM2VtbSwgbW1pb19hZGRyLCBGQVVMVF9GTEFHX1dSSVRFLCBOVUxMKTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM6MTg3OlxcdFxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYz0yODQ9U1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fcmVhZCwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTMzNi1cXHRhcmdzLndyaXRlX2ZhdWx0ID0gZmFsc2U7XFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjMzNzpcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzM4LVxcdGlmIChyZXQpIHtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzM5LVxcdFxcdGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cXHUwMDNlbW0sIG1taW9fYWRkciwgMCwgTlVMTCk7XFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjM0MDpcXHRcXHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzQxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTU0MD1zdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo1NTE6XFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NjQtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo1NjU6XFx0XFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NjYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmM9MTU2PWludCBhY3JuX3ZtX3JhbV9tYXAoc3RydWN0IGFjcm5fdm0gKnZtLCBzdHJ1Y3QgYWNybl92bV9tZW1tYXAgKm1lbW1hcClcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTkyLVxcbmRyaXZlcnMvdmlydC9hY3JuL21tLmM6MTkzOlxcdFxcdFxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbmRyaXZlcnMvdmlydC9hY3JuL21tLmMtMTk0LVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzEzND1zdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0zMTY2LX07XFxuaW5jbHVkZS9saW51eC9tbS5oOjMxNjc6aW50IGZvbGxvd19wZm5tYXBfc3RhcnQoc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqYXJncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTMxNjgtdm9pZCBmb2xsb3dfcGZubWFwX2VuZChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY4MDg9c3RhdGljIGlubGluZSB2b2lkIHBmbm1hcF9sb2NrZGVwX2Fzc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jLTY4MjItLyoqXFxubW0vbWVtb3J5LmM6NjgyMzogKiBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgLSBMb29rIHVwIGEgcGZuIG1hcHBpbmcgYXQgYSB1c2VyIHZpcnR1YWwgYWRkcmVzc1xcbm1tL21lbW9yeS5jLTY4MjQtICogQGFyZ3M6IFBvaW50ZXIgdG8gc3RydWN0IEBmb2xsb3dfcGZubWFwX2FyZ3NcXG4tLVxcbm1tL21lbW9yeS5jLTY4NTQtICovXFxubW0vbWVtb3J5LmM6Njg1NTppbnQgZm9sbG93X3Bmbm1hcF9zdGFydChzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICphcmdzKVxcbm1tL21lbW9yeS5jLTY4NTYte1xcbi0tXFxubW0vbWVtb3J5LmMtNjk0Ny19XFxubW0vbWVtb3J5LmM6Njk0ODpFWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX3N0YXJ0KTtcXG5tbS9tZW1vcnkuYy02OTQ5LVxcbm1tL21lbW9yeS5jLTY5NTAtLyoqXFxubW0vbWVtb3J5LmM6Njk1MTogKiBmb2xsb3dfcGZubWFwX2VuZCgpOiBFbmQgYSBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgcHJvY2Vzc1xcbm1tL21lbW9yeS5jLTY5NTItICogQGFyZ3M6IFBvaW50ZXIgdG8gc3RydWN0IEBmb2xsb3dfcGZubWFwX2FyZ3NcXG5tbS9tZW1vcnkuYy02OTUzLSAqXFxubW0vbWVtb3J5LmM6Njk1NDogKiBNdXN0IGJlIHVzZWQgaW4gcGFpciBvZiBmb2xsb3dfcGZubWFwX3N0YXJ0KCkuICBTZWUgdGhlIHN0YXJ0KCkgZnVuY3Rpb25cXG5tbS9tZW1vcnkuYy02OTU1LSAqIGFib3ZlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbi0tXFxubW0vbWVtb3J5LmM9Njk3OT1pbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtNjk5NC1yZXRyeTpcXG5tbS9tZW1vcnkuYzo2OTk1OlxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG5tbS9tZW1vcnkuYy02OTk2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubW0vbWVtb3J5LmMtNzAwNS1cXG5tbS9tZW1vcnkuYzo3MDA2OlxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG5tbS9tZW1vcnkuYy03MDA3LVxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yOTM5PXN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk1Ni1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NTc6XFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk1OC1cXHRpZiAocikge1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTcxLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk3MjpcXHRcXHRyID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxcdFxcdGlmIChyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjQwLjY0MjUxMDg5MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIzMjI5NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGZvbGxvd19wZm5tYXBfc3RhcnRgIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5Pa2F5LCBzbyB0aGUgYGZvbGxvd19wZm5tYXBfc3RhcnRgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZS4gSXQncyB0aGUgY2VudHJhbCBwb2ludCBvZiB0aGlzIHBhdGNoLCBhcyBpdCdzIHRoZSB0YXJnZXQgdGhhdCBnZXRzIGNhbGxlZCBieSB0aGUgdXBkYXRlZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBCYXNlZCBvbiB0aGUgY29kZSwgaXQncyB1c2VkIGJ5IHNldmVyYWwgY29yZSBjb21wb25lbnRzOiBgczM5MF9wY2lfbW1pb193cml0ZWAsIGBzMzkwX3BjaV9tbWlvX3JlYWRgLCBgZm9sbG93X2ZhdWx0X3BmbmAgZm9yIFZGSU8sIGBhY3JuX3ZtX3JhbV9tYXBgIGZvciBBQ1JOLCB0aGUgZ2VuZXJpYyBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9uIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBodmFfdG9fcGZuX3JlbWFwcGVkYCB3aXRoaW4gS1ZNLlxuXG5HaXZlbiB0aGF0LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAsIHRvbywgdGhleSBzaG91bGQgYmUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEFuZCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIHNlZSBpZiBgdmZpb19pb21tdV90eXBlMV9pb2N0bGAgYW5kIGBhY3JuX2Rldl9pb2N0bGBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDU6NDUuMjY1NzQzNTcyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcxMDY2NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9faW9tbXVfdHlwZTFfaW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0yOTY2PXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMwNzktXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzozMDgwOnN0YXRpYyBsb25nIHZmaW9faW9tbXVfdHlwZTFfaW9jdGwodm9pZCAqaW9tbXVfZGF0YSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMwODEtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTMyNTE9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2lvbW11X2RyaXZlcl9vcHMgdmZpb19pb21tdV9kcml2ZXJfb3BzX3R5cGUxID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0zMjU1LVxcdC5yZWxlYXNlXFx0XFx0PSB2ZmlvX2lvbW11X3R5cGUxX3JlbGVhc2UsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzozMjU2OlxcdC5pb2N0bFxcdFxcdFxcdD0gdmZpb19pb21tdV90eXBlMV9pb2N0bCxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTMyNTctXFx0LmF0dGFjaF9ncm91cFxcdFxcdD0gdmZpb19pb21tdV90eXBlMV9hdHRhY2hfZ3JvdXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjQ3LjUzNjgxNTc5N1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE0NDY4NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVGhlIFN5c3RlbSBpcyBGcm96ZW4qKlxuXG5IbW0sIHRoaXMgZmVlbHMuLi4gc3RhdGljLiBJdCdzIGxpa2UgdGhlIHN5c3RlbSBpcyBjb21wbGV0ZWx5IHVucmVzcG9uc2l2ZSwgd2hpY2ggaXMgY29uY2VybmluZy4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHNvbWV0aGluZyBoYXMgZ3JvdW5kIHRvIGEgaGFsdC4gV2UgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgYXR0ZW50aW9uIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBjb3JlIGludGVyZmFjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgYWNybl9kZXZfaW9jdGxgLiBUaGF0IGZ1bmN0aW9uIGNhbGwgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGhvbGRpbmcgdXAgdGhlIHdvcmtzLCBlc3BlY2lhbGx5IGlmIHRoZXJlIGlzIGFuIGlzc3VlIHdpdGggdGhlIHVuZGVybHlpbmcgZGV2aWNlIG9yIGFueSByZWxhdGVkIGxvY2tpbmcuIEl0J3MgYSBmdW5kYW1lbnRhbCBlbnRyeSBwb2ludCwgYW5kIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI5NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjUwLjQ1MTI4Nzg1MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4OTM1MTM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3JuX2Rldl9pb2N0bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnQvYWNybi9oc20uYz00Mz1zdGF0aWMgaW50IHBtY21kX2lvY3RsKHU2NCBjbWQsIHZvaWQgX191c2VyICp1cHRyKVxcbi0tXFxuZHJpdmVycy92aXJ0L2Fjcm4vaHNtLmMtMTA3LSAqL1xcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jOjEwODpzdGF0aWMgbG9uZyBhY3JuX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy0xMDktXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBpb2N0bF9wYXJhbSlcXG4tLVxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jPTQ5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3JuX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvYWNybi9oc20uYy00OTMtXFx0LnJlbGVhc2VcXHQ9IGFjcm5fZGV2X3JlbGVhc2UsXFxuZHJpdmVycy92aXJ0L2Fjcm4vaHNtLmM6NDk0OlxcdC51bmxvY2tlZF9pb2N0bCA9IGFjcm5fZGV2X2lvY3RsLFxcbmRyaXZlcnMvdmlydC9hY3JuL2hzbS5jLTQ5NS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NTo1Mi42NDA2NDMzNTlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyNjg5ODkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIFNlbGVjdGluZyBLZXJuZWwgQVBJIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHRoaXMgc2l0dWF0aW9uIGZlZWxzIGEgYml0IHN0YXRpYywgYnV0IGxldCdzIGJyZWFrIGl0IGRvd24gbWV0aG9kaWNhbGx5LiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgQVBJIGVudHJ5IHBvaW50cyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhOiBub24tc3RhdGljLCBub24taW5saW5lZC4gQ29uc2lkZXJpbmcgdGhhdCwgSSBzZWUgdGhhdCB0aGUgcG90ZW50aWFsIGZ1bmN0aW9ucyBhcmU6XG4qICAgYGZvbGxvd19wZm5tYXBfc3RhcnRgXG4qICAgYGdlbmVyaWNfYWNjZXNzX3BoeXNgXG4qICAgYF9fa3ZtX2ZhdWx0aW5fcGZuYFxuXG5JJ2xsIHJldmlzaXQgYF9fa3ZtX2ZhdWx0aW5fcGZuYC4gSXQncyBleHBvcnRlZCwgYnV0IGZvciBLVk0ncyBpbnRlcm5hbCB1c2UuIE9rYXkuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgZml0IHRoZSBiaWxsPyBZZXMsIGBnZW5lcmljX2FjY2Vzc19waHlzYCBhbmQgYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFyZSBib3RoIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLlxuXG5XaGF0IGFib3V0IGBzMzkwX3BjaV9tbWlvX3dyaXRlYD8gU2luY2UgdGhpcyBpcyBhIHN5c2NhbGwsIGl0IHdvdWxkIGJlIGEgdmVyeSBnb29kIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBzZWVtcyBwcm9taXNpbmcsIGJ1dCBJIHNlZSB0aGF0IGl0IGlzIHNwZWNpZmljIHRvIHMzOTAuIFN5emthbGxlciBjYW4gZnV6eiBpdCBpZiBpdCBpcyBydW5uaW5nIG9uIHMzOTAuXG5cbkFuZCB0aGUgcHJvbXB0IHNheXM6IFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXCIuIFRoaXMgbWVhbnMgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBgX19rdm1fZmF1bHRpbl9wZm5gIGFyZSBwcm9taXNpbmcuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgSSBoYXZlIHRvIHdvcmsgd2l0aC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6XG4qICAgYENPTkZJR19LVk1gXG4qICAgYENPTkZJR19WRklPYFxuKiAgIGBDT05GSUdfVkZJT19HUk9VUGBcbiogICBgQ09ORklHX1ZGSU9fQ09OVEFJTkVSYFxuKiAgIGBDT05GSUdfVkZJT19JT01NVV9UWVBFMWBcbiogICBgQ09ORklHX0FDUk5fR1VFU1RgXG5cbldhaXQsIGBBQ1JOX0dVRVNUYCBpcyBzcGVjaWZpYyB0byB4ODYuIGBWRklPX0lPTU1VX1RZUEUxYCBpcyBzZWxlY3RlZCBieSBgVkZJT19DT05UQUlORVJgIGlmIGBNTVUgXHUwMDI2XHUwMDI2IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpYC4gU28gdGhpcyBtZWFucyBJIGNhbiBzaW1wbGlmeSB0aGUgY29uZmlndXJhdGlvbi4gQWxsIEkgbmVlZCB0byBlbmFibGUgYXJlOiBgVkZJT2AsIGBWRklPX0dST1VQYCwgYFZGSU9fQ09OVEFJTkVSYCwgYFZGSU9fSU9NTVVfVFlQRTFgLiBBbmQgb2YgY291cnNlLCBgS1ZNYC5cblxuSSdsbCBjaGVjayB0aGUgS1ZNIGRlcGVuZGVuY2llcyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzIzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ1OjU5LjM2NzU0NTI1NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4OTk0ODgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc9MTY9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTctXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MzE6Y29uZmlnIEtWTV9NSVBTX0RFQlVHX0NPUDBfQ09VTlRFUlNcXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiTWFpbnRhaW4gY291bnRlcnMgZm9yIENPUDAgYWNjZXNzZXNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNjpjb25maWcgS1ZNX0JPT0szU19IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzAtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozNDpjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzktXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0NTpjb25maWcgS1ZNX0JPT0szU18zMlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzMyIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjUtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyNjpjb25maWcgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIkRldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDMtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgdGltaW5nIGZvciBoeXBlcnZpc29yIHJlYWwtbW9kZSBjb2RlIChmb3IgUE9XRVI4KVxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTYtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE1Nzpjb25maWcgS1ZNX0JPT0szU19IVl9ORVNURURfUE1VX1dPUktBUk9VTkRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIk5lc3RlZCBMMCBob3N0IHdvcmthcm91bmQgZm9yIEwxIEtWTSBob3N0IFBNVSBoYW5kbGluZyBidWdcXFwiIGlmIEVYUEVSVFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkh5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9CT09LRV9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODUtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODYtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4Nzpjb25maWcgS1ZNX0VYSVRfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJEZXRhaWxlZCBleGl0IHRpbWluZ1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTktXFx0Ym9vbCBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTM6Y29uZmlnIEtWTV9FNTAwTUNcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjE0LVxcdGJvb2wgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fTVBJQ1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbCBcXFwiS1ZNIGluLWtlcm5lbCBNUElDIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDAtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQyLVxcdGJvb2wgXFxcIktWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTE6Y29uZmlnIEtWTV9YSVZFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1Mi1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc9MjI9c291cmNlIFxcXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXFxcIlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yMy1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9ODI2PXNvdXJjZSBcXFwiYXJjaC94ODYveGVuL0tjb25maWdcXFwiXFxuYXJjaC94ODYvS2NvbmZpZy04MjctXFxuYXJjaC94ODYvS2NvbmZpZzo4Mjg6Y29uZmlnIEtWTV9HVUVTVFxcbmFyY2gveDg2L0tjb25maWctODI5LVxcdGJvb2wgXFxcIktWTSBHdWVzdCBzdXBwb3J0IChpbmNsdWRpbmcga3ZtY2xvY2spXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMy1cXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cXG52aXJ0L2t2bS9LY29uZmlnLTUtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNDItXFxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cXG52aXJ0L2t2bS9LY29uZmlnLTQ0LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy00NS1cXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcXG52aXJ0L2t2bS9LY29uZmlnLTQ3LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxcbnZpcnQva3ZtL0tjb25maWc6NTA6Y29uZmlnIEtWTV9BU1lOQ19QRl9TWU5DXFxudmlydC9rdm0vS2NvbmZpZy01MS0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz01OT1jb25maWcgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy02MS1cXG52aXJ0L2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fVkZJT1xcbnZpcnQva3ZtL0tjb25maWctNjMtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9NjU9Y29uZmlnIEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy02Ny1cXG52aXJ0L2t2bS9LY29uZmlnOjY4OmNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG52aXJ0L2t2bS9LY29uZmlnLTY5LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy03MC1cXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0vS2NvbmZpZy03Mi0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNzMtXFxudmlydC9rdm0vS2NvbmZpZzo3NDpjb25maWcgS1ZNX0NPTVBBVFxcbnZpcnQva3ZtL0tjb25maWctNzUtICAgICAgIGRlZl9ib29sIHlcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9OTE9Y29uZmlnIEhBVkVfS1ZNX1BNX05PVElGSUVSXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxcbnZpcnQva3ZtL0tjb25maWc6OTQ6Y29uZmlnIEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxudmlydC9rdm0vS2NvbmZpZy05NS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctOTYtXFxudmlydC9rdm0vS2NvbmZpZzo5Nzpjb25maWcgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbnZpcnQva3ZtL0tjb25maWctOTgtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxcbnZpcnQva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXFxudmlydC9rdm0vS2NvbmZpZy0xMDEtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG52aXJ0L2t2bS9LY29uZmlnLTEwNC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctMTA1LVxcbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NjowMS40NTc0OTkzMjNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MDE1NDMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWxpemF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIGBLVk1gLi4uIHllYWgsIHRoYXQgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIGBWSVJUVUFMSVpBVElPTmAgdW1icmVsbGEuIEl0J3MgYSBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAuIFRoZXJlZm9yZSwgYW55IGFuYWx5c2lzIG9yIGNvbmZpZ3VyYXRpb24gSSdtIGRvaW5nIHJlbGF0ZWQgdG8gYEtWTWAgaW5oZXJlbnRseSByZXF1aXJlcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgYW5kIGV4YW1pbmF0aW9uIG9mIHRoZSBicm9hZGVyIGBWSVJUVUFMSVpBVElPTmAgcHJpbmNpcGxlcyBhbmQgdGVjaG5vbG9naWVzLiBUaGUgZGVwZW5kZW5jeSBpcyBjbGVhci4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIGBLVk1gIHBhdGgsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIGBWSVJUVUFMSVpBVElPTmAgaXMgY3VycmVudCBhbmQgdGhhdCBJIGhhdmUgaWRlbnRpZmllZCB0aGUgcmVsZXZhbnQgY29tcG9uZW50cyB0aGF0IHVuZGVycGluIGFueSB3b3JrIEknbSB1bmRlcnRha2luZy4gTGV0IG1lIHB1bGwgdXAgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgY2hlY2sgbXkgZXhpc3Rpbmcga25vd2xlZGdlIGJhc2UgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYWxpZ25lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBhdCB0aGUgYFZJUlRVQUxJWkFUSU9OYCBsYXllciB0aGF0IHdpbGwgaW1wYWN0IGBLVk1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk1NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjA0LjU5NzY1NzI3NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NzU2MjQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTctXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo4Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy03LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc9NT1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTYtXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy04LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9Nj1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy03LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy05LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo3Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctOC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjA2LjY4NTIyODU0M1oiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTY3MzAxNzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogVmlydHVhbGl6YXRpb24gYW5kIFZGSU8qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBhIHZpcnR1YWxpemF0aW9uIHNvbHV0aW9uLiBUaGUgcHJvYmxlbSBkaWN0YXRlcyBpdCDigJMgd2UgKm5lZWQqIHZpcnR1YWxpemF0aW9uLiBOb3csIGdpdmVuIHRoZSBpbXBsaWVkIHJlcXVpcmVtZW50cywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHBhcnRpY3VsYXJseSBwb3RlbnQgY29udGVuZGVyOiBgVkZJT2AuIExldCdzIGV4cGxvcmUgaXRzIGNhcGFiaWxpdGllcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgaXNzdWUgYXQgaGFuZC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgVkZJT2AgYW5kIHNlZSBpZiBpdCdzIHRoZSByaWdodCBmaXQgZm9yIHRoaXMgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1Nzk2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDY6MDkuMjUyNTM0NzE0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc4MzYxNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9LY29uZmlnPTgwOT1jb25maWcgQVBfREVCVUdcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTgyMi1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4MjM6Y29uZmlnIFZGSU9fQ0NXXFxuYXJjaC9zMzkwL0tjb25maWctODI0LVxcdGRlZl90cmlzdGF0ZSBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXFxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODM1LVxcdGRlZl90cmlzdGF0ZSBuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmZpby9LY29uZmlnOjI6bWVudWNvbmZpZyBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9LY29uZmlnPTE2PWlmIFZGSU9cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoxNzpjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzozMDpjb25maWcgVkZJT19HUk9VUFxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zOS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo0MDpjb25maWcgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy00MS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjb250YWluZXIgL2Rldi92ZmlvL3ZmaW9cXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz01Mj1pZiBWRklPX0NPTlRBSU5FUlxcbmRyaXZlcnMvdmZpby9LY29uZmlnOjUzOmNvbmZpZyBWRklPX0lPTU1VX1RZUEUxXFxuZHJpdmVycy92ZmlvL0tjb25maWctNTQtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU2LVxcbmRyaXZlcnMvdmZpby9LY29uZmlnOjU3OmNvbmZpZyBWRklPX0lPTU1VX1NQQVBSX1RDRVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU4LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz02MT1lbmRpZlxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTYyLVxcbmRyaXZlcnMvdmZpby9LY29uZmlnOjYzOmNvbmZpZyBWRklPX05PSU9NTVVcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02NC1cXHRib29sIFxcXCJWRklPIE5vLUlPTU1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy03Ny1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo3ODpjb25maWcgVkZJT19WSVJRRkRcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy03OS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo4Mzpjb25maWcgVkZJT19ERUJVR0ZTXFxuZHJpdmVycy92ZmlvL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRXhwb3J0IFZGSU8gaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctNy1cXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWc6ODpjb25maWcgVkZJT19DRFhcXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBDRFggYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9MT1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0zLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo0OmNvbmZpZyBWRklPX0ZTTF9NQ1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctMi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnOjM6Y29uZmlnIFZGSU9fTURFVlxcbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1OmNvbmZpZyBWRklPX1BDSV9DT1JFXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMS1cXHRkZWZfYm9vbCB5IGlmICFTMzkwXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MzQ6Y29uZmlnIFZGSU9fUENJX0lHRFxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIEludGVsIGdyYXBoaWNzIChHVlQtZClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9NDU9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00OC1cXHRib29sIFxcXCJWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU4OmNvbmZpZyBWRklPX1BDSV9ETUFCVUZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnPTI9bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBwbGF0Zm9ybSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo1OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JBU0VcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy04LVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnOjk6Y29uZmlnIFZGSU9fUExBVEZPUk1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBwbGF0Zm9ybSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0xOC1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzoxOTpjb25maWcgVkZJT19BTUJBXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQU1CQSBkZXZpY2VzIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnPTI9aWYgVkZJT19QTEFURk9STVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjM6Y29uZmlnIFZGSU9fUExBVEZPUk1fQ0FMWEVEQVhHTUFDX1JFU0VUXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBjYWx4ZWRhIHhnbWFjIHJlc2V0IChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUExBVEZPUk1fQU1EWEdCRV9SRVNFVFxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIEFNRCBYR0JFIHJlc2V0IChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjE3OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JDTUZMRVhSTV9SRVNFVFxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIEJyb2FkY29tIEZsZXhSTSByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjExLjMzMDkwMzE3MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM0ODczMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gVmlydHVhbGl6YXRpb24gRnVuZGFtZW50YWxzKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgKlZGSU8qLCBzcGVjaWZpY2FsbHkgdGhlIGNvcmUgY29tcG9uZW50czogYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAsIGFuZCB0aGUgSU9NTVUgYXNwZWN0LCBgVkZJT19JT01NVV9UWVBFMWAuIFRoYXQncyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIFBDSSBwYXNzdGhyb3VnaCwgd2hpY2ggaXMgY3J1Y2lhbC4gQW5kIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGF0LCBpdCBuYXR1cmFsbHkgbWVhbnMgd2UncmUgYWxzbyB0b3VjaGluZyBvbiAqS1ZNKiwgdGhlIGtlcm5lbC1iYXNlZCB2aXJ0dWFsIG1hY2hpbmUgaXRzZWxmLiBDbGVhcmx5LCB0aGUgb3ZlcmFyY2hpbmcgY29uY2VwdCBoZXJlIGlzICpWSVJUVUFMSVpBVElPTiouIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5HaXZlbiB0aGlzIGNvbnRleHQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25zaWRlciAqQUNSTl9HVUVTVCouIFdlIG5lZWQgdG8gc2VlIGhvdyBBQ1JOIGludGVyYWN0cyB3aXRoIHRoZXNlIGNvbmNlcHRzLiBMZXQncyBzZWUgaG93IHRoYXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODYxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDY6MTQuNTY1Nzc5NjIzWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk2OTYzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBQ1JOX0dVRVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9ODY4PWNvbmZpZyBKQUlMSE9VU0VfR1VFU1RcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODc2LVxcbmFyY2gveDg2L0tjb25maWc6ODc3OmNvbmZpZyBBQ1JOX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy04NzgtXFx0Ym9vbCBcXFwiQUNSTiBHdWVzdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NjoxNi43NjI3NDkwMjlaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAwMTc1MTAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBLVk0gRm9jdXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBmdXp6aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBLVk0sIGFuZCBWRklPIGZ1bmN0aW9uYWxpdHkuIExldCdzIHNlZS4uLiB0aGlzIHNwZWNpZmljIHg4NiBzdHVmZiwgd2UgY2FuIHNraXAgaXQgZm9yIG5vdzsgbm90IHJlbGV2YW50IHRvIHRoZSBjb3JlIGNvbXBvbmVudHMgd2UncmUgdGFyZ2V0aW5nLiBUaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzIGlzIGxpa2VseSBpbiBgbW0vbWVtb3J5LmNgLiBTbyB3ZSBzaG91bGQgYmUgZm9jdXNpbmcgb24gYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AsIGFuZCBgX19rdm1fZmF1bHRpbl9wZm5gLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgYF9fa3ZtX2ZhdWx0aW5fcGZuYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFllcCwgYEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTGAgdGVsbHMgdXMgaXQncyBhdmFpbGFibGUsIGl0J3MgYSBjb3JlIEtWTSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggcGFnZSBmYXVsdHMuIEdvb2QgY2FuZGlkYXRlIGZvciBhIGZ1enogdGFyZ2V0LlxuXG5Ob3csIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gVGhhdCdzIGV4cG9ydGVkIHZpYSBgRVhQT1JUX1NZTUJPTF9HUExgLCBzbyBpdOKAmXMgdXNlZCBieSB0aGluZ3MgbGlrZSBgL2Rldi9tZW1gIGFuZCBQQ0kgbW1hcC4gSW1wb3J0YW50LlxuXG5BbmQgZmluYWxseSwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbHNvIGBFWFBPUlRfU1lNQk9MX0dQTGAuXG5cblNvIG91ciB0YXJnZXQgc3ltYm9scyBhcmUgc2V0OiBgZm9sbG93X3Bmbm1hcF9zdGFydGAsIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBfX2t2bV9mYXVsdGluX3BmbmAuXG5cbkFscmlnaHQsIGNvbmZpZy13aXNlLCB3ZSBuZWVkIGBWSVJUVUFMSVpBVElPTmAsIGBLVk1gLCBgVkZJT2AsIGBWRklPX0dST1VQYCwgYFZGSU9fQ09OVEFJTkVSYCwgYW5kIGBWRklPX0lPTU1VX1RZUEUxYC4gQnV0IHdhaXQsIGBWRklPX0lPTU1VX1RZUEUxYCBpcyBzZWxlY3RlZCBieSBgVkZJT19DT05UQUlORVJgIGlmIE1NVSBhbmQgWDg2L1MzOTAvQVJNL0FSTTY0LiBXZSBzaG91bGQgYmUgZ29vZCB3aXRoIGp1c3QgZW5hYmxpbmcgYFZGSU9fQ09OVEFJTkVSYC4gTGV0J3MgY29uZmlybSBpbiBgZHJpdmVycy92ZmlvL0tjb25maWdgLiBZdXAsIGBWRklPX0NPTlRBSU5FUmAgZGVwZW5kcyBvbiBgVkZJT19HUk9VUGAgYW5kIGlzIGRlZmF1bHQgeSBpZiBWRklPIGFuZCBNTVUuIE1pZ2h0IGFzIHdlbGwgYmUgZXhwbGljaXQgYW5kIGVuYWJsZSB0aG9zZS5cblxuQW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBXZSBuZWVkIGBDT05GSUdfUENJYCBmb3IgYHBjaV9waHlzX3ZtX29wc2Agd2hpY2ggdXNlIGBnZW5lcmljX2FjY2Vzc19waHlzYCwgYW5kIGBDT05GSUdfREVWTUVNYCBmb3IgYC9kZXYvbWVtYCB3aGljaCBhbHNvIHVzZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBCdXQuLi4gZG9lcyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZ2V0IGNvbXBpbGVkIGlmIGBDT05GSUdfTU1VYCBpcyBlbmFibGVkPyBUaW1lIHRvIGNoZWNrIGBtbS9tZW1vcnkuY2AgYWdhaW4gYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjI1Ljc2NDUwMzgzMVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MDUxNzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY2R4L2NkeC5jPTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNkeF9waHlzX3ZtX29wcyA9IHtcXG5kcml2ZXJzL2NkeC9jZHguYy02NjMtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2R4L2NkeC5jOjY2NDpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL2NkeC9jZHguYy02NjUtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2hhci9tZW0uYzozMjE6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIyLSNlbmRpZlxcbi0tXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDYtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYzo4MDc6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwOC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvcGNpL21tYXAuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9waHlzX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3BjaS9tbWFwLmMtMTktI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvcGNpL21tYXAuYzoyMDpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL3BjaS9tbWFwLmMtMjEtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3Vpby91aW8uYz03MzY9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fcGh5c2ljYWxfdm1fb3BzID0ge1xcbmRyaXZlcnMvdWlvL3Vpby5jLTczNy0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy91aW8vdWlvLmM6NzM4OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOS0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD03ODM9c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC04MzUtXFx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XFxuaW5jbHVkZS9saW51eC9tbS5oOjgzNjpcXHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcXG5pbmNsdWRlL2xpbnV4L21tLmgtODM3LVxcdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzEzMD1jb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMTMxOmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMxMzItXFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpO1xcbi0tXFxubW0vbWVtb3J5LmM9Njk2ND1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XFxuLS1cXG5tbS9tZW1vcnkuYy02OTY3LS8qKlxcbm1tL21lbW9yeS5jOjY5Njg6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxubW0vbWVtb3J5LmMtNjk2OS0gKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbi0tXFxubW0vbWVtb3J5LmMtNjk3OC0gKi9cXG5tbS9tZW1vcnkuYzo2OTc5OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNjk4MC1cXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG4tLVxcbm1tL21lbW9yeS5jLTcwMjctfVxcbm1tL21lbW9yeS5jOjcwMjg6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XFxubW0vbWVtb3J5LmMtNzAyOS0jZW5kaWZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9NjMyPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY4NC1cXHQvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHlcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjY4NTpcXHQgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1Bcy4gU2VlIGFsc28gZ2VuZXJpY19hY2Nlc3NfcGh5cygpIGZvciBhIGdlbmVyaWNcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTY4Ni1cXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NjoyOC4wMTUwMjUyMDZaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDA4MjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UYCBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgc2VlbXMgdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIHdlIGhhdmUgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgZGVmaW5lZC4gVGhhdCBtZWFucyBpdCdzIHByb2JhYmx5IHVzaW5nIHByb3RlY3RlZCBtZW1vcnkgcmVnaW9ucyBpbiBzb21lIHdheS4gTGV0J3MgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHN0YXRlIG9mIGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgIGZpcnN0LCBhbmQgZXhhY3RseSB3aHkgdGhhdCdzIGEgZmFjdG9yIGhlcmUuIE5lZWQgdG8gZ28gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgd2hlcmUgdGhhdCdzIHNldCB3aXRoaW4gb3VyIGN1cnJlbnQgYnVpbGQgY29uZmlndXJhdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyAqYWN0dWFsbHkqIGdvaW5nIG9uIGluIHRoZSBjb2RlIGFuZCBob3cgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gcXVlc3Rpb24gY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtJ3MgY2FwYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ5MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjMxLjMwNTExMTM5NloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MjM1NzY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFWRV9JT1JFTUFQX1BST1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTI1OD1jb25maWcgVVNFUl9SRVRVUk5fTk9USUZJRVJcXG4tLVxcbmFyY2gvS2NvbmZpZy0yNjQtXFxuYXJjaC9LY29uZmlnOjI2NTpjb25maWcgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL0tjb25maWctMjY2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDY6MzMuNTQ3NDc3MTMyWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNzAzNjY0MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLiBBcmNoaXRlY3R1cmVzIHNlbGVjdCB0aGUgcmVsZXZhbnQgY29kZSwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cGxpY2l0bHkgZW5hYmxpbmcgaXQuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoZSBuZXcgd3JpdGUgZmF1bHQgaGFuZGxpbmcgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgIGlzIHJvYnVzdC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0cyB3aXRoIEtWTSwgVkZJTywgQUNSTiwgYW5kIGdlbmVyaWMgcGh5c2ljYWwgbWVtb3J5IGFjY2VzcywgYWxsIG9mIHdoaWNoIGFyZSBjcml0aWNhbCBrZXJuZWwgcGF0aHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGJyZWFrIGFueXRoaW5nLlxuXG5GaXJzdCwgSSBjaGVja2VkIGlmIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBuZWVkZWQgYSBzcGVjaWZpYyBjb25maWcsIGFuZCBpdCdzIGFsd2F5cyBjb21waWxlZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3MuIEJhc2VkIG9uIHdoZXJlIHRoZSBjb2RlIGxpdmVzIChgbW0vbWVtb3J5LmNgKSwgSSdtIHRoaW5raW5nOiBgVklSVFVBTElaQVRJT05gLCBgS1ZNYCwgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgdGhhbiB0aGF0LCBzbyBgVkZJT19JT01NVV9UWVBFMWAsIHNpbmNlIGl0J3MgdHJpc3RhdGUuXG5cblRoZW4gdGhlcmUncyBgQUNSTl9HVUVTVGAsIHdoaWNoIGlzIHg4Ni1zcGVjaWZpYywgYnV0IEkgY2FuIGFkZCBpdCB0b28sIG5vIGhhcm0gZG9uZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYganVzdCBgS1ZNYCBpcyBlbm91Z2ggb3IgaWYgSSBuZWVkIGBLVk1fWDg2YCwgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLiBgS1ZNYCBpcyBhIHRyaXN0YXRlLCBhbmQgYEtWTV9YODZgIGRlcGVuZHMgb24gYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYC4gU2luY2UgU3l6a2FsbGVyIHVzdWFsbHkgdGVzdHMgb24geDg2IHdpdGggS1ZNIGVuYWJsZWQsIEknbSBqdXN0IGxpc3RpbmcgYEtWTWAgZm9yIG5vdy5cblxuU28sIGhlcmUncyBteSBwbGFuOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogWWVzXG4qICAgKipSZWFzb25pbmc6KiogVGhpcyBwYXRjaCBhbHRlcnMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgaGFuZGxpbmcgd3JpdGUgZmF1bHRzIGluIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBhbmQgYHBmbm1hcF9hcmdzX3NldHVwYC4gVGhpcyBhZmZlY3RzIG11bHRpcGxlIHN1YnN5c3RlbXMgaW5jbHVkaW5nIEtWTSwgVkZJTywgQUNSTiwgYW5kIGdlbmVyaWMgcGh5c2ljYWwgbWVtb3J5IGFjY2Vzcy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgd3JpdGUgZmF1bHQgaGFuZGxpbmcgbG9naWMgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcy5cbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgZm9sbG93X3Bmbm1hcF9zdGFydGAgKFRoaXMgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQpXG4gICAgKiAgIGBnZW5lcmljX2FjY2Vzc19waHlzYCAoSXQncyBhIGdvb2QgZm9jdXMgc3ltYm9sKVxuICAgICogICBgX19rdm1fZmF1bHRpbl9wZm5gIChEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuKVxuKiAgICoqRW5hYmxlQ29uZmlnczoqKlxuICAgICogICBgVklSVFVBTElaQVRJT05gXG4gICAgKiAgIGBLVk1gXG4gICAgKiAgIGBWRklPYFxuICAgICogICBgVkZJT19HUk9VUGBcbiAgICAqICAgYFZGSU9fQ09OVEFJTkVSYFxuICAgICogICBgVkZJT19JT01NVV9UWVBFMWBcbiAgICAqICAgYEFDUk5fR1VFU1RgXG5cbkkgd2lsbCBkb3VibGUtY2hlY2sgYF9fa3ZtX2ZhdWx0aW5fcGZuYCwgYGZvbGxvd19wZm5tYXBfc3RhcnRgLCBhbmQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBUaGV5IGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBJIGxvb2tlZCBhdCBzb21lIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAsIGJ1dCB0aG9zZSBhcmUgczM5MCBzcGVjaWZpYyBzeXNjYWxscywgc28gSSBhbSBnb2luZyB0byBzdGljayB3aXRoIHRoZSBpbml0aWFsIHRocmVlIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhhdCdzIHRoZSBjb3JlLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODAxLCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Nzo0NC4yNTExNDU3MTlaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgyOTEzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0lPTU1VX1RZUEUxXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9sbG93X3Bmbm1hcF9zdGFydFwiLFxuICAgIFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiLFxuICAgIFwiX19rdm1fZmF1bHRpbl9wZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0lPTU1VX1RZUEUxXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9sbG93X3Bmbm1hcF9zdGFydFwiLFxuICAgIFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiLFxuICAgIFwiX19rdm1fZmF1bHRpbl9wZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBoYW5kbGluZyB3cml0ZSBmYXVsdHMgaW4gYGZvbGxvd19wZm5tYXBfc3RhcnRgIGFuZCBgcGZubWFwX2FyZ3Nfc2V0dXBgLiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgS1ZNLCBWRklPLCBBQ1JOLCBhbmQgZ2VuZXJpYyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyB3cml0ZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmwzc[1] Phase: Succeeded StartedAt: 2026-08-02 00:47:56 +0000 UTC FinishedAt: 2026-08-02 00:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 00:47:56 +0000 UTC FinishedAt: 2026-08-02 00:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2] Phase: Succeeded StartedAt: 2026-08-02 00:47:56 +0000 UTC FinishedAt: 2026-08-02 04:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 00:47:56 +0000 UTC FinishedAt: 2026-08-02 04:37:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 00:47:56 +0000 UTC FinishedAt: 2026-08-02 00:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 00:47:56 +0000 UTC FinishedAt: 2026-08-02 00:48:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowqmwzc/series-workflowqmwzc-convert-artifact-4183170655/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 00:48:06 +0000 UTC FinishedAt: 2026-08-02 01:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 00:48:06 +0000 UTC FinishedAt: 2026-08-02 01:10:07 +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:*c80bab9c-de4d-4f30-8042-a622a84be2e5,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-workflowqmwzc/series-workflowqmwzc-convert-artifact-4183170655/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": "52a5f387-a6a3-4478-9dbe-403f230dc61c", "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-workflowqmwzc/series-workflowqmwzc-build-action-2255029093/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 00:48:06 +0000 UTC FinishedAt: 2026-08-02 01:09:37 +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:*c80bab9c-de4d-4f30-8042-a622a84be2e5,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-workflowqmwzc/series-workflowqmwzc-convert-artifact-4183170655/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": "52a5f387-a6a3-4478-9dbe-403f230dc61c", "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-workflowqmwzc/series-workflowqmwzc-build-action-2255029093/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 01:10:07 +0000 UTC FinishedAt: 2026-08-02 01:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 01:10:07 +0000 UTC FinishedAt: 2026-08-02 01:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 01:10:07 +0000 UTC FinishedAt: 2026-08-02 01:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 01:10:07 +0000 UTC FinishedAt: 2026-08-02 01:10:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowqmwzc/series-workflowqmwzc-convert-artifact-1360265966/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 01:10:17 +0000 UTC FinishedAt: 2026-08-02 01:12:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 01:10:17 +0000 UTC FinishedAt: 2026-08-02 01:12:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*52a5f387-a6a3-4478-9dbe-403f230dc61c,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-workflowqmwzc/series-workflowqmwzc-build-action-2255029093/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-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 01:12:16 +0000 UTC FinishedAt: 2026-08-02 01:12:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 01:12:16 +0000 UTC FinishedAt: 2026-08-02 01:12:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 01:12:16 +0000 UTC FinishedAt: 2026-08-02 01:34:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 01:12:16 +0000 UTC FinishedAt: 2026-08-02 01:34:02 +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:*c80bab9c-de4d-4f30-8042-a622a84be2e5,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-workflowqmwzc/series-workflowqmwzc-convert-artifact-1360265966/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": "4f48996c-f0f6-467d-ba88-841acbd05833", "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-workflowqmwzc/series-workflowqmwzc-build-action-1195234306/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 01:12:16 +0000 UTC FinishedAt: 2026-08-02 01:33:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c80bab9c-de4d-4f30-8042-a622a84be2e5,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-workflowqmwzc/series-workflowqmwzc-convert-artifact-1360265966/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": "4f48996c-f0f6-467d-ba88-841acbd05833", "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-workflowqmwzc/series-workflowqmwzc-build-action-1195234306/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 01:34:02 +0000 UTC FinishedAt: 2026-08-02 01:34:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 01:34:02 +0000 UTC FinishedAt: 2026-08-02 01:34:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 01:34:02 +0000 UTC FinishedAt: 2026-08-02 01:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 01:34:02 +0000 UTC FinishedAt: 2026-08-02 01:35:54 +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:*4f48996c-f0f6-467d-ba88-841acbd05833,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-workflowqmwzc/series-workflowqmwzc-build-action-1195234306/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-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 01:36:04 +0000 UTC FinishedAt: 2026-08-02 04:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 01:36:04 +0000 UTC FinishedAt: 2026-08-02 04:37:55 +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":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"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:*52a5f387-a6a3-4478-9dbe-403f230dc61c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f48996c-f0f6-467d-ba88-841acbd05833,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-workflowqmwzc/series-workflowqmwzc-build-action-2255029093/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-workflowqmwzc/series-workflowqmwzc-build-action-1195234306/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 01:36:04 +0000 UTC FinishedAt: 2026-08-02 01:36:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 01:36:04 +0000 UTC FinishedAt: 2026-08-02 01:36:10 +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":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"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-workflowqmwzc/series-workflowqmwzc-convert-artifact-2477666195/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 01:36:04 +0000 UTC FinishedAt: 2026-08-02 01:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 01:36:04 +0000 UTC FinishedAt: 2026-08-02 01:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 01:36:04 +0000 UTC FinishedAt: 2026-08-02 01:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 01:36:14 +0000 UTC FinishedAt: 2026-08-02 04:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqmwzc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["follow_pfnmap_start","generic_access_phys","__kvm_faultin_pfn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_IOMMU_TYPE1","ACRN_GUEST"],"series_id":"d290b1a7-9dce-4b34-842a-5b4e31e20440","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 01:36:14 +0000 UTC FinishedAt: 2026-08-02 04:37:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*52a5f387-a6a3-4478-9dbe-403f230dc61c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f48996c-f0f6-467d-ba88-841acbd05833,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-workflowqmwzc/series-workflowqmwzc-build-action-2255029093/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-workflowqmwzc/series-workflowqmwzc-build-action-1195234306/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-workflowqmwzc/series-workflowqmwzc-convert-artifact-2477666195/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,}